Merge pull request '8298-zonePriceOptimum' (!3345) from 8298-zonePriceOptimum into dev
gitea/salix/pipeline/head This commit looks good
Details
gitea/salix/pipeline/head This commit looks good
Details
Reviewed-on: #3345 Reviewed-by: Pako Natek <pako@verdnatura.es> Reviewed-by: Alex Moreno <alexm@verdnatura.es>
This commit is contained in:
commit
d4b7d54052
|
@ -694,22 +694,22 @@ INSERT INTO `vn`.`invoiceOutExpense`(`id`, `invoiceOutFk`, `amount`, `expenseFk`
|
||||||
(6, 4, 8.07, 2000000000, util.VN_CURDATE()),
|
(6, 4, 8.07, 2000000000, util.VN_CURDATE()),
|
||||||
(7, 5, 8.07, 2000000000, util.VN_CURDATE());
|
(7, 5, 8.07, 2000000000, util.VN_CURDATE());
|
||||||
|
|
||||||
INSERT INTO `vn`.`zone` (`id`, `name`, `hour`, `agencyModeFk`, `travelingDays`, `price`, `bonus`, `itemMaxSize`)
|
INSERT INTO `vn`.`zone`
|
||||||
VALUES
|
(`id`, `name`, `hour`, `agencyModeFk`, `travelingDays`, `price`, `bonus`, `itemMaxSize`, `priceOptimum`)
|
||||||
(1, 'Zone pickup A', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 1, 0, 1, 0, 100),
|
VALUES
|
||||||
(2, 'Zone pickup B', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 1, 0, 1, 0, 100),
|
(1, 'Zone pickup A', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 1, 0, 1, 0, 100, 1),
|
||||||
(3, 'Zone 247 A', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 7, 1, 2, 0, 100),
|
(2, 'Zone pickup B', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 1, 0, 1, 0, 100, 1),
|
||||||
(4, 'Zone 247 B', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 7, 1, 2, 0, 100),
|
(3, 'Zone 247 A', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 7, 1, 2, 0, 100, 1),
|
||||||
(5, 'Zone expensive A', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 8, 1, 1000, 0, 100),
|
(4, 'Zone 247 B', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 7, 1, 2, 0, 100, 1),
|
||||||
(6, 'Zone expensive B', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 8, 1, 1000, 0, 100),
|
(5, 'Zone expensive A', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 8, 1, 1000, 0, 100, 500),
|
||||||
(7, 'Zone refund', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 23, 0, 1, 0, 100),
|
(6, 'Zone expensive B', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 8, 1, 1000, 0, 100, 500),
|
||||||
(8, 'Zone others', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 10, 0, 1, 0, 100),
|
(7, 'Zone refund', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 23, 0, 1, 0, 100, 0.5),
|
||||||
(9, 'Zone superMan', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 2, 0, 1, 0, 100),
|
(8, 'Zone others', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 10, 0, 1, 0, 100, 0.5),
|
||||||
(10, 'Zone teleportation', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 3, 0, 1, 0, 100),
|
(9, 'Zone superMan', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 2, 0, 1, 0, 100, 0.5),
|
||||||
(11, 'Zone pickup C', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 1, 0, 1, 0, 100),
|
(10, 'Zone teleportation', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 3, 0, 1, 0, 100, 0.5),
|
||||||
(12, 'Zone entanglement', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 4, 0, 1, 0, 100),
|
(11, 'Zone pickup C', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 1, 0, 1, 0, 100, 0.5),
|
||||||
(13, 'Zone quantum break', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 5, 0, 1, 0, 100);
|
(12, 'Zone entanglement', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 4, 0, 1, 0, 100, 0.5),
|
||||||
|
(13, 'Zone quantum break', CONCAT(util.VN_CURDATE(), ' ', TIME('23:59')), 5, 0, 1, 0, 100, 0.5);
|
||||||
|
|
||||||
INSERT INTO `vn`.`zoneWarehouse` (`id`, `zoneFk`, `warehouseFk`)
|
INSERT INTO `vn`.`zoneWarehouse` (`id`, `zoneFk`, `warehouseFk`)
|
||||||
VALUES
|
VALUES
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `vn`.`client_setPackagesDiscountFactor`
|
||||||
|
ON SCHEDULE EVERY 1 DAY
|
||||||
|
STARTS '2024-10-18 03:00:00.000'
|
||||||
|
ON COMPLETION PRESERVE
|
||||||
|
ENABLE
|
||||||
|
DO CALL client_setPackagesDiscountFactor()$$
|
||||||
|
DELIMITER ;
|
|
@ -231,7 +231,19 @@ BEGIN
|
||||||
SELECT tcc.warehouseFK,
|
SELECT tcc.warehouseFK,
|
||||||
tcc.itemFk,
|
tcc.itemFk,
|
||||||
c2.id,
|
c2.id,
|
||||||
z.inflation * ROUND(ic.cm3delivery * (IFNULL(zo.price,5000) - IFNULL(zo.bonus,0)) / (1000 * vc.standardFlowerBox) , 4) cost
|
z.inflation
|
||||||
|
* ROUND(
|
||||||
|
ic.cm3delivery
|
||||||
|
* (
|
||||||
|
(
|
||||||
|
zo.priceOptimum + (( zo.price - zo.priceOptimum) * 2 * ( 1 - c.packagesDiscountFactor))
|
||||||
|
)
|
||||||
|
- IFNULL(zo.bonus, 0)
|
||||||
|
)
|
||||||
|
/ (1000 * vc.standardFlowerBox),
|
||||||
|
4
|
||||||
|
) cost
|
||||||
|
|
||||||
FROM tmp.ticketComponentCalculate tcc
|
FROM tmp.ticketComponentCalculate tcc
|
||||||
JOIN item i ON i.id = tcc.itemFk
|
JOIN item i ON i.id = tcc.itemFk
|
||||||
JOIN tmp.zoneOption zo ON zo.zoneFk = vZoneFk
|
JOIN tmp.zoneOption zo ON zo.zoneFk = vZoneFk
|
||||||
|
@ -239,6 +251,7 @@ BEGIN
|
||||||
JOIN agencyMode am ON am.id = z.agencyModeFk
|
JOIN agencyMode am ON am.id = z.agencyModeFk
|
||||||
JOIN vn.volumeConfig vc
|
JOIN vn.volumeConfig vc
|
||||||
JOIN vn.component c2 ON c2.code = 'delivery'
|
JOIN vn.component c2 ON c2.code = 'delivery'
|
||||||
|
JOIN `client` c on c.id = vClientFk
|
||||||
LEFT JOIN itemCost ic ON ic.warehouseFk = tcc.warehouseFk
|
LEFT JOIN itemCost ic ON ic.warehouseFk = tcc.warehouseFk
|
||||||
AND ic.itemFk = tcc.itemFk
|
AND ic.itemFk = tcc.itemFk
|
||||||
HAVING cost <> 0;
|
HAVING cost <> 0;
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
DELIMITER $$
|
||||||
|
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost`
|
||||||
|
PROCEDURE `vn`.`client_setPackagesDiscountFactor`()
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Set the discount factor for the packages of the clients.
|
||||||
|
*/
|
||||||
|
UPDATE client c
|
||||||
|
JOIN (
|
||||||
|
SELECT t.clientFk,
|
||||||
|
LEAST((
|
||||||
|
SUM(t.packages) / COUNT(DISTINCT DATE(t.shipped))
|
||||||
|
) / cc.packagesOptimum, 1) discountFactor
|
||||||
|
FROM ticket t
|
||||||
|
JOIN clientConfig cc ON TRUE
|
||||||
|
WHERE t.shipped > util.VN_CURDATE() - INTERVAL cc.monthsToCalcOptimumPrice MONTH
|
||||||
|
AND t.packages
|
||||||
|
GROUP BY t.clientFk
|
||||||
|
) ca ON c.id = ca.clientFk
|
||||||
|
SET c.packagesDiscountFactor = ca.discountFactor;
|
||||||
|
|
||||||
|
END$$
|
||||||
|
|
||||||
|
DELIMITER ;
|
|
@ -30,6 +30,7 @@ BEGIN
|
||||||
TIME(IFNULL(e.`hour`, z.`hour`)) `hour`,
|
TIME(IFNULL(e.`hour`, z.`hour`)) `hour`,
|
||||||
l.travelingDays,
|
l.travelingDays,
|
||||||
IFNULL(e.price, z.price) price,
|
IFNULL(e.price, z.price) price,
|
||||||
|
IFNULL(e.priceOptimum, z.priceOptimum) priceOptimum,
|
||||||
IFNULL(e.bonus, z.bonus) bonus,
|
IFNULL(e.bonus, z.bonus) bonus,
|
||||||
l.landed,
|
l.landed,
|
||||||
vShipped shipped
|
vShipped shipped
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE `vn`.`zoneEvent`
|
||||||
|
ADD COLUMN `priceOptimum` DECIMAL(10,2) NULL COMMENT 'Precio mínimo que puede pagar un bulto'
|
||||||
|
AFTER `price`,
|
||||||
|
ADD CONSTRAINT `ck_zoneEvent_priceOptimum`
|
||||||
|
CHECK (priceOptimum <= price)
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE `vn`.`zone`
|
||||||
|
ADD COLUMN `priceOptimum` DECIMAL(10,2) NOT NULL COMMENT 'Precio mínimo que puede pagar un bulto'
|
||||||
|
AFTER `price`,
|
||||||
|
ADD CONSTRAINT `ck_zone_priceOptimum`
|
||||||
|
CHECK (priceOptimum <= price)
|
|
@ -0,0 +1,2 @@
|
||||||
|
UPDATE `vn`.`zone`
|
||||||
|
SET `priceOptimum` = `price`;
|
|
@ -0,0 +1,3 @@
|
||||||
|
ALTER TABLE `vn`.`client`
|
||||||
|
ADD COLUMN `packagesDiscountFactor` DECIMAL(4,3) NOT NULL DEFAULT 1.000
|
||||||
|
COMMENT 'Porcentaje de ajuste entre el numero de bultos medio del cliente, y el número medio óptimo para las zonas en las que compra';
|
|
@ -0,0 +1,3 @@
|
||||||
|
ALTER TABLE `vn`.`clientConfig`
|
||||||
|
ADD COLUMN `packagesOptimum` INT UNSIGNED NOT NULL DEFAULT 20 COMMENT 'Numero de bultos por cliente/dia para conseguir el precio optimo',
|
||||||
|
ADD COLUMN `monthsToCalcOptimumPrice` TINYINT UNSIGNED NOT NULL DEFAULT 3 COMMENT 'Número de meses a usar para el cálculo de client.packagesDiscountFactor';
|
|
@ -42,6 +42,9 @@
|
||||||
"price": {
|
"price": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
|
"priceOptimum": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
"bonus": {
|
"bonus": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
|
|
|
@ -28,6 +28,9 @@
|
||||||
"price": {
|
"price": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
|
"priceOptimum": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
"bonus": {
|
"bonus": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue