DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`ventas_contables_add`(IN vYear INT, IN vMonth INT) BEGIN /** * Reemplaza las ventas contables del último año. * Es el origen de datos para el balance de Entradas * * @param vYear Año a reemplazar * @param vMonth Mes a reemplazar * **/ DECLARE TIPO_PATRIMONIAL INT DEFAULT 188; DELETE FROM bs.ventas_contables WHERE year = vYear AND month = vMonth; DROP TEMPORARY TABLE IF EXISTS tmp.ticket_list; CREATE TEMPORARY TABLE tmp.ticket_list (PRIMARY KEY (Id_Ticket)) ENGINE = MEMORY SELECT Id_Ticket FROM vn2008.Tickets t JOIN vn2008.Facturas f ON f.Id_Factura = t.Factura WHERE year(f.Fecha) = vYear AND month(f.Fecha) = vMonth; INSERT INTO bs.ventas_contables(year , month , venta , grupo , reino_id , tipo_id , empresa_id , gasto) SELECT vYear , vMonth , round(sum(Cantidad * Preu * (100 - m.Descuento)/100)) , IF( e.empresa_grupo = e2.empresa_grupo ,1 ,IF(e2.empresa_grupo,2,0) ) as grupo , tp.reino_id , a.tipo_id , t.empresa_id , 7000000000 + IF(e.empresa_grupo = e2.empresa_grupo ,1 ,IF(e2.empresa_grupo,2,0) ) * 1000000 + tp.reino_id * 10000 as Gasto FROM vn2008.Movimientos m JOIN vn2008.Tickets t on t.Id_Ticket = m.Id_Ticket JOIN vn2008.Consignatarios cs on cs.Id_Consigna = t.Id_Consigna JOIN vn2008.Clientes c on c.Id_Cliente = cs.Id_Cliente JOIN tmp.ticket_list tt on tt.Id_Ticket = t.Id_Ticket JOIN vn2008.Articles a on m.Id_Article = a.Id_Article JOIN vn2008.empresa e on e.id = t.empresa_id LEFT JOIN vn2008.empresa e2 on e2.Id_Cliente = c.Id_Cliente JOIN vn2008.Tipos tp on tp.tipo_id = a.tipo_id WHERE Cantidad <> 0 AND Preu <> 0 AND m.Descuento <> 100 AND a.tipo_id != TIPO_PATRIMONIAL GROUP BY grupo, reino_id, tipo_id, empresa_id, Gasto; INSERT INTO bs.ventas_contables(year , month , venta , grupo , reino_id , tipo_id , empresa_id , gasto) SELECT vYear , vMonth , sum(ts.quantity * ts.price) , IF( c.companyGroupFk = c2.companyGroupFk ,1 ,IF(c2.companyGroupFk, 2, 0) ) as grupo , NULL , NULL , t.companyFk , 7050000000 FROM vn.ticketService ts JOIN vn.ticket t ON ts.ticketFk = t.id JOIN vn.address a on a.id = t.addressFk JOIN vn.client cl on cl.id = a.clientFk JOIN tmp.ticket_list tt on tt.Id_Ticket = t.id JOIN vn.company c on c.id = t.companyFk LEFT JOIN vn.company c2 on c2.clientFk = cl.id GROUP BY grupo, t.companyFk ; DROP TEMPORARY TABLE tmp.ticket_list; END$$ DELIMITER ;