DELIMITER $$
CREATE OR REPLACE DEFINER=`vn-admin`@`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 ;
