560 lines
20 KiB
MySQL
560 lines
20 KiB
MySQL
|
|
||
|
-- ticketCalculateClon-----------------------------------------------------------------------
|
||
|
USE `vn`;
|
||
|
DROP procedure IF EXISTS `ticketCalculateClon`;
|
||
|
|
||
|
DELIMITER $$
|
||
|
USE `vn`$$
|
||
|
CREATE DEFINER=`root`@`%` PROCEDURE `ticketCalculateClon`(IN vTicketNew INT, vTicketOld INT)
|
||
|
BEGIN
|
||
|
/*
|
||
|
* @vTicketNew id del nuevo ticket clonado
|
||
|
* @vTicketOld id ticket original, a partir del qual se clonara el nuevo
|
||
|
* Este procedimiento "rebioniza" una linea, eliminando los componentes existentes e insertandolos de nuevo
|
||
|
*/
|
||
|
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)
|
||
|
SELECT orderFk, vTicketNew
|
||
|
FROM orderTicket
|
||
|
WHERE ticketFk = vTicketOld;
|
||
|
|
||
|
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.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
|
||
|
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
|
||
|
CREATE TEMPORARY TABLE tmp.ticketLot
|
||
|
SELECT vWarehouse warehouseFk,NULL available,s.itemFk, bu.buyFk
|
||
|
FROM sale s
|
||
|
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
|
||
|
WHERE s.ticketFk = vTicketOld GROUP BY s.itemFk;
|
||
|
|
||
|
CALL ticketComponentCalculate(vAddress,vAgencyMode);
|
||
|
|
||
|
-- Bionizamos lineas con Preu = 0
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
||
|
CREATE TEMPORARY TABLE tmp.sale
|
||
|
(PRIMARY KEY (saleFk)) ENGINE = MEMORY
|
||
|
SELECT s.id saleFk, vWarehouse warehouseFk
|
||
|
FROM sale s
|
||
|
JOIN ticket t on t.id = s.ticketFk WHERE s.ticketFk = vTicketNew AND s.price = 0;
|
||
|
|
||
|
CALL ticketComponentUpdateSale(1);
|
||
|
|
||
|
-- Bionizamos lineas con Preu > 0
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
||
|
CREATE TEMPORARY TABLE tmp.sale
|
||
|
(PRIMARY KEY (saleFk)) ENGINE = MEMORY
|
||
|
SELECT s.id saleFk, vWarehouse warehouseFk
|
||
|
FROM sale s
|
||
|
JOIN ticket t on t.id = s.ticketFk WHERE s.ticketFk = vTicketNew
|
||
|
AND s.price > 0;
|
||
|
|
||
|
CALL ticketComponentUpdateSale(6);
|
||
|
|
||
|
IF vLanded IS NULL THEN
|
||
|
CALL zoneGetLanded(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
|
||
|
CALL `logAdd`(vTicketNew, 'update', ' ticket' , 'Bioniza Ticket');
|
||
|
|
||
|
-- Limpieza
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.buyUltimate;
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetLanded;
|
||
|
END$$
|
||
|
|
||
|
DELIMITER ;
|
||
|
|
||
|
DROP VIEW IF EXISTS `vn`.`agencyWeekDayBonus` ;
|
||
|
USE `vn`;
|
||
|
CREATE
|
||
|
OR REPLACE ALGORITHM = UNDEFINED
|
||
|
DEFINER = `root`@`%`
|
||
|
SQL SECURITY DEFINER
|
||
|
VIEW `vn`.`agencyWeekDayBonusKk` AS
|
||
|
SELECT
|
||
|
`a`.`id` AS `id`,
|
||
|
`a`.`warehouse_id` AS `warehouseFk`,
|
||
|
`a`.`agency_id` AS `agencyFk`,
|
||
|
`a`.`weekDay` AS `weekDay`,
|
||
|
`a`.`zona` AS `zone`,
|
||
|
`a`.`bonus` AS `bonus`
|
||
|
FROM
|
||
|
`vn2008`.`agency_weekday_bonus` `a`;
|
||
|
|
||
|
ALTER TABLE `vn2008`.`agency_weekday_bonus`
|
||
|
RENAME TO `vn2008`.`agency_weekday_bonusKk` ;
|
||
|
|
||
|
ALTER TABLE `vn2008`.`preparation_percentage`
|
||
|
RENAME TO `vn2008`.`preparation_percentageKk` ;
|
||
|
|
||
|
DROP VIEW IF EXISTS `vn`.`preparationPercentage` ;
|
||
|
USE `vn`;
|
||
|
CREATE
|
||
|
OR REPLACE ALGORITHM = UNDEFINED
|
||
|
DEFINER = `root`@`%`
|
||
|
SQL SECURITY DEFINER
|
||
|
VIEW `vn`.`preparationPercentageKk` AS
|
||
|
SELECT
|
||
|
`p`.`week_day` AS `weekDay`,
|
||
|
`p`.`warehouse_id` AS `warehouseFk`,
|
||
|
`p`.`percentage` AS `percentage`
|
||
|
FROM
|
||
|
`vn2008`.`preparation_percentage` `p`;
|
||
|
|
||
|
-- clonWeeklyTickets-----------------------------------------------------------------------
|
||
|
USE `vn2008`;
|
||
|
DROP procedure IF EXISTS `clonWeeklyTickets`;
|
||
|
|
||
|
DELIMITER $$
|
||
|
USE `vn2008`$$
|
||
|
CREATE DEFINER=`root`@`%` PROCEDURE `clonWeeklyTickets`(IN vWeek INT)
|
||
|
BEGIN
|
||
|
DECLARE done BIT DEFAULT 0;
|
||
|
DECLARE vLanding DATE;
|
||
|
DECLARE vShipment DATE;
|
||
|
DECLARE vWarehouse INT;
|
||
|
DECLARE vTicket INT;
|
||
|
DECLARE vWeekDay INT;
|
||
|
DECLARE vClient INT;
|
||
|
DECLARE vEmpresa INT;
|
||
|
DECLARE vConsignatario INT;
|
||
|
DECLARE vAgencia INT;
|
||
|
DECLARE vNewTicket INT;
|
||
|
DECLARE vYear INT;
|
||
|
|
||
|
DECLARE rsTicket CURSOR FOR
|
||
|
SELECT tt.Id_Ticket, weekDay, Id_Cliente, warehouse_id, empresa_id, Id_Consigna, Id_Agencia
|
||
|
FROM Tickets_turno tt
|
||
|
JOIN Tickets t ON tt.Id_Ticket = t.Id_Ticket;
|
||
|
|
||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
|
||
|
|
||
|
SET done = 0;
|
||
|
SET vYear = YEAR(CURDATE()) + IF(vWeek < WEEK(CURDATE()),1, 0);
|
||
|
|
||
|
OPEN rsTicket;
|
||
|
|
||
|
FETCH rsTicket INTO vTicket, vWeekDay, vClient, vWarehouse, vEmpresa, vConsignatario, vAgencia;
|
||
|
|
||
|
WHILE NOT done DO
|
||
|
|
||
|
SELECT date INTO vShipment
|
||
|
FROM time
|
||
|
WHERE year = vYear AND week = vWeek
|
||
|
AND WEEKDAY(date) = vWeekDay;
|
||
|
|
||
|
-- busca si el ticket ya ha sido clonado
|
||
|
IF (select count(*) FROM Tickets t JOIN ticket_observation tob ON t.Id_Ticket = tob.Id_Ticket
|
||
|
WHERE Id_Consigna = vConsignatario AND Fecha = vShipment AND tob.text LIKE CONCAT('%',vTicket,'%')) = 0
|
||
|
THEN
|
||
|
|
||
|
IF (SELECT COUNT(*) FROM Agencias WHERE Id_Agencia = vAgencia AND Agencia LIKE '%turno%') THEN
|
||
|
SET vAgencia = NULL;
|
||
|
END IF;
|
||
|
|
||
|
CALL vn.ticketCreate(vClient, vShipment, vWarehouse, vEmpresa, vConsignatario, vAgencia, NULL, vLanding, vNewTicket);
|
||
|
|
||
|
INSERT INTO Movimientos (Id_Ticket, Id_Article, Concepte, Cantidad, Preu, Descuento, CostFixat, PrecioFijado)
|
||
|
SELECT vNewTicket, Id_Article, Concepte, Cantidad, Preu, Descuento, CostFixat, PrecioFijado
|
||
|
FROM Movimientos WHERE Id_Ticket = vTicket;
|
||
|
|
||
|
INSERT INTO Ordenes (orden,datorden,datticket,codvendedor,codcomprador,cantidad,preciomax,preu,id_article,id_cliente,comentario,
|
||
|
ok, total,datcompra,ko,id_movimiento)
|
||
|
SELECT o.orden,o.datorden,vShipment,o.codvendedor,o.codcomprador,o.cantidad,o.preciomax,o.preu,o.id_article,o.id_cliente,o.comentario,
|
||
|
o.ok, o.total,o.datcompra,o.ko,m2.Id_Movimiento
|
||
|
FROM Movimientos m JOIN Ordenes o ON o.Id_Movimiento = m.Id_Movimiento
|
||
|
JOIN Movimientos m2 ON m.Concepte = m2.Concepte AND m.Cantidad = m2.Cantidad AND m.Id_Article = m2.Id_Article
|
||
|
WHERE m.Id_Ticket = vTicket AND m2.Id_Ticket = vNewTicket;
|
||
|
|
||
|
INSERT INTO ticket_observation(Id_Ticket,observation_type_id,text) VALUES(vNewTicket,4,CONCAT('turno desde ticket: ',vTicket))
|
||
|
ON DUPLICATE KEY UPDATE text = CONCAT(ticket_observation.text,VALUES(text),' ');
|
||
|
|
||
|
INSERT INTO ticket_observation(Id_Ticket,observation_type_id,text) VALUES(vNewTicket,1,'ATENCION: Contiene lineas de TURNO')
|
||
|
ON DUPLICATE KEY UPDATE text = CONCAT(ticket_observation.text,VALUES(text),' ');
|
||
|
|
||
|
CALL vn.ticketCalculateClon(vNewTicket, vTicket);
|
||
|
END IF;
|
||
|
FETCH rsTicket INTO vTicket, vWeekDay, vClient, vWarehouse, vEmpresa, vConsignatario, vAgencia;
|
||
|
|
||
|
END WHILE;
|
||
|
|
||
|
CLOSE rsTicket;
|
||
|
|
||
|
END$$
|
||
|
|
||
|
DELIMITER ;
|
||
|
|
||
|
|
||
|
-- ticketComponentCalculate-----------------------------------------------------------------------
|
||
|
|
||
|
USE `vn`;
|
||
|
DROP procedure IF EXISTS `ticketComponentCalculate`;
|
||
|
|
||
|
DELIMITER $$
|
||
|
USE `vn`$$
|
||
|
CREATE DEFINER=`root`@`%` PROCEDURE `ticketComponentCalculate`(
|
||
|
vAddressFk INT,
|
||
|
vAgencyModeFk INT)
|
||
|
proc: BEGIN
|
||
|
/**
|
||
|
* Calcula los componentes de un ticket
|
||
|
*
|
||
|
* @param vAddressFk Id del consignatario
|
||
|
* @param vAgencyModeFk Id del modo de agencia
|
||
|
* @return tmp.ticketComponent, tmp.ticketComponentPrice
|
||
|
*/
|
||
|
|
||
|
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
|
||
|
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.agencyHourGetShipped 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;
|
||
|
|
||
|
|
||
|
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(amz.price
|
||
|
* 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 agencyProvince ap ON ap.agencyFk = am.agencyFk
|
||
|
AND ap.warehouseFk = tcc.warehouseFk AND ap.provinceFk = a.provinceFk
|
||
|
JOIN agencyModeZone amz ON amz.agencyModeFk = vAgencyModeFk
|
||
|
AND amz.zone = ap.zone AND amz.itemFk = 71 AND amz.warehouseFk = tcc.warehouseFk
|
||
|
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,
|
||
|
SUM(tcs.sumCost) price
|
||
|
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)
|
||
|
SELECT
|
||
|
tcc.warehouseFk,
|
||
|
tcc.itemFk,
|
||
|
2 rate,
|
||
|
tcc.packing grouping,
|
||
|
SUM(tcs.sumCost) price
|
||
|
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)
|
||
|
SELECT
|
||
|
tcc.warehouseFk,
|
||
|
tcc.itemFk,
|
||
|
3 rate,
|
||
|
tcc.available grouping,
|
||
|
SUM(tcs.sumCost) price
|
||
|
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 ;
|
||
|
|
||
|
-- bionic_calc_clon-----------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
USE `vn2008`;
|
||
|
DROP procedure IF EXISTS `vn2008`.`bionic_calc_clon`;
|
||
|
|
||
|
DELIMITER $$
|
||
|
USE `vn2008`$$
|
||
|
CREATE DEFINER=`root`@`%` PROCEDURE `bionic_calc_clonKk`(IN v_ticket BIGINT)
|
||
|
BEGIN
|
||
|
|
||
|
/*
|
||
|
* DEPRECATED vn.ticketCalculateClon
|
||
|
*
|
||
|
Este procedimiento "rebioniza" una linea, eliminando los componentes existentes e insertandolos de nuevo
|
||
|
*/
|
||
|
DECLARE v_shipment DATE;
|
||
|
DECLARE v_customer INT;
|
||
|
DECLARE v_wh SMALLINT;
|
||
|
DECLARE v_agencia INT;
|
||
|
DECLARE v_consigna INT;
|
||
|
DECLARE v_landing DATE;
|
||
|
DECLARE v_agency INT;
|
||
|
|
||
|
REPLACE order_Tickets(order_id,Id_Ticket) VALUES(48, v_ticket);
|
||
|
|
||
|
SELECT t.Id_Cliente , t.warehouse_id, date(t.Fecha), t.Id_Consigna, t.Id_Agencia, t.landing, a.agency_id
|
||
|
INTO v_customer, v_wh, v_shipment, v_consigna, v_agencia, v_landing, v_agency
|
||
|
FROM vn2008.Agencias a
|
||
|
JOIN vn2008.Tickets t ON t.Id_Agencia = a.Id_Agencia
|
||
|
WHERE t.Id_Ticket = v_ticket;
|
||
|
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.agencyHourGetShipped;
|
||
|
CREATE TEMPORARY TABLE tmp.agencyHourGetShipped ENGINE = MEMORY
|
||
|
SELECT v_wh warehouseFk, v_shipment shipped, v_landing landed;
|
||
|
|
||
|
CALL item_last_buy_ (v_wh, v_shipment); -- rellena la tabla t_item_last_buy con la ultima compra
|
||
|
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.bionic_lot;
|
||
|
CREATE TEMPORARY TABLE tmp.bionic_lot
|
||
|
SELECT v_wh warehouse_id,NULL available,
|
||
|
m.Id_Article item_id,ilb.buy_id
|
||
|
FROM Movimientos m
|
||
|
LEFT JOIN t_item_last_buy ilb ON ilb.item_id = m.Id_Article
|
||
|
WHERE m.Id_Ticket = v_ticket GROUP BY m.Id_Article;
|
||
|
|
||
|
CALL bionic_calc_component(v_consigna,v_agencia);
|
||
|
|
||
|
-- Bionizamos lineas con Preu = 0
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.movement;
|
||
|
CREATE TEMPORARY TABLE tmp.movement
|
||
|
(PRIMARY KEY (Id_Movimiento)) ENGINE = MEMORY
|
||
|
SELECT Id_Movimiento, v_wh warehouse_id FROM Movimientos m
|
||
|
JOIN Tickets t on t.Id_Ticket = m.Id_Ticket WHERE m.Id_Ticket = v_ticket AND Preu = 0;
|
||
|
|
||
|
CALL bionic_movement_update(1);
|
||
|
|
||
|
-- Bionizamos lineas con Preu > 0
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.movement;
|
||
|
CREATE TEMPORARY TABLE tmp.movement
|
||
|
(PRIMARY KEY (Id_Movimiento)) ENGINE = MEMORY
|
||
|
SELECT Id_Movimiento, v_wh warehouse_id FROM Movimientos m
|
||
|
JOIN Tickets t on t.Id_Ticket = m.Id_Ticket WHERE m.Id_Ticket = v_ticket AND Preu > 0;
|
||
|
CALL bionic_movement_update(6);
|
||
|
|
||
|
IF v_landing IS NULL THEN
|
||
|
CALL travel_tree_shipment(v_shipment, v_consigna, v_agency,v_wh);
|
||
|
UPDATE Tickets t
|
||
|
JOIN travel_tree_shipment tts ON t.warehouse_id = tts.warehouse_id
|
||
|
SET t.landing = tts.landing
|
||
|
WHERE Id_Ticket = v_ticket;
|
||
|
END IF;
|
||
|
|
||
|
-- Log
|
||
|
call Ditacio(v_ticket
|
||
|
,'Bioniza Ticket'
|
||
|
,'T'
|
||
|
, 20
|
||
|
, 'proc bionic_calc_clon'
|
||
|
, NULL);
|
||
|
|
||
|
-- Limpieza
|
||
|
DROP TEMPORARY TABLE t_item_last_buy;
|
||
|
END$$
|
||
|
|
||
|
DELIMITER ;
|