USE `vn`; DROP procedure IF EXISTS `sale_calculateComponent`; DELIMITER $$ USE `vn`$$ CREATE DEFINER=`root`@`%` PROCEDURE `sale_calculateComponent`(vSale INT, vOption INT) proc: BEGIN /** * Actualiza los componentes * * @param vSale Delivery date * @param vOption indica en que componente pone el descuadre, NULL en casos habituales * @return tmp.ticketLot(warehouseFk, available, itemFk, buyFk) * @return tmp.sale(saleFk, warehouseFk) */ DECLARE vShipped DATE; DECLARE vWarehouseFk SMALLINT; DECLARE vAgencyModeFk INT; DECLARE vAddressFk INT; DECLARE vTicket BIGINT; DECLARE vItem BIGINT; DECLARE vLanded DATE; DECLARE vTicketFree BOOLEAN DEFAULT TRUE; DECLARE vZoneFk INTEGER; SELECT NOT (t.refFk IS NOT NULL OR ts.alertLevel > 0) OR s.price = 0, s.ticketFk, s.itemFk , t.zoneFk INTO vTicketFree, vTicket, vItem, vZoneFk FROM vn.ticket t JOIN vn.sale s ON s.ticketFk = t.id LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id WHERE s.id = vSale LIMIT 1; SELECT t.warehouseFk, DATE(t.shipped), t.addressFk, t.agencyModeFk, t.landed INTO vWarehouseFk, vShipped, vAddressFk, vAgencyModeFk, vLanded FROM agencyMode a JOIN ticket t ON t.agencyModeFk = a.id WHERE t.id = vTicket; IF IFNULL(vZoneFk,0) = 0 THEN CALL util.throw('ticket dont have zone'); END IF; CALL buyUltimate (vWarehouseFk, vShipped); DELETE FROM tmp.buyUltimate WHERE itemFk != vItem; DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot; CREATE TEMPORARY TABLE tmp.ticketLot SELECT vWarehouseFk warehouseFk, NULL available, vItem itemFk, buyFk, vZoneFk zoneFk FROM tmp.buyUltimate WHERE itemFk = vItem; CALL catalog_componentPrepare(); CALL catalog_componentCalculate(vZoneFk, vAddressFk, vShipped, vWarehouseFk); DROP TEMPORARY TABLE IF EXISTS tmp.sale; CREATE TEMPORARY TABLE tmp.sale (PRIMARY KEY (saleFk)) ENGINE = MEMORY SELECT vSale saleFk,vWarehouseFk warehouseFk; IF vOption IS NULL THEN SET vOption = IF(vTicketFree, 1, 6); END IF; CALL ticketComponentUpdateSale(vOption); INSERT INTO vn.ticketLog (originFk, userFk, `action`, description) VALUES (vTicket, account.userGetId(), 'update', CONCAT('Bionizo linea id ', vSale)); CALL catalog_componentPurge(); DROP TEMPORARY TABLE tmp.buyUltimate; DROP TEMPORARY TABLE tmp.sale; END$$ DELIMITER ;