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

95 lines
2.3 KiB
MySQL
Raw Normal View History

DELIMITER $$
2024-08-20 08:06:10 +00:00
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_close`()
BEGIN
/**
2024-07-22 08:26:40 +00:00
* Realiza el cierre de todos los
* tickets de la tabla tmp.ticket_close.
*
* @table tmp.ticket_close(ticketFk) Identificadores de los tickets a cerrar
*/
DECLARE vDone BOOL;
DECLARE vClientFk INT;
DECLARE vCurTicketFk INT;
DECLARE vNewInvoiceId INT;
DECLARE vHasDailyInvoice BOOL;
DECLARE vWithPackage BOOL;
DECLARE vHasToInvoice BOOL;
DECLARE vStateCode VARCHAR(45);
DECLARE cur CURSOR FOR
SELECT ticketFk FROM tmp.ticket_close;
2024-07-22 08:26:40 +00:00
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN
RESIGNAL;
END;
OPEN cur;
proc: LOOP
SET vDone = FALSE;
2024-07-22 08:26:40 +00:00
FETCH cur INTO vCurTicketFk;
IF vDone THEN
LEAVE proc;
END IF;
SELECT c.id,
c.hasDailyInvoice,
w.isManaged,
2024-07-12 10:10:43 +00:00
c.hasToInvoice
INTO vClientFk,
vHasDailyInvoice,
vWithPackage,
2024-07-12 10:10:43 +00:00
vHasToInvoice
2024-07-22 08:26:40 +00:00
FROM ticket t
JOIN `client` c ON c.id = t.clientFk
JOIN warehouse w ON w.id = t.warehouseFk
WHERE t.id = vCurTicketFk;
INSERT INTO ticketPackaging (ticketFk, packagingFk, quantity)
SELECT vCurTicketFk, p.id, COUNT(*)
2024-07-22 08:26:40 +00:00
FROM expedition e
JOIN packaging p ON p.id = e.packagingFk
2024-07-12 10:10:43 +00:00
JOIN ticket t ON t.id = e.ticketFk
2024-07-12 10:13:21 +00:00
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
LEFT JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
WHERE e.ticketFk = vCurTicketFk AND p.isPackageReturnable
AND vWithPackage
2024-07-12 10:10:43 +00:00
AND NOT dm.`code`= 'PICKUP'
GROUP BY p.itemFk;
-- No retornables o no catalogados
INSERT INTO sale (
itemFk,
ticketFk,
concept,
quantity,
price, isPriceFixed
)SELECT e.freightItemFk,
vCurTicketFk,
i.name,
COUNT(*) amount,
getSpecialPrice(e.freightItemFk, vClientFk),
TRUE
2024-07-22 08:26:40 +00:00
FROM expedition e
JOIN item i ON i.id = e.freightItemFk
LEFT JOIN packaging p ON p.itemFk = i.id
WHERE e.ticketFk = vCurTicketFk
AND (p.isPackageReturnable = 0 OR p.isPackageReturnable IS NULL)
AND getSpecialPrice(e.freightItemFk, vClientFk) > 0
GROUP BY e.freightItemFk;
2024-07-22 08:26:40 +00:00
IF vHasDailyInvoice AND vHasToInvoice THEN
SET vStateCode = 'DELIVERED';
ELSE
SELECT getAlert3State(vCurTicketFk) INTO vStateCode;
END IF;
CALL ticket_setState(vCurTicketFk, vStateCode);
END LOOP;
CLOSE cur;
END$$
DELIMITER ;