salix/db/routines/vn/procedures/entry_splitByShelving.sql

124 lines
2.7 KiB
MySQL
Raw Normal View History

DELIMITER $$
2024-11-13 08:03:44 +00:00
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`entry_splitByShelving`(
2024-11-13 10:15:31 +00:00
vShelvingCode VARCHAR(10),
2024-11-13 08:03:44 +00:00
vFromEntryFk INT,
vToEntryFk INT
)
BEGIN
/**
2024-11-13 08:03:44 +00:00
* Divide las compras entre dos entradas de
* acuerdo con lo ubicado en una matricula.
*
2024-11-13 08:03:44 +00:00
* @param vShelvingCode Código de vn.shelving
* @param vFromEntryFk Entrada origen
* @param vToEntryFk Entrada destino
*/
DECLARE vBuyFk INT;
2024-07-04 06:59:22 +00:00
DECLARE vIshStickers INT;
DECLARE vBuyStickers INT;
DECLARE vDone BOOLEAN DEFAULT FALSE;
DECLARE cur CURSOR FOR
2024-11-13 10:15:31 +00:00
SELECT bb.id buyFk,
2024-08-07 05:12:29 +00:00
LEAST(bb.stickers, FLOOR(ish.visible / ish.packing)) ishStickers,
2024-07-04 06:59:22 +00:00
bb.stickers buyStickers
FROM itemShelving ish
2024-11-26 17:01:49 +00:00
JOIN shelving sh ON sh.id = ish.shelvingFk
2024-07-04 06:59:22 +00:00
JOIN (SELECT b.id, b.itemFk, b.stickers
FROM buy b
WHERE b.entryFk = vFromEntryFk
ORDER BY b.stickers DESC
LIMIT 10000000000000000000) bb ON bb.itemFk = ish.itemFk
2024-11-26 17:01:49 +00:00
WHERE sh.code = vShelvingCode COLLATE utf8_general_ci
2024-07-04 06:59:22 +00:00
AND NOT ish.isSplit
GROUP BY ish.id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
OPEN cur;
read_loop: LOOP
SET vDone = FALSE;
2024-07-04 06:59:22 +00:00
FETCH cur INTO vBuyFk, vIshStickers, vBuyStickers;
IF vDone THEN
LEAVE read_loop;
END IF;
IF vIshStickers = vBuyStickers THEN
UPDATE buy
SET entryFk = vToEntryFk
WHERE id = vBuyFk;
ELSE
UPDATE buy
SET stickers = stickers - vIshStickers,
quantity = stickers * packing
WHERE id = vBuyFk;
INSERT INTO buy(entryFk,
itemFk,
2024-07-04 06:59:22 +00:00
quantity,
buyingValue,
freightValue,
isIgnored,
2024-07-04 06:59:22 +00:00
stickers,
packing,
`grouping`,
groupingMode,
comissionValue,
packageValue,
location,
packagingFk,
price1,
price2,
price3,
minPrice,
workerFk,
isChecked,
isPickedOff,
ektFk,
weight,
deliveryFk,
2024-07-04 06:59:22 +00:00
itemOriginalFk)
SELECT
vToEntryFk,
itemFk,
vIshStickers * packing,
buyingValue,
freightValue,
isIgnored,
vIshStickers,
packing,
`grouping`,
groupingMode,
comissionValue,
packageValue,
location,
packagingFk,
price1,
price2,
price3,
minPrice,
workerFk,
isChecked,
isPickedOff,
ektFk,
weight,
deliveryFk,
itemOriginalFk
FROM buy
WHERE id = vBuyFk;
UPDATE buy SET printedStickers = vIshStickers WHERE id = LAST_INSERT_ID();
END IF;
2024-11-13 08:03:44 +00:00
UPDATE itemShelving ish
JOIN shelving sh ON sh.id = ish.shelvingFk
SET ish.isSplit = TRUE
WHERE sh.code = vShelvingCode COLLATE utf8_general_ci;
2024-07-04 06:59:22 +00:00
END LOOP;
CLOSE cur;
END$$
DELIMITER ;