71 lines
2.1 KiB
MySQL
71 lines
2.1 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`remittance_calc`(
|
||
|
vDated DATE
|
||
|
)
|
||
|
BEGIN
|
||
|
/**
|
||
|
* Calcula los datos de remesa, incluyendo el importe,
|
||
|
* el vencimiento, y otros datos relevantes.
|
||
|
*
|
||
|
* @param vDated Fecha a calcular
|
||
|
* @return tmp.remittance
|
||
|
*/
|
||
|
CREATE OR REPLACE TEMPORARY TABLE tmp.remittance
|
||
|
SELECT CONCAT(s.nif, REPEAT('0', 12 - LENGTH(s.nif))) cif,
|
||
|
c.id clientFk,
|
||
|
c.name client,
|
||
|
c.fi,
|
||
|
sub.paymentDate,
|
||
|
0 invoiceAmount,
|
||
|
CAST(sub.receipt AS DECIMAL(10,2)) receiptAmount,
|
||
|
0 currentAmount,
|
||
|
sub.companyFk,
|
||
|
c.socialName,
|
||
|
CAST(sub.receipt AS DECIMAL(10,2)) totalAmount,
|
||
|
CAST(sub.receipt AS DECIMAL(10,2)) balance,
|
||
|
s.name company,
|
||
|
co.code companyCode,
|
||
|
c.accountingAccount,
|
||
|
c.iban,
|
||
|
c.hasSepaVnl,
|
||
|
c.hasCoreVnl,
|
||
|
c.hasLcr,
|
||
|
be.bic,
|
||
|
be.`name` entityName
|
||
|
FROM client c
|
||
|
JOIN (
|
||
|
SELECT risk.companyFk,
|
||
|
c.id,
|
||
|
SUM(risk.amount) receipt,
|
||
|
IF((c.dueDay + graceDays) MOD 30.001 <= DAY(vDated),
|
||
|
LAST_DAY(vDated - INTERVAL 1 MONTH) + INTERVAL (c.dueDay + graceDays) MOD 30.001 DAY,
|
||
|
LAST_DAY(vDated - INTERVAL 2 MONTH) + INTERVAL (c.dueDay + graceDays) MOD 30.001 DAY
|
||
|
) paymentDate
|
||
|
FROM client c
|
||
|
JOIN payMethod pm ON pm.id = c.payMethodFk
|
||
|
JOIN (
|
||
|
SELECT cr.companyFk, cr.clientFk, cr.amount
|
||
|
FROM client c
|
||
|
JOIN clientRisk cr ON cr.clientFk = c.id
|
||
|
JOIN payMethod pm ON pm.id = c.payMethodFk
|
||
|
WHERE pm.code = 'bankDraft'
|
||
|
UNION ALL
|
||
|
SELECT io.companyFk, io.clientFk, - io.amount
|
||
|
FROM invoiceOut io
|
||
|
JOIN client c ON c.id = io.clientFk
|
||
|
JOIN payMethod pm ON pm.id = c.payMethodFk
|
||
|
WHERE io.dued > vDated
|
||
|
AND pm.code = 'bankDraft'
|
||
|
AND pm.outstandingDebt
|
||
|
AND io.amount > 0
|
||
|
|
||
|
) risk ON risk.clientFk = c.id
|
||
|
GROUP BY risk.companyFk, c.id
|
||
|
HAVING receipt > 10
|
||
|
) sub ON sub.id = c.id
|
||
|
JOIN supplier s ON s.id = sub.companyFk
|
||
|
JOIN company co ON co.id = sub.companyFk
|
||
|
LEFT JOIN bankEntity be ON be.id = c.bankEntityFk;
|
||
|
END$$
|
||
|
DELIMITER ;
|