GO
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_DevFcr]    Script Date: 11/12/2024 16:20:44 ******/
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, IdCuenta, 
					Detalle, VrDebito, VrCredito,
					CASE -- IdTercer
						WHEN IdVehiculo = '0' THEN IdTercero
						ELSE (
							ISNULL(	
								(
									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
								)
							)
						)
					END, 
					CASE -- IdVehiculo
						WHEN IdVehiculo = '0' THEN IdVehiculo
						ELSE (
							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
						)
					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
