118 lines
3.1 KiB
SQL
118 lines
3.1 KiB
SQL
USE `vn`;
|
|
DROP procedure IF EXISTS `ticketCalculate`;
|
|
|
|
DELIMITER $$
|
|
USE `vn`$$
|
|
CREATE DEFINER=`root`@`%` PROCEDURE `ticketCalculate`(
|
|
vDate DATE,
|
|
vAddress INT,
|
|
vAgencyMode INT)
|
|
proc: BEGIN
|
|
/**
|
|
* Calcula los articulos disponibles y sus precios
|
|
*
|
|
* @param vDate Fecha de recepcion de mercancia
|
|
* @param vAddress Id del consignatario
|
|
* @param vAgencyMode Id de la agencia
|
|
* @return tmp.ticketCalculateItem, tmp.ticketComponentPrice
|
|
**/
|
|
|
|
DECLARE vAvailableCalc INT;
|
|
DECLARE vShipment DATE;
|
|
DECLARE vAgencyId INT;
|
|
DECLARE vClient INT;
|
|
DECLARE vWarehouseFk SMALLINT;
|
|
DECLARE vDone BOOL;
|
|
DECLARE cTravelTree CURSOR FOR
|
|
SELECT warehouseFk, shipped FROM tmp.agencyHourGetShipped;
|
|
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
|
|
|
-- Establece los almacenes y las fechas que van a entrar al disponible
|
|
|
|
SELECT agencyFk INTO vAgencyId
|
|
FROM agencyMode WHERE id = vAgencyMode;
|
|
|
|
SELECT clientFk INTO vClient
|
|
FROM address WHERE id = vAddress;
|
|
|
|
CALL vn.agencyHourGetShipped(vDate, vAddress, vAgencyId);
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
|
|
CREATE TEMPORARY TABLE tmp.ticketLot(
|
|
`warehouseFk` smallint(5) unsigned NOT NULL,
|
|
`itemFk` int(11) NOT NULL,
|
|
`available` double DEFAULT NULL,
|
|
`buyFk` int(11) DEFAULT NULL,
|
|
`fix` tinyint(3) unsigned DEFAULT '0',
|
|
KEY `itemFk` (`itemFk`),
|
|
KEY `item_warehouse` (`itemFk`,`warehouseFk`) USING HASH
|
|
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
|
|
|
|
OPEN cTravelTree;
|
|
|
|
l: LOOP
|
|
SET vDone = FALSE;
|
|
FETCH cTravelTree INTO vWarehouseFk, vShipment;
|
|
|
|
IF vDone THEN
|
|
LEAVE l;
|
|
END IF;
|
|
|
|
CALL `cache`.available_refresh (vAvailableCalc, FALSE, vWarehouseFk, vShipment);
|
|
CALL buyUltimate (vWarehouseFk, vShipment);
|
|
|
|
INSERT INTO tmp.ticketLot (warehouseFk, itemFk, available, buyFk)
|
|
SELECT
|
|
vWarehouseFk,
|
|
i.item_id,
|
|
IFNULL(i.available, 0),
|
|
bu.buyFk
|
|
FROM `cache`.available i
|
|
JOIN tmp.item br ON br.itemFk = i.item_id
|
|
LEFT JOIN item it ON it.id = i.item_id
|
|
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = i.item_id
|
|
WHERE i.calc_id = vAvailableCalc
|
|
AND it.id != 100
|
|
AND i.available > 0;
|
|
|
|
DROP TEMPORARY TABLE tmp.buyUltimate;
|
|
END LOOP;
|
|
|
|
CLOSE cTravelTree;
|
|
|
|
CALL vn.ticketComponentCalculate(vAddress, vAgencyMode);
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketCalculateItem;
|
|
CREATE TEMPORARY TABLE tmp.ticketCalculateItem
|
|
ENGINE = MEMORY
|
|
SELECT
|
|
b.itemFk,
|
|
SUM(b.available) available,
|
|
p.name producer,
|
|
i.name item,
|
|
i.size size,
|
|
i.stems,
|
|
i.category,
|
|
i.inkFk,
|
|
i.image,
|
|
o.code origin, bl.price
|
|
FROM tmp.ticketLot b
|
|
JOIN item i ON b.itemFk = i.id
|
|
LEFT JOIN producer p ON p.id = i.producerFk AND p.isVisible
|
|
JOIN origin o ON o.id = i.originFk
|
|
JOIN (
|
|
SELECT MIN(price) price, itemFk
|
|
FROM tmp.ticketComponentPrice
|
|
GROUP BY itemFk
|
|
) bl ON bl.itemFk = b.itemFk
|
|
GROUP BY b.itemFk;
|
|
|
|
DROP TEMPORARY TABLE
|
|
tmp.ticketComponent,
|
|
tmp.ticketLot;
|
|
END$$
|
|
|
|
DELIMITER ;
|
|
|