439 lines
14 KiB
SQL
439 lines
14 KiB
SQL
DROP PROCEDURE IF EXISTS `sage`.`accountingMovements_add`;
|
|
|
|
DELIMITER $$
|
|
$$
|
|
CREATE DEFINER=`root`@`localhost` PROCEDURE `sage`.`accountingMovements_add`(vYear INT, vCompanyFk INT)
|
|
BEGIN
|
|
/**
|
|
* Traslada la info de contabilidad generada en base a vn.XDiario a la tabla sage.movConta para poder ejecutar posteriormente el proceso de importación de datos de SQL Server
|
|
* Solo traladará los asientos marcados con el campo vn.XDiario.enlazadoSage = FALSE
|
|
* @vYear Año contable del que se quiere trasladar la información
|
|
* @vCompanyFk Empresa de la que se quiere trasladar datos
|
|
*/
|
|
DECLARE vDatedFrom DATETIME;
|
|
DECLARE vDatedTo DATETIME;
|
|
DECLARE vDuaTransactionFk INT;
|
|
DECLARE vTaxImportFk INT;
|
|
DECLARE vTaxImportReducedFk INT;
|
|
DECLARE vTaxImportSuperReducedFk INT;
|
|
DECLARE vTransactionExportFk INT;
|
|
DECLARE vTransactionExportTaxFreeFk INT;
|
|
DECLARE vSerialDua VARCHAR(1) DEFAULT 'D';
|
|
DECLARE vInvoiceTypeInformativeCode VARCHAR(1);
|
|
DECLARE vCountryCanariasCode, vCountryCeutaMelillaCode VARCHAR(2) ;
|
|
DECLARE vBookEntries TEXT;
|
|
|
|
SELECT SiglaNacion INTO vCountryCanariasCode
|
|
FROM Naciones
|
|
WHERE Nacion ='ISLAS CANARIAS';
|
|
|
|
SELECT SiglaNacion INTO vCountryCeutaMelillaCode
|
|
FROM Naciones
|
|
WHERE Nacion ='CEUTA Y MELILLA';
|
|
|
|
SELECT CodigoTransaccion INTO vDuaTransactionFk
|
|
FROM TiposTransacciones
|
|
WHERE Transaccion = 'Import. bienes y serv. corrientes pdte. liquidar';
|
|
|
|
SELECT CodigoIva INTO vTaxImportFk
|
|
FROM TiposIva
|
|
WHERE Iva = 'IVA 21% importaciones';
|
|
|
|
SELECT CodigoIva INTO vTaxImportReducedFk
|
|
FROM TiposIva
|
|
WHERE Iva = 'IVA 10% importaciones';
|
|
|
|
SELECT CodigoIva INTO vTaxImportSuperReducedFk
|
|
FROM TiposIva
|
|
WHERE Iva = 'H.P. IVA Soportado Impor 4%';
|
|
|
|
SELECT CodigoTransaccion INTO vTransactionExportFk
|
|
FROM TiposTransacciones
|
|
WHERE Transaccion = 'Exportaciones definitivas';
|
|
|
|
SELECT CodigoTransaccion INTO vTransactionExportTaxFreeFk
|
|
FROM TiposTransacciones
|
|
WHERE Transaccion = 'Envíos definitivos a Canarias, Ceuta y Melilla';
|
|
|
|
SELECT codeSage INTO vInvoiceTypeInformativeCode
|
|
FROM invoiceType WHERE code ='informative';
|
|
|
|
SELECT CAST(CONCAT(vYear, '-01-01') AS DATETIME), util.dayEnd(CAST(CONCAT(vYear, '-12-31') AS DATE))
|
|
INTO vDatedFrom, vDatedTo;
|
|
|
|
TRUNCATE movContaIVA;
|
|
|
|
DELETE FROM movConta
|
|
WHERE enlazadoSage = FALSE
|
|
AND Asiento <> 1 ;
|
|
|
|
CALL clientSupplier_add(vCompanyFk);
|
|
CALL pgc_add(vCompanyFk);
|
|
CALL invoiceOut_manager(vYear, vCompanyFk);
|
|
CALL invoiceIn_manager(vYear, vCompanyFk);
|
|
|
|
INSERT INTO movConta(TipoEntrada,
|
|
Ejercicio,
|
|
CodigoEmpresa,
|
|
Asiento,
|
|
CargoAbono,
|
|
CodigoCuenta,
|
|
Contrapartida,
|
|
FechaAsiento,
|
|
Comentario,
|
|
ImporteAsiento,
|
|
NumeroPeriodo,
|
|
FechaGrabacion,
|
|
CodigoDivisa,
|
|
ImporteCambio,
|
|
ImporteDivisa,
|
|
FactorCambio,
|
|
IdProcesoIME,
|
|
TipoCarteraIME,
|
|
TipoAnaliticaIME,
|
|
StatusTraspasadoIME,
|
|
TipoImportacionIME,
|
|
Metalico347,
|
|
BaseIva1,
|
|
PorBaseCorrectora1,
|
|
PorIva1,
|
|
CuotaIva1,
|
|
PorRecargoEquivalencia1,
|
|
RecargoEquivalencia1,
|
|
CodigoTransaccion1,
|
|
BaseIva2,
|
|
PorBaseCorrectora2,
|
|
PorIva2,
|
|
CuotaIva2,
|
|
PorRecargoEquivalencia2,
|
|
RecargoEquivalencia2,
|
|
CodigoTransaccion2,
|
|
BaseIva3,
|
|
PorBaseCorrectora3,
|
|
PorIva3,
|
|
CuotaIva3,
|
|
PorRecargoEquivalencia3,
|
|
RecargoEquivalencia3,
|
|
CodigoTransaccion3,
|
|
BaseIva4,
|
|
PorBaseCorrectora4,
|
|
PorIva4,
|
|
CuotaIva4,
|
|
PorRecargoEquivalencia4,
|
|
RecargoEquivalencia4,
|
|
CodigoTransaccion4,
|
|
Año,
|
|
Serie,
|
|
Factura,
|
|
SuFacturaNo,
|
|
FechaFactura,
|
|
ImporteFactura,
|
|
TipoFactura,
|
|
CodigoCuentaFactura,
|
|
CifDni,
|
|
Nombre,
|
|
CodigoRetencion,
|
|
BaseRetencion,
|
|
PorRetencion,
|
|
ImporteRetencion,
|
|
SiglaNacion,
|
|
EjercicioFactura,
|
|
FechaOperacion,
|
|
Exclusion347,
|
|
MantenerAsiento,
|
|
ClaveOperacionFactura_,
|
|
TipoRectificativa,
|
|
FechaFacturaOriginal,
|
|
BaseImponibleOriginal,
|
|
CuotaIvaOriginal,
|
|
ClaseAbonoRectificativas,
|
|
RecargoEquivalenciaOriginal,
|
|
LibreA1,
|
|
CodigoIva1,
|
|
CodigoIva2,
|
|
CodigoIva3,
|
|
CodigoIva4,
|
|
IvaDeducible1,
|
|
IvaDeducible2,
|
|
IvaDeducible3,
|
|
IvaDeducible4,
|
|
Intracomunitaria
|
|
)
|
|
SELECT 'EN' TipoEntrada,
|
|
YEAR(x.FECHA) Ejercicio,
|
|
company_getCode(vCompanyFk) AS CodigoEmpresa,
|
|
x.ASIEN Asiento,
|
|
IF(EURODEBE <> 0 OR (EURODEBE = 0 AND EUROHABER IS NULL), 'D', 'H') CargoAbono,
|
|
x.SUBCTA CodigoCuenta,
|
|
x.CONTRA Contrapartida,
|
|
x.FECHA FechaAsiento,
|
|
x.CONCEPTO Comentario,
|
|
IF(x.EURODEBE, x.EURODEBE, x.EUROHABER) ImporteAsiento,
|
|
MONTH(x.FECHA) NumeroPeriodo,
|
|
IF(sub2.FECREGCON IS NULL, sub2.FECHA_EX, sub2.FECREGCON) FechaGrabacion,
|
|
IF(x.CAMBIO, IFNULL(mci.CodigoDivisa, sub3.code), '') CodigoDivisa,
|
|
x.CAMBIO ImporteCambio,
|
|
IFNULL(x.DEBEME, x.HABERME) ImporteDivisa,
|
|
IF(x.CAMBIO, TRUE, FALSE) FactorCambio,
|
|
NULL IdProcesoIME,
|
|
0 TipoCarteraIME,
|
|
0 TipoAnaliticaIME,
|
|
0 StatusTraspasadoIME,
|
|
0 TipoImportacionIME,
|
|
x.METAL Metalico347,
|
|
mci.BaseIva1,
|
|
mci.PorBaseCorrectora1,
|
|
mci.PorIva1,
|
|
mci.CuotaIva1,
|
|
mci.PorRecargoEquivalencia1,
|
|
mci.RecargoEquivalencia1,
|
|
mci.CodigoTransaccion1,
|
|
mci.BaseIva2,
|
|
mci.PorBaseCorrectora2,
|
|
mci.PorIva2,
|
|
mci.CuotaIva2,
|
|
mci.PorRecargoEquivalencia2,
|
|
mci.RecargoEquivalencia2,
|
|
mci.CodigoTransaccion2,
|
|
mci.BaseIva3,
|
|
mci.PorBaseCorrectora3,
|
|
mci.PorIva3,
|
|
mci.CuotaIva3,
|
|
mci.PorRecargoEquivalencia3,
|
|
mci.RecargoEquivalencia3,
|
|
mci.CodigoTransaccion3,
|
|
mci.BaseIva4,
|
|
mci.PorBaseCorrectora4,
|
|
mci.PorIva4,
|
|
mci.CuotaIva4,
|
|
mci.PorRecargoEquivalencia4,
|
|
mci.RecargoEquivalencia4,
|
|
mci.CodigoTransaccion4,
|
|
mci.Año,
|
|
mci.Serie,
|
|
mci.Factura,
|
|
mci.SuFacturaNo,
|
|
mci.FechaFactura,
|
|
mci.ImporteFactura,
|
|
mci.TipoFactura,
|
|
mci.CodigoCuentaFactura,
|
|
mci.CifDni,
|
|
mci.Nombre,
|
|
mci.CodigoRetencion,
|
|
mci.BaseRetencion,
|
|
mci.PorRetencion,
|
|
mci.ImporteRetencion,
|
|
mci.SiglaNacion,
|
|
mci.EjercicioFactura,
|
|
mci.FechaOperacion,
|
|
mci.Exclusion347,
|
|
TRUE,
|
|
mci.ClaveOperacionFactura,
|
|
mci.TipoRectificativa,
|
|
mci.FechaFacturaOriginal,
|
|
mci.BaseImponibleOriginal,
|
|
mci.CuotaIvaOriginal,
|
|
mci.ClaseAbonoRectificativas,
|
|
mci.RecargoEquivalenciaOriginal,
|
|
mci.LibreA1,
|
|
mci.CodigoIva1,
|
|
mci.CodigoIva2,
|
|
mci.CodigoIva3,
|
|
mci.CodigoIva4,
|
|
mci.IvaDeducible1,
|
|
mci.IvaDeducible2,
|
|
mci.IvaDeducible3,
|
|
mci.IvaDeducible4,
|
|
mci.Intracomunitaria
|
|
FROM vn.XDiario x
|
|
LEFT JOIN movContaIVA mci ON mci.id = x.id
|
|
LEFT JOIN (SELECT *
|
|
FROM (SELECT DISTINCT ASIEN, FECREGCON, FECHA_EX
|
|
FROM vn.XDiario
|
|
WHERE enlazadoSage = FALSE
|
|
ORDER BY ASIEN, FECREGCON DESC, FECHA_EX DESC
|
|
LIMIT 10000000000000000000
|
|
) sub GROUP BY ASIEN
|
|
)sub2 ON sub2.ASIEN = x.ASIEN
|
|
LEFT JOIN ( SELECT DISTINCT(account),cu.code
|
|
FROM vn.bank b
|
|
JOIN vn.currency cu ON cu.id = b.currencyFk
|
|
WHERE cu.code <> 'EUR' -- no se informa cuando la divisa en EUR
|
|
)sub3 ON sub3.account = x.SUBCTA
|
|
WHERE x.enlazadoSage = FALSE
|
|
AND x.empresa_id = vCompanyFk
|
|
AND x.FECHA BETWEEN vDatedFrom AND vDatedTo;
|
|
|
|
-- Metálicos
|
|
UPDATE movConta m
|
|
JOIN (SELECT Asiento,
|
|
c.socialName name,
|
|
c.fi,
|
|
n.SiglaNacion,
|
|
m.CodigoCuenta,
|
|
m.Contrapartida
|
|
FROM movConta m
|
|
LEFT JOIN vn.client c ON c.id = IF(m.CargoAbono = 'H',
|
|
CAST(SUBSTRING(m.CodigoCuenta, 3, LENGTH(m.CodigoCuenta)) AS UNSIGNED),
|
|
CAST(SUBSTRING(m.Contrapartida, 3, LENGTH(m.Contrapartida)) AS UNSIGNED))
|
|
LEFT JOIN Naciones n ON n.countryFk = c.countryFk
|
|
WHERE m.Metalico347 = TRUE
|
|
AND m.enlazadoSage = FALSE
|
|
)sub ON m.Asiento = sub.Asiento
|
|
SET m.Metalico347 = TRUE,
|
|
m.TipoFactura = vInvoiceTypeInformativeCode,
|
|
m.CifDni = sub.fi,
|
|
m.Nombre = sub.name,
|
|
m.SiglaNacion = sub.SiglaNacion
|
|
WHERE m.enlazadoSage = FALSE;
|
|
|
|
UPDATE movConta m
|
|
SET m.Metalico347 = FALSE,
|
|
m.TipoFactura = ''
|
|
WHERE m.CargoAbono = 'D'
|
|
AND m.enlazadoSage = FALSE;
|
|
|
|
-- Elimina cuentas de cliente/proveedor que no se utilizarán en la importación
|
|
DELETE cp
|
|
FROM clientesProveedores cp
|
|
LEFT JOIN movConta mc ON mc.codigoCuenta = cp.codigoCuenta
|
|
AND mc.enlazadoSage = FALSE
|
|
WHERE mc.codigoCuenta IS NULL;
|
|
|
|
-- Elimina cuentas contables que no se utilizarán en la importación
|
|
DELETE pc
|
|
FROM planCuentasPGC pc
|
|
LEFT JOIN movConta mc ON mc.codigoCuenta = pc.codigoCuenta
|
|
AND mc.enlazadoSage = FALSE
|
|
WHERE mc.codigoCuenta IS NULL;
|
|
|
|
-- DUAS
|
|
UPDATE movConta mci
|
|
JOIN vn.XDiario x ON x.ASIEN = mci.Asiento
|
|
JOIN TiposIva ti ON ti.CodigoIva = x.IVA
|
|
JOIN vn.pgcMaster pm ON pm.code = mci.CodigoCuenta COLLATE utf8mb3_unicode_ci
|
|
SET mci.BaseIva1 = x.BASEEURO,
|
|
mci.PorIva1 = x.IVA,
|
|
mci.CuotaIva1 = CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10, 2)),
|
|
mci.CodigoTransaccion1 = vDuaTransactionFk,
|
|
mci.CodigoIva1 = vTaxImportReducedFk,
|
|
mci.IvaDeducible1 = TRUE,
|
|
mci.FechaFacturaOriginal = x.FECHA_EX,
|
|
mci.SuFacturaNo = x.FACTURAEX,
|
|
mci.FechaOperacion = x.FECHA_OP,
|
|
mci.ImporteFactura = mci.ImporteFactura + x.BASEEURO + CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10, 2))
|
|
WHERE pm.description = 'HP Iva pendiente'
|
|
AND mci.enlazadoSage = FALSE
|
|
AND x.SERIE = vSerialDua COLLATE utf8mb3_unicode_ci
|
|
AND ti.Iva = 'I.V.A. 10% Nacional';
|
|
|
|
UPDATE movConta mci
|
|
JOIN vn.XDiario x ON x.ASIEN = mci.Asiento
|
|
JOIN TiposIva ti ON ti.CodigoIva = x.IVA
|
|
JOIN vn.pgcMaster pm ON pm.code = mci.CodigoCuenta COLLATE utf8mb3_unicode_ci
|
|
SET mci.BaseIva2 = x.BASEEURO ,
|
|
mci.PorIva2 = x.IVA,
|
|
mci.CuotaIva2 = CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10,2)),
|
|
mci.CodigoTransaccion2 = vDuaTransactionFk ,
|
|
mci.CodigoIva2 = vTaxImportFk,
|
|
mci.IvaDeducible2 = TRUE,
|
|
mci.ImporteFactura = mci.ImporteFactura + x.BASEEURO + CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10, 2))
|
|
WHERE pm.description = 'HP Iva pendiente'
|
|
AND mci.enlazadoSage = FALSE
|
|
AND x.SERIE = vSerialDua COLLATE utf8mb3_unicode_ci
|
|
AND ti.Iva = 'I.V.A. 21%';
|
|
|
|
UPDATE movConta mci
|
|
JOIN vn.XDiario x ON x.ASIEN = mci.Asiento
|
|
JOIN TiposIva ti ON ti.CodigoIva = x.IVA
|
|
JOIN vn.pgcMaster pm ON pm.code = mci.CodigoCuenta COLLATE utf8mb3_unicode_ci
|
|
SET mci.BaseIva3 = x.BASEEURO ,
|
|
mci.PorIva3 = x.IVA,
|
|
mci.CuotaIva3 = CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10,2)),
|
|
mci.CodigoTransaccion3 = vDuaTransactionFk ,
|
|
mci.CodigoIva3 = vTaxImportSuperReducedFk,
|
|
mci.IvaDeducible3 = TRUE,
|
|
mci.ImporteFactura = mci.ImporteFactura + x.BASEEURO + CAST((x.IVA / 100) * x.BASEEURO AS DECIMAL(10, 2))
|
|
WHERE pm.description = 'HP Iva pendiente'
|
|
AND mci.enlazadoSage = FALSE
|
|
AND x.SERIE = vSerialDua COLLATE utf8mb3_unicode_ci
|
|
AND ti.Iva = 'I.V.A. 4%';
|
|
|
|
-- Rectificativas
|
|
UPDATE movConta mci
|
|
JOIN (SELECT x.ASIEN, x.FECHA_RT, x.SERIE_RT, x.FACTU_RT
|
|
FROM movConta mci
|
|
JOIN vn.XDiario x ON x.ASIEN = mci.Asiento
|
|
WHERE mci.TipoRectificativa > 0
|
|
AND mci.enlazadoSage = FALSE
|
|
AND x.FACTU_RT IS NOT NULL
|
|
GROUP BY x.ASIEN
|
|
) sub ON sub.ASIEN = mci.Asiento
|
|
SET mci.EjercicioFacturaOriginal = YEAR(sub.FECHA_RT),
|
|
mci.SerieFacturaOriginal = sub.SERIE_RT,
|
|
mci.NumeroFacturaOriginal = sub.FACTU_RT
|
|
WHERE mci.TipoRectificativa > 0 AND
|
|
mci.enlazadoSage = FALSE ;
|
|
|
|
-- Exportaciones Andorras y Canarias cambia TT (la cuenta es compartida)
|
|
UPDATE movConta mci
|
|
SET CodigoTransaccion1 = vTransactionExportTaxFreeFk,
|
|
CodigoTransaccion2 = IF(CodigoTransaccion2 = 0, 0, vTransactionExportTaxFreeFk),
|
|
CodigoTransaccion3 = IF(CodigoTransaccion3 = 0, 0, vTransactionExportTaxFreeFk),
|
|
CodigoTransaccion4 = IF(CodigoTransaccion4 = 0, 0, vTransactionExportTaxFreeFk)
|
|
WHERE enlazadoSage = FALSE
|
|
AND (CodigoTransaccion1 = vTransactionExportFk
|
|
OR CodigoTransaccion2 = vTransactionExportFk
|
|
OR CodigoTransaccion3 = vTransactionExportFk
|
|
OR CodigoTransaccion4 = vTransactionExportFk)
|
|
AND SiglaNacion IN (vCountryCanariasCode COLLATE utf8mb3_unicode_ci, vCountryCeutaMelillaCode COLLATE utf8mb3_unicode_ci);
|
|
|
|
UPDATE movConta mc
|
|
SET CodigoDivisa = 'USD',
|
|
FactorCambio = TRUE,
|
|
ImporteCambio = ABS( CAST( IF( ImporteDivisa <> 0 AND ImporteCambio = 0, ImporteAsiento / ImporteDivisa, ImporteCambio) AS DECIMAL( 10, 2)))
|
|
WHERE enlazadoSage = FALSE
|
|
AND (ImporteCambio <> 0 OR ImporteDivisa <> 0 OR FactorCambio);
|
|
|
|
UPDATE movConta mc
|
|
SET importeDivisa= -importeDivisa
|
|
WHERE enlazadoSage = FALSE
|
|
AND importeDivisa > 0
|
|
AND ImporteAsiento < 0;
|
|
|
|
-- Comprobación que los importes e ivas sean correctos, avisa vía CAU
|
|
SELECT GROUP_CONCAT(Asiento ORDER BY Asiento ASC SEPARATOR ',') INTO vBookEntries
|
|
FROM(SELECT sub.Asiento
|
|
FROM (SELECT mc.Asiento, SUM(mc.ImporteAsiento) amount
|
|
FROM movConta mc
|
|
WHERE mc.enlazadoSage = FALSE
|
|
GROUP BY mc.Asiento)sub
|
|
JOIN (SELECT x.ASIEN, SUM(IFNULL(x.EURODEBE,0) + IFNULL(x.EUROHABER,0)) amount
|
|
FROM vn.XDiario x
|
|
WHERE x.enlazadoSage = FALSE
|
|
GROUP BY ASIEN)sub2 ON sub2.ASIEN = sub.Asiento
|
|
WHERE sub.amount <> sub2.amount
|
|
UNION ALL
|
|
SELECT sub.Asiento
|
|
FROM (SELECT Asiento, SUM(BaseIva1 + BaseIva2 + BaseIva3 + BaseIva4) amountTaxableBase
|
|
FROM movConta
|
|
WHERE TipoFactura <> 'I'
|
|
AND enlazadoSage = FALSE
|
|
GROUP BY Asiento) sub
|
|
JOIN (SELECT ASIEN, SUM(BASEEURO) amountTaxableBase
|
|
FROM (SELECT ASIEN, SUM(BASEEURO) BASEEURO
|
|
FROM vn.XDiario
|
|
WHERE FACTURA
|
|
AND auxiliar <> '*'
|
|
AND enlazadoSage = FALSE
|
|
GROUP BY FACTURA, ASIEN)sub3
|
|
GROUP BY ASIEN) sub2 ON sub2.ASIEN = sub.Asiento
|
|
WHERE sub.amountTaxableBase<>sub2.amountTaxableBase
|
|
AND sub.amountTaxableBase/2 <> sub2.amountTaxableBase) sub;
|
|
|
|
IF vBookEntries IS NOT NULL THEN
|
|
SELECT util.notification_send ("book-entries-imported-incorrectly", CONCAT('{"bookEntries":"', vBookEntries,'"}'), null);
|
|
END IF;
|
|
END$$
|
|
DELIMITER ;
|