
-- ===== CodTarAvTa =====
IF NOT EXISTS(
	SELECT 1 
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE TABLE_NAME = 'Trn_TraEspFacReservas'
		AND COLUMN_NAME = 'CodTarAvTa'
)
BEGIN
	ALTER TABLE Trn_TraEspFacReservas
	ADD CodTarAvTa VARCHAR(4) NULL
END
GO

-- ===== TarifaAvTa =====
IF NOT EXISTS(
	SELECT 1 
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE TABLE_NAME = 'Trn_TraEspFacReservas'
		AND COLUMN_NAME = 'TarifaAvTa'
)
BEGIN
	ALTER TABLE Trn_TraEspFacReservas
	ADD TarifaAvTa DECIMAL(14, 4) NOT NULL DEFAULT(0.0000)
END
GO

-- ===== VrAvTa =====
IF NOT EXISTS(
	SELECT 1 
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE TABLE_NAME = 'Trn_TraEspFacReservas'
		AND COLUMN_NAME = 'VrAvTa'
)
BEGIN
	ALTER TABLE Trn_TraEspFacReservas
	ADD VrAvTa MONEY NOT NULL DEFAULT(0.00)
END
GO

-- ===== CodTarBom =====
IF NOT EXISTS(
	SELECT 1 
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE TABLE_NAME = 'Trn_TraEspFacReservas'
		AND COLUMN_NAME = 'CodTarBom'
)
BEGIN
	ALTER TABLE Trn_TraEspFacReservas
	ADD CodTarBom VARCHAR(4) NULL
END
GO

-- ===== TarifaBom =====
IF NOT EXISTS(
	SELECT 1 
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE TABLE_NAME = 'Trn_TraEspFacReservas'
		AND COLUMN_NAME = 'TarifaBom'
)
BEGIN
	ALTER TABLE Trn_TraEspFacReservas
	ADD TarifaBom DECIMAL(14, 4) NOT NULL DEFAULT(0.0000)
END
GO

-- ===== VrBom =====
IF NOT EXISTS(
	SELECT 1 
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE TABLE_NAME = 'Trn_TraEspFacReservas'
		AND COLUMN_NAME = 'VrBom'
)
BEGIN
	ALTER TABLE Trn_TraEspFacReservas
	ADD VrBom MONEY NOT NULL DEFAULT(0.00)
END
GO

IF EXISTS (
    SELECT 1 
    FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'paWcfSeInsTrn_Facturas') 
    AND type = N'P'
)
BEGIN
	DROP PROCEDURE paWcfSeInsTrn_Facturas
END
GO

IF EXISTS (
    SELECT 1 
    FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'paWcfSeInsMsvTrn_Facturas') 
    AND type = N'P'
)
BEGIN
	DROP PROCEDURE paWcfSeInsMsvTrn_Facturas
END
GO

IF EXISTS (
    SELECT 1 
    FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'paWcfSeInsTrn_DevFcr') 
    AND type = N'P'
)
BEGIN
	DROP PROCEDURE paWcfSeInsTrn_DevFcr
END

IF EXISTS (
    SELECT 1 
    FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'paWcfSeInsMsvTrn_DevFcr') 
    AND type = N'P'
)
BEGIN
	DROP PROCEDURE paWcfSeInsMsvTrn_DevFcr
END

IF EXISTS (
    SELECT 1 
    FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'paWcfSeInsPreFacturas') 
    AND type = N'P'
)
BEGIN
	DROP PROCEDURE paWcfSeInsPreFacturas
END

DROP TYPE [dbo].[dataTypeTrn_TraEspFacReservas]
GO

CREATE TYPE [dbo].[dataTypeTrn_TraEspFacReservas] AS TABLE(
	[TipDoc] [varchar](3) NULL,
	[Factura] [int] NULL,
	[IdCia] [char](2) NULL,
	[Item] [int] NULL,
	[TipoReg] [int] NULL,
	[FechaFact] [smalldatetime] NULL,
	[TipRes] [varchar](3) NULL,
	[Reserva] [int] NULL,
	[IdCiaRes] [char](2) NULL,
	[ItemRes] [int] NULL,
	[FecReserva] [smalldatetime] NULL,
	[Descripcion] [varchar](250) NULL,
	[Cantidad] [decimal](14, 4) NULL,
	[VrServicio] [money] NULL,
	[VrUnitario] [money] NULL,
	[VrCosto] [money] NULL,
	[TarifaIva] [decimal](14, 4) NULL,
	[VrImpuesto] [money] NULL,
	[TarifaDct] [decimal](14, 4) NULL,
	[VrDescuento] [money] NULL,
	[DocCliente] [varchar](30) NULL,
	[Referencia1] [varchar](50) NULL,
	[Referencia2] [varchar](50) NULL,
	[Referencia3] [varchar](50) NULL,
	[CdConcepto] [varchar](4) NULL,
	[CdCCosto] [varchar](16) NULL,
	[CdSubCos] [varchar](16) NULL,
	[NitTercero] [varchar](16) NULL,
	[CdAgencia] [varchar](16) NULL,
	[pVehiculo] [varchar](10) NULL,
	[TipoAfiVehic] [varchar](10) NULL,
	[IdOrigen] [varchar](8) NULL,
	[IdDestino] [varchar](8) NULL,
	[Anulado] [int] NULL,
	[TipDocRef] [varchar](3) NULL,
	[NumDocRef] [int] NULL,
	[IdCiaRef] [char](2) NULL,
	[FecDocRef] [smalldatetime] NULL,
	[CodTarDct] [varchar](4) NULL,
	[CodTarRet] [varchar](4) NULL,
	[CodTarIca] [varchar](4) NULL,
	[TarifaRet] [decimal](14, 4) NULL,
	[VrRetencion] [money] NULL,
	[TarifaIca] [decimal](14, 4) NULL,
	[VrReteIca] [money] NULL,
	[EstadoItem] [varchar](20) NULL,
	[CodTarAvTa] [VARCHAR](4) NULL,
	[TarifaAvTa] [DECIMAL](14, 4) NULL DEFAULT(0.0000),
	[VrAvTa] [MONEY] NULL DEFAULT(0.00),
	[CodTarBom] [VARCHAR](4) NULL,
	[TarifaBom] [DECIMAL](14, 4) NULL DEFAULT(0.0000),
	[VrBom] [MONEY] NULL DEFAULT(0.00)
)
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[paWcfSeInsTrn_Facturas]
	@Trn_Facturas [dbo].[dataTypeTrn_Facturas] READONLY,
	@Trn_TraEspFacReservas [dbo].[dataTypeTrn_TraEspFacReservas] READONLY,
	@Trn_TraEspFacResVehiculos [dbo].[dataTypeTrn_TraEspFacResVehiculos] READONLY,
	@Trn_DocMemo [dbo].[dataTypeTrn_DocMemo] READONLY,
	@Trn_TraEspAuxFactura [dbo].[dataTypeTrn_TraEspAuxFactura] READONLY,
	@Trn_RecAfavor [dbo].[dataTypeTrn_RecAfavor] READONLY,
	@Trn_VencAbonos [dbo].[dataTypeTrn_VencAbonos] READONLY,
	@Trn_Vencimientos [dbo].[dataTypeTrn_Vencimientos] READONLY,
	@Trn_DetCuentas [dbo].[dataTypeTrn_DetCuentas] READONLY,
	@Trn_Comprobantes [dbo].[dataTypeTrn_Comprobantes] READONLY,
	@Trn_ComDetalle [dbo].[dataTypeTrn_ComDetalle] READONLY,
	@Trn_NiifComp [dbo].[dataTypeTrn_NiifComp] READONLY,
	@Trn_NiifDetalle [dbo].[dataTypeNiifDetalle] READONLY,
	@operacion [varchar](1)
WITH EXECUTE AS CALLER
AS
DECLARE @Comprobante INT = 0 --Esta variable guarda el número consecutivo del comprobante
DECLARE @TipComp VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante
DECLARE @IdCiaComp VARCHAR(4) = '00' --Esta variable guarda la compañia del comprobante

DECLARE @CompNiif INT = 0 --Esta variable guarda el número consecutivo del comprobante Niif
DECLARE @TipCompNiif VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante Niif
DECLARE @IdCiaCompNiif VARCHAR(4) = '00'--Esta variable guarda la compañia del comprobante Niif

DECLARE @CompFis INT = 0 --Esta variable guarda el número consecutivo de comprobante Fiscal
DECLARE @TipCompFis VARCHAR(3)  = '0' --Esta variable guarda el tipo de comprobante Fiscal
DECLARE @IdCiaCompFis VARCHAR(4) = '00' --Esta variable guarda la compañia del comprobante Fiscal

