#7965 - unifyProblems #2990

Open
carlosap wants to merge 20 commits from 7965-unifyProblems into dev
2 changed files with 46 additions and 45 deletions
Showing only changes of commit 8f99b14510 - Show all commits

View File

@ -6,6 +6,7 @@ BEGIN
/** /**
* Calcula los problemas para un conjunto de sale * Calcula los problemas para un conjunto de sale
* *
* @param vIsTodayRelative Indica si se calcula el disponible como si todo saliera hoy
* @table tmp.sale(saleFk) Identificadores de los sale a calcular * @table tmp.sale(saleFk) Identificadores de los sale a calcular
* @return tmp.saleProblems * @return tmp.saleProblems
*/ */
@ -45,7 +46,7 @@ BEGIN
JOIN parking p ON p.id = sh.parkingFk JOIN parking p ON p.id = sh.parkingFk
JOIN sector s ON s.id = p.sectorFk JOIN sector s ON s.id = p.sectorFk
GROUP BY ish.itemFk, s.warehouseFk; GROUP BY ish.itemFk, s.warehouseFk;
-- Disponible, faltas, inventario y retrasos -- Disponible, faltas, inventario y retrasos
OPEN vCursor; OPEN vCursor;
l: LOOP l: LOOP
@ -55,11 +56,11 @@ BEGIN
IF vDone THEN IF vDone THEN
LEAVE l; LEAVE l;
END IF; END IF;
-- Disponible: no va a haber suficiente producto para preparar todos los pedidos -- Disponible: no va a haber suficiente producto para preparar todos los pedidos
CALL cache.available_refresh(vAvailableCache, FALSE, vWarehouseFk, vDate); CALL cache.available_refresh(vAvailableCache, FALSE, vWarehouseFk, vDate);
-- Faltas: visible, disponible y ubicado son menores que la cantidad vendida -- Faltas: visible, disponible y ubicado son menores que la cantidad vendida
CALL cache.visible_refresh(vVisibleCache, FALSE, vWarehouseFk); CALL cache.visible_refresh(vVisibleCache, FALSE, vWarehouseFk);
INSERT INTO tmp.saleProblems(saleFk, hasItemShortage) INSERT INTO tmp.saleProblems(saleFk, hasItemShortage)
@ -69,16 +70,16 @@ BEGIN
JOIN ticket t ON t.id = s.ticketFk JOIN ticket t ON t.id = s.ticketFk
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
JOIN itemCategory ic ON ic.id = it.categoryFk JOIN itemCategory ic ON ic.id = it.categoryFk
LEFT JOIN cache.visible v ON v.item_id = i.id LEFT JOIN cache.visible v ON v.item_id = i.id
AND v.calc_id = vVisibleCache AND v.calc_id = vVisibleCache
LEFT JOIN cache.available av ON av.item_id = i.id LEFT JOIN cache.available av ON av.item_id = i.id
AND av.calc_id = vAvailableCache AND av.calc_id = vAvailableCache
LEFT JOIN tItemShelving tis ON tis.itemFk = i.id LEFT JOIN tItemShelving tis ON tis.itemFk = i.id
AND tis.warehouseFk = t.warehouseFk AND tis.warehouseFk = t.warehouseFk
WHERE IFNULL(v.visible, 0) < s.quantity WHERE (v.visible < s.quantity AND v.visible IS NOT NULL)
AND IFNULL(av.available, 0) < s.quantity AND (av.available < s.quantity AND av.available IS NOT NULL)
AND IFNULL(tis.visible, 0) < s.quantity AND (tis.visible < s.quantity AND tis.visible IS NOT NULL)
AND NOT s.isPicked AND NOT s.isPicked
AND NOT s.reserved AND NOT s.reserved
AND ic.merchandise AND ic.merchandise
@ -87,7 +88,7 @@ BEGIN
AND util.VN_CURDATE() = vDate AND util.VN_CURDATE() = vDate
AND t.warehouseFk = vWarehouseFk AND t.warehouseFk = vWarehouseFk
GROUP BY s.id; GROUP BY s.id;
-- Inventario: Visible suficiente, pero ubicado menor a la cantidad vendida -- Inventario: Visible suficiente, pero ubicado menor a la cantidad vendida
INSERT INTO tmp.saleProblems(saleFk, hasItemLost) INSERT INTO tmp.saleProblems(saleFk, hasItemLost)
SELECT s.id, TRUE SELECT s.id, TRUE
@ -100,9 +101,9 @@ BEGIN
LEFT JOIN cache.visible v ON v.item_id = s.itemFk LEFT JOIN cache.visible v ON v.item_id = s.itemFk
AND v.calc_id = vVisibleCache AND v.calc_id = vVisibleCache
LEFT JOIN tItemShelving tis ON tis.itemFk = i.id LEFT JOIN tItemShelving tis ON tis.itemFk = i.id
AND tis.warehouseFk = t.warehouseFk AND tis.warehouseFk = t.warehouseFk
WHERE IFNULL(v.visible, 0) >= s.quantity WHERE (v.visible >= s.quantity AND v.visible IS NOT NULL)
AND IFNULL(tis.visible, 0) < s.quantity AND (tis.visible < s.quantity AND tis.visible IS NOT NULL)
AND s.quantity > 0 AND s.quantity > 0
AND NOT s.isPicked AND NOT s.isPicked
AND NOT s.reserved AND NOT s.reserved
@ -116,7 +117,7 @@ BEGIN
-- Retraso: Disponible suficiente, pero no visible ni ubicado -- Retraso: Disponible suficiente, pero no visible ni ubicado
INSERT INTO tmp.saleProblems(saleFk, hasItemDelay) INSERT INTO tmp.saleProblems(saleFk, hasItemDelay)
SELECT s.id, TRUE SELECT s.id, TRUE
FROM tmp.sale ts FROM tmp.sale ts
JOIN sale s ON s.id = ts.saleFk JOIN sale s ON s.id = ts.saleFk
JOIN ticket t ON t.id = s.ticketFk JOIN ticket t ON t.id = s.ticketFk
@ -128,10 +129,10 @@ BEGIN
LEFT JOIN cache.available av ON av.item_id = i.id LEFT JOIN cache.available av ON av.item_id = i.id
AND av.calc_id = vAvailableCache AND av.calc_id = vAvailableCache
LEFT JOIN tItemShelving tis ON tis.itemFk = i.id LEFT JOIN tItemShelving tis ON tis.itemFk = i.id
AND tis.warehouseFk = t.warehouseFk AND tis.warehouseFk = t.warehouseFk
WHERE IFNULL(v.visible, 0) < s.quantity WHERE (v.visible < s.quantity AND v.visible IS NOT NULL)
AND IFNULL(av.available, 0) >= s.quantity AND (av.available < s.quantity AND av.available IS NOT NULL)
AND IFNULL(tis.visible, 0) < s.quantity AND (tis.visible < s.quantity AND tis.visible IS NOT NULL)
AND s.quantity > 0 AND s.quantity > 0
AND NOT s.isPicked AND NOT s.isPicked
AND NOT s.reserved AND NOT s.reserved
@ -141,9 +142,9 @@ BEGIN
AND util.VN_CURDATE() = vDate AND util.VN_CURDATE() = vDate
AND t.warehouseFk = vWarehouseFk AND t.warehouseFk = vWarehouseFk
GROUP BY s.id GROUP BY s.id
ON DUPLICATE KEY UPDATE hasItemDelay = TRUE; ON DUPLICATE KEY UPDATE hasItemDelay = TRUE;
-- Redondeo: cantidad incorrecta con respecto al grouping -- Redondeo: cantidad incorrecta con respecto al grouping
CALL buy_getUltimate(NULL, vWarehouseFk, vDate); CALL buy_getUltimate(NULL, vWarehouseFk, vDate);
INSERT INTO tmp.saleProblems(saleFk, hasRounding) INSERT INTO tmp.saleProblems(saleFk, hasRounding)
@ -155,7 +156,7 @@ BEGIN
JOIN item i ON i.id = s.itemFk JOIN item i ON i.id = s.itemFk
JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
JOIN buy b ON b.id = bu.buyFk JOIN buy b ON b.id = bu.buyFk
WHERE MOD(s.quantity, b.`grouping`) WHERE MOD(s.quantity, b.`grouping`)
GROUP BY s.id GROUP BY s.id
ON DUPLICATE KEY UPDATE hasRounding = TRUE; ON DUPLICATE KEY UPDATE hasRounding = TRUE;

