#7965 - unifyProblems #2990
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
Loading…
Reference in New Issue