salix/db/routines/vn/procedures/addAccountReconciliation.sql

66 lines
1.8 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`addAccountReconciliation`()
BEGIN
/**
* Updates duplicate records in the accountReconciliation table,
* by assigning them a new identifier and then inserts a new entry in the till table.
*/
UPDATE accountReconciliation ar
JOIN (
SELECT id,
calculatedCode,
CONCAT(
calculatedCode,
'(',
ROW_NUMBER() OVER (PARTITION BY calculatedCode ORDER BY id),
')'
) newId
FROM accountReconciliation ar
WHERE calculatedCode IN (
SELECT calculatedCode
FROM accountReconciliation
GROUP BY calculatedCode
HAVING COUNT(*) > 1
)
ORDER BY calculatedCode, id
) sub2 ON ar.id = sub2.id
SET ar.calculatedCode = sub2.newId;
INSERT INTO till(
dated,
isAccountable,
serie,
concept,
`in`,
`out`,
bankFk,
companyFk,
warehouseFk,
supplierAccountFk,
calculatedCode,
InForeignValue,
OutForeignValue,
workerFk
)
SELECT ar.operationDated dated,
TRUE isAccountable,
'MB' serie,
ar.concept,
@totalIn := IF(ar.debitCredit = arc.debitCredit2 AND a.currencyFk = arc.currencyFk, ar.amount, NULL) `in`,
@totalOut := IF(ar.debitCredit = arc.debitCredit AND a.currencyFk = arc.currencyFk, ar.amount, NULL) `out`,
a.id bankFk,
sa.supplierFk companyFk,
arc.warehouseFk,
ar.supplierAccountFk,
ar.calculatedCode,
@totalIn InForeignValue,
@totalOut OutForeignValue,
account.myUser_getId() user
FROM accountReconciliation ar
JOIN supplierAccount sa ON sa.id = ar.supplierAccountFk
JOIN accounting a ON a.id = sa.accountingFk
LEFT JOIN till t ON t.calculatedCode = ar.calculatedCode
JOIN accountReconciliationConfig arc
WHERE t.id IS NULL;
END$$
DELIMITER ;