fix: version anterior
This commit is contained in:
parent
477ad30c4f
commit
f1d6503674
|
@ -12,29 +12,30 @@ BEGIN
|
||||||
DECLARE vLinesLimit INT;
|
DECLARE vLinesLimit INT;
|
||||||
DECLARE vTicketLines INT;
|
DECLARE vTicketLines INT;
|
||||||
DECLARE vVolumeLimit DECIMAL;
|
DECLARE vVolumeLimit DECIMAL;
|
||||||
DECLARE vSizeLimit INT;
|
|
||||||
DECLARE vTicketVolume DECIMAL;
|
DECLARE vTicketVolume DECIMAL;
|
||||||
|
DECLARE vSizeLimit INT;
|
||||||
DECLARE vMaxTickets INT;
|
DECLARE vMaxTickets INT;
|
||||||
DECLARE vStateCode VARCHAR(45);
|
DECLARE vStateFk VARCHAR(45);
|
||||||
DECLARE vFirstTicketFk INT;
|
DECLARE vFirstTicketFk INT;
|
||||||
|
DECLARE vHour INT;
|
||||||
|
DECLARE vMinute INT;
|
||||||
DECLARE vWorkerCode VARCHAR(3);
|
DECLARE vWorkerCode VARCHAR(3);
|
||||||
DECLARE vWagonCounter INT DEFAULT 1;
|
DECLARE vWagonCounter INT DEFAULT 0;
|
||||||
DECLARE vTicketFk INT;
|
DECLARE vTicketFk INT;
|
||||||
DECLARE vItemPackingTypeFk VARCHAR(1);
|
DECLARE vItemPackingTypeFk VARCHAR(1);
|
||||||
DECLARE vHasAssignedTickets BOOL;
|
DECLARE vHasAssignedTickets BOOLEAN;
|
||||||
DECLARE vHasUniqueCollectionTime BOOL;
|
DECLARE vHasUniqueCollectionTime BOOL;
|
||||||
DECLARE vHeight INT;
|
|
||||||
DECLARE vVolume INT;
|
|
||||||
DECLARE vLiters INT;
|
|
||||||
DECLARE vLines INT;
|
|
||||||
DECLARE vTotalLines INT DEFAULT 0;
|
|
||||||
DECLARE vTotalVolume INT DEFAULT 0;
|
|
||||||
DECLARE vFreeWagonFk INT;
|
|
||||||
DECLARE vDone INT DEFAULT FALSE;
|
DECLARE vDone INT DEFAULT FALSE;
|
||||||
|
DECLARE vLockName VARCHAR(215);
|
||||||
|
DECLARE vLockTime INT DEFAULT 30;
|
||||||
|
DECLARE vFreeWagonFk INT;
|
||||||
|
DECLARE vErrorNumber INT;
|
||||||
|
DECLARE vErrorMsg TEXT;
|
||||||
|
|
||||||
DECLARE vTickets CURSOR FOR
|
DECLARE c1 CURSOR FOR
|
||||||
SELECT ticketFk, `lines`, m3
|
SELECT ticketFk, `lines`, m3
|
||||||
FROM tmp.productionBuffer
|
FROM tmp.productionBuffer
|
||||||
|
WHERE ticketFk <> vFirstTicketFk
|
||||||
ORDER BY HH,
|
ORDER BY HH,
|
||||||
mm,
|
mm,
|
||||||
productionOrder DESC,
|
productionOrder DESC,
|
||||||
|
@ -47,6 +48,26 @@ BEGIN
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||||
|
|
||||||
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
GET DIAGNOSTICS CONDITION 1
|
||||||
|
vErrorNumber = MYSQL_ERRNO,
|
||||||
|
vErrorMsg = MESSAGE_TEXT;
|
||||||
|
|
||||||
|
CALL util.debugAdd('collection_new', JSON_OBJECT(
|
||||||
|
'errorNumber', vErrorNumber,
|
||||||
|
'errorMsg', vErrorMsg,
|
||||||
|
'lockName', vLockName,
|
||||||
|
'userFk', vUserFk,
|
||||||
|
'ticketFk', vTicketFk
|
||||||
|
)); -- Tmp
|
||||||
|
|
||||||
|
IF vLockName IS NOT NULL THEN
|
||||||
|
DO RELEASE_LOCK(vLockName);
|
||||||
|
END IF;
|
||||||
|
RESIGNAL;
|
||||||
|
END;
|
||||||
|
|
||||||
SELECT pc.ticketTrolleyMax * o.numberOfWagons,
|
SELECT pc.ticketTrolleyMax * o.numberOfWagons,
|
||||||
pc.hasUniqueCollectionTime,
|
pc.hasUniqueCollectionTime,
|
||||||
w.code,
|
w.code,
|
||||||
|
@ -57,26 +78,36 @@ BEGIN
|
||||||
o.trainFk,
|
o.trainFk,
|
||||||
o.linesLimit,
|
o.linesLimit,
|
||||||
o.volumeLimit,
|
o.volumeLimit,
|
||||||
o.sizeLimit
|
o.sizeLimit,
|
||||||
|
pc.collection_new_lockname
|
||||||
INTO vMaxTickets,
|
INTO vMaxTickets,
|
||||||
vHasUniqueCollectionTime,
|
vHasUniqueCollectionTime,
|
||||||
vWorkerCode,
|
vWorkerCode,
|
||||||
vWarehouseFk,
|
vWarehouseFk,
|
||||||
vItemPackingTypeFk,
|
vItemPackingTypeFk,
|
||||||
vStateCode,
|
vStateFk,
|
||||||
vWagons,
|
vWagons,
|
||||||
vTrainFk,
|
vTrainFk,
|
||||||
vLinesLimit,
|
vLinesLimit,
|
||||||
vVolumeLimit,
|
vVolumeLimit,
|
||||||
vSizeLimit
|
vSizeLimit,
|
||||||
FROM worker w
|
vLockName
|
||||||
JOIN operator o ON o.workerFk = w.id
|
FROM productionConfig pc
|
||||||
|
JOIN worker w ON w.id = vUserFk
|
||||||
JOIN state st ON st.`code` = 'ON_PREPARATION'
|
JOIN state st ON st.`code` = 'ON_PREPARATION'
|
||||||
JOIN productionConfig pc
|
JOIN operator o ON o.workerFk = vUserFk;
|
||||||
WHERE w.id = vUserFk;
|
|
||||||
|
SET vLockName = CONCAT_WS('/',
|
||||||
|
vLockName,
|
||||||
|
vWarehouseFk,
|
||||||
|
vItemPackingTypeFk
|
||||||
|
);
|
||||||
|
|
||||||
|
IF NOT GET_LOCK(vLockName, vLockTime) THEN
|
||||||
|
CALL util.throw(CONCAT('Cannot get lock: ', vLockName));
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- Se prepara el tren, con tantos vagones como sea necesario.
|
-- Se prepara el tren, con tantos vagones como sea necesario.
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tTrain
|
CREATE OR REPLACE TEMPORARY TABLE tTrain
|
||||||
(wagon INT,
|
(wagon INT,
|
||||||
shelve INT,
|
shelve INT,
|
||||||
|
@ -87,58 +118,59 @@ BEGIN
|
||||||
PRIMARY KEY(wagon, shelve))
|
PRIMARY KEY(wagon, shelve))
|
||||||
ENGINE = MEMORY;
|
ENGINE = MEMORY;
|
||||||
|
|
||||||
INSERT INTO tTrain (wagon, shelve, liters, `lines`, height)
|
WHILE vWagons > vWagonCounter DO
|
||||||
WITH RECURSIVE wagonSequence AS (
|
SET vWagonCounter = vWagonCounter + 1;
|
||||||
SELECT vWagonCounter wagon
|
|
||||||
UNION ALL
|
INSERT INTO tTrain(wagon, shelve, liters, `lines`, height)
|
||||||
SELECT wagon + 1 wagon
|
SELECT vWagonCounter, cv.`level` , cv.liters , cv.`lines` , cv.height
|
||||||
FROM wagonSequence
|
FROM collectionVolumetry cv
|
||||||
WHERE wagon < vWagonCounter + vWagons -1
|
WHERE cv.trainFk = vTrainFk
|
||||||
)
|
|
||||||
SELECT ws.wagon, cv.`level`, cv.liters, cv.`lines`, cv.height
|
|
||||||
FROM wagonSequence ws
|
|
||||||
JOIN vn.collectionVolumetry cv ON cv.trainFk = vTrainFk
|
|
||||||
AND cv.itemPackingTypeFk = vItemPackingTypeFk;
|
AND cv.itemPackingTypeFk = vItemPackingTypeFk;
|
||||||
|
END WHILE;
|
||||||
|
|
||||||
-- Esto desaparecerá cuando tengamos la table cache.ticket
|
-- Esto desaparecerá cuando tengamos la table cache.ticket
|
||||||
|
|
||||||
CALL productionControl(vWarehouseFk, 0);
|
CALL productionControl(vWarehouseFk, 0);
|
||||||
|
|
||||||
ALTER TABLE tmp.productionBuffer
|
ALTER TABLE tmp.productionBuffer
|
||||||
ADD COLUMN liters INT,
|
ADD COLUMN liters INT,
|
||||||
ADD COLUMN height INT;
|
ADD COLUMN height INT;
|
||||||
|
|
||||||
|
-- Se obtiene nº de colección.
|
||||||
|
INSERT INTO collection
|
||||||
|
SET itemPackingTypeFk = vItemPackingTypeFk,
|
||||||
|
trainFk = vTrainFk,
|
||||||
|
wagons = vWagons,
|
||||||
|
warehouseFk = vWarehouseFk;
|
||||||
|
|
||||||
|
SELECT LAST_INSERT_ID() INTO vCollectionFk;
|
||||||
|
|
||||||
-- Los tickets de recogida en Algemesí sólo se sacan si están asignados.
|
-- Los tickets de recogida en Algemesí sólo se sacan si están asignados.
|
||||||
-- Los pedidos con riesgo no se sacan aunque se asignen.
|
-- Los pedidos con riesgo no se sacan aunque se asignen.
|
||||||
|
DELETE pb.*
|
||||||
DELETE pb
|
|
||||||
FROM tmp.productionBuffer pb
|
FROM tmp.productionBuffer pb
|
||||||
JOIN state s ON s.id = pb.state
|
JOIN state s ON s.id = pb.state
|
||||||
WHERE (pb.agency = 'REC_ALGEMESI'
|
WHERE (pb.agency = 'REC_ALGEMESI'
|
||||||
AND s.code <> 'PICKER_DESIGNED')
|
AND s.code <> 'PICKER_DESIGNED')
|
||||||
OR pb.problem LIKE '%RIESGO%';
|
OR pb.problem LIKE '%RIESGO%';
|
||||||
|
|
||||||
-- Si hay tickets asignados, nos centramos exclusivamente en esos tickets
|
-- Comprobamos si hay tickets asignados. En ese caso, nos centramos
|
||||||
-- y los sacamos independientemente de problemas o tamaños
|
-- exclusivamente en esos tickets y los sacamos independientemente
|
||||||
|
-- de problemas o tamaños
|
||||||
SELECT EXISTS (
|
SELECT COUNT(*) INTO vHasAssignedTickets
|
||||||
SELECT TRUE
|
FROM tmp.productionBuffer pb
|
||||||
FROM tmp.productionBuffer pb
|
JOIN state s ON s.id = pb.state
|
||||||
JOIN state s ON s.id = pb.state
|
WHERE s.code = 'PICKER_DESIGNED'
|
||||||
WHERE s.code = 'PICKER_DESIGNED'
|
AND pb.workerCode = vWorkerCode;
|
||||||
AND pb.workerCode = vWorkerCode
|
|
||||||
) INTO vHasAssignedTickets;
|
|
||||||
|
|
||||||
-- Se dejan en la tabla tmp.productionBuffer sólo aquellos tickets adecuados
|
-- Se dejan en la tabla tmp.productionBuffer sólo aquellos tickets adecuados
|
||||||
|
|
||||||
IF vHasAssignedTickets THEN
|
IF vHasAssignedTickets THEN
|
||||||
DELETE pb
|
DELETE pb.*
|
||||||
FROM tmp.productionBuffer pb
|
FROM tmp.productionBuffer pb
|
||||||
JOIN state s ON s.id = pb.state
|
JOIN state s ON s.id = pb.state
|
||||||
WHERE s.code <> 'PICKER_DESIGNED'
|
WHERE s.code <> 'PICKER_DESIGNED'
|
||||||
OR pb.workerCode <> vWorkerCode;
|
OR pb.workerCode <> vWorkerCode;
|
||||||
ELSE
|
ELSE
|
||||||
DELETE pb
|
DELETE pb.*
|
||||||
FROM tmp.productionBuffer pb
|
FROM tmp.productionBuffer pb
|
||||||
JOIN state s ON s.id = pb.state
|
JOIN state s ON s.id = pb.state
|
||||||
JOIN agencyMode am ON am.id = pb.agencyModeFk
|
JOIN agencyMode am ON am.id = pb.agencyModeFk
|
||||||
|
@ -161,21 +193,13 @@ BEGIN
|
||||||
OR (NOT pb.H AND pb.V > 0 AND vItemPackingTypeFk = 'H')
|
OR (NOT pb.H AND pb.V > 0 AND vItemPackingTypeFk = 'H')
|
||||||
OR (NOT pb.V AND vItemPackingTypeFk = 'V')
|
OR (NOT pb.V AND vItemPackingTypeFk = 'V')
|
||||||
OR (pc.isPreviousPreparationRequired AND pb.previousWithoutParking)
|
OR (pc.isPreviousPreparationRequired AND pb.previousWithoutParking)
|
||||||
OR LENGTH(pb.problem)
|
OR LENGTH(pb.problem) > 0
|
||||||
OR pb.lines > vLinesLimit
|
OR pb.lines > vLinesLimit
|
||||||
OR pb.m3 > vVolumeLimit
|
OR pb.m3 > vVolumeLimit
|
||||||
OR sub.maxSize > vSizeLimit
|
OR sub.maxSize > vSizeLimit
|
||||||
OR pb.hasPlantTray;
|
OR pb.hasPlantTray;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- Hay que excluir aquellos que no tengan la misma hora de preparacion, si procede
|
|
||||||
IF vHasUniqueCollectionTime THEN
|
|
||||||
DELETE pb
|
|
||||||
FROM tmp.productionBuffer pb
|
|
||||||
JOIN tmp.productionBuffer pb2 ON pb2.ticketFk = vFirstTicketFk
|
|
||||||
AND (pb.HH <> pb2.HH OR pb.mm <> pb2.mm);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
SELECT ticketFk INTO vFirstTicketFk
|
SELECT ticketFk INTO vFirstTicketFk
|
||||||
FROM tmp.productionBuffer
|
FROM tmp.productionBuffer
|
||||||
ORDER BY HH,
|
ORDER BY HH,
|
||||||
|
@ -187,38 +211,46 @@ BEGIN
|
||||||
routeFk,
|
routeFk,
|
||||||
ticketFk
|
ticketFk
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
|
-- Hay que excluir aquellos que no tengan la misma hora de preparacion, si procede
|
||||||
|
IF vHasUniqueCollectionTime THEN
|
||||||
|
DELETE pb
|
||||||
|
FROM tmp.productionBuffer pb
|
||||||
|
JOIN tmp.productionBuffer pb2 ON pb2.ticketFk = vFirstTicketFk
|
||||||
|
AND (pb.HH <> pb2.HH OR pb.mm <> pb2.mm);
|
||||||
|
END IF;
|
||||||
|
|
||||||
OPEN vTickets;
|
SET vTicketFk = vFirstTicketFk;
|
||||||
l: LOOP
|
SET @lines = 0;
|
||||||
|
SET @volume = 0;
|
||||||
|
|
||||||
|
OPEN c1;
|
||||||
|
read_loop: LOOP
|
||||||
SET vDone = FALSE;
|
SET vDone = FALSE;
|
||||||
FETCH vTickets INTO vTicketFk, vTicketLines, vTicketVolume;
|
|
||||||
|
|
||||||
IF vDone THEN
|
|
||||||
LEAVE l;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Buscamos un ticket que cumpla con los requisitos en el listado
|
-- Buscamos un ticket que cumpla con los requisitos en el listado
|
||||||
|
IF ((vTicketLines + @lines) <= vLinesLimit OR vLinesLimit IS NULL)
|
||||||
IF (vLinesLimit IS NULL OR (vTotalLines + vTicketLines) <= vLinesLimit)
|
AND ((vTicketVolume + @volume) <= vVolumeLimit OR vVolumeLimit IS NULL) THEN
|
||||||
AND (vVolumeLimit IS NULL OR (vTotalVolume + vTicketVolume) <= vVolumeLimit) THEN
|
|
||||||
|
|
||||||
CALL ticket_splitItemPackingType(vTicketFk, vItemPackingTypeFk);
|
CALL ticket_splitItemPackingType(vTicketFk, vItemPackingTypeFk);
|
||||||
DROP TEMPORARY TABLE tmp.ticketIPT;
|
DROP TEMPORARY TABLE tmp.ticketIPT;
|
||||||
|
|
||||||
SELECT COUNT(*), SUM(litros), MAX(i.`size`), SUM(sv.volume)
|
|
||||||
INTO vLines, vLiters, vHeight, vVolume
|
|
||||||
FROM saleVolume sv
|
|
||||||
JOIN sale s ON s.id = sv.saleFk
|
|
||||||
JOIN item i ON i.id = s.itemFk
|
|
||||||
WHERE sv.ticketFk = vTicketFk;
|
|
||||||
|
|
||||||
SET vTotalVolume = vTotalVolume + vVolume,
|
|
||||||
vTotalLines = vTotalLines + vLines;
|
|
||||||
|
|
||||||
UPDATE tmp.productionBuffer pb
|
UPDATE tmp.productionBuffer pb
|
||||||
SET pb.liters = vLiters,
|
JOIN (
|
||||||
pb.`lines` = vLines,
|
SELECT SUM(litros) liters,
|
||||||
pb.height = vHeight
|
@lines:= COUNT(*) + @lines,
|
||||||
|
COUNT(*) `lines`,
|
||||||
|
MAX(i.`size`) height,
|
||||||
|
@volume := SUM(sv.volume) + @volume,
|
||||||
|
SUM(sv.volume) volume
|
||||||
|
FROM saleVolume sv
|
||||||
|
JOIN sale s ON s.id = sv.saleFk
|
||||||
|
JOIN item i ON i.id = s.itemFk
|
||||||
|
WHERE sv.ticketFk = vTicketFk
|
||||||
|
) sub
|
||||||
|
SET pb.liters = sub.liters,
|
||||||
|
pb.`lines` = sub.`lines`,
|
||||||
|
pb.height = sub.height
|
||||||
WHERE pb.ticketFk = vTicketFk;
|
WHERE pb.ticketFk = vTicketFk;
|
||||||
|
|
||||||
UPDATE tTrain tt
|
UPDATE tTrain tt
|
||||||
|
@ -235,13 +267,17 @@ BEGIN
|
||||||
tt.height
|
tt.height
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
-- Si no le encuentra una balda, intentamos darle un carro entero libre
|
-- Si no le encuentra una balda adecuada, intentamos darle un carro entero si queda alguno libre
|
||||||
|
|
||||||
IF NOT (SELECT COUNT(*) FROM tTrain WHERE ticketFk) THEN
|
IF NOT (SELECT COUNT(*) FROM tTrain WHERE ticketFk) THEN
|
||||||
SELECT wagon INTO vFreeWagonFk
|
SELECT tt.wagon
|
||||||
FROM tTrain
|
INTO vFreeWagonFk
|
||||||
GROUP BY wagon
|
FROM tTrain tt
|
||||||
HAVING SUM(IFNULL(ticketFk, 0)) = 0
|
LEFT JOIN (
|
||||||
|
SELECT DISTINCT wagon
|
||||||
|
FROM tTrain
|
||||||
|
WHERE ticketFk IS NOT NULL
|
||||||
|
) nn ON nn.wagon = tt.wagon
|
||||||
|
WHERE nn.wagon IS NULL
|
||||||
ORDER BY wagon
|
ORDER BY wagon
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
|
@ -250,35 +286,38 @@ BEGIN
|
||||||
SET ticketFk = vFirstTicketFk
|
SET ticketFk = vFirstTicketFk
|
||||||
WHERE wagon = vFreeWagonFk;
|
WHERE wagon = vFreeWagonFk;
|
||||||
|
|
||||||
-- Se anulan el resto de carros libres,
|
-- Se anulan el resto de carros libres para que sólo uno lleve un pedido excesivo
|
||||||
-- máximo un carro con pedido excesivo
|
DELETE tt.*
|
||||||
|
|
||||||
DELETE tt
|
|
||||||
FROM tTrain tt
|
FROM tTrain tt
|
||||||
JOIN (SELECT wagon
|
LEFT JOIN (
|
||||||
FROM tTrain
|
SELECT DISTINCT wagon
|
||||||
GROUP BY wagon
|
FROM tTrain
|
||||||
HAVING SUM(IFNULL(ticketFk, 0)) = 0
|
WHERE ticketFk IS NOT NULL
|
||||||
) sub ON sub.wagon = tt.wagon;
|
) nn ON nn.wagon = tt.wagon
|
||||||
|
WHERE nn.wagon IS NULL;
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
FETCH c1 INTO vTicketFk, vTicketLines, vTicketVolume;
|
||||||
|
IF vDone OR NOT (SELECT COUNT(*) FROM tTrain WHERE ticketFk IS NULL) THEN
|
||||||
|
LEAVE read_loop;
|
||||||
|
END IF;
|
||||||
|
ELSE
|
||||||
|
FETCH c1 INTO vTicketFk, vTicketLines, vTicketVolume;
|
||||||
|
IF vDone THEN
|
||||||
|
LEAVE read_loop;
|
||||||
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
CLOSE vTickets;
|
CLOSE c1;
|
||||||
|
|
||||||
IF (SELECT COUNT(*) FROM tTrain WHERE ticketFk) THEN
|
IF (SELECT COUNT(*) FROM tTrain WHERE ticketFk) THEN
|
||||||
-- Se obtiene nº de colección
|
UPDATE collection c
|
||||||
|
JOIN state st ON st.code = 'ON_PREPARATION'
|
||||||
INSERT INTO collection
|
SET c.stateFk = st.id
|
||||||
SET itemPackingTypeFk = vItemPackingTypeFk,
|
WHERE c.id = vCollectionFk;
|
||||||
trainFk = vTrainFk,
|
|
||||||
wagons = vWagons,
|
|
||||||
warehouseFk = vWarehouseFk;
|
|
||||||
|
|
||||||
SELECT LAST_INSERT_ID() INTO vCollectionFk;
|
|
||||||
|
|
||||||
-- Asigna las bandejas
|
-- Asigna las bandejas
|
||||||
|
|
||||||
INSERT IGNORE INTO ticketCollection(ticketFk, collectionFk, `level`, wagon, liters)
|
INSERT IGNORE INTO ticketCollection(ticketFk, collectionFk, `level`, wagon, liters)
|
||||||
SELECT tt.ticketFk, vCollectionFk, tt.shelve, tt.wagon, tt.liters
|
SELECT tt.ticketFk, vCollectionFk, tt.shelve, tt.wagon, tt.liters
|
||||||
FROM tTrain tt
|
FROM tTrain tt
|
||||||
|
@ -286,34 +325,37 @@ BEGIN
|
||||||
ORDER BY tt.wagon, tt.shelve;
|
ORDER BY tt.wagon, tt.shelve;
|
||||||
|
|
||||||
-- Actualiza el estado de los tickets
|
-- Actualiza el estado de los tickets
|
||||||
|
CALL collection_setState(vCollectionFk, vStateFk);
|
||||||
CALL collection_setState(vCollectionFk, vStateCode);
|
|
||||||
|
|
||||||
-- Aviso para la preparacion previa
|
-- Aviso para la preparacion previa
|
||||||
|
|
||||||
INSERT INTO ticketDown(ticketFk, collectionFk)
|
INSERT INTO ticketDown(ticketFk, collectionFk)
|
||||||
SELECT tc.ticketFk, tc.collectionFk
|
SELECT tc.ticketFk, tc.collectionFk
|
||||||
FROM ticketCollection tc
|
FROM ticketCollection tc
|
||||||
WHERE tc.collectionFk = vCollectionFk;
|
WHERE tc.collectionFk = vCollectionFk;
|
||||||
|
|
||||||
CALL collection_mergeSales(vCollectionFk);
|
CALL sales_mergeByCollection(vCollectionFk);
|
||||||
|
|
||||||
UPDATE `collection` c
|
UPDATE `collection` c
|
||||||
JOIN(
|
JOIN (
|
||||||
SELECT COUNT(*) saleTotalCount,
|
SELECT COUNT(*) saleTotalCount,
|
||||||
SUM(s.isPicked <> 0) salePickedCount
|
SUM(s.isPicked <> 0) salePickedCount
|
||||||
FROM ticketCollection tc
|
FROM ticketCollection tc
|
||||||
JOIN sale s ON s.ticketFk = tc.ticketFk
|
JOIN sale s ON s.ticketFk = tc.ticketFk
|
||||||
WHERE tc.collectionFk = vCollectionFk
|
WHERE tc.collectionFk = vCollectionFk
|
||||||
AND s.quantity > 0
|
AND s.quantity > 0
|
||||||
)sub
|
) sub
|
||||||
SET c.saleTotalCount = sub.saleTotalCount,
|
SET c.saleTotalCount = sub.saleTotalCount,
|
||||||
c.salePickedCount = sub.salePickedCount
|
c.salePickedCount = sub.salePickedCount
|
||||||
WHERE c.id = vCollectionFk;
|
WHERE c.id = vCollectionFk;
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
SET vCollectionFk = NULL;
|
DELETE FROM `collection`
|
||||||
|
WHERE id = vCollectionFk;
|
||||||
|
SET vCollectionFk = NULL;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
DO RELEASE_LOCK(vLockName);
|
||||||
|
|
||||||
DROP TEMPORARY TABLE
|
DROP TEMPORARY TABLE
|
||||||
tTrain,
|
tTrain,
|
||||||
tmp.productionBuffer;
|
tmp.productionBuffer;
|
||||||
|
|
|
@ -99,7 +99,7 @@ proc: BEGIN
|
||||||
LEFT JOIN `zone` z ON z.id = t.zoneFk
|
LEFT JOIN `zone` z ON z.id = t.zoneFk
|
||||||
LEFT JOIN zoneClosure zc ON zc.zoneFk = t.zoneFk
|
LEFT JOIN zoneClosure zc ON zc.zoneFk = t.zoneFk
|
||||||
AND DATE(t.shipped) = zc.dated
|
AND DATE(t.shipped) = zc.dated
|
||||||
LEFT JOIN ticketParking tp ON tp.ticketFk = t.id
|
LEFT JOIN ticketParking tp ON tp.ticketFk = t.id
|
||||||
LEFT JOIN parking pk ON pk.id = tp.parkingFk
|
LEFT JOIN parking pk ON pk.id = tp.parkingFk
|
||||||
WHERE t.warehouseFk = vWarehouseFk
|
WHERE t.warehouseFk = vWarehouseFk
|
||||||
AND dm.code IN ('AGENCY', 'DELIVERY', 'PICKUP');
|
AND dm.code IN ('AGENCY', 'DELIVERY', 'PICKUP');
|
||||||
|
@ -124,8 +124,8 @@ proc: BEGIN
|
||||||
ADD COLUMN `collectionN` INT;
|
ADD COLUMN `collectionN` INT;
|
||||||
|
|
||||||
UPDATE tmp.productionBuffer pb
|
UPDATE tmp.productionBuffer pb
|
||||||
JOIN tmp.ticket_problems tp ON tp.ticketFk = pb.ticketFk
|
JOIN tmp.ticket_problems tp ON tp.ticketFk = pb.ticketFk
|
||||||
SET pb.problem = TRIM(CAST(CONCAT( IFNULL(tp.itemShortage, ''),
|
SET pb.problem = TRIM(CAST(CONCAT( IFNULL(tp.itemShortage, ''),
|
||||||
IFNULL(tp.itemDelay, ''),
|
IFNULL(tp.itemDelay, ''),
|
||||||
IFNULL(tp.itemLost, ''),
|
IFNULL(tp.itemLost, ''),
|
||||||
IF(tp.isFreezed, ' CONGELADO',''),
|
IF(tp.isFreezed, ' CONGELADO',''),
|
||||||
|
@ -141,7 +141,7 @@ proc: BEGIN
|
||||||
LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = pb.clientFk
|
LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = pb.clientFk
|
||||||
JOIN productionConfig pc
|
JOIN productionConfig pc
|
||||||
SET pb.problem = TRIM(CAST(CONCAT('NUEVO ', pb.problem) AS CHAR(255)))
|
SET pb.problem = TRIM(CAST(CONCAT('NUEVO ', pb.problem) AS CHAR(255)))
|
||||||
WHERE (cnb.clientFk IS NULL OR cnb.isRookie)
|
WHERE (cnb.clientFk IS NULL OR cnb.isRookie)
|
||||||
AND pc.rookieDays;
|
AND pc.rookieDays;
|
||||||
|
|
||||||
-- Líneas y volumen por ticket
|
-- Líneas y volumen por ticket
|
||||||
|
@ -268,10 +268,12 @@ proc: BEGIN
|
||||||
UPDATE tmp.productionBuffer pb
|
UPDATE tmp.productionBuffer pb
|
||||||
JOIN sale s ON s.ticketFk = pb.ticketFk
|
JOIN sale s ON s.ticketFk = pb.ticketFk
|
||||||
JOIN item i ON i.id = s.itemFk
|
JOIN item i ON i.id = s.itemFk
|
||||||
JOIN cache.last_buy lb ON lb.warehouse_id = vWarehouseFk
|
JOIN itemType it ON it.id = i.typeFk
|
||||||
AND lb.item_id = s.itemFk
|
JOIN itemCategory ic ON ic.id = it.categoryFk
|
||||||
|
JOIN cache.last_buy lb ON lb.warehouse_id = vWarehouseFk AND lb.item_id = s.itemFk
|
||||||
JOIN buy b ON b.id = lb.buy_id
|
JOIN buy b ON b.id = lb.buy_id
|
||||||
JOIN packaging p ON p.id = b.packagingFk
|
JOIN packaging p ON p.id = b.packagingFk
|
||||||
|
JOIN productionConfig pc
|
||||||
SET pb.hasPlantTray = TRUE
|
SET pb.hasPlantTray = TRUE
|
||||||
WHERE p.isPlantTray
|
WHERE p.isPlantTray
|
||||||
AND s.quantity >= b.packing
|
AND s.quantity >= b.packing
|
||||||
|
|
|
@ -3,47 +3,41 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_mergeSales`(
|
||||||
vSelf INT
|
vSelf INT
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vHasSalesToMerge BOOL;
|
|
||||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||||
BEGIN
|
BEGIN
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
RESIGNAL;
|
RESIGNAL;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
START TRANSACTION;
|
|
||||||
|
|
||||||
SELECT id INTO vSelf
|
|
||||||
FROM ticket
|
|
||||||
WHERE id = vSelf FOR UPDATE;
|
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tSalesToPreserve
|
CREATE OR REPLACE TEMPORARY TABLE tSalesToPreserve
|
||||||
(PRIMARY KEY (id))
|
(PRIMARY KEY (id))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT s.id, s.itemFk, SUM(s.quantity) newQuantity
|
SELECT s.id, s.itemFk, SUM(s.quantity) newQuantity
|
||||||
FROM sale s
|
FROM sale s
|
||||||
JOIN item i ON i.id = s.itemFk
|
JOIN item i ON i.id = s.itemFk
|
||||||
JOIN itemType it ON it.id = i.typeFk
|
JOIN itemType it ON it.id = i.typeFk
|
||||||
WHERE s.ticketFk = vSelf
|
WHERE s.ticketFk = vSelf
|
||||||
AND it.isMergeable
|
AND it.isMergeable
|
||||||
GROUP BY s.itemFk, s.price, s.discount
|
GROUP BY s.itemFk, s.price, s.discount;
|
||||||
HAVING COUNT(*) > 1;
|
|
||||||
|
|
||||||
SELECT COUNT(*) INTO vHasSalesToMerge
|
START TRANSACTION;
|
||||||
FROM tSalesToPreserve;
|
|
||||||
|
|
||||||
IF vHasSalesToMerge THEN
|
UPDATE sale s
|
||||||
UPDATE sale s
|
JOIN tSalesToPreserve stp ON stp.id = s.id
|
||||||
JOIN tSalesToPreserve stp ON stp.id = s.id
|
SET s.quantity = newQuantity
|
||||||
SET s.quantity = newQuantity;
|
WHERE s.ticketFk = vSelf;
|
||||||
|
|
||||||
DELETE s
|
DELETE s.*
|
||||||
FROM sale s
|
FROM sale s
|
||||||
JOIN tSalesToPreserve stp ON stp.itemFk = s.itemFk
|
LEFT JOIN tSalesToPreserve stp ON stp.id = s.id
|
||||||
WHERE s.ticketFk = vSelf
|
JOIN item i ON i.id = s.itemFk
|
||||||
AND s.id <> stp.id;
|
JOIN itemType it ON it.id = i.typeFk
|
||||||
END IF;
|
WHERE s.ticketFk = vSelf
|
||||||
|
AND stp.id IS NULL
|
||||||
|
AND it.isMergeable;
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tSalesToPreserve;
|
DROP TEMPORARY TABLE tSalesToPreserve;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -3,87 +3,124 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_splitItemPacki
|
||||||
vSelf INT,
|
vSelf INT,
|
||||||
vOriginalItemPackingTypeFk VARCHAR(1)
|
vOriginalItemPackingTypeFk VARCHAR(1)
|
||||||
)
|
)
|
||||||
proc: BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Clona y reparte las líneas de ventas de un ticket en funcion del tipo de empaquetado.
|
* Clona y reparte las ventas de un ticket en funcion del tipo de empaquetado.
|
||||||
* Respeta el id de ticket inicial para el tipo de empaquetado propuesto.
|
* Respeta el id inicial para el tipo propuesto.
|
||||||
*
|
*
|
||||||
* @param vSelf Id ticket
|
* @param vSelf Id ticket
|
||||||
* @param vOriginalItemPackingTypeFk Tipo empaquetado al que se mantiene el ticket original
|
* @param vOriginalItemPackingTypeFk Tipo para el que se reserva el número de ticket original
|
||||||
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
*/
|
*/
|
||||||
DECLARE vDone INT DEFAULT FALSE;
|
DECLARE vItemPackingTypeFk VARCHAR(1) DEFAULT 'H';
|
||||||
DECLARE vHasItemPackingType BOOL;
|
|
||||||
DECLARE vItemPackingTypeFk INT;
|
|
||||||
DECLARE vNewTicketFk INT;
|
DECLARE vNewTicketFk INT;
|
||||||
|
DECLARE vPackingTypesToSplit INT;
|
||||||
|
DECLARE vDone INT DEFAULT FALSE;
|
||||||
|
|
||||||
DECLARE vItemPackingTypes CURSOR FOR
|
DECLARE vSaleGroup CURSOR FOR
|
||||||
SELECT DISTINCT itemPackingTypeFk
|
SELECT itemPackingTypeFk
|
||||||
FROM tSalesToMove;
|
FROM tSaleGroup
|
||||||
|
WHERE itemPackingTypeFk IS NOT NULL
|
||||||
|
ORDER BY (itemPackingTypeFk = vOriginalItemPackingTypeFk) DESC;
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||||
|
|
||||||
SELECT COUNT(*) INTO vHasItemPackingType
|
START TRANSACTION;
|
||||||
FROM ticket t
|
|
||||||
JOIN sale s ON s.ticketFk = t.id
|
SELECT id
|
||||||
JOIN item i ON i.id = s.itemFk
|
FROM sale
|
||||||
WHERE t.id = vSelf
|
WHERE ticketFk = vSelf
|
||||||
AND i.itemPackingTypeFk = vOriginalItemPackingTypeFk;
|
AND NOT quantity
|
||||||
|
FOR UPDATE;
|
||||||
|
|
||||||
|
DELETE FROM sale
|
||||||
|
WHERE NOT quantity
|
||||||
|
AND ticketFk = vSelf;
|
||||||
|
|
||||||
|
CREATE OR REPLACE TEMPORARY TABLE tSale
|
||||||
|
(PRIMARY KEY (id))
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT s.id, i.itemPackingTypeFk, IFNULL(sv.litros, 0) litros
|
||||||
|
FROM sale s
|
||||||
|
JOIN item i ON i.id = s.itemFk
|
||||||
|
LEFT JOIN saleVolume sv ON sv.saleFk = s.id
|
||||||
|
WHERE s.ticketFk = vSelf;
|
||||||
|
|
||||||
|
CREATE OR REPLACE TEMPORARY TABLE tSaleGroup
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT itemPackingTypeFk, SUM(litros) totalLitros
|
||||||
|
FROM tSale
|
||||||
|
GROUP BY itemPackingTypeFk;
|
||||||
|
|
||||||
|
SELECT COUNT(*) INTO vPackingTypesToSplit
|
||||||
|
FROM tSaleGroup
|
||||||
|
WHERE itemPackingTypeFk IS NOT NULL;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketIPT(
|
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketIPT(
|
||||||
ticketFk INT,
|
ticketFk INT,
|
||||||
itemPackingTypeFk VARCHAR(1)
|
itemPackingTypeFk VARCHAR(1)
|
||||||
) ENGINE=MEMORY
|
) ENGINE = MEMORY;
|
||||||
SELECT vSelf, vOriginalItemPackingTypeFk;
|
|
||||||
|
|
||||||
IF NOT vHasItemPackingType THEN
|
CASE vPackingTypesToSplit
|
||||||
LEAVE proc;
|
WHEN 0 THEN
|
||||||
END IF;
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
|
VALUES(vSelf, vItemPackingTypeFk);
|
||||||
|
WHEN 1 THEN
|
||||||
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
|
SELECT vSelf, itemPackingTypeFk
|
||||||
|
FROM tSaleGroup
|
||||||
|
WHERE itemPackingTypeFk IS NOT NULL;
|
||||||
|
ELSE
|
||||||
|
OPEN vSaleGroup;
|
||||||
|
FETCH vSaleGroup INTO vItemPackingTypeFk;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tSalesToMove (
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
ticketFk INT,
|
VALUES(vSelf, vItemPackingTypeFk);
|
||||||
saleFk INT,
|
|
||||||
itemPackingTypeFk INT
|
|
||||||
) ENGINE=MEMORY;
|
|
||||||
|
|
||||||
INSERT INTO tSalesToMove (saleFk, itemPackingTypeFk)
|
l: LOOP
|
||||||
SELECT s.id, i.itemPackingTypeFk
|
SET vDone = FALSE;
|
||||||
FROM ticket t
|
FETCH vSaleGroup INTO vItemPackingTypeFk;
|
||||||
JOIN sale s ON s.ticketFk = t.id
|
|
||||||
JOIN item i ON i.id = s.itemFk
|
|
||||||
WHERE t.id = vSelf
|
|
||||||
AND i.itemPackingTypeFk <> vOriginalItemPackingTypeFk;
|
|
||||||
|
|
||||||
OPEN vItemPackingTypes;
|
IF vDone THEN
|
||||||
|
LEAVE l;
|
||||||
|
END IF;
|
||||||
|
|
||||||
l: LOOP
|
CALL ticket_Clone(vSelf, vNewTicketFk);
|
||||||
SET vDone = FALSE;
|
|
||||||
FETCH vItemPackingTypes INTO vItemPackingTypeFk;
|
|
||||||
|
|
||||||
IF vDone THEN
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
LEAVE l;
|
VALUES(vNewTicketFk, vItemPackingTypeFk);
|
||||||
END IF;
|
END LOOP;
|
||||||
|
|
||||||
CALL ticket_Clone(vSelf, vNewTicketFk);
|
CLOSE vSaleGroup;
|
||||||
|
|
||||||
UPDATE tSalesToMove
|
SELECT s.id
|
||||||
SET ticketFk = vNewTicketFk
|
FROM sale s
|
||||||
WHERE itemPackingTypeFk = vItemPackingTypeFk;
|
JOIN tSale ts ON ts.id = s.id
|
||||||
|
JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = ts.itemPackingTypeFk
|
||||||
|
FOR UPDATE;
|
||||||
|
|
||||||
END LOOP;
|
UPDATE sale s
|
||||||
|
JOIN tSale ts ON ts.id = s.id
|
||||||
|
JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = ts.itemPackingTypeFk
|
||||||
|
SET s.ticketFk = t.ticketFk;
|
||||||
|
|
||||||
CLOSE vItemPackingTypes;
|
SELECT itemPackingTypeFk INTO vItemPackingTypeFk
|
||||||
|
FROM tSaleGroup sg
|
||||||
|
WHERE sg.itemPackingTypeFk IS NOT NULL
|
||||||
|
ORDER BY sg.itemPackingTypeFk
|
||||||
|
LIMIT 1;
|
||||||
|
|
||||||
UPDATE sale s
|
UPDATE sale s
|
||||||
JOIN tSalesToMove stm ON stm.saleFk = s.id
|
JOIN tSale ts ON ts.id = s.id
|
||||||
SET s.ticketFk = stm.ticketFk
|
JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = vItemPackingTypeFk
|
||||||
WHERE stm.ticketFk;
|
SET s.ticketFk = t.ticketFk
|
||||||
|
WHERE ts.itemPackingTypeFk IS NULL;
|
||||||
|
END CASE;
|
||||||
|
|
||||||
INSERT INTO tmp.ticketIPT
|
COMMIT;
|
||||||
SELECT ticketFk, itemPackingTypeFk
|
|
||||||
FROM tSalesToMove
|
|
||||||
GROUP BY ticketFk;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tSalesToMove;
|
DROP TEMPORARY TABLE
|
||||||
|
tSale,
|
||||||
|
tSaleGroup;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
Loading…
Reference in New Issue