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

319 lines
7.2 KiB
MySQL
Raw Normal View History

2024-03-28 10:40:18 +00:00
DELIMITER $$
2024-08-20 08:06:10 +00:00
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE vn.sale_boxPickingPrint(
2024-11-27 17:19:57 +00:00
vPrinterFk INT,
vSaleFk INT,
vPacking INT,
vSectorFk INT,
vUserFk INT,
vPackagingFk VARCHAR(10),
vPackingSiteFk INT
)
2024-03-28 10:40:18 +00:00
BEGIN
2024-11-27 17:19:57 +00:00
/**
* Splits a line of sale to a different ticket and prints the transport sticker
*
* @param vPrinterFk Id printer
* @param vSaleFk Id sale
* @param vPacking Id packing
* @param vSectorFk Id sector
* @param vUserFk Id user
* @param vPackagingFk Id packaging
* @param vPackingSiteFk Id PackingSite
2024-03-28 10:40:18 +00:00
*/
DECLARE vAgencyModeFk INT;
DECLARE vConcept VARCHAR(30);
DECLARE vExpeditionFk INT;
DECLARE vItemFk INT;
DECLARE vItemShelvingFk INT;
DECLARE vItemShelvingSaleFk INT;
DECLARE vItemShelvingSaleFk_old INT;
DECLARE vLastExpeditionTimeStamp DATETIME;
DECLARE vMaxPhoneLength INT DEFAULT 11;
DECLARE vMaxStreetLength INT DEFAULT 36;
DECLARE vNewSaleFk INT;
DECLARE vNewTicketFk INT;
DECLARE vParkingCode VARCHAR(10);
DECLARE vQuantity INT;
DECLARE vRemainder INT DEFAULT 0;
DECLARE vRemainderSaleFk INT;
2024-11-14 08:59:01 +00:00
DECLARE vShelvingFk VARCHAR(10);
2024-03-28 10:40:18 +00:00
DECLARE vTicketFk INT;
2024-11-27 17:19:57 +00:00
SELECT quantity,
quantity MOD vPacking,
ticketFk,
itemFk,
concept
2024-03-28 10:40:18 +00:00
INTO vQuantity,
vRemainder,
vTicketFk,
vItemFk,
vConcept
FROM sale s
2024-11-27 17:19:57 +00:00
WHERE id = vSaleFk;
2024-03-28 10:40:18 +00:00
IF vRemainder THEN
UPDATE sale SET quantity = quantity - vRemainder WHERE id = vSaleFk;
2024-11-27 17:19:57 +00:00
INSERT INTO sale(
ticketFk,
itemFk,
quantity,
price,
foreignPrice,
discount,
concept
)SELECT ticketFk,
itemFk,
vRemainder,
price,
foreignPrice,
discount,
concept
FROM sale
2024-03-28 10:40:18 +00:00
WHERE id = vSaleFk;
SET vRemainderSaleFk = LAST_INSERT_ID();
INSERT INTO saleComponent(saleFk, componentFk, value)
SELECT vRemainderSaleFk, componentFk, value
FROM saleComponent
WHERE saleFk = vSaleFk;
END IF;
2024-04-01 06:47:47 +00:00
2024-03-28 10:40:18 +00:00
w1: WHILE vQuantity >= vPacking DO
2024-04-01 06:43:26 +00:00
SET vQuantity = vQuantity - vPacking;
2024-03-28 10:40:18 +00:00
SET vItemShelvingFk = NULL;
SELECT sub.id
INTO vItemShelvingFk
FROM productionConfig pc
JOIN (
SELECT ish.id,
ish.visible - IFNULL(SUM(iss.quantity),0) available,
p.pickingOrder,
ish.created
FROM itemShelving ish
2024-11-13 08:03:44 +00:00
JOIN shelving sh ON sh.id = ish.shelvingFk
2024-03-28 10:40:18 +00:00
JOIN parking p ON p.id = sh.parkingFk
LEFT JOIN itemShelvingSale iss
ON iss.itemShelvingFk = ish.id
AND iss.created >= CURDATE()
AND iss.isPicked = FALSE
WHERE ish.itemFk = vItemFk
AND p.sectorFk = vSectorFk
GROUP BY ish.id
HAVING available >= vPacking) sub
ORDER BY IF(pc.orderMode = 'Location',sub.pickingOrder, sub.created)
LIMIT 1;
IF vItemShelvingFk THEN
2024-04-01 06:43:26 +00:00
INSERT INTO itemShelvingSale
2024-03-28 10:40:18 +00:00
SET itemShelvingFk = vItemShelvingFk,
saleFk = vSaleFk,
quantity = vPacking,
userFk = vUserFk,
isPicked = TRUE;
SET vItemShelvingSaleFk = LAST_INSERT_ID();
2024-04-01 06:43:26 +00:00
2024-03-28 10:40:18 +00:00
UPDATE sale SET isPicked = FALSE WHERE id = vSaleFk;
ELSE
LEAVE w1;
END IF;
SET vNewTicketFk = NULL;
SELECT MAX(t.id) INTO vNewTicketFk
FROM ticket t
JOIN ticketLastState tls ON tls.ticketFk = t.id
JOIN (SELECT addressFk, clientFk, date(shipped) shipped, warehouseFk
FROM ticket
WHERE id = vTicketFk) tt
ON tt.addressFk = t.addressFk
AND tt.clientFk = t.clientFk
AND t.shipped BETWEEN tt.shipped AND util.dayend(tt.shipped)
AND t.warehouseFk = tt.warehouseFk
2024-11-27 17:19:57 +00:00
WHERE tls.name = 'Encajado';
2024-03-28 10:40:18 +00:00
IF ISNULL(vNewTicketFk) THEN
INSERT INTO ticket( clientFk,
2024-11-27 17:19:57 +00:00
shipped,
addressFk,
agencyModeFk,
nickname,
warehouseFk,
companyFk,
landed,
zoneFk,
zonePrice,
zoneBonus,
routeFk,
priority,
hasPriority,
clonedFrom
)SELECT clientFk,
2024-03-28 10:40:18 +00:00
shipped,
addressFk,
agencyModeFk,
nickname,
warehouseFk,
companyFk,
landed,
zoneFk,
zonePrice,
zoneBonus,
routeFk,
priority,
hasPriority,
id
FROM ticket
WHERE id = vTicketFk;
SET vNewTicketFk = LAST_INSERT_ID();
INSERT INTO ticketTracking(ticketFk, stateFk, userFk)
SELECT vNewTicketFk, id, vUserFk
FROM state
WHERE code = 'PACKED';
END IF;
UPDATE sale SET quantity = quantity - vPacking WHERE id = vSaleFk;
2024-09-11 10:47:51 +00:00
UPDATE itemShelving
2024-11-27 17:19:57 +00:00
SET visible = visible - vPacking,
available = available - vPacking
WHERE id = vItemShelvingFk;
2024-03-28 10:40:18 +00:00
SET vNewSaleFk = NULL;
SELECT MAX(id) INTO vNewSaleFk
FROM sale
WHERE ticketFk = vNewTicketFk
AND itemFk = vItemFk;
IF vNewSaleFk THEN
UPDATE sale
SET quantity = quantity + vPacking
WHERE id = vNewSaleFk;
SET vItemShelvingSaleFk_old = NULL;
SELECT MAX(id) INTO vItemShelvingSaleFk_old
FROM itemShelvingSale
WHERE itemShelvingFk = vItemShelvingFk
AND saleFk = vNewSaleFk;
IF vItemShelvingSaleFk_old THEN
UPDATE itemShelvingSale
SET quantity = quantity + vPacking
WHERE id = vItemShelvingSaleFk_old;
DELETE FROM itemShelvingSale
WHERE id = vItemShelvingSaleFk;
SET vItemShelvingSaleFk = vItemShelvingSaleFk_old;
2024-04-01 06:43:26 +00:00
ELSE
2024-03-28 10:40:18 +00:00
UPDATE itemShelvingSale
SET saleFk = vNewSaleFk
2024-04-01 06:43:26 +00:00
WHERE id = vItemShelvingSaleFk;
2024-03-28 10:40:18 +00:00
END IF;
ELSE
2024-11-27 17:19:57 +00:00
INSERT INTO sale(
ticketFk,
itemFk,
concept,
quantity,
discount,
price,
foreignPrice
)SELECT vNewTicketFk,
itemFk,
concept,
vPacking,
discount,
price,
foreignPrice
2024-03-28 10:40:18 +00:00
FROM sale
WHERE id = vSaleFk;
SET vNewSaleFk = LAST_INSERT_ID();
INSERT INTO saleComponent(saleFk, componentFk, value, isGreuge)
SELECT vNewSaleFk, componentFk, value, isGreuge
FROM saleComponent
WHERE saleFk = vSaleFk;
2024-04-01 06:43:26 +00:00
UPDATE itemShelvingSale
SET saleFk = vNewSaleFk
WHERE id = vItemShelvingSaleFk;
2024-03-28 10:40:18 +00:00
END IF;
INSERT IGNORE INTO saleTracking(saleFk, isChecked, workerFk, stateFk)
SELECT vNewSaleFk, TRUE, vUserFk, id
FROM state
WHERE code = 'PREPARED';
SELECT agencyModeFk INTO vAgencyModeFk
FROM ticket
WHERE id = vNewTicketFk;
INSERT INTO expedition(
2024-11-27 17:19:57 +00:00
agencyModeFk,
ticketFk,
freightItemFk,
workerFk,
packagingFk,
itemPackingTypeFk,
hostFk,
packingSiteFk,
monitorId,
started,
ended
)SELECT vAgencyModeFk,
2024-03-28 10:40:18 +00:00
vNewTicketFk,
2024-04-01 06:55:21 +00:00
pc.defaultFreightItemFk,
2024-03-28 10:40:18 +00:00
vUserFk,
vPackagingFk,
ps.code,
h.code,
vPackingSiteFk,
ps.monitorId,
IFNULL(vLastExpeditionTimeStamp, NOW()),
NOW()
FROM packingSite ps
JOIN host h ON h.id = ps.hostFk
2024-04-01 06:55:21 +00:00
JOIN productionConfig pc
WHERE ps.id = vPackingSiteFk;
2024-03-28 10:40:18 +00:00
SET vExpeditionFk = LAST_INSERT_ID();
SET vLastExpeditionTimeStamp = NOW();
CALL dipole.expedition_Add(vExpeditionFk,vPrinterFk, TRUE);
SELECT shelvingFk, p.code
2024-11-14 08:59:01 +00:00
INTO vShelvingFk, vParkingCode
2024-03-28 10:40:18 +00:00
FROM itemShelving ish
2024-11-13 08:03:44 +00:00
JOIN shelving sh ON sh.id = ish.shelvingFk
2024-03-28 10:40:18 +00:00
JOIN parking p ON p.id = sh.parkingFk
WHERE ish.id = vItemShelvingFk;
UPDATE dipole.expedition_PrintOut
SET isPrinted = FALSE,
itemFk = vItemFk,
quantity = vPacking,
longName = vConcept,
2024-11-14 08:59:01 +00:00
shelvingFk = vShelvingFk,
2024-03-28 10:40:18 +00:00
parkingCode = vParkingCode,
phone = RIGHT(phone,vMaxPhoneLength),
street = RIGHT(street, vMAxStreetLength)
WHERE expeditionFk = vExpeditionFk;
DELETE FROM sale
WHERE quantity = 0
AND id = vSaleFk;
END WHILE;
END$$
DELIMITER ;