diff --git a/db/install/changes/11-ticketCalculateSale.sql b/db/install/changes/11-ticketCalculateSale.sql new file mode 100644 index 000000000..3f0f424da --- /dev/null +++ b/db/install/changes/11-ticketCalculateSale.sql @@ -0,0 +1,72 @@ +USE `vn`; +DROP procedure IF EXISTS `ticketCalculateSale`; + +DELIMITER $$ +USE `vn`$$ +CREATE DEFINER=`root`@`%` PROCEDURE `ticketCalculateSale`(IN vSale BIGINT) +proc: BEGIN + +/* +Este procedimiento bioniza una linea de movimiento +*/ + DECLARE vShipped DATE; + DECLARE vWarehouse SMALLINT; + DECLARE vAgencyMode INT; + DECLARE vAddress INT; + DECLARE vTicket BIGINT; + DECLARE vItem BIGINT; + DECLARE vLanded DATE; + DECLARE vTicketFree BOOLEAN DEFAULT TRUE; + + SELECT FALSE + INTO vTicketFree + 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 + AND (t.refFk != "" OR (ts.alertLevel > 0 AND s.price != 0)) + LIMIT 1; + + SELECT ticketFk, itemFk + INTO vTicket, vItem + FROM sale + WHERE id = vSale; + + SELECT t.warehouseFk, DATE(t.shipped), t.addressFk, t.agencyModeFk, t.landed + INTO vWarehouse, vShipped, vAddress, vAgencyMode, vLanded + FROM agencyMode a + JOIN ticket t ON t.agencyModeFk = a.id + WHERE t.id = vTicket; + + DROP TEMPORARY TABLE IF EXISTS tmp.agencyHourGetShipped; + CREATE TEMPORARY TABLE tmp.agencyHourGetShipped ENGINE = MEMORY + SELECT vWarehouse warehouseFk, vShipped shipped, vLanded landed; + + CALL buyUltimate (vWarehouse, vShipped); -- rellena la tabla tmp.buyUltimate con la ultima compra + + DELETE FROM tmp.buyUltimate WHERE itemFk != vItem; + + DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot; + CREATE TEMPORARY TABLE tmp.ticketLot + SELECT vWarehouse warehouseFk, NULL available, vItem itemFk, buyFk + FROM tmp.buyUltimate + WHERE itemFk = vItem; + + CALL ticketComponentCalculate(vAddress, vAgencyMode); + + DROP TEMPORARY TABLE IF EXISTS tmp.sale; + CREATE TEMPORARY TABLE tmp.sale + (PRIMARY KEY (saleFk)) ENGINE = MEMORY + SELECT vSale saleFk,vWarehouse warehouseFk; + + CALL ticketComponentUpdateSale(IF(vTicketFree,1,6)); -- si el ticket esta facturado, respeta los precios + + -- Log + INSERT INTO vn.ticketLog (originFk, userFk, `action`, description) + VALUES (vTicket, account.userGetId(), 'update', CONCAT('Bionizo linea id ', vSale)); + + -- Limpieza + DROP TEMPORARY TABLE tmp.buyUltimate; +END$$ + +DELIMITER ; \ No newline at end of file