52 lines
1.2 KiB
SQL
52 lines
1.2 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`vn`@`localhost`
|
|
PROCEDURE `hedera`.`orderRow_updateOverstocking`(vOrderFk INT)
|
|
BEGIN
|
|
/**
|
|
* Set amount = 0 to avoid overbooking sales
|
|
*
|
|
* @param vOrderFk hedera.order.id
|
|
*/
|
|
DECLARE vCalcFk INT;
|
|
DECLARE vDone BOOL;
|
|
DECLARE vWarehouseFk INT;
|
|
|
|
DECLARE cWarehouses CURSOR FOR
|
|
SELECT DISTINCT warehouseFk
|
|
FROM orderRow
|
|
WHERE orderFk = vOrderFk
|
|
AND shipment = util.VN_CURDATE();
|
|
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
|
|
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
BEGIN
|
|
ROLLBACK;
|
|
RESIGNAL;
|
|
END;
|
|
|
|
OPEN cWarehouses;
|
|
checking: LOOP
|
|
SET vDone = FALSE;
|
|
|
|
FETCH cWarehouses INTO vWarehouseFk;
|
|
|
|
IF vDone THEN
|
|
LEAVE checking;
|
|
END IF;
|
|
|
|
CALL cache.available_refresh(vCalcFk, FALSE, vWarehouseFk, util.VN_CURDATE());
|
|
|
|
UPDATE orderRow r
|
|
JOIN `order` o ON o.id = r.orderFk
|
|
JOIN orderConfig oc
|
|
JOIN cache.available a ON a.calc_id = vCalcFk AND a.item_id = r.itemFk
|
|
SET r.amount = 0
|
|
WHERE ADDTIME(o.rowUpdated, oc.reserveTime) < util.VN_NOW()
|
|
AND a.available <= 0
|
|
AND r.warehouseFk = vWarehouseFk
|
|
AND r.orderFk = vOrderFk;
|
|
END LOOP;
|
|
CLOSE cWarehouses;
|
|
END$$
|
|
DELIMITER ; |