DROP PROCEDURE `vn`.`ticket_componentMakeUpdate`; DELIMITER $$ $$ CREATE DEFINER = root@`%` PROCEDURE `vn`.`ticket_componentMakeUpdate`(IN vTicketFk INT, IN vClientFk INT, IN vAgencyModeFk INT, IN vAddressFk INT, IN vZoneFk INT, IN vWarehouseFk TINYINT, IN vCompanyFk SMALLINT, IN vShipped DATETIME, IN vLanded DATE, IN vIsDeleted TINYINT(1), IN vHasToBeUnrouted TINYINT(1), IN vOption INT) BEGIN /** * Modifica en el ticket los campos que se le pasan por parĂ¡metro * y cambia sus componentes. * Este procedimiento es transacionado en Salix * * @param vTicketFk Id del ticket a modificar * @param vClientFk nuevo cliente * @param vAgencyModeFk nueva agencia * @param vAddressFk nuevo consignatario * @param vZoneFk nueva zona * @param vWarehouseFk nuevo almacen * @param vCompanyFk nueva empresa * @param vShipped nueva fecha del envio de mercancia * @param vLanded nueva fecha de recepcion de mercancia * @param vIsDeleted si se borra el ticket * @param vHasToBeUnrouted si se le elimina la ruta al ticket * @param vOption opcion para el case del proc ticketComponentUpdateSale */ DECLARE vPrice DECIMAL(10,2); DECLARE vBonus DECIMAL(10,2); CALL ticket_componentPreview (vTicketFk, vLanded, vAddressFk, vZoneFk, vWarehouseFk); IF (SELECT addressFk FROM ticket WHERE id = vTicketFk) <> vAddressFk THEN UPDATE ticket t JOIN address a ON a.id = vAddressFk SET t.nickname = a.nickname WHERE t.id = vTicketFk; END IF; CALL zone_getShippedWarehouse(vlanded, vAddressFk, vAgencyModeFk); SELECT zoneFk, price, bonus INTO vZoneFk, vPrice, vBonus FROM tmp.zoneGetShipped WHERE shipped BETWEEN DATE(vShipped) AND util.dayEnd(vShipped) AND warehouseFk = vWarehouseFk LIMIT 1; UPDATE ticket t SET t.clientFk = vClientFk, t.agencyModeFk = vAgencyModeFk, t.addressFk = vAddressFk, t.zoneFk = vZoneFk, t.zonePrice = vPrice, t.zoneBonus = vBonus, t.warehouseFk = vWarehouseFk, t.companyFk = vCompanyFk, t.landed = vLanded, t.shipped = vShipped, t.isDeleted = vIsDeleted WHERE t.id = vTicketFk; IF vHasToBeUnrouted THEN UPDATE ticket t SET t.routeFk = NULL WHERE t.id = vTicketFk; END IF; IF vOption <> 8 THEN DROP TEMPORARY TABLE IF EXISTS tmp.sale; CREATE TEMPORARY TABLE tmp.sale (PRIMARY KEY (saleFk)) ENGINE = MEMORY SELECT id AS saleFk, vWarehouseFk warehouseFk FROM sale s WHERE s.ticketFk = vTicketFk; DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent; CREATE TEMPORARY TABLE tmp.ticketComponent SELECT * FROM tmp.ticketComponentPreview; CALL ticketComponentUpdateSale (vOption); DROP TEMPORARY TABLE tmp.sale; DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent; END IF; DROP TEMPORARY TABLE tmp.zoneGetShipped, tmp.ticketComponentPreview; END;;$$ DELIMITER ;