88 lines
1.5 KiB
SQL
88 lines
1.5 KiB
SQL
USE `hedera`;
|
|
DROP procedure IF EXISTS `tpvTransaction_undo`;
|
|
|
|
DELIMITER $$
|
|
USE `hedera`$$
|
|
CREATE DEFINER=`root`@`%` PROCEDURE `tpvTransaction_undo`(vSelf INT)
|
|
BEGIN
|
|
DECLARE vCustomer INT;
|
|
DECLARE vAmount DOUBLE;
|
|
DECLARE vReceipt INT;
|
|
DECLARE vDate DATE;
|
|
DECLARE vBank INT;
|
|
DECLARE vAccount VARCHAR(12);
|
|
DECLARE vSubaccount VARCHAR(12);
|
|
|
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
BEGIN
|
|
ROLLBACK;
|
|
RESIGNAL;
|
|
END;
|
|
|
|
START TRANSACTION;
|
|
|
|
SELECT
|
|
t.clientFk
|
|
,t.amount / 100
|
|
,t.receiptFk
|
|
,DATE(t.created)
|
|
,m.bankFk
|
|
INTO
|
|
vCustomer
|
|
,vAmount
|
|
,vReceipt
|
|
,vDate
|
|
,vBank
|
|
FROM tpvTransaction t
|
|
JOIN tpvMerchant m ON m.id = t.merchantFk
|
|
JOIN tpvConfig c
|
|
WHERE t.id = vSelf
|
|
FOR UPDATE;
|
|
|
|
-- Elimina el recibo
|
|
|
|
DELETE FROM vn.receipt
|
|
WHERE id = vReceipt LIMIT 1;
|
|
|
|
-- Elimina la entrada de cajas
|
|
|
|
DELETE FROM vn.till
|
|
WHERE bankFk = vBank
|
|
AND DATE(dated) = vDate
|
|
AND `in` = vAmount
|
|
LIMIT 1;
|
|
|
|
-- Elimina los asientos contables
|
|
|
|
SELECT accountingAccount INTO vSubaccount
|
|
FROM vn.`client` WHERE id = vCustomer;
|
|
|
|
SELECT account INTO vAccount
|
|
FROM vn.bank WHERE id = vBank;
|
|
|
|
DELETE FROM vn.XDiario
|
|
WHERE SUBCTA = vSubaccount
|
|
AND CONTRA = vAccount
|
|
AND DATE(FECHA) = vDate
|
|
AND EUROHABER = vAmount
|
|
LIMIT 1;
|
|
|
|
DELETE FROM vn.XDiario
|
|
WHERE CONTRA = vSubaccount
|
|
AND SUBCTA = vAccount
|
|
AND DATE(FECHA) = vDate
|
|
AND EURODEBE = vAmount
|
|
LIMIT 1;
|
|
|
|
-- Actualiza la transaccion
|
|
|
|
UPDATE tpvTransaction
|
|
SET response = NULL, status = 'started'
|
|
WHERE id = vSelf;
|
|
|
|
COMMIT;
|
|
END$$
|
|
|
|
DELIMITER ;
|
|
|