2024-05-23 10:39:30 +00:00
|
|
|
DELIMITER $$
|
2024-11-28 07:13:53 +00:00
|
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`entry_transfer`(
|
|
|
|
vOriginalEntry INT,
|
|
|
|
OUT vNewEntry INT
|
|
|
|
)
|
2024-05-23 10:39:30 +00:00
|
|
|
BEGIN
|
|
|
|
/**
|
2024-10-23 10:32:48 +00:00
|
|
|
* Adelanta a mañana la mercancia de una entrada a partir de lo que hay ubicado en el almacén
|
2024-11-28 07:13:53 +00:00
|
|
|
*
|
2024-10-23 10:32:48 +00:00
|
|
|
* @param vOriginalEntry entrada que se quiera adelantar
|
2024-11-28 07:13:53 +00:00
|
|
|
* @param vNewEntry nueva entrada creada
|
2024-10-23 10:32:48 +00:00
|
|
|
*/
|
2024-05-23 10:39:30 +00:00
|
|
|
DECLARE vNewEntryFk INT;
|
|
|
|
DECLARE vTravelFk INT;
|
|
|
|
DECLARE vWarehouseFk INT;
|
2024-12-04 07:12:47 +00:00
|
|
|
DECLARE vWarehouseInFk INT;
|
|
|
|
DECLARE vWarehouseOutFk INT;
|
|
|
|
DECLARE vRef INT;
|
|
|
|
DECLARE vIsReceived INT;
|
|
|
|
DECLARE vAgencyModeFk INT;
|
|
|
|
DECLARE vNewTravelFk INT;
|
2024-05-23 10:39:30 +00:00
|
|
|
|
2024-07-17 08:28:22 +00:00
|
|
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
|
|
BEGIN
|
|
|
|
ROLLBACK;
|
|
|
|
RESIGNAL;
|
|
|
|
END;
|
2024-11-28 07:13:53 +00:00
|
|
|
|
2024-05-23 10:39:30 +00:00
|
|
|
-- Clonar la entrada
|
2024-11-28 07:13:53 +00:00
|
|
|
CALL entry_clone(vOriginalEntry, vNewEntryFk);
|
2024-05-23 10:39:30 +00:00
|
|
|
|
2024-08-06 05:20:30 +00:00
|
|
|
START TRANSACTION;
|
|
|
|
|
2024-07-11 05:38:13 +00:00
|
|
|
-- Hay que crear un nuevo travel, con salida hoy y llegada mañana y asignar la entrada nueva al nuevo travel.
|
2024-12-04 07:12:47 +00:00
|
|
|
SELECT warehouseInFk,warehouseOutFk,`ref`,isReceived ,agencyModeFk
|
|
|
|
INTO vWarehouseInFk,vWarehouseOutFk, vRef,vIsReceived, vAgencyModeFk
|
|
|
|
FROM travel t
|
|
|
|
JOIN entry e ON e.travelFk = t.id
|
2024-12-04 08:40:28 +00:00
|
|
|
WHERE e.id = vOriginalEntry;
|
2024-12-04 07:12:47 +00:00
|
|
|
|
2024-12-04 08:40:28 +00:00
|
|
|
SELECT t.id INTO vNewTravelFk
|
2024-12-04 07:12:47 +00:00
|
|
|
FROM travel t
|
|
|
|
JOIN entry e ON e.travelFk = t.id
|
|
|
|
WHERE t.shipped = util.VN_CURDATE()
|
|
|
|
AND t.landed = util.VN_CURDATE() + INTERVAL 1 DAY
|
|
|
|
AND warehouseInFk = vWarehouseInFk
|
|
|
|
AND warehouseOutFk = vWarehouseOutFk
|
|
|
|
AND `ref` = vRef
|
|
|
|
AND isReceived =vIsReceived
|
|
|
|
AND agencyModeFk = vAgencyModeFk;
|
|
|
|
|
2024-12-04 08:40:28 +00:00
|
|
|
IF vNewTravelFk IS NULL THEN
|
2024-12-04 07:12:47 +00:00
|
|
|
INSERT INTO travel(
|
2024-05-23 10:39:30 +00:00
|
|
|
shipped,
|
|
|
|
landed,
|
|
|
|
warehouseInFk,
|
|
|
|
warehouseOutFk,
|
|
|
|
`ref`,
|
|
|
|
isReceived,
|
|
|
|
agencyModeFk)
|
|
|
|
SELECT util.VN_CURDATE(),
|
|
|
|
util.VN_CURDATE() + INTERVAL 1 DAY,
|
|
|
|
t.warehouseInFk,
|
2024-11-28 07:13:53 +00:00
|
|
|
t.warehouseOutFk,
|
2024-05-23 10:39:30 +00:00
|
|
|
t.`ref`,
|
|
|
|
t.isReceived,
|
|
|
|
t.agencyModeFk
|
|
|
|
FROM travel t
|
|
|
|
JOIN entry e ON e.travelFk = t.id
|
2024-10-23 10:32:48 +00:00
|
|
|
WHERE e.id = vOriginalEntry;
|
2024-05-23 10:39:30 +00:00
|
|
|
|
2024-12-04 07:12:47 +00:00
|
|
|
SET vTravelFk = LAST_INSERT_ID();
|
|
|
|
ELSE
|
|
|
|
SET vTravelFk = vNewTravelFk;
|
|
|
|
END IF;
|
2024-05-23 10:39:30 +00:00
|
|
|
|
|
|
|
UPDATE entry
|
2024-12-04 12:32:10 +00:00
|
|
|
SET travelFk = vTravelFk,
|
|
|
|
evaNotes = vOriginalEntry
|
2024-05-23 10:39:30 +00:00
|
|
|
WHERE id = vNewEntryFk;
|
|
|
|
|
|
|
|
-- Poner a 0 las cantidades
|
|
|
|
UPDATE buy b
|
|
|
|
SET b.quantity = 0, b.stickers = 0
|
|
|
|
WHERE b.entryFk = vNewEntryFk;
|
|
|
|
|
|
|
|
-- Eliminar duplicados
|
2024-11-28 07:13:53 +00:00
|
|
|
DELETE b
|
2024-05-23 10:39:30 +00:00
|
|
|
FROM buy b
|
2024-11-28 07:13:53 +00:00
|
|
|
LEFT JOIN (SELECT b.id, b.itemFk
|
|
|
|
FROM buy b
|
2024-05-23 10:39:30 +00:00
|
|
|
WHERE b.entryFk = vNewEntryFk
|
|
|
|
GROUP BY b.itemFk) tBuy ON tBuy.id = b.id
|
|
|
|
WHERE b.entryFk = vNewEntryFk
|
|
|
|
AND tBuy.id IS NULL;
|
2024-11-28 07:13:53 +00:00
|
|
|
|
2024-05-23 10:39:30 +00:00
|
|
|
SELECT t.warehouseInFk INTO vWarehouseFk
|
|
|
|
FROM travel t
|
|
|
|
JOIN entry e ON e.travelFk = t.id
|
|
|
|
WHERE e.id = vOriginalEntry;
|
|
|
|
|
|
|
|
-- Actualizar la nueva entrada con lo que no está ubicado HOY, descontando lo vendido HOY de esas ubicaciones
|
2024-08-06 05:20:30 +00:00
|
|
|
CREATE OR REPLACE TEMPORARY TABLE tBuy
|
2024-11-28 07:13:53 +00:00
|
|
|
WITH tBuy AS (
|
|
|
|
SELECT b.itemFk, SUM(b.quantity) totalQuantity
|
2024-11-28 07:22:30 +00:00
|
|
|
FROM vn.buy b
|
2024-11-28 07:13:53 +00:00
|
|
|
WHERE b.entryFk = vOriginalEntry
|
|
|
|
GROUP BY b.itemFk
|
|
|
|
),
|
|
|
|
itemShelvings AS (
|
|
|
|
SELECT ish.itemFk, SUM(visible) visible
|
2024-11-28 07:22:30 +00:00
|
|
|
FROM vn.itemShelving ish
|
2024-12-04 07:12:47 +00:00
|
|
|
JOIN vn.shelving sh ON sh.id = ish.shelvingFk
|
2024-11-28 07:22:30 +00:00
|
|
|
JOIN vn.parking p ON p.id = sh.parkingFk
|
|
|
|
JOIN vn.sector s ON s.id = p.sectorFk
|
2024-12-11 10:54:40 +00:00
|
|
|
JOIN vn.buy b ON b.id = ish.buyFk
|
|
|
|
JOIN vn.entry e ON e.id = b.entryFk
|
2024-11-28 07:13:53 +00:00
|
|
|
WHERE s.warehouseFk = vWarehouseFk
|
2024-12-04 12:32:10 +00:00
|
|
|
AND sh.parked >= util.VN_CURDATE()
|
2024-11-28 07:13:53 +00:00
|
|
|
GROUP BY ish.itemFk
|
|
|
|
),
|
|
|
|
sales AS (
|
|
|
|
SELECT s.itemFk, SUM(s.quantity) sold
|
2024-11-28 07:22:30 +00:00
|
|
|
FROM vn.ticket t
|
|
|
|
JOIN vn.sale s ON s.ticketFk = t.id
|
|
|
|
JOIN vn.itemShelvingSale iss ON iss.saleFk = s.id
|
|
|
|
JOIN vn.itemShelving is2 ON is2.id = iss.itemShelvingFk
|
2024-12-04 07:12:47 +00:00
|
|
|
JOIN vn.shelving s2 ON s2.id = is2.shelvingFk
|
2024-11-28 07:13:53 +00:00
|
|
|
WHERE t.shipped BETWEEN util.VN_CURDATE() AND util.dayend(util.VN_CURDATE())
|
2024-12-04 12:32:10 +00:00
|
|
|
AND s2.parked >= util.VN_CURDATE()
|
2024-11-28 07:13:53 +00:00
|
|
|
GROUP BY s.itemFk
|
|
|
|
)
|
|
|
|
SELECT tmp.itemFk,
|
|
|
|
IFNULL(iss.visible, 0) visible,
|
|
|
|
tmp.totalQuantity,
|
|
|
|
IFNULL(s.sold, 0) sold
|
|
|
|
FROM tBuy tmp
|
|
|
|
LEFT JOIN itemShelvings iss ON tmp.itemFk = iss.itemFk
|
|
|
|
LEFT JOIN sales s ON s.itemFk = tmp.itemFk
|
2024-12-04 08:40:28 +00:00
|
|
|
WHERE visible < tmp.totalQuantity
|
2024-08-06 05:20:30 +00:00
|
|
|
OR iss.itemFk IS NULL;
|
|
|
|
|
2024-05-23 10:39:30 +00:00
|
|
|
UPDATE buy b
|
2024-11-28 07:13:53 +00:00
|
|
|
JOIN tBuy tmp ON tmp.itemFk = b.itemFk
|
|
|
|
SET b.quantity = tmp.totalQuantity - tmp.visible - tmp.sold
|
2024-05-23 10:39:30 +00:00
|
|
|
WHERE b.entryFk = vNewEntryFk;
|
2024-11-28 07:13:53 +00:00
|
|
|
|
2024-05-23 10:39:30 +00:00
|
|
|
-- Limpia la nueva entrada
|
2024-11-28 07:13:53 +00:00
|
|
|
DELETE b
|
2024-05-23 10:39:30 +00:00
|
|
|
FROM buy b
|
|
|
|
WHERE b.entryFk = vNewEntryFk
|
|
|
|
AND b.quantity = 0;
|
|
|
|
|
2024-08-06 05:20:30 +00:00
|
|
|
COMMIT;
|
|
|
|
|
2024-07-17 08:28:22 +00:00
|
|
|
SET vNewEntry = vNewEntryFk;
|
2024-07-17 08:30:23 +00:00
|
|
|
|
2024-11-28 07:13:53 +00:00
|
|
|
CALL cache.visible_refresh(@c,TRUE,vWarehouseFk);
|
|
|
|
CALL cache.available_refresh(@c, TRUE, vWarehouseFk, util.VN_CURDATE());
|
2024-05-23 10:39:30 +00:00
|
|
|
END$$
|
|
|
|
DELIMITER ;
|