DROP PROCEDURE IF EXISTS vn.ticket_doRefund; DELIMITER $$ $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_doRefund`(IN vOriginTicket INT, OUT vNewTicket INT) BEGIN DECLARE vDone BIT DEFAULT 0; DECLARE vCustomer MEDIUMINT; DECLARE vWarehouse TINYINT; DECLARE vCompany MEDIUMINT; DECLARE vAddress MEDIUMINT; DECLARE vRefundAgencyMode INT; DECLARE vItemFk INT; DECLARE vQuantity DECIMAL (10,2); DECLARE vConcept VARCHAR(50); DECLARE vPrice DECIMAL (10,2); DECLARE vDiscount TINYINT; DECLARE vSaleNew INT; DECLARE vSaleMain INT; DECLARE vZoneFk INT; DECLARE vDescription VARCHAR(50); DECLARE vTaxClassFk INT; DECLARE vTicketServiceTypeFk INT; DECLARE cSales CURSOR FOR SELECT * FROM tmp.sale; DECLARE cTicketServices CURSOR FOR SELECT * FROM tmp.ticketService; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = 1; SELECT id INTO vRefundAgencyMode FROM agencyMode WHERE `name` = 'ABONO'; SELECT clientFk, warehouseFk, companyFk, addressFk INTO vCustomer, vWarehouse, vCompany, vAddress FROM ticket WHERE id = vOriginTicket; SELECT id INTO vZoneFk FROM zone WHERE agencyModeFk = vRefundAgencyMode LIMIT 1; INSERT INTO vn.ticket ( clientFk, shipped, addressFk, agencyModeFk, nickname, warehouseFk, companyFk, landed, zoneFk ) SELECT vCustomer, CURDATE(), vAddress, vRefundAgencyMode, a.nickname, vWarehouse, vCompany, CURDATE(), vZoneFk FROM address a WHERE a.id = vAddress; SET vNewTicket = LAST_INSERT_ID(); SET vDone := 0; OPEN cSales; FETCH cSales INTO vSaleMain, vItemFk, vQuantity, vConcept, vPrice, vDiscount; WHILE NOT vDone DO INSERT INTO vn.sale(ticketFk, itemFk, quantity, concept, price, discount) VALUES( vNewTicket, vItemFk, vQuantity, vConcept, vPrice, vDiscount ); SET vSaleNew = LAST_INSERT_ID(); INSERT INTO vn.saleComponent(saleFk,componentFk,`value`) SELECT vSaleNew,componentFk,`value` FROM vn.saleComponent WHERE saleFk = vSaleMain; FETCH cSales INTO vSaleMain, vItemFk, vQuantity, vConcept, vPrice, vDiscount; END WHILE; CLOSE cSales; SET vDone := 0; OPEN cTicketServices; FETCH cTicketServices INTO vDescription, vQuantity, vPrice, vTaxClassFk, vTicketServiceTypeFk; WHILE NOT vDone DO INSERT INTO vn.ticketService(description, quantity, price, taxClassFk, ticketFk, ticketServiceTypeFk) VALUES(vDescription, vQuantity, vPrice, vTaxClassFk, vNewTicket, vTicketServiceTypeFk); FETCH cTicketServices INTO vDescription, vQuantity, vPrice, vTaxClassFk, vTicketServiceTypeFk; END WHILE; CLOSE cTicketServices; INSERT INTO vn.ticketRefund(refundTicketFk, originalTicketFk) VALUES(vNewTicket, vOriginTicket); END$$ DELIMITER ;