feat: refs#6493 modificar procedimiento balance_create
gitea/salix/pipeline/pr-dev This commit looks good
Details
gitea/salix/pipeline/pr-dev This commit looks good
Details
This commit is contained in:
parent
e047d445d3
commit
c889353459
|
@ -18,7 +18,7 @@ BEGIN
|
||||||
DECLARE vStartingYear INT DEFAULT vCurYear - 2;
|
DECLARE vStartingYear INT DEFAULT vCurYear - 2;
|
||||||
DECLARE vTable TEXT;
|
DECLARE vTable TEXT;
|
||||||
|
|
||||||
SET vTable = util.quoteIdentifier('balance_nest_tree');
|
SET vTable = util.quoteIdentifier('balanceNestTree');
|
||||||
SET vYear = util.quoteIdentifier(vCurYear);
|
SET vYear = util.quoteIdentifier(vCurYear);
|
||||||
SET vOneYearAgo = util.quoteIdentifier(vCurYear-1);
|
SET vOneYearAgo = util.quoteIdentifier(vCurYear-1);
|
||||||
SET vTwoYearsAgo = util.quoteIdentifier(vCurYear-2);
|
SET vTwoYearsAgo = util.quoteIdentifier(vCurYear-2);
|
||||||
|
@ -44,67 +44,65 @@ BEGIN
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.balance
|
CREATE OR REPLACE TEMPORARY TABLE tmp.balance
|
||||||
SELECT * FROM tmp.nest;
|
SELECT * FROM tmp.nest;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.empresas_receptoras;
|
SELECT companyGroupFk INTO vConsolidatedGroup
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.empresas_emisoras;
|
|
||||||
|
|
||||||
SELECT companyGroupFk INTO vConsolidatedGroup
|
|
||||||
FROM company
|
FROM company
|
||||||
WHERE id = vCompany;
|
WHERE id = vCompany;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.empresas_receptoras
|
CREATE OR REPLACE TEMPORARY TABLE tCompanyReceiving
|
||||||
SELECT id empresa_id
|
SELECT id companyId
|
||||||
FROM company
|
FROM company
|
||||||
WHERE id = vCompany
|
WHERE id = vCompany
|
||||||
OR companyGroupFk = IF(vIsConsolidated, vConsolidatedGroup, NULL);
|
OR companyGroupFk = IF(vIsConsolidated, vConsolidatedGroup, NULL);
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.empresas_emisoras
|
CREATE OR REPLACE TEMPORARY TABLE tCompanyIssuing
|
||||||
SELECT id empresa_id FROM supplier p;
|
SELECT id companyId
|
||||||
|
FROM supplier p;
|
||||||
|
|
||||||
IF vInterGroupSalesIncluded = FALSE THEN
|
IF vInterGroupSalesIncluded = FALSE THEN
|
||||||
|
|
||||||
DELETE ee.*
|
DELETE ci.*
|
||||||
FROM tmp.empresas_emisoras ee
|
FROM tCompanyIssuing ci
|
||||||
JOIN company e on e.id = ee.empresa_id
|
JOIN company e on e.id = ci.companyId
|
||||||
WHERE e.companyGroupFk = vConsolidatedGroup;
|
WHERE e.companyGroupFk = vConsolidatedGroup;
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- Se calculan las facturas que intervienen, para luego poder servir el desglose desde aqui
|
-- Se calculan las facturas que intervienen, para luego poder servir el desglose desde aqui
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.balance_desglose
|
CREATE OR REPLACE TEMPORARY TABLE tmp.balanceDetail
|
||||||
SELECT er.empresa_id receptora_id,
|
SELECT cr.companyId receivingId,
|
||||||
ee.empresa_id emisora_id,
|
ci.companyId issuingId,
|
||||||
year(IFNULL(r.bookEntried,IFNULL(r.booked, r.issued))) `year`,
|
year(IFNULL(r.bookEntried,IFNULL(r.booked, r.issued))) `year`,
|
||||||
month(IFNULL(r.bookEntried,IFNULL(r.booked, r.issued))) `month`,
|
month(IFNULL(r.bookEntried,IFNULL(r.booked, r.issued))) `month`,
|
||||||
expenseFk Id_Gasto,
|
expenseFk,
|
||||||
SUM(bi) importe
|
SUM(taxableBase) amount
|
||||||
FROM invoiceIn r
|
FROM invoiceIn r
|
||||||
JOIN invoiceInTax ri on ri.invoiceInFk = r.id
|
JOIN invoiceInTax ri on ri.invoiceInFk = r.id
|
||||||
JOIN tmp.empresas_receptoras er on er.empresa_id = r.companyFk
|
JOIN tCompanyReceiving cr on cr.companyId = r.companyFk
|
||||||
JOIN tmp.empresas_emisoras ee ON ee.empresa_id = r.supplierFk
|
JOIN tCompanyIssuing ci ON ci.companyId = r.supplierFk
|
||||||
WHERE IFNULL(r.bookEntried,IFNULL(r.booked, r.issued)) >= vStartingDate
|
WHERE IFNULL(r.bookEntried,IFNULL(r.booked, r.issued)) >= vStartingDate
|
||||||
AND r.isBooked
|
AND r.isBooked
|
||||||
GROUP BY Id_Gasto, year, month, emisora_id, receptora_id;
|
GROUP BY expenseFk, year, month, ci.companyId, cr.companyId;
|
||||||
|
|
||||||
INSERT INTO tmp.balance_desglose(
|
INSERT INTO tmp.balanceDetail(
|
||||||
receptora_id,
|
receivingId,
|
||||||
emisora_id,
|
issuingId,
|
||||||
year,
|
year,
|
||||||
month,
|
month,
|
||||||
Id_Gasto,
|
expenseFk,
|
||||||
importe)
|
amount)
|
||||||
SELECT gr.empresa_id,
|
SELECT em.companyFk,
|
||||||
gr.empresa_id,
|
em.companyFk,
|
||||||
year,
|
year,
|
||||||
month,
|
month,
|
||||||
Id_Gasto,
|
expenseFk,
|
||||||
SUM(importe)
|
SUM(amount)
|
||||||
FROM vn2008.gastos_resumen gr
|
FROM expenseManual em
|
||||||
JOIN tmp.empresas_receptoras er on gr.empresa_id = er.empresa_id
|
JOIN tCompanyReceiving er on em.companyFk = em.companyFk
|
||||||
WHERE year >= vStartingYear
|
WHERE year >= vStartingYear
|
||||||
AND month BETWEEN vStartingMonth AND vEndingMonth
|
AND month BETWEEN vStartingMonth AND vEndingMonth
|
||||||
GROUP BY Id_Gasto, year, month, gr.empresa_id;
|
GROUP BY expenseFk, year, month, em.companyFk;
|
||||||
|
|
||||||
DELETE FROM tmp.balance_desglose
|
DELETE FROM tmp.balanceDetail
|
||||||
WHERE month < vStartingMonth
|
WHERE month < vStartingMonth
|
||||||
OR month > vEndingMonth;
|
OR month > vEndingMonth;
|
||||||
|
|
||||||
|
@ -114,29 +112,29 @@ BEGIN
|
||||||
ADD COLUMN ', vTwoYearsAgo ,' INT(10) NULL ,
|
ADD COLUMN ', vTwoYearsAgo ,' INT(10) NULL ,
|
||||||
ADD COLUMN ', vOneYearAgo ,' INT(10) NULL ,
|
ADD COLUMN ', vOneYearAgo ,' INT(10) NULL ,
|
||||||
ADD COLUMN ', vYear,' INT(10) NULL ,
|
ADD COLUMN ', vYear,' INT(10) NULL ,
|
||||||
ADD COLUMN Id_Gasto VARCHAR(10) NULL,
|
ADD COLUMN expenseFk VARCHAR(10) NULL,
|
||||||
ADD COLUMN Gasto VARCHAR(45) NULL');
|
ADD COLUMN expenseName VARCHAR(45) NULL');
|
||||||
|
|
||||||
-- Añadimos los gastos, para facilitar el formulario
|
-- Añadimos los gastos, para facilitar el formulario
|
||||||
UPDATE tmp.balance b
|
UPDATE tmp.balance b
|
||||||
JOIN vn2008.balance_nest_tree bnt on bnt.id = b.id
|
JOIN balanceNestTree bnt on bnt.id = b.id
|
||||||
JOIN (SELECT id, name
|
JOIN (SELECT id, name
|
||||||
FROM expense
|
FROM expense
|
||||||
GROUP BY id) g ON g.id = bnt.Id_Gasto COLLATE utf8_general_ci
|
GROUP BY id) g ON g.id = bnt.expenseFk COLLATE utf8_general_ci
|
||||||
SET b.Id_Gasto = g.id COLLATE utf8_general_ci
|
SET b.expenseFk = g.id COLLATE utf8_general_ci
|
||||||
, b.Gasto = g.id COLLATE utf8_general_ci ;
|
, b.expenseName = g.id COLLATE utf8_general_ci ;
|
||||||
|
|
||||||
-- Rellenamos los valores de primer nivel, los que corresponden a los gastos simples
|
-- Rellenamos los valores de primer nivel, los que corresponden a los gastos simples
|
||||||
WHILE vYears >= 0 DO
|
WHILE vYears >= 0 DO
|
||||||
SET vQuery = CONCAT(
|
SET vQuery = CONCAT(
|
||||||
'UPDATE tmp.balance b
|
'UPDATE tmp.balance b
|
||||||
JOIN
|
JOIN
|
||||||
(SELECT Id_Gasto, SUM(Importe) as Importe
|
(SELECT expenseFk, SUM(amount) as amount
|
||||||
FROM tmp.balance_desglose
|
FROM tmp.balanceDetail
|
||||||
WHERE year = ?
|
WHERE year = ?
|
||||||
GROUP BY Id_Gasto
|
GROUP BY expenseFk
|
||||||
) sub on sub.Id_Gasto = b.Id_Gasto COLLATE utf8_general_ci
|
) sub on sub.expenseFk = b.expenseFk COLLATE utf8_general_ci
|
||||||
SET ', util.quoteIdentifier(vCurYear - vYears), ' = - Importe');
|
SET ', util.quoteIdentifier(vCurYear - vYears), ' = - amount');
|
||||||
|
|
||||||
EXECUTE IMMEDIATE vQuery
|
EXECUTE IMMEDIATE vQuery
|
||||||
USING vCurYear - vYears;
|
USING vCurYear - vYears;
|
||||||
|
@ -153,10 +151,10 @@ BEGIN
|
||||||
SUM(IF(year = ?, venta, 0)) y0,
|
SUM(IF(year = ?, venta, 0)) y0,
|
||||||
c.Gasto
|
c.Gasto
|
||||||
FROM bs.ventas_contables c
|
FROM bs.ventas_contables c
|
||||||
JOIN tmp.empresas_receptoras er on er.empresa_id = c.empresa_id
|
JOIN tCompanyReceiving cr on cr.companyId = c.empresa_id
|
||||||
WHERE month BETWEEN ? AND ?
|
WHERE month BETWEEN ? AND ?
|
||||||
GROUP BY c.Gasto
|
GROUP BY c.Gasto
|
||||||
) sub ON sub.Gasto = b.Id_Gasto COLLATE utf8_general_ci
|
) sub ON sub.gasto = b.expenseFk COLLATE utf8_general_ci
|
||||||
SET b.', vTwoYearsAgo, '= IFNULL(b.', vTwoYearsAgo, ', 0) + sub.y2,
|
SET b.', vTwoYearsAgo, '= IFNULL(b.', vTwoYearsAgo, ', 0) + sub.y2,
|
||||||
b.', vOneYearAgo, '= IFNULL(b.', vOneYearAgo, ', 0) + sub.y1,
|
b.', vOneYearAgo, '= IFNULL(b.', vOneYearAgo, ', 0) + sub.y1,
|
||||||
b.', vYear, '= IFNULL(b.', vYear, ', 0) + sub.y0')
|
b.', vYear, '= IFNULL(b.', vYear, ', 0) + sub.y0')
|
||||||
|
@ -198,7 +196,11 @@ BEGIN
|
||||||
b.', vOneYearAgo, ' = oneYearAgo,
|
b.', vOneYearAgo, ' = oneYearAgo,
|
||||||
b.', vTwoYearsAgo, ' = twoYearsAgo');
|
b.', vTwoYearsAgo, ' = twoYearsAgo');
|
||||||
|
|
||||||
SELECT *, CONCAT('',ifnull(Id_Gasto,'')) newgasto
|
SELECT *, CONCAT('',ifnull(expenseFk,'')) newgasto
|
||||||
FROM tmp.balance;
|
FROM tmp.balance;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tCompanyReceiving;
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tCompanyIssuing;
|
||||||
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -1,126 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`availableTraslate`(
|
|
||||||
vWarehouseLanding INT,
|
|
||||||
vDated DATE,
|
|
||||||
vWarehouseShipment INT)
|
|
||||||
proc: BEGIN
|
|
||||||
DECLARE vDatedFrom DATE;
|
|
||||||
DECLARE vDatedTo DATETIME;
|
|
||||||
DECLARE vDatedReserve DATETIME;
|
|
||||||
DECLARE vDatedInventory DATE;
|
|
||||||
|
|
||||||
IF vDated < util.VN_CURDATE() THEN
|
|
||||||
LEAVE proc;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
CALL vn.item_getStock (vWarehouseLanding, vDated, NULL);
|
|
||||||
|
|
||||||
-- Calcula algunos parámetros necesarios
|
|
||||||
SET vDatedFrom = TIMESTAMP(vDated, '00:00:00');
|
|
||||||
SET vDatedTo = TIMESTAMP(TIMESTAMPADD(DAY, 4, vDated), '23:59:59');
|
|
||||||
SELECT FechaInventario INTO vDatedInventory FROM tblContadores;
|
|
||||||
SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve
|
|
||||||
FROM hedera.orderConfig;
|
|
||||||
|
|
||||||
-- Calcula el ultimo dia de vida para cada producto
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS itemRange;
|
|
||||||
CREATE TEMPORARY TABLE itemRange
|
|
||||||
(PRIMARY KEY (itemFk))
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT c.itemFk, MAX(t.landed) dated
|
|
||||||
FROM vn.buy c
|
|
||||||
JOIN vn.entry e ON c.entryFk = e.id
|
|
||||||
JOIN vn.travel t ON t.id = e.travelFk
|
|
||||||
JOIN vn.warehouse w ON w.id = t.warehouseInFk
|
|
||||||
WHERE t.landed BETWEEN vDatedInventory AND vDatedFrom
|
|
||||||
AND t.warehouseInFk = vWarehouseLanding
|
|
||||||
AND NOT e.isExcludedFromAvailable
|
|
||||||
AND NOT e.isRaid
|
|
||||||
GROUP BY c.itemFk;
|
|
||||||
|
|
||||||
-- Tabla con el ultimo dia de last_buy para cada producto que hace un replace de la anterior
|
|
||||||
CALL vn.buyUltimate(vWarehouseShipment, util.VN_CURDATE());
|
|
||||||
|
|
||||||
INSERT INTO itemRange
|
|
||||||
SELECT t.itemFk, tr.landed
|
|
||||||
FROM tmp.buyUltimate t
|
|
||||||
JOIN vn.buy b ON b.id = t.buyFk
|
|
||||||
JOIN vn.entry e ON e.id = b.entryFk
|
|
||||||
JOIN vn.travel tr ON tr.id = e.travelFk
|
|
||||||
LEFT JOIN itemRange i ON t.itemFk = i.itemFk
|
|
||||||
WHERE t.warehouseFk = vWarehouseShipment
|
|
||||||
AND NOT e.isRaid
|
|
||||||
ON DUPLICATE KEY UPDATE itemRange.dated = GREATEST(itemRange.dated, tr.landed);
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS itemRangeLive;
|
|
||||||
CREATE TEMPORARY TABLE itemRangeLive
|
|
||||||
(PRIMARY KEY (itemFk))
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT ir.itemFk, TIMESTAMP(TIMESTAMPADD(DAY, it.life, ir.dated), '23:59:59') dated
|
|
||||||
FROM itemRange ir
|
|
||||||
JOIN vn.item i ON i.id = ir.itemFk
|
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
|
||||||
HAVING dated >= vDatedFrom OR dated IS NULL;
|
|
||||||
|
|
||||||
-- Calcula el ATP
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.itemCalc;
|
|
||||||
CREATE TEMPORARY TABLE tmp.itemCalc
|
|
||||||
(INDEX (itemFk,warehouseFk))
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT i.itemFk, vWarehouseLanding warehouseFk, i.shipped dated, i.quantity
|
|
||||||
FROM vn.itemTicketOut i
|
|
||||||
JOIN itemRangeLive ir ON ir.itemFK = i.itemFk
|
|
||||||
WHERE i.shipped >= vDatedFrom
|
|
||||||
AND (ir.dated IS NULL OR i.shipped <= ir.dated)
|
|
||||||
AND i.warehouseFk = vWarehouseLanding
|
|
||||||
UNION ALL
|
|
||||||
SELECT b.itemFk, vWarehouseLanding, t.landed, b.quantity
|
|
||||||
FROM vn.buy b
|
|
||||||
JOIN vn.entry e ON b.entryFk = e.id
|
|
||||||
JOIN vn.travel t ON t.id = e.travelFk
|
|
||||||
JOIN itemRangeLive ir ON ir.itemFk = b.itemFk
|
|
||||||
WHERE NOT e.isExcludedFromAvailable
|
|
||||||
AND b.quantity <> 0
|
|
||||||
AND NOT e.isRaid
|
|
||||||
AND t.warehouseInFk = vWarehouseLanding
|
|
||||||
AND t.landed >= vDatedFrom
|
|
||||||
AND (ir.dated IS NULL OR t.landed <= ir.dated)
|
|
||||||
UNION ALL
|
|
||||||
SELECT i.itemFk, vWarehouseLanding, i.shipped, i.quantity
|
|
||||||
FROM vn.itemEntryOut i
|
|
||||||
JOIN itemRangeLive ir ON ir.itemFk = i.itemFk
|
|
||||||
WHERE i.shipped >= vDatedFrom
|
|
||||||
AND (ir.dated IS NULL OR i.shipped <= ir.dated)
|
|
||||||
AND i.warehouseOutFk = vWarehouseLanding
|
|
||||||
UNION ALL
|
|
||||||
SELECT r.item_id, vWarehouseLanding, r.shipment, -r.amount
|
|
||||||
FROM hedera.order_row r
|
|
||||||
JOIN hedera.`order` o ON o.id = r.order_id
|
|
||||||
JOIN itemRangeLive ir ON ir.itemFk = r.item_id
|
|
||||||
WHERE r.shipment >= vDatedFrom
|
|
||||||
AND (ir.dated IS NULL OR r.shipment <= ir.dated)
|
|
||||||
AND r.warehouse_id = vWarehouseLanding
|
|
||||||
AND r.created >= vDatedReserve
|
|
||||||
AND NOT o.confirmed;
|
|
||||||
|
|
||||||
CALL vn.item_getAtp(vDated);
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS availableTraslate;
|
|
||||||
CREATE TEMPORARY TABLE availableTraslate
|
|
||||||
(PRIMARY KEY (item_id))
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT t.item_id, SUM(stock) available
|
|
||||||
FROM (
|
|
||||||
SELECT ti.itemFk item_id, stock
|
|
||||||
FROM tmp.itemList ti
|
|
||||||
JOIN itemRange ir ON ir.itemFk = ti.itemFk
|
|
||||||
UNION ALL
|
|
||||||
SELECT itemFk, quantity
|
|
||||||
FROM tmp.itemAtp
|
|
||||||
) t
|
|
||||||
GROUP BY t.item_id
|
|
||||||
HAVING available <> 0;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tmp.itemList, itemRange, itemRangeLive;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,207 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`balance_create`(
|
|
||||||
IN vStartingMonth INT,
|
|
||||||
IN vEndingMonth INT,
|
|
||||||
IN vCompany INT,
|
|
||||||
IN vIsConsolidated BOOLEAN,
|
|
||||||
IN vInterGroupSalesIncluded BOOLEAN)
|
|
||||||
BEGIN
|
|
||||||
DECLARE intGAP INT DEFAULT 7;
|
|
||||||
DECLARE vYears INT DEFAULT 2;
|
|
||||||
DECLARE vYear TEXT;
|
|
||||||
DECLARE vOneYearAgo TEXT;
|
|
||||||
DECLARE vTwoYearsAgo TEXT;
|
|
||||||
DECLARE vQuery TEXT;
|
|
||||||
DECLARE vConsolidatedGroup INT;
|
|
||||||
DECLARE vStartingDate DATE DEFAULT '2020-01-01';
|
|
||||||
DECLARE vCurYear INT DEFAULT YEAR(util.VN_CURDATE());
|
|
||||||
DECLARE vStartingYear INT DEFAULT vCurYear - 2;
|
|
||||||
DECLARE vTable TEXT;
|
|
||||||
|
|
||||||
SET vTable = util.quoteIdentifier('balance_nest_tree');
|
|
||||||
SET vYear = util.quoteIdentifier(vCurYear);
|
|
||||||
SET vOneYearAgo = util.quoteIdentifier(vCurYear-1);
|
|
||||||
SET vTwoYearsAgo = util.quoteIdentifier(vCurYear-2);
|
|
||||||
|
|
||||||
-- Solicitamos la tabla tmp.nest, como base para el balance
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.nest;
|
|
||||||
|
|
||||||
EXECUTE IMMEDIATE CONCAT(
|
|
||||||
'CREATE TEMPORARY TABLE tmp.nest
|
|
||||||
SELECT node.id
|
|
||||||
,CONCAT( REPEAT(REPEAT(" ",?), COUNT(parent.id) - 1), node.name) AS name
|
|
||||||
,node.lft
|
|
||||||
,node.rgt
|
|
||||||
,COUNT(parent.id) - 1 as depth
|
|
||||||
,cast((node.rgt - node.lft - 1) / 2 as DECIMAL) as sons
|
|
||||||
FROM ', vTable, ' AS node,
|
|
||||||
', vTable, ' AS parent
|
|
||||||
WHERE node.lft BETWEEN parent.lft AND parent.rgt
|
|
||||||
GROUP BY node.id
|
|
||||||
ORDER BY node.lft')
|
|
||||||
USING intGAP;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.balance;
|
|
||||||
CREATE TEMPORARY TABLE tmp.balance
|
|
||||||
SELECT * FROM tmp.nest;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.empresas_receptoras;
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.empresas_emisoras;
|
|
||||||
|
|
||||||
SELECT empresa_grupo INTO vConsolidatedGroup
|
|
||||||
FROM empresa
|
|
||||||
WHERE id = vCompany;
|
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE tmp.empresas_receptoras
|
|
||||||
SELECT id as empresa_id
|
|
||||||
FROM vn2008.empresa
|
|
||||||
WHERE id = vCompany
|
|
||||||
OR empresa_grupo = IF(vIsConsolidated, vConsolidatedGroup, NULL);
|
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE tmp.empresas_emisoras
|
|
||||||
SELECT Id_Proveedor as empresa_id FROM vn2008.Proveedores p;
|
|
||||||
|
|
||||||
IF vInterGroupSalesIncluded = FALSE THEN
|
|
||||||
|
|
||||||
DELETE ee.*
|
|
||||||
FROM tmp.empresas_emisoras ee
|
|
||||||
JOIN vn2008.empresa e on e.id = ee.empresa_id
|
|
||||||
WHERE e.empresa_grupo = vConsolidatedGroup;
|
|
||||||
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Se calculan las facturas que intervienen, para luego poder servir el desglose desde aqui
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.balance_desglose;
|
|
||||||
CREATE TEMPORARY TABLE tmp.balance_desglose
|
|
||||||
SELECT er.empresa_id receptora_id,
|
|
||||||
ee.empresa_id emisora_id,
|
|
||||||
year(IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha))) `year`,
|
|
||||||
month(IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha))) `month`,
|
|
||||||
gastos_id Id_Gasto,
|
|
||||||
SUM(bi) importe
|
|
||||||
FROM recibida r
|
|
||||||
JOIN recibida_iva ri on ri.recibida_id = r.id
|
|
||||||
JOIN tmp.empresas_receptoras er on er.empresa_id = r.empresa_id
|
|
||||||
JOIN tmp.empresas_emisoras ee ON ee.empresa_id = r.proveedor_id
|
|
||||||
WHERE IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha)) >= vStartingDate
|
|
||||||
AND r.contabilizada
|
|
||||||
GROUP BY Id_Gasto, year, month, emisora_id, receptora_id;
|
|
||||||
|
|
||||||
INSERT INTO tmp.balance_desglose(
|
|
||||||
receptora_id,
|
|
||||||
emisora_id,
|
|
||||||
year,
|
|
||||||
month,
|
|
||||||
Id_Gasto,
|
|
||||||
importe)
|
|
||||||
SELECT gr.empresa_id,
|
|
||||||
gr.empresa_id,
|
|
||||||
year,
|
|
||||||
month,
|
|
||||||
Id_Gasto,
|
|
||||||
SUM(importe)
|
|
||||||
FROM gastos_resumen gr
|
|
||||||
JOIN tmp.empresas_receptoras er on gr.empresa_id = er.empresa_id
|
|
||||||
WHERE year >= vStartingYear
|
|
||||||
AND month BETWEEN vStartingMonth AND vEndingMonth
|
|
||||||
GROUP BY Id_Gasto, year, month, gr.empresa_id;
|
|
||||||
|
|
||||||
DELETE FROM tmp.balance_desglose
|
|
||||||
WHERE month < vStartingMonth
|
|
||||||
OR month > vEndingMonth;
|
|
||||||
|
|
||||||
-- Ahora el balance
|
|
||||||
EXECUTE IMMEDIATE CONCAT(
|
|
||||||
'ALTER TABLE tmp.balance
|
|
||||||
ADD COLUMN ', vTwoYearsAgo ,' INT(10) NULL ,
|
|
||||||
ADD COLUMN ', vOneYearAgo ,' INT(10) NULL ,
|
|
||||||
ADD COLUMN ', vYear,' INT(10) NULL ,
|
|
||||||
ADD COLUMN Id_Gasto VARCHAR(10) NULL,
|
|
||||||
ADD COLUMN Gasto VARCHAR(45) NULL');
|
|
||||||
|
|
||||||
-- Añadimos los gastos, para facilitar el formulario
|
|
||||||
UPDATE tmp.balance b
|
|
||||||
JOIN vn2008.balance_nest_tree bnt on bnt.id = b.id
|
|
||||||
JOIN (SELECT id Id_Gasto, name Gasto
|
|
||||||
FROM vn.expense
|
|
||||||
GROUP BY id) g ON g.Id_Gasto = bnt.Id_Gasto COLLATE utf8_general_ci
|
|
||||||
SET b.Id_Gasto = g.Id_Gasto COLLATE utf8_general_ci
|
|
||||||
, b.Gasto = g.Gasto COLLATE utf8_general_ci ;
|
|
||||||
|
|
||||||
-- Rellenamos los valores de primer nivel, los que corresponden a los gastos simples
|
|
||||||
WHILE vYears >= 0 DO
|
|
||||||
SET vQuery = CONCAT(
|
|
||||||
'UPDATE tmp.balance b
|
|
||||||
JOIN
|
|
||||||
(SELECT Id_Gasto, SUM(Importe) as Importe
|
|
||||||
FROM tmp.balance_desglose
|
|
||||||
WHERE year = ?
|
|
||||||
GROUP BY Id_Gasto
|
|
||||||
) sub on sub.Id_Gasto = b.Id_Gasto COLLATE utf8_general_ci
|
|
||||||
SET ', util.quoteIdentifier(vCurYear - vYears), ' = - Importe');
|
|
||||||
|
|
||||||
EXECUTE IMMEDIATE vQuery
|
|
||||||
USING vCurYear - vYears;
|
|
||||||
|
|
||||||
SET vYears = vYears - 1;
|
|
||||||
END WHILE;
|
|
||||||
|
|
||||||
-- Añadimos las ventas
|
|
||||||
EXECUTE IMMEDIATE CONCAT(
|
|
||||||
'UPDATE tmp.balance b
|
|
||||||
JOIN (
|
|
||||||
SELECT SUM(IF(year = ?, venta, 0)) y2,
|
|
||||||
SUM(IF(year = ?, venta, 0)) y1,
|
|
||||||
SUM(IF(year = ?, venta, 0)) y0,
|
|
||||||
c.Gasto
|
|
||||||
FROM bs.ventas_contables c
|
|
||||||
JOIN tmp.empresas_receptoras er on er.empresa_id = c.empresa_id
|
|
||||||
WHERE month BETWEEN ? AND ?
|
|
||||||
GROUP BY c.Gasto
|
|
||||||
) sub ON sub.Gasto = b.Id_Gasto COLLATE utf8_general_ci
|
|
||||||
SET b.', vTwoYearsAgo, '= IFNULL(b.', vTwoYearsAgo, ', 0) + sub.y2,
|
|
||||||
b.', vOneYearAgo, '= IFNULL(b.', vOneYearAgo, ', 0) + sub.y1,
|
|
||||||
b.', vYear, '= IFNULL(b.', vYear, ', 0) + sub.y0')
|
|
||||||
USING vCurYear-2,
|
|
||||||
vCurYear-1,
|
|
||||||
vCurYear,
|
|
||||||
vStartingMonth,
|
|
||||||
vEndingMonth;
|
|
||||||
|
|
||||||
-- Ventas intra grupo
|
|
||||||
IF NOT vInterGroupSalesIncluded THEN
|
|
||||||
|
|
||||||
SELECT lft, rgt INTO @grupoLft, @grupoRgt
|
|
||||||
FROM tmp.balance b
|
|
||||||
WHERE TRIM(b.`name`) = 'Grupo';
|
|
||||||
|
|
||||||
DELETE
|
|
||||||
FROM tmp.balance
|
|
||||||
WHERE lft BETWEEN @grupoLft AND @grupoRgt;
|
|
||||||
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Rellenamos el valor de los padres con la suma de los hijos
|
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp.balance_aux;
|
|
||||||
CREATE TEMPORARY TABLE tmp.balance_aux
|
|
||||||
SELECT * FROM tmp.balance;
|
|
||||||
|
|
||||||
EXECUTE IMMEDIATE
|
|
||||||
CONCAT('UPDATE tmp.balance b
|
|
||||||
JOIN (
|
|
||||||
SELECT b1.id,
|
|
||||||
b1.name,
|
|
||||||
SUM(b2.', vYear,') thisYear,
|
|
||||||
SUM(b2.', vOneYearAgo,') oneYearAgo,
|
|
||||||
SUM(b2.', vTwoYearsAgo,') twoYearsAgo
|
|
||||||
FROM tmp.nest b1
|
|
||||||
JOIN tmp.balance_aux b2 on b2.lft BETWEEN b1.lft and b1.rgt
|
|
||||||
GROUP BY b1.id)sub ON sub.id = b.id
|
|
||||||
SET b.', vYear, ' = thisYear,
|
|
||||||
b.', vOneYearAgo, ' = oneYearAgo,
|
|
||||||
b.', vTwoYearsAgo, ' = twoYearsAgo');
|
|
||||||
|
|
||||||
SELECT *, CONCAT('',ifnull(Id_Gasto,'')) newgasto
|
|
||||||
FROM tmp.balance;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
Loading…
Reference in New Issue