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

110 lines
3.5 KiB
MySQL
Raw Normal View History

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_getProblems`(
2024-09-16 16:21:12 +00:00
vIsTodayRelative TINYINT(1)
2024-08-07 08:32:47 +00:00
)
BEGIN
/**
* Calcula los problemas para un conjunto de tickets.
*
2025-01-09 07:43:14 +00:00
* @param vIsTodayRelative Indica si se calcula el disponible como si todo saliera hoy
2024-09-16 17:03:12 +00:00
* @table tmp.ticket(ticketFk) Identificadores de los tickets a calcular
2024-09-19 18:15:38 +00:00
* @return tmp.ticketProblems, tmp.saleProblems
*/
2024-09-19 18:15:38 +00:00
CREATE OR REPLACE TEMPORARY TABLE tmp.sale (
2024-09-16 16:21:12 +00:00
saleFk INT(11),
2024-09-19 18:15:38 +00:00
PRIMARY KEY (saleFk)
) ENGINE = MEMORY
2025-01-09 07:43:14 +00:00
SELECT DISTINCT s.id saleFk
2024-09-19 18:15:38 +00:00
FROM tmp.ticket tt
2025-01-09 07:43:14 +00:00
JOIN ticket t ON t.id = tt.ticketFk
2024-09-19 18:15:38 +00:00
JOIN sale s ON s.ticketFk = t.id
2024-09-16 16:21:12 +00:00
GROUP BY s.id;
2025-01-09 07:43:14 +00:00
2024-09-19 18:15:38 +00:00
CALL sale_getProblems(vIsTodayRelative);
2024-09-16 16:21:12 +00:00
2024-09-16 17:03:12 +00:00
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketProblems (
2024-09-16 16:21:12 +00:00
ticketFk INT(11),
isFreezed BOOL DEFAULT FALSE,
risk DECIMAL(10,1) DEFAULT 0,
hasRisk BOOL DEFAULT FALSE,
hasHighRisk BOOL DEFAULT FALSE,
hasTicketRequest BOOL DEFAULT FALSE,
isTaxDataChecked BOOL DEFAULT FALSE,
isTooLittle BOOL DEFAULT FALSE,
isVip BOOL DEFAULT FALSE,
hasItemShortage BOOL DEFAULT FALSE,
hasItemDelay BOOL DEFAULT FALSE,
hasItemLost BOOL DEFAULT FALSE,
hasComponentLack BOOL DEFAULT FALSE,
hasRounding BOOL DEFAULT FALSE,
PRIMARY KEY (ticketFk)
) ENGINE = MEMORY
2024-10-01 13:46:51 +00:00
WITH hasItemShortage AS(
SELECT s.ticketFk
FROM tmp.saleProblems sp
JOIN vn.sale s ON s.id = sp.saleFk
WHERE sp.hasItemShortage
GROUP BY s.ticketFk
),hasItemLost AS(
SELECT s.ticketFk
FROM tmp.saleProblems sp
JOIN vn.sale s ON s.id = sp.saleFk
WHERE sp.hasItemLost
GROUP BY s.ticketFk
),hasRounding AS(
SELECT s.ticketFk
FROM tmp.saleProblems sp
JOIN vn.sale s ON s.id = sp.saleFk
WHERE sp.hasRounding
2025-01-09 07:43:14 +00:00
GROUP BY s.ticketFk
2024-10-01 13:46:51 +00:00
), hasItemDelay AS(
SELECT s.ticketFk
FROM tmp.saleProblems sp
JOIN vn.sale s ON s.id = sp.saleFk
WHERE sp.hasItemDelay
GROUP BY s.ticketFk
), hasComponentLack AS(
SELECT s.ticketFk
FROM tmp.saleProblems sp
JOIN vn.sale s ON s.id = sp.saleFk
2025-01-09 09:34:49 +00:00
WHERE sp.hasComponentLack
2024-10-01 13:46:51 +00:00
GROUP BY s.ticketFk
)SELECT tt.ticketFk,
2025-01-09 10:52:30 +00:00
FIND_IN_SET('isFreezed', t.problem) > 0 isFreezed,
2024-10-01 13:46:51 +00:00
t.risk,
2025-01-09 10:52:30 +00:00
FIND_IN_SET('hasRisk', t.problem) > 0 hasRisk,
FIND_IN_SET('hasHighRisk', t.problem) > 0 hasHighRisk,
FIND_IN_SET('hasTicketRequest', t.problem) > 0 hasTicketRequest,
FIND_IN_SET('isTaxDataChecked', t.problem) > 0 isTaxDataChecked,
FIND_IN_SET('isTooLittle', t.problem) > 0
2025-01-09 07:43:14 +00:00
AND util.VN_NOW() < (util.VN_CURDATE() +
INTERVAL HOUR(zc.`hour`) HOUR) +
INTERVAL MINUTE(zc.`hour`) MINUTE isTooLittle,
c.businessTypeFk = 'VIP' isVip,
NOT (his.ticketFk IS NULL) hasItemShortage,
NOT (hid.ticketFk IS NULL) hasItemDelay,
NOT (hil.ticketFk IS NULL) hasItemLost,
NOT (hcl.ticketFk IS NULL) hasComponentLack,
NOT (hr.ticketFk IS NULL) hasRounding,
2024-10-01 13:46:51 +00:00
0 totalProblems
FROM tmp.ticket tt
JOIN vn.ticket t ON t.id = tt.ticketFk
JOIN vn.client c ON c.id = t.clientFk
LEFT JOIN hasItemShortage his ON his.ticketFk = t.id
LEFT JOIN hasItemLost hil ON hil.ticketFk = t.id
LEFT JOIN hasRounding hr ON hr.ticketFk = t.id
LEFT JOIN hasItemDelay hid ON hid.ticketFk = t.id
LEFT JOIN hasComponentLack hcl ON hcl.ticketFk = t.id
LEFT JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk
AND zc.dated = util.VN_CURDATE()
GROUP BY t.id;
2025-01-09 07:43:14 +00:00
2024-09-30 14:39:55 +00:00
UPDATE tmp.ticketProblems
2025-01-09 07:43:14 +00:00
SET totalProblems = isFreezed + hasHighRisk + hasTicketRequest +
isTaxDataChecked + hasComponentLack + hasItemDelay +
2024-10-01 13:46:51 +00:00
isTooLittle + hasItemLost + hasRounding + hasItemShortage + isVip;
2025-01-09 07:43:14 +00:00
2024-10-02 13:12:57 +00:00
DROP TEMPORARY TABLE tmp.sale;
END$$
DELIMITER ;