From ec960eab76abb6bd8530b6690749403ecc672377 Mon Sep 17 00:00:00 2001 From: Bernat Date: Fri, 14 Sep 2018 13:47:50 +0200 Subject: [PATCH] update structure db --- .../install/changes/1.1.0/04.orderAddItem.sql | 100 ++++++++++++++++++ .../changes/1.1.0/05.basketAddItem.sql | 19 ++++ 2 files changed, 119 insertions(+) create mode 100644 services/db/install/changes/1.1.0/04.orderAddItem.sql create mode 100644 services/db/install/changes/1.1.0/05.basketAddItem.sql diff --git a/services/db/install/changes/1.1.0/04.orderAddItem.sql b/services/db/install/changes/1.1.0/04.orderAddItem.sql new file mode 100644 index 000000000..c76d521e1 --- /dev/null +++ b/services/db/install/changes/1.1.0/04.orderAddItem.sql @@ -0,0 +1,100 @@ +USE `hedera`; +DROP procedure IF EXISTS `orderAddItem`; + +DELIMITER $$ +USE `hedera`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `orderAddItem`( + vWarehouse INT, + vItem INT, + vAmount INT, + vOrder INT) +BEGIN + DECLARE vRow INT; + DECLARE vAdd INT; + DECLARE vAvailable INT; + DECLARE vDone BOOL; + DECLARE vGrouping INT; + DECLARE vRate INT; + DECLARE vShipment DATE; + DECLARE vPrice DECIMAL(10,2); + + DECLARE cur CURSOR FOR + SELECT grouping, price, rate + FROM tmp.bionic_price + WHERE warehouse_id = vWarehouse + AND item_id = vItem + ORDER BY grouping DESC; + + DECLARE CONTINUE HANDLER FOR NOT FOUND + SET vDone = TRUE; + + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + ROLLBACK; + RESIGNAL; + END; + + CALL bionic_from_item (vItem); + + START TRANSACTION; + + SELECT shipped INTO vShipment + FROM tmp.travel_tree + WHERE warehouseFk = vWarehouse; + + SELECT available INTO vAvailable + FROM tmp.bionic_lot + WHERE warehouse_id = vWarehouse + AND item_id = vItem; + + IF vAmount > vAvailable + THEN + CALL util.throw ('ORDER_ROW_UNAVAILABLE'); + END IF; + + OPEN cur; + + l: LOOP + SET vDone = FALSE; + FETCH cur INTO vGrouping, vPrice, vRate; + + IF vDone THEN + LEAVE l; + END IF; + + SET vAdd = vAmount - MOD(vAmount, vGrouping); + SET vAmount = vAmount - vAdd; + + IF vAdd = 0 THEN + ITERATE l; + END IF; + + INSERT INTO order_row SET + order_id = vOrder, + item_id = vItem, + warehouse_id = vWarehouse, + shipment = vShipment, + rate = vRate, + amount = vAdd, + price = vPrice; + + SET vRow = LAST_INSERT_ID(); + + INSERT INTO order_component (order_row_id, component_id, price) + SELECT vRow, c.component_id, c.cost + FROM tmp.bionic_component c + JOIN bi.tarifa_componentes t + ON t.Id_Componente = c.component_id + AND (t.tarifa_class IS NULL OR t.tarifa_class = vRate) + WHERE c.warehouse_id = vWarehouse + AND c.item_id = vItem; + END LOOP; + + CLOSE cur; + COMMIT; + + CALL vn2008.bionic_free (); +END$$ + +DELIMITER ; + diff --git a/services/db/install/changes/1.1.0/05.basketAddItem.sql b/services/db/install/changes/1.1.0/05.basketAddItem.sql new file mode 100644 index 000000000..d2f149e43 --- /dev/null +++ b/services/db/install/changes/1.1.0/05.basketAddItem.sql @@ -0,0 +1,19 @@ +USE `hedera`; +DROP procedure IF EXISTS `basketAddItem`; + +DELIMITER $$ +USE `hedera`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `basketAddItem`( + vWarehouse INT, + vItem INT, + vAmount INT) +BEGIN + DECLARE vOrder INT; + + SET vOrder = myBasketGetId(); + + CALL orderAddItem(vWarehouse, vItem, vAmount, vOrder); +END$$ + +DELIMITER ; +