fix: refs #7781 prevent pallet merge #2792
|
@ -5,22 +5,26 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`expeditionPallet_buil
|
||||||
vWorkerFk INT,
|
vWorkerFk INT,
|
||||||
OUT vPalletFk INT
|
OUT vPalletFk INT
|
||||||
)
|
)
|
||||||
BEGIN
|
proc: BEGIN
|
||||||
/** Construye un pallet de expediciones.
|
/**
|
||||||
|
* Builds an expedition pallet.
|
||||||
*
|
*
|
||||||
* Primero comprueba si esas expediciones ya pertenecen a otro pallet,
|
* First, it checks if these expeditions already belong to another pallet,
|
||||||
* en cuyo caso actualiza ese pallet.
|
* in which case it returns an error.
|
||||||
*
|
*
|
||||||
* @param vExpeditions JSON_ARRAY con esta estructura [exp1, exp2, exp3, ...]
|
* @param vExpeditions JSON_ARRAY with this structure [exp1, exp2, exp3, ...]
|
||||||
* @param vArcId INT Identificador de arcRead
|
* @param vArcId INT Identifier of arcRead
|
||||||
* @param vWorkerFk INT Identificador de worker
|
* @param vWorkerFk INT Identifier of worker
|
||||||
* @param out vPalletFk Identificador de expeditionPallet
|
* @param out vPalletFk Identifier of expeditionPallet
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DECLARE vCounter INT;
|
DECLARE vCounter INT;
|
||||||
DECLARE vExpeditionFk INT;
|
DECLARE vExpeditionFk INT;
|
||||||
DECLARE vTruckFk INT;
|
DECLARE vTruckFk INT;
|
||||||
DECLARE vPrinterFk INT;
|
DECLARE vPrinterFk INT;
|
||||||
DECLARE vExpeditionStateTypeFk INT;
|
DECLARE vExpeditionStateTypeFk INT;
|
||||||
|
DECLARE vFreeExpeditionCount INT;
|
||||||
|
DECLARE vExpeditionWithPallet INT;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tExpedition (
|
CREATE OR REPLACE TEMPORARY TABLE tExpedition (
|
||||||
expeditionFk INT,
|
expeditionFk INT,
|
||||||
|
@ -44,48 +48,63 @@ BEGIN
|
||||||
WHERE e.id = vExpeditionFk;
|
WHERE e.id = vExpeditionFk;
|
||||||
END WHILE;
|
END WHILE;
|
||||||
|
|
||||||
SELECT palletFk INTO vPalletFk
|
SELECT COUNT(expeditionFk) INTO vFreeExpeditionCount
|
||||||
FROM (
|
FROM tExpedition
|
||||||
SELECT palletFk, count(*) n
|
WHERE palletFk IS NULL;
|
||||||
FROM tExpedition
|
|
||||||
WHERE palletFk > 0
|
|
||||||
GROUP BY palletFk
|
|
||||||
ORDER BY n DESC
|
|
||||||
LIMIT 100
|
|
||||||
) sub
|
|
||||||
LIMIT 1;
|
|
||||||
|
|
||||||
IF vPalletFk IS NULL THEN
|
SELECT COUNT(expeditionFk) INTO vExpeditionWithPallet
|
||||||
SELECT roadmapStopFk INTO vTruckFk
|
FROM tExpedition
|
||||||
FROM (
|
WHERE palletFk;
|
||||||
SELECT rm.roadmapStopFk, count(*) n
|
|
||||||
FROM routesMonitor rm
|
|
||||||
JOIN tExpedition e ON e.routeFk = rm.routeFk
|
|
||||||
GROUP BY roadmapStopFk
|
|
||||||
ORDER BY n DESC
|
|
||||||
LIMIT 1
|
|
||||||
) sub;
|
|
||||||
|
|
||||||
IF vTruckFk IS NULL THEN
|
IF vExpeditionWithPallet THEN
|
||||||
CALL util.throw ('TRUCK_NOT_AVAILABLE');
|
UPDATE arcRead
|
||||||
END IF;
|
SET error = (
|
||||||
|
SELECT GROUP_CONCAT(expeditionFk SEPARATOR ', ')
|
||||||
INSERT INTO expeditionPallet SET truckFk = vTruckFk;
|
FROM tExpedition
|
||||||
|
WHERE palletFk
|
||||||
SET vPalletFk = LAST_INSERT_ID();
|
)
|
||||||
|
WHERE id = vArcId;
|
||||||
|
LEAVE proc;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
IF NOT vFreeExpeditionCount THEN
|
||||||
|
CALL util.throw ('NO_FREE_EXPEDITIONS');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SELECT roadmapStopFk INTO vTruckFk
|
||||||
|
FROM (
|
||||||
|
SELECT rm.roadmapStopFk, count(*) n
|
||||||
|
FROM routesMonitor rm
|
||||||
|
JOIN tExpedition e ON e.routeFk = rm.routeFk
|
||||||
|
WHERE e.palletFk IS NULL
|
||||||
|
GROUP BY roadmapStopFk
|
||||||
|
ORDER BY n DESC
|
||||||
|
LIMIT 1
|
||||||
|
) sub;
|
||||||
|
|
||||||
|
IF vTruckFk IS NULL THEN
|
||||||
pablone marked this conversation as resolved
|
|||||||
|
CALL util.throw ('TRUCK_NOT_AVAILABLE');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
INSERT INTO expeditionPallet SET truckFk = vTruckFk;
|
||||||
|
|
||||||
|
SET vPalletFk = LAST_INSERT_ID();
|
||||||
|
|
||||||
INSERT INTO expeditionScan(expeditionFk, palletFk, workerFk)
|
INSERT INTO expeditionScan(expeditionFk, palletFk, workerFk)
|
||||||
SELECT expeditionFk, vPalletFk, vWorkerFk
|
SELECT expeditionFk, vPalletFk, vWorkerFk
|
||||||
FROM tExpedition
|
FROM tExpedition
|
||||||
ON DUPLICATE KEY UPDATE palletFk = vPalletFk, workerFk = vWorkerFk;
|
WHERE palletFk IS NULL;
|
||||||
|
|
||||||
SELECT id INTO vExpeditionStateTypeFk
|
SELECT id INTO vExpeditionStateTypeFk
|
||||||
FROM expeditionStateType
|
FROM expeditionStateType
|
||||||
WHERE code = 'PALLETIZED';
|
WHERE code = 'PALLETIZED';
|
||||||
|
|
||||||
INSERT INTO expeditionState(expeditionFk, typeFk)
|
INSERT INTO expeditionState(expeditionFk, typeFk)
|
||||||
SELECT expeditionFk, vExpeditionStateTypeFk FROM tExpedition;
|
SELECT expeditionFk, vExpeditionStateTypeFk
|
||||||
|
FROM tExpedition
|
||||||
|
WHERE palletFk IS NULL;
|
||||||
|
|
||||||
|
UPDATE arcRead SET error = NULL WHERE id = vArcId;
|
||||||
|
|
||||||
SELECT printerFk INTO vPrinterFk FROM arcRead WHERE id = vArcId;
|
SELECT printerFk INTO vPrinterFk FROM arcRead WHERE id = vArcId;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
No entenc. Si ja existeix, no actualitza ?
I el WHERE no afecta al SELECT, sino a la taula... això funciona ?