69 lines
2.0 KiB
SQL
69 lines
2.0 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`client_checkBalance`(IN vDateTo DATETIME, IN vIsConciliated BOOL)
|
|
BEGIN
|
|
/**
|
|
* Compara los datos de nuestros clientes con
|
|
* los que hay en la base de datos de sage
|
|
*
|
|
* @param vDateTo
|
|
* @param vIsConciliated
|
|
* @table tmp.ledgerComparative (id, date, account, debit, credit, companyFk)
|
|
*/
|
|
DECLARE vDateFrom DATE;
|
|
DECLARE vMaxTolerance DECIMAL(10,2);
|
|
|
|
SELECT util.firstDayOfYear(vDateTo), util.dayEnd(vDateTo), maxTolerance
|
|
INTO vDateFrom, vDateTo, vMaxTolerance
|
|
FROM vn.ledgerConfig;
|
|
|
|
SELECT s.nickname,
|
|
c.id,
|
|
c.accountingAccount,
|
|
sub1.mysql,
|
|
sub1.sage,
|
|
sub1.mysql - sub1.sage difference,
|
|
sub1.companyFk,
|
|
c.name
|
|
FROM client c
|
|
JOIN payMethod pm ON pm.id = c.payMethodFk
|
|
JOIN (SELECT sub.companyFk,
|
|
sub.clientFk,
|
|
CAST(ROUND(SUM(sub.mysql), 2) AS DECIMAL(10,2)) mysql,
|
|
CAST(ROUND(SUM(sub.sage), 2) AS DECIMAL(10,2)) sage
|
|
FROM(SELECT io.companyFk,
|
|
io.clientFk,
|
|
- io.amount mysql,
|
|
0 sage
|
|
FROM invoiceOut io
|
|
WHERE issued BETWEEN vDateFrom AND vDateTo
|
|
UNION ALL
|
|
SELECT r.companyFk,
|
|
r.clientFk,
|
|
r.amountPaid,
|
|
0
|
|
FROM receipt r
|
|
WHERE payed BETWEEN vDateFrom AND vDateTo
|
|
AND IF(vIsConciliated,r.isConciliate, TRUE) = TRUE
|
|
UNION ALL
|
|
SELECT lc.companyFk,
|
|
c.id,
|
|
0,
|
|
- (IFNULL(lc.credit, 0) - IFNULL(lc.debit, 0))
|
|
FROM tmp.ledgerComparative lc
|
|
JOIN client c ON c.accountingAccount = lc.account
|
|
WHERE lc.`date` BETWEEN vDateFrom AND vDateTo
|
|
)sub
|
|
GROUP BY companyFk, clientFk
|
|
) sub1 ON sub1.clientFk = c.id
|
|
JOIN supplier s ON s.id = sub1.companyFk
|
|
JOIN company co ON co.id = sub1.companyFk
|
|
LEFT JOIN clientUnpaid cu ON cu.clientFk = c.id
|
|
AND cu.dated BETWEEN vDateFrom AND vDateTo
|
|
WHERE pm.outstandingDebt
|
|
AND co.code <> 'BLK'
|
|
AND cu.clientFk IS NULL
|
|
HAVING ABS(difference) > vMaxTolerance
|
|
ORDER BY c.name;
|
|
END$$
|
|
DELIMITER ;
|