DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`greuge_dif_porte_add`() BEGIN DECLARE vDateStarted DATETIME; DECLARE vDateEnded DATETIME DEFAULT TIMESTAMPADD(DAY,-1,util.VN_CURDATE()); DECLARE vDaysSinceLastRecalculation INT; SELECT daysSinceLastRecalculation INTO vDaysSinceLastRecalculation FROM vn.greugeConfig; SET vDateStarted = TIMESTAMPADD(DAY, -vDaysSinceLastRecalculation, util.VN_CURDATE()); DROP TEMPORARY TABLE IF EXISTS tmp.dp; -- Agencias que no cobran por volumen CREATE TEMPORARY TABLE tmp.dp (PRIMARY KEY (ticketFk)) ENGINE = MEMORY SELECT t.id ticketFk, SUM((t.zonePrice - t.zoneBonus) * ebv.ratio) AS teorico, 00000.00 as practico, 00000.00 as greuge, t.clientFk, t.shipped FROM vn.ticket t JOIN vn2008.Clientes cli ON cli.Id_cliente = t.clientFk LEFT JOIN vn.expedition e ON e.ticketFk = t.id JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.freightItemFk JOIN vn.zone z ON t.zoneFk = z.id WHERE t.shipped between vDateStarted AND vDateEnded AND cli.`real` AND t.companyFk IN (442 , 567) AND z.isVolumetric = FALSE GROUP BY t.id; -- Agencias que cobran por volumen INSERT INTO tmp.dp SELECT sv.ticketFk, SUM(IFNULL(sv.freight,0)) AS teorico, 00000.00 as practico, 00000.00 as greuge, sv.clientFk, sv.shipped FROM vn.saleVolume sv JOIN vn.zone z ON z.id = sv.zoneFk AND sv.shipped BETWEEN vDateStarted AND vDateEnded AND z.isVolumetric != FALSE GROUP BY sv.ticketFk; DROP TEMPORARY TABLE IF EXISTS tmp.dp_aux; CREATE TEMPORARY TABLE tmp.dp_aux (PRIMARY KEY (ticketFk)) ENGINE = MEMORY SELECT dp.ticketFk, sum(Cantidad * Valor) as valor FROM tmp.dp JOIN vn2008.Movimientos m ON m.Id_Ticket = dp.ticketFk JOIN vn2008.Movimientos_componentes mc using(Id_Movimiento) WHERE mc.Id_Componente = 15 GROUP BY dp.ticketFk; UPDATE tmp.dp JOIN tmp.dp_aux USING(ticketFk) SET practico = IFNULL(valor,0); DROP TEMPORARY TABLE tmp.dp_aux; CREATE TEMPORARY TABLE tmp.dp_aux (PRIMARY KEY (ticketFk)) ENGINE = MEMORY SELECT dp.ticketFk, sum(g.amount) Importe FROM tmp.dp JOIN vn.greuge g ON g.ticketFk = dp.ticketFk WHERE g.greugeTypeFk = 1 -- dif_porte GROUP BY dp.ticketFk; UPDATE tmp.dp JOIN tmp.dp_aux USING(ticketFk) SET greuge = IFNULL(Importe,0); INSERT INTO vn.greuge (clientFk,description,amount,shipped,greugeTypeFk,ticketFk) SELECT dp.clientFk, concat('dif_porte ', dp.ticketFk), round(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) as Importe, date(dp.shipped), 1, dp.ticketFk FROM tmp.dp JOIN vn.client c ON c.id = dp.clientFk WHERE ABS(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0)) > 1 AND c.isRelevant; DROP TEMPORARY TABLE tmp.dp, tmp.dp_aux; END$$ DELIMITER ;