#7965 - unifyProblems #2990
|
@ -6,6 +6,7 @@ BEGIN
|
|||
/**
|
||||
* Calcula los problemas para un conjunto de sale
|
||||
*
|
||||
* @param vIsTodayRelative Indica si se calcula el disponible como si todo saliera hoy
|
||||
jgallego marked this conversation as resolved
Outdated
|
||||
* @table tmp.sale(saleFk) Identificadores de los sale a calcular
|
||||
* @return tmp.saleProblems
|
||||
*/
|
||||
|
@ -45,7 +46,7 @@ BEGIN
|
|||
JOIN parking p ON p.id = sh.parkingFk
|
||||
JOIN sector s ON s.id = p.sectorFk
|
||||
GROUP BY ish.itemFk, s.warehouseFk;
|
||||
|
||||
|
||||
-- Disponible, faltas, inventario y retrasos
|
||||
OPEN vCursor;
|
||||
l: LOOP
|
||||
|
@ -55,11 +56,11 @@ BEGIN
|
|||
IF vDone THEN
|
||||
LEAVE l;
|
||||
END IF;
|
||||
|
||||
|
||||
-- Disponible: no va a haber suficiente producto para preparar todos los pedidos
|
||||
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);
|
||||
|
||||
INSERT INTO tmp.saleProblems(saleFk, hasItemShortage)
|
||||
|
@ -69,16 +70,16 @@ BEGIN
|
|||
JOIN ticket t ON t.id = s.ticketFk
|
||||
JOIN item i ON i.id = s.itemFk
|
||||
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
|
||||
AND v.calc_id = vVisibleCache
|
||||
LEFT JOIN cache.available av ON av.item_id = i.id
|
||||
AND av.calc_id = vAvailableCache
|
||||
LEFT JOIN tItemShelving tis ON tis.itemFk = i.id
|
||||
AND tis.warehouseFk = t.warehouseFk
|
||||
WHERE IFNULL(v.visible, 0) < s.quantity
|
||||
AND IFNULL(av.available, 0) < s.quantity
|
||||
AND IFNULL(tis.visible, 0) < s.quantity
|
||||
AND tis.warehouseFk = t.warehouseFk
|
||||
WHERE (v.visible < s.quantity AND v.visible IS NOT NULL)
|
||||
jgallego marked this conversation as resolved
Outdated
jgallego
commented
ja posats canvia el IFNULL que en la convencio ja no esta acceptat ja posats canvia el IFNULL que en la convencio ja no esta acceptat
|
||||
AND (av.available < s.quantity AND av.available IS NOT NULL)
|
||||
AND (tis.visible < s.quantity AND tis.visible IS NOT NULL)
|
||||
AND NOT s.isPicked
|
||||
AND NOT s.reserved
|
||||
AND ic.merchandise
|
||||
|
@ -87,7 +88,7 @@ BEGIN
|
|||
AND util.VN_CURDATE() = vDate
|
||||
AND t.warehouseFk = vWarehouseFk
|
||||
GROUP BY s.id;
|
||||
|
||||
|
||||
-- Inventario: Visible suficiente, pero ubicado menor a la cantidad vendida
|
||||
INSERT INTO tmp.saleProblems(saleFk, hasItemLost)
|
||||
SELECT s.id, TRUE
|
||||
|
@ -100,9 +101,9 @@ BEGIN
|
|||
LEFT JOIN cache.visible v ON v.item_id = s.itemFk
|
||||
AND v.calc_id = vVisibleCache
|
||||
LEFT JOIN tItemShelving tis ON tis.itemFk = i.id
|
||||
AND tis.warehouseFk = t.warehouseFk
|
||||
WHERE IFNULL(v.visible, 0) >= s.quantity
|
||||
AND IFNULL(tis.visible, 0) < s.quantity
|
||||
AND tis.warehouseFk = t.warehouseFk
|
||||
WHERE (v.visible >= s.quantity AND v.visible IS NOT NULL)
|
||||
AND (tis.visible < s.quantity AND tis.visible IS NOT NULL)
|
||||
AND s.quantity > 0
|
||||
AND NOT s.isPicked
|
||||
AND NOT s.reserved
|
||||
|
@ -116,7 +117,7 @@ BEGIN
|
|||
|
||||
-- Retraso: Disponible suficiente, pero no visible ni ubicado
|
||||
INSERT INTO tmp.saleProblems(saleFk, hasItemDelay)
|
||||
SELECT s.id, TRUE
|
||||
SELECT s.id, TRUE
|
||||
FROM tmp.sale ts
|
||||
JOIN sale s ON s.id = ts.saleFk
|
||||
JOIN ticket t ON t.id = s.ticketFk
|
||||
|
@ -128,10 +129,10 @@ BEGIN
|
|||
LEFT JOIN cache.available av ON av.item_id = i.id
|
||||
AND av.calc_id = vAvailableCache
|
||||
LEFT JOIN tItemShelving tis ON tis.itemFk = i.id
|
||||
AND tis.warehouseFk = t.warehouseFk
|
||||
WHERE IFNULL(v.visible, 0) < s.quantity
|
||||
AND IFNULL(av.available, 0) >= s.quantity
|
||||
AND IFNULL(tis.visible, 0) < s.quantity
|
||||
AND tis.warehouseFk = t.warehouseFk
|
||||
WHERE (v.visible < s.quantity AND v.visible IS NOT NULL)
|
||||
AND (av.available < s.quantity AND av.available IS NOT NULL)
|
||||
AND (tis.visible < s.quantity AND tis.visible IS NOT NULL)
|
||||
AND s.quantity > 0
|
||||
AND NOT s.isPicked
|
||||
AND NOT s.reserved
|
||||
|
@ -141,9 +142,9 @@ BEGIN
|
|||
AND util.VN_CURDATE() = vDate
|
||||
AND t.warehouseFk = vWarehouseFk
|
||||
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);
|
||||
|
||||
INSERT INTO tmp.saleProblems(saleFk, hasRounding)
|
||||
|
@ -155,7 +156,7 @@ BEGIN
|
|||
JOIN item i ON i.id = s.itemFk
|
||||
JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
|
||||
JOIN buy b ON b.id = bu.buyFk
|
||||
WHERE MOD(s.quantity, b.`grouping`)
|
||||
WHERE MOD(s.quantity, b.`grouping`)
|
||||
GROUP BY s.id
|
||||
ON DUPLICATE KEY UPDATE hasRounding = TRUE;
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ BEGIN
|
|||
/**
|
||||
* Calcula los problemas para un conjunto de tickets.
|
||||
*
|
||||
* @param vIsTodayRelative Indica si se calcula el disponible como si todo saliera hoy
|
||||
jgallego marked this conversation as resolved
Outdated
jgallego
commented
vIsTodayRelative falta descripcio vIsTodayRelative falta descripcio
|
||||
* @table tmp.ticket(ticketFk) Identificadores de los tickets a calcular
|
||||
* @return tmp.ticketProblems, tmp.saleProblems
|
||||
*/
|
||||
|
@ -13,14 +14,14 @@ BEGIN
|
|||
saleFk INT(11),
|
||||
PRIMARY KEY (saleFk)
|
||||
) ENGINE = MEMORY
|
||||
SELECT DISTINCT s.id saleFk
|
||||
SELECT DISTINCT s.id saleFk
|
||||
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
|
||||
WHERE t.shipped BETWEEN util.VN_CURDATE()
|
||||
AND util.dayEnd(util.VN_CURDATE() + INTERVAL IF(vIsTodayRelative, 9.9, 1.9) DAY)
|
||||
GROUP BY s.id;
|
||||
|
||||
|
||||
CALL sale_getProblems(vIsTodayRelative);
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketProblems (
|
||||
|
@ -57,7 +58,7 @@ BEGIN
|
|||
FROM tmp.saleProblems sp
|
||||
JOIN vn.sale s ON s.id = sp.saleFk
|
||||
WHERE sp.hasRounding
|
||||
GROUP BY s.ticketFk
|
||||
GROUP BY s.ticketFk
|
||||
), hasItemDelay AS(
|
||||
SELECT s.ticketFk
|
||||
FROM tmp.saleProblems sp
|
||||
|
@ -71,23 +72,22 @@ BEGIN
|
|||
WHERE FIND_IN_SET('hasComponentLack', s.problem)
|
||||
GROUP BY s.ticketFk
|
||||
)SELECT tt.ticketFk,
|
||||
IF(FIND_IN_SET('isFreezed', t.problem), TRUE, FALSE) isFreezed,
|
||||
FIND_IN_SET('isFreezed', t.problem) isFreezed,
|
||||
t.risk,
|
||||
jgallego marked this conversation as resolved
Outdated
jgallego
commented
es posible que el if sobre si true es true, asignau directament no? es posible que el if sobre si true es true, asignau directament no?
|
||||
IF(FIND_IN_SET('hasRisk', t.problem), TRUE, FALSE) hasRisk,
|
||||
IF(FIND_IN_SET('hasHighRisk', t.problem), TRUE, FALSE) hasHighRisk,
|
||||
IF(FIND_IN_SET('hasTicketRequest', t.problem), TRUE, FALSE) hasTicketRequest,
|
||||
IF(FIND_IN_SET('isTaxDataChecked', t.problem), TRUE, FALSE) isTaxDataChecked,
|
||||
IF(FIND_IN_SET('isTooLittle', t.problem)
|
||||
AND util.VN_NOW() < (util.VN_CURDATE() +
|
||||
INTERVAL HOUR(zc.`hour`) HOUR) +
|
||||
INTERVAL MINUTE(zc.`hour`) MINUTE,
|
||||
TRUE, FALSE) isTooLittle,
|
||||
IF(c.businessTypeFk = 'VIP', TRUE, FALSE) isVip,
|
||||
IF(his.ticketFk IS NULL, FALSE, TRUE) hasItemShortage,
|
||||
IF(hid.ticketFk IS NULL, FALSE, TRUE) hasItemDelay,
|
||||
IF(hil.ticketFk IS NULL, FALSE, TRUE) hasItemLost,
|
||||
IF(hcl.ticketFk IS NULL, FALSE, TRUE) hasComponentLack,
|
||||
IF(hr.ticketFk IS NULL, FALSE, TRUE) hasRounding,
|
||||
FIND_IN_SET('hasRisk', t.problem) hasRisk,
|
||||
FIND_IN_SET('hasHighRisk', t.problem) hasHighRisk,
|
||||
FIND_IN_SET('hasTicketRequest', t.problem) hasTicketRequest,
|
||||
FIND_IN_SET('isTaxDataChecked', t.problem) isTaxDataChecked,
|
||||
FIND_IN_SET('isTooLittle', t.problem)
|
||||
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,
|
||||
jgallego marked this conversation as resolved
Outdated
jgallego
commented
aci pots posar NOT i la comparacio aci pots posar NOT i la comparacio
|
||||
NOT (hil.ticketFk IS NULL) hasItemLost,
|
||||
NOT (hcl.ticketFk IS NULL) hasComponentLack,
|
||||
NOT (hr.ticketFk IS NULL) hasRounding,
|
||||
0 totalProblems
|
||||
FROM tmp.ticket tt
|
||||
JOIN vn.ticket t ON t.id = tt.ticketFk
|
||||
|
@ -100,12 +100,12 @@ BEGIN
|
|||
LEFT JOIN vn.zoneClosure zc ON zc.zoneFk = t.zoneFk
|
||||
AND zc.dated = util.VN_CURDATE()
|
||||
GROUP BY t.id;
|
||||
|
||||
|
||||
UPDATE tmp.ticketProblems
|
||||
SET totalProblems = isFreezed + hasHighRisk + hasTicketRequest +
|
||||
isTaxDataChecked + hasComponentLack + hasItemDelay +
|
||||
SET totalProblems = isFreezed + hasHighRisk + hasTicketRequest +
|
||||
isTaxDataChecked + hasComponentLack + hasItemDelay +
|
||||
isTooLittle + hasItemLost + hasRounding + hasItemShortage + isVip;
|
||||
|
||||
|
||||
DROP TEMPORARY TABLE tmp.sale;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
Loading…
Reference in New Issue
falta vIsTodayRelative