135 lines
3.9 KiB
MySQL
135 lines
3.9 KiB
MySQL
|
USE `vn`;
|
||
|
DROP procedure IF EXISTS `ticketComponentPreview`;
|
||
|
|
||
|
DELIMITER $$
|
||
|
USE `vn`$$
|
||
|
CREATE DEFINER=`root`@`%` PROCEDURE `ticketComponentPreview`(
|
||
|
vTicketFk INT,
|
||
|
vLanded DATE,
|
||
|
vAddressFk INT,
|
||
|
vAgencyModeFk INT,
|
||
|
vWarehouseFk SMALLINT)
|
||
|
BEGIN
|
||
|
/**
|
||
|
* Devuelve un listado previo de
|
||
|
* componentes para un ticket
|
||
|
*
|
||
|
* @param vTicketFk Id del ticket
|
||
|
* @param vLanded Fecha de recepcion
|
||
|
* @param vAddressFk Id del consignatario
|
||
|
* @param vAgencyModeFk Id del modo de agencia
|
||
|
* @param vWarehouseFk Id del almacén
|
||
|
*/
|
||
|
|
||
|
DECLARE vAgencyFk INT;
|
||
|
DECLARE vShipped DATE;
|
||
|
DECLARE vBuyOrderItem INT DEFAULT 100;
|
||
|
|
||
|
DECLARE vHasDataChanged BOOL DEFAULT FALSE;
|
||
|
DECLARE vHasAddressChanged BOOL;
|
||
|
DECLARE vHasAgencyModeChanged BOOL DEFAULT FALSE;
|
||
|
DECLARE vHasWarehouseChanged BOOL DEFAULT FALSE;
|
||
|
|
||
|
DECLARE vAddressTypeRateFk INT DEFAULT NULL;
|
||
|
DECLARE vAgencyModeTypeRateFk INT DEFAULT NULL;
|
||
|
|
||
|
DECLARE vHasChangeAll BOOL DEFAULT FALSE;
|
||
|
|
||
|
SELECT DATE(landed) <> vLanded,
|
||
|
addressFk <> vAddressFk,
|
||
|
agencyModeFk <> vAgencyModeFk,
|
||
|
warehouseFk <> vWarehouseFk
|
||
|
INTO
|
||
|
vHasDataChanged,
|
||
|
vHasAddressChanged,
|
||
|
vHasAgencyModeChanged,
|
||
|
vHasWarehouseChanged
|
||
|
FROM vn.ticket t
|
||
|
WHERE t.id = vTicketFk;
|
||
|
/*SELECT vHasDataChanged,
|
||
|
vHasAddressChanged,
|
||
|
vHasAgencyModeChanged,
|
||
|
vHasWarehouseChanged;
|
||
|
*/
|
||
|
IF vHasDataChanged OR vHasWarehouseChanged THEN
|
||
|
SET vHasChangeAll = TRUE;
|
||
|
END IF;
|
||
|
|
||
|
IF vHasAddressChanged THEN
|
||
|
SET vAddressTypeRateFk = 5;
|
||
|
END IF;
|
||
|
|
||
|
IF vHasAgencyModeChanged THEN
|
||
|
SET vAgencyModeTypeRateFk = 6;
|
||
|
END IF;
|
||
|
|
||
|
SELECT agencyFk INTO vAgencyFk
|
||
|
FROM agencyMode
|
||
|
WHERE id = vAgencyModeFk;
|
||
|
|
||
|
CALL agencyHourGetShipped(vLanded, vAddressFk, vAgencyFk);
|
||
|
|
||
|
SELECT shipped INTO vShipped
|
||
|
FROM tmp.agencyHourGetShipped
|
||
|
WHERE warehouseFk = vWarehouseFk;
|
||
|
|
||
|
CALL buyUltimate(vWarehouseFk, vShipped);
|
||
|
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
|
||
|
CREATE TEMPORARY TABLE tmp.ticketLot ENGINE = MEMORY (
|
||
|
SELECT
|
||
|
vWarehouseFk AS warehouseFk,
|
||
|
NULL AS available,
|
||
|
s.itemFk,
|
||
|
bu.buyFk
|
||
|
FROM sale s
|
||
|
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
|
||
|
WHERE s.ticketFk = vTicketFk
|
||
|
AND s.itemFk != vBuyOrderItem
|
||
|
GROUP BY bu.warehouseFk, bu.itemFk);
|
||
|
|
||
|
CALL ticketComponentCalculate(vAddressFk, vAgencyModeFk);
|
||
|
|
||
|
/*SELECT *,vHasChangeAll,cr.isRenewable = FALSE,vHasChangeAll,
|
||
|
NOT (cr.componentTypeRate <=> vAddressTypeRateFk),NOT (cr.componentTypeRate <=> vAgencyModeTypeRateFk),
|
||
|
NOT (cr.componentTypeRate <=> vAddressTypeRateFk) OR NOT (cr.componentTypeRate <=> vAgencyModeTypeRateFk)
|
||
|
FROM saleComponent sc
|
||
|
JOIN sale s ON s.id = sc.saleFk
|
||
|
JOIN ticket t ON t.id = s.ticketFk
|
||
|
JOIN componentRate cr ON cr.id = sc.componentFk
|
||
|
WHERE s.ticketFk = vTicketFk
|
||
|
AND (cr.isRenewable = FALSE
|
||
|
OR
|
||
|
(NOT vHasChangeAll
|
||
|
AND (NOT (cr.componentTypeRate <=> vAddressTypeRateFk
|
||
|
OR cr.componentTypeRate <=> vAgencyModeTypeRateFk))));*/
|
||
|
/*SELECT * FROM tmp.ticketComponent;*/
|
||
|
-- Inserta los componentes que NO seran modificados
|
||
|
REPLACE INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
|
||
|
SELECT t.warehouseFk, s.itemFk, sc.componentFk, sc.value
|
||
|
FROM saleComponent sc
|
||
|
JOIN sale s ON s.id = sc.saleFk
|
||
|
JOIN ticket t ON t.id = s.ticketFk
|
||
|
JOIN componentRate cr ON cr.id = sc.componentFk
|
||
|
WHERE s.ticketFk = vTicketFk
|
||
|
AND (cr.isRenewable = FALSE
|
||
|
OR
|
||
|
(NOT vHasChangeAll
|
||
|
AND (NOT (cr.componentTypeRate <=> vAddressTypeRateFk
|
||
|
OR cr.componentTypeRate <=> vAgencyModeTypeRateFk))));
|
||
|
/*SELECT * FROM tmp.ticketComponent;*/
|
||
|
SET @shipped = vShipped;
|
||
|
|
||
|
DROP TEMPORARY TABLE
|
||
|
tmp.agencyHourGetShipped,
|
||
|
tmp.buyUltimate,
|
||
|
tmp.ticketLot;
|
||
|
|
||
|
IF IFNULL(vShipped, CURDATE() - 1) < CURDATE() THEN
|
||
|
CALL util.throw('NO_AGENCY_AVAILABLE');
|
||
|
END IF;
|
||
|
END$$
|
||
|
|
||
|
DELIMITER ;
|
||
|
|