DECLARE @TipDoc VARCHAR(3) --En esta variable se guarda el consecutivo del documento aprobación
DECLARE @CodigoPre VARCHAR(3)
DECLARE @Cia VARCHAR(2) --En esta variable se guarda el consecutivo del documento aprobación
DECLARE @Numero INT --En esta variable se guarda el consecutivo del documento aprobación
declare @FechaFac smalldatetime
	BEGIN TRAN
		BEGIN TRY		 
			
			IF(@operacion = 'i')
			BEGIN
				SELECT TOP 1 @TipDoc = TipDoc,@CodigoPre = CodigoPreFact, @Cia = IdCia, @IdCiaComp = IdCia, @IdCiaCompNiif = IdCia, @IdCiaCompFis = IdCia, @FechaFac = Fecha FROM @Trn_Facturas
				
				IF(@CodigoPre is not null or @CodigoPre <> '')
				 select @Numero = (SELECT TOP 1 Factura FROM @Trn_Facturas)
				ELSE
				BEGIN
					SELECT @Numero = Numero + 1  FROM TiposDocCons where IdDoc = @TipDoc AND IdCia = @Cia

					IF(@Numero > 0)
						UPDATE TiposDocCons SET Numero = @Numero WHERE IdDoc = @TipDoc AND IdCia = @Cia
					ELSE
					BEGIN
						SELECT @Numero = 1
						INSERT INTO TiposDocCons VALUES (@TipDoc,@Cia,0,0,0,0,NULL,'',@Numero,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
					END
				END

				IF(EXISTS(SELECT * FROM @Trn_Comprobantes))
				BEGIN
					SELECT TOP 1 @TipComp = TipCom FROM @Trn_Comprobantes
					SELECT @Comprobante = Numero + 1  FROM TiposComCons where IdCom  = @TipComp AND IdCia = @IdCiaComp
					--UPDATE TiposComCons SET Numero = @Comprobante WHERE IdCom = @TipComp AND IdCia = @IdCiaComp
					IF(@Comprobante <> '')
						UPDATE TiposComCons SET Numero = @Comprobante WHERE IdCom = @TipComp and IdCia = @IdCiaComp
					ELSE
					BEGIN
						SELECT @Comprobante = 1
						INSERT INTO TiposComCons VALUES (@TipComp,@IdCiaComp,0,0,@Comprobante,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
					END
				END

				IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'NIIF'))
				BEGIN
					SELECT TOP 1 @TipCompNiif = TipCom FROM @Trn_NiifComp WHERE TipoNiif = 'NIIF'
					SELECT @CompNiif = Numero + 1  FROM TiposComCons where IdCom  = @TipCompNiif AND IdCia = @IdCiaCompNiif
					--UPDATE TiposComCons SET Numero = @CompNiif WHERE IdCom = @TipCompNiif AND IdCia = @IdCiaCompNiif
					IF(@CompNiif <> '')
						UPDATE TiposComCons SET Numero = @CompNiif WHERE IdCom = @TipCompNiif and IdCia = @IdCiaCompNiif
					ELSE
					BEGIN
						SELECT @CompNiif = 1
						INSERT INTO TiposComCons VALUES (@TipCompNiif,@IdCiaCompNiif,0,0,@CompNiif,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
					END
				END

				IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'FISCAL'))
				BEGIN
					SELECT TOP 1 @TipCompFis = TipCom FROM @Trn_NiifComp WHERE TipoNiif = 'FISCAL'
					SELECT @CompFis = Numero + 1  FROM TiposComCons where IdCom  = @TipCompFis AND IdCia = @IdCiaCompFis
					--UPDATE TiposComCons SET Numero = @CompFis WHERE IdCom = @TipCompFis AND IdCia = @IdCiaCompFis
					IF(@CompFis <> '')
						UPDATE TiposComCons SET Numero = @CompFis WHERE IdCom = @TipCompFis and IdCia = @IdCiaCompFis
					ELSE
					BEGIN
						SELECT @CompFis = 1
						INSERT INTO TiposComCons VALUES (@TipCompFis,@IdCiaCompFis,0,0,@CompFis,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
					END
				END
			END

			IF(@operacion = 'i')
			BEGIN
				IF(EXISTS(SELECT * FROM @Trn_Facturas))
				BEGIN
					INSERT INTO Trn_Facturas(
					TipDoc,Factura,IdCia,Fecha,IdConcepto,IdCliente,IdAgencia,FechaVence,VrSubTotal,VrDescuento,VrImpuesto,VrRetencion,VrReteICA,
					VrReteIVA,VrFletes,VrOtros,VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal,VrFaltantes,VrAnticipos,VrNeto,VrAplicado,Cantidad,
					CantPuntos,PuntosAcum,BaseImp,BaseRet,BaseIca,BaseRiv,TarifaIva,TarifaRet,TarifaIca,TarifaRiv,CodTarIva,CodTarRet,CodTarIca,
					CodTarRiv,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom,DirEnvio,IdLocEnv,DiasEntraga,NitContac,NomContac,TelContac,emlContac,
					CargoContac,IdForma,DetallePago,MulPlazos,IdPlazo,CdMney,NitEmpTrans,EmpTrans,pVehiculo,CdConductor,CdRuta,TipPed,Pedido,IdCiaPed,
					TipRem,Remision,IdCiaRem,TipCot,Cotizacion,IdCiaCot,FecPedido,AutzaMora,AutzaCupo,Modalidad,KmtVehic,ZonaFrontera,PesoTotal,
					UnidTotal,VolTotal,CantFalt,VrCostoRem,VrCostoAfi,CodAutoRet,OrigenAdd,TipCom,Comprobante,IdCiaCom,Anulado,NumDev,FecDev,Observacion,
					IdEstado,TimeSys,FecUpdate,IdCiaCrea,IdUsuario,VrImpCons,VrReteCREE,TarifaRtc,CodTarRtc,Parqueadero,FecCuotaParq,BaseIvaObsq,VrIvaObsequio,
					VrImpCarbono,TipoFE,FechaFE,BaseIvaIgp,VrIvaIngProd,CodTarArf,TarifaArf,VrAutRetFte,CodTarAri,TarifaAri,VrAutRetIca
					)
					SELECT 
					@TipDoc,@Numero,@Cia,Fecha,IdConcepto,IdCliente,IdAgencia,FechaVence,VrSubTotal,VrDescuento,VrImpuesto,VrRetencion,VrReteICA,
					VrReteIVA,VrFletes,VrOtros,VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal,VrFaltantes,VrAnticipos,VrNeto,VrAplicado,Cantidad,
					CantPuntos,PuntosAcum,BaseImp,BaseRet,BaseIca,BaseRiv,TarifaIva,TarifaRet,TarifaIca,TarifaRiv,CodTarIva,CodTarRet,CodTarIca,
					CodTarRiv,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom,DirEnvio,IdLocEnv,DiasEntraga,NitContac,NomContac,TelContac,emlContac,
					CargoContac,IdForma,DetallePago,MulPlazos,IdPlazo,CdMney,NitEmpTrans,EmpTrans,pVehiculo,CdConductor,CdRuta,TipPed,Pedido,IdCiaPed,
					TipRem,Remision,IdCiaRem,TipCot,Cotizacion,IdCiaCot,FecPedido,AutzaMora,AutzaCupo,Modalidad,KmtVehic,ZonaFrontera,PesoTotal,
					UnidTotal,VolTotal,CantFalt,VrCostoRem,VrCostoAfi,CodAutoRet,OrigenAdd,@TipComp,@Comprobante,@IdCiaComp,Anulado,NumDev,FecDev,Observacion,
					IdEstado,TimeSys,FecUpdate,IdCiaCrea,IdUsuario,VrImpCons,VrReteCREE,TarifaRtc,CodTarRtc,Parqueadero,FecCuotaParq,BaseIvaObsq,VrIvaObsequio,
					VrImpCarbono,TipoFE,FechaFE,BaseIvaIgp,VrIvaIngProd,CodTarArf,TarifaArf,VrAutRetFte,CodTarAri,TarifaAri,VrAutRetIca
					FROM @Trn_Facturas
				END 

				IF(EXISTS(SELECT * FROM @Trn_TraEspFacReservas))
				BEGIN
					INSERT INTO Trn_TraEspFacReservas(
						TipDoc, Factura, IdCia, Item,
						TipoReg, FechaFact, TipRes, Reserva,
						IdCiaRes, ItemRes, FecReserva, Descripcion,
						Cantidad, VrServicio, VrUnitario, VrCosto,
						TarifaIva, VrImpuesto, TarifaDct, VrDescuento, 
						DocCliente, Referencia1, Referencia2, Referencia3,
						CdConcepto, CdCCosto, CdSubCos, NitTercero, 
						CdAgencia, pVehiculo, TipoAfiVehic, IdOrigen, 
						IdDestino, Anulado, TipDocRef, NumDocRef, 
						IdCiaRef, FecDocRef, CodTarDct, CodTarRet, 
						CodTarIca, TarifaRet,VrRetencion, TarifaIca, 
						VrReteIca, EstadoItem, CodTarAvTa,
						TarifaAvTa, VrAvTa, CodTarBom,
						TarifaBom, VrBom
					)
					SELECT 
						@TipDoc, @Numero, @Cia, Item,
						TipoReg, FechaFact, TipRes, Reserva,
						IdCiaRes, ItemRes, FecReserva, Descripcion,
						Cantidad, VrServicio, VrUnitario, VrCosto,
						TarifaIva, VrImpuesto, TarifaDct, VrDescuento, 
						DocCliente, Referencia1, Referencia2, Referencia3,
						CdConcepto, CdCCosto, CdSubCos, NitTercero,
						CdAgencia, pVehiculo, TipoAfiVehic, IdOrigen,
						IdDestino, Anulado, TipDocRef, NumDocRef,
						IdCiaRef, FecDocRef, CodTarDct, CodTarRet,
						CodTarIca, TarifaRet, VrRetencion, TarifaIca,
						VrReteIca, EstadoItem, CodTarAvTa,
						TarifaAvTa, VrAvTa, CodTarBom,
						TarifaBom, VrBom
					FROM 
						@Trn_TraEspFacReservas
				END

				IF(EXISTS(SELECT * FROM @Trn_TraEspFacResVehiculos))
				BEGIN
					INSERT INTO Trn_TraEspFacResVehiculos(
					TipDoc,Factura,IdCIa,Item,TipRes,Reserva,IdCIaRes,ItemRes,IdVehiculo,TipoAfil,VrRecorrido
					)
					SELECT
					@TipDoc,@Numero,@Cia,Item,TipRes,Reserva,IdCIaRes,ItemRes,IdVehiculo,TipoAfil,VrRecorrido
					FROM @Trn_TraEspFacResVehiculos
				END

				IF(EXISTS(SELECT * FROM @Trn_Vencimientos))
				BEGIN
					INSERT INTO Trn_Vencimientos(
					TipDoc,Factura,IdCia,Item,Fecha,FechaVence,VrFactura,VrAbonado,IdCliente,IdAgencia,IdVend,Comision,TarifDcto,
					TipoDcto,TipoBase,FecLmtDcto,IdConcepto,Referencia,Detalle,TipRef,DocRef,IdCiaRef,FecUltPago,NumNota,IdCiaNot,
					TarifInt,FecLiqMora,FecPlazoCal
					)
					SELECT 
					@TipDoc,@Numero,@Cia,Item,Fecha,FechaVence,VrFactura,VrAbonado,IdCliente,IdAgencia,IdVend,Comision,TarifDcto,
					TipoDcto,TipoBase,FecLmtDcto,IdConcepto,Referencia,Detalle,TipRef,DocRef,IdCiaRef,FecUltPago,NumNota,IdCiaNot,
					TarifInt,FecLiqMora,FecPlazoCal
					FROM @Trn_Vencimientos
				END

				IF(EXISTS(SELECT * FROM @Trn_DocMemo))
					BEGIN
					INSERT INTO Trn_DocMemo(
					TipDoc,Documento,IdCia,Comentarios,Nota1,Nota2,Nota3,CantImp,ArchivoImg
					)
					SELECT 
					@TipDoc,@Numero,@Cia,Comentarios,Nota1,Nota2,Nota3,CantImp,ArchivoImg
					FROM @Trn_DocMemo
				END 

				IF(EXISTS(SELECT * FROM @Trn_TraEspAuxFactura))
				BEGIN
					INSERT INTO Trn_TraEspAuxFactura(
					TipFac,Factura,IdCiaFac,Resolucion,Rango,FechaResl,Prefijo,TipDocPf,PreFactura,IdCiaPf,CodigoPreFact
					)
					SELECT 
					@TipDoc,@Numero,@Cia,Resolucion,Rango,FechaResl,Prefijo,TipDocPf,PreFactura,IdCiaPf,CodigoPreFact
					FROM @Trn_TraEspAuxFactura
				END 

				IF(EXISTS(SELECT * FROM @Trn_RecAfavor))
				BEGIN
					update Trn_RecAfavor
					set VrAbono = t1.VrAbono + t2.VrAbono
					from Trn_RecAfavor t1, @Trn_RecAfavor t2
					where t1.TipDoc = t2.TipDoc and t1.Recibo = t2.Recibo and t1.IdCia = t2.IdCia and t1.IdCliente = t2.IdCliente and t1.IdAgencia = t2.IdAgencia and t1.IdVend = t2.IdVend
				END 

				IF(EXISTS(SELECT * FROM @Trn_VencAbonos))
				BEGIN
					declare @tiprec varchar(3)
					declare @recibo int
					declare @idciarec varchar(2)
					declare @item int 
					SELECT TOP 1 @tiprec = TipRec, @idciarec = IdCia, @recibo = Recibo FROM @Trn_VencAbonos
					select @item =  isnull(MAX(Item),0) from Trn_VencAbonos where TipRec = @tiprec and Recibo = @recibo and IdCia = @idciarec

					INSERT INTO Trn_VencAbonos(
					TipRec,Recibo,IdCia,Item,Fecha,TipDoc,Factura,IdCiaFac,ItemFac,VrAbono,VrDescto,
					VrBaseCms,IdCliente,IdAgencia,IdVend,Comision,Detalle,FecPago,TipoAplica,TimeSys
					)
					SELECT 
					TipRec,Recibo,IdCia,(@item + ROW_NUMBER() OVER(ORDER BY Item ASC)),Fecha,@TipDoc,@Numero,@Cia,ItemFac,VrAbono,VrDescto,
					VrBaseCms,IdCliente,IdAgencia,IdVend,Comision,Detalle,FecPago,TipoAplica,TimeSys
					FROM @Trn_VencAbonos
				END 

				IF(EXISTS(SELECT * FROM @Trn_DetCuentas))
				BEGIN
					INSERT INTO Trn_DetCuentas(
					TipDoc,Documento,IdCia,Concepto,Item,IdCuenta,Valor,Detalle,IdTercero,CodAgncia,CdCCosto,CdSubCos,pVehiculo,
					VrBase,TipFac,Factura,IdCiaFac,ItemFac,FecVence,Cheque,CiuOrigen,Referencia,VrTarifa,TipoTarif,CodConc,CodTarif 
					)
					SELECT 
					@TipDoc,@Numero,@Cia,Concepto,Item,IdCuenta,Valor,Detalle,IdTercero,CodAgncia,CdCCosto,CdSubCos,pVehiculo,
					VrBase,TipFac,Factura,IdCiaFac,ItemFac,FecVence,Cheque,CiuOrigen,Referencia,VrTarifa,TipoTarif,CodConc,CodTarif
					FROM @Trn_DetCuentas
				END

				IF(EXISTS(SELECT * FROM @Trn_Comprobantes))
				BEGIN
					INSERT INTO Trn_Comprobantes(
					TipCom, Comprobante, IdCia, Fecha, IdTercero, VrTotal, IdCta, EnEfectivo,
					NumCheque, FecCheque, TipDoc, Documento, IdCiaDoc, Anulado, NumDev, FecDev,
					TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1,
					VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion, IdEstado,
					Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdSustento, Tipo_Pago, Establec,
					PEmision, Autorizac, FechaAut, NiifTipo, NiifNumero, FisTipo, FisNumero, DocSoporte,
					CodRes, DescServicio
					)
					SELECT 
					@TipComp, @Comprobante, @IdCiaComp, Fecha, IdTercero, VrTotal, IdCta, EnEfectivo,
					NumCheque, FecCheque, @TipDoc, @Numero, @Cia, Anulado, NumDev, FecDev,
					TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1,
					VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion, IdEstado,
					Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdSustento, Tipo_Pago, Establec,
					PEmision, Autorizac, FechaAut, @TipCompNiif, @CompNiif, @TipCompFis, @CompFis, DocSoporte,
					CodRes, DescServicio
					FROM @Trn_Comprobantes
				END

				IF(EXISTS(SELECT * FROM @Trn_ComDetalle))
				BEGIN
					--FUNCION PARA AGREGAR EL NIT APORPIADO AL IDVEHICULO
					INSERT INTO Trn_ComDetalle (
						TipCom, Comprobante, IdCia, Item, 
						Fecha, IdCuenta, Detalle, VrDebito, VrCredito, 
						IdTercero, 
						IdVehiculo, 
						IdCCosto, IdSubCos, VrBase, TarifaBase, TipDoc, 
						Documento, IdCiaDoc, CodConce, NitDoc, 
						TipFac, Factura, IdCiaFac, ItemFac, 
						FecVence, CodCta, NumCheque, Integrado, 
						TipoAplica, Consolida, CodCargo, NitOtros, 
						CodSubgpo, CiuOrigen, CodAgncia, VehPropio, 
						Referncia, TipDocRef, DocRef, IdCiaRef, 
						TimeSys, FecUpdate, IdCiaCrea, IdUsuario, 
						CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, 
						Num_Autoriza, FechAutoriza, CdCuentaNiif
					)
					SELECT 
						@TipComp, @Comprobante, @IdCiaComp, Item, 
						Fecha, 
						COALESCE(
							( -- Retencion en detalle, buscar tarifa
								SELECT DISTINCT T.IdCuenta
								FROM @Trn_TraEspFacReservas AS O
								LEFT JOIN TarifCuentas T ON T.IdTarifa = (
									CASE C.Referncia
										WHEN 'RETENCION EN LA FUENTE' THEN O.CodTarRet
										WHEN 'RETENCION ICA' THEN O.CodTarIca
									END)
									AND T.TipDoc = 'FCE'
								WHERE O.Reserva = C.DocRef
							),
							( -- Retencion en total, buscar tarifa
								SELECT T.IdCuenta
								FROM @Trn_Facturas AS TF
								LEFT JOIN TarifCuentas T ON T.IdTarifa = (
									CASE C.Referncia
										WHEN 'RETENCION EN LA FUENTE' THEN TF.CodTarRet
										WHEN 'RETENCION ICA' THEN TF.CodTarIca
									END)
									AND T.TipDoc = 'FCE'
							),
							C.IdCuenta -- Cuenta concepto.
						) AS IdCuenta,  
						Detalle, VrDebito, VrCredito,
						--IdTercero, IdVehiculo, 
						CASE 
							WHEN IdVehiculo = '0' THEN IdTercero
							ELSE isnull((SELECT F.NitTercero FROM @Trn_TraEspFacReservas F WHERE F.pVehiculo = C.IdVehiculo AND F.TipDocRef = 'RES'), IdTercero)
						END,
						C.IdVehiculo, IdCCosto, IdSubCos, VrBase, 
						TarifaBase, @TipDoc, @Numero, @Cia, 
						CodConce, NitDoc, TipFac, Factura, 
						IdCiaFac, ItemFac, FecVence, CodCta, 
						NumCheque, Integrado, TipoAplica, Consolida, 
						CodCargo, NitOtros, CodSubgpo, CiuOrigen, 
						CodAgncia, VehPropio, Referncia, TipDocRef, 
						DocRef, IdCiaRef, TimeSys, FecUpdate, 
						IdCiaCrea, IdUsuario, CdConcTrib, CdTarifTrib, 
						NumEstablec, PtoEmision, Num_Autoriza, FechAutoriza, 
						CdCuentaNiif
					FROM 
						@Trn_ComDetalle C
				END

				IF(EXISTS(SELECT * FROM @Trn_NiifComp))
				BEGIN
					INSERT INTO Trn_NiifComp(
					TipCom, Comprobante, IdCia, Fecha, IdTercero, VrTotal, IdCta,
					EnEfectivo, NumCheque, FecCheque, TipDoc, Documento, IdCiaDoc, Anulado, NumDev,
					FecDev, TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario,
					VrDivisa1, VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion,
					IdEstado, Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, TipoNiif, CdSustento,
					Tipo_Pago, Establec, PEmision, Autorizac,FechaAut,
					CtbTipo, CtbNumero,
					FisTipo, FisNumero 
					)
					SELECT 
					CASE N.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE @TipCompFis END, 
					CASE N.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE @CompFis END, 
					@Cia, C.Fecha, C.IdTercero, C.VrTotal, C.IdCta,
					C.EnEfectivo, C.NumCheque, C.FecCheque, @TipDoc, @Numero, @Cia, C.Anulado, C.NumDev,
					C.FecDev, C.TipEgr, C.NEgreso, C.pVehiculo, C.VehPropio, C.CedCondtor, C.CodConce, C.Beneficiario,
					C.VrDivisa1, C.VrDivisa2, C.VrDivisa3, C.PermEditar, C.Integrado, C.EsEgreso, C.Anticipo, C.Observacion,
					C.IdEstado, C.Propddes, C.TimeSys, C.FecUpdate, C.IdCiaCrea, C.IdUsuario, N.TipoNiif, C.CdSustento,
					C.Tipo_Pago, C.Establec, C.PEmision, C.Autorizac, C.FechaAut,
					CASE N.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE NULL END, CASE N.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE 0 END,
					CASE N.TipoNiif WHEN 'FISCAL' THEN @TipCompFis ELSE NULL END, CASE N.TipoNiif WHEN 'FISCAL' THEN @CompFis ELSE 0 END
					FROM @Trn_Comprobantes AS C JOIN @Trn_NiifComp AS N ON C.TipCom = N.TipComCont AND C.Comprobante = N.ComprobanteCont
					---------------factura una
				END

				IF(EXISTS(SELECT * FROM @Trn_NiifDetalle))
				BEGIN
				INSERT INTO Trn_NiifDetalle(
				TipCom, Comprobante, IdCia, Item, Fecha, IdCuenta, Detalle,
				VrDebito, VrCredito, IdTercero, IdVehiculo,IdCCosto, IdSubCos,
				VrBase, TarifaBase, TipDoc, Documento, IdCiaDoc, CodConce,
				NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta, 
				NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros,
				CodSubgpo, CiuOrigen, CodAgncia, VehPropio, Referncia, TipDocRef,
				DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, IdUsuario,
				CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza,
				FechAutoriza, CodCuentaCG
				)
				SELECT 
				CASE NC.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE @TipCompFis END, 
				CASE NC.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE @CompFis END, 
				@Cia,
				N.Item, N.Fecha, N.IdCuenta, N.Detalle,
				N.VrDebito, N.VrCredito, N.IdTercero, N.IdVehiculo,N.IdCCosto, N.IdSubCos,
				N.VrBase, N.TarifaBase, @TipDoc,@Numero,@Cia, N.CodConce,
				N.NitDoc, N.TipFac, N.Factura, N.IdCiaFac, N.ItemFac, N.FecVence, N.CodCta, 
				N.NumCheque, N.Integrado, N.TipoAplica, N.Consolida, N.CodCargo, N.NitOtros,
				N.CodSubgpo, N.CiuOrigen, N.CodAgncia, N.VehPropio, N.Referncia, N.TipDocRef,
				N.DocRef, N.IdCiaRef, N.TimeSys, N.FecUpdate, N.IdCiaCrea, N.IdUsuario,
				N.CdConcTrib, N.CdTarifTrib, N.NumEstablec, N.PtoEmision ,N.Num_Autoriza,
				N.FechAutoriza, N.CodCuentaCG
				FROM @Trn_NiifDetalle as N
				JOIN @Trn_NiifComp AS NC ON N.TipCom = NC.TipCom AND N.Comprobante = NC.Comprobante
				END
			END	

			IF(@operacion = 'i')
			BEGIN
			 IF(UPPER((SELECT TipDoc FROM @Trn_Facturas)) <> 'PFE')
			 BEGIN
				  --actualiza los items de las reservas con los que se relacionan en el tipo de datos nuevo de las facturasreservas
				  DECLARE @TipRes VARCHAR(3) 
				  DECLARE @CiaRes VARCHAR(2) 
				  DECLARE @NumRes INT 
				  DECLARE @ItemRes INT 
				  DECLARE @reserva Int = 0 
				  DECLARE @cantres Int = 0 
				  DECLARE @cantresfact Int = 0 

				  DECLARE faccursor CURSOR
				  FOR SELECT TipRes,Reserva,IdCiaRes,ItemRes FROM @Trn_TraEspFacReservas
				  OPEN faccursor
				  FETCH NEXT FROM faccursor INTO @TipRes,@NumRes,@CiaRes,@ItemRes
				  WHILE @@FETCH_STATUS = 0
				  BEGIN

					  UPDATE Trn_TraEspResDetalle
					  SET  TipFac = @TipDoc, Factura = @Numero, IdCiaFac = @Cia, FechaFac = @FechaFac, EstadoItem = 'FACTURADA'
					  FROM Trn_TraEspResDetalle d
					  WHERE d.TipDoc = @TipRes  and d.Reserva = @NumRes and d.IdCia = @CiaRes and d.Item = @ItemRes

					  --se agrega 11/04/2018 para sacar este codigo de la aplicación
					  IF (@NumRes <> @reserva)
					  BEGIN
						SET @reserva = @NumRes
						
						SELECT @cantres = count(*)
						FROM Trn_TraEspResDetalle AS rd
						WHERE rd.TipDoc = @TipRes  and rd.Reserva = @NumRes and rd.IdCia = @CiaRes

						SELECT @cantresfact = count(*)
						FROM Trn_TraEspResDetalle AS rd
						WHERE rd.TipDoc = @TipRes  and rd.Reserva = @NumRes and rd.IdCia = @CiaRes and rd.EstadoItem = 'FACTURADA'
						
						IF (@cantresfact = @cantres)
						BEGIN
							UPDATE Trn_TraEspReservas 
							SET EstadoRes = 'FACTURADA' 
							WHERE TipDoc = @TipRes  and Reserva = @NumRes and IdCia = @CiaRes                     
						END

					  END
					  -------------------------------------------------------------
				  
				  FETCH NEXT FROM faccursor INTO @TipRes,@NumRes,@CiaRes,@ItemRes
			      END
				  CLOSE faccursor
				  DEALLOCATE faccursor

				  --actualiza el cliente
				  UPDATE TercCliente
				  SET  VrSaldo = c.VrSaldo + f.VrNeto
				  FROM TercCliente c, @Trn_Facturas f
				  WHERE c.IdClie = f.IdCliente
			  END
			END

			SELECT @Numero, @Comprobante

			COMMIT TRAN
		END TRY
        BEGIN CATCH
			ROLLBACK TRAN
			DECLARE @ErrorMessage NVARCHAR(4000);
			DECLARE @ErrorSeverity INT;
			DECLARE @ErrorState INT;

			SELECT 
			@ErrorMessage = ERROR_MESSAGE(),
			@ErrorSeverity = ERROR_SEVERITY(),
			@ErrorState = ERROR_STATE();
			RAISERROR(
			@ErrorMessage, -- Message text.
			@ErrorSeverity, -- Severity.
			@ErrorState -- State.
			);
		END CATCH
RETURN 0
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[paWcfSeInsMsvTrn_Facturas]
	@Trn_Facturas [dbo].[dataTypeTrn_Facturas] READONLY,
	@Trn_TraEspFacReservas [dbo].[dataTypeTrn_TraEspFacReservas] READONLY,
	@Trn_TraEspFacResVehiculos [dbo].[dataTypeTrn_TraEspFacResVehiculos] READONLY,
	@Trn_DocMemo [dbo].[dataTypeTrn_DocMemo] READONLY,
	@Trn_TraEspAuxFactura [dbo].[dataTypeTrn_TraEspAuxFactura] READONLY,
	@Trn_RecAfavor [dbo].[dataTypeTrn_RecAfavor] READONLY,
	@Trn_VencAbonos [dbo].[dataTypeTrn_VencAbonos] READONLY,
	@Trn_Vencimientos [dbo].[dataTypeTrn_Vencimientos] READONLY,
	@Trn_DetCuentas [dbo].[dataTypeTrn_DetCuentas] READONLY,
	@Trn_Comprobantes [dbo].[dataTypeTrn_Comprobantes] READONLY,
	@Trn_ComDetalle [dbo].[dataTypeTrn_ComDetalle] READONLY,
	@Trn_NiifComp [dbo].[dataTypeTrn_NiifCompFMsv] READONLY,
	@Trn_NiifDetalle [dbo].[dataTypeNiifDetalle] READONLY,
	@operacion [varchar](1)
WITH EXECUTE AS CALLER
AS
DECLARE @Comprobante INT = 0 --Esta variable guarda el número consecutivo del comprobante
DECLARE @TipComp VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante
DECLARE @IdCiaComp VARCHAR(4) = '00' --Esta variable guarda la compañia del comprobante

DECLARE @CompNiif INT = 0 --Esta variable guarda el número consecutivo del comprobante Niif
DECLARE @TipCompNiif VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante Niif
DECLARE @IdCiaCompNiif CHAR(2) = '00'--Esta variable guarda la compañia del comprobante Niif

DECLARE @CompFis INT = 0 --Esta variable guarda el número consecutivo de comprobante Fiscal
DECLARE @TipCompFis VARCHAR(3)  = '0' --Esta variable guarda el tipo de comprobante Fiscal
DECLARE @IdCiaCompFis CHAR(2) = '00' --Esta variable guarda la compañia del comprobante Fiscal

DECLARE @TipDoc VARCHAR(3) --En esta variable se guarda el consecutivo del documento aprobación
DECLARE @CodigoPre VARCHAR(3)
DECLARE @Cia VARCHAR(2) --En esta variable se guarda el consecutivo del documento aprobación
DECLARE @Numero INT --En esta variable se guarda el consecutivo del documento aprobación
declare @FechaFac smalldatetime
	BEGIN TRAN
		BEGIN TRY	
		
			--CREATE TABLE #LogTraEspFacturas(
			--Numero int NOT NULL DEFAULT ((0)),
			--Fecha smalldatetime NOT NULL,
			--EstadoProc int NOT NULL DEFAULT ((0)),
			--Observacion varchar(250) NULL,
			--TimeSys smalldatetime NOT NULL,
			--IdUsuario varchar(11) NOT NULL,
			--Nombre varchar(50) NOT NULL,
			--Tipo varchar(10) NOT NULL
			--)	
			
			CREATE TABLE #LogTraEspFacReservas(
			NewTipFac varchar(3) NOT NULL,
			NewFactura int NOT NULL,
			NewIdCiaFac char(2) NOT NULL,
			OldTipFac varchar(3) NOT NULL,
			OldFactura int NOT NULL,
			OldIdCiaFac char(2) NOT NULL,
			) 

			declare @NumProc int = 1
			declare @ItemProc int = 1
			declare @TipFac varchar(3)
			declare @Factura INT
			declare @IdCia varchar(2)
			declare @Fecha datetime
			declare @observ varchar(250)
			declare @IdCliente varchar(16)
			declare @VrNeto money

			DECLARE factcursor CURSOR
			FOR SELECT TipDoc,Factura,IdCia,Fecha,IdCliente,VrNeto FROM @Trn_Facturas
			OPEN factcursor
			FETCH NEXT FROM factcursor INTO @TipFac,@Factura,@IdCia,@Fecha,@IdCliente,@VrNeto
			WHILE @@FETCH_STATUS = 0
			BEGIN
				IF(@operacion = 'i')
				BEGIN
					SET @TipDoc = @TipFac
					SET @Cia = @IdCia
					SET @IdCiaComp = @IdCia
					SET @IdCiaCompNiif = @IdCia
					SET @IdCiaCompFis = @IdCia
					SET @FechaFac = @Fecha 
				
					SELECT @Numero = Numero + 1  FROM TiposDocCons where IdDoc = @TipDoc AND IdCia = @Cia

					IF(@Numero > 0)
						UPDATE TiposDocCons SET Numero = @Numero WHERE IdDoc = @TipDoc AND IdCia = @Cia
					ELSE
					BEGIN
						SELECT @Numero = 1
						INSERT INTO TiposDocCons VALUES (@TipDoc,@Cia,0,0,0,0,NULL,'',@Numero,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
					END

					IF(EXISTS(SELECT * FROM @Trn_Comprobantes))
					BEGIN
						SELECT TOP 1 @TipComp = TipCom FROM @Trn_Comprobantes
						SELECT @Comprobante = Numero + 1  FROM TiposComCons where IdCom  = @TipComp AND IdCia = @IdCiaComp
						--UPDATE TiposComCons SET Numero = @Comprobante WHERE IdCom = @TipComp AND IdCia = @IdCiaComp
						IF(@Comprobante <> '')
							UPDATE TiposComCons SET Numero = @Comprobante WHERE IdCom = @TipComp and IdCia = @IdCiaComp
						ELSE
						BEGIN
							SELECT @Comprobante = 1
							INSERT INTO TiposComCons VALUES (@TipComp,@IdCiaComp,0,0,@Comprobante,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
						END
					END

					IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'NIIF' AND Documento = @Factura))
					BEGIN
						SELECT TOP 1 @TipCompNiif = TipCom FROM @Trn_NiifComp WHERE TipoNiif = 'NIIF'
						SELECT @CompNiif = (Numero + 1) FROM TiposComCons where IdCom  = @TipCompNiif AND IdCia = @IdCiaCompNiif
						
						--UPDATE TiposComCons SET Numero = @CompNiif WHERE IdCom = @TipCompNiif AND IdCia = @IdCiaCompNiif
						IF(@CompNiif > 0)
						BEGIN
							--declare @bcpCommand varchar(255), @Result int
							--declare @FileName varchar(255)
							--set @FileName ='D:\hola.txt'
							--set @bcpCommand = 'bcp "Select 1 as a" queryout "' + @FileName + '" -c -t, -T -S '

							--exec @Result = master..xp_cmdshell @bcpCommand, no_output
							UPDATE TiposComCons SET Numero = @CompNiif WHERE IdCom = @TipCompNiif and IdCia = @IdCiaCompNiif
						END
						ELSE
						BEGIN
							SELECT @CompNiif = 1
							INSERT INTO TiposComCons VALUES (@TipCompNiif,@IdCiaCompNiif,0,0,@CompNiif,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
						END
					END
					IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'FISCAL' AND Documento = @Factura))
					BEGIN
						SELECT TOP 1 @TipCompFis = TipCom FROM @Trn_NiifComp WHERE TipoNiif = 'FISCAL'
						SELECT @CompFis = (Numero + 1) FROM TiposComCons where IdCom  = @TipCompFis AND IdCia = @IdCiaCompFis
						--UPDATE TiposComCons SET Numero = @CompFis WHERE IdCom = @TipCompFis AND IdCia = @IdCiaCompFis
						IF(@CompFis > 0)
						BEGIN
							UPDATE TiposComCons SET Numero = @CompFis WHERE IdCom = @TipCompFis and IdCia = @IdCiaCompFis
						END
						ELSE
						BEGIN
							SELECT @CompFis = 1
							INSERT INTO TiposComCons VALUES (@TipCompFis,@IdCiaCompFis,0,0,@CompFis,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
						END
					END
	
					IF(EXISTS(SELECT * FROM @Trn_Facturas))
					BEGIN
						INSERT INTO Trn_Facturas(
						TipDoc, Factura, IdCia, Fecha, IdConcepto, IdCliente, IdAgencia, FechaVence, VrSubTotal, VrDescuento, VrImpuesto, VrRetencion, VrReteICA, VrReteIVA, VrFletes, VrOtros, 
						VrCargos, VrOtrDcto, VrCostos, VrSobretasa, VrImpGlobal, VrFaltantes, VrAnticipos, VrNeto, VrAplicado, Cantidad, CantPuntos, PuntosAcum, BaseImp, BaseRet, BaseIca, 
						BaseRiv, TarifaIva, TarifaRet, TarifaIca, TarifaRiv, CodTarIva, CodTarRet, CodTarIca, CodTarRiv, IdCCosto, IdSubCos, IdVend, TarifaCom, CodTarCom, DirEnvio, IdLocEnv, 
						DiasEntraga, NitContac, NomContac, TelContac, emlContac, CargoContac, IdForma, DetallePago, MulPlazos, IdPlazo, CdMney, NitEmpTrans, EmpTrans, pVehiculo, CdConductor, 
						CdRuta, TipPed, Pedido, IdCiaPed, TipRem, Remision, IdCiaRem, TipCot, Cotizacion, IdCiaCot, FecPedido, AutzaMora, AutzaCupo, Modalidad, KmtVehic, ZonaFrontera, PesoTotal, 
						UnidTotal, VolTotal, CantFalt, VrCostoRem, VrCostoAfi, CodAutoRet, OrigenAdd, TipCom, Comprobante, IdCiaCom, Anulado, NumDev, FecDev, Observacion, IdEstado, TimeSys, 
						FecUpdate, IdCiaCrea, IdUsuario, VrImpCons, VrReteCREE, TarifaRtc, CodTarRtc, Parqueadero, FecCuotaParq, BaseIvaObsq, VrIvaObsequio, VrImpCarbono, TipoFE, FechaFE, 
						BaseIvaIgp,VrIvaIngProd,CodTarArf,TarifaArf,VrAutRetFte,CodTarAri,TarifaAri,VrAutRetIca
						)
						SELECT 
						@TipDoc,@Numero,@Cia,Fecha,IdConcepto,IdCliente,IdAgencia,FechaVence,VrSubTotal,VrDescuento,VrImpuesto,VrRetencion,VrReteICA,VrReteIVA,VrFletes,VrOtros,
						VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal,VrFaltantes,VrAnticipos,VrNeto,VrAplicado,Cantidad,CantPuntos,PuntosAcum,BaseImp,BaseRet,BaseIca,
						BaseRiv,TarifaIva,TarifaRet,TarifaIca,TarifaRiv,CodTarIva,CodTarRet,CodTarIca,CodTarRiv,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom,DirEnvio,IdLocEnv,
						DiasEntraga,NitContac,NomContac,TelContac,emlContac,CargoContac,IdForma,DetallePago,MulPlazos,IdPlazo,CdMney,NitEmpTrans,EmpTrans,pVehiculo,CdConductor,
						CdRuta,TipPed,Pedido,IdCiaPed,TipRem,Remision,IdCiaRem,TipCot,Cotizacion,IdCiaCot,FecPedido,AutzaMora,AutzaCupo,Modalidad,KmtVehic,ZonaFrontera,PesoTotal,
						UnidTotal,VolTotal,CantFalt,VrCostoRem,VrCostoAfi,CodAutoRet,OrigenAdd,@TipComp,@Comprobante,@IdCiaComp,Anulado,NumDev,FecDev,Observacion,IdEstado,TimeSys,
						FecUpdate,IdCiaCrea,IdUsuario,VrImpCons,VrReteCREE,TarifaRtc,CodTarRtc,Parqueadero,FecCuotaParq,BaseIvaObsq,VrIvaObsequio,VrImpCarbono,TipoFE,FechaFE,
						BaseIvaIgp,VrIvaIngProd,CodTarArf,TarifaArf,VrAutRetFte,CodTarAri,TarifaAri,VrAutRetIca
						FROM @Trn_Facturas p WHERE p.TipDoc = @TipFac and p.Factura = @Factura and p.IdCia = @IdCia
					END
					 
					IF(EXISTS(SELECT * FROM @Trn_TraEspFacReservas))
					BEGIN
						INSERT INTO Trn_TraEspFacReservas(
						TipDoc,Factura,IdCia,Item,TipoReg,FechaFact,TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion,Cantidad,VrServicio,VrUnitario,VrCosto,
						TarifaIva,VrImpuesto,TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3,CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,
						pVehiculo,TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef,IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet,VrRetencion,
						TarifaIca,VrReteIca,EstadoItem
						)
						SELECT 
						@TipDoc,@Numero,@Cia,Item,TipoReg,FechaFact,TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion,Cantidad,VrServicio,VrUnitario,VrCosto,
						TarifaIva,VrImpuesto,TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3,CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,
						pVehiculo,TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef,IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet,VrRetencion,
						TarifaIca,VrReteIca,EstadoItem
						FROM @Trn_TraEspFacReservas p WHERE p.TipDoc = @TipFac and p.Factura = @Factura and p.IdCia = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_TraEspFacResVehiculos))
					BEGIN
						INSERT INTO Trn_TraEspFacResVehiculos(
						TipDoc,Factura,IdCIa,Item,TipRes,Reserva,IdCIaRes,ItemRes,IdVehiculo,TipoAfil,VrRecorrido
						)
						SELECT
						@TipDoc,@Numero,@Cia,Item,TipRes,Reserva,IdCIaRes,ItemRes,IdVehiculo,TipoAfil,VrRecorrido
						FROM @Trn_TraEspFacResVehiculos p WHERE p.TipDoc = @TipFac and p.Factura = @Factura and p.IdCia = @IdCia 
					END

					IF(EXISTS(SELECT * FROM @Trn_Vencimientos))
					BEGIN
						INSERT INTO Trn_Vencimientos(
						TipDoc,Factura,IdCia,Item,Fecha,FechaVence,VrFactura,VrAbonado,IdCliente,IdAgencia,IdVend,Comision,TarifDcto,
						TipoDcto,TipoBase,FecLmtDcto,IdConcepto,Referencia,Detalle,TipRef,DocRef,IdCiaRef,FecUltPago,NumNota,IdCiaNot,
						TarifInt,FecLiqMora,FecPlazoCal
						)
						SELECT 
						@TipDoc,@Numero,@Cia,Item,Fecha,FechaVence,VrFactura,VrAbonado,IdCliente,IdAgencia,IdVend,Comision,TarifDcto,
						TipoDcto,TipoBase,FecLmtDcto,IdConcepto,Referencia,Detalle,TipRef,DocRef,IdCiaRef,FecUltPago,NumNota,IdCiaNot,
						TarifInt,FecLiqMora,FecPlazoCal
						FROM @Trn_Vencimientos p WHERE p.TipDoc = @TipFac and p.Factura = @Factura and p.IdCia = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_DocMemo))
					BEGIN
					INSERT INTO Trn_DocMemo(
						TipDoc,Documento,IdCia,Comentarios,Nota1,Nota2,Nota3,CantImp,ArchivoImg
						)
						SELECT 
						@TipDoc,@Numero,@Cia,Comentarios,Nota1,Nota2,Nota3,CantImp,ArchivoImg
						FROM @Trn_DocMemo p WHERE p.TipDoc = @TipFac and p.Documento = @Factura and p.IdCia = @IdCia
					END 

					IF(EXISTS(SELECT * FROM @Trn_TraEspAuxFactura))
					BEGIN
						INSERT INTO Trn_TraEspAuxFactura(
						TipFac,Factura,IdCiaFac,Resolucion,Rango,FechaResl,Prefijo,TipDocPf,PreFactura,IdCiaPf,CodigoPreFact
						)
						SELECT 
						@TipDoc,@Numero,@Cia,Resolucion,Rango,FechaResl,Prefijo,TipDocPf,PreFactura,IdCiaPf,CodigoPreFact
						FROM @Trn_TraEspAuxFactura p WHERE p.TipFac = @TipFac and p.Factura = @Factura and p.IdCiaFac = @IdCia
					END 

					IF(EXISTS(SELECT * FROM @Trn_RecAfavor))
					BEGIN
						update Trn_RecAfavor
						set VrAbono = t1.VrAbono + t2.VrAbono
						from Trn_RecAfavor t1, @Trn_RecAfavor t2
						where t1.TipDoc = t2.TipDoc and t1.Recibo = t2.Recibo and t1.IdCia = t2.IdCia and t1.IdCliente = t2.IdCliente and t1.IdAgencia = t2.IdAgencia and t1.IdVend = t2.IdVend
							--and TipDoc = @TipDoc and t1.Factura = @Factura and t1.IdCia = @IdCia
					END 

					IF(EXISTS(SELECT * FROM @Trn_VencAbonos))
					BEGIN
						declare @tiprec varchar(3)
						declare @recibo int
						declare @idciarec varchar(2)
						declare @item int 
						SELECT TOP 1 @tiprec = TipRec, @idciarec = IdCia, @recibo = Recibo FROM @Trn_VencAbonos WHERE TipDoc = @TipFac and Factura = @Factura and IdCiaFac = @IdCia
						
						if((@tiprec <> null and @tiprec <> '') and @recibo > 0)
						BEGIN
							SELECT @item =  isnull(MAX(Item),0) FROM Trn_VencAbonos WHERE TipRec = @tiprec and Recibo = @recibo and IdCia = @idciarec

							INSERT INTO Trn_VencAbonos(
							TipRec,Recibo,IdCia,Item,Fecha,TipDoc,Factura,IdCiaFac,ItemFac,VrAbono,VrDescto,
							VrBaseCms,IdCliente,IdAgencia,IdVend,Comision,Detalle,FecPago,TipoAplica,TimeSys
							)
							SELECT 
							TipRec,Recibo,IdCia,(@item + ROW_NUMBER() OVER(ORDER BY Item ASC)),Fecha,@TipDoc,@Numero,@Cia,ItemFac,VrAbono,VrDescto,
							VrBaseCms,IdCliente,IdAgencia,IdVend,Comision,Detalle,FecPago,TipoAplica,TimeSys
							FROM @Trn_VencAbonos WHERE TipDoc = @TipFac and Factura = @Factura and IdCiaFac = @IdCia

							IF(EXISTS(SELECT * FROM @Trn_RecAfavor))
							BEGIN
								UPDATE Trn_RecAfavor
								SET VrAbono = t1.VrAbono + t2.VrAbono
								FROM Trn_RecAfavor t1
								JOIN(SELECT ra.TipDoc,ra.Recibo,ra.IdCia,ra.Fecha,ra.VrAFavor,ra.VrOtrosDb,ra.VrAbono,ra.IdCliente,ra.IdAgencia,ra.IdVend FROM @Trn_RecAfavor ra
										JOIN @Trn_VencAbonos va on ra.TipDoc = va.TipRec and ra. Recibo = va.Recibo and ra.IdCia = va.IdCia
										WHERE va.TipDoc = @TipFac and va.Factura = @Factura and va.IdCiaFac = @IdCia) AS t2
								ON t1.TipDoc = t2.TipDoc and t1.Recibo = t2.Recibo and t1.IdCia = t2.IdCia and t1.IdCliente = t2.IdCliente and t1.IdAgencia = t2.IdAgencia and t1.IdVend = t2.IdVend
							END
						END
					END 

					IF(EXISTS(SELECT * FROM @Trn_DetCuentas))
					BEGIN
						INSERT INTO Trn_DetCuentas(
						TipDoc,Documento,IdCia,Concepto,Item,IdCuenta,Valor,Detalle,IdTercero,CodAgncia,CdCCosto,CdSubCos,pVehiculo,
						VrBase,TipFac,Factura,IdCiaFac,ItemFac,FecVence,Cheque,CiuOrigen,Referencia,VrTarifa,TipoTarif,CodConc,CodTarif
						)
						SELECT 
						@TipDoc,@Numero,@Cia,Concepto,Item,IdCuenta,Valor,Detalle,IdTercero,CodAgncia,CdCCosto,CdSubCos,pVehiculo,
						VrBase,TipFac,Factura,IdCiaFac,ItemFac,FecVence,Cheque,CiuOrigen,Referencia,VrTarifa,TipoTarif,CodConc,CodTarif
						FROM @Trn_DetCuentas where TipDoc = @TipFac and Documento = @Factura and IdCia = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_Comprobantes))
					BEGIN
						INSERT INTO Trn_Comprobantes(
						TipCom, Comprobante, IdCia, Fecha, IdTercero, VrTotal, IdCta, EnEfectivo,
						NumCheque, FecCheque, TipDoc, Documento, IdCiaDoc, Anulado, NumDev, FecDev,
						TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1,
						VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion, IdEstado,
						Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdSustento, Tipo_Pago, Establec,
						PEmision, Autorizac, FechaAut, NiifTipo, NiifNumero, FisTipo, FisNumero, DocSoporte,
						CodRes, DescServicio
						)
						SELECT 
						@TipComp, @Comprobante, @IdCiaComp, Fecha, IdTercero, VrTotal, IdCta, EnEfectivo,
						NumCheque, FecCheque, @TipDoc, @Numero, @Cia, Anulado, NumDev, FecDev,
						TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1,
						VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion, IdEstado,
						Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdSustento, Tipo_Pago, Establec,
						PEmision, Autorizac, FechaAut, @TipCompNiif, @CompNiif, @TipCompFis, @CompFis, DocSoporte,
						CodRes, DescServicio
						FROM @Trn_Comprobantes where TipDoc = @TipFac and Documento = @Factura and IdCia = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_ComDetalle))
					BEGIN
						INSERT INTO Trn_ComDetalle(
						TipCom, Comprobante, IdCia, Item, Fecha, IdCuenta, Detalle, VrDebito, VrCredito,
						IdTercero, IdVehiculo, IdCCosto, IdSubCos, VrBase, TarifaBase, TipDoc, Documento,
						IdCiaDoc, CodConce, NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta,
						NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros, CodSubgpo, CiuOrigen, 
						CodAgncia, VehPropio, Referncia, TipDocRef, DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, 
						IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza, FechAutoriza,CdCuentaNiif
						)
						SELECT 
						@TipComp, @Comprobante, @IdCiaComp, Item, Fecha, IdCuenta, Detalle, VrDebito, VrCredito,
						IdTercero, IdVehiculo, IdCCosto, IdSubCos, VrBase, TarifaBase, @TipDoc, @Numero, @Cia,
						CodConce, NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta,
						NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros, CodSubgpo, CiuOrigen, 
						CodAgncia, VehPropio, Referncia, TipDocRef, DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, 
						IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza, FechAutoriza,CdCuentaNiif
						FROM @Trn_ComDetalle where TipDoc = @TipFac and Documento = @Factura and IdCia = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'NIIF' AND Documento = @Factura))
					BEGIN
						INSERT INTO Trn_NiifComp(
						TipCom, Comprobante, IdCia, Fecha, IdTercero, VrTotal, IdCta,
						EnEfectivo, NumCheque, FecCheque, TipDoc, Documento, IdCiaDoc, Anulado, NumDev,
						FecDev, TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario,
						VrDivisa1, VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion,
						IdEstado, Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, TipoNiif, CdSustento,
						Tipo_Pago, Establec, PEmision, Autorizac,FechaAut, CtbTipo, CtbNumero, FisTipo, FisNumero 
						)
						SELECT 
						@TipCompNiif, @CompNiif, @IdCia,C.Fecha, C.IdTercero, C.VrTotal, C.IdCta,
						C.EnEfectivo, C.NumCheque, C.FecCheque, @TipDoc, @Numero, @IdCia, C.Anulado, C.NumDev,
						C.FecDev, C.TipEgr, C.NEgreso, C.pVehiculo, C.VehPropio, C.CedCondtor, C.CodConce, C.Beneficiario,
						C.VrDivisa1, C.VrDivisa2, C.VrDivisa3, C.PermEditar, C.Integrado, C.EsEgreso, C.Anticipo, C.Observacion,
						C.IdEstado, C.Propddes, C.TimeSys, C.FecUpdate, C.IdCiaCrea, C.IdUsuario, N.TipoNiif, C.CdSustento,
						C.Tipo_Pago, C.Establec, C.PEmision, C.Autorizac, C.FechaAut, @TipCompNiif, @CompNiif, NULL, 0
						FROM @Trn_NiifComp  AS N 
						JOIN  @Trn_Comprobantes AS C ON C.TipCom = N.TipComCont AND C.Comprobante = N.ComprobanteCont
						WHERE C.Documento = N.Documento AND N.Documento = @Factura AND N.TipoNiif = 'NIIF'

						IF(EXISTS(SELECT * FROM @Trn_NiifDetalle))
						BEGIN
							INSERT INTO Trn_NiifDetalle(
							TipCom, Comprobante, IdCia, Item, Fecha, IdCuenta, Detalle,
							VrDebito, VrCredito, IdTercero, IdVehiculo,IdCCosto, IdSubCos,
							VrBase, TarifaBase, TipDoc, Documento, IdCiaDoc, CodConce,
							NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta, 
							NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros,
							CodSubgpo, CiuOrigen, CodAgncia, VehPropio, Referncia, TipDocRef,
							DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, IdUsuario,
							CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza,
							FechAutoriza, CodCuentaCG
							)
							SELECT 
							@TipCompNiif, @CompNiif, @IdCia, N.Item, N.Fecha, N.IdCuenta, N.Detalle,
							N.VrDebito, N.VrCredito, N.IdTercero, N.IdVehiculo,N.IdCCosto, N.IdSubCos,
							N.VrBase, N.TarifaBase, @TipDoc,@Numero,@IdCia, N.CodConce,
							N.NitDoc, N.TipFac, N.Factura, N.IdCiaFac, N.ItemFac, N.FecVence, N.CodCta, 
							N.NumCheque, N.Integrado, N.TipoAplica, N.Consolida, N.CodCargo, N.NitOtros,
							N.CodSubgpo, N.CiuOrigen, N.CodAgncia, N.VehPropio, N.Referncia, N.TipDocRef,
							N.DocRef, N.IdCiaRef, N.TimeSys, N.FecUpdate, N.IdCiaCrea, N.IdUsuario,
							N.CdConcTrib, N.CdTarifTrib, N.NumEstablec, N.PtoEmision ,N.Num_Autoriza,
							N.FechAutoriza, N.CodCuentaCG
							FROM @Trn_NiifComp  as NC
							JOIN @Trn_NiifDetalle AS N ON N.Comprobante = NC.ComprobanteCont  AND N.TipCom = @TipCompNiif
							--AND NC.TipoNiif = 'NIIF' 
							where N.Documento = @Factura  AND N.Documento = NC.Documento AND NC.TipoNiif = 'NIIF' 
						END
					END

					IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'FISCAL' AND Documento = @Factura))
					BEGIN
						INSERT INTO Trn_NiifComp(
						TipCom, Comprobante, IdCia, Fecha, IdTercero, VrTotal, IdCta,
						EnEfectivo, NumCheque, FecCheque, TipDoc, Documento, IdCiaDoc, Anulado, NumDev,
						FecDev, TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario,
						VrDivisa1, VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion,
						IdEstado, Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, TipoNiif, CdSustento,
						Tipo_Pago, Establec, PEmision, Autorizac,FechaAut, CtbTipo, CtbNumero, FisTipo, FisNumero 
						)
						SELECT 
						@TipCompFis, @CompFis, @IdCia,C.Fecha, C.IdTercero, C.VrTotal, C.IdCta,
						C.EnEfectivo, C.NumCheque, C.FecCheque, @TipDoc, @Numero, @IdCia, C.Anulado, C.NumDev,
						C.FecDev, C.TipEgr, C.NEgreso, C.pVehiculo, C.VehPropio, C.CedCondtor, C.CodConce, C.Beneficiario,
						C.VrDivisa1, C.VrDivisa2, C.VrDivisa3, C.PermEditar, C.Integrado, C.EsEgreso, C.Anticipo, C.Observacion,
						C.IdEstado, C.Propddes, C.TimeSys, C.FecUpdate, C.IdCiaCrea, C.IdUsuario, N.TipoNiif, C.CdSustento,
						C.Tipo_Pago, C.Establec, C.PEmision, C.Autorizac, C.FechaAut, @TipCompFis, @CompFis, NULL, 0
						FROM @Trn_NiifComp  AS N 
						JOIN  @Trn_Comprobantes AS C ON C.TipCom = N.TipComCont AND C.Comprobante = N.ComprobanteCont
						WHERE C.Documento = N.Documento AND N.Documento = @Factura AND N.TipoNiif = 'FISCAL'

						IF(EXISTS(SELECT * FROM @Trn_NiifDetalle))
						BEGIN
							INSERT INTO Trn_NiifDetalle(
							TipCom, Comprobante, IdCia, Item, Fecha, IdCuenta, Detalle,
							VrDebito, VrCredito, IdTercero, IdVehiculo,IdCCosto, IdSubCos,
							VrBase, TarifaBase, TipDoc, Documento, IdCiaDoc, CodConce,
							NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta, 
							NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros,
							CodSubgpo, CiuOrigen, CodAgncia, VehPropio, Referncia, TipDocRef,
							DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, IdUsuario,
							CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza,
							FechAutoriza, CodCuentaCG
							)
							SELECT 
							@TipCompFis, @CompFis, @IdCia, N.Item, N.Fecha, N.IdCuenta, N.Detalle,
							N.VrDebito, N.VrCredito, N.IdTercero, N.IdVehiculo,N.IdCCosto, N.IdSubCos,
							N.VrBase, N.TarifaBase, @TipDoc,@Numero,@IdCia, N.CodConce,
							N.NitDoc, N.TipFac, N.Factura, N.IdCiaFac, N.ItemFac, N.FecVence, N.CodCta, 
							N.NumCheque, N.Integrado, N.TipoAplica, N.Consolida, N.CodCargo, N.NitOtros,
							N.CodSubgpo, N.CiuOrigen, N.CodAgncia, N.VehPropio, N.Referncia, N.TipDocRef,
							N.DocRef, N.IdCiaRef, N.TimeSys, N.FecUpdate, N.IdCiaCrea, N.IdUsuario,
							N.CdConcTrib, N.CdTarifTrib, N.NumEstablec, N.PtoEmision ,N.Num_Autoriza,
							N.FechAutoriza, N.CodCuentaCG
							FROM @Trn_NiifComp as NC
							JOIN @Trn_NiifDetalle AS N ON N.Comprobante = NC.ComprobanteCont  AND N.TipCom = @TipCompFis
							--AND NC.TipoNiif = 'FISCAL' 
							where N.Documento = @Factura AND N.Documento = NC.Documento AND NC.TipoNiif = 'FISCAL' 
						END
					END
					
					--actualiza los items de las reservas con los que se relacionan en el tipo de datos nuevo de las facturasreservas
					DECLARE @TipRes VARCHAR(3) 
					DECLARE @CiaRes VARCHAR(2) 
					DECLARE @NumRes INT 
					DECLARE @ItemRes INT
					DECLARE @Ref VARCHAR(50) 
					DECLARE @reserva Int = 0 
					DECLARE @cantres Int = 0 
					DECLARE @cantresfact Int = 0 

					DECLARE faccursor CURSOR
					FOR SELECT TipRes,Reserva,IdCiaRes,ItemRes, Referencia1 FROM @Trn_TraEspFacReservas where TipDoc = @TipFac and Factura = @Factura and IdCia = @IdCia
					OPEN faccursor
					FETCH NEXT FROM faccursor INTO @TipRes,@NumRes,@CiaRes,@ItemRes, @Ref
					WHILE @@FETCH_STATUS = 0
					BEGIN
						IF(@Ref = 'CLIENTE')
						BEGIN
							UPDATE Trn_TraEspResDetalle
							SET  TipFac = @TipDoc, Factura = @Numero, IdCiaFac = @IdCia, FechaFac = @FechaFac, EstadoItem = 'FACTURADA'
							FROM Trn_TraEspResDetalle d
							WHERE d.TipDoc = @TipRes  and d.Reserva = @NumRes and d.IdCia = @CiaRes and d.Item = @ItemRes
						END
						IF (@NumRes <> @reserva)
						BEGIN
						SET @reserva = @NumRes
						
						SELECT @cantres = count(*)
						FROM Trn_TraEspResDetalle AS rd
						WHERE rd.TipDoc = @TipRes  and rd.Reserva = @NumRes and rd.IdCia = @CiaRes

						SELECT @cantresfact = count(*)
						FROM Trn_TraEspResDetalle AS rd
						WHERE rd.TipDoc = @TipRes  and rd.Reserva = @NumRes and rd.IdCia = @CiaRes and rd.EstadoItem = 'FACTURADA'
						
						IF (@cantresfact = @cantres)
						BEGIN
							UPDATE Trn_TraEspReservas 
							SET EstadoRes = 'FACTURADA' 
							WHERE TipDoc = @TipRes  and Reserva = @NumRes and IdCia = @CiaRes                     
						END
						END
				  
					FETCH NEXT FROM faccursor INTO @TipRes,@NumRes,@CiaRes,@ItemRes,@Ref
					END
					CLOSE faccursor
					DEALLOCATE faccursor

					--actualizar el cliente de cada factura
					UPDATE TercCliente
					SET  VrSaldo = c.VrSaldo + @VrNeto
					FROM TercCliente c
					WHERE c.IdClie = @IdCliente

					--Tabla a Deovler para los nuevos numeros de factura
					INSERT INTO #LogTraEspFacReservas(NewTipFac,NewFactura,NewIdCiaFac,OldTipFac,OldFactura,OldIdCiaFac)
					SELECT @TipDoc,@Numero,@Cia,@TipFac, @Factura, @IdCia
				END
			FETCH NEXT FROM factcursor INTO @TipFac,@Factura,@IdCia,@Fecha,@IdCliente,@VrNeto
			END
			CLOSE factcursor
			DEALLOCATE factcursor

			--SELECT * FROM #LogTraEspFacturas
			SELECT * FROM #LogTraEspFacReservas
			COMMIT TRAN
		END TRY
        BEGIN CATCH
			ROLLBACK TRAN
			DECLARE @ErrorMessage NVARCHAR(4000);
			DECLARE @ErrorSeverity INT;
			DECLARE @ErrorState INT;

			SELECT 
			@ErrorMessage = ERROR_MESSAGE(),
			@ErrorSeverity = ERROR_SEVERITY(),
			@ErrorState = ERROR_STATE();
			RAISERROR(
			@ErrorMessage, -- Message text.
			@ErrorSeverity, -- Severity.
			@ErrorState -- State.
			);
		END CATCH
