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