Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 1466-print_refactor
This commit is contained in:
commit
6f7962935d
|
@ -7,8 +7,8 @@ CREATE TABLE `vn`.`zoneWarehouse` (
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `zoneFk` (`zoneFk`,`warehouseFk`),
|
UNIQUE KEY `zoneFk` (`zoneFk`,`warehouseFk`),
|
||||||
KEY `warehouseFk` (`warehouseFk`),
|
KEY `warehouseFk` (`warehouseFk`),
|
||||||
CONSTRAINT `zoneWarehouse_ibfk_1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
CONSTRAINT `zoneWarehouse_ibfk_1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE/*,
|
||||||
CONSTRAINT `zoneWarehouse_ibfk_2` FOREIGN KEY (`warehouseFk`) REFERENCES `vn2008`.`warehouse` (`id`)
|
CONSTRAINT `zoneWarehouse_ibfk_2` FOREIGN KEY (`warehouseFk`) REFERENCES `vn`.`warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE*/
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
CREATE TABLE `vn`.`zoneEvent` (
|
CREATE TABLE `vn`.`zoneEvent` (
|
||||||
|
@ -36,3 +36,8 @@ CREATE TABLE `vn`.`zoneExclusion` (
|
||||||
CONSTRAINT `zoneExclusion_ibfk_1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
CONSTRAINT `zoneExclusion_ibfk_1` FOREIGN KEY (`zoneFk`) REFERENCES `zone` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
ALTER TABLE `vn`.`zone`
|
||||||
|
DROP FOREIGN KEY `fk_zone_1`;
|
||||||
|
ALTER TABLE `vn`.`zone`
|
||||||
|
DROP COLUMN `warehouseFk`,
|
||||||
|
DROP INDEX `fk_zone_1_idx`;
|
||||||
|
|
|
@ -1,25 +1,2 @@
|
||||||
USE `vn`;
|
USE `vn`;
|
||||||
DROP procedure IF EXISTS `zone_getFirstShipped`;
|
DROP procedure IF EXISTS `zone_getFirstShipped`;
|
||||||
|
|
||||||
DELIMITER $$
|
|
||||||
USE `vn`$$
|
|
||||||
CREATE DEFINER=`root`@`%` PROCEDURE `zone_getFirstShipped`(vAgencyModeFk INT, vAddress INT, vWarehouseFk INT)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Devuelve la primera fecha de envio disponible para una agencia en una direccion y un warehouse
|
|
||||||
*
|
|
||||||
* @param vAgencyMode id de la agencia en vn.agencyMode
|
|
||||||
* @param vAddress id de la direccion
|
|
||||||
* @param vWarehouse id del warehouse
|
|
||||||
* @return vShipped la primera fecha disponible y vLanded la fecha de llegada/recojida
|
|
||||||
*/
|
|
||||||
|
|
||||||
SELECT CURDATE() shipped, CURDATE() landed, TRUE isIncluded;
|
|
||||||
/*
|
|
||||||
?? No hay landing
|
|
||||||
*/
|
|
||||||
|
|
||||||
END$$
|
|
||||||
|
|
||||||
DELIMITER ;
|
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,9 @@ BEGIN
|
||||||
zo.zoneFk
|
zo.zoneFk
|
||||||
FROM tmp.zoneOption zo
|
FROM tmp.zoneOption zo
|
||||||
JOIN zone z ON z.id = zo.zoneFk
|
JOIN zone z ON z.id = zo.zoneFk
|
||||||
WHERE agencyModeFk = vAgencyModeFk;
|
JOIN zoneWarehouse zw ON zw.zoneFk = z.id
|
||||||
|
WHERE agencyModeFk = vAgencyModeFk
|
||||||
|
AND warehouseFk = vWarehouseFk;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE
|
DROP TEMPORARY TABLE
|
||||||
tmp.zone,
|
tmp.zone,
|
||||||
|
@ -35,3 +37,4 @@ BEGIN
|
||||||
END$$
|
END$$
|
||||||
|
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,12 @@ BEGIN
|
||||||
SELECT * FROM (
|
SELECT * FROM (
|
||||||
SELECT zo.zoneFk,
|
SELECT zo.zoneFk,
|
||||||
TIMESTAMPADD(DAY,-zo.travelingDays, vLanded) shipped,
|
TIMESTAMPADD(DAY,-zo.travelingDays, vLanded) shipped,
|
||||||
zw.warehouseFk
|
zw.warehouseFk,
|
||||||
|
z.agencyModeFk
|
||||||
FROM tmp.zoneOption zo
|
FROM tmp.zoneOption zo
|
||||||
JOIN zoneWarehouse zw ON zw.zoneFk = zo.zoneFk
|
JOIN zoneWarehouse zw ON zw.zoneFk = zo.zoneFk
|
||||||
|
JOIN zone z ON z.id = zo.zoneFk
|
||||||
|
WHERE z.agencyModeFk = vAgencyModeFk
|
||||||
ORDER BY shipped) t
|
ORDER BY shipped) t
|
||||||
GROUP BY warehouseFk;
|
GROUP BY warehouseFk;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
|
|
||||||
USE `vn`;
|
USE `vn`;
|
||||||
DROP procedure IF EXISTS `vn`.`zoneGetWarehouse`;
|
DROP procedure IF EXISTS `zone_getWarehouse`;
|
||||||
|
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
USE `vn`$$
|
USE `vn`$$
|
||||||
|
@ -8,7 +7,7 @@ CREATE DEFINER=`root`@`%` PROCEDURE `zone_getWarehouse`(vAddress INT, vLanded DA
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Devuelve el listado de agencias disponibles para la fecha,
|
* Devuelve el listado de agencias disponibles para la fecha,
|
||||||
* dirección y warehouse pasadas
|
* dirección y warehouse pasadas
|
||||||
*
|
*
|
||||||
* @param vAddress
|
* @param vAddress
|
||||||
* @param vWarehouse warehouse
|
* @param vWarehouse warehouse
|
||||||
|
@ -33,7 +32,10 @@ BEGIN
|
||||||
WHERE zw.warehouseFk
|
WHERE zw.warehouseFk
|
||||||
GROUP BY z.agencyModeFk;
|
GROUP BY z.agencyModeFk;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE
|
||||||
|
tmp.zone,
|
||||||
|
tmp.zoneOption;
|
||||||
END$$
|
END$$
|
||||||
|
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
;
|
|
||||||
|
|
|
@ -0,0 +1,259 @@
|
||||||
|
USE `vn`;
|
||||||
|
DROP procedure IF EXISTS `catalog_componentCalculate`;
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
USE `vn`$$
|
||||||
|
CREATE DEFINER=`root`@`%` PROCEDURE `catalog_componentCalculate`(
|
||||||
|
vZoneFk INT,
|
||||||
|
vAddressFk INT,
|
||||||
|
vShipped DATE)
|
||||||
|
proc: BEGIN
|
||||||
|
/**
|
||||||
|
* Calcula los componentes de los articulos de tmp.ticketLot
|
||||||
|
*
|
||||||
|
* @param vZoneFk para calcular el transporte
|
||||||
|
* @param vAgencyModeFk Id del modo de agencia
|
||||||
|
* @param tmp.ticketLot (warehouseFk,available,itemFk,buyFk)
|
||||||
|
*
|
||||||
|
* @return tmp.ticketComponent(itemFk, warehouseFk, available, rate2, rate3, minPrice,
|
||||||
|
* packing, grouping, groupingMode, buyFk, typeFk)
|
||||||
|
* @return tmp.ticketComponentPrice (warehouseFk, itemFk, rate, grouping, price)
|
||||||
|
*/
|
||||||
|
|
||||||
|
DECLARE vClientFk INT;
|
||||||
|
DECLARE vGeneralInflationCoefficient INT DEFAULT 1;
|
||||||
|
DECLARE vMinimumDensityWeight INT DEFAULT 167;
|
||||||
|
DECLARE vBoxFreightItem INT DEFAULT 71;
|
||||||
|
DECLARE vBoxVolume BIGINT; -- DEFAULT 138000;
|
||||||
|
DECLARE vSpecialPriceComponent INT DEFAULT 10;
|
||||||
|
DECLARE vDeliveryComponent INT DEFAULT 15;
|
||||||
|
DECLARE vRecoveryComponent INT DEFAULT 17;
|
||||||
|
DECLARE vSellByPacketComponent INT DEFAULT 22;
|
||||||
|
DECLARE vBuyValueComponent INT DEFAULT 28;
|
||||||
|
DECLARE vMarginComponent INT DEFAULT 29;
|
||||||
|
DECLARE vDiscountLastItemComponent INT DEFAULT 32;
|
||||||
|
DECLARE vExtraBaggedComponent INT DEFAULT 38;
|
||||||
|
DECLARE vManaAutoComponent INT DEFAULT 39;
|
||||||
|
|
||||||
|
SELECT volume INTO vBoxVolume
|
||||||
|
FROM vn.packaging
|
||||||
|
WHERE id = '94';
|
||||||
|
|
||||||
|
SELECT clientFk INTO vClientFK
|
||||||
|
FROM address
|
||||||
|
WHERE id = vAddressFk;
|
||||||
|
|
||||||
|
SET @rate2 := 0;
|
||||||
|
SET @rate3 := 0;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentCalculate;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponentCalculate
|
||||||
|
(PRIMARY KEY (itemFk, warehouseFk))
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT
|
||||||
|
tl.itemFk, tl.warehouseFk, tl.available,
|
||||||
|
IF((@rate2 := IFNULL(pf.rate2, b.price2)) < i.minPrice AND i.hasMinPrice, i.minPrice, @rate2) * 1.0 rate2,
|
||||||
|
IF((@rate3 := IFNULL(pf.rate3, b.price3)) < i.minPrice AND i.hasMinPrice, i.minPrice, @rate3) * 1.0 rate3,
|
||||||
|
IFNULL(pf.rate3, 0) AS minPrice,
|
||||||
|
IFNULL(pf.packing, b.packing) packing,
|
||||||
|
IFNULL(pf.`grouping`, b.`grouping`) grouping,
|
||||||
|
ABS(IFNULL(pf.box, b.groupingMode)) groupingMode,
|
||||||
|
tl.buyFk,
|
||||||
|
i.typeFk,
|
||||||
|
IF(i.hasKgPrice, b.weight / b.packing, NULL) weightGrouping
|
||||||
|
FROM tmp.ticketLot tl
|
||||||
|
JOIN buy b ON b.id = tl.buyFk
|
||||||
|
JOIN item i ON i.id = tl.itemFk
|
||||||
|
JOIN itemType it ON it.id = i.typeFk
|
||||||
|
LEFT JOIN itemCategory ic ON ic.id = it.categoryFk
|
||||||
|
LEFT JOIN specialPrice sp ON sp.itemFk = i.id AND sp.clientFk = vClientFk
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT * FROM (
|
||||||
|
SELECT pf.itemFk, pf.`grouping`, pf.packing, pf.box, pf.rate2, pf.rate3, zw.warehouseFk
|
||||||
|
FROM priceFixed pf
|
||||||
|
JOIN zoneWarehouse zw ON zw.zoneFk = vZoneFk AND (zw.warehouseFk = pf.warehouseFk OR pf.warehouseFk = 0)
|
||||||
|
WHERE vShipped BETWEEN pf.started AND pf.ended ORDER BY pf.itemFk, pf.warehouseFk DESC
|
||||||
|
) tpf
|
||||||
|
GROUP BY tpf.itemFk, tpf.warehouseFk
|
||||||
|
) pf ON pf.itemFk = tl.itemFk AND pf.warehouseFk = tl.warehouseFk
|
||||||
|
WHERE b.buyingValue + b.freightValue + b.packageValue + b.comissionValue > 0.01 AND ic.display <> 0;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponent (
|
||||||
|
`warehouseFk` INT UNSIGNED NOT NULL,
|
||||||
|
`itemFk` INT NOT NULL,
|
||||||
|
`componentFk` INT UNSIGNED NOT NULL,
|
||||||
|
`cost` DECIMAL(10,4) NOT NULL,
|
||||||
|
INDEX `itemWarehouse` USING BTREE (`itemFk` ASC, `warehouseFk` ASC),
|
||||||
|
UNIQUE INDEX `itemWarehouseComponent` (`itemFk` ASC, `warehouseFk` ASC, `componentFk` ASC));
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
|
||||||
|
SELECT
|
||||||
|
tcc.warehouseFk,
|
||||||
|
tcc.itemFk,
|
||||||
|
vBuyValueComponent,
|
||||||
|
b.buyingValue + b.freightValue + b.packageValue + b.comissionValue
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN buy b ON b.id = tcc.buyFk;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
|
||||||
|
SELECT
|
||||||
|
tcc.warehouseFk,
|
||||||
|
tcc.itemFk,
|
||||||
|
vMarginComponent,
|
||||||
|
tcc.rate3 - b.buyingValue - b.freightValue - b.packageValue - b.comissionValue
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN buy b ON b.id = tcc.buyFk;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentBase;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponentBase ENGINE = MEMORY
|
||||||
|
SELECT tc.itemFk, ROUND(SUM(tc.cost), 4) AS base, tc.warehouseFk
|
||||||
|
FROM tmp.ticketComponent tc
|
||||||
|
GROUP BY tc.itemFk, warehouseFk;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcb.warehouseFk, tcb.itemFk, vRecoveryComponent, ROUND(tcb.base * LEAST(cr.recobro, 0.25), 3)
|
||||||
|
FROM tmp.ticketComponentBase tcb
|
||||||
|
JOIN bi.claims_ratio cr ON cr.Id_Cliente = vClientFk
|
||||||
|
WHERE cr.recobro > 0.009;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcb.warehouseFk, tcb.itemFk, vManaAutoComponent, ROUND(base * (0.01 + prices_modifier_rate), 3) as manaAuto
|
||||||
|
FROM tmp.ticketComponentBase tcb
|
||||||
|
JOIN `client` c on c.id = vClientFk
|
||||||
|
JOIN bs.mana_spellers ms ON c.salesPersonFk = ms.Id_Trabajador
|
||||||
|
WHERE ms.prices_modifier_activated
|
||||||
|
HAVING manaAuto <> 0;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcb.warehouseFk,
|
||||||
|
tcb.itemFk,
|
||||||
|
cr.id,
|
||||||
|
GREATEST(IFNULL(ROUND(tcb.base * cr.tax, 4), 0), tcc.minPrice - tcc.rate3)
|
||||||
|
FROM tmp.ticketComponentBase tcb
|
||||||
|
JOIN componentRate cr
|
||||||
|
JOIN tmp.ticketComponentCalculate tcc ON tcc.itemFk = tcb.itemFk AND tcc.warehouseFk = tcb.warehouseFk
|
||||||
|
LEFT JOIN specialPrice sp ON sp.clientFk = vClientFk AND sp.itemFk = tcc.itemFk
|
||||||
|
WHERE cr.id = vDiscountLastItemComponent AND cr.tax <> 0 AND tcc.minPrice < tcc.rate3 AND sp.value IS NULL;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcc.warehouseFk, tcc.itemFk, vSellByPacketComponent, tcc.rate2 - tcc.rate3
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN buy b ON b.id = tcc.buyFk
|
||||||
|
LEFT JOIN specialPrice sp ON sp.clientFk = vClientFk AND sp.itemFk = tcc.itemFk
|
||||||
|
WHERE sp.value IS NULL;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcc.warehouseFK,
|
||||||
|
tcc.itemFk,
|
||||||
|
vDeliveryComponent,
|
||||||
|
vGeneralInflationCoefficient
|
||||||
|
* ROUND((
|
||||||
|
i.compression
|
||||||
|
* r.cm3
|
||||||
|
* IF(am.deliveryMethodFk = 1, (GREATEST(i.density, vMinimumDensityWeight) / vMinimumDensityWeight), 1)
|
||||||
|
* IFNULL((z.price - z.bonus)
|
||||||
|
* 1/*amz.inflation*/ , 50)) / vBoxVolume, 4
|
||||||
|
) cost
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN item i ON i.id = tcc.itemFk
|
||||||
|
JOIN zone z ON z.id = vZoneFk
|
||||||
|
JOIN agencyMode am ON am.id = z.agencyModeFk
|
||||||
|
LEFT JOIN bi.rotacion r ON r.warehouse_id = tcc.warehouseFk
|
||||||
|
AND r.Id_Article = tcc.itemFk
|
||||||
|
HAVING cost <> 0;
|
||||||
|
|
||||||
|
IF (SELECT COUNT(*) FROM vn.addressForPackaging WHERE addressFk = vAddressFk) THEN
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcc.warehouseFk, b.itemFk, vExtraBaggedComponent, ap.packagingValue cost
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN vn.addressForPackaging ap
|
||||||
|
WHERE ap.addressFk = vAddressFk;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentCopy;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponentCopy ENGINE = MEMORY
|
||||||
|
SELECT * FROM tmp.ticketComponent;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcc.warehouseFk,
|
||||||
|
tcc.itemFk,
|
||||||
|
vSpecialPriceComponent,
|
||||||
|
sp.value - SUM(tcc.cost) sumCost
|
||||||
|
FROM tmp.ticketComponentCopy tcc
|
||||||
|
JOIN componentRate cr ON cr.id = tcc.componentFk
|
||||||
|
JOIN specialPrice sp ON sp.clientFk = vClientFK AND sp.itemFk = tcc.itemFk
|
||||||
|
WHERE cr.classRate IS NULL
|
||||||
|
GROUP BY tcc.itemFk, tcc.warehouseFk
|
||||||
|
HAVING ABS(sumCost) > 0.001;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentSum;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponentSum
|
||||||
|
(INDEX (itemFk, warehouseFk))
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT SUM(cost) sumCost, tc.itemFk, tc.warehouseFk, cr.classRate
|
||||||
|
FROM tmp.ticketComponent tc
|
||||||
|
JOIN componentRate cr ON cr.id = tc.componentFk
|
||||||
|
GROUP BY tc.itemFk, tc.warehouseFk, cr.classRate;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentRate;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponentRate ENGINE = MEMORY
|
||||||
|
SELECT tcc.warehouseFk,
|
||||||
|
tcc.itemFk,
|
||||||
|
1 rate,
|
||||||
|
IF(tcc.groupingMode = 1, tcc.`grouping`, 1) grouping,
|
||||||
|
CAST(SUM(tcs.sumCost) AS DECIMAL(10,2)) price,
|
||||||
|
CAST(SUM(tcs.sumCost) AS DECIMAL(10,2)) / weightGrouping priceKg
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk
|
||||||
|
AND tcs.warehouseFk = tcc.warehouseFk
|
||||||
|
WHERE IFNULL(tcs.classRate, 1) = 1
|
||||||
|
AND tcc.groupingMode < 2 AND (tcc.packing > tcc.`grouping` or tcc.groupingMode = 0)
|
||||||
|
GROUP BY tcs.warehouseFk, tcs.itemFk;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponentRate (warehouseFk, itemFk, rate, grouping, price, priceKg)
|
||||||
|
SELECT
|
||||||
|
tcc.warehouseFk,
|
||||||
|
tcc.itemFk,
|
||||||
|
2 rate,
|
||||||
|
tcc.packing grouping,
|
||||||
|
SUM(tcs.sumCost) price,
|
||||||
|
SUM(tcs.sumCost) / weightGrouping priceKg
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk
|
||||||
|
AND tcs.warehouseFk = tcc.warehouseFk
|
||||||
|
WHERE tcc.available IS NULL OR (IFNULL(tcs.classRate, 2) = 2
|
||||||
|
AND tcc.packing > 0 AND tcc.available >= tcc.packing)
|
||||||
|
GROUP BY tcs.warehouseFk, tcs.itemFk;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponentRate (warehouseFk, itemFk, rate, grouping, price, priceKg)
|
||||||
|
SELECT
|
||||||
|
tcc.warehouseFk,
|
||||||
|
tcc.itemFk,
|
||||||
|
3 rate,
|
||||||
|
tcc.available grouping,
|
||||||
|
SUM(tcs.sumCost) price,
|
||||||
|
SUM(tcs.sumCost) / weightGrouping priceKg
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk
|
||||||
|
AND tcs.warehouseFk = tcc.warehouseFk
|
||||||
|
WHERE IFNULL(tcs.classRate, 3) = 3
|
||||||
|
GROUP BY tcs.warehouseFk, tcs.itemFk;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentPrice;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponentPrice ENGINE = MEMORY
|
||||||
|
SELECT * FROM (
|
||||||
|
SELECT * FROM tmp.ticketComponentRate ORDER BY price
|
||||||
|
) t
|
||||||
|
GROUP BY itemFk, warehouseFk, `grouping`;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE
|
||||||
|
tmp.ticketComponentCalculate,
|
||||||
|
tmp.ticketComponentSum,
|
||||||
|
tmp.ticketComponentBase,
|
||||||
|
tmp.ticketComponentRate,
|
||||||
|
tmp.ticketComponentCopy;
|
||||||
|
END$$
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
USE `vn`;
|
||||||
|
DROP procedure IF EXISTS `vn`.`ticketCalculate`;
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
USE `vn`$$
|
||||||
|
CREATE DEFINER=`root`@`%` PROCEDURE `ticketCalculate__`(
|
||||||
|
vLanded DATE,
|
||||||
|
vAddressFk INT,
|
||||||
|
vAgencyModeFk INT)
|
||||||
|
proc: BEGIN
|
||||||
|
-- OBSOLETO utilizar catalog_calculate
|
||||||
|
CALL vn.catalog_calculate(vLanded, vAddressFk, vAgencyModeFk);
|
||||||
|
END$$
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
|
;
|
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
USE `vn`;
|
||||||
|
DROP procedure IF EXISTS `vn`.`zoneGetAgency`;
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
USE `vn`$$
|
||||||
|
CREATE DEFINER=`root`@`%` PROCEDURE `zoneGetAgency`(vAddress INT, vLanded DATE)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Devuelve el listado de agencias disponibles para la fecha
|
||||||
|
* y dirección pasadas.
|
||||||
|
*
|
||||||
|
* @param vAddress Id de dirección de envío, %NULL si es recogida
|
||||||
|
* @param vDate Fecha de recogida
|
||||||
|
* @select Listado de agencias disponibles
|
||||||
|
*/
|
||||||
|
|
||||||
|
CALL zone_getAgency(vAddress,vLanded);
|
||||||
|
END$$
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
|
;
|
|
@ -1,60 +0,0 @@
|
||||||
|
|
||||||
USE `vn`;
|
|
||||||
DROP procedure IF EXISTS `vn`.`zoneGetAgency`;
|
|
||||||
|
|
||||||
DELIMITER $$
|
|
||||||
USE `vn`$$
|
|
||||||
CREATE DEFINER=`root`@`%` PROCEDURE `zoneGetAgency__`(vAddress INT, vLanded DATE)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* OBSOLETO USAR vn.zone_getAvailable
|
|
||||||
* Devuelve el listado de agencias disponibles para la fecha
|
|
||||||
* y dirección pasadas.
|
|
||||||
*
|
|
||||||
* @param vAddress Id de dirección de envÃo, %NULL si es recogida
|
|
||||||
* @param vDate Fecha de recogida
|
|
||||||
* @select Listado de agencias disponibles
|
|
||||||
*/
|
|
||||||
|
|
||||||
DECLARE vGeoFk INT;
|
|
||||||
|
|
||||||
SELECT p.geoFk INTO vGeoFk
|
|
||||||
FROM address a
|
|
||||||
JOIN town t ON t.provinceFk = a.provinceFk
|
|
||||||
JOIN postCode p ON p.townFk = t.id AND p.code = a.postalCode
|
|
||||||
WHERE a.id = vAddress
|
|
||||||
ORDER BY (a.city SOUNDS LIKE t.`name`) DESC
|
|
||||||
LIMIT 1;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetAgency;
|
|
||||||
CREATE TEMPORARY TABLE tmp.zoneGetAgency
|
|
||||||
(INDEX (agencyModeFk)) ENGINE = MEMORY
|
|
||||||
SELECT * FROM (
|
|
||||||
SELECT * FROM (
|
|
||||||
SELECT am.id agencyModeFk,
|
|
||||||
am.name agencyMode,
|
|
||||||
am.description,
|
|
||||||
am.deliveryMethodFk,
|
|
||||||
TIMESTAMPADD(DAY,-z.travelingDays, vLanded) shipped,
|
|
||||||
zi.isIncluded,
|
|
||||||
z.warehouseFk,
|
|
||||||
z.id zoneFk
|
|
||||||
FROM zoneGeo zgSon
|
|
||||||
JOIN zoneGeo zgFather ON zgSon.lft BETWEEN zgFather.lft AND zgFather.rgt
|
|
||||||
JOIN zoneIncluded zi ON zi.geoFk = zgFather.id
|
|
||||||
JOIN zone z ON z.id = zi.zoneFk
|
|
||||||
JOIN zoneCalendar zc ON zc.zoneFk = z.id
|
|
||||||
JOIN agencyMode am ON am.id = z.agencyModeFk
|
|
||||||
WHERE zgSon.`id` = vGeoFk
|
|
||||||
AND zc.delivered = vLanded
|
|
||||||
AND TIMESTAMPADD(DAY,-z.travelingDays, vLanded) >= CURDATE()
|
|
||||||
AND IF(TIMESTAMPADD(DAY,-z.travelingDays, vLanded) = CURDATE(), hour(now()) < hour(z.`hour`),TRUE)
|
|
||||||
ORDER BY z.id, zgFather.depth DESC, zi.isIncluded DESC) t
|
|
||||||
GROUP BY zoneFk
|
|
||||||
HAVING isIncluded > 0
|
|
||||||
ORDER BY shipped) t
|
|
||||||
GROUP BY agencyModeFk;
|
|
||||||
END$$
|
|
||||||
|
|
||||||
DELIMITER ;
|
|
||||||
;
|
|
|
@ -1,48 +1,3 @@
|
||||||
|
|
||||||
USE `vn`;
|
USE `vn`;
|
||||||
DROP procedure IF EXISTS `vn`.`zoneGetFirstShipped`;
|
DROP procedure IF EXISTS `vn`.`zoneGetFirstShipped`;
|
||||||
|
|
||||||
DELIMITER $$
|
|
||||||
USE `vn`$$
|
|
||||||
CREATE DEFINER=`root`@`%` PROCEDURE `zoneGetFirstShipped__`(vAgencyModeFk INT, vAddress INT, vWarehouseFk INT)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Devuelve la primera fecha de envio disponible para una agencia en una direccion y un warehouse
|
|
||||||
*
|
|
||||||
* @param vAgencyMode id de la agencia en vn.agencyMode
|
|
||||||
* @param vAddress id de la direccion
|
|
||||||
* @param vWarehouse id del warehouse
|
|
||||||
* @return vShipped la primera fecha disponible y vLanded la fecha de llegada/recojida
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
DECLARE vGeoFk INT;
|
|
||||||
|
|
||||||
SELECT p.geoFk INTO vGeoFk
|
|
||||||
FROM address a
|
|
||||||
JOIN town t ON t.provinceFk = a.provinceFk
|
|
||||||
JOIN postCode p ON p.townFk = t.id AND p.code = a.postalCode
|
|
||||||
WHERE a.id = vAddress
|
|
||||||
ORDER BY (a.city SOUNDS LIKE t.`name`) DESC
|
|
||||||
LIMIT 1;
|
|
||||||
|
|
||||||
SELECT * FROM (
|
|
||||||
SELECT TIMESTAMPADD(DAY,-z.travelingDays, zc.delivered) shipped,
|
|
||||||
zc.delivered landed,
|
|
||||||
zi.isIncluded
|
|
||||||
FROM zoneGeo zgSon
|
|
||||||
JOIN zoneGeo zgFather ON zgSon.lft BETWEEN zgFather.lft AND zgFather.rgt
|
|
||||||
JOIN zoneIncluded zi ON zi.geoFk = zgFather.id
|
|
||||||
JOIN zone z ON z.id = zi.zoneFk
|
|
||||||
JOIN zoneCalendar zc ON zc.zoneFk = z.id
|
|
||||||
WHERE zgSon.`id` = vGeoFk
|
|
||||||
AND z.agencyModeFk = vAgencyModeFk
|
|
||||||
AND z.warehouseFk = vWarehouseFk
|
|
||||||
AND TIMESTAMPADD(DAY,-z.travelingDays, zc.delivered) >= CURDATE()
|
|
||||||
AND IF(TIMESTAMPADD(DAY,-z.travelingDays, zc.delivered) = CURDATE(), hour(now()) < hour(z.`hour`),TRUE)
|
|
||||||
ORDER BY landed ASC, zgFather.depth DESC) t
|
|
||||||
HAVING isIncluded > 0 LIMIT 1;
|
|
||||||
END$$
|
|
||||||
|
|
||||||
DELIMITER ;
|
|
||||||
;
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
USE `vn`;
|
||||||
|
DROP procedure IF EXISTS `zoneGetLanded`;
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
USE `vn`$$
|
||||||
|
CREATE DEFINER=`root`@`%` PROCEDURE `zoneGetLanded`(vShipped DATE, vAddress INT, vAgencyMode INT, vWarehouse INT)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Devuelve una tabla temporal con el dia de recepcion para vShipped.
|
||||||
|
*
|
||||||
|
* @param vShipped Fecha de preparacion de mercancia
|
||||||
|
* @param vAddress Id de consignatario, %NULL para recogida
|
||||||
|
* @param vAgencyMode Id agencia
|
||||||
|
* @table tmp.zoneGetLanded Datos de recepción
|
||||||
|
*/
|
||||||
|
CALL zone_getLanded(vShipped,vAddress,vAgencyMode,vWarehouse);
|
||||||
|
END$$
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
|
|
||||||
USE `vn`;
|
|
||||||
DROP procedure IF EXISTS `vn`.`zoneGetLanded`;
|
|
||||||
|
|
||||||
DELIMITER $$
|
|
||||||
USE `vn`$$
|
|
||||||
CREATE DEFINER=`root`@`%` PROCEDURE `zoneGetLanded__`(vShipped DATE, vAddressFk INT, vAgencyModeFk INT, vWarehouseFk INT)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Devuelve una tabla temporal con el dia de recepcion para vShipped.
|
|
||||||
*
|
|
||||||
* @param vShipped Fecha de preparacion de mercancia
|
|
||||||
* @param vAddressFk Id de consignatario, %NULL para recogida
|
|
||||||
* @param vAgencyModeFk Id agencia
|
|
||||||
* @table tmp.zoneGetLanded Datos de recepción
|
|
||||||
*/
|
|
||||||
DECLARE vPostalCode varchar(10);
|
|
||||||
|
|
||||||
SELECT postalCode INTO vPostalCode
|
|
||||||
FROM address WHERE id = vAddressFk;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetLanded;
|
|
||||||
CREATE TEMPORARY TABLE tmp.zoneGetLanded
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT
|
|
||||||
id zoneFk,
|
|
||||||
vShipped shipped,
|
|
||||||
delivered landed,
|
|
||||||
vWarehouseFk warehouseFk,
|
|
||||||
agencyModeFk,
|
|
||||||
isIncluded
|
|
||||||
FROM (
|
|
||||||
SELECT zi.isIncluded, zc.delivered, z.id, z.agencyModeFk
|
|
||||||
FROM vn.zoneGeo zgSon
|
|
||||||
JOIN vn.zoneGeo zgFather ON zgSon.lft BETWEEN zgFather.lft AND zgFather.rgt
|
|
||||||
JOIN zoneIncluded zi ON zi.geoFk = zgFather.id
|
|
||||||
JOIN zone z ON z.id = zi.zoneFk
|
|
||||||
JOIN zoneCalendar zc ON zc.zoneFk = z.id
|
|
||||||
WHERE zgSon.`name` LIKE vPostalCode
|
|
||||||
AND zc.delivered = TIMESTAMPADD(DAY,z.travelingDays, vShipped)
|
|
||||||
AND IF(vShipped = CURDATE(), hour(now()) < hour(z.`hour`),TRUE)
|
|
||||||
AND z.agencyModeFk = vAgencyModeFk
|
|
||||||
AND z.warehouseFk = vWarehouseFk
|
|
||||||
ORDER BY zgFather.depth DESC) t
|
|
||||||
GROUP BY zoneFk
|
|
||||||
HAVING isIncluded > 0
|
|
||||||
LIMIT 1;
|
|
||||||
END$$
|
|
||||||
|
|
||||||
DELIMITER ;
|
|
||||||
;
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
USE `vn`;
|
||||||
|
DROP procedure IF EXISTS `zoneGetShipped`;
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
USE `vn`$$
|
||||||
|
CREATE DEFINER=`root`@`%` PROCEDURE `zoneGetShipped`(vLanded DATE, vAddressFk INT, vAgencyModeFk INT, vWarehouseFk INT)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* OBSOLETO usar zone_getShippedWarehouse
|
||||||
|
* Devuelve la mínima fecha de envía para cada warehouse
|
||||||
|
*
|
||||||
|
* @param vLanded La fecha de recepcion
|
||||||
|
* @param vAddressFk Id del consignatario
|
||||||
|
* @param vAgencyModeFk Id de la agencia
|
||||||
|
* @return tmp.zoneGetShipped
|
||||||
|
*/
|
||||||
|
CALL zone_getShippedWarehouse(vLanded, vAddressFk, vAgencyModeFk);
|
||||||
|
|
||||||
|
SELECT * FROM tmp.zoneGetShipped WHERE warehouseFk <> vWarehouseFk;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetLanded;
|
||||||
|
END$$
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
USE `vn`;
|
||||||
|
DROP procedure IF EXISTS `zoneGetShippedWarehouse`;
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
USE `vn`$$
|
||||||
|
CREATE DEFINER=`root`@`%` PROCEDURE `zoneGetShippedWarehouse`(vLanded DATE, vAddressFk INT, vAgencyModeFk INT)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Devuelve la mínima fecha de envío para cada warehouse
|
||||||
|
*
|
||||||
|
* @param vLanded La fecha de recepcion
|
||||||
|
* @param vAddressFk Id del consignatario
|
||||||
|
* @param vAgencyModeFk Id de la agencia
|
||||||
|
* @return tmp.zoneGetShipped
|
||||||
|
*/
|
||||||
|
CALL zone_getShippedWarehouse(vLanded, vAddressFk, vAgencyModeFk);
|
||||||
|
END$$
|
||||||
|
|
||||||
|
DELIMITER ;
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
|
|
||||||
USE `vn`;
|
|
||||||
DROP procedure IF EXISTS `vn`.`zoneGetShippedWarehouse`;
|
|
||||||
|
|
||||||
DELIMITER $$
|
|
||||||
USE `vn`$$
|
|
||||||
CREATE DEFINER=`root`@`%` PROCEDURE `zoneGetShippedWarehouse__`(vLanded DATE, vAddressFk INT, vAgencyModeFk INT)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Devuelve la mínima fecha de envío para cada warehouse
|
|
||||||
*
|
|
||||||
* @param vLanded La fecha de recepcion
|
|
||||||
* @param vAddressFk Id del consignatario
|
|
||||||
* @param vAgencyModeFk Id de la agencia
|
|
||||||
* @return tmp.zoneGetShipped
|
|
||||||
*/
|
|
||||||
|
|
||||||
DECLARE vGeoFk INT;
|
|
||||||
|
|
||||||
SELECT p.geoFk INTO vGeoFk
|
|
||||||
FROM address a
|
|
||||||
JOIN town t ON t.provinceFk = a.provinceFk
|
|
||||||
JOIN postCode p ON p.townFk = t.id AND p.code = a.postalCode
|
|
||||||
WHERE a.id = vAddressFk
|
|
||||||
ORDER BY (a.city SOUNDS LIKE t.`name`) DESC
|
|
||||||
LIMIT 1;
|
|
||||||
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetShipped;
|
|
||||||
CREATE TEMPORARY TABLE tmp.zoneGetShipped
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT * FROM (
|
|
||||||
SELECT * FROM (
|
|
||||||
SELECT z.id,
|
|
||||||
TIMESTAMPADD(DAY,-z.travelingDays, vLanded) shipped,
|
|
||||||
zi.isIncluded,z.warehouseFk
|
|
||||||
FROM zoneGeo zgSon
|
|
||||||
JOIN zoneGeo zgFather ON zgSon.lft BETWEEN zgFather.lft AND zgFather.rgt
|
|
||||||
JOIN zoneIncluded zi ON zi.geoFk = zgFather.id
|
|
||||||
JOIN zone z ON z.id = zi.zoneFk
|
|
||||||
JOIN zoneCalendar zc ON zc.zoneFk = z.id
|
|
||||||
WHERE zgSon.`id` = vGeoFk
|
|
||||||
AND zc.delivered = vLanded
|
|
||||||
AND z.agencyModeFk = vAgencyModeFk
|
|
||||||
AND IF(TIMESTAMPADD(DAY,-z.travelingDays, vLanded) = CURDATE(), hour(now()) < hour(z.`hour`),TRUE)
|
|
||||||
ORDER BY z.id, shipped ASC, zgFather.depth DESC, zi.isIncluded DESC) t
|
|
||||||
GROUP BY warehouseFk, id
|
|
||||||
HAVING isIncluded > 0
|
|
||||||
ORDER BY shipped) t
|
|
||||||
GROUP BY warehouseFk;
|
|
||||||
END$$
|
|
||||||
|
|
||||||
DELIMITER ;
|
|
||||||
;
|
|
|
@ -1,50 +0,0 @@
|
||||||
|
|
||||||
USE `vn`;
|
|
||||||
DROP procedure IF EXISTS `vn`.`zoneGetShipped`;
|
|
||||||
|
|
||||||
DELIMITER $$
|
|
||||||
USE `vn`$$
|
|
||||||
CREATE DEFINER=`root`@`%` PROCEDURE `zoneGetShipped__`(vLanded DATE, vAddressFk INT, vAgencyModeFk INT, vWarehouseFk INT)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Devuelve la mÃnima fecha de envÃa para cada warehouse
|
|
||||||
*
|
|
||||||
* @param vLanded La fecha de recepcion
|
|
||||||
* @param vAddressFk Id del consignatario
|
|
||||||
* @param vAgencyModeFk Id de la agencia
|
|
||||||
* @return tmp.zoneGetShipped
|
|
||||||
*/
|
|
||||||
|
|
||||||
DECLARE vPostalCode varchar(10);
|
|
||||||
|
|
||||||
SELECT postalCode INTO vPostalCode
|
|
||||||
FROM address WHERE id = vAddressFk;
|
|
||||||
|
|
||||||
SELECT * FROM (
|
|
||||||
SELECT * FROM (
|
|
||||||
SELECT z.id zoneFk,
|
|
||||||
TIMESTAMPADD(DAY,-z.travelingDays, vLanded) shipped,
|
|
||||||
vLanded landed,
|
|
||||||
vWarehouseFk warehouseFk,
|
|
||||||
z.agencyModeFk,
|
|
||||||
zi.isIncluded
|
|
||||||
FROM zoneGeo zgSon
|
|
||||||
JOIN zoneGeo zgFather ON zgSon.lft BETWEEN zgFather.lft AND zgFather.rgt
|
|
||||||
JOIN zoneIncluded zi ON zi.geoFk = zgFather.id
|
|
||||||
JOIN zone z ON z.id = zi.zoneFk
|
|
||||||
JOIN zoneCalendar zc ON zc.zoneFk = z.id
|
|
||||||
WHERE zgSon.`name` LIKE vPostalCode
|
|
||||||
AND zc.delivered = vLanded
|
|
||||||
AND z.agencyModeFk = vAgencyModeFk
|
|
||||||
AND z.warehouseFk = vWarehouseFk
|
|
||||||
AND IF(TIMESTAMPADD(DAY,-z.travelingDays, vLanded) = CURDATE(), hour(now()) < hour(z.`hour`),TRUE)
|
|
||||||
ORDER BY z.id, zgFather.depth DESC, isIncluded DESC) t
|
|
||||||
GROUP BY zoneFk
|
|
||||||
HAVING isIncluded > 0
|
|
||||||
ORDER BY shipped)
|
|
||||||
t
|
|
||||||
GROUP BY agencyModeFk;
|
|
||||||
END$$
|
|
||||||
|
|
||||||
DELIMITER ;
|
|
||||||
;
|
|
|
@ -17,23 +17,33 @@ BEGIN
|
||||||
DECLARE vAddress INT;
|
DECLARE vAddress INT;
|
||||||
DECLARE vLanded DATE;
|
DECLARE vLanded DATE;
|
||||||
DECLARE vAgency INT;
|
DECLARE vAgency INT;
|
||||||
|
DECLARE vZoneFk INT;
|
||||||
|
|
||||||
REPLACE INTO orderTicket(orderFk,ticketFk)
|
REPLACE INTO orderTicket(orderFk,ticketFk)
|
||||||
SELECT orderFk, vTicketNew
|
SELECT orderFk, vTicketNew
|
||||||
FROM orderTicket
|
FROM orderTicket
|
||||||
WHERE ticketFk = vTicketOld;
|
WHERE ticketFk = vTicketOld;
|
||||||
|
|
||||||
SELECT t.clientFk, t.warehouseFk, date(t.shipped), t.addressFk, t.agencyModeFk, t.landed, a.agencyFk
|
SELECT t.clientFk, t.warehouseFk, date(t.shipped), t.addressFk, t.agencyModeFk, t.landed, a.agencyFk, t.zoneFk
|
||||||
INTO vClient, vWarehouse, vShipped, vAddress, vAgencyMode, vLanded, vAgency
|
INTO vClient, vWarehouse, vShipped, vAddress, vAgencyMode, vLanded, vAgency, vZoneFk
|
||||||
FROM vn.agencyMode a
|
FROM vn.agencyMode a
|
||||||
JOIN vn.ticket t ON t.agencyModeFk = a.id
|
JOIN vn.ticket t ON t.agencyModeFk = a.id
|
||||||
WHERE t.id = vTicketNew;
|
WHERE t.id = vTicketNew;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetShipped;
|
IF vLanded IS NULL THEN
|
||||||
CALL zone_getShippedWarehouse(vLanded, vAddress, vAgencyMode);
|
CALL zone_getLanded(vShipped, vAddress, vAgency, vWarehouse);
|
||||||
DELETE FROM tmp.zoneGetShipped WHERE warehouseFk <> vWarehouse;
|
UPDATE ticket t
|
||||||
|
JOIN tmp.zoneGetLanded zgl ON t.warehouseFk = zgl.warehouseFk
|
||||||
|
SET t.landed = zgl.landed,
|
||||||
|
t.zone = zgl.zoneFk
|
||||||
|
WHERE t.id = vTicketNew;
|
||||||
|
|
||||||
CALL buyUltimate(vWarehouse, vShipped); -- rellena la tabla tmp.buyUltimate con la ultima compra
|
SELECT zoneFk INTO vZoneFk FROM tmp.zoneGetLanded LIMIT 1;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetLanded;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- rellena la tabla tmp.buyUltimate con la ultima compra
|
||||||
|
CALL buyUltimate(vWarehouse, vShipped);
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
|
||||||
CREATE TEMPORARY TABLE tmp.ticketLot
|
CREATE TEMPORARY TABLE tmp.ticketLot
|
||||||
|
@ -42,7 +52,7 @@ BEGIN
|
||||||
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
|
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
|
||||||
WHERE s.ticketFk = vTicketOld GROUP BY s.itemFk;
|
WHERE s.ticketFk = vTicketOld GROUP BY s.itemFk;
|
||||||
|
|
||||||
CALL catalog_componentCalculate(vAddress,vAgencyMode);
|
CALL catalog_componentCalculate(vZoneFk, vAddress, vAgencyMode);
|
||||||
|
|
||||||
-- Bionizamos lineas con Preu = 0
|
-- Bionizamos lineas con Preu = 0
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
||||||
|
@ -65,14 +75,6 @@ BEGIN
|
||||||
|
|
||||||
CALL ticketComponentUpdateSale(6);
|
CALL ticketComponentUpdateSale(6);
|
||||||
|
|
||||||
IF vLanded IS NULL THEN
|
|
||||||
CALL zone_getLanded(vShipped, vAddress, vAgency,vWarehouse);
|
|
||||||
UPDATE ticket t
|
|
||||||
JOIN tmp.zoneGetLanded zgl ON t.warehouseFk = zgl.warehouseFk
|
|
||||||
SET t.landed = zgl.landed
|
|
||||||
WHERE t.id = vTicketNew;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Log
|
-- Log
|
||||||
CALL `logAdd`(vTicketNew, 'update', ' ticket' , 'Bioniza Ticket');
|
CALL `logAdd`(vTicketNew, 'update', ' ticket' , 'Bioniza Ticket');
|
||||||
|
|
||||||
|
|
|
@ -1,86 +1,262 @@
|
||||||
|
|
||||||
USE `vn`;
|
USE `vn`;
|
||||||
DROP procedure IF EXISTS `ticketCalculateClon`;
|
DROP procedure IF EXISTS `vn`.`ticketComponentCalculate`;
|
||||||
|
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
USE `vn`$$
|
USE `vn`$$
|
||||||
CREATE DEFINER=`root`@`%` PROCEDURE `ticketCalculateClon`(IN vTicketNew INT, vTicketOld INT)
|
CREATE DEFINER=`root`@`%` PROCEDURE `ticketComponentCalculate__`(
|
||||||
BEGIN
|
vAddressFk INT,
|
||||||
/*
|
vAgencyModeFk INT)
|
||||||
* @vTicketNew id del nuevo ticket clonado
|
proc: BEGIN
|
||||||
* @vTicketOld id ticket original, a partir del qual se clonara el nuevo
|
-- OBSOLETO usar catalog_componentCalculate
|
||||||
* Este procedimiento "rebioniza" una linea, eliminando los componentes existentes e insertandolos de nuevo
|
/**
|
||||||
|
* Calcula los componentes de un ticket
|
||||||
|
*
|
||||||
|
* @param vAddressFk Id del consignatario
|
||||||
|
* @param vAgencyModeFk Id del modo de agencia
|
||||||
|
* @return tmp.ticketComponent(itemFk, warehouseFk, available, rate2, rate3, minPrice,
|
||||||
|
* packing, grouping, groupingMode, buyFk, typeFk)
|
||||||
|
* @return tmp.ticketComponentPrice (warehouseFk, itemFk, rate, grouping, price)
|
||||||
*/
|
*/
|
||||||
DECLARE vShipped DATE;
|
|
||||||
DECLARE vClient INT;
|
|
||||||
DECLARE vWarehouse SMALLINT;
|
|
||||||
DECLARE vAgencyMode INT;
|
|
||||||
DECLARE vAddress INT;
|
|
||||||
DECLARE vLanded DATE;
|
|
||||||
DECLARE vAgency INT;
|
|
||||||
|
|
||||||
REPLACE INTO orderTicket(orderFk,ticketFk)
|
DECLARE vClientFk INT;
|
||||||
SELECT orderFk, vTicketNew
|
DECLARE vGeneralInflationCoefficient INT DEFAULT 1;
|
||||||
FROM orderTicket
|
DECLARE vMinimumDensityWeight INT DEFAULT 167;
|
||||||
WHERE ticketFk = vTicketOld;
|
DECLARE vBoxFreightItem INT DEFAULT 71;
|
||||||
|
DECLARE vBoxVolume BIGINT; -- DEFAULT 138000;
|
||||||
|
DECLARE vSpecialPriceComponent INT DEFAULT 10;
|
||||||
|
DECLARE vDeliveryComponent INT DEFAULT 15;
|
||||||
|
DECLARE vRecoveryComponent INT DEFAULT 17;
|
||||||
|
DECLARE vSellByPacketComponent INT DEFAULT 22;
|
||||||
|
DECLARE vBuyValueComponent INT DEFAULT 28;
|
||||||
|
DECLARE vMarginComponent INT DEFAULT 29;
|
||||||
|
DECLARE vDiscountLastItemComponent INT DEFAULT 32;
|
||||||
|
DECLARE vExtraBaggedComponent INT DEFAULT 38;
|
||||||
|
DECLARE vManaAutoComponent INT DEFAULT 39;
|
||||||
|
|
||||||
SELECT t.clientFk, t.warehouseFk, date(t.shipped), t.addressFk, t.agencyModeFk, t.landed, a.agencyFk
|
|
||||||
INTO vClient, vWarehouse, vShipped, vAddress, vAgencyMode, vLanded, vAgency
|
|
||||||
FROM vn.agencyMode a
|
|
||||||
JOIN vn.ticket t ON t.agencyModeFk = a.id
|
|
||||||
WHERE t.id = vTicketNew;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetShipped;
|
|
||||||
CALL zone_getShippedWarehouse(vLanded, vAddress, vAgencyMode);
|
|
||||||
DELETE FROM tmp.zoneGetShipped WHERE warehouseFk <> vWarehouse;
|
|
||||||
|
|
||||||
CALL buyUltimate(vWarehouse, vShipped); -- rellena la tabla tmp.buyUltimate con la ultima compra
|
SELECT volume INTO vBoxVolume
|
||||||
|
FROM vn.packaging
|
||||||
|
WHERE id = '94';
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
|
SELECT clientFk INTO vClientFK
|
||||||
CREATE TEMPORARY TABLE tmp.ticketLot
|
FROM address
|
||||||
SELECT vWarehouse warehouseFk, NULL available, s.itemFk, bu.buyFk
|
WHERE id = vAddressFk;
|
||||||
FROM sale s
|
|
||||||
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
|
|
||||||
WHERE s.ticketFk = vTicketOld GROUP BY s.itemFk;
|
|
||||||
|
|
||||||
CALL catalog_componentCalculate(vAddress,vAgencyMode);
|
SET @rate2 := 0;
|
||||||
|
SET @rate3 := 0;
|
||||||
|
|
||||||
-- Bionizamos lineas con Preu = 0
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentCalculate;
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
CREATE TEMPORARY TABLE tmp.ticketComponentCalculate
|
||||||
CREATE TEMPORARY TABLE tmp.sale
|
(PRIMARY KEY (itemFk, warehouseFk))
|
||||||
(PRIMARY KEY (saleFk)) ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT s.id saleFk, vWarehouse warehouseFk
|
SELECT
|
||||||
FROM sale s
|
tl.itemFk, tl.warehouseFk, tl.available,
|
||||||
JOIN ticket t on t.id = s.ticketFk WHERE s.ticketFk = vTicketNew AND s.price = 0;
|
IF((@rate2 := IFNULL(pf.rate2, b.price2)) < i.minPrice AND i.hasMinPrice, i.minPrice, @rate2) * 1.0 rate2,
|
||||||
|
IF((@rate3 := IFNULL(pf.rate3, b.price3)) < i.minPrice AND i.hasMinPrice, i.minPrice, @rate3) * 1.0 rate3,
|
||||||
|
IFNULL(pf.rate3, 0) AS minPrice,
|
||||||
|
IFNULL(pf.packing, b.packing) packing,
|
||||||
|
IFNULL(pf.`grouping`, b.`grouping`) grouping,
|
||||||
|
ABS(IFNULL(pf.box, b.groupingMode)) groupingMode,
|
||||||
|
tl.buyFk,
|
||||||
|
i.typeFk,
|
||||||
|
IF(i.hasKgPrice,b.weight / b.packing, NULL) weightGrouping
|
||||||
|
FROM tmp.ticketLot tl
|
||||||
|
JOIN buy b ON b.id = tl.buyFk
|
||||||
|
JOIN item i ON i.id = tl.itemFk
|
||||||
|
JOIN itemType it ON it.id = i.typeFk
|
||||||
|
LEFT JOIN itemCategory ic ON ic.id = it.categoryFk
|
||||||
|
LEFT JOIN specialPrice sp ON sp.itemFk = i.id AND sp.clientFk = vClientFk
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT * FROM (
|
||||||
|
SELECT pf.itemFk, pf.`grouping`, pf.packing, pf.box, pf.rate2, pf.rate3, aho.warehouseFk
|
||||||
|
FROM priceFixed pf
|
||||||
|
JOIN tmp.zoneGetShipped aho ON pf.warehouseFk = aho.warehouseFk OR pf.warehouseFk = 0
|
||||||
|
WHERE aho.shipped BETWEEN pf.started AND pf.ended ORDER BY pf.itemFk, pf.warehouseFk DESC
|
||||||
|
) tpf
|
||||||
|
GROUP BY tpf.itemFk, tpf.warehouseFk
|
||||||
|
) pf ON pf.itemFk = tl.itemFk AND pf.warehouseFk = tl.warehouseFk
|
||||||
|
WHERE b.buyingValue + b.freightValue + b.packageValue + b.comissionValue > 0.01 AND ic.display <> 0;
|
||||||
|
|
||||||
CALL ticketComponentUpdateSale(1);
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponent;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponent (
|
||||||
|
`warehouseFk` INT UNSIGNED NOT NULL,
|
||||||
|
`itemFk` INT NOT NULL,
|
||||||
|
`componentFk` INT UNSIGNED NOT NULL,
|
||||||
|
`cost` DECIMAL(10,4) NOT NULL,
|
||||||
|
INDEX `itemWarehouse` USING BTREE (`itemFk` ASC, `warehouseFk` ASC),
|
||||||
|
UNIQUE INDEX `itemWarehouseComponent` (`itemFk` ASC, `warehouseFk` ASC, `componentFk` ASC));
|
||||||
|
|
||||||
-- Bionizamos lineas con Preu > 0
|
INSERT INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
SELECT
|
||||||
CREATE TEMPORARY TABLE tmp.sale
|
tcc.warehouseFk,
|
||||||
(PRIMARY KEY (saleFk)) ENGINE = MEMORY
|
tcc.itemFk,
|
||||||
SELECT s.id saleFk, vWarehouse warehouseFk
|
vBuyValueComponent,
|
||||||
FROM sale s
|
b.buyingValue + b.freightValue + b.packageValue + b.comissionValue
|
||||||
JOIN ticket t on t.id = s.ticketFk WHERE s.ticketFk = vTicketNew
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
AND s.price > 0;
|
JOIN buy b ON b.id = tcc.buyFk;
|
||||||
|
|
||||||
CALL ticketComponentUpdateSale(6);
|
INSERT INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
|
||||||
|
SELECT
|
||||||
|
tcc.warehouseFk,
|
||||||
|
tcc.itemFk,
|
||||||
|
vMarginComponent,
|
||||||
|
tcc.rate3 - b.buyingValue - b.freightValue - b.packageValue - b.comissionValue
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN buy b ON b.id = tcc.buyFk;
|
||||||
|
|
||||||
IF vLanded IS NULL THEN
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentBase;
|
||||||
CALL zone_getLanded(vShipped, vAddress, vAgency,vWarehouse);
|
CREATE TEMPORARY TABLE tmp.ticketComponentBase ENGINE = MEMORY
|
||||||
UPDATE ticket t
|
SELECT tc.itemFk, ROUND(SUM(tc.cost), 4) AS base, tc.warehouseFk
|
||||||
JOIN tmp.zoneGetLanded zgl ON t.warehouseFk = zgl.warehouseFk
|
FROM tmp.ticketComponent tc
|
||||||
SET t.landed = zgl.landed
|
GROUP BY tc.itemFk, warehouseFk;
|
||||||
WHERE t.id = vTicketNew;
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcb.warehouseFk, tcb.itemFk, vRecoveryComponent, ROUND(tcb.base * LEAST(cr.recobro, 0.25), 3)
|
||||||
|
FROM tmp.ticketComponentBase tcb
|
||||||
|
JOIN bi.claims_ratio cr ON cr.Id_Cliente = vClientFk
|
||||||
|
WHERE cr.recobro > 0.009;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcb.warehouseFk, tcb.itemFk, vManaAutoComponent, ROUND(base * (0.01 + prices_modifier_rate), 3) as manaAuto
|
||||||
|
FROM tmp.ticketComponentBase tcb
|
||||||
|
JOIN `client` c on c.id = vClientFk
|
||||||
|
JOIN bs.mana_spellers ms ON c.salesPersonFk = ms.Id_Trabajador
|
||||||
|
WHERE ms.prices_modifier_activated
|
||||||
|
HAVING manaAuto <> 0;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcb.warehouseFk,
|
||||||
|
tcb.itemFk,
|
||||||
|
cr.id,
|
||||||
|
GREATEST(IFNULL(ROUND(tcb.base * cr.tax, 4), 0), tcc.minPrice - tcc.rate3)
|
||||||
|
FROM tmp.ticketComponentBase tcb
|
||||||
|
JOIN componentRate cr
|
||||||
|
JOIN tmp.ticketComponentCalculate tcc ON tcc.itemFk = tcb.itemFk AND tcc.warehouseFk = tcb.warehouseFk
|
||||||
|
LEFT JOIN specialPrice sp ON sp.clientFk = vClientFk AND sp.itemFk = tcc.itemFk
|
||||||
|
WHERE cr.id = vDiscountLastItemComponent AND cr.tax <> 0 AND tcc.minPrice < tcc.rate3 AND sp.value IS NULL;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcc.warehouseFk, tcc.itemFk, vSellByPacketComponent, tcc.rate2 - tcc.rate3
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN buy b ON b.id = tcc.buyFk
|
||||||
|
LEFT JOIN specialPrice sp ON sp.clientFk = vClientFk AND sp.itemFk = tcc.itemFk
|
||||||
|
WHERE sp.value IS NULL;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcc.warehouseFK,
|
||||||
|
tcc.itemFk,
|
||||||
|
vDeliveryComponent,
|
||||||
|
vGeneralInflationCoefficient
|
||||||
|
* ROUND((
|
||||||
|
i.compression
|
||||||
|
* r.cm3
|
||||||
|
* IF(am.deliveryMethodFk = 1, (GREATEST(i.density, vMinimumDensityWeight) / vMinimumDensityWeight), 1)
|
||||||
|
* IFNULL((z.price - z.bonus)
|
||||||
|
* 1/*amz.inflation*/ , 50)) / vBoxVolume, 4
|
||||||
|
) cost
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN item i ON i.id = tcc.itemFk
|
||||||
|
JOIN agencyMode am ON am.id = vAgencyModeFk
|
||||||
|
JOIN `address` a ON a.id = vAddressFk
|
||||||
|
JOIN tmp.zoneGetShipped zgs ON zgs.warehouseFk = tcc.warehouseFk
|
||||||
|
JOIN zone z ON z.id = zgs.id
|
||||||
|
LEFT JOIN bi.rotacion r ON r.warehouse_id = tcc.warehouseFk
|
||||||
|
AND r.Id_Article = tcc.itemFk
|
||||||
|
HAVING cost <> 0;
|
||||||
|
|
||||||
|
IF (SELECT COUNT(*) FROM vn.addressForPackaging WHERE addressFk = vAddressFk) THEN
|
||||||
|
INSERT INTO tmp.ticketComponent
|
||||||
|
SELECT tcc.warehouseFk, b.itemFk, vExtraBaggedComponent, ap.packagingValue cost
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN vn.addressForPackaging ap
|
||||||
|
WHERE ap.addressFk = vAddressFk;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- Log
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentCopy;
|
||||||
CALL `logAdd`(vTicketNew, 'update', ' ticket' , 'Bioniza Ticket');
|
CREATE TEMPORARY TABLE tmp.ticketComponentCopy ENGINE = MEMORY
|
||||||
|
SELECT * FROM tmp.ticketComponent;
|
||||||
|
|
||||||
-- Limpieza
|
INSERT INTO tmp.ticketComponent
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.buyUltimate;
|
SELECT tcc.warehouseFk,
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
tcc.itemFk,
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
|
vSpecialPriceComponent,
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetLanded;
|
sp.value - SUM(tcc.cost) sumCost
|
||||||
|
FROM tmp.ticketComponentCopy tcc
|
||||||
|
JOIN componentRate cr ON cr.id = tcc.componentFk
|
||||||
|
JOIN specialPrice sp ON sp.clientFk = vClientFK AND sp.itemFk = tcc.itemFk
|
||||||
|
WHERE cr.classRate IS NULL
|
||||||
|
GROUP BY tcc.itemFk, tcc.warehouseFk
|
||||||
|
HAVING ABS(sumCost) > 0.001;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentSum;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponentSum
|
||||||
|
(INDEX (itemFk, warehouseFk))
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT SUM(cost) sumCost, tc.itemFk, tc.warehouseFk, cr.classRate
|
||||||
|
FROM tmp.ticketComponent tc
|
||||||
|
JOIN componentRate cr ON cr.id = tc.componentFk
|
||||||
|
GROUP BY tc.itemFk, tc.warehouseFk, cr.classRate;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentRate;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponentRate ENGINE = MEMORY
|
||||||
|
SELECT tcc.warehouseFk,
|
||||||
|
tcc.itemFk,
|
||||||
|
1 rate,
|
||||||
|
IF(tcc.groupingMode = 1, tcc.`grouping`, 1) grouping,
|
||||||
|
CAST(SUM(tcs.sumCost) AS DECIMAL(10,2)) price,
|
||||||
|
CAST(SUM(tcs.sumCost) / weightGrouping AS DECIMAL(10,2)) priceKg
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk
|
||||||
|
AND tcs.warehouseFk = tcc.warehouseFk
|
||||||
|
WHERE IFNULL(tcs.classRate, 1) = 1
|
||||||
|
AND tcc.groupingMode < 2 AND (tcc.packing > tcc.`grouping` or tcc.groupingMode = 0)
|
||||||
|
GROUP BY tcs.warehouseFk, tcs.itemFk;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponentRate (warehouseFk, itemFk, rate, grouping, price, priceKg)
|
||||||
|
SELECT
|
||||||
|
tcc.warehouseFk,
|
||||||
|
tcc.itemFk,
|
||||||
|
2 rate,
|
||||||
|
tcc.packing grouping,
|
||||||
|
SUM(tcs.sumCost) price,
|
||||||
|
SUM(tcs.sumCost) / weightGrouping priceKg
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk
|
||||||
|
AND tcs.warehouseFk = tcc.warehouseFk
|
||||||
|
WHERE tcc.available IS NULL OR (IFNULL(tcs.classRate, 2) = 2
|
||||||
|
AND tcc.packing > 0 AND tcc.available >= tcc.packing)
|
||||||
|
GROUP BY tcs.warehouseFk, tcs.itemFk;
|
||||||
|
|
||||||
|
INSERT INTO tmp.ticketComponentRate (warehouseFk, itemFk, rate, grouping, price, priceKg)
|
||||||
|
SELECT
|
||||||
|
tcc.warehouseFk,
|
||||||
|
tcc.itemFk,
|
||||||
|
3 rate,
|
||||||
|
tcc.available grouping,
|
||||||
|
SUM(tcs.sumCost) price,
|
||||||
|
SUM(tcs.sumCost) / weightGrouping priceKg
|
||||||
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
|
JOIN tmp.ticketComponentSum tcs ON tcs.itemFk = tcc.itemFk
|
||||||
|
AND tcs.warehouseFk = tcc.warehouseFk
|
||||||
|
WHERE IFNULL(tcs.classRate, 3) = 3
|
||||||
|
GROUP BY tcs.warehouseFk, tcs.itemFk;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketComponentPrice;
|
||||||
|
CREATE TEMPORARY TABLE tmp.ticketComponentPrice ENGINE = MEMORY
|
||||||
|
SELECT * FROM (
|
||||||
|
SELECT * FROM tmp.ticketComponentRate ORDER BY price
|
||||||
|
) t
|
||||||
|
GROUP BY itemFk, warehouseFk, `grouping`;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE
|
||||||
|
tmp.ticketComponentCalculate,
|
||||||
|
tmp.ticketComponentSum,
|
||||||
|
tmp.ticketComponentBase,
|
||||||
|
tmp.ticketComponentRate,
|
||||||
|
tmp.ticketComponentCopy;
|
||||||
END$$
|
END$$
|
||||||
|
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
;
|
||||||
|
|
|
@ -37,20 +37,6 @@ BEGIN
|
||||||
AND e.weekDays & (1 << WEEKDAY(TIMESTAMPADD(DAY, e.travelingDays, vShipped)))
|
AND e.weekDays & (1 << WEEKDAY(TIMESTAMPADD(DAY, e.travelingDays, vShipped)))
|
||||||
);
|
);
|
||||||
|
|
||||||
-- XXX: Compatibility with the deprecated #zoneCalendar table
|
|
||||||
|
|
||||||
INSERT INTO tTemp
|
|
||||||
SELECT t.id zoneFk,
|
|
||||||
z.`hour`,
|
|
||||||
z.travelingDays,
|
|
||||||
c.price,
|
|
||||||
c.bonus,
|
|
||||||
4
|
|
||||||
FROM tmp.zone t
|
|
||||||
JOIN zone z ON z.id = t.id
|
|
||||||
JOIN zoneCalendar c ON c.zoneFk = t.id
|
|
||||||
WHERE TIMESTAMPADD(DAY,-z.travelingDays, c.delivered) = vShipped;
|
|
||||||
|
|
||||||
DELETE t FROM tTemp t
|
DELETE t FROM tTemp t
|
||||||
JOIN zoneExclusion e
|
JOIN zoneExclusion e
|
||||||
ON e.zoneFk = t.zoneFk AND TIMESTAMPADD(DAY,-t.travelingDays, e.`day`) = vShipped;
|
ON e.zoneFk = t.zoneFk AND TIMESTAMPADD(DAY,-t.travelingDays, e.`day`) = vShipped;
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
USE `vn`;
|
|
||||||
DROP procedure IF EXISTS `zone_getOptionsForShipment`;
|
|
||||||
|
|
||||||
DELIMITER $$
|
|
||||||
USE `vn`$$
|
|
||||||
CREATE DEFINER=`root`@`%` PROCEDURE `zone_getOptionsForShipment`(vShipped DATE)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Gets computed options for the passed zones and shipping date.
|
|
||||||
*
|
|
||||||
* @table tmp.zones(id) The zones ids
|
|
||||||
* @param vShipped The shipping date
|
|
||||||
* @return tmp.zoneOption(zoneFk, hour, travelingDays, price, bonus, specificity) The computed options
|
|
||||||
*/
|
|
||||||
DECLARE vHour TIME DEFAULT TIME(NOW());
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tTemp;
|
|
||||||
CREATE TEMPORARY TABLE tTemp
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT t.id zoneFk,
|
|
||||||
TIME(e.`hour`) `hour`,
|
|
||||||
e.travelingDays,
|
|
||||||
e.price,
|
|
||||||
e.bonus,
|
|
||||||
CASE
|
|
||||||
WHEN e.`from` IS NULL AND e.`to` IS NULL
|
|
||||||
THEN 3
|
|
||||||
WHEN e.`to` IS NULL
|
|
||||||
THEN 2
|
|
||||||
ELSE 1
|
|
||||||
END specificity
|
|
||||||
FROM tmp.zone t
|
|
||||||
JOIN zoneEvent e ON e.zoneFk = t.id
|
|
||||||
WHERE (e.`from` = TIMESTAMPADD(DAY, e.travelingDays, vShipped) AND e.`to` IS NULL)
|
|
||||||
OR (
|
|
||||||
(e.`from` IS NULL OR TIMESTAMPADD(DAY, e.travelingDays, vShipped) BETWEEN e.`from` AND e.`to`)
|
|
||||||
AND e.weekDays & (1 << WEEKDAY(TIMESTAMPADD(DAY, e.travelingDays, vShipped)))
|
|
||||||
);
|
|
||||||
|
|
||||||
-- XXX: Compatibility with the deprecated #zoneCalendar table
|
|
||||||
|
|
||||||
INSERT INTO tTemp
|
|
||||||
SELECT t.id zoneFk,
|
|
||||||
z.`hour`,
|
|
||||||
z.travelingDays,
|
|
||||||
c.price,
|
|
||||||
c.bonus,
|
|
||||||
4
|
|
||||||
FROM tmp.zone t
|
|
||||||
JOIN zone z ON z.id = t.id
|
|
||||||
JOIN zoneCalendar c ON c.zoneFk = t.id
|
|
||||||
WHERE TIMESTAMPADD(DAY,-z.travelingDays, c.delivered) = vShipped;
|
|
||||||
|
|
||||||
DELETE t FROM tTemp t
|
|
||||||
JOIN zoneExclusion e
|
|
||||||
ON e.zoneFk = t.zoneFk AND TIMESTAMPADD(DAY,-t.travelingDays, e.`day`) = vShipped;
|
|
||||||
|
|
||||||
UPDATE tTemp t
|
|
||||||
JOIN zone z ON z.id = t.zoneFk
|
|
||||||
SET t.`hour` = IFNULL(t.`hour`, TIME(z.`hour`)),
|
|
||||||
t.travelingDays = IFNULL(t.travelingDays, z.travelingDays),
|
|
||||||
t.price = IFNULL(t.price, z.price),
|
|
||||||
t.bonus = IFNULL(t.bonus, z.bonus);
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.zoneOption;
|
|
||||||
CREATE TEMPORARY TABLE tmp.zoneOption
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT *
|
|
||||||
FROM (
|
|
||||||
SELECT * FROM tTemp
|
|
||||||
ORDER BY zoneFk, specificity
|
|
||||||
) t
|
|
||||||
GROUP BY zoneFk;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tTemp;
|
|
||||||
END$$
|
|
||||||
|
|
||||||
DELIMITER ;
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
USE `vn`;
|
||||||
|
DROP procedure IF EXISTS `catalog_calcFromItem`;
|
||||||
|
|
||||||
|
DELIMITER $$
|
||||||
|
USE `vn`$$
|
||||||
|
CREATE DEFINER=`root`@`%` PROCEDURE `catalog_calcFromItem`(
|
||||||
|
vLanded DATE,
|
||||||
|
vAddressFk INT,
|
||||||
|
vAgencyModeFk INT,
|
||||||
|
vItemFk INT)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Calculates available and price for a single item.
|
||||||
|
*
|
||||||
|
* @param vItemFk The item id
|
||||||
|
* @return tmp.ticketCalculateItem
|
||||||
|
* @return tmp.ticketComponentPrice
|
||||||
|
* @return tmp.ticketComponent
|
||||||
|
* @return tmp.ticketLot
|
||||||
|
* @return tmp.zoneGetShipped
|
||||||
|
*/
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.item;
|
||||||
|
CREATE TEMPORARY TABLE tmp.item
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT vItemFk itemFk;
|
||||||
|
|
||||||
|
CALL catalog_calculate(vLanded, vAddressFk, vAgencyModeFk);
|
||||||
|
DROP TEMPORARY TABLE tmp.item;
|
||||||
|
END$$
|
||||||
|
|
||||||
|
DELIMITER ;
|
|
@ -430,21 +430,21 @@ INSERT INTO `vn`.`invoiceOutSerial` (`code`, `description`, `isTaxed`, `taxAreaF
|
||||||
('T', 'Española rapida', 1, 'NATIONAL', 0),
|
('T', 'Española rapida', 1, 'NATIONAL', 0),
|
||||||
('V', 'Intracomunitaria global', 0, 'CEE', 1);
|
('V', 'Intracomunitaria global', 0, 'CEE', 1);
|
||||||
|
|
||||||
INSERT INTO `vn`.`zone` (`id`, `name`, `hour`, `warehouseFk`, `agencyModeFk`, `travelingDays`, `price`, `bonus`)
|
INSERT INTO `vn`.`zone` (`id`, `name`, `hour`, `agencyModeFk`, `travelingDays`, `price`, `bonus`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 'Zone pickup A', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 1, 1, 0, 0, 0),
|
(1, 'Zone pickup A', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 1, 0, 0, 0),
|
||||||
(2, 'Zone pickup B', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 2, 1, 0, 0, 0),
|
(2, 'Zone pickup B', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 1, 0, 0, 0),
|
||||||
(3, 'Zone 247 A', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 1, 7, 1, 2, 0),
|
(3, 'Zone 247 A', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 7, 1, 2, 0),
|
||||||
(4, 'Zone 247 B', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 2, 7, 1, 2, 0),
|
(4, 'Zone 247 B', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 7, 1, 2, 0),
|
||||||
(5, 'Zone expensive A', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 1, 8, 1, 1000, 0),
|
(5, 'Zone expensive A', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 8, 1, 1000, 0),
|
||||||
(6, 'Zone expensive B', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 2, 8, 1, 1000, 0),
|
(6, 'Zone expensive B', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 8, 1, 1000, 0),
|
||||||
(7, 'Zone refund', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 1, 23, 0, 0, 0),
|
(7, 'Zone refund', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 23, 0, 0, 0),
|
||||||
(8, 'Zone others', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 1, 10, 0, 0, 0),
|
(8, 'Zone others', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 10, 0, 0, 0),
|
||||||
(9, 'Zone superMan', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 1, 2, 0, 0, 0),
|
(9, 'Zone superMan', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 2, 0, 0, 0),
|
||||||
(10, 'Zone teleportation', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 3, 3, 0, 0, 0),
|
(10, 'Zone teleportation', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 3, 0, 0, 0),
|
||||||
(11, 'Zone pickup C', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 5, 1, 0, 0, 0),
|
(11, 'Zone pickup C', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 1, 0, 0, 0),
|
||||||
(12, 'Zone entanglement', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 4, 4, 0, 0, 0),
|
(12, 'Zone entanglement', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 4, 0, 0, 0),
|
||||||
(13, 'Zone quantum break', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 5, 5, 0, 0, 0);
|
(13, 'Zone quantum break', CONCAT(CURRENT_DATE(), ' ', TIME('22:00')), 5, 0, 0, 0);
|
||||||
|
|
||||||
INSERT INTO `vn`.`zoneWarehouse` (`id`, `zoneFk`, `warehouseFk`)
|
INSERT INTO `vn`.`zoneWarehouse` (`id`, `zoneFk`, `warehouseFk`)
|
||||||
VALUES
|
VALUES
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
module.exports = Self => {
|
|
||||||
Self.remoteMethod('getFirstShipped', {
|
|
||||||
description: 'Returns the first shipped and landed possible for params',
|
|
||||||
accepts: [{
|
|
||||||
arg: 'params',
|
|
||||||
type: 'object',
|
|
||||||
required: true,
|
|
||||||
description: 'agencyModeFk, addressFk, warehouseFk'
|
|
||||||
}],
|
|
||||||
returns: {
|
|
||||||
type: 'object',
|
|
||||||
root: true
|
|
||||||
},
|
|
||||||
http: {
|
|
||||||
path: `/getFirstShipped`,
|
|
||||||
verb: 'get'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Self.getFirstShipped = async params => {
|
|
||||||
let query = `CALL vn.zone_getFirstShipped(?, ?, ?)`;
|
|
||||||
let [result] = await Self.rawSql(query, [params.agencyModeFk, params.addressFk, params.warehouseFk]);
|
|
||||||
|
|
||||||
return result[0];
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -1,16 +0,0 @@
|
||||||
const app = require('vn-loopback/server/server');
|
|
||||||
|
|
||||||
describe('Agency getFirstShipped()', () => {
|
|
||||||
it('should return the first shipped and landed possible for the filter', async() => {
|
|
||||||
let filter = {
|
|
||||||
agencyModeFk: 1,
|
|
||||||
addressFk: 101,
|
|
||||||
warehouseFk: 1
|
|
||||||
};
|
|
||||||
|
|
||||||
let result = await app.models.Agency.getFirstShipped(filter);
|
|
||||||
|
|
||||||
expect(result.shipped).toBeDefined();
|
|
||||||
expect(result.landed).toBeDefined();
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,6 +1,5 @@
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
require('../methods/agency/landsThatDay')(Self);
|
require('../methods/agency/landsThatDay')(Self);
|
||||||
require('../methods/agency/getFirstShipped')(Self);
|
|
||||||
require('../methods/agency/getAgenciesWithWarehouse')(Self);
|
require('../methods/agency/getAgenciesWithWarehouse')(Self);
|
||||||
require('../methods/agency/getLanded')(Self);
|
require('../methods/agency/getLanded')(Self);
|
||||||
require('../methods/agency/getShipped')(Self);
|
require('../methods/agency/getShipped')(Self);
|
||||||
|
|
|
@ -45,11 +45,6 @@
|
||||||
"type": "belongsTo",
|
"type": "belongsTo",
|
||||||
"model": "AgencyMode",
|
"model": "AgencyMode",
|
||||||
"foreignKey": "agencyModeFk"
|
"foreignKey": "agencyModeFk"
|
||||||
},
|
|
||||||
"warehouse": {
|
|
||||||
"type": "belongsTo",
|
|
||||||
"model": "Warehouse",
|
|
||||||
"foreignKey": "warehouseFk"
|
|
||||||
},
|
},
|
||||||
"events": {
|
"events": {
|
||||||
"type": "hasMany",
|
"type": "hasMany",
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<vn-crud-model
|
<vn-crud-model
|
||||||
url="Zones"
|
url="Zones"
|
||||||
include="{relation: 'warehouse'}"
|
|
||||||
data="zones"
|
data="zones"
|
||||||
order="name"
|
order="name"
|
||||||
auto-load="true">
|
auto-load="true">
|
||||||
|
@ -86,7 +85,7 @@
|
||||||
ng-model="$ctrl.zoneId"
|
ng-model="$ctrl.zoneId"
|
||||||
vn-acl="productionBoss">
|
vn-acl="productionBoss">
|
||||||
<tpl-item>
|
<tpl-item>
|
||||||
<span>{{::name}} - {{::warehouse.name}} - Max. {{::hour | date: 'HH:mm'}} h.</span>
|
<span>{{::name}} - Max. {{::hour | date: 'HH:mm'}} h.</span>
|
||||||
</tpl-item>
|
</tpl-item>
|
||||||
</vn-autocomplete>
|
</vn-autocomplete>
|
||||||
</vn-horizontal>
|
</vn-horizontal>
|
||||||
|
|
Loading…
Reference in New Issue