#7709 -supplierPackaging_ReportSource_2 #3107

Open
robert wants to merge 29 commits from 7709-supplierPackaging_ReportSource_2 into dev
1 changed files with 101 additions and 89 deletions

View File

@ -1,94 +1,53 @@
DELIMITER $$ DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`supplierPackaging_ReportSource`( CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`supplierPackaging_reportSource`(
vFromDated DATE, vFromDated DATE,
vSupplierFk INT vNif VARCHAR(50)
) )
BEGIN BEGIN
/** /**
* Create a report with packaging balance * Create a report with packaging balance
* *
* @param vFromDated Starting date * @param vFromDated Starting date
* @param vSupplierFk Supplier ID * @param vNif number of nif/fi of supplier or client
*/ */
SET @vBalance = 0; DECLARE vEntityId INT;
SET @vItemFk = NULL;
CREATE OR REPLACE TEMPORARY TABLE tSupplierPackaging CREATE OR REPLACE TEMPORARY TABLE tPackaging
SELECT supplierFk, SELECT itemFk,
itemFk,
longName, longName,
supplier, `name`,
entryFk, entryFk,
landed, landed,
`in`, `in`,
`out`, `out`,
sref, CAST(cmrFk AS CHAR) sref,
buyingValue, buyingValue
IF (
NOT (@vItemFk <=> sub.itemFk),
@vBalance := (`in` - `out`),
@vBalance := (`in` - `out` + @vBalance)
) balance,
@vItemFk := sub.itemFk previousItemFk
FROM ( FROM (
SELECT sp.supplierFk, SELECT s.itemFk,
sp.itemFk,
sp.longName,
sp.supplier,
CONCAT('E',sp.entryFk) entryFk,
sp.landed,
sp.`in`,
sp.`out`,
e.invoiceNumber sref,
sp.buyingValue
FROM supplierPackaging sp
JOIN entry e ON e.id = sp.entryFk
WHERE sp.supplierFk = vSupplierFk
AND sp.landed >= vFromDated
UNION ALL
SELECT vSupplierFk,
itemFk,
longName,
supplier,
'E previous',
vFromDated,
SUM(`in`),
SUM(`out`),
NULL,
AVG(buyingValue)
FROM supplierPackaging
WHERE supplierFk = vSupplierFk
AND landed < vFromDated
GROUP BY itemFk
UNION ALL
SELECT vSupplierFk,
s.itemFk,
i.longName, i.longName,
c.name, c.name,
CONCAT('T',s.ticketFk), CONCAT('T', s.ticketFk) entryFk,
DATE(t.shipped), DATE(t.shipped) landed,
-LEAST(s.quantity,0) `in`, -LEAST(s.quantity, 0) `in`,
GREATEST(s.quantity,0) `out`, GREATEST(s.quantity, 0) `out`,
t.cmrFk, t.cmrFk,
s.price * (100 - s.discount) / 100 s.price * (100 - s.discount) / 100 buyingValue
FROM sale s FROM sale s
JOIN item i ON i.id = s.itemFk JOIN item i ON i.id = s.itemFk
JOIN packaging p ON p.itemFk = i.id JOIN packaging p ON p.itemFk = i.id
JOIN ticket t ON t.id = s.ticketFk JOIN ticket t ON t.id = s.ticketFk
JOIN client c ON c.id = t.clientFk JOIN client c ON c.id = t.clientFk
JOIN supplier su ON su.nif = c.fi WHERE c.fi = vNif
WHERE su.id = vSupplierFk
AND t.shipped >= vFromDated AND t.shipped >= vFromDated
AND p.isPackageReturnable AND p.isPackageReturnable
UNION ALL UNION ALL
SELECT vSupplierFk, SELECT s.itemFk,
s.itemFk,
i.longName, i.longName,
c.name, c.name,
'T previous', 'T previous',
vFromDated, vFromDated,
SUM(-LEAST(s.quantity,0)) `in`, SUM(-LEAST(s.quantity, 0)),
SUM(GREATEST(s.quantity,0)) `out`, SUM(GREATEST(s.quantity, 0)),
NULL, NULL,
AVG(s.price * (100 - s.discount) / 100) AVG(s.price * (100 - s.discount) / 100)
FROM sale s FROM sale s
@ -96,21 +55,19 @@ BEGIN
JOIN packaging p ON p.itemFk = i.id JOIN packaging p ON p.itemFk = i.id
JOIN ticket t ON t.id = s.ticketFk JOIN ticket t ON t.id = s.ticketFk
JOIN client c ON c.id = t.clientFk JOIN client c ON c.id = t.clientFk
JOIN supplier su ON su.nif = c.fi WHERE c.fi = vNif
WHERE su.id = vSupplierFk
AND t.shipped < vFromDated AND t.shipped < vFromDated
AND p.isPackageReturnable AND p.isPackageReturnable
AND NOT t.isDeleted AND NOT t.isDeleted
GROUP BY s.itemFk GROUP BY s.itemFk
UNION ALL UNION ALL
SELECT vSupplierFk, SELECT p.itemFk,
p.itemFk,
i.longName, i.longName,
c.name, c.name,
CONCAT('TP',tp.ticketFk), CONCAT('TP', tp.ticketFk),
DATE(t.shipped), DATE(t.shipped),
-LEAST(tp.quantity,0) `in`, -LEAST(tp.quantity, 0),
GREATEST(tp.quantity,0) `out`, GREATEST(tp.quantity, 0),
t.cmrFk, t.cmrFk,
0 0
FROM ticketPackaging tp FROM ticketPackaging tp
@ -118,19 +75,17 @@ BEGIN
JOIN item i ON i.id = p.itemFk JOIN item i ON i.id = p.itemFk
JOIN ticket t ON t.id = tp.ticketFk JOIN ticket t ON t.id = tp.ticketFk
JOIN client c ON c.id = t.clientFk JOIN client c ON c.id = t.clientFk
JOIN supplier su ON su.nif = c.fi WHERE c.fi = vNif
WHERE su.id = vSupplierFk
AND t.shipped >= vFromDated AND t.shipped >= vFromDated
AND p.isPackageReturnable AND p.isPackageReturnable
UNION ALL UNION ALL
SELECT vSupplierFk, SELECT p.itemFk,
p.itemFk,
i.longName, i.longName,
c.name, c.name,
'TP previous', 'TP previous',
vFromDated, vFromDated,
SUM(-LEAST(tp.quantity,0)) `in`, SUM(-LEAST(tp.quantity, 0)) `in`,
SUM(GREATEST(tp.quantity,0)) `out`, SUM(GREATEST(tp.quantity, 0)) `out`,
NULL, NULL,
0 0
FROM ticketPackaging tp FROM ticketPackaging tp
@ -138,30 +93,87 @@ BEGIN
JOIN item i ON i.id = p.itemFk JOIN item i ON i.id = p.itemFk
JOIN ticket t ON t.id = tp.ticketFk JOIN ticket t ON t.id = tp.ticketFk
JOIN client c ON c.id = t.clientFk JOIN client c ON c.id = t.clientFk
JOIN supplier su ON su.nif = c.fi WHERE c.fi = vNif
WHERE su.id = vSupplierFk
AND t.shipped < vFromDated AND t.shipped < vFromDated
AND p.isPackageReturnable AND p.isPackageReturnable
AND NOT t.isDeleted AND NOT t.isDeleted
GROUP BY p.itemFk GROUP BY p.itemFk
ORDER BY itemFk, landed, entryFk ORDER BY itemFk , landed, entryFk
) sub )sub
WHERE `out` OR `in`; WHERE `out` OR `in`;
SELECT supplierFk, SELECT id INTO vEntityId
itemFk, FROM supplier
WHERE nif = vNif;
IF vEntityId IS NULL THEN
SELECT id INTO vEntityId
FROM client
WHERE fi = vNif;
INSERT INTO tPackaging
SELECT itemFk,
longName, longName,
supplier, `name`,
entryFk, entryFk,
landed, landed,
CAST(`in` AS DECIMAL(10,0)) `in`, `in`,
CAST(`out` AS DECIMAL(10,0)) `out`, `out`,
sref,
buyingValue
FROM (
SELECT sp.itemFk,
sp.longName,
sp.supplier name,
CONCAT('E', sp.entryFk) entryFk,
sp.landed,
sp.`in`,
sp.`out`,
e.invoiceNumber sref,
sp.buyingValue
FROM supplierPackaging sp
JOIN entry e ON e.id = sp.entryFk
JOIN supplier s ON s.id = sp.supplierFk
WHERE s.nif = vNif
AND sp.landed >= vFromDated
UNION ALL
SELECT itemFk,
longName,
supplier,
'E previous',
vFromDated,
GREATEST(SUM(`in`) - SUM(`out`), 0) AS `in`,
LEAST(SUM(`in`) - SUM(`out`), 0) AS `out`,
NULL,
AVG(buyingValue)
FROM supplierPackaging sp
JOIN supplier s ON s.id = sp.supplierFk
WHERE s.nif = vNif
AND landed < vFromDated
GROUP BY itemFk
ORDER BY itemFk , landed, entryFk
) sub
WHERE `out` OR `in`;
END IF;
SELECT vEntityId,
itemFk,
longName,
name,
entryFk,
landed,
CAST(`in` AS DECIMAL(10, 0)) `in`,
CAST(`out` AS DECIMAL(10, 0)) `out`,
sref, sref,
buyingValue, buyingValue,
balance CAST(SUM(IF(`in` = 0, -`out`, `in`)) OVER (
FROM tSupplierPackaging PARTITION BY itemFk
WHERE NOT (NOT balance AND landed < CURDATE() - INTERVAL 1 YEAR); ORDER BY itemFk , landed, entryFk
) AS DECIMAL(10,2)) balance
FROM tPackaging
WHERE landed >= util.VN_CURDATE() - INTERVAL 1 YEAR
ORDER BY itemFk, landed, entryFk;
DROP TEMPORARY TABLE tSupplierPackaging; DROP TEMPORARY TABLE tPackaging;
END$$ END$$
DELIMITER ; DELIMITER ;