RETURN 0
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[paWcfSeInsTrn_DevFcr]
	@Trn_DevFcr [dbo].[dataTypeTrn_DevFcr] READONLY,
	@Trn_TraEspFacReservas [dbo].[dataTypeTrn_TraEspFacReservas] READONLY,
	@Trn_RecAfavor [dbo].[dataTypeTrn_RecAfavor] READONLY,
	@Trn_VencAbonos [dbo].[dataTypeTrn_VencAbonos] READONLY,
	@Trn_DocMemo [dbo].[dataTypeTrn_DocMemo] READONLY,
	@Trn_DetCuentas [dbo].[dataTypeTrn_DetCuentas] READONLY,
	@Trn_Comprobantes [dbo].[dataTypeTrn_Comprobantes] READONLY,
	@Trn_ComDetalle [dbo].[dataTypeTrn_ComDetalle] READONLY,
	@Trn_NiifComp [dbo].[dataTypeTrn_NiifComp] READONLY,
	@Trn_NiifDetalle [dbo].[dataTypeNiifDetalle] READONLY,
	@operacion [varchar](1)
WITH EXECUTE AS CALLER
AS
	DECLARE @Comprobante INT = 0 --Esta variable guarda el número consecutivo del comprobante
	DECLARE @TipComp VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante
	DECLARE @IdCiaComp VARCHAR(4) = '00' --Esta variable guarda la compañia del comprobante

	DECLARE @CompNiif INT = 0 --Esta variable guarda el número consecutivo del comprobante Niif
	DECLARE @TipCompNiif VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante Niif
	DECLARE @IdCiaCompNiif VARCHAR(4) = '00'--Esta variable guarda la compañia del comprobante Niif

	DECLARE @CompFis INT = 0 --Esta variable guarda el número consecutivo de comprobante Fiscal
	DECLARE @TipCompFis VARCHAR(3)  = '0' --Esta variable guarda el tipo de comprobante Fiscal
	DECLARE @IdCiaCompFis VARCHAR(4) = '00' --Esta variable guarda la compañia del comprobante Fiscal

	DECLARE @TipDoc VARCHAR(3) --En esta variable se guarda el consecutivo del documento aprobación
	DECLARE @Cia VARCHAR(2) --En esta variable se guarda el consecutivo del documento aprobación
	DECLARE @Numero INT --En esta variable se guarda el consecutivo del documento aprobación

	BEGIN TRAN
	BEGIN TRY		 
			
		declare @fecdev smalldatetime
		DECLARE @modalidad varchar(10)

		IF(@operacion = 'i')
		begin
			
			SELECT TOP 1 @TipDoc = TipDev, @Cia = IdCia,@fecdev = Fecha,@modalidad = ModdDev, @IdCiaComp = IdCia, @IdCiaCompNiif = IdCia, @IdCiaCompFis = IdCia 
			FROM @Trn_DevFcr

			SELECT @Numero = Numero + 1  
			FROM TiposDocCons 
			where IdDoc = @TipDoc 
				AND IdCia = @Cia

			IF(@Numero > 0)
				UPDATE TiposDocCons 
				SET Numero = @Numero 
				WHERE IdDoc = @TipDoc 
					AND IdCia = @Cia
			ELSE
			BEGIN
				SELECT @Numero = 1

				INSERT INTO TiposDocCons 
				VALUES (@TipDoc,@Cia,0,0,0,0,NULL,'',@Numero,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
			END

			IF(EXISTS(SELECT * FROM @Trn_Comprobantes))
			BEGIN
				SELECT TOP 1 @TipComp = TipCom 
				FROM @Trn_Comprobantes

				SELECT @Comprobante = Numero + 1  
				FROM TiposComCons 
				where IdCom  = @TipComp 
					AND IdCia = @IdCiaComp
				--UPDATE TiposComCons SET Numero = @Comprobante WHERE IdCom = @TipComp AND IdCia = @IdCiaComp
				IF(@Comprobante <> '')
					UPDATE TiposComCons 
					SET Numero = @Comprobante 
					WHERE IdCom = @TipComp 
						and IdCia = @IdCiaComp
				ELSE
				BEGIN
					SELECT @Comprobante = 1

					INSERT INTO TiposComCons 
					VALUES (@TipComp,@IdCiaComp,0,0,@Comprobante,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
				END
			END

			IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'NIIF'))
			BEGIN
				SELECT TOP 1 @TipCompNiif = TipCom 
				FROM @Trn_NiifComp 
				WHERE TipoNiif = 'NIIF'

				SELECT @CompNiif = Numero + 1  
				FROM TiposComCons 
				where IdCom  = @TipCompNiif 
					AND IdCia = @IdCiaCompNiif
				--UPDATE TiposComCons SET Numero = @CompNiif WHERE IdCom = @TipCompNiif AND IdCia = @IdCiaCompNiif
				IF(@CompNiif <> '')
					UPDATE TiposComCons 
					SET Numero = @CompNiif 
					WHERE IdCom = @TipCompNiif 
						and IdCia = @IdCiaCompNiif
				ELSE
				BEGIN
					SELECT @CompNiif = 1

					INSERT INTO TiposComCons 
					VALUES (@TipCompNiif,@IdCiaCompNiif,0,0,@CompNiif,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
				END
			END

			IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'FISCAL'))
			BEGIN
				SELECT TOP 1 @TipCompFis = TipCom 
				FROM @Trn_NiifComp 
				WHERE TipoNiif = 'FISCAL'

				SELECT @CompFis = Numero + 1  
				FROM TiposComCons
				where IdCom  = @TipCompFis 
					AND IdCia = @IdCiaCompFis
				--UPDATE TiposComCons SET Numero = @CompFis WHERE IdCom = @TipCompFis AND IdCia = @IdCiaCompFis
				IF(@CompNiif <> '')
					UPDATE TiposComCons 
					SET Numero = @CompFis
					WHERE IdCom = @TipCompFis 
						and IdCia = @IdCiaCompFis
				ELSE
				BEGIN
					SELECT @CompFis = 1

					INSERT INTO TiposComCons 
					VALUES (@TipCompFis,@IdCiaCompFis,0,0,@CompFis,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
				END
			END
		end

		IF(@operacion = 'i')
		begin
			IF(EXISTS(SELECT * FROM @Trn_DevFcr))
			BEGIN
				INSERT INTO Trn_DevFcr ( -- REVISAR
					TipDev,Devolucion,IdCia,Fecha,IdConcepto,TipDoc,
					Factura,IdCiaDoc,FecDoc,IdCliente,IdAgencia,VrSubTotal,
					VrDescuento,VrImpuesto,VrRetencion,VrReteICA,VrReteIVA,VrFletes,
					VrOtros,VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal,
					VrFaltantes,VrAnticipos,VrNeto,Cantidad,CantPuntos,BaseImp,
					BaseRet,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom,
					IdLocEnv,Pedido,IdCiaPed,Remision,IdCiaRem,Cotizacion,
					IdCiaCot,FecPedido,Modalidad,ModdDev,PlacaVehic,KmtVehic,
					ZonaFrontera,OrigenAdd,TipCom,Comprobante,IdCiaCom,Observacion,
					IdEstado,TimeSys,FecUpdate,IdCiaCrea,IdUsuario,VrImpCons,
					VrReteCREE,TarifaRtc,CodTarRtc,BaseIvaObsq,VrIvaObsequio,VrImpCarbono,
					DevMasivo,NumRecibo,CdCiaRec,CdMotDev,BaseIvaIgp,VrIvaIngProd,
					TarifaArf,VrAutRetFte,TarifaAri,VrAutRetIca,VrImpuBA,VrImpuCUP
				)
				SELECT 
					@TipDoc,@Numero,@Cia,Fecha,IdConcepto,TipDoc,
					Factura,IdCiaDoc,FecDoc,IdCliente,IdAgencia,VrSubTotal,
					VrDescuento,VrImpuesto,VrRetencion,VrReteICA,VrReteIVA,VrFletes,
					VrOtros,VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal,
					VrFaltantes,VrAnticipos,VrNeto,Cantidad,CantPuntos,BaseImp,
					BaseRet,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom,
					IdLocEnv,Pedido,IdCiaPed,Remision,IdCiaRem,Cotizacion,
					IdCiaCot,FecPedido,Modalidad,ModdDev,PlacaVehic,KmtVehic,
					ZonaFrontera,OrigenAdd,@TipComp,@Comprobante,@IdCiaComp,Observacion,
					IdEstado,TimeSys,FecUpdate,IdCiaCrea,IdUsuario,VrImpCons,
					VrReteCREE,TarifaRtc,CodTarRtc,BaseIvaObsq,VrIvaObsequio,VrImpCarbono,
					DevMasivo,NumRecibo,CdCiaRec,CdMotDev,BaseIvaIgp,VrIvaIngProd,
					TarifaArf,VrAutRetFte,TarifaAri,VrAutRetIca,VrImpuBA,VrImpuCUP
				FROM 
					@Trn_DevFcr
			END 

			IF(EXISTS(SELECT * FROM @Trn_TraEspFacReservas))
			BEGIN
				INSERT INTO Trn_TraEspFacReservas( -- REVISAR
					TipDoc,Factura,IdCia,Item,TipoReg,FechaFact,
					TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion,
					Cantidad,VrServicio,VrUnitario,VrCosto,TarifaIva,VrImpuesto,
					TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3,
					CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,pVehiculo,
					TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef,
					IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet,
					VrRetencion,TarifaIca,VrReteIca,EstadoItem
				)
				SELECT 
					@TipDoc,@Numero,@Cia,Item,TipoReg,FechaFact,
					TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion,
					Cantidad,VrServicio,VrUnitario,VrCosto,TarifaIva,VrImpuesto,
					TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3,
					CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,pVehiculo,
					TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef,
					IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet,
					VrRetencion,TarifaIca,VrReteIca,EstadoItem
				FROM 
					@Trn_TraEspFacReservas
			END

			IF(EXISTS(SELECT * FROM @Trn_RecAFavor))
			BEGIN
				INSERT INTO Trn_RecAFavor(
					TipDoc,	Recibo,	IdCia, Fecha, VrAFavor, VrOtrosDb,	
					VrAbono, IdCliente, IdAgencia, IdVend
				)
				SELECT
					@TipDoc, @Numero, @Cia,	Fecha, VrAFavor, VrOtrosDb,	
					VrAbono, IdCliente, IdAgencia, IdVend
				FROM 
					@Trn_RecAFavor
			END

			IF(EXISTS(SELECT * FROM @Trn_VencAbonos))
			BEGIN
				declare @tiprec varchar(3)
				declare @recibo int
				declare @idciarec varchar(2)
				declare @item int 

				SELECT TOP 1 @tiprec = TipRec, @idciarec = IdCia, @recibo = Recibo 
				FROM @Trn_VencAbonos

				select @item =  isnull(MAX(Item),0) 
				from Trn_VencAbonos 
				where TipRec = @tiprec	
					and Recibo = @recibo 
					and IdCia = @idciarec

				INSERT INTO Trn_VencAbonos( -- REVISAR
					TipRec,Recibo,IdCia,Item,Fecha,TipDoc,
					Factura,IdCiaFac,ItemFac,VrAbono,VrDescto,VrBaseCms,
					IdCliente,IdAgencia,IdVend,Comision,Detalle,FecPago,
					TipoAplica,TimeSys
				)
				SELECT 
					@TipDoc,@Numero,@Cia,(@item + ROW_NUMBER() OVER(ORDER BY Item ASC)),Fecha,TipDoc,
					Factura,IdCiaFac,ItemFac,VrAbono,VrDescto,VrBaseCms,
					IdCliente,IdAgencia,IdVend,Comision,Detalle,FecPago,
					TipoAplica,TimeSys
				FROM 
					@Trn_VencAbonos
			END 

			IF(EXISTS(SELECT * FROM @Trn_DetCuentas))
			BEGIN
				INSERT INTO Trn_DetCuentas(
					TipDoc,Documento,IdCia,Concepto,Item,IdCuenta,
					Valor,Detalle,IdTercero,CodAgncia,CdCCosto,CdSubCos,
					pVehiculo,VrBase,TipFac,Factura,IdCiaFac,ItemFac,
					FecVence,Cheque,CiuOrigen,Referencia,VrTarifa,TipoTarif,
					CodConc,CodTarif
				)
				SELECT 
					@TipDoc,@Numero,@Cia,Concepto,Item,IdCuenta,
					Valor,Detalle,IdTercero,CodAgncia,CdCCosto,CdSubCos,
					pVehiculo,VrBase,TipFac,Factura,IdCiaFac,ItemFac,
					FecVence,Cheque,CiuOrigen,Referencia,VrTarifa,TipoTarif,
					CodConc,CodTarif
				FROM 
					@Trn_DetCuentas
			END

			IF(EXISTS(SELECT * FROM @Trn_DocMemo))
			BEGIN
				INSERT INTO Trn_DocMemo(
					TipDoc,Documento,IdCia,Comentarios,Nota1,Nota2,
					Nota3,CantImp,ArchivoImg
				)
				SELECT 
					@TipDoc,@Numero,@Cia,Comentarios,Nota1,Nota2,
					Nota3,CantImp,ArchivoImg
				FROM 
					@Trn_DocMemo
			END 

			IF(EXISTS(SELECT * FROM @Trn_Comprobantes))
			BEGIN
				INSERT INTO Trn_Comprobantes(
					TipCom, Comprobante, IdCia, Fecha, IdTercero, VrTotal, 
					IdCta, EnEfectivo, NumCheque, FecCheque, TipDoc, Documento, 
					IdCiaDoc, Anulado, NumDev, FecDev, TipEgr, NEgreso, 
					pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1,
					VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, 
					Observacion, IdEstado, Propddes, TimeSys, FecUpdate, IdCiaCrea, 
					IdUsuario, CdSustento, Tipo_Pago, Establec, PEmision, Autorizac, 
					FechaAut, NiifTipo, NiifNumero, FisTipo, FisNumero, DocSoporte,
					CodRes, DescServicio
				)
				SELECT 
					@TipComp, @Comprobante, @IdCiaComp, Fecha, IdTercero, VrTotal, 
					IdCta, EnEfectivo, NumCheque, FecCheque, @TipDoc, @Numero, 
					@Cia, Anulado, NumDev, FecDev, TipEgr, NEgreso, 
					pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1,
					VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, 
					Observacion, IdEstado, Propddes, TimeSys, FecUpdate, IdCiaCrea, 
					IdUsuario, CdSustento, Tipo_Pago, Establec, PEmision, Autorizac, 
					FechaAut, @TipCompNiif, @CompNiif, @TipCompFis, @CompFis, DocSoporte,
					CodRes, DescServicio
				FROM	
					@Trn_Comprobantes
			END

			IF(EXISTS(SELECT * FROM @Trn_ComDetalle))
			BEGIN
				INSERT INTO Trn_ComDetalle (
					TipCom, Comprobante, IdCia, Item, Fecha, IdCuenta, 
					Detalle, VrDebito, VrCredito,
					IdTercero, 
					IdVehiculo, 
					IdCCosto, IdSubCos, VrBase, TarifaBase, TipDoc, Documento,
					IdCiaDoc, CodConce, NitDoc, TipFac, Factura, IdCiaFac, 
					ItemFac, FecVence, CodCta, NumCheque, Integrado, TipoAplica, 
					Consolida, CodCargo, NitOtros, CodSubgpo, CiuOrigen, CodAgncia,
					VehPropio, Referncia, TipDocRef, DocRef, IdCiaRef, TimeSys, 
					FecUpdate, IdCiaCrea, IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec,
					PtoEmision, Num_Autoriza, FechAutoriza,CdCuentaNiif
				)
				SELECT 
					@TipComp, @Comprobante, @IdCiaComp, C.Item, Fecha, 
					COALESCE(
						( -- Retencion en detalle, buscar tarifa
							SELECT DISTINCT T.IdCuenta
							FROM @Trn_TraEspFacReservas AS O
							LEFT JOIN TarifCuentas T ON T.IdTarifa = (
								CASE C.Referncia
									WHEN 'RETENCION EN LA FUENTE' THEN O.CodTarRet
									WHEN 'RETENCION ICA' THEN O.CodTarIca
								END)
								AND T.TipDoc = 'DFE'
							WHERE O.Reserva = C.DocRef
						),
						( -- Retencion en total, buscar tarifa
							SELECT T.IdCuenta
							FROM @Trn_DevFcr AS TDF
							LEFT JOIN Trn_Facturas AS TF ON TF.TipDoc = TDF.TipDoc
								AND TF.Factura = TDF.Factura
								AND TF.IdCia = TDF.IdCia
							LEFT JOIN TarifCuentas T ON T.IdTarifa = (
								CASE C.Referncia
									WHEN 'RETENCION EN LA FUENTE' THEN TF.CodTarRet
									WHEN 'RETENCION ICA' THEN TF.CodTarIca
								END)
								AND T.TipDoc = 'DFE'
						),
						C.IdCuenta -- Cuenta concepto.
					) AS IdCuenta,
					Detalle, VrDebito, VrCredito,
					CASE -- IdTercer
						WHEN IdVehiculo = '0' THEN IdTercero
						ELSE (
							COALESCE(	
								(
									SELECT DISTINCT CD.IdTercero 
									FROM Trn_ComDetalle AS CD 
									WHERE CD.Comprobante = (
										SELECT TOP 1 Factura
										FROM @Trn_DevFcr
									)
									AND CD.TipCom = 'FCE'
									AND CD.Item = C.Item
								),
								(
									SELECT F.NitTercero 
									FROM @Trn_TraEspFacReservas F 
									WHERE 
										F.pVehiculo = C.IdVehiculo 
										AND F.TipDoc = 'FCE'
										AND F.Item = C.Item
								),
								IdTercero
							)
						)
					END, 
					CASE -- IdVehiculo
						WHEN IdVehiculo = '0' THEN IdVehiculo
						ELSE ISNULL(
							(
								SELECT DISTINCT CD.IdVehiculo 
								FROM Trn_ComDetalle AS CD 
								WHERE CD.Comprobante = (
									SELECT TOP 1 Factura
									FROM @Trn_DevFcr
								)
								AND CD.TipCom = 'FCE'
								AND CD.Item = C.Item
							),
							IdVehiculo
						)
					END, 
					IdCCosto, IdSubCos, VrBase, TarifaBase, @TipDoc, @Numero,
					@Cia, CodConce, NitDoc, TipFac, Factura, IdCiaFac, 
					ItemFac, FecVence, CodCta,NumCheque, Integrado, TipoAplica, 
					Consolida, CodCargo, NitOtros, CodSubgpo, CiuOrigen, CodAgncia, 
					VehPropio, Referncia, TipDocRef, DocRef, IdCiaRef, TimeSys, 
					FecUpdate, IdCiaCrea, IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec, 
					PtoEmision, Num_Autoriza, FechAutoriza, CdCuentaNiif
				FROM 
					@Trn_ComDetalle c
			END

			IF(EXISTS(SELECT * FROM @Trn_NiifComp))
			BEGIN
					INSERT INTO Trn_NiifComp (
						TipCom, 
						Comprobante, 
						IdCia, Fecha, IdTercero, VrTotal, IdCta,EnEfectivo, 
						NumCheque, FecCheque, TipDoc, Documento, IdCiaDoc, Anulado, 
						NumDev, FecDev, TipEgr, NEgreso, pVehiculo, VehPropio, 
						CedCondtor, CodConce, Beneficiario, VrDivisa1, VrDivisa2, VrDivisa3, 
						PermEditar, Integrado, EsEgreso, Anticipo, Observacion, IdEstado, 
						Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, TipoNiif, 
						CdSustento, Tipo_Pago, Establec, PEmision, Autorizac,FechaAut,
						CtbTipo, 
						CtbNumero,
						FisTipo, 
						FisNumero 
					)
					SELECT 
						CASE N.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE @TipCompFis END, 
						CASE N.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE @CompFis END, 
						@Cia, C.Fecha, C.IdTercero, C.VrTotal, C.IdCta, C.EnEfectivo, 
						C.NumCheque, C.FecCheque, @TipDoc, @Numero, @Cia, C.Anulado, 
						C.NumDev,C.FecDev, C.TipEgr, C.NEgreso, C.pVehiculo, C.VehPropio, 
						C.CedCondtor, C.CodConce, C.Beneficiario,C.VrDivisa1, C.VrDivisa2, C.VrDivisa3, 
						C.PermEditar, C.Integrado, C.EsEgreso, C.Anticipo, C.Observacion, C.IdEstado, 
						C.Propddes, C.TimeSys, C.FecUpdate, C.IdCiaCrea, C.IdUsuario, N.TipoNiif, 
						C.CdSustento, C.Tipo_Pago, C.Establec, C.PEmision, C.Autorizac, C.FechaAut,
						CASE N.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE NULL END, 
						CASE N.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE 0 END,
						CASE N.TipoNiif WHEN 'FISCAL' THEN @TipCompFis ELSE NULL END, 
						CASE N.TipoNiif WHEN 'FISCAL' THEN @CompFis ELSE 0 END
				FROM 
					@Trn_Comprobantes AS C 
				JOIN
					@Trn_NiifComp AS N ON C.TipCom = N.TipComCont 
					AND C.Comprobante = N.ComprobanteCont
			END

			IF(EXISTS(SELECT * FROM @Trn_NiifDetalle))
			BEGIN
				INSERT INTO Trn_NiifDetalle (
					TipCom, 
					Comprobante, 
					IdCia, Item, Fecha, IdCuenta, Detalle,VrDebito, 
					VrCredito, IdTercero, IdVehiculo,IdCCosto, IdSubCos,VrBase, 
					TarifaBase, TipDoc, Documento, IdCiaDoc, CodConce, NitDoc, 
					TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta, 
					NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros,
					CodSubgpo, CiuOrigen, CodAgncia, VehPropio, Referncia, TipDocRef, 
					DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, 
					CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza, FechAutoriza, 
					CodCuentaCG
				)
				SELECT 
					CASE NC.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE @TipCompFis END, 
					CASE NC.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE @CompFis END, 
					@Cia,N.Item, N.Fecha, N.IdCuenta, N.Detalle,N.VrDebito, 
					N.VrCredito, N.IdTercero, N.IdVehiculo,N.IdCCosto, N.IdSubCos,N.VrBase, 
					N.TarifaBase, @TipDoc,@Numero,@Cia, N.CodConce,N.NitDoc, 
					N.TipFac, N.Factura, N.IdCiaFac, N.ItemFac, N.FecVence, N.CodCta, 
					N.NumCheque, N.Integrado, N.TipoAplica, N.Consolida, N.CodCargo, N.NitOtros,
					N.CodSubgpo, N.CiuOrigen, N.CodAgncia, N.VehPropio, N.Referncia, N.TipDocRef,
					N.DocRef, N.IdCiaRef, N.TimeSys, N.FecUpdate, N.IdCiaCrea, N.IdUsuario,
					N.CdConcTrib, N.CdTarifTrib, N.NumEstablec, N.PtoEmision ,N.Num_Autoriza,N.FechAutoriza, 
					N.CodCuentaCG
				FROM 
					@Trn_NiifDetalle as N
				JOIN 
					@Trn_NiifComp AS NC ON N.TipCom = NC.TipCom 
					AND N.Comprobante = NC.Comprobante				
			END

		end	

		IF(@operacion = 'i')
		begin
			--esto antes de la versión 5048 estaba desués del cursor ahora no para poder buscar solo las factruas activas
			--ACTUALIZAR FACTURA
			IF(UPPER(@modalidad) = 'TOTAL')
			BEGIN 
				UPDATE Trn_Facturas
				SET Anulado = 1,NumDev = @Numero,FecDev = @fecdev
				FROM Trn_Facturas F, @Trn_DevFcr DF
				WHERE F.TipDoc = DF.TipDoc 
					AND F.Factura = DF.Factura 
					AND F.IdCia = DF.IdCiaDoc
			END
			--actualiza los items de las reservas con los que se relacionan en el tipo de datos nuevo de las facturasreservas
			--Antes de la versión 48 esto hacía Joe
			--UPDATE Trn_TraEspResDetalle
			--SET  Factura = 0, IdCiaFac = '00', FechaFac = null, EstadoItem = r.EstadoItem
			--FROM Trn_TraEspResDetalle d, @Trn_TraEspFacReservas r 
			--WHERE d.TipDoc = r.TipRes  and d.Reserva = r.Reserva and d.IdCia = r.IdCiaRes and d.Item = r.ItemRes
			--Versión 48 se debe buscar si la opción FRM está activa y si está activa debe colocar la última factura que no esté anulada de la reserva (Con este parámetro se puede factrar muchas veces la reserva)
			--Si la factrua que se anula es menor a la última se debe seguir dejando la última factura, ejemplo: si la última factura de esa reserva es la 3 y se anula la factrua 2 correspondiente a esa reserva
			--Se sigue dejando la 3
			IF((SELECT ISNULL(Valor, '0') FROM adm_Opciones where IdOpc ='FRM') = '1')
			BEGIN
				DECLARE @TipRes VARCHAR(3)
				DECLARE @TipDocFacDev VARCHAR(3)
				DECLARE @TipDocFacActual VARCHAR(3)
				DECLARE @TipDocFac VARCHAR(3) 
				DECLARE @CiaRes VARCHAR(2) 
				DECLARE @CiaFac VARCHAR(2)
				DECLARE @CiaFacDev VARCHAR(2)
				DECLARE @CiaFacActual VARCHAR(2)
				DECLARE @NumRes INT
				DECLARE @NumFacDev INT 
				DECLARE @NumFacActual INT 
				DECLARE @NumFac INT 
				DECLARE @ItemRes INT 
				DECLARE @reserva Int = 0 
				DECLARE @cantres Int = 0 
				DECLARE @cantresfact Int = 0
				DECLARE @FechaFac datetime
				DECLARE @asingadofa BIT = 0
				SELECT TOP (1) @TipDocFacDev = TipDoc, @NumFacDev = Factura, @CiaFacDev = IdCiaDoc  FROM @Trn_DevFcr
				DECLARE faccursor CURSOR
				--Verificar todas las reservas que viene en la devolución, tenga facturas
				FOR SELECT TipRes,Reserva,IdCiaRes,ItemRes FROM @Trn_TraEspFacReservas 
				OPEN faccursor
				FETCH NEXT FROM faccursor INTO @TipRes,@NumRes,@CiaRes,@ItemRes
				WHILE @@FETCH_STATUS = 0
				BEGIN
					SELECT @TipDocFacActual = TipFac,  @NumFacActual = Factura, @CiaFacActual = IdCiaFac 
					FROM Trn_TraEspResDetalle 
					WHERE TipDoc = @TipRes 
						and Reserva = @NumRes 
						and IdCia = @CiaRes 
						and Item = @ItemRes

					IF(@TipDocFacActual = @TipDocFacDev and  @NumFacActual = @NumFacDev and @CiaFacActual = @CiaFacDev)
					BEGIN
						IF(EXISTS(
							SELECT TOP(1) fd.Factura 
							FROM Trn_TraEspFacReservas AS fd 
							JOIN Trn_Facturas AS f ON fd.TipDoc = f.TipDoc 
								AND fd.Factura = f.Factura 
								AND fd.IdCia = f.IdCia 
							WHERE fd.TipRes = @TipRes 
								AND fd.Reserva = @NumRes 
								AND fd.IdCia = @CiaRes 
								AND fd.Item = @ItemRes 
								AND f.Anulado = 0 
								and fd.TipDoc = @TipDocFacDev 
								and fd.Factura  < @NumFacDev 
								and fd.IdCia = @CiaFacDev 
								and  fd.Factura <> @NumFacDev  order by fd.Factura desc
						))
						BEGIN
							SELECT TOP(1) @TipDocFac = fd.TipDoc, @NumFac = fd.Factura,  @CiaFac = fd.IdCia, @FechaFac = f.Fecha 
							FROM Trn_TraEspFacReservas AS fd 
							JOIN Trn_Facturas AS f ON fd.TipDoc = f.TipDoc 
								AND fd.Factura = f.Factura 
								AND fd.IdCia = f.IdCia WHERE fd.TipRes = @TipRes 
								AND fd.Reserva = @NumRes 
								AND fd.IdCia = @CiaRes 
								AND fd.Item = @ItemRes 
								AND f.Anulado = 0 
								and fd.TipDoc = @TipDocFacDev 
								and fd.Factura < @NumFacDev 
								and fd.IdCia = @CiaFacDev  
								and fd.Factura <> @NumFacDev  
							order by 
								Fd.Factura desc

							UPDATE d
							SET d.Factura = @NumFac, d.IdCiaFac = @CiaFac, d.FechaFac = @FechaFac, d.EstadoItem = r.EstadoItem
							FROM Trn_TraEspResDetalle AS d 
							JOIN @Trn_TraEspFacReservas AS r  ON d.TipDoc = r.TipRes  
								and d.Reserva = r.Reserva 
								and d.IdCia = r.IdCiaRes
							WHERE d.TipDoc = @TipRes 
								and d.Reserva = @NumRes 
								and d.IdCia = @CiaRes 
								and d.Item = @ItemRes
							--DECLARE facupdatecursor CURSOR
							--FOR SELECT fd.TipDoc, fd.Factura, fd.IdCia, f.Fecha FROM Trn_TraEspFacReservas AS fd JOIN Trn_Facturas AS f ON fd.TipDoc = f.TipDoc AND fd.Factura = f.Factura AND fd.IdCia = f.IdCia  WHERE fd.TipRes = @TipRes AND fd.Reserva = @NumRes AND fd.IdCia = @CiaRes AND fd.Item = @ItemRes AND f.Anulado = 0
							--OPEN facupdatecursor
							--FETCH NEXT FROM facupdatecursor INTO @TipDocFac,@NumFac,@CiaFac,@FechaFac
							--WHILE @@FETCH_STATUS = 0 
							----OR @asingadofa = 0
							--BEGIN
							--	--La factura actual de la reserva debe ser menor
							--	IF((SELECT Factura FROM Trn_TraEspResDetalle WHERE TipDoc = @TipRes and Reserva = @NumRes and IdCia = @CiaRes and @ItemRes = Item) = @NumFac) -- AND @asingadofa = 0
							--	begin
							--		UPDATE d
							--		SET  d.Factura = @NumFac, d.IdCiaFac = @CiaFac, d.FechaFac = @FechaFac, d.EstadoItem = r.EstadoItem
							--		FROM Trn_TraEspResDetalle AS d 
							--		JOIN @Trn_TraEspFacReservas AS r  ON d.TipDoc = r.TipRes  and d.Reserva = r.Reserva and d.IdCia = r.IdCiaRes
							--		WHERE d.TipDoc = @TipRes and d.Reserva = @NumRes and d.IdCia = @CiaRes and d.Item = @ItemRes
							--		--set @asingadofa = 1
							--		BREAK
							--	end
							--FETCH NEXT FROM facupdatecursor INTO @TipDocFac,@NumFac,@CiaFac,@FechaFac
							--END
							--CLOSE facupdatecursor
							--DEALLOCATE facupdatecursor
						END
						ELSE
						BEGIN
							UPDATE Trn_TraEspResDetalle
							SET  Factura = 0, IdCiaFac = '00', FechaFac = null, EstadoItem = r.EstadoItem
							FROM Trn_TraEspResDetalle d, @Trn_TraEspFacReservas r 
							WHERE d.TipDoc = r.TipRes  
								and d.Reserva = r.Reserva 
								and d.IdCia = r.IdCiaRes 
								and d.Item = r.ItemRes
						END
					END
				FETCH NEXT FROM faccursor INTO @TipRes,@NumRes,@CiaRes,@ItemRes
				END
				CLOSE faccursor
				DEALLOCATE faccursor
			END
			ELSE
			BEGIN
			UPDATE Trn_TraEspResDetalle
				SET  Factura = 0, IdCiaFac = '00', FechaFac = null, EstadoItem = r.EstadoItem
				FROM Trn_TraEspResDetalle d, @Trn_TraEspFacReservas r 
				WHERE d.TipDoc = r.TipRes  
					and d.Reserva = r.Reserva 
					and d.IdCia = r.IdCiaRes 
					and d.Item = r.ItemRes
			END

			--actualiza el cliente
			UPDATE TercCliente
			SET  VrSaldo = c.VrSaldo - f.VrNeto
			FROM TercCliente c, @Trn_DevFcr f
			WHERE c.IdClie = f.IdCliente

			--actualizar vencimientos,cuando es necesario
			IF(EXISTS(SELECT * FROM @Trn_VencAbonos))
			BEGIN 
				UPDATE Trn_Vencimientos
				SET  VrAbonado = v.VrAbonado + dv.VrAbono
				FROM Trn_Vencimientos v, @Trn_VencAbonos dv
				WHERE v.TipDoc = dv.TipDoc 
					and v.Factura = dv.Factura 
					and v.IdCia = dv.IdCiaFac
			END

		end

		SELECT @Numero, @Comprobante

		COMMIT TRAN
	END TRY

    BEGIN CATCH
		ROLLBACK TRAN

		DECLARE @ErrorMessage NVARCHAR(4000);
		DECLARE @ErrorSeverity INT;
		DECLARE @ErrorState INT;

		SELECT 
			@ErrorMessage = CONCAT(
				' Mensaje de error:', ERROR_MESSAGE(), 
				' Numero error:', ERROR_NUMBER(), 
				' Error severity:', ERROR_SEVERITY(), 
				' Linea:', ERROR_LINE(), 
				' Error Procedure', ERROR_PROCEDURE()),
			@ErrorSeverity = ERROR_SEVERITY(),
			@ErrorState = ERROR_STATE();

		RAISERROR(
			@ErrorMessage, -- Message text.
			@ErrorSeverity, -- Severity.
			@ErrorState -- State.
		);
	END CATCH

RETURN 0
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[paWcfSeInsMsvTrn_DevFcr]
	@Trn_DevFcr [dbo].[dataTypeTrn_DevFcr] READONLY,
	@Trn_TraEspFacReservas [dbo].[dataTypeTrn_TraEspFacReservas] READONLY,
	@Trn_RecAfavor [dbo].[dataTypeTrn_RecAfavor] READONLY,
	@Trn_VencAbonos [dbo].[dataTypeTrn_VencAbonos] READONLY,
	@Trn_DocMemo [dbo].[dataTypeTrn_DocMemo] READONLY,
	@Trn_DetCuentas [dbo].[dataTypeTrn_DetCuentas] READONLY,
	@Trn_Comprobantes [dbo].[dataTypeTrn_Comprobantes] READONLY,
	@Trn_ComDetalle [dbo].[dataTypeTrn_ComDetalle] READONLY,
	@Trn_NiifComp [dbo].[dataTypeNiifComp] READONLY,
	@Trn_NiifDetalle [dbo].[dataTypeNiifDetalle] READONLY,
	@operacion [varchar](1)
WITH EXECUTE AS CALLER
AS
DECLARE @Comprobante INT = 0 --Esta variable guarda el número consecutivo del comprobante
DECLARE @TipComp VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante
DECLARE @IdCiaComp VARCHAR(4) = '00' --Esta variable guarda la compañia del comprobante

DECLARE @CompNiif INT = 0 --Esta variable guarda el número consecutivo del comprobante Niif
DECLARE @TipCompNiif VARCHAR(3) = '0' --Esta variable guarda el tipo de comprobante Niif
DECLARE @IdCiaCompNiif VARCHAR(4) = '00'--Esta variable guarda la compañia del comprobante Niif

DECLARE @CompFis INT = 0 --Esta variable guarda el número consecutivo de comprobante Fiscal
DECLARE @TipCompFis VARCHAR(3)  = '0' --Esta variable guarda el tipo de comprobante Fiscal
DECLARE @IdCiaCompFis VARCHAR(4) = '00' --Esta variable guarda la compañia del comprobante Fiscal

DECLARE @TipDoc VARCHAR(3) --En esta variable se guarda el consecutivo del documento aprobación
DECLARE @Cia VARCHAR(2) --En esta variable se guarda el consecutivo del documento aprobación
DECLARE @Numero INT --En esta variable se guarda el consecutivo del documento aprobación
	BEGIN TRAN
		BEGIN TRY		 
			
			CREATE TABLE #LogTraEspFacturas(
			Numero int NOT NULL DEFAULT ((0)),
			Fecha smalldatetime NOT NULL,
			EstadoProc int NOT NULL DEFAULT ((0)),
			Observacion varchar(250) NULL,
			TimeSys smalldatetime NOT NULL,
			IdUsuario varchar(11) NOT NULL,
			Nombre varchar(50) NOT NULL,
			Tipo varchar(10) NOT NULL
			)	
			
			CREATE TABLE #LogTraEspFacReservas(
			Numero int NOT NULL,
			Item int NOT NULL,
			TipFac varchar(3) NOT NULL,
			Factura int NOT NULL,
			IdCia char(2) NOT NULL,
			TipoReg int NOT NULL DEFAULT ((0)),
			FechaFact smalldatetime NOT NULL,
			TipRes varchar(3) NOT NULL DEFAULT ('RES'),
			Reserva int NOT NULL DEFAULT ((0)),
			IdCiaRes char(2) NOT NULL DEFAULT ('01'),
			ItemRes int NOT NULL DEFAULT ((0)),
			FecReserva smalldatetime NOT NULL,
			Descripcion varchar(250) NOT NULL,
			Cantidad decimal(14, 4) NOT NULL DEFAULT ((0)),
			VrServicio money NOT NULL DEFAULT ((0)),
			VrUnitario money NOT NULL DEFAULT ((0)),
			VrCosto money NOT NULL DEFAULT ((0)),
			TarifaIva decimal(14, 4) NOT NULL DEFAULT ((0)),
			VrImpuesto money NOT NULL DEFAULT ((0)),
			TarifaDct decimal(14, 4) NOT NULL DEFAULT ((0)),
			VrDescuento money NOT NULL DEFAULT ((0)),
			DocCliente varchar(30) NOT NULL,
			Referencia1 varchar(50) NULL,
			Referencia2 varchar(50) NULL,
			Referencia3 varchar(50) NULL,
			CdConcepto varchar(4) NOT NULL,
			CdCCosto varchar(16) NULL,
			CdSubCos varchar(16) NULL,
			NitTercero varchar(16) NOT NULL DEFAULT ('0'),
			CdAgencia varchar(16) NOT NULL DEFAULT ('0'),
			pVehiculo varchar(10) NOT NULL DEFAULT ('0'),
			TipoAfiVehic varchar(10) NOT NULL DEFAULT ('TERCEROS'),
			IdOrigen varchar(8) NOT NULL,
			IdDestino varchar(8) NOT NULL,
			Anulado int NOT NULL DEFAULT ((0)),
			TipDocRef varchar(3) NULL,
			NumDocRef int NOT NULL DEFAULT ((0)),
			IdCiaRef char(2) NULL DEFAULT ('01'),
			FecDocRef smalldatetime NULL,
			CodTarDct varchar(4) NULL,
			CodTarRet varchar(4) NULL,
			CodTarIca varchar(4) NULL,
			TarifaRet decimal(14, 4) NOT NULL,
			VrRetencion money NOT NULL,
			TarifaIca decimal(14, 4) NOT NULL,
			VrReteIca money NOT NULL,
			Comentarios varchar(max) NULL
			) 

			declare @NumProc int = 1
			declare @ItemProc int = 1
			declare @TipDev varchar(3)
			declare @Devolucion INT
			declare @IdCia varchar(2)
			declare @TipFac varchar(3)
			declare @Factura INT
			declare @IdCiaDoc varchar(2)
			declare @Fecha datetime
			declare @observ varchar(250)
			declare @IdCliente varchar(16)
			declare @VrNeto money
			DECLARE @modalidad varchar(10)
			declare @fecdev smalldatetime

			DECLARE dvfactcursor CURSOR
			FOR SELECT TipDev,Devolucion,IdCia,TipDoc,Factura,IdCiaDoc,Fecha,IdCliente,VrNeto,Modalidad FROM @Trn_DevFcr
			OPEN dvfactcursor
			FETCH NEXT FROM dvfactcursor INTO @TipDev,@Devolucion,@IdCia, @TipFac,@Factura,@IdCiaDoc,@fecdev,@IdCliente,@VrNeto,@modalidad
			WHILE @@FETCH_STATUS = 0
			BEGIN

				IF(@operacion = 'i')
				begin
			
					SELECT TOP 1 @TipDoc = @TipDev, @Cia = @IdCia, @IdCiaComp = @IdCia, @IdCiaCompNiif = @IdCia, @IdCiaCompFis = @IdCia
					
					SELECT @Numero = Numero + 1  FROM TiposDocCons where IdDoc = @TipDoc AND IdCia = @Cia

					IF(@Numero > 0)
						UPDATE TiposDocCons SET Numero = @Numero WHERE IdDoc = @TipDoc AND IdCia = @Cia
					ELSE
					BEGIN
						SELECT @Numero = 1
						INSERT INTO TiposDocCons VALUES (@TipDoc,@Cia,0,0,0,0,NULL,'',@Numero,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
					END

					IF(EXISTS(SELECT * FROM @Trn_Comprobantes))
					BEGIN
						SELECT TOP 1 @TipComp = TipCom FROM @Trn_Comprobantes
						SELECT @Comprobante = Numero + 1  FROM TiposComCons where IdCom  = @TipComp AND IdCia = @IdCiaComp
						--UPDATE TiposComCons SET Numero = @Comprobante WHERE IdCom = @TipComp AND IdCia = @IdCiaComp
						IF(@Comprobante <> '')
							UPDATE TiposComCons SET Numero = @Comprobante WHERE IdCom = @TipComp and IdCia = @IdCiaComp
						ELSE
						BEGIN
							SELECT @Comprobante = 1
							INSERT INTO TiposComCons VALUES (@TipComp,@IdCiaComp,0,0,@Comprobante,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
						END
					END

					IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'NIIF'))
					BEGIN
						SELECT TOP 1 @TipCompNiif = TipCom FROM @Trn_NiifComp WHERE TipoNiif = 'NIIF'
						SELECT @CompNiif = Numero + 1  FROM TiposComCons where IdCom  = @TipCompNiif AND IdCia = @IdCiaCompNiif
						--UPDATE TiposComCons SET Numero = @CompNiif WHERE IdCom = @TipCompNiif AND IdCia = @IdCiaCompNiif
						IF(@CompNiif <> '')
							UPDATE TiposComCons SET Numero = @CompNiif WHERE IdCom = @TipCompNiif and IdCia = @IdCiaCompNiif
						ELSE
						BEGIN
							SELECT @CompNiif = 1
							INSERT INTO TiposComCons VALUES (@TipCompNiif,@IdCiaCompNiif,0,0,@CompNiif,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
						END
					END

					IF(EXISTS(SELECT * FROM @Trn_NiifComp WHERE TipoNiif = 'FISCAL'))
					BEGIN
						SELECT TOP 1 @TipCompFis = TipCom FROM @Trn_NiifComp WHERE TipoNiif = 'FISCAL'
						SELECT @CompFis = Numero + 1  FROM TiposComCons where IdCom  = @TipCompFis AND IdCia = @IdCiaCompFis
						--UPDATE TiposComCons SET Numero = @CompFis WHERE IdCom = @TipCompFis AND IdCia = @IdCiaCompFis
						IF(@CompNiif <> '')
							UPDATE TiposComCons SET Numero = @CompFis WHERE IdCom = @TipCompFis and IdCia = @IdCiaCompFis
						ELSE
						BEGIN
							SELECT @CompFis = 1
							INSERT INTO TiposComCons VALUES (@TipCompFis,@IdCiaCompFis,0,0,@CompFis,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null)
						END
					END
				end

				IF(@operacion = 'i')
				begin
					IF(EXISTS(SELECT * FROM @Trn_DevFcr))
					BEGIN
					INSERT INTO Trn_DevFcr(
					TipDev,Devolucion,IdCia,Fecha,IdConcepto,TipDoc,Factura,IdCiaDoc,FecDoc,IdCliente,IdAgencia,VrSubTotal,VrDescuento,VrImpuesto,
					VrRetencion,VrReteICA,VrReteIVA,VrFletes,VrOtros,VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal,VrFaltantes,VrAnticipos,
					VrNeto,Cantidad,CantPuntos,BaseImp,BaseRet,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom,IdLocEnv,Pedido,IdCiaPed,Remision,
					IdCiaRem,Cotizacion,IdCiaCot,FecPedido,Modalidad,ModdDev,PlacaVehic,KmtVehic,ZonaFrontera,OrigenAdd,TipCom,Comprobante,IdCiaCom,
					Observacion,IdEstado,TimeSys,FecUpdate,IdCiaCrea,IdUsuario,VrImpCons,VrReteCREE,TarifaRtc,CodTarRtc,BaseIvaObsq,VrIvaObsequio,
					VrImpCarbono,DevMasivo,NumRecibo,CdCiaRec,CdMotDev,BaseIvaIgp,VrIvaIngProd
					)
					SELECT 
					@TipDoc,@Numero,@Cia,Fecha,IdConcepto,TipDoc,Factura,IdCiaDoc,FecDoc,IdCliente,IdAgencia,VrSubTotal,VrDescuento,VrImpuesto,
					VrRetencion,VrReteICA,VrReteIVA,VrFletes,VrOtros,VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal,VrFaltantes,VrAnticipos,
					VrNeto,Cantidad,CantPuntos,BaseImp,BaseRet,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom,IdLocEnv,Pedido,IdCiaPed,Remision,
					IdCiaRem,Cotizacion,IdCiaCot,FecPedido,Modalidad,ModdDev,PlacaVehic,KmtVehic,ZonaFrontera,OrigenAdd,@TipComp,@Comprobante,@IdCiaComp,
					Observacion,IdEstado,TimeSys,FecUpdate,IdCiaCrea,IdUsuario,VrImpCons,VrReteCREE,TarifaRtc,CodTarRtc,BaseIvaObsq,VrIvaObsequio,
					VrImpCarbono,DevMasivo,NumRecibo,CdCiaRec,CdMotDev,BaseIvaIgp,VrIvaIngProd
					FROM @Trn_DevFcr df WHERE df.TipDev = @TipDev and df.Devolucion = @Devolucion and df.IdCia = @IdCia
					END 

					IF(EXISTS(SELECT * FROM @Trn_TraEspFacReservas))
					BEGIN
					INSERT INTO Trn_TraEspFacReservas(
					TipDoc,Factura,IdCia,Item,TipoReg,FechaFact,TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion,Cantidad,VrServicio,VrUnitario,VrCosto,
					TarifaIva,VrImpuesto,TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3,CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,
					pVehiculo,TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef,IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet,VrRetencion,
					TarifaIca,VrReteIca,EstadoItem
					)
					SELECT 
					@TipDoc,@Numero,@Cia,Item,TipoReg,FechaFact,TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion,Cantidad,VrServicio,VrUnitario,VrCosto,
					TarifaIva,VrImpuesto,TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3,CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,
					pVehiculo,TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef,IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet,VrRetencion,
					TarifaIca,VrReteIca,EstadoItem
					FROM @Trn_TraEspFacReservas dfr WHERE dfr.TipDoc = @TipDev and dfr.Factura = @Devolucion and dfr.IdCia = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_RecAFavor))
					BEGIN
					INSERT INTO Trn_RecAFavor(
					TipDoc,Recibo,IdCia,Fecha,VrAFavor,VrOtrosDb,VrAbono,IdCliente,IdAgencia,IdVend
					)
					SELECT
					@TipDev,@Devolucion,@IdCia,Fecha,VrAFavor,VrOtrosDb,VrAbono,IdCliente,IdAgencia,IdVend
					FROM @Trn_RecAFavor ra WHERE ra.TipDoc = @TipDev and ra.Recibo = @Devolucion and ra.IdCia = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_VencAbonos))
					BEGIN
						declare @tiprec varchar(3)
						declare @recibo int
						declare @idciarec varchar(2)
						declare @item int 
						SELECT TOP 1 @tiprec = TipRec, @idciarec = IdCia, @recibo = Recibo FROM @Trn_VencAbonos va where va.TipDoc = @TipFac and va.Factura = @Factura and va.IdCiaFac = @IdCiaDoc
						select @item =  isnull(MAX(Item),0) from Trn_VencAbonos where TipRec = @tiprec and Recibo = @recibo and IdCia = @idciarec

						INSERT INTO Trn_VencAbonos(
						TipRec,Recibo,IdCia,Item,Fecha,TipDoc,Factura,IdCiaFac,ItemFac,VrAbono,VrDescto,
						VrBaseCms,IdCliente,IdAgencia,IdVend,Comision,Detalle,FecPago,TipoAplica,TimeSys
						)
						SELECT 
						@TipDoc,@Numero,@Cia,(@item + ROW_NUMBER() OVER(ORDER BY Item ASC)),Fecha,TipDoc,Factura,IdCiaFac,ItemFac,VrAbono,VrDescto,
						VrBaseCms,IdCliente,IdAgencia,IdVend,Comision,Detalle,FecPago,TipoAplica,TimeSys
						FROM @Trn_VencAbonos
					END 

					IF(EXISTS(SELECT * FROM @Trn_DetCuentas))
					BEGIN
					INSERT INTO Trn_DetCuentas(
					TipDoc,Documento,IdCia,Concepto,Item,IdCuenta,Valor,Detalle,IdTercero,CodAgncia,CdCCosto,CdSubCos,pVehiculo,
					VrBase,TipFac,Factura,IdCiaFac,ItemFac,FecVence,Cheque,CiuOrigen,Referencia,VrTarifa,TipoTarif,CodConc,CodTarif
					)
					SELECT 
					@TipDoc,@Numero,@Cia,Concepto,Item,IdCuenta,Valor,Detalle,IdTercero,CodAgncia,CdCCosto,CdSubCos,pVehiculo,
					VrBase,TipFac,Factura,IdCiaFac,ItemFac,FecVence,Cheque,CiuOrigen,Referencia,VrTarifa,TipoTarif,CodConc,CodTarif
					FROM @Trn_DetCuentas dc WHERE dc.TipDoc = @TipDev and dc.Documento = @Devolucion and dc.IdCia = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_DocMemo))
					BEGIN
					INSERT INTO Trn_DocMemo(
					TipDoc,Documento,IdCia,Comentarios,Nota1,Nota2,Nota3,CantImp,ArchivoImg
					)
					SELECT 
					@TipDoc,@Numero,@Cia,Comentarios,Nota1,Nota2,Nota3,CantImp,ArchivoImg
					FROM @Trn_DocMemo dm WHERE dm.TipDoc = @TipDev and dm.Documento = @Devolucion and dm.IdCia = @IdCia
					END 

					IF(EXISTS(SELECT * FROM @Trn_Comprobantes))
					BEGIN
					INSERT INTO Trn_Comprobantes(
					TipCom, Comprobante, IdCia, Fecha, IdTercero, VrTotal, IdCta, EnEfectivo,
					NumCheque, FecCheque, TipDoc, Documento, IdCiaDoc, Anulado, NumDev, FecDev,
					TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1,
					VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion, IdEstado,
					Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdSustento, Tipo_Pago, Establec,
					PEmision, Autorizac, FechaAut, NiifTipo, NiifNumero, FisTipo, FisNumero, DocSoporte,
					CodRes, DescServicio
					)
					SELECT 
					@TipComp, @Comprobante, @IdCiaComp, Fecha, IdTercero, VrTotal, IdCta, EnEfectivo,
					NumCheque, FecCheque, @TipDoc, @Numero, @Cia, Anulado, NumDev, FecDev,
					TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario, VrDivisa1,
					VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion, IdEstado,
					Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, CdSustento, Tipo_Pago, Establec,
					PEmision, Autorizac, FechaAut, @TipCompNiif, @CompNiif, @TipCompFis, @CompFis, DocSoporte,
					CodRes, DescServicio
					FROM @Trn_Comprobantes cp WHERE cp.TipDoc = @TipDev and cp.Documento = @Devolucion and cp.IdCiaDoc = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_ComDetalle))
					BEGIN
					INSERT INTO Trn_ComDetalle(
					TipCom, Comprobante, IdCia, Item, Fecha, IdCuenta, Detalle, VrDebito, VrCredito,
					IdTercero, IdVehiculo, IdCCosto, IdSubCos, VrBase, TarifaBase, TipDoc, Documento,
					IdCiaDoc, CodConce, NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta,
					NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros, CodSubgpo, CiuOrigen, 
					CodAgncia, VehPropio, Referncia, TipDocRef, DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, 
					IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza, FechAutoriza,CdCuentaNiif
					)
					SELECT 
					@TipComp, @Comprobante, @IdCiaComp, Item, Fecha, IdCuenta, Detalle, VrDebito, VrCredito,
					IdTercero, IdVehiculo, IdCCosto, IdSubCos, VrBase, TarifaBase, @TipDoc, @Numero, @Cia,
					CodConce, NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta,
					NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros, CodSubgpo, CiuOrigen, 
					CodAgncia, VehPropio, Referncia, TipDocRef, DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, 
					IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza, FechAutoriza,CdCuentaNiif
					FROM @Trn_ComDetalle cd WHERE cd.TipDoc = @TipDev and cd.Documento = @Devolucion and cd.IdCia = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_NiifComp))
					BEGIN
					INSERT INTO Trn_NiifComp(
					TipCom, Comprobante, IdCia, Fecha, IdTercero, VrTotal, IdCta,
					EnEfectivo, NumCheque, FecCheque, TipDoc, Documento, IdCiaDoc, Anulado, NumDev,
					FecDev, TipEgr, NEgreso, pVehiculo, VehPropio, CedCondtor, CodConce, Beneficiario,
					VrDivisa1, VrDivisa2, VrDivisa3, PermEditar, Integrado, EsEgreso, Anticipo, Observacion,
					IdEstado, Propddes, TimeSys, FecUpdate, IdCiaCrea, IdUsuario, TipoNiif, CdSustento,
					Tipo_Pago, Establec, PEmision, Autorizac,FechaAut,
					CtbTipo, CtbNumero,
					FisTipo, FisNumero 
					)
					SELECT 
					CASE N.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE @TipCompFis END, 
					CASE N.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE @CompFis END, 
					@Cia, 
					C.Fecha, C.IdTercero, C.VrTotal, C.IdCta,
					C.EnEfectivo, C.NumCheque, C.FecCheque, @TipDoc, @Numero, @Cia, C.Anulado, C.NumDev,
					C.FecDev, C.TipEgr, C.NEgreso, C.pVehiculo, C.VehPropio, C.CedCondtor, C.CodConce, C.Beneficiario,
					C.VrDivisa1, C.VrDivisa2, C.VrDivisa3, C.PermEditar, C.Integrado, C.EsEgreso, C.Anticipo, C.Observacion,
					C.IdEstado, C.Propddes, C.TimeSys, C.FecUpdate, C.IdCiaCrea, C.IdUsuario, N.TipoNiif, C.CdSustento,
					C.Tipo_Pago, C.Establec, C.PEmision, C.Autorizac, C.FechaAut,
					CASE N.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE NULL END, CASE N.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE 0 END,
					CASE N.TipoNiif WHEN 'FISCAL' THEN @TipCompFis ELSE NULL END, CASE N.TipoNiif WHEN 'FISCAL' THEN @CompFis ELSE 0 END
					FROM @Trn_Comprobantes AS C JOIN @Trn_NiifComp AS N ON C.TipCom = N.TipComCont AND C.Comprobante = N.ComprobanteCont
					where C.TipDoc = @TipDev and C.Documento = @Devolucion and C.IdCia = @IdCia
					      and N.TipDoc = @TipDev and N.Documento = @Devolucion and N.IdCiaDoc = @IdCia
					END

					IF(EXISTS(SELECT * FROM @Trn_NiifDetalle))
					BEGIN
					INSERT INTO Trn_NiifDetalle(
					TipCom, Comprobante, IdCia, Item, Fecha, IdCuenta, Detalle,
					VrDebito, VrCredito, IdTercero, IdVehiculo,IdCCosto, IdSubCos,
					VrBase, TarifaBase, TipDoc, Documento, IdCiaDoc, CodConce,
					NitDoc, TipFac, Factura, IdCiaFac, ItemFac, FecVence, CodCta, 
					NumCheque, Integrado, TipoAplica, Consolida, CodCargo, NitOtros,
					CodSubgpo, CiuOrigen, CodAgncia, VehPropio, Referncia, TipDocRef,
					DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, IdUsuario,
					CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza,
					FechAutoriza, CodCuentaCG
					)
					SELECT 
					CASE NC.TipoNiif WHEN 'NIIF' THEN @TipCompNiif ELSE @TipCompFis END, 
					CASE NC.TipoNiif WHEN 'NIIF' THEN @CompNiif ELSE @CompFis END, 
					@Cia,
					N.Item, N.Fecha, N.IdCuenta, N.Detalle,
					N.VrDebito, N.VrCredito, N.IdTercero, N.IdVehiculo,N.IdCCosto, N.IdSubCos,
					N.VrBase, N.TarifaBase, @TipDoc,@Numero,@Cia, N.CodConce,
					N.NitDoc, N.TipFac, N.Factura, N.IdCiaFac, N.ItemFac, N.FecVence, N.CodCta, 
					N.NumCheque, N.Integrado, N.TipoAplica, N.Consolida, N.CodCargo, N.NitOtros,
					N.CodSubgpo, N.CiuOrigen, N.CodAgncia, N.VehPropio, N.Referncia, N.TipDocRef,
					N.DocRef, N.IdCiaRef, N.TimeSys, N.FecUpdate, N.IdCiaCrea, N.IdUsuario,
					N.CdConcTrib, N.CdTarifTrib, N.NumEstablec, N.PtoEmision ,N.Num_Autoriza,
					N.FechAutoriza, N.CodCuentaCG
					FROM @Trn_NiifDetalle as N
					JOIN @Trn_NiifComp AS NC ON N.TipCom = NC.TipCom AND N.Comprobante = NC.Comprobante and NC.TipDoc = @TipDev and NC.Documento = @Devolucion and NC.IdCiaDoc = @IdCia
					where N.TipDoc = @TipDev and N.Documento = @Devolucion and N.IdCiaDoc = @IdCia		
					END

				end	

				IF(@operacion = 'i')
				begin
				  --actualiza los items de las reservas con los que se relacionan en el tipo de datos nuevo de las facturasreservas
				  UPDATE Trn_TraEspResDetalle
				  SET  Factura = 0, IdCiaFac = '00', FechaFac = null, EstadoItem = r.EstadoItem
				  FROM Trn_TraEspResDetalle d, @Trn_TraEspFacReservas r 
				  WHERE d.TipDoc = r.TipRes  and d.Reserva = r.Reserva and d.IdCia = r.IdCia and d.Item = r.ItemRes

				  --ACTUALIZAR FACTURA
				  IF(UPPER(@modalidad) = 'TOTAL')
				  BEGIN 
					  UPDATE Trn_Facturas
					  SET Anulado = 1,NumDev = @Numero,FecDev = @fecdev
					  FROM Trn_Facturas F, @Trn_DevFcr DF
					  WHERE F.TipDoc = DF.TipDoc AND F.Factura = DF.Factura AND F.IdCia = DF.IdCiaDoc
				  END

				  --actualiza el cliente
				  UPDATE TercCliente
				  SET  VrSaldo = c.VrSaldo - f.VrNeto
				  FROM TercCliente c, @Trn_DevFcr f
				  WHERE c.IdClie = f.IdCliente

				  --actualizar vencimientos,cuando es necesario
				  IF(EXISTS(SELECT * FROM @Trn_VencAbonos))
				  BEGIN 
					 UPDATE Trn_Vencimientos
					 SET  VrAbonado = v.VrAbonado + dv.VrAbono
					 FROM Trn_Vencimientos v, @Trn_VencAbonos dv
					 WHERE v.TipDoc = dv.TipDoc and v.Factura = dv.Factura and v.IdCia = dv.IdCiaFac
				  END

				end

				IF(@NumProc = @ItemProc)
				BEGIN
					select top 1 @observ = Observacion FROM @Trn_DevFcr  WHERE TipDoc = @TipDev and Devolucion = @Devolucion and IdCia = @IdCia
					INSERT INTO #LogTraEspFacturas(
					Numero,Fecha,EstadoProc,Observacion,TimeSys,IdUsuario,Nombre,Tipo
					)
					SELECT 
					@NumProc,t1.Fecha,1,@observ,t1.TimeSys,t1.IdUsuario,u.Usuario,'DEVOLUCION'
					FROM @Trn_DevFcr as t1
					left join adm_Usuarios u on u.IdUsuario = t1.IdUsuario
					WHERE t1.TipDev = @TipDev and t1.Devolucion = @Devolucion and t1.IdCia = @IdCia
				END

				SELECT @ItemProc = @ItemProc + 1
				
				INSERT INTO #LogTraEspFacReservas(
				Numero,Item,TipFac,Factura,IdCia,Item,TipoReg,FechaFact,TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion,Cantidad,VrServicio,VrUnitario,VrCosto,
				TarifaIva,VrImpuesto,TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3,CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,
				pVehiculo,TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef,IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet,VrRetencion,
				TarifaIca,VrReteIca,Comentarios
				)
				SELECT
				@NumProc,@item,TipDoc,Factura,IdCia,Item,TipoReg,FechaFact,TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion,Cantidad,VrServicio,VrUnitario,VrCosto,
				TarifaIva,VrImpuesto,TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3,CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,
				pVehiculo,TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef,IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet,VrRetencion,
				TarifaIca,VrReteIca,EstadoItem
				FROM Trn_TRaEspFAcReservas where TipDoc = @TipDoc and Factura = @Factura and IdCia = @IdCia

			FETCH NEXT FROM dvfactcursor INTO @TipDev,@Devolucion,@IdCia, @TipFac,@Factura,@IdCiaDoc,@fecdev,@IdCliente,@VrNeto,@modalidad
			END
			CLOSE dvfactcursor
			DEALLOCATE dvfactcursor
			
			SELECT * FROM #LogTraEspFacturas
			SELECT * FROM #LogTraEspFacReservas

			COMMIT TRAN
		END TRY
        BEGIN CATCH
			ROLLBACK TRAN
			DECLARE @ErrorMessage NVARCHAR(4000);
			DECLARE @ErrorSeverity INT;
			DECLARE @ErrorState INT;

			SELECT 
			@ErrorMessage = ERROR_MESSAGE(),
			@ErrorSeverity = ERROR_SEVERITY(),
			@ErrorState = ERROR_STATE();
			RAISERROR(
			@ErrorMessage, -- Message text.
			@ErrorSeverity, -- Severity.
			@ErrorState -- State.
			);
		END CATCH
