From 66613d6ab2b7525d39ff4c6ce57688f49226093b Mon Sep 17 00:00:00 2001
From: Johannes Hoermann <j.hoermann@adito.de>
Date: Wed, 17 Apr 2019 10:32:24 +0200
Subject: [PATCH] fix offer: delete offeritem

---
 process/OfferOrder_lib/process.js | 70 +++++++++----------------------
 1 file changed, 19 insertions(+), 51 deletions(-)

diff --git a/process/OfferOrder_lib/process.js b/process/OfferOrder_lib/process.js
index bb660ba440..e052a9b674 100644
--- a/process/OfferOrder_lib/process.js
+++ b/process/OfferOrder_lib/process.js
@@ -64,51 +64,6 @@ function ItemUtils(pOfferOrderId, pTableName) {
         }
     }
     
-    /**
-     * Deletes a node from an ItemTree Object within its subnodes. <br>
-     * If no ItemTree Object is passed, the class variable this.ItemTree will be used.
-     *
-     * @param {String} itemId req UID of item
-     * @param {Object} tree opt ItemTree Object to delete from
-     * @param {String[]} ids opt ids Array for all ItemIDs to save order
-     *
-     * @ignore
-     */
-    this._deleteNodes = function(itemId, tree, ids) {
-        if (tree == undefined)
-            tree = this.ItemTree;
-        if (ids == undefined)
-            ids = this.ItemIds;
-
-        __delete(tree[itemId]);
-
-        _deleteNode(itemId);
-
-        function __delete(pNode) {
-            for (var i = 0; i < pNode.ids.length; i++) {
-                __delete(tree[pNode.ids[i]]);
-                _deleteNode(pNode.ids[i]);
-            }
-        }
-        
-        function _deleteNode(itemId) {
-            //delete Object property
-            delete tree[itemId];
-
-            //delete id in global Array "ItemIds"
-            var idx = ids.indexOf(itemId);
-            if (idx > -1)
-                ids.splice(idx, 1);
-
-            //delete id in Array from property "ids" of Tree
-            for (var oiid in tree) {
-                idx = tree[oiid].ids.indexOf(itemId);
-                if (idx > -1)
-                    tree[oiid].ids.splice(idx, 1);
-            }
-        }
-    }
-    
     /**
      * Compares Positions & Sort of the passed ItemTree Object with the class variable this.ItemTree <br>
      * and updates differences in database.
@@ -346,23 +301,36 @@ ItemUtils.prototype.deletePartsList = function(itemId) {
     var statements = [];
 
     __itemDeleteStatement(itemId);
-
+    
     if (statements.length > 0)
         db.deletes(statements);
-
-    self._deleteNodes(itemId);
-
+    
+    // delete nodes from tree
+    _deleteNode(itemId)
+    deletedItemIds.forEach(_deleteNode);
+    
     return deletedItemIds;
     
+    function _deleteNode(pItemId) {
+        //delete Object property
+        delete self.ItemTree[pItemId];
+
+        //delete id in global Array "ItemIds"
+        var idx = self.ItemIds.indexOf(pItemId);
+        if (idx > -1)
+            self.ItemIds.splice(idx, 1);
+    }
+    
     //recursive function for building item delete statements 
     function __itemDeleteStatement(itemId) {        
         var itemsToDelete = self.ItemTree[itemId].ids;
         for (var i = 0; i < itemsToDelete.length; i++) {
+            
             //unshift due to foreign key constraints (Delete hierarchically starting at the bottom)                                           
             statements.unshift([self.tableName + "ITEM", SqlCondition.begin()
                                            .andPrepare(self.tableName + "ITEM." + self.tableName + "ITEMID", itemsToDelete[i])
                                            .build("1 = 2")]);
-                                           
+            
             deletedItemIds.push(itemsToDelete[i]);
             __itemDeleteStatement(itemsToDelete[i]);
         }
@@ -468,4 +436,4 @@ ItemUtils.prototype.reOrgItems = function() {
             }
         }
     }
-}
+}
\ No newline at end of file
-- 
GitLab