From e225d6d123b32bf9bb4d95bea62f5a4e7cbee66b Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 28 Feb 2025 12:07:25 +0100 Subject: [PATCH 1/2] refactor: refs #7912 Item calc cost Ricardo --- db/routines/bs/procedures/waste_addSales.sql | 90 +++++++++++++++++--- 1 file changed, 80 insertions(+), 10 deletions(-) diff --git a/db/routines/bs/procedures/waste_addSales.sql b/db/routines/bs/procedures/waste_addSales.sql index 69678b4fc2..7e7cb6042b 100644 --- a/db/routines/bs/procedures/waste_addSales.sql +++ b/db/routines/bs/procedures/waste_addSales.sql @@ -26,7 +26,76 @@ BEGIN -- Obtiene el último día de la semana de esa fecha SET vDateTo = DATE_ADD(vDateTo, INTERVAL (6 - ((WEEKDAY(vDateTo) + 1) % 7)) DAY); - CALL cache.last_buy_refresh(FALSE); + -- !! Cálculo del coste por warehouse y artículo (Reglas Ricardo) !! + -- Coste de las compras de la última semana (Sin inventario y arreglos stock) + CREATE OR REPLACE TEMPORARY TABLE tItemCalcCost + (PRIMARY KEY (warehouseFk, itemFk)) + ENGINE = MEMORY + SELECT w.id warehouseFk, + b.itemFk, + IF(COUNT(*) > 1, + SUM((b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * b.quantity) / SUM(b.quantity), + (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) + ) cost + FROM vn.buy b + JOIN vn.entry e ON e.id = b.entryFk + JOIN vn.travel tr ON tr.id = e.travelFk + JOIN vn.warehouse w ON w.id = tr.warehouseInFk + WHERE tr.landed BETWEEN CURDATE() - INTERVAL 1 WEEK AND CURDATE() + AND e.supplierFk NOT IN ( + (SELECT supplierFk FROM vn.inventoryConfig), + (SELECT id FROM vn.supplier WHERE name = 'ARREGLOS STOCK') + ) + GROUP BY w.id, b.itemFk; + + -- Proveedores reales + INSERT IGNORE INTO tItemCalcCost(warehouseFk, itemFk, cost) + WITH wBuysNumered AS ( + SELECT ROW_NUMBER() OVER( + PARTITION BY tr.warehouseInFk, b.itemFk + ORDER BY tr.landed DESC, b.buyingValue DESC, b.id DESC + ) num, + w.id warehouseFk, + b.itemFk, + b.id + FROM vn.buy b + JOIN vn.entry e ON e.id = b.entryFk + JOIN vn.travel tr ON tr.id = e.travelFk + JOIN vn.warehouse w ON w.id = tr.warehouseInFk + JOIN vn.supplier s ON s.id = e.supplierFk + WHERE tr.landed BETWEEN CURDATE() - INTERVAL 1 YEAR AND CURDATE() + AND s.isReal + ) + SELECT bn.warehouseFk, + b.itemFk, + (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) cost + FROM wBuysNumered bn + JOIN vn.buy b ON b.id = bn.id + WHERE num = 1; + + -- Como último recurso, se coge cualquier compra + INSERT IGNORE INTO tItemCalcCost(warehouseFk, itemFk, cost) + WITH wBuysNumered AS ( + SELECT ROW_NUMBER() OVER( + PARTITION BY tr.warehouseInFk, b.itemFk + ORDER BY tr.landed DESC, b.buyingValue DESC, b.id DESC + ) num, + w.id warehouseFk, + b.itemFk, + b.id + FROM vn.buy b + JOIN vn.entry e ON e.id = b.entryFk + JOIN vn.travel tr ON tr.id = e.travelFk + JOIN vn.warehouse w ON w.id = tr.warehouseInFk + JOIN vn.supplier s ON s.id = e.supplierFk + WHERE tr.landed BETWEEN CURDATE() - INTERVAL 1 YEAR AND CURDATE() + ) + SELECT bn.warehouseFk, + b.itemFk, + (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) cost + FROM wBuysNumered bn + JOIN vn.buy b ON b.id = bn.id + WHERE num = 1; REPLACE bs.waste SELECT YEARWEEK(t.shipped, 6) DIV 100, @@ -34,35 +103,35 @@ BEGIN it.workerFk, it.id, s.itemFk, - SUM((b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity), + SUM((icc.cost) * s.quantity), SUM(IF(aw.`type`, s.quantity, 0)), SUM(IF( aw.`type` = 'external', - (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity, + (icc.cost) * s.quantity, 0 ) ), SUM(IF( aw.`type` = 'fault', - (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity, + (icc.cost) * s.quantity, 0 ) ), SUM(IF( aw.`type` = 'container', - (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity, + (icc.cost) * s.quantity, 0 ) ), SUM(IF( aw.`type` = 'break', - (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity, + (icc.cost) * s.quantity, 0 ) ), SUM(IF( aw.`type` = 'other', - (b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity, + (icc.cost) * s.quantity, 0 ) ) @@ -73,11 +142,12 @@ BEGIN JOIN vn.address a FORCE INDEX (PRIMARY) ON a.id = t.addressFk LEFT JOIN vn.addressWaste aw ON aw.addressFk = a.id JOIN vn.warehouse w ON w.id = t.warehouseFk - JOIN cache.last_buy lb ON lb.item_id = i.id - AND lb.warehouse_id = w.id - JOIN vn.buy b ON b.id = lb.buy_id + JOIN tItemCalcCost icc ON icc.itemFk = i.id + AND icc.warehouseFk = w.id WHERE t.shipped BETWEEN vDateFrom AND util.dayEnd(vDateTo) AND w.isManaged GROUP BY YEARWEEK(t.shipped, 6) DIV 100, WEEK(t.shipped, 6), i.id; + + DROP TEMPORARY TABLE tItemCalcCost; END$$ DELIMITER ; -- 2.40.1 From 076f4f317384eb79b4eb2d50c1496e722566d452 Mon Sep 17 00:00:00 2001 From: guillermo Date: Fri, 28 Feb 2025 13:01:49 +0100 Subject: [PATCH 2/2] refactor: refs #7912 Requested changes --- db/routines/bs/procedures/waste_addSales.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/db/routines/bs/procedures/waste_addSales.sql b/db/routines/bs/procedures/waste_addSales.sql index 7e7cb6042b..4697a0aa3b 100644 --- a/db/routines/bs/procedures/waste_addSales.sql +++ b/db/routines/bs/procedures/waste_addSales.sql @@ -11,7 +11,7 @@ BEGIN * @param vDateTo Fecha hasta */ DECLARE vDaysInYear INT; - SET vDaysInYear = DATEDIFF(util.lastDayOfYear(CURDATE()), util.firstDayOfYear(CURDATE())); + SET vDaysInYear = DATEDIFF(util.lastDayOfYear(util.VN_CURDATE()), util.firstDayOfYear(util.VN_CURDATE())); SET vDateFrom = COALESCE(vDateFrom, util.VN_CURDATE()); SET vDateTo = COALESCE(vDateTo, util.VN_CURDATE()); @@ -41,7 +41,7 @@ BEGIN JOIN vn.entry e ON e.id = b.entryFk JOIN vn.travel tr ON tr.id = e.travelFk JOIN vn.warehouse w ON w.id = tr.warehouseInFk - WHERE tr.landed BETWEEN CURDATE() - INTERVAL 1 WEEK AND CURDATE() + WHERE tr.landed BETWEEN util.VN_CURDATE() - INTERVAL 1 WEEK AND util.VN_CURDATE() AND e.supplierFk NOT IN ( (SELECT supplierFk FROM vn.inventoryConfig), (SELECT id FROM vn.supplier WHERE name = 'ARREGLOS STOCK') @@ -63,7 +63,7 @@ BEGIN JOIN vn.travel tr ON tr.id = e.travelFk JOIN vn.warehouse w ON w.id = tr.warehouseInFk JOIN vn.supplier s ON s.id = e.supplierFk - WHERE tr.landed BETWEEN CURDATE() - INTERVAL 1 YEAR AND CURDATE() + WHERE tr.landed BETWEEN util.VN_CURDATE() - INTERVAL 1 YEAR AND util.VN_CURDATE() AND s.isReal ) SELECT bn.warehouseFk, @@ -88,7 +88,7 @@ BEGIN JOIN vn.travel tr ON tr.id = e.travelFk JOIN vn.warehouse w ON w.id = tr.warehouseInFk JOIN vn.supplier s ON s.id = e.supplierFk - WHERE tr.landed BETWEEN CURDATE() - INTERVAL 1 YEAR AND CURDATE() + WHERE tr.landed BETWEEN util.VN_CURDATE() - INTERVAL 1 YEAR AND util.VN_CURDATE() ) SELECT bn.warehouseFk, b.itemFk, -- 2.40.1