DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_update`(vSelf INT) proc: BEGIN /** * Actualiza las lĂ­neas de un pedido. * * @param vSelf Id del pedido */ DECLARE vDate DATE; DECLARE vAddress INT; DECLARE vAgencyMode INT; DECLARE vNRows INT; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; RESIGNAL; END; START TRANSACTION; SELECT COUNT(*) INTO vNRows FROM orderRow WHERE orderFk = vSelf; IF vNRows > 0 THEN CALL order_calcCatalog(vSelf); DELETE c FROM orderRow r JOIN orderRowComponent c ON c.rowFk = r.id WHERE r.orderFk = vSelf; UPDATE orderRow r LEFT JOIN tmp.ticketComponentPrice p ON p.warehouseFk = r.warehouseFk AND p.itemFk = r.itemFk AND p.rate = r.rate LEFT JOIN tmp.zoneGetShipped t ON t.warehouseFk = r.warehouseFk SET r.price = p.price, r.amount = IF(p.itemFk IS NOT NULL, r.amount + IF(@m := MOD(r.amount, p.`grouping`), p.`grouping` - @m, 0), 0), r.shipment = t.shipped WHERE r.orderFk = vSelf; INSERT INTO orderRowComponent(rowFk, componentFk, price) SELECT r.id, c.componentFk, c.cost FROM orderRow r JOIN tmp.ticketComponent c ON c.warehouseFk = r.warehouseFk AND c.itemFk = r.itemFk JOIN vn.component t ON t.id = c.componentFk AND (t.classRate IS NULL OR t.classRate = r.rate) WHERE r.orderFk = vSelf; CALL vn.ticketCalculatePurge; END IF; UPDATE `order` SET date_make = util.VN_NOW() WHERE id = vSelf; COMMIT; END$$ DELIMITER ;