RETURN 0
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[paWcfSeInsPreFacturas]
	@Trn_Facturas [dbo].[dataTypeTrn_Facturas] READONLY,
	@Trn_TraEspFacReservas [dbo].[dataTypeTrn_TraEspFacReservas] READONLY,
	@Trn_TraEspFacResVehiculos [dbo].[dataTypeTrn_TraEspFacResVehiculos] READONLY,
	@Trn_DocMemo [dbo].[dataTypeTrn_DocMemo] READONLY,
	@Trn_TraEspAuxFactura [dbo].[dataTypeTrn_TraEspAuxFactura] READONLY,
	@Trn_RecAfavor [dbo].[dataTypeTrn_RecAfavor] READONLY,
	@Trn_VencAbonos [dbo].[dataTypeTrn_VencAbonos] READONLY,
	@Trn_Vencimientos [dbo].[dataTypeTrn_Vencimientos] READONLY,
	@Trn_DetCuentas [dbo].[dataTypeTrn_DetCuentas] READONLY,
	@Trn_Comprobantes [dbo].[dataTypeTrn_Comprobantes] READONLY,
	@Trn_ComDetalle [dbo].[dataTypeTrn_ComDetalle] READONLY,
	@Trn_NiifComp [dbo].[dataTypeTrn_NiifComp] READONLY,
	@Trn_NiifDetalle [dbo].[dataTypeNiifDetalle] READONLY,
	@operacion [varchar](1)