View File

@ -6,6 +6,7 @@ BEGIN
/** /**
* Calcula los problemas para un conjunto de tickets. * Calcula los problemas para un conjunto de tickets.
* *
* @param vIsTodayRelative Indica si se calcula el disponible como si todo saliera hoy
* @table tmp.ticket(ticketFk) Identificadores de los tickets a calcular * @table tmp.ticket(ticketFk) Identificadores de los tickets a calcular
* @return tmp.ticketProblems, tmp.saleProblems * @return tmp.ticketProblems, tmp.saleProblems
*/ */
@ -13,14 +14,14 @@ BEGIN
saleFk INT(11), saleFk INT(11),
PRIMARY KEY (saleFk) PRIMARY KEY (saleFk)
) ENGINE = MEMORY ) ENGINE = MEMORY
SELECT DISTINCT s.id saleFk SELECT DISTINCT s.id saleFk
FROM tmp.ticket tt FROM tmp.ticket tt
JOIN ticket t ON t.id = tt.ticketFk JOIN ticket t ON t.id = tt.ticketFk
JOIN sale s ON s.ticketFk = t.id JOIN sale s ON s.ticketFk = t.id
WHERE t.shipped BETWEEN util.VN_CURDATE() WHERE t.shipped BETWEEN util.VN_CURDATE()
AND util.dayEnd(util.VN_CURDATE() + INTERVAL IF(vIsTodayRelative, 9.9, 1.9) DAY) AND util.dayEnd(util.VN_CURDATE() + INTERVAL IF(vIsTodayRelative, 9.9, 1.9) DAY)
GROUP BY s.id; GROUP BY s.id;
CALL sale_getProblems(vIsTodayRelative); CALL sale_getProblems(vIsTodayRelative);
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketProblems ( CREATE OR REPLACE TEMPORARY TABLE tmp.ticketProblems (
@ -57,7 +58,7 @@ BEGIN
FROM tmp.saleProblems sp FROM tmp.saleProblems sp
JOIN vn.sale s ON s.id = sp.saleFk JOIN vn.sale s ON s.id = sp.saleFk
WHERE sp.hasRounding WHERE sp.hasRounding
GROUP BY s.ticketFk GROUP BY s.ticketFk
), hasItemDelay AS( ), hasItemDelay AS(
SELECT s.ticketFk SELECT s.ticketFk
FROM tmp.saleProblems sp FROM tmp.saleProblems sp
@ -71,23 +72,22 @@ BEGIN
WHERE FIND_IN_SET('hasComponentLack', s.problem) WHERE FIND_IN_SET('hasComponentLack', s.problem)
GROUP BY s.ticketFk GROUP BY s.ticketFk
)SELECT tt.ticketFk, )SELECT tt.ticketFk,
IF(FIND_IN_SET('isFreezed', t.problem), TRUE, FALSE) isFreezed, FIND_IN_SET('isFreezed', t.problem) isFreezed,
t.risk, t.risk,
IF(FIND_IN_SET('hasRisk', t.problem), TRUE, FALSE) hasRisk, FIND_IN_SET('hasRisk', t.problem) hasRisk,
IF(FIND_IN_SET('hasHighRisk', t.problem), TRUE, FALSE) hasHighRisk, FIND_IN_SET('hasHighRisk', t.problem) hasHighRisk,
IF(FIND_IN_SET('hasTicketRequest', t.problem), TRUE, FALSE) hasTicketRequest, FIND_IN_SET('hasTicketRequest', t.problem) hasTicketRequest,
IF(FIND_IN_SET('isTaxDataChecked', t.problem), TRUE, FALSE) isTaxDataChecked, FIND_IN_SET('isTaxDataChecked', t.problem) isTaxDataChecked,
IF(FIND_IN_SET('isTooLittle', t.problem) FIND_IN_SET('isTooLittle', t.problem)
AND util.VN_NOW() < (util.VN_CURDATE() + AND util.VN_NOW() < (util.VN_CURDATE() +
INTERVAL HOUR(zc.`hour`) HOUR) + INTERVAL HOUR(zc.`hour`) HOUR) +
INTERVAL MINUTE(zc.`hour`) MINUTE, INTERVAL MINUTE(zc.`hour`) MINUTE isTooLittle,
TRUE, FALSE) isTooLittle, c.businessTypeFk = 'VIP' isVip,
IF(c.businessTypeFk = 'VIP', TRUE, FALSE) isVip, NOT (his.ticketFk IS NULL) hasItemShortage,
IF(his.ticketFk IS NULL, FALSE, TRUE) hasItemShortage, NOT (hid.ticketFk IS NULL) hasItemDelay,
IF(hid.ticketFk IS NULL, FALSE, TRUE) hasItemDelay, NOT (hil.ticketFk IS NULL) hasItemLost,
IF(hil.ticketFk IS NULL, FALSE, TRUE) hasItemLost, NOT (hcl.ticketFk IS NULL) hasComponentLack,
IF(hcl.ticketFk IS NULL, FALSE, TRUE) hasComponentLack, NOT (hr.ticketFk IS NULL) hasRounding,
IF(hr.ticketFk IS NULL, FALSE, TRUE) hasRounding,
0 totalProblems 0 totalProblems
FROM tmp.ticket tt FROM tmp.ticket tt
JOIN vn.ticket t ON t.id = tt.ticketFk JOIN vn.ticket t ON t.id = tt.ticketFk
@ -100,12 +100,12 @@ BEGIN
LEFT JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk LEFT JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk
AND zc.dated = util.VN_CURDATE() AND zc.dated = util.VN_CURDATE()
GROUP BY t.id; GROUP BY t.id;
UPDATE tmp.ticketProblems UPDATE tmp.ticketProblems
SET totalProblems = isFreezed + hasHighRisk + hasTicketRequest + SET totalProblems = isFreezed + hasHighRisk + hasTicketRequest +
isTaxDataChecked + hasComponentLack + hasItemDelay + isTaxDataChecked + hasComponentLack + hasItemDelay +
isTooLittle + hasItemLost + hasRounding + hasItemShortage + isVip; isTooLittle + hasItemLost + hasRounding + hasItemShortage + isVip;
DROP TEMPORARY TABLE tmp.sale; DROP TEMPORARY TABLE tmp.sale;
END$$ END$$
DELIMITER ; DELIMITER ;