DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`tpvTransaction_undo`(vSelf INT) p: 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 ;