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, - (NZ(lc.credit) - NZ(lc.debit)) 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 ;