diff --git a/db/routines/stock/procedures/buyLot_addPick.sql b/db/routines/stock/procedures/buyLot_addPick.sql index 99b99afcf0..c6df648a68 100644 --- a/db/routines/stock/procedures/buyLot_addPick.sql +++ b/db/routines/stock/procedures/buyLot_addPick.sql @@ -6,9 +6,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`buyLot_addPick`( ) BEGIN INSERT INTO buyPick - SET - buyFk = vSelf, - outFk = outFk, + SET buyFk = vSelf, + outFk = vOutFk, quantity = vQuantity ON DUPLICATE KEY UPDATE quantity = quantity + vQuantity; diff --git a/db/routines/stock/procedures/buyLot_requestQuantity.sql b/db/routines/stock/procedures/buyLot_requestQuantity.sql index 05554f9ad4..90adaee11a 100644 --- a/db/routines/stock/procedures/buyLot_requestQuantity.sql +++ b/db/routines/stock/procedures/buyLot_requestQuantity.sql @@ -3,6 +3,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`buyLot_requestQu vSelf INT, vRequested INT, vDated DATETIME, + vOutFk INT, OUT vSupplied INT) BEGIN /** @@ -11,11 +12,12 @@ BEGIN * * @param vSelf The buyLot reference * @param vRequested The requested quantity - * @param vDate The starting date for the associated buyOuts + * @param vDate The starting date for the associated outs + * @param vOutFk The if of requesting out * @param vSupplied The supplied quantity */ DECLARE vPickFk INT; - DECLARE vOutFk INT; + DECLARE vPickOutFk INT; DECLARE vPickQuantity INT; DECLARE vPickGranted INT; DECLARE vDone BOOL; @@ -25,8 +27,8 @@ BEGIN FROM buyPick p JOIN buyOut o USING(outFk) WHERE p.buyFk = vSelf - AND o.dated > vDated - ORDER BY o.dated DESC, o.created DESC; + AND (o.dated, o.outFk) > (vDated, vOutFk) + ORDER BY o.dated DESC, o.created DESC, o.outFk DESC; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; @@ -37,7 +39,7 @@ BEGIN myLoop: LOOP SET vDone = FALSE; - FETCH vPicks INTO vPickFk, vOutFk, vPickQuantity; + FETCH vPicks INTO vPickFk, vPickOutFk, vPickQuantity; IF vDone THEN LEAVE myLoop; @@ -50,7 +52,7 @@ BEGIN UPDATE buyOut SET isSync = FALSE, lack = lack + vPickGranted - WHERE outFk = vOutFk; + WHERE outFk = vPickOutFk; IF vSupplied >= vRequested THEN LEAVE myLoop; diff --git a/db/routines/stock/procedures/buyLot_sync.sql b/db/routines/stock/procedures/buyLot_sync.sql index e25153074e..fb390a569d 100644 --- a/db/routines/stock/procedures/buyLot_sync.sql +++ b/db/routines/stock/procedures/buyLot_sync.sql @@ -26,7 +26,7 @@ BEGIN AND itemFk = vItem AND dated >= vDated AND (vExpired IS NULL OR dated < vExpired) - ORDER BY dated, created; + ORDER BY dated, created, outFk; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; @@ -60,7 +60,7 @@ BEGIN END IF; IF vHasPicks AND vAvailable > 0 THEN - CALL buyOut_requestQuantity(vOutFk, vAvailable, vDated, vSuppliedFromRequest); + CALL buyOut_requestQuantity(vOutFk, vAvailable, vDated, vSelf, vSuppliedFromRequest); SET vSupplied = vSupplied + vSuppliedFromRequest; SET vAvailable = vAvailable - vSuppliedFromRequest; END IF; diff --git a/db/routines/stock/procedures/buyOut_requestQuantity.sql b/db/routines/stock/procedures/buyOut_requestQuantity.sql index 66a6ed6776..a459c537b5 100644 --- a/db/routines/stock/procedures/buyOut_requestQuantity.sql +++ b/db/routines/stock/procedures/buyOut_requestQuantity.sql @@ -3,6 +3,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`buyOut_requestQu vSelf INT, vRequested INT, vDated DATETIME, + vLotFk INT, OUT vSupplied INT) BEGIN /** @@ -12,10 +13,11 @@ BEGIN * @param vSelf The buyOut reference * @param vRequested The requested quantity * @param vDate The starting date for the associated lots + * @param vLotFk The if of requesting lot * @param vSupplied The supplied quantity */ DECLARE vPickFk INT; - DECLARE vLotFk INT; + DECLARE vPickLotFk INT; DECLARE vPickQuantity INT; DECLARE vPickGranted INT; DECLARE vDone BOOL; @@ -23,10 +25,10 @@ BEGIN DECLARE vPicks CURSOR FOR SELECT p.id, p.buyFk, p.quantity FROM buyPick p - JOIN buyOut o USING(outFk) - WHERE o.outFk = vSelf - AND o.dated > vDated - ORDER BY o.dated DESC; + JOIN buyLot l USING(buyFk) + WHERE p.outFk = vSelf + AND (l.dated, p.buyFk) > (vDated, vLotFk) + ORDER BY l.dated, p.buyFk; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; @@ -37,7 +39,7 @@ BEGIN myLoop: LOOP SET vDone = FALSE; - FETCH vPicks INTO vPickFk, vLotFk, vPickQuantity; + FETCH vPicks INTO vPickFk, vPickLotFk, vPickQuantity; IF vDone THEN LEAVE myLoop; @@ -50,7 +52,7 @@ BEGIN UPDATE buyLot SET isSync = FALSE, available = available + vPickGranted - WHERE buyFk = vLotFk; + WHERE buyFk = vPickLotFk; IF vSupplied >= vRequested THEN LEAVE myLoop; diff --git a/db/routines/stock/procedures/buyOut_sync.sql b/db/routines/stock/procedures/buyOut_sync.sql index 8914d52bc3..48f2491c3c 100644 --- a/db/routines/stock/procedures/buyOut_sync.sql +++ b/db/routines/stock/procedures/buyOut_sync.sql @@ -24,7 +24,7 @@ BEGIN AND itemFk = vItem AND dated <= vDated AND (expired IS NULL OR expired > vDated) - ORDER BY dated; + ORDER BY dated, buyFk; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; @@ -54,7 +54,7 @@ BEGIN END IF; IF vHasPicks AND vLack > 0 THEN - CALL buyLot_requestQuantity(vLotFk, vLack, vDated, vSuppliedFromRequest); + CALL buyLot_requestQuantity(vLotFk, vLack, vDated, vSelf, vSuppliedFromRequest); SET vSupplied = vSupplied + vSuppliedFromRequest; SET vLack = vLack - vSuppliedFromRequest; END IF; diff --git a/db/routines/stock/procedures/log_sync.sql b/db/routines/stock/procedures/log_sync.sql index bf76cec448..3c0dcfff8e 100644 --- a/db/routines/stock/procedures/log_sync.sql +++ b/db/routines/stock/procedures/log_sync.sql @@ -9,12 +9,12 @@ proc: BEGIN DECLARE vLots CURSOR FOR SELECT buyFk FROM buyLot WHERE !isSync - ORDER BY dated; + ORDER BY warehouseFk, itemFk, dated, buyFk; DECLARE vOuts CURSOR FOR SELECT outFk FROM buyOut WHERE !isSync - ORDER BY dated; + ORDER BY warehouseFk, itemFk, dated, created, outFk; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;