190 lines
4.5 KiB
SQL
190 lines
4.5 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceOutBooking`(IN vInvoice INT)
|
|
BEGIN
|
|
/**
|
|
* Asienta una factura emitida
|
|
*
|
|
* @param vInvoice Id invoiceOut
|
|
*/
|
|
DECLARE vBookNumber INT;
|
|
DECLARE vExpenseConcept VARCHAR(50);
|
|
DECLARE vSpainCountryFk INT;
|
|
DECLARE vOldBookNumber INT;
|
|
DECLARE vFiscalYear INT;
|
|
|
|
SELECT id INTO vSpainCountryFk FROM country WHERE `code` = 'ES';
|
|
|
|
SELECT ASIEN
|
|
INTO vOldBookNumber
|
|
FROM XDiario x
|
|
JOIN invoiceOut io ON io.id = vInvoice
|
|
WHERE x.SERIE = io.serial
|
|
AND x.FACTURA = RIGHT(io.ref, LENGTH(io.ref) - 1)
|
|
LIMIT 1;
|
|
|
|
DELETE
|
|
FROM XDiario
|
|
WHERE ASIEN = vOldBookNumber;
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS rs;
|
|
CREATE TEMPORARY TABLE rs
|
|
SELECT c.accountingAccount clientBookingAccount,
|
|
io.amount totalAmount,
|
|
CONCAT('n/fra ', io.ref) simpleConcept,
|
|
CONCAT('n/fra ', io.ref, ' ', c.name) Concept,
|
|
io.serial SERIE,
|
|
io.issued FECHA_EX,
|
|
io.issued FECHA_OP,
|
|
io.issued FECHA,
|
|
1 NFACTICK,
|
|
IF(ic.correctingFk,'D','') TIPOOPE,
|
|
io.siiTrascendencyInvoiceOutFk TIPOCLAVE,
|
|
io.cplusTaxBreakFk TIPOEXENCI,
|
|
io.cplusSubjectOpFk TIPONOSUJE,
|
|
io.siiTypeInvoiceOutFk TIPOFACT,
|
|
ic.cplusRectificationTypeFk TIPORECTIF,
|
|
io.companyFk,
|
|
RIGHT(io.ref, LENGTH(io.ref) - 1) invoiceNum,
|
|
IF(c.countryFk = vSpainCountryFk, vSpainCountryFk, IF(ct.isUeeMember,2,4)) TERIDNIF,
|
|
CONCAT(IF(ct.isUeeMember AND c.countryFk <> vSpainCountryFk,ct.code,''),c.fi) TERNIF,
|
|
c.socialName TERNOM,
|
|
ior.serial SERIE_RT,
|
|
RIGHT(ior.ref, LENGTH(ior.ref) - 1) FACTU_RT,
|
|
ior.issued FECHA_RT,
|
|
IF(ior.id,TRUE,FALSE) RECTIFICA
|
|
FROM invoiceOut io
|
|
JOIN invoiceOutSerial ios ON ios.code = io.serial
|
|
JOIN client c ON c.id = io.clientFk
|
|
JOIN country ct ON ct.id = c.countryFk
|
|
LEFT JOIN invoiceCorrection ic ON ic.correctingFk = io.id
|
|
LEFT JOIN invoiceOut ior ON ior.id = ic.correctedFk
|
|
WHERE io.id = vInvoice;
|
|
|
|
SELECT YEAR(FECHA) INTO vFiscalYear FROM rs LIMIT 1;
|
|
CALL ledger_next(vFiscalYear, FALSE, vBookNumber);
|
|
-- Linea del cliente
|
|
INSERT INTO XDiario(
|
|
ASIEN,
|
|
FECHA,
|
|
SUBCTA,
|
|
EURODEBE,
|
|
CONCEPTO,
|
|
FECHA_EX,
|
|
FECHA_OP,
|
|
empresa_id)
|
|
SELECT vBookNumber,
|
|
rs.FECHA,
|
|
rs.clientBookingAccount,
|
|
rs.totalAmount,
|
|
rs.simpleConcept,
|
|
rs.FECHA_EX,
|
|
rs.FECHA_OP,
|
|
rs.companyFk
|
|
FROM rs;
|
|
|
|
-- Lineas de gasto
|
|
INSERT INTO XDiario(
|
|
ASIEN,
|
|
FECHA,
|
|
SUBCTA,
|
|
CONTRA,
|
|
EUROHABER,
|
|
CONCEPTO,
|
|
FECHA_EX,
|
|
FECHA_OP,
|
|
empresa_id)
|
|
SELECT vBookNumber,
|
|
rs.FECHA,
|
|
ioe.expenseFk,
|
|
rs.clientBookingAccount,
|
|
ioe.amount,
|
|
rs.Concept,
|
|
rs.FECHA_EX,
|
|
rs.FECHA_OP,
|
|
rs.companyFk
|
|
FROM rs
|
|
JOIN invoiceOutExpense ioe
|
|
WHERE ioe.invoiceOutFk = vInvoice;
|
|
|
|
SELECT GROUP_CONCAT(`name` SEPARATOR ',')
|
|
INTO vExpenseConcept
|
|
FROM expense e
|
|
JOIN invoiceOutExpense ioe ON ioe.expenseFk = e.id
|
|
WHERE ioe.invoiceOutFk = vInvoice;
|
|
|
|
-- Lineas de IVA
|
|
INSERT INTO XDiario(
|
|
ASIEN,
|
|
FECHA,
|
|
SUBCTA,
|
|
CONTRA,
|
|
EUROHABER,
|
|
BASEEURO,
|
|
CONCEPTO,
|
|
FACTURA,
|
|
IVA,
|
|
RECEQUIV,
|
|
AUXILIAR,
|
|
SERIE,
|
|
SERIE_RT,
|
|
FACTU_RT,
|
|
RECTIFICA,
|
|
FECHA_RT,
|
|
FECHA_OP,
|
|
FECHA_EX,
|
|
TIPOOPE,
|
|
NFACTICK,
|
|
TERIDNIF,
|
|
TERNIF,
|
|
TERNOM,
|
|
L340,
|
|
TIPOCLAVE,
|
|
TIPOEXENCI,
|
|
TIPONOSUJE,
|
|
TIPOFACT,
|
|
TIPORECTIF,
|
|
empresa_id)
|
|
SELECT vBookNumber ASIEN,
|
|
rs.FECHA,
|
|
iot.pgcFk SUBCTA,
|
|
rs.clientBookingAccount CONTRA,
|
|
iot.vat EUROHABER,
|
|
iot.taxableBase BASEEURO,
|
|
CONCAT(vExpenseConcept,' : ',rs.Concept) CONCEPTO,
|
|
rs.invoiceNum FACTURA,
|
|
IF(pe2.equFk,0,pgc.rate) IVA,
|
|
IF(pe2.equFk,0,pgce.rate) RECEQUIV,
|
|
IF(pgc.mod347,'','*') AUXILIAR,
|
|
rs.SERIE,
|
|
rs.SERIE_RT,
|
|
rs.FACTU_RT,
|
|
rs.RECTIFICA,
|
|
rs.FECHA_RT,
|
|
rs.FECHA_OP,
|
|
rs.FECHA_EX,
|
|
rs.TIPOOPE,
|
|
rs.NFACTICK,
|
|
rs.TERIDNIF,
|
|
rs.TERNIF,
|
|
rs.TERNOM,
|
|
pgc.mod340 L340,
|
|
pgc.siiTrascendencyInvoiceOutFk TIPOCLAVE,
|
|
pgc.cplusTaxBreakFk TIPOEXENCI,
|
|
rs.TIPONOSUJE,
|
|
rs.TIPOFACT,
|
|
rs.TIPORECTIF,
|
|
rs.companyFk
|
|
FROM rs
|
|
JOIN invoiceOutTax iot
|
|
JOIN pgc ON pgc.code = iot.pgcFk
|
|
LEFT JOIN pgcEqu pe ON pe.vatFk = iot.pgcFk -- --------------- Comprueba si la linea es de iva con rec.equiv. asociado
|
|
LEFT JOIN pgc pgce ON pgce.code = pe.equFk
|
|
LEFT JOIN pgcEqu pe2 ON pe2.equFk = iot.pgcFk -- --------------- Comprueba si la linea es de rec.equiv.
|
|
WHERE iot.invoiceOutFk = vInvoice;
|
|
|
|
UPDATE invoiceOut
|
|
SET booked = util.VN_CURDATE()
|
|
WHERE id = vInvoice;
|
|
END$$
|
|
DELIMITER ;
|