WITH EXECUTE AS CALLER
AS
DECLARE @TipDocPre VARCHAR(3)
DECLARE @TipDoc VARCHAR(3) --En esta variable se guarda el consecutivo del documento aprobación
DECLARE @Cia VARCHAR(2) --En esta variable se guarda el consecutivo del documento aprobación
DECLARE @Numero INT --En esta variable se guarda el consecutivo del documento aprobación
declare @FechaFac smalldatetime
declare @OpcUco VARCHAR
	BEGIN TRAN
		BEGIN TRY		 
			
			IF(@operacion = 'i')
			BEGIN
				--OPCION DE UNIFICAR CONSECUTIVOS DE PREFACTURAS CON LAS FACTURAS
				SELECT @OpcUco  = Valor FROM adm_Opciones WHERE IdOpc = 'UCO' 
				IF(@OpcUco = '1')
					SELECT @TipDocPre = TipDoc, @TipDoc = CodigoPreFact FROM @Trn_Facturas
				ELSE 
					SELECT @TipDocPre = TipDoc, @TipDoc = TipDoc FROM @Trn_Facturas
				----

				SELECT TOP 1  @Cia = IdCia, @FechaFac = Fecha FROM @Trn_Facturas
				SELECT @Numero = Numero + 1  FROM TiposDocCons where IdDoc = @TipDoc AND IdCia = @Cia

				IF(@Numero > 0)
				BEGIN
					IF(@OpcUco = '1')
					begin
						UPDATE TiposDocCons SET Numero = @Numero WHERE IdDoc = @TipDoc AND IdCia = @Cia
						UPDATE TiposDocCons SET Numero = @Numero WHERE IdDoc = @TipDocPre AND IdCia = @Cia
					end
					else
						UPDATE TiposDocCons SET Numero = @Numero WHERE IdDoc = @TipDocPre AND IdCia = @Cia
				END
				ELSE
				BEGIN
					SELECT @Numero = 1
					IF(@OpcUco = '1')
					begin
						INSERT INTO TiposDocCons VALUES (@TipDoc,@Cia,0,0,0,0,NULL,'',@Numero,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
						INSERT INTO TiposDocCons VALUES (@TipDocPre,@Cia,0,0,0,0,NULL,'',@Numero,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
					end
					else
						INSERT INTO TiposDocCons VALUES (@TipDocPre,@Cia,0,0,0,0,NULL,'',@Numero,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
				END
			
				IF(EXISTS(SELECT * FROM @Trn_Facturas))
				BEGIN
				INSERT INTO Trn_Facturas(
				TipDoc,Factura,IdCia,Fecha,IdConcepto,IdCliente,IdAgencia,FechaVence,VrSubTotal,VrDescuento,VrImpuesto,VrRetencion,VrReteICA,
				VrReteIVA,VrFletes,VrOtros,VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal,VrFaltantes,VrAnticipos,VrNeto,VrAplicado,Cantidad,
				CantPuntos,PuntosAcum,BaseImp,BaseRet,BaseIca,BaseRiv,TarifaIva,TarifaRet,TarifaIca,TarifaRiv,CodTarIva,CodTarRet,CodTarIca,
				CodTarRiv,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom,DirEnvio,IdLocEnv,DiasEntraga,NitContac,NomContac,TelContac,emlContac,
				CargoContac,IdForma,DetallePago,MulPlazos,IdPlazo,CdMney,NitEmpTrans,EmpTrans,pVehiculo,CdConductor,CdRuta,TipPed,Pedido,IdCiaPed,
				TipRem,Remision,IdCiaRem,TipCot,Cotizacion,IdCiaCot,FecPedido,AutzaMora,AutzaCupo,Modalidad,KmtVehic,ZonaFrontera,PesoTotal,
				UnidTotal,VolTotal,CantFalt,VrCostoRem,VrCostoAfi,CodAutoRet,OrigenAdd,TipCom,Comprobante,IdCiaCom,Anulado,NumDev,FecDev,Observacion,
				IdEstado,TimeSys,FecUpdate,IdCiaCrea,IdUsuario,VrImpCons,VrReteCREE,TarifaRtc,CodTarRtc,Parqueadero,FecCuotaParq,BaseIvaObsq,VrIvaObsequio,
				VrImpCarbono,TipoFE,FechaFE,BaseIvaIgp,VrIvaIngProd,CodTarArf,TarifaArf,VrAutRetFte,CodTarAri,TarifaAri,VrAutRetIca
				)
				SELECT
				@TipDocPre,@Numero,@Cia,Fecha,IdConcepto,IdCliente,IdAgencia,FechaVence,VrSubTotal,VrDescuento,VrImpuesto,VrRetencion,VrReteICA,
				VrReteIVA,VrFletes,VrOtros,VrCargos,VrOtrDcto,VrCostos,VrSobretasa,VrImpGlobal,VrFaltantes,VrAnticipos,VrNeto,VrAplicado,Cantidad,
				CantPuntos,PuntosAcum,BaseImp,BaseRet,BaseIca,BaseRiv,TarifaIva,TarifaRet,TarifaIca,TarifaRiv,CodTarIva,CodTarRet,CodTarIca,
				CodTarRiv,IdCCosto,IdSubCos,IdVend,TarifaCom,CodTarCom,DirEnvio,IdLocEnv,DiasEntraga,NitContac,NomContac,TelContac,emlContac,
				CargoContac,IdForma,DetallePago,MulPlazos,IdPlazo,CdMney,NitEmpTrans,EmpTrans,pVehiculo,CdConductor,CdRuta,TipPed,Pedido,IdCiaPed,
				TipRem,Remision,IdCiaRem,TipCot,Cotizacion,IdCiaCot,FecPedido,AutzaMora,AutzaCupo,Modalidad,KmtVehic,ZonaFrontera,PesoTotal,
				UnidTotal,VolTotal,CantFalt,VrCostoRem,VrCostoAfi,CodAutoRet,OrigenAdd,TipCom,Comprobante,IdCiaCom,Anulado,NumDev,FecDev,Observacion,
				IdEstado,TimeSys,FecUpdate,IdCiaCrea,IdUsuario,VrImpCons,VrReteCREE,TarifaRtc,CodTarRtc,Parqueadero,FecCuotaParq,BaseIvaObsq,VrIvaObsequio,
				VrImpCarbono,TipoFE,FechaFE,BaseIvaIgp,VrIvaIngProd,CodTarArf,TarifaArf,VrAutRetFte,CodTarAri,TarifaAri,VrAutRetIca
				FROM @Trn_Facturas
				END 

				IF(EXISTS(SELECT * FROM @Trn_TraEspFacReservas))
				BEGIN
				INSERT INTO Trn_TraEspFacReservas(
				TipDoc,Factura,IdCia,Item,TipoReg,FechaFact,TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion,Cantidad,VrServicio,VrUnitario,VrCosto,
				TarifaIva,VrImpuesto,TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3,CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,
				pVehiculo,TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef,IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet,VrRetencion,
				TarifaIca,VrReteIca,EstadoItem
				)
				SELECT 
				@TipDocPre,@Numero,@Cia,Item,TipoReg,FechaFact,TipRes,Reserva,IdCiaRes,ItemRes,FecReserva,Descripcion,Cantidad,VrServicio,VrUnitario,VrCosto,
				TarifaIva,VrImpuesto,TarifaDct,VrDescuento,DocCliente,Referencia1,Referencia2,Referencia3,CdConcepto,CdCCosto,CdSubCos,NitTercero,CdAgencia,
				pVehiculo,TipoAfiVehic,IdOrigen,IdDestino,Anulado,TipDocRef,NumDocRef,IdCiaRef,FecDocRef,CodTarDct,CodTarRet,CodTarIca,TarifaRet,VrRetencion,
				TarifaIca,VrReteIca,EstadoItem
				FROM @Trn_TraEspFacReservas
				END

				IF(EXISTS(SELECT * FROM @Trn_TraEspFacResVehiculos))
				BEGIN
				INSERT INTO Trn_TraEspFacResVehiculos(
				TipDoc,Factura,IdCIa,Item,TipRes,Reserva,IdCIaRes,ItemRes,IdVehiculo,TipoAfil,VrRecorrido
				)
				SELECT
				@TipDocPre,@Numero,@Cia,Item,TipRes,Reserva,IdCIaRes,ItemRes,IdVehiculo,TipoAfil,VrRecorrido
				FROM @Trn_TraEspFacResVehiculos
				END

				IF(EXISTS(SELECT * FROM @Trn_TraEspAuxFactura))
				BEGIN
				INSERT INTO Trn_TraEspAuxFactura(
				TipFac,Factura,IdCiaFac,Resolucion,Rango,FechaResl,Prefijo,TipDocPf,PreFactura,IdCiaPf,CodigoPreFact
				)
				SELECT 
				@TipDocPre,@Numero,@Cia,Resolucion,Rango,FechaResl,Prefijo,TipDocPf,PreFactura,IdCiaPf,CodigoPreFact
				FROM @Trn_TraEspAuxFactura
				END 
			END	

			SELECT @Numero

			COMMIT TRAN
		END TRY
        BEGIN CATCH
			ROLLBACK TRAN
			DECLARE @ErrorMessage NVARCHAR(4000);
			DECLARE @ErrorSeverity INT;
			DECLARE @ErrorState INT;

			SELECT 
			@ErrorMessage = ERROR_MESSAGE(),
			@ErrorSeverity = ERROR_SEVERITY(),
			@ErrorState = ERROR_STATE();
			RAISERROR(
			@ErrorMessage, -- Message text.
			@ErrorSeverity, -- Severity.
			@ErrorState -- State.
			);
		END CATCH
RETURN 0
GO

IF(SELECT COUNT(IdOpc) FROM adm_Opciones WHERE IdOpc = 'IAT') <= 0
BEGIN 
	INSERT INTO adm_Opciones (IdOpc, Opcion, TipoDato, Valor, NivUp, nModulo)
	VALUES ('IAT', 'IMPUESTO DE AVISOS / TABLEROS  Y BOMBERIL EN FACTURACION TRANSPORTE ESPECIAL', 'BOOLEAN', 0, 4, 'TRAES')
END

