
GO
/****** Object:  StoredProcedure [dbo].[paWcfSeInsMsvFuec]    Script Date: 23/08/2024 10:30:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[paWcfSeInsMsvFuec]
	-- @Trn_TraEspFuec [dbo].[dataTypeTrn_TraEspFuec] READONLY,
	@Trn_TraEspFuecDetalle [dbo].[dataTypeTrn_TraEspFuecDetalle] READONLY,
	@Trn_TraEspFuecAnexo [dbo].[dataTypeTrn_TraEspFuecAnexo] READONLY,
	@Trn_TraEspFuecCndtores [dbo].[dataTypeTrn_TraEspFuecCndtores] READONLY,
	@operacion [varchar](1)
WITH EXECUTE AS CALLER
AS
DECLARE @Documento INT --Esta variable guarda el número de consecutivo del Fuec
DECLARE @TipDoc VARCHAR(3) --Esta variable guarda el tipo de documento del Fuec
DECLARE @IdCia VARCHAR(4) --Esta variable guarda la compañia del Fuec
--declare @item int
	BEGIN TRAN
		BEGIN TRY
		
			CREATE TABLE #LogFuecDetalle(
			TipDocFuec varchar(3) NOT NULL,
			Fuec int NOT NULL,
			IdCiaFuec char(2) NOT NULL,
			IdVehiculo varchar(10) NOT NULL,
			TipDocRes varchar(3) NOT NULL,
			Reservas int NOT NULL,
			IdCiaRes char(2) NOT NULL,
			ItemRes int NOT NULL
			)

			--declare @NumProc int = 1
			declare @TipDocu varchar(3)
			declare @Fuec INT
			declare @CiaFuec varchar(2)
			declare @IdVehiculo varchar(10)
			declare @TipDocRes varchar(3)
			declare @Reservas int
			declare @IdCiaRes char(2)
			declare @ItemRes int
			--esta variable para ir asignando el consecutivo fuec
			declare @Resolucion varchar(30)
			declare @ConsecutivoFUEC int = 0
			declare @_TipDocCOE varchar(3) ='COE'
			declare @_COE INT = 0
			declare @_CiaCOE char(2) ='00'
			declare @TipDocCOE varchar(3)
			declare @COE INT
			declare @CiaCOE char(2)
			declare @TipDocPgr varchar(3)
			declare @NumPgr INT
			declare @IdCiaPgr char(2)
			declare @ItemPgr INT
			--

			--DECLARE fueccursor CURSOR
			--FOR SELECT TipDoc,Fuec,IdCia,IdVehiculo,TipDocCnt,Contrato,CiaCnt,TipDocPgr,NumPgr,IdCiaPgr,ItemPgr FROM @Trn_TraEspFuec order by TipDocCnt, Contrato, CiaCnt
			--OPEN fueccursor
			--FETCH NEXT FROM fueccursor INTO @TipDocu,@Fuec,@CiaFuec,@IdVehiculo,@TipDocCOE,@COE,@CiaCOE,@TipDocPgr,@NumPgr,@IdCiaPgr,@ItemPgr
			--WHILE @@FETCH_STATUS = 0
			--BEGIN

			--	--Seleccionar Variables
			--	IF(@operacion = 'i')
			--	BEGIN
			--		SELECT TOP 1 @TipDoc = @TipDocu, @IdCia = @CiaFuec
			--		SELECT @Documento = (Numero + 1 ), @Resolucion = Resolucion FROM TiposDocCons where IdDoc = @TipDoc AND IdCia = @IdCia

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

			--	--INSERT NO-EXISTE RECORDS
			--	IF(@operacion = 'i')
			--	BEGIN
			--		--Para asignar el númro de consecutivo
			--		if((@_TipDocCOE =  @TipDocCOE) AND (@_COE = @COE) AND (@_CiaCOE = @CiaCOE))
			--		begin
			--			SET @ConsecutivoFUEC = @ConsecutivoFUEC + 1;
			--		end
			--		ELSE
			--		BEGIN
			--			set @ConsecutivoFUEC = 0
			--			SELECT Top 1  @ConsecutivoFUEC = (ISNULL(MAX(Consecutivo), 0) + 1), @_TipDocCOE = TipDocCnt, @_COE = Contrato,  @_CiaCOE = CiaCnt  FROM Trn_TraEspFuec where ((TipDocCnt + CONVERT(varchar, Contrato) + CiaCnt)IN(@TipDocCOE + CONVERT(varchar, @COE) + @CiaCOE)) group by Consecutivo, TipDocCnt, Contrato, CiaCnt order by Consecutivo desc
			--			IF(@ConsecutivoFUEC = 0)
			--			BEGIN
			--				SET @ConsecutivoFUEC = 1
			--			END
			--			IF(@ConsecutivoFUEC = 1)
			--			BEGIN
			--				SET  @_TipDocCOE = @TipDocCOE
			--				SET @_COE = @COE
			--				SET @_CiaCOE = @CiaCOE
			--			END
			--		END

			--		IF(EXISTS(SELECT * FROM @Trn_TraEspFuec))
			--		begin
			--		--this.txtvNumResolucion.Text + Convert.ToDateTime(this.msktxtFecFUECTES.Text).Year.ToString() + this.txtvNumCOE.Text.PadLeft(4, '0') + Fuec.Fuec.Consecutivo.ToString().PadLeft(4, '0');
			--		INSERT INTO Trn_TraEspFuec(
			--		TipDoc, Fuec, IdCia, Numero, Fecha, FechaInicio, FechaFin, CdCarga, IdVehiculo, IdConductor, IdConductor2, IdConductor3, IdPoseedor, 
			--		IdRuta, CdTipRuta, IdOrigen, IdDestino, Modalidad, CantPasajeros, CodTarRet,CodTarIca, VrPresupuesto, VrCobro, VrPagos, VrCargos, VrDctos,
			--		VrIva, VrRetencion, VrReteIca, Cantidad, Peso, TipDocPgr, NumPgr, IdCiaPgr, ItemPgr, TipDocCnt, Contrato, CiaCnt, OrigenAdd, Anulado, FecDev, 
			--		IdEstado,TimeSys, FecUpdate, IdCiaCrea, IdUsuario, Consecutivo, Itinerario, FuecParcial, ComenParcial
			--		)
			--		SELECT 
			--		@TipDoc,@Documento,@IdCia,SUBSTRING(convert(varchar, (@Resolucion + convert(varchar, DATEPART(YEAR, Fecha))  + (right(('0000' + convert(varchar, Contrato)), 4)) + (right(('0000' + convert(varchar, @ConsecutivoFUEC)), 4)))), 1, 21), Fecha, FechaInicio, FechaFin, CdCarga, IdVehiculo, IdConductor, IdConductor2, IdConductor3, IdPoseedor, 
			--		IdRuta, CdTipRuta, IdOrigen, IdDestino, Modalidad, CantPasajeros, CodTarRet,CodTarIca, VrPresupuesto, VrCobro, VrPagos, VrCargos, VrDctos,
			--		VrIva, VrRetencion, VrReteIca, Cantidad, Peso, TipDocPgr, NumPgr, IdCiaPgr, ItemPgr, TipDocCnt, Contrato, CiaCnt, OrigenAdd, Anulado, FecDev, 
			--		IdEstado,TimeSys, FecUpdate, IdCiaCrea, IdUsuario, @ConsecutivoFUEC, Itinerario, FuecParcial, ComenParcial
			--		FROM @Trn_TraEspFuec f WHERE f.TipDoc= @TipDocu and f.Fuec = @Fuec and f.IdCia = @CiaFuec
			--		end
			
			--		IF(EXISTS(SELECT * FROM @Trn_TraEspFuecDetalle))
			--		begin
			--		select @TipDocRes = TipRes, @Reservas = Reserva, @IdCiaRes = IdCiaRes, @ItemRes = ItemRes FROM @Trn_TraEspFuecDetalle df WHERE df.TipDoc = @TipDocu and df.Fuec = @Fuec and df.IdCia = @CiaFuec
			--		INSERT INTO Trn_TraEspFuecDetalle(
			--		TipDoc, Fuec, IdCia, Item, TipRes, Reserva, IdCiaRes, ItemRes, NumPasajeros, PesoNeto, VrCobro, VrPagos, Referencia1, Referencia2, Referencia3,
			--		CdTipServicio, EsRutaCliente, Kilometros, DirOrigen, FecOrigen, DirDestino, FecDestino
			--		) 
			--		SELECT 
			--		@TipDoc,@Documento,@IdCia,Item, TipRes, Reserva, IdCiaRes, ItemRes, NumPasajeros, PesoNeto, VrCobro, VrPagos, Referencia1, Referencia2, Referencia3,
			--		CdTipServicio, EsRutaCliente, Kilometros, DirOrigen, FecOrigen, DirDestino, FecDestino
			--		FROM @Trn_TraEspFuecDetalle df WHERE df.TipDoc = @TipDocu and df.Fuec = @Fuec and df.IdCia = @CiaFuec
			--		end
					
			--		IF(EXISTS(SELECT * FROM @Trn_TraEspFuecAnexo))
			--		begin
			--		INSERT INTO Trn_TraEspFuecAnexo(
			--		TipDoc, Fuec, IdCia, TipContrato, IdContrato, ObjContrato, DescripCarga, Observacion, RespViaje, VehConvenio, EmpresaVehCon
			--		) 
			--		SELECT 
			--		@TipDoc,@Documento,@IdCia,TipContrato, IdContrato, ObjContrato, DescripCarga, Observacion, RespViaje, VehConvenio, EmpresaVehCon
			--		FROM @Trn_TraEspFuecAnexo df WHERE df.TipDoc = @TipDocu and df.Fuec = @Fuec and df.IdCia = @CiaFuec
			--		end

			--		IF(EXISTS(SELECT * FROM @Trn_TraEspFuecCndtores))
			--		begin
			--		INSERT INTO Trn_TraEspFuecCndtores(
			--		TipDoc, Fuec, IdCia, Item, IdConductor) 
			--		SELECT 
			--		@TipDoc,@Documento,@IdCia,Item, IdConductor
			--		FROM @Trn_TraEspFuecCndtores df WHERE df.TipDoc = @TipDocu and df.Fuec = @Fuec and df.IdCia = @CiaFuec
			--		end

			--		--ACTUALIZAR PORGRAMACIONES 
			--		UPDATE Trn_TraEspProgramaDet
			--		SET TipDocFuec = @TipDoc,NumFuec = @Documento, IdCiaFuec = @CiaFuec
			--		FROM Trn_TraEspProgramaDet
			--		--@Trn_TraEspFuecDetalle t3
			--		WHERE TipDoc = 'PGR' and Programa = @NumPgr and IdCia = @IdCiaPgr and Item = @ItemPgr;

			--		INSERT INTO #LogFuecDetalle(TipDocFuec,Fuec,IdCiaFuec,IdVehiculo,TipDocRes,Reservas,IdCiaRes,ItemRes)
			--		select @TipDocu,@Fuec,@CiaFuec,@IdVehiculo,@TipDocRes,@Reservas,@IdCiaRes,@ItemRes
			--	END
			--FETCH NEXT FROM fueccursor INTO @TipDocu,@Fuec,@CiaFuec,@IdVehiculo,@TipDocCOE,@COE,@CiaCOE,@TipDocPgr,@NumPgr,@IdCiaPgr,@ItemPgr
			--END
			--CLOSE fueccursor
			--DEALLOCATE fueccursor

			SELECT * FROM #LogFuecDetalle
			--SELECT * FROM #LogProgDetalle
			--select @NumProc

			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
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspFuec]    Script Date: 23/08/2024 9:53:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[paWcfSeInsTrn_TraEspFuec]
	-- @Trn_TraEspFuec [dbo].[dataTypeTrn_TraEspFuec] READONLY,
	@Trn_TraEspFuecAnexo [dbo].[dataTypeTrn_TraEspFuecAnexo] READONLY,
	@Trn_TraEspFuecDetalle [dbo].[dataTypeTrn_TraEspFuecDetalle] READONLY,
	@Trn_TraEspFuecCndtores [dbo].[dataTypeTrn_TraEspFuecCndtores] READONLY,
	@operacion [varchar](1)
WITH EXECUTE AS CALLER
AS
	DECLARE @Documento INT --Esta variable guarda el número de consecutivo del Fuec
	DECLARE @TipDoc VARCHAR(3) --Esta variable guarda el tipo de documento del Fuec
	DECLARE @IdCia VARCHAR(4) --Esta variable guarda la compañia del Fuec
	declare @item int
	declare @consecutivo int = 0
	declare @numcontrato int
	declare @idciacnt varchar(4)

	BEGIN TRAN

	BEGIN TRY

		--Seleccionar Variables
		IF(@operacion = 'i')
		begin
			--SELECT TOP 1 @TipDoc = TipDoc, @IdCia = IdCia,@idciacnt = CiaCnt, @numcontrato = Contrato 
			--FROM @Trn_TraEspFuec

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

			select @consecutivo = (ISNULL(MAX(Consecutivo),0) + 1) 
			from Trn_TraEspFuec 
			where TipDocCnt = 'COE' 
				and Contrato = @numcontrato 
				AND CiaCnt = @idciacnt

			IF(@Documento <> '' OR @Documento is not null)
				UPDATE TiposDocCons 
				SET Numero = @Documento 
				WHERE IdDoc = @TipDoc 
					and IdCia = @IdCia
			ELSE
			BEGIN
				SELECT @Documento = 1

				INSERT INTO TiposDocCons 
				VALUES (@TipDoc,@IdCia,0,0,0,0,NULL,'',@Documento,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
			END
		end

		--Seleccionar Variables
		--IF(@operacion = 'u')
		--begin
		--	SELECT TOP 1 @TipDoc = TipDoc, @IdCia = IdCia, @Documento = Fuec FROM @Trn_TraEspFuec
		--end

		--UPDATE SI-EXISTE RECORDS
		IF(@operacion = 'u')
		BEGIN

			--if(EXISTS(SELECT * FROM @Trn_TraEspFuec))
			--begin
			--	UPDATE Trn_TraEspFuec
			--	SET 
			--		TipDoc = t2.TipDoc, Fuec = t2.Fuec, IdCia = t2.IdCia,
			--		Numero = t2.Numero, Fecha = t2.Fecha, FechaInicio = t2.FechaInicio,
			--		FechaFin = t2.FechaFin, CdCarga = t2.CdCarga, IdVehiculo = t2.IdVehiculo,
			--		IdConductor = t2.IdConductor, IdConductor2 = t2.IdConductor2, IdConductor3 = t2.IdConductor3,
			--		IdPoseedor = t2.IdPoseedor, IdRuta = t2.IdRuta,
			--		CdTipRuta = t2.CdTipRuta, IdOrigen = t2.IdOrigen, IdDestino = t2.IdDestino,
			--		Modalidad = t2.Modalidad, CantPasajeros = t2.CantPasajeros, CodTarRet = t2.CodTarRet,
			--		CodTarIca = t2.CodTarIca, VrPresupuesto = t2.VrPresupuesto, VrCobro = t2.VrCobro,
			--		VrPagos = t2.VrPagos, VrCargos = t2.VrCargos, VrDctos = t2.VrDctos,
			--		VrIva = t2.VrIva, VrRetencion = t2.VrRetencion, VrReteIca = t2.VrReteIca,
			--		Cantidad = t2.Cantidad, Peso = t2.Peso, TipDocPgr = t2.TipDocPgr, 
			--		NumPgr = t2.NumPgr, IdCiaPgr = t2.IdCiaPgr, ItemPgr = t2.ItemPgr,
			--		TipDocCnt = t2.TipDocCnt, Contrato = t2.Contrato, CiaCnt = t2.CiaCnt,
			--		OrigenAdd = t2.OrigenAdd, Anulado = t2.Anulado, FecDev = t2.FecDev,
			--		IdEstado = t2.IdEstado, TimeSys = t2.TimeSys, FecUpdate = t2.FecUpdate,
			--		IdCiaCrea = t2.IdCiaCrea, IdUsuario = t2.IdUsuario, Consecutivo = t2.Consecutivo,
			--		Itinerario=t2.Itinerario, FuecParcial = t2.FuecParcial, ComenParcial = t2.ComenParcial,
			--		Qr = t2.Qr
			--	FROM 
			--		Trn_TraEspFuec t1
			--	JOIN 
			--		@Trn_TraEspFuec t2 
			--		ON t1.TipDoc = t2.TipDoc 
			--		and t1.Fuec = t2.Fuec 
			--		and t1.IdCia = t2.IdCia
			--end

			if(EXISTS(SELECT * FROM @Trn_TraEspFuecAnexo))
			begin
				UPDATE Trn_TraEspFuecAnexo
				SET 
					TipDoc = t2.TipDoc, Fuec = t2.Fuec, IdCia = t2.IdCia,
					TipContrato = t2.TipContrato, IdContrato = t2.IdContrato, ObjContrato = t2.ObjContrato,
					DescripCarga = t2.DescripCarga, Observacion = t2.Observacion, RespViaje = t2.RespViaje,
					VehConvenio=t2.VehConvenio, EmpresaVehCon = t2.EmpresaVehCon
				FROM 
					Trn_TraEspFuecAnexo t1
				JOIN 
					@Trn_TraEspFuecAnexo t2 
					ON t1.TipDoc = t2.TipDoc 
					and t1.Fuec = t2.Fuec 
					and t1.IdCia = t2.IdCia
			end

			if(EXISTS(SELECT * FROM @Trn_TraEspFuecDetalle))
			begin
				SELECT TOP 1 @TipDoc = TipDoc, @IdCia = IdCia, @Documento = Fuec 
				FROM @Trn_TraEspFuecDetalle

				select @item = isnull(MAX(Item),0) 
				from Trn_TraEspFuecDetalle 
				where TipDoc = @TipDoc 
					and Fuec = @Documento 
					and IdCia = @IdCia

				--actualizar los que vienen en el tipo de dato y coincida con los que ya están en la tabla
				UPDATE Trn_TraEspFuecDetalle
				SET 
					TipDoc = t2.TipDoc, Fuec = t2.Fuec, IdCia = t2.IdCia,
					Item = t2.Item, TipRes = t2.TipRes, Reserva = t2.Reserva,
					IdCiaRes = t2.IdCiaRes, ItemRes = t2.ItemRes, NumPasajeros = t2.NumPasajeros,
					PesoNeto = t2.PesoNeto, VrCobro = t2.VrCobro, VrPagos = t2.VrPagos,
					Referencia1 = t2.Referencia1, Referencia2 = t2.Referencia2, Referencia3 = t2.Referencia3,
					CdTipServicio = t2.CdTipServicio, EsRutaCliente = t2.EsRutaCliente, Kilometros = t2.Kilometros,
					DirOrigen = t2.DirOrigen, FecOrigen = t2.FecOrigen, DirDestino = t2.DirDestino,
					FecDestino = t2.FecDestino
				FROM 
					Trn_TraEspFuecDetalle t1
				JOIN 
					@Trn_TraEspFuecDetalle t2 
					ON t1.TipDoc = t2.TipDoc 
					and t1.Fuec = t2.Fuec 
					and t1.IdCia = t2.IdCia 
					and t1.Item = t2.Item
				WHERE 
					t1.TipDoc = t2.TipDoc 
					and t1.Fuec = t2.Fuec 
					and t1.IdCia = t2.IdCia 
					and t1.Item = t2.Item

				--Inserta los que no existen
				INSERT INTO Trn_TraEspFuecDetalle(
					TipDoc,Fuec,IdCia,Item,TipRes,Reserva,
					IdCiaRes,ItemRes,NumPasajeros,PesoNeto,VrCobro,VrPagos,
					Referencia1,Referencia2,Referencia3,CdTipServicio,EsRutaCliente,Kilometros,
					DirOrigen,FecOrigen,DirDestino,FecDestino
				) 
				SELECT 
					@TipDoc, @Documento, @IdCia, (@Item + ROW_NUMBER() OVER(ORDER BY Item ASC)),TipRes, Reserva, 
					IdCiaRes, ItemRes, NumPasajeros, PesoNeto, VrCobro, VrPagos,
					Referencia1, Referencia2, Referencia3, CdTipServicio, EsRutaCliente, Kilometros,
					DirOrigen, FecOrigen, DirDestino, FecDestino
				FROM 
					@Trn_TraEspFuecDetalle
				WHERE 
					(TipDoc + Convert(varchar,Fuec) + IdCia + Convert(varchar,Item)) NOT IN(SELECT(TipDoc + Convert(varchar, Fuec) + IdCia + Convert(varchar,Item)) FROM Trn_TraEspFuecDetalle)
				
				--Eliminar los que no existen en lo que envian
				delete from Trn_TraEspFuecDetalle
				WHERE TipDoc = @TipDoc 
					and Fuec = @Documento 
					and IdCia = @IdCia 
					and Item NOT IN(SELECT Item FROM @Trn_TraEspFuecDetalle)
			end

			if(EXISTS(SELECT * FROM @Trn_TraEspFuecAnexo))
			begin

				UPDATE Trn_TraEspFuecAnexo
				SET 
					TipDoc = t2.TipDoc, Fuec = t2.Fuec, IdCia = t2.IdCia, 
					TipContrato = t2.TipContrato, IdContrato = t2.IdContrato, ObjContrato = t2.ObjContrato,
					DescripCarga = t2.DescripCarga, Observacion = t2.Observacion, RespViaje = t2.RespViaje,
					VehConvenio=t2.VehConvenio, EmpresaVehCon=t2.EmpresaVehCon
				FROM 
					Trn_TraEspFuecAnexo t1
				JOIN 
					@Trn_TraEspFuecAnexo t2 
					ON t1.TipDoc = t2.TipDoc 
					and t1.Fuec = t2.Fuec 
					and t1.IdCia = t2.IdCia
			end

			if(EXISTS(SELECT top 1 Fuec FROM @Trn_TraEspFuecCndtores))
				begin
					SELECT TOP 1 @TipDoc = TipDoc, @IdCia = IdCia, @Documento = Fuec 
					FROM @Trn_TraEspFuecCndtores

					select @item = isnull(MAX(Item),0) 
					from @Trn_TraEspFuecCndtores 
					where TipDoc = @TipDoc 
						and Fuec = @Documento 
						and IdCia = @IdCia

					--actualizar los que vienen en el tipo de dato y coincida con los que ya están en la tabla
					UPDATE Trn_TraEspFuecCndtores
					SET 
						TipDoc = t2.TipDoc, Fuec = t2.Fuec, IdCia = t2.IdCia, 
						Item = t2.Item, IdConductor = t2.IdConductor
					FROM 
						Trn_TraEspFuecCndtores t1
					JOIN 
						@Trn_TraEspFuecCndtores t2 
						ON t1.TipDoc = t2.TipDoc 
						and t1.Fuec = t2.Fuec 
						and t1.IdCia = t2.IdCia 
						and t1.Item = t2.Item
					WHERE 
						t1.TipDoc = t2.TipDoc 
						and t1.Fuec = t2.Fuec 
						and t1.IdCia = t2.IdCia 
						and t1.Item = t2.Item
					
					--Eliminar los que no existen en lo que envian
					delete from Trn_TraEspFuecCndtores
					WHERE TipDoc = @TipDoc 
						and Fuec = @Documento 
						and IdCia = @IdCia 
						and Item NOT IN(SELECT Item FROM @Trn_TraEspFuecCndtores)
					
					--Inserta los que no existen
					INSERT INTO Trn_TraEspFuecCndtores(
						TipDoc, Fuec, IdCia, Item, IdConductor
					) 
					SELECT 
						@TipDoc, @Documento, @IdCia, (@item + ROW_NUMBER() OVER(ORDER BY Item ASC)), IdConductor
					FROM 
						@Trn_TraEspFuecCndtores
					WHERE 
						(TipDoc + Convert(varchar, Fuec) + IdCia + Convert(varchar,Item)) NOT IN(SELECT(TipDoc + Convert(varchar, Fuec) + IdCia+Convert(varchar, Item)) FROM Trn_TraEspFuecCndtores)		
				end

		END

		--INSERT NO-EXISTE RECORDS
		IF(@operacion = 'i')
			BEGIN

			--IF(EXISTS(SELECT * FROM @Trn_TraEspFuec))
			--begin
			--	INSERT INTO Trn_TraEspFuec(
			--		TipDoc, Fuec, IdCia, Numero, Fecha, FechaInicio,
			--		FechaFin, CdCarga, IdVehiculo, IdConductor, IdConductor2, IdConductor3,
			--		IdPoseedor, IdRuta, CdTipRuta, IdOrigen, IdDestino, Modalidad,
			--		CantPasajeros, CodTarRet, CodTarIca, VrPresupuesto, VrCobro, VrPagos, 
			--		VrCargos, VrDctos, VrIva, VrRetencion, VrReteIca, Cantidad, 
			--		Peso, TipDocPgr, NumPgr, IdCiaPgr, ItemPgr, TipDocCnt, 
			--		Contrato, CiaCnt, OrigenAdd, Anulado, FecDev, IdEstado, 
			--		TimeSys, FecUpdate, IdCiaCrea, IdUsuario, Consecutivo, Itinerario, 
			--		FuecParcial, ComenParcial, Qr
			--	)
			--	SELECT 
			--		@TipDoc,@Documento,@IdCia,Numero,Fecha,FechaInicio,
			--		FechaFin,CdCarga,IdVehiculo,IdConductor,IdConductor2,IdConductor3,
			--		IdPoseedor,IdRuta,CdTipRuta,IdOrigen,IdDestino,Modalidad,
			--		CantPasajeros,CodTarRet,CodTarIca,VrPresupuesto,VrCobro,VrPagos,
			--		VrCargos,VrDctos,VrIva,VrRetencion,VrReteIca,Cantidad,
			--		Peso,TipDocPgr,NumPgr,IdCiaPgr,ItemPgr,TipDocCnt,
			--		Contrato,CiaCnt,OrigenAdd,Anulado,FecDev,IdEstado,
			--		TimeSys,FecUpdate,IdCiaCrea,IdUsuario,@consecutivo,Itinerario,
			--		FuecParcial,ComenParcial, Qr
			--	FROM 
			--		@Trn_TraEspFuec
			--end

			IF(EXISTS(SELECT * FROM @Trn_TraEspFuecAnexo))
			begin
				INSERT INTO Trn_TraEspFuecAnexo(
					TipDoc,Fuec,IdCia,TipContrato,IdContrato,ObjContrato,
					DescripCarga,Observacion,RespViaje,VehConvenio,EmpresaVehCon
				)
				SELECT 
					@TipDoc,@Documento,@IdCia,TipContrato,IdContrato,ObjContrato,
					DescripCarga,Observacion,RespViaje,VehConvenio,EmpresaVehCon
				FROM 
					@Trn_TraEspFuecAnexo
			end

			IF(EXISTS(SELECT * FROM @Trn_TraEspFuecDetalle))
			begin
				INSERT INTO Trn_TraEspFuecDetalle(
					TipDoc,Fuec,IdCia,Item,TipRes,Reserva,
					IdCiaRes,ItemRes,NumPasajeros,PesoNeto,VrCobro,VrPagos,
					Referencia1,Referencia2,Referencia3,CdTipServicio,EsRutaCliente,Kilometros,
					DirOrigen,FecOrigen,DirDestino,FecDestino
				) 
				SELECT 
					@TipDoc,@Documento,@IdCia,Item,TipRes,Reserva,
					IdCiaRes,ItemRes,NumPasajeros,PesoNeto,VrCobro,VrPagos,
					Referencia1,Referencia2,Referencia3,CdTipServicio,EsRutaCliente,Kilometros,
					DirOrigen,FecOrigen,DirDestino,FecDestino
				FROM 
					@Trn_TraEspFuecDetalle
			end

			IF(EXISTS(SELECT TOP 1 Fuec FROM @Trn_TraEspFuecCndtores))
			begin
				INSERT INTO Trn_TraEspFuecCndtores(
					TipDoc,Fuec,IdCia,Item,IdConductor
				) 
				SELECT 
					@TipDoc,@Documento,@IdCia,Item, IdConductor
				FROM 
					@Trn_TraEspFuecCndtores
			end

			--Actualizar Programación-Detalles
			--UPDATE 
			--	Trn_TraEspProgramaDet
			--SET 
			--	TipDocFuec = @TipDoc,NumFuec = @Documento, IdCiaFuec = @IdCia
			--FROM 
			--	Trn_TraEspProgramaDet t1, @Trn_TraEspFuec t2, @Trn_TraEspFuecDetalle t3
			--WHERE 
			--	t1.TipDoc = 'PGR' 
			--	and t1.Programa = t2.NumPgr 
			--	and t1.IdCia = t2.IdCiaPgr 
			--	and t1.TipDocRes = t3.TipRes 
			--	and t1.Reserva = t3.Reserva 
			--	and t1.IdCiaRes = t3.IdCiaRes 
			--	and t1.ItemRes = t3.ItemRes
			END

		--DELETE RECORDS
		IF(@operacion = 'd')
		BEGIN
			declare @Fuec int

			--select @TipDoc = TipDoc, @IdCia = IdCia,  @Fuec = Fuec 
			--from @Trn_TraEspFuec

			DELETE FROM Trn_TraEspFuecDetalle
			WHERE TipDoc = @TipDoc 
				and Fuec = @Fuec 
				and IdCia = @IdCia

			DELETE FROM Trn_TraEspFuecAnexo 
			WHERE TipDoc = @TipDoc 
				and Fuec = @Fuec 
				and IdCia = @IdCia

			DELETE FROM Trn_TraEspFuec 
			WHERE TipDoc = @TipDoc 
				and Fuec = @Fuec 
				and IdCia = @IdCia

			DELETE FROM Trn_TraEspFuecCndtores 
			WHERE TipDoc = @TipDoc 
				and Fuec = @Fuec 
				and IdCia = @IdCia
		END

		--ANULAR RECORDS
		IF(@operacion = 'a')
		BEGIN
			--select @TipDoc = TipDoc, @IdCia = IdCia,  @Documento = Fuec 
			--from @Trn_TraEspFuec

			UPDATE Trn_TraEspFuec 
			SET IdEstado = '9999', Anulado = 1
			WHERE TipDoc = @TipDoc 
				and Fuec = @Documento 
				and IdCia = @IdCia

			--UPDATE Trn_TraEspProgramaDet
			--SET TipDocFuec = 'FUE',NumFuec = 0, IdCiaFuec = '00'
			--FROM Trn_TraEspProgramaDet t1, @Trn_TraEspFuec t2
			--WHERE t1.TipDocFuec = 'FUE' 
			--	and t1.NumFuec = t2.Fuec 
			--	and t1.IdCiaFuec = t2.IdCia
		END

		SELECT @Documento

		COMMIT TRAN
	END TRY

	BEGIN CATCH
		ROLLBACK TRAN

		DECLARE 
			@ErrorMessage NVARCHAR(4000),
			@ErrorSeverity INT,
			@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
/****** Object:  StoredProcedure [dbo].[paWcfSeInsMsvTrn_DevFcr]    Script Date: 23/08/2024 16:15:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER 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
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_DevFcr]    Script Date: 23/08/2024 16:40:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER 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

-- ==========================================================================================================================================================================================================================================================================
	-- Creamos la Columna 
	IF EXISTS (
		SELECT * FROM INFORMATION_SCHEMA.TABLES 
        WHERE TABLE_SCHEMA = 'dbo' 
        AND TABLE_NAME = 'Trn_TraEspFuec'
	)
	BEGIN
		ALTER TABLE Trn_TraEspFuec
		ALTER COLUMN Qr IMAGE NULL
	END
	ELSE
	BEGIN
		ALTER TABLE Trn_TraEspFuec
		ADD Qr IMAGE NULL
	END

	-- Eliminamos el tipo 
	DROP TYPE dataTypeTrn_TraEspFuec
	DROP TYPE dataTypeTrn_DevFcr

	-- Creamos el tipo 
	CREATE TYPE [dbo].[dataTypeTrn_TraEspFuec] AS TABLE(
		[TipDoc] [varchar](3) NULL DEFAULT ('FUE'),
		[Fuec] [int] NULL DEFAULT ((0)),
		[IdCia] [char](2) NULL DEFAULT ('01'),
		[Numero] [varchar](21) NULL,
		[Fecha] [datetime] NULL,
		[FechaInicio] [smalldatetime] NULL,
		[FechaFin] [smalldatetime] NULL,
		[CdCarga] [varchar](15) NULL,
		[IdVehiculo] [varchar](10) NULL,
		[IdConductor] [varchar](16) NULL,
		[IdConductor2] [varchar](16) NULL,
		[IdConductor3] [varchar](16) NULL,
		[IdPoseedor] [varchar](16) NULL,
		[IdRuta] [varchar](4) NULL,
		[CdTipRuta] [varchar](15) NULL,
		[IdOrigen] [varchar](8) NULL,
		[IdDestino] [varchar](8) NULL,
		[Modalidad] [varchar](10) NULL,
		[CantPasajeros] [decimal](14, 4) NULL DEFAULT ((0)),
		[CodTarRet] [varchar](4) NULL,
		[CodTarIca] [varchar](4) NULL,
		[VrPresupuesto] [money] NULL DEFAULT ((0)),
		[VrCobro] [money] NULL DEFAULT ((0)),
		[VrPagos] [money] NULL DEFAULT ((0)),
		[VrCargos] [money] NULL DEFAULT ((0)),
		[VrDctos] [money] NULL DEFAULT ((0)),
		[VrIva] [money] NULL DEFAULT ((0)),
		[VrRetencion] [money] NULL DEFAULT ((0)),
		[VrReteIca] [money] NULL DEFAULT ((0)),
		[Cantidad] [decimal](14, 4) NULL DEFAULT ((0)),
		[Peso] [decimal](14, 4) NULL DEFAULT ((0)),
		[TipDocPgr] [varchar](3) NULL DEFAULT ('0'),
		[NumPgr] [int] NULL DEFAULT ((0)),
		[IdCiaPgr] [char](2) NULL DEFAULT ('00'),
		[ItemPgr] [int] NULL DEFAULT ((0)),
		[TipDocCnt] [varchar](3) NULL,
		[Contrato] [int] NULL,
		[CiaCnt] [char](2) NULL,
		[OrigenAdd] [varchar](10) NULL,
		[Anulado] [bit] NULL DEFAULT ((0)),
		[FecDev] [smalldatetime] NULL,
		[IdEstado] [varchar](4) NULL,
		[TimeSys] [smalldatetime] NULL,
		[FecUpdate] [smalldatetime] NULL,
		[IdCiaCrea] [char](2) NULL DEFAULT ('01'),
		[IdUsuario] [varchar](11) NULL,
		[Consecutivo] [int] NULL,
		[Itinerario] [varchar](1000) NULL,
		[FuecParcial] [bit] NULL DEFAULT ((0)),
		[ComenParcial] [varchar](500) NULL,
		[Qr] [varchar](max) NULL
	)

	CREATE TYPE [dbo].[dataTypeTrn_DevFcr] AS TABLE(
		[TipDev] [varchar](3) NOT NULL,
		[Devolucion] [int] NOT NULL,
		[IdCia] [char](2) NOT NULL,
		[Fecha] [smalldatetime] NOT NULL,
		[IdConcepto] [varchar](4) NOT NULL,
		[TipDoc] [varchar](3) NOT NULL,
		[Factura] [int] NOT NULL,
		[IdCiaDoc] [char](2) NOT NULL,
		[FecDoc] [smalldatetime] NOT NULL,
		[IdCliente] [varchar](16) NOT NULL,
		[IdAgencia] [varchar](16) NOT NULL,
		[VrSubTotal] [money] NOT NULL,
		[VrDescuento] [money] NOT NULL,
		[VrImpuesto] [money] NOT NULL,
		[VrRetencion] [money] NOT NULL,
		[VrReteICA] [money] NOT NULL,
		[VrReteIVA] [money] NOT NULL,
		[VrFletes] [money] NOT NULL,
		[VrOtros] [money] NOT NULL,
		[VrCargos] [money] NOT NULL,
		[VrOtrDcto] [money] NOT NULL,
		[VrCostos] [money] NOT NULL,
		[VrSobretasa] [money] NOT NULL,
		[VrImpGlobal] [money] NOT NULL,
		[VrFaltantes] [money] NOT NULL,
		[VrAnticipos] [money] NOT NULL,
		[VrNeto] [money] NOT NULL,
		[Cantidad] [decimal](14, 4) NOT NULL,
		[CantPuntos] [decimal](14, 4) NOT NULL,
		[BaseImp] [money] NOT NULL,
		[BaseRet] [money] NOT NULL,
		[IdCCosto] [varchar](16) NOT NULL,
		[IdSubCos] [varchar](16) NOT NULL,
		[IdVend] [varchar](16) NOT NULL,
		[TarifaCom] [decimal](14, 4) NOT NULL,
		[CodTarCom] [varchar](4) NULL,
		[IdLocEnv] [varchar](8) NOT NULL,
		[Pedido] [int] NOT NULL,
		[IdCiaPed] [char](2) NOT NULL,
		[Remision] [int] NOT NULL,
		[IdCiaRem] [char](2) NOT NULL,
		[Cotizacion] [int] NOT NULL,
		[IdCiaCot] [char](2) NOT NULL,
		[FecPedido] [smalldatetime] NULL,
		[Modalidad] [varchar](10) NOT NULL,
		[ModdDev] [varchar](10) NOT NULL,
		[PlacaVehic] [varchar](10) NULL,
		[KmtVehic] [int] NOT NULL,
		[ZonaFrontera] [int] NOT NULL,
		[OrigenAdd] [varchar](10) NOT NULL,
		[TipCom] [varchar](3) NOT NULL,
		[Comprobante] [int] NOT NULL,
		[IdCiaCom] [char](2) NOT NULL,
		[Observacion] [varchar](250) NULL,
		[IdEstado] [varchar](4) NOT NULL,
		[TimeSys] [smalldatetime] NOT NULL,
		[FecUpdate] [smalldatetime] NULL,
		[IdCiaCrea] [char](2) NOT NULL,
		[IdUsuario] [varchar](11) NOT NULL,
		[VrImpCons] [money] NOT NULL,
		[VrReteCREE] [money] NOT NULL,
		[TarifaRtc] [decimal](14, 4) NOT NULL,
		[CodTarRtc] [varchar](4) NULL,
		[BaseIvaObsq] [money] NOT NULL,
		[VrIvaObsequio] [money] NOT NULL,
		[VrImpCarbono] [money] NOT NULL,
		[DevMasivo] [int] NOT NULL,
		[NumRecibo] [int] NOT NULL,
		[CdCiaRec] [char](2) NULL,
		[CdMotDev] [varchar](4) NULL,
		[BaseIvaIgp] [money] NOT NULL,
		[VrIvaIngProd] [money] NOT NULL,
		[TarifaArf] [decimal](14, 4) NOT NULL,
		[VrAutRetFte] [money] NOT NULL,
		[TarifaAri] [decimal](14, 4) NOT NULL,
		[VrAutRetIca] [money] NOT NULL,
		[VrImpuBA] [money] NOT NULL,
		[VrImpuCUP] [money] NOT NULL,
		[ImpAviTab] [money] NULL,
		[TarifaAvta] [decimal](14, 4) NULL,
		[VrBomberil] [money] NULL,
		[TarifaBom] [decimal](14, 4) NULL,
		[VrAutRetIat] [money] NULL,
		[VrAutRetBom] [money] NULL
	)
-- ==========================================================================================================================================================================================================================================================================

GO
/****** Object:  StoredProcedure [dbo].[paWcfSeInsMsvTrn_DevFcr]    Script Date: 23/08/2024 16:32:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER 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
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_DevFcr]    Script Date: 23/08/2024 16:40:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER 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
-- ==========================================================================================================================================================================================================================================================================

/****** Object:  StoredProcedure [dbo].[paWcfSeLisTrn_TraEspCuenta]    Script Date: 23/08/2024 10:53:11 ******/
DROP PROCEDURE [dbo].[paWcfSeLisTrn_TraEspCuenta]
GO
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspOrdenPagoGIE]    Script Date: 23/08/2024 10:53:11 ******/
DROP PROCEDURE [dbo].[paWcfSeInsTrn_TraEspOrdenPagoGIE]
GO
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspOrdenPago]    Script Date: 23/08/2024 10:53:11 ******/
DROP PROCEDURE [dbo].[paWcfSeInsTrn_TraEspOrdenPago]
GO
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspFuec]    Script Date: 23/08/2024 10:53:11 ******/
DROP PROCEDURE [dbo].[paWcfSeInsTrn_TraEspFuec]
GO
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspDevOdpGIE]    Script Date: 23/08/2024 10:53:11 ******/
DROP PROCEDURE [dbo].[paWcfSeInsTrn_TraEspDevOdpGIE]
GO
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspDevOdp]    Script Date: 23/08/2024 10:53:11 ******/
DROP PROCEDURE [dbo].[paWcfSeInsTrn_TraEspDevOdp]
GO
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_DevFcr]    Script Date: 23/08/2024 10:53:11 ******/
DROP PROCEDURE [dbo].[paWcfSeInsTrn_DevFcr]
GO
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_DevFcr]    Script Date: 23/08/2024 10:53:11 ******/
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
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspDevOdp]    Script Date: 23/08/2024 10:53:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[paWcfSeInsTrn_TraEspDevOdp]
	@Trn_TraEspDevOdp [dbo].[dataTypeTrn_TraEspDevOdp] READONLY,
	@Trn_EgrFactura [dbo].[dataTypeTrn_EgrFactura] READONLY,
	@Trn_TraEspAntAbonos [dbo].[dataTypeTrn_TraEspAntAbonos] READONLY,
	@Trn_Pagos [dbo].[dataTypeTrn_Pagos] READONLY,
	@Trn_TraEspOrdenReservas [dbo].[dataTypeTrn_TraEspOrdenReservas] 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 @TipDev VARCHAR(3) --En esta variable se guarda el consecutivo del documento aprobaci�n
	DECLARE @CiaDev VARCHAR(2) --En esta variable se guarda el consecutivo del documento aprobaci�n
	DECLARE @Dev INT --En esta variable se guarda el consecutivo del documento aprobaci�n

	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

	BEGIN TRAN

	BEGIN TRY		 
		declare @fecdev smalldatetime

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

			IF(@Dev > 0)
				UPDATE TiposDocCons 
				SET Numero = @Dev 
				WHERE IdDoc = @TipDev AND IdCia = @CiaDev
			ELSE
			BEGIN
				SELECT @Dev = 1

				INSERT INTO TiposDocCons 
				VALUES (@TipDev,@CiaDev,0,0,0,0,NULL,'',@Dev,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
			END
			--John Roa--DIEGO ROMERO DICE QUE SI NO EXISTE EL COMPROBANTE CON ELMISMO NOMBRE DE DOC DEVOLUCI�N INSERTA UN COMPROBANTE CON EL  TIPCOM SEA IIGUAL AL TIPDEV, en la tabla TiposCom(tipos de comprobantes)
			--es INACTIVO = 1, PARA PODER INSERTAR EN EGRFACTURA ESTE TIPCOM
			IF(NOT EXISTS(SELECT IdCom FROM TiposCom where IdCom = @TipDev))
			BEGIN
				INSERT INTO TiposCom 
				VALUES (@TipDev,'DEVOLUCION DE ORDEN DE PAGO ESPECIAL',0,0,0,1,CURRENT_TIMESTAMP,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_TraEspDevOdp))
			BEGIN
				INSERT INTO Trn_TraEspDevOdp (
					TipDev, Devolucion, IdCia, Fecha, IdConcepto, TipDoc,
					OrdPago, IdCiaDoc, FecDoc, IdVehiculo, IdPoseedor, IdConductor,
					CxPagar, ModdDev, TipCom, Comprobante, IdCiaCom, Observacion,
					IdEstado, OrigenAdd, TimeSys, FecUpdate, IdCiaCrea, IdUsuario
				)
				SELECT 
					@TipDev, @Dev, @CiaDev, Fecha, IdConcepto, TipDoc,
					OrdPago, IdCiaDoc, FecDoc, IdVehiculo, IdPoseedor, IdConductor,
					CxPagar, ModdDev, @TipComp, @Comprobante, @IdCiaComp, Observacion,
					IdEstado, OrigenAdd, TimeSys, FecUpdate, IdCiaCrea, IdUsuario
				FROM 
					@Trn_TraEspDevOdp
			END 

			IF(EXISTS(SELECT * FROM @Trn_EgrFactura))
			BEGIN
				INSERT INTO Trn_EgrFactura (
					TipCom, Comprobante, IdCia, Item, Fecha, TipFac, 
					Factura, IdCiaFac, ItemFac, IdProveedor, IdCuenta, VrAbono,
					EsEgreso, ItemCom, pVehiculo, VehPropio, TipDev, NumDev,
					DetAbono
				)
				SELECT 
					@TipDev, @Dev, @CiaDev, Item, Fecha, TipFac,
					Factura, IdCiaFac, ItemFac, IdProveedor, IdCuenta, VrAbono,
					EsEgreso, ItemCom, pVehiculo, VehPropio, @TipDev, @Dev,
					DetAbono
				FROM 
					@Trn_EgrFactura
			END 

			IF(EXISTS(SELECT * FROM @Trn_TraEspAntAbonos))
			BEGIN
				INSERT INTO Trn_TraEspAntAbonos (
					TipDoc, Documento, IdCia, Item, Fecha, TipAnt, 
					Anticipo, IdCiaAnt, VrAbono, TipoAplica, Detalle, CdCuentaAnt
				)
				SELECT 
					@TipDev, @Dev, @CiaDev, Item, Fecha, TipAnt, 
					Anticipo, IdCiaAnt, (-VrAbono), TipoAplica, Detalle, CdCuentaAnt
				FROM 
					@Trn_TraEspAntAbonos
			END

			IF(EXISTS(SELECT * FROM @Trn_Pagos))
			BEGIN
				INSERT INTO Trn_Pagos (
					TipDoc, Documento, IdCia, Item, Fecha, IdForma, 
					Detalle, VrPagado, VrCambio, EsCaja, IdBanco, NitCliente, 
					CdAgencia, NumForma, FecForma, CtaForma, Beneficiario, Referncia1, 
					Referncia2, CdLocal, NumAutoriza, VrDenom, Cantidad, TipDenom, 
					TipRef, DocRef, IdCiaRef, ItemDoc, CdCta, IdUsuario,
					CdProducto, FE_Ticket, Cant_Gals, PrecioBase, PrecioUnit, ConsCP, 
					CodCueCons, PrecioPub, RefVehiculo, RefNumVeh
				)
				SELECT 
					@TipDev, @Dev, @CiaDev, Item, Fecha, IdForma, 
					Detalle, VrPagado, VrCambio, EsCaja, IdBanco, NitCliente, 
					CdAgencia, NumForma, FecForma, CtaForma, Beneficiario, Referncia1, 
					Referncia2, CdLocal, NumAutoriza, VrDenom, Cantidad, TipDenom, 
					TipRef, DocRef, IdCiaRef, ItemDoc, CdCta, IdUsuario,
					CdProducto, FE_Ticket, Cant_Gals, PrecioBase, PrecioUnit, ConsCP, 
					CodCueCons, PrecioPub, RefVehiculo, RefNumVeh
				FROM 
					@Trn_Pagos
			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, @TipDev, @Dev, 
					@CiaDev, 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, Item, Fecha, 
					(
						SELECT DISTINCT 
							ISNULL(T.IdCuenta, TCD.IdCuenta)
						FROM 
							@Trn_TraEspOrdenReservas AS O
						LEFT JOIN 
							TarifCuentas T ON T.IdTarifa = (
								CASE TCD.Detalle
									WHEN 'RETENCION EN LA FUENTE' THEN O.CodTarRet
									WHEN 'RETENCION ICA' THEN O.CodTarIca
								END
							)
							AND T.TipDoc = 'OPE'
					) AS IdCuenta,
					Detalle, VrDebito, VrCredito, IdTercero, IdVehiculo, IdCCosto, 
					IdSubCos, VrBase, TarifaBase, @TipDev, @Dev, @CiaDev,
					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 AS TCD
			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, 
					@CiaDev, C.Fecha, C.IdTercero, C.VrTotal, C.IdCta, C.EnEfectivo, 
					C.NumCheque, C.FecCheque, @TipDev, @Dev, @CiaDev, 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, 
					@CiaDev, N.Item, N.Fecha, N.IdCuenta, N.Detalle, N.VrDebito, 
					N.VrCredito, N.IdTercero, N.IdVehiculo,N.IdCCosto, N.IdSubCos, N.VrBase, 
					N.TarifaBase, @TipDev, @Dev, @CiaDev, 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
			--Se actualiza la orden de pago con los datos de la devoluci�n
			update Trn_TraEspOrdenPago 
			set NumDev = @Dev, FecDev = @fecdev,Anulado = 1  
			from Trn_TraEspOrdenPago t1, @Trn_TraEspDevOdp t2
			where t1.TipDoc = t2.TipDoc 
				and t1.OrdPago = t2.OrdPago 
				and t1.IdCia = t2.IdCiaDoc 
			  
			--se actualiza la Trn_Comfactura
			update Trn_ComFactura 
			set VrAbonado =  t1.VrAbonado + t2.VrAbono 
			from Trn_ComFactura t1, @Trn_EgrFactura t2
			where t1.TipFac = t2.TipFac 
				and t1.Factura = t2.Factura 
				and t1.IdCia = t2.Idcia 
				and t1.Item = t2.ItemFac and t1.IdProveedor = t2.IdProveedor

			--Actualiza los items de la programaci�n detalle de cada reserva agregada en la Orden de Pago y que se devuelve
			UPDATE Trn_TraEspProgramaDet
			SET TipDocOdp = 'OPE',NumOdp = 0, IdCiaOdp = '00'
			FROM Trn_TraEspProgramaDet t1, @Trn_TraEspDevOdp t2
			WHERE t1.TipDocOdp = 'OPE' 
				and t1.NumOdp = t2.OrdPago 
				and t1.IdCiaOdp = t2.IdCiaDoc 

			--Actualizar item de Reservas al estado en el que se encontraba antes de cuando le realizaron la Orden de Pago
			UPDATE Trn_TraEspResDetalle
			SET EstadoItem = t.EstadoItem
			FROM Trn_TraEspResDetalle r, @Trn_TraEspOrdenReservas t
			WHERE r.TipDoc = t.TipRes 
				and r.Reserva = t.Reserva 
				and r.IdCia = t.IdCiaRes 
				and r.Item = t.ItemRes

			--actualiza los anticipos(restar) para que quede como estaba antes de hacer la Orden de Pago
			UPDATE Trn_TraEspAnticipos
			SET VrAbonado = t2.VrAbono - VrAbonado
			FROM Trn_TraEspAnticipos t1, @Trn_TraEspAntAbonos t2
			WHERE t1.TipDoc = t2.TipAnt 
				and t1.Anticipo = t2.Anticipo 
				and t1.IdCia = t2.IdCiaAnt

		end

		SELECT @Dev, @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
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspDevOdpGIE]    Script Date: 23/08/2024 10:53:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[paWcfSeInsTrn_TraEspDevOdpGIE]
	@Trn_TraEspDevOdp [dbo].[dataTypeTrn_TraEspDevOdp] READONLY,
	@Trn_EgrFactura [dbo].[dataTypeTrn_EgrFactura] READONLY,
	@Trn_TraEspAntAbonos [dbo].[dataTypeTrn_TraEspAntAbonos] READONLY,
	@Trn_Pagos [dbo].[dataTypeTrn_Pagos] READONLY,
	@Trn_TraEspOrdenReservas [dbo].[dataTypeTrn_TraEspOrdenReservas] 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 @TipDev VARCHAR(3) --En esta variable se guarda el consecutivo del documento aprobaci�n
	DECLARE @CiaDev VARCHAR(2) --En esta variable se guarda el consecutivo del documento aprobaci�n
	DECLARE @Dev INT --En esta variable se guarda el consecutivo del documento aprobaci�n

	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

	BEGIN TRAN
		
	BEGIN TRY		 
		declare @fecdev smalldatetime

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

			IF(@Dev > 0)
				UPDATE TiposDocCons 
				SET Numero = @Dev 
				WHERE IdDoc = @TipDev 
					AND IdCia = @CiaDev
			ELSE
			BEGIN
				SELECT @Dev = 1

				INSERT INTO TiposDocCons 
				VALUES (@TipDev,@CiaDev,0,0,0,0,NULL,'',@Dev,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
			END
			--John Roa--DIEGO ROMERO DICE QUE SI NO EXISTE EL COMPROBANTE CON ELMISMO NOMBRE DE DOC DEVOLUCI�N INSERTA UN COMPROBANTE CON EL  TIPCOM SEA IIGUAL AL TIPDEV, en la tabla TiposCom(tipos de comprobantes)
			--es INACTIVO = 1, PARA PODER INSERTAR EN EGRFACTURA ESTE TIPCOM
			IF(NOT EXISTS(SELECT IdCom FROM TiposCom where IdCom = @TipDev))
			BEGIN
				INSERT INTO TiposCom 
				VALUES (@TipDev,'DEVOLUCION DE ORDEN DE PAGO ESPECIAL',0,0,0,1,CURRENT_TIMESTAMP,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_TraEspDevOdp))
			BEGIN
				INSERT INTO Trn_TraEspDevOdp (
					TipDev, Devolucion, IdCia, Fecha, IdConcepto, TipDoc,
					OrdPago, IdCiaDoc, FecDoc, IdVehiculo, IdPoseedor, IdConductor,
					CxPagar, ModdDev, TipCom, Comprobante, IdCiaCom, Observacion,
					IdEstado, OrigenAdd, TimeSys, FecUpdate, IdCiaCrea, IdUsuario
				)
				SELECT 
					@TipDev, @Dev, @CiaDev, Fecha, IdConcepto, TipDoc, 
					OrdPago, IdCiaDoc, FecDoc, IdVehiculo, IdPoseedor, IdConductor, 
					CxPagar, ModdDev, @TipComp, @Comprobante, @IdCiaComp, Observacion, 
					IdEstado, OrigenAdd, TimeSys, FecUpdate, IdCiaCrea, IdUsuario
				FROM 
					@Trn_TraEspDevOdp
			END 

			IF(EXISTS(SELECT * FROM @Trn_EgrFactura))
			BEGIN
				INSERT INTO Trn_EgrFactura (
					TipCom, Comprobante, IdCia, Item, Fecha, TipFac, Factura,
					IdCiaFac, ItemFac, IdProveedor, IdCuenta, VrAbono, EsEgreso, 
					ItemCom, pVehiculo, VehPropio, TipDev, NumDev, DetAbono
				)
				SELECT 
					@TipDev, @Dev, @CiaDev, Item, Fecha, TipFac, 
					Factura, IdCiaFac, ItemFac, IdProveedor, IdCuenta, VrAbono,
					EsEgreso, ItemCom, pVehiculo, VehPropio, @TipDev, @Dev, 
					DetAbono
				FROM 
					@Trn_EgrFactura
			END 

			IF(EXISTS(SELECT * FROM @Trn_TraEspAntAbonos))
			BEGIN
				INSERT INTO Trn_TraEspAntAbonos (
					TipDoc, Documento, IdCia, Item, Fecha, TipAnt,
					Anticipo, IdCiaAnt, VrAbono, TipoAplica, Detalle, CdCuentaAnt
				)
				SELECT 
					@TipDev, @Dev, @CiaDev, Item, Fecha, TipAnt, 
					Anticipo, IdCiaAnt, (-VrAbono), TipoAplica, Detalle, CdCuentaAnt
				FROM 
					@Trn_TraEspAntAbonos
			END

			IF(EXISTS(SELECT * FROM @Trn_Pagos))
			BEGIN
				INSERT INTO Trn_Pagos (
					TipDoc, Documento, IdCia, Item, Fecha, IdForma, 
					Detalle, VrPagado, VrCambio, EsCaja, IdBanco, NitCliente, 
					CdAgencia, NumForma, FecForma, CtaForma, Beneficiario, Referncia1, 
					Referncia2, CdLocal, NumAutoriza, VrDenom, Cantidad, TipDenom, 
					TipRef, DocRef, IdCiaRef, ItemDoc, CdCta, IdUsuario,
					CdProducto, FE_Ticket, Cant_Gals, PrecioBase, PrecioUnit, ConsCP, 
					CodCueCons, PrecioPub, RefVehiculo, RefNumVeh
				)
				SELECT 
					@TipDev, @Dev, @CiaDev, Item, Fecha, IdForma, 
					Detalle, VrPagado, VrCambio, EsCaja, IdBanco, NitCliente, 
					CdAgencia, NumForma, FecForma, CtaForma, Beneficiario, Referncia1, 
					Referncia2, CdLocal, NumAutoriza, VrDenom, Cantidad, TipDenom, 
					TipRef, DocRef, IdCiaRef, ItemDoc, CdCta, IdUsuario,
					CdProducto, FE_Ticket, Cant_Gals, PrecioBase, PrecioUnit, ConsCP, 
					CodCueCons, PrecioPub, RefVehiculo, RefNumVeh
				FROM 
					@Trn_Pagos
			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, @TipDev, @Dev, 
					@CiaDev, 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, Item, Fecha, 
					(
						SELECT DISTINCT 
							ISNULL(T.IdCuenta, TCD.IdCuenta)
						FROM 
							@Trn_TraEspOrdenReservas AS O
						LEFT JOIN 
							TarifCuentas T ON T.IdTarifa = (
								CASE TCD.Detalle
									WHEN 'RETENCION EN LA FUENTE' THEN O.CodTarRet
									WHEN 'RETENCION ICA' THEN O.CodTarIca
								END
							)
							AND T.TipDoc = 'OPE'
					) AS IdCuenta,
					Detalle, VrDebito, VrCredito, IdTercero, IdVehiculo, IdCCosto, 
					IdSubCos, VrBase, TarifaBase, @TipDev, @Dev, @CiaDev,
					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 AS TCD
			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, 
					@CiaDev, C.Fecha, C.IdTercero, C.VrTotal, C.IdCta, C.EnEfectivo, 
					C.NumCheque, C.FecCheque, @TipDev, @Dev, @CiaDev, 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, 
					@CiaDev, N.Item, N.Fecha, N.IdCuenta, N.Detalle, N.VrDebito, 
					N.VrCredito, N.IdTercero, N.IdVehiculo,N.IdCCosto, N.IdSubCos, N.VrBase, 
					N.TarifaBase, @TipDev, @Dev, @CiaDev, 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
			--Se actualiza la orden de pago con los datos de la devoluci�n
			update Trn_TraEspOrdenPago 
			set NumDev = @Dev, FecDev = @fecdev,Anulado = 1  
			from Trn_TraEspOrdenPago t1, @Trn_TraEspDevOdp t2
			where t1.TipDoc = t2.TipDoc 
				and t1.OrdPago = t2.OrdPago 
				and t1.IdCia = t2.IdCiaDoc 
			  
			--se actualiza la Trn_Comfactura
			update Trn_ComFactura 
			set VrAbonado =  t1.VrAbonado + t2.VrAbono 
			from Trn_ComFactura t1, @Trn_EgrFactura t2
			where t1.TipFac = t2.TipFac 
				and t1.Factura = t2.Factura 
				and t1.IdCia = t2.Idcia 
				and t1.Item = t2.ItemFac 
				and t1.IdProveedor = t2.IdProveedor

			--Actualizar item de Reservas al estado en el que se encontraba antes de cuando le realizaron la Orden de Pago
			UPDATE Trn_TraEspResDetalle
			SET EstadoItem = t.EstadoItem
			FROM Trn_TraEspResDetalle r, @Trn_TraEspOrdenReservas t
			WHERE r.TipDoc = t.TipRes 
				and r.Reserva = t.Reserva 
				and r.IdCia = t.IdCiaRes 
				and r.Item = t.ItemRes

			--actualiza los anticipos(restar) para que quede como estaba antes de hacer la Orden de Pago
			UPDATE Trn_TraEspAnticipos
			SET VrAbonado = t2.VrAbono - VrAbonado
			FROM Trn_TraEspAnticipos t1, @Trn_TraEspAntAbonos t2
			WHERE t1.TipDoc = t2.TipAnt 
				and t1.Anticipo = t2.Anticipo 
				and t1.IdCia = t2.IdCiaAnt

		end

		SELECT @Dev,@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
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspFuec]    Script Date: 23/08/2024 10:53:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[paWcfSeInsTrn_TraEspFuec]
	@Trn_TraEspFuec [dbo].[dataTypeTrn_TraEspFuec] READONLY,
	@Trn_TraEspFuecAnexo [dbo].[dataTypeTrn_TraEspFuecAnexo] READONLY,
	@Trn_TraEspFuecDetalle [dbo].[dataTypeTrn_TraEspFuecDetalle] READONLY,
	@Trn_TraEspFuecCndtores [dbo].[dataTypeTrn_TraEspFuecCndtores] READONLY,
	@operacion [varchar](1)
WITH EXECUTE AS CALLER
AS
	DECLARE @Documento INT --Esta variable guarda el número de consecutivo del Fuec
	DECLARE @TipDoc VARCHAR(3) --Esta variable guarda el tipo de documento del Fuec
	DECLARE @IdCia VARCHAR(4) --Esta variable guarda la compañia del Fuec
	declare @item int
	declare @consecutivo int = 0
	declare @numcontrato int
	declare @idciacnt varchar(4)

	BEGIN TRAN

	BEGIN TRY

		--Seleccionar Variables
		IF(@operacion = 'i')
		begin
			SELECT TOP 1 @TipDoc = TipDoc, @IdCia = IdCia,@idciacnt = CiaCnt, @numcontrato = Contrato 
			FROM @Trn_TraEspFuec

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

			select @consecutivo = (ISNULL(MAX(Consecutivo),0) + 1) 
			from Trn_TraEspFuec 
			where TipDocCnt = 'COE' 
				and Contrato = @numcontrato 
				AND CiaCnt = @idciacnt

			IF(@Documento <> '' OR @Documento is not null)
				UPDATE TiposDocCons 
				SET Numero = @Documento 
				WHERE IdDoc = @TipDoc 
					and IdCia = @IdCia
			ELSE
			BEGIN
				SELECT @Documento = 1

				INSERT INTO TiposDocCons 
				VALUES (@TipDoc,@IdCia,0,0,0,0,NULL,'',@Documento,0,0,'','',1,1,1,0,1,CURRENT_TIMESTAMP,null,null,null,null)
			END
		end

		--Seleccionar Variables
		--IF(@operacion = 'u')
		--begin
		--	SELECT TOP 1 @TipDoc = TipDoc, @IdCia = IdCia, @Documento = Fuec FROM @Trn_TraEspFuec
		--end

		--UPDATE SI-EXISTE RECORDS
		IF(@operacion = 'u')
		BEGIN

			if(EXISTS(SELECT * FROM @Trn_TraEspFuec))
			begin
				UPDATE Trn_TraEspFuec
				SET 
					TipDoc = t2.TipDoc, Fuec = t2.Fuec, IdCia = t2.IdCia,
					Numero = t2.Numero, Fecha = t2.Fecha, FechaInicio = t2.FechaInicio,
					FechaFin = t2.FechaFin, CdCarga = t2.CdCarga, IdVehiculo = t2.IdVehiculo,
					IdConductor = t2.IdConductor, IdConductor2 = t2.IdConductor2, IdConductor3 = t2.IdConductor3,
					IdPoseedor = t2.IdPoseedor, IdRuta = t2.IdRuta,
					CdTipRuta = t2.CdTipRuta, IdOrigen = t2.IdOrigen, IdDestino = t2.IdDestino,
					Modalidad = t2.Modalidad, CantPasajeros = t2.CantPasajeros, CodTarRet = t2.CodTarRet,
					CodTarIca = t2.CodTarIca, VrPresupuesto = t2.VrPresupuesto, VrCobro = t2.VrCobro,
					VrPagos = t2.VrPagos, VrCargos = t2.VrCargos, VrDctos = t2.VrDctos,
					VrIva = t2.VrIva, VrRetencion = t2.VrRetencion, VrReteIca = t2.VrReteIca,
					Cantidad = t2.Cantidad, Peso = t2.Peso, TipDocPgr = t2.TipDocPgr, 
					NumPgr = t2.NumPgr, IdCiaPgr = t2.IdCiaPgr, ItemPgr = t2.ItemPgr,
					TipDocCnt = t2.TipDocCnt, Contrato = t2.Contrato, CiaCnt = t2.CiaCnt,
					OrigenAdd = t2.OrigenAdd, Anulado = t2.Anulado, FecDev = t2.FecDev,
					IdEstado = t2.IdEstado, TimeSys = t2.TimeSys, FecUpdate = t2.FecUpdate,
					IdCiaCrea = t2.IdCiaCrea, IdUsuario = t2.IdUsuario, Consecutivo = t2.Consecutivo,
					Itinerario=t2.Itinerario, FuecParcial = t2.FuecParcial, ComenParcial = t2.ComenParcial,
					Qr = t2.Qr
				FROM 
					Trn_TraEspFuec t1
				JOIN 
					@Trn_TraEspFuec t2 
					ON t1.TipDoc = t2.TipDoc 
					and t1.Fuec = t2.Fuec 
					and t1.IdCia = t2.IdCia
			end

			if(EXISTS(SELECT * FROM @Trn_TraEspFuecAnexo))
			begin
				UPDATE Trn_TraEspFuecAnexo
				SET 
					TipDoc = t2.TipDoc, Fuec = t2.Fuec, IdCia = t2.IdCia,
					TipContrato = t2.TipContrato, IdContrato = t2.IdContrato, ObjContrato = t2.ObjContrato,
					DescripCarga = t2.DescripCarga, Observacion = t2.Observacion, RespViaje = t2.RespViaje,
					VehConvenio=t2.VehConvenio, EmpresaVehCon = t2.EmpresaVehCon
				FROM 
					Trn_TraEspFuecAnexo t1
				JOIN 
					@Trn_TraEspFuecAnexo t2 
					ON t1.TipDoc = t2.TipDoc 
					and t1.Fuec = t2.Fuec 
					and t1.IdCia = t2.IdCia
			end

			if(EXISTS(SELECT * FROM @Trn_TraEspFuecDetalle))
			begin
				SELECT TOP 1 @TipDoc = TipDoc, @IdCia = IdCia, @Documento = Fuec 
				FROM @Trn_TraEspFuecDetalle

				select @item = isnull(MAX(Item),0) 
				from Trn_TraEspFuecDetalle 
				where TipDoc = @TipDoc 
					and Fuec = @Documento 
					and IdCia = @IdCia

				--actualizar los que vienen en el tipo de dato y coincida con los que ya están en la tabla
				UPDATE Trn_TraEspFuecDetalle
				SET 
					TipDoc = t2.TipDoc, Fuec = t2.Fuec, IdCia = t2.IdCia,
					Item = t2.Item, TipRes = t2.TipRes, Reserva = t2.Reserva,
					IdCiaRes = t2.IdCiaRes, ItemRes = t2.ItemRes, NumPasajeros = t2.NumPasajeros,
					PesoNeto = t2.PesoNeto, VrCobro = t2.VrCobro, VrPagos = t2.VrPagos,
					Referencia1 = t2.Referencia1, Referencia2 = t2.Referencia2, Referencia3 = t2.Referencia3,
					CdTipServicio = t2.CdTipServicio, EsRutaCliente = t2.EsRutaCliente, Kilometros = t2.Kilometros,
					DirOrigen = t2.DirOrigen, FecOrigen = t2.FecOrigen, DirDestino = t2.DirDestino,
					FecDestino = t2.FecDestino
				FROM 
					Trn_TraEspFuecDetalle t1
				JOIN 
					@Trn_TraEspFuecDetalle t2 
					ON t1.TipDoc = t2.TipDoc 
					and t1.Fuec = t2.Fuec 
					and t1.IdCia = t2.IdCia 
					and t1.Item = t2.Item
				WHERE 
					t1.TipDoc = t2.TipDoc 
					and t1.Fuec = t2.Fuec 
					and t1.IdCia = t2.IdCia 
					and t1.Item = t2.Item

				--Inserta los que no existen
				INSERT INTO Trn_TraEspFuecDetalle(
					TipDoc,Fuec,IdCia,Item,TipRes,Reserva,
					IdCiaRes,ItemRes,NumPasajeros,PesoNeto,VrCobro,VrPagos,
					Referencia1,Referencia2,Referencia3,CdTipServicio,EsRutaCliente,Kilometros,
					DirOrigen,FecOrigen,DirDestino,FecDestino
				) 
				SELECT 
					@TipDoc, @Documento, @IdCia, (@Item + ROW_NUMBER() OVER(ORDER BY Item ASC)),TipRes, Reserva, 
					IdCiaRes, ItemRes, NumPasajeros, PesoNeto, VrCobro, VrPagos,
					Referencia1, Referencia2, Referencia3, CdTipServicio, EsRutaCliente, Kilometros,
					DirOrigen, FecOrigen, DirDestino, FecDestino
				FROM 
					@Trn_TraEspFuecDetalle
				WHERE 
					(TipDoc + Convert(varchar,Fuec) + IdCia + Convert(varchar,Item)) NOT IN(SELECT(TipDoc + Convert(varchar, Fuec) + IdCia + Convert(varchar,Item)) FROM Trn_TraEspFuecDetalle)
				
				--Eliminar los que no existen en lo que envian
				delete from Trn_TraEspFuecDetalle
				WHERE TipDoc = @TipDoc 
					and Fuec = @Documento 
					and IdCia = @IdCia 
					and Item NOT IN(SELECT Item FROM @Trn_TraEspFuecDetalle)
			end

			if(EXISTS(SELECT * FROM @Trn_TraEspFuecAnexo))
			begin

				UPDATE Trn_TraEspFuecAnexo
				SET 
					TipDoc = t2.TipDoc, Fuec = t2.Fuec, IdCia = t2.IdCia, 
					TipContrato = t2.TipContrato, IdContrato = t2.IdContrato, ObjContrato = t2.ObjContrato,
					DescripCarga = t2.DescripCarga, Observacion = t2.Observacion, RespViaje = t2.RespViaje,
					VehConvenio=t2.VehConvenio, EmpresaVehCon=t2.EmpresaVehCon
				FROM 
					Trn_TraEspFuecAnexo t1
				JOIN 
					@Trn_TraEspFuecAnexo t2 
					ON t1.TipDoc = t2.TipDoc 
					and t1.Fuec = t2.Fuec 
					and t1.IdCia = t2.IdCia
			end

			if(EXISTS(SELECT top 1 Fuec FROM @Trn_TraEspFuecCndtores))
				begin
					SELECT TOP 1 @TipDoc = TipDoc, @IdCia = IdCia, @Documento = Fuec 
					FROM @Trn_TraEspFuecCndtores

					select @item = isnull(MAX(Item),0) 
					from @Trn_TraEspFuecCndtores 
					where TipDoc = @TipDoc 
						and Fuec = @Documento 
						and IdCia = @IdCia

					--actualizar los que vienen en el tipo de dato y coincida con los que ya están en la tabla
					UPDATE Trn_TraEspFuecCndtores
					SET 
						TipDoc = t2.TipDoc, Fuec = t2.Fuec, IdCia = t2.IdCia, 
						Item = t2.Item, IdConductor = t2.IdConductor
					FROM 
						Trn_TraEspFuecCndtores t1
					JOIN 
						@Trn_TraEspFuecCndtores t2 
						ON t1.TipDoc = t2.TipDoc 
						and t1.Fuec = t2.Fuec 
						and t1.IdCia = t2.IdCia 
						and t1.Item = t2.Item
					WHERE 
						t1.TipDoc = t2.TipDoc 
						and t1.Fuec = t2.Fuec 
						and t1.IdCia = t2.IdCia 
						and t1.Item = t2.Item
					
					--Eliminar los que no existen en lo que envian
					delete from Trn_TraEspFuecCndtores
					WHERE TipDoc = @TipDoc 
						and Fuec = @Documento 
						and IdCia = @IdCia 
						and Item NOT IN(SELECT Item FROM @Trn_TraEspFuecCndtores)
					
					--Inserta los que no existen
					INSERT INTO Trn_TraEspFuecCndtores(
						TipDoc, Fuec, IdCia, Item, IdConductor
					) 
					SELECT 
						@TipDoc, @Documento, @IdCia, (@item + ROW_NUMBER() OVER(ORDER BY Item ASC)), IdConductor
					FROM 
						@Trn_TraEspFuecCndtores
					WHERE 
						(TipDoc + Convert(varchar, Fuec) + IdCia + Convert(varchar,Item)) NOT IN(SELECT(TipDoc + Convert(varchar, Fuec) + IdCia+Convert(varchar, Item)) FROM Trn_TraEspFuecCndtores)		
				end

		END

		--INSERT NO-EXISTE RECORDS
		IF(@operacion = 'i')
			BEGIN

			IF(EXISTS(SELECT * FROM @Trn_TraEspFuec))
			begin
				INSERT INTO Trn_TraEspFuec(
					TipDoc, Fuec, IdCia, Numero, Fecha, FechaInicio,
					FechaFin, CdCarga, IdVehiculo, IdConductor, IdConductor2, IdConductor3,
					IdPoseedor, IdRuta, CdTipRuta, IdOrigen, IdDestino, Modalidad,
					CantPasajeros, CodTarRet, CodTarIca, VrPresupuesto, VrCobro, VrPagos, 
					VrCargos, VrDctos, VrIva, VrRetencion, VrReteIca, Cantidad, 
					Peso, TipDocPgr, NumPgr, IdCiaPgr, ItemPgr, TipDocCnt, 
					Contrato, CiaCnt, OrigenAdd, Anulado, FecDev, IdEstado, 
					TimeSys, FecUpdate, IdCiaCrea, IdUsuario, Consecutivo, Itinerario, 
					FuecParcial, ComenParcial, Qr
				)
				SELECT 
					@TipDoc,@Documento,@IdCia,Numero,Fecha,FechaInicio,
					FechaFin,CdCarga,IdVehiculo,IdConductor,IdConductor2,IdConductor3,
					IdPoseedor,IdRuta,CdTipRuta,IdOrigen,IdDestino,Modalidad,
					CantPasajeros,CodTarRet,CodTarIca,VrPresupuesto,VrCobro,VrPagos,
					VrCargos,VrDctos,VrIva,VrRetencion,VrReteIca,Cantidad,
					Peso,TipDocPgr,NumPgr,IdCiaPgr,ItemPgr,TipDocCnt,
					Contrato,CiaCnt,OrigenAdd,Anulado,FecDev,IdEstado,
					TimeSys,FecUpdate,IdCiaCrea,IdUsuario,@consecutivo,Itinerario,
					FuecParcial,ComenParcial, Qr
				FROM 
					@Trn_TraEspFuec
			end

			IF(EXISTS(SELECT * FROM @Trn_TraEspFuecAnexo))
			begin
				INSERT INTO Trn_TraEspFuecAnexo(
					TipDoc,Fuec,IdCia,TipContrato,IdContrato,ObjContrato,
					DescripCarga,Observacion,RespViaje,VehConvenio,EmpresaVehCon
				)
				SELECT 
					@TipDoc,@Documento,@IdCia,TipContrato,IdContrato,ObjContrato,
					DescripCarga,Observacion,RespViaje,VehConvenio,EmpresaVehCon
				FROM 
					@Trn_TraEspFuecAnexo
			end

			IF(EXISTS(SELECT * FROM @Trn_TraEspFuecDetalle))
			begin
				INSERT INTO Trn_TraEspFuecDetalle(
					TipDoc,Fuec,IdCia,Item,TipRes,Reserva,
					IdCiaRes,ItemRes,NumPasajeros,PesoNeto,VrCobro,VrPagos,
					Referencia1,Referencia2,Referencia3,CdTipServicio,EsRutaCliente,Kilometros,
					DirOrigen,FecOrigen,DirDestino,FecDestino
				) 
				SELECT 
					@TipDoc,@Documento,@IdCia,Item,TipRes,Reserva,
					IdCiaRes,ItemRes,NumPasajeros,PesoNeto,VrCobro,VrPagos,
					Referencia1,Referencia2,Referencia3,CdTipServicio,EsRutaCliente,Kilometros,
					DirOrigen,FecOrigen,DirDestino,FecDestino
				FROM 
					@Trn_TraEspFuecDetalle
			end

			IF(EXISTS(SELECT TOP 1 Fuec FROM @Trn_TraEspFuecCndtores))
			begin
				INSERT INTO Trn_TraEspFuecCndtores(
					TipDoc,Fuec,IdCia,Item,IdConductor
				) 
				SELECT 
					@TipDoc,@Documento,@IdCia,Item, IdConductor
				FROM 
					@Trn_TraEspFuecCndtores
			end

			--Actualizar Programación-Detalles
			UPDATE 
				Trn_TraEspProgramaDet
			SET 
				TipDocFuec = @TipDoc,NumFuec = @Documento, IdCiaFuec = @IdCia
			FROM 
				Trn_TraEspProgramaDet t1, @Trn_TraEspFuec t2, @Trn_TraEspFuecDetalle t3
			WHERE 
				t1.TipDoc = 'PGR' 
				and t1.Programa = t2.NumPgr 
				and t1.IdCia = t2.IdCiaPgr 
				and t1.TipDocRes = t3.TipRes 
				and t1.Reserva = t3.Reserva 
				and t1.IdCiaRes = t3.IdCiaRes 
				and t1.ItemRes = t3.ItemRes
			END

		--DELETE RECORDS
		IF(@operacion = 'd')
		BEGIN
			declare @Fuec int

			select @TipDoc = TipDoc, @IdCia = IdCia,  @Fuec = Fuec 
			from @Trn_TraEspFuec

			DELETE FROM Trn_TraEspFuecDetalle
			WHERE TipDoc = @TipDoc 
				and Fuec = @Fuec 
				and IdCia = @IdCia

			DELETE FROM Trn_TraEspFuecAnexo 
			WHERE TipDoc = @TipDoc 
				and Fuec = @Fuec 
				and IdCia = @IdCia

			DELETE FROM Trn_TraEspFuec 
			WHERE TipDoc = @TipDoc 
				and Fuec = @Fuec 
				and IdCia = @IdCia

			DELETE FROM Trn_TraEspFuecCndtores 
			WHERE TipDoc = @TipDoc 
				and Fuec = @Fuec 
				and IdCia = @IdCia
		END

		--ANULAR RECORDS
		IF(@operacion = 'a')
		BEGIN
			select @TipDoc = TipDoc, @IdCia = IdCia,  @Documento = Fuec 
			from @Trn_TraEspFuec

			UPDATE Trn_TraEspFuec 
			SET IdEstado = '9999', Anulado = 1
			WHERE TipDoc = @TipDoc 
				and Fuec = @Documento 
				and IdCia = @IdCia

			UPDATE Trn_TraEspProgramaDet
			SET TipDocFuec = 'FUE',NumFuec = 0, IdCiaFuec = '00'
			FROM Trn_TraEspProgramaDet t1, @Trn_TraEspFuec t2
			WHERE t1.TipDocFuec = 'FUE' 
				and t1.NumFuec = t2.Fuec 
				and t1.IdCiaFuec = t2.IdCia
		END

		SELECT @Documento

		COMMIT TRAN
	END TRY

	BEGIN CATCH
		ROLLBACK TRAN

		DECLARE 
			@ErrorMessage NVARCHAR(4000),
			@ErrorSeverity INT,
			@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
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspOrdenPago]    Script Date: 23/08/2024 10:53:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[paWcfSeInsTrn_TraEspOrdenPago]
	@Trn_TraEspOrdenPago [dbo].[dataTypeTrn_TraEspOrdenPago] READONLY,
	@Trn_TraEspOrdenReservas [dbo].[dataTypeTrn_TraEspOrdenReservas] READONLY,
	@Trn_TraEspOrdenProg [dbo].[dataTypeTrn_TraEspOrdenProg] READONLY,
	@Trn_TraEspConceptos [dbo].[dataTypeTrn_TraEspConceptos] READONLY,
	@Trn_TraEspAntAbonos [dbo].[dataTypeTrn_TraEspAntAbonos] READONLY,
	@Trn_DetCuentas [dbo].[dataTypeTrn_DetCuentas] READONLY,
	@Trn_ComFactura [dbo].[dataTypeTrn_ComFactura] READONLY,
	@Trn_Pagos [dbo].[dataTypeTrn_Pagos] 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
	--Nuevas variables
	DECLARE @Reserva INT = (SELECT  TOP 1 Reserva FROM @Trn_TraEspOrdenReservas) --Esta variable guarda el n�mero de reserva
	DECLARE @ItemRes INT = (SELECT  TOP 1 ItemRes FROM @Trn_TraEspOrdenReservas) --Esta variable guarda el n�mero de �tem de reserva
	DECLARE @IdCiaRes CHAR(2) = (SELECT  TOP 1 IdCiaRes FROM @Trn_TraEspOrdenReservas)  --Esta variable guarda la compa�ia de la reserva
	DECLARE @VrPagos MONEY = 0 --En esta variable va guarda el valor de pago real de la reserva
	DECLARE @VrTotalPagosaRES MONEY = 0 --En esta variable va guarda el valor de pagos hechas a la reserva por ordenes de pago
	DECLARE @TipoTarifa varchar(20)

	BEGIN TRAN
		BEGIN TRY		 
			
			IF(@operacion = 'i')
			begin
				SELECT TOP 1 @TipDoc = TipDoc, @Cia = IdCia, @IdCiaComp = IdCia, @IdCiaCompNiif = IdCia, @IdCiaCompFis = IdCia 
				FROM @Trn_TraEspOrdenPago

				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_TraEspOrdenPago))
				BEGIN
					INSERT INTO Trn_TraEspOrdenPago (
					TipDoc,OrdPago,IdCia,Fecha,TipRes,Reserva,
					IdCiaRes,IdConcepto,Cantidad,Modalidad,LiqReservas,CxPagar,
					MulPlazos,IdPlazo,FechaVence,TipCom,Comprobante,IdCiaCom,
					Anulado,NumDev,FecDev,Observacion,IdEstado,OrigenAdd,
					TimeSys,FecUpdate,IdCiaCrea,IdUsuario
				)
				SELECT 
					@TipDoc,@Numero,@Cia,Fecha,TipRes,Reserva,
					IdCiaRes,IdConcepto,Cantidad,Modalidad,LiqReservas,CxPagar,
					MulPlazos,IdPlazo,FechaVence,@TipComp,@Comprobante,@IdCiaComp,
					Anulado,NumDev,FecDev,Observacion,IdEstado,OrigenAdd,
					TimeSys,FecUpdate,IdCiaCrea,IdUsuario
					FROM 
						@Trn_TraEspOrdenPago
				END 

				IF(EXISTS(SELECT * FROM @Trn_TraEspOrdenReservas))
				BEGIN
					INSERT INTO Trn_TraEspOrdenReservas (
						TipDoc,OrdPago,IdCia,Item,Fecha,TipRes,
						Reserva,IdCiaRes,ItemRes,IdVehiculo,IdConductor,IdPropietario,
						IdPoseedor,VrServicio,VrDescuento,VrRetencion,VrReteIca,VrReteCREE,
						VrAnticipos,VrOtrosDctos,VrImpuestos,VrOtrosPagos,VrNeto,BaseRet,
						BaseIca,BaseCree,TarifaRet,TarifaIca,TarifaRtc,CodTarRet,
						CodTarIca,CodTarRtc,TipEgr,Egreso,IdCiaEgr,FechaEgr,
						NumCheque,Referencia,VrConcPagos,VrConcDctos,VrConcFondo,VrConcSeguro,
						VrConcAporte,VrConcImpuesto,VrRecCaja,CdForma,CdCenCosto,CdSubCenCos,
						VrSeguros,VrFondos,VrAportes,EdoLiqCausac,EstadoItem
					)
					SELECT 
						@TipDoc,@Numero,@Cia,Item,Fecha,TipRes,
						Reserva,IdCiaRes,ItemRes,IdVehiculo,IdConductor,IdPropietario,
						IdPoseedor,VrServicio,VrDescuento,VrRetencion,VrReteIca,VrReteCREE,
						VrAnticipos,VrOtrosDctos,VrImpuestos,VrOtrosPagos,VrNeto,BaseRet,
						BaseIca,BaseCree,TarifaRet,TarifaIca,TarifaRtc,CodTarRet,
						CodTarIca,CodTarRtc,TipEgr,Egreso,IdCiaEgr,FechaEgr,
						NumCheque,Referencia,VrConcPagos,VrConcDctos,VrConcFondo,VrConcSeguro,
						VrConcAporte,VrConcImpuesto,VrRecCaja,CdForma,CdCenCosto,CdSubCenCos,
						VrSeguros,VrFondos,VrAportes,EdoLiqCausac,EstadoItem
					FROM 
						@Trn_TraEspOrdenReservas
				END

				IF(EXISTS(SELECT * FROM @Trn_TraEspOrdenProg))
				BEGIN
					INSERT INTO Trn_TraEspOrdenProg (
						TipDoc,OrdPago,IdCia,Item,TipRes,Reserva,
						IdCiaRes,ItemRes,TipPgr,Programa,IdCiaPgr,ItemPgr,
						VrRecorrido
					)
					SELECT 
						@TipDoc,@Numero,@Cia,Item,TipRes,Reserva,
						IdCiaRes,ItemRes,TipPgr,Programa,IdCiaPgr,ItemPgr,
						VrRecorrido
					FROM 
						@Trn_TraEspOrdenProg
				END 

				IF(EXISTS(SELECT * FROM @Trn_TraEspConceptos))
				BEGIN
					INSERT INTO Trn_TraEspConceptos (
						TipDoc,Documento,IdCia,Item,Descripcion,Tarifa,
						TipoConc,RubroConcep,Cantidad,VrUnitario,TarifIva,IdConcepto,
						CdCuenta,NitTercero,CdTipoEsc,FechaNov,VrBase,TipoTarif,
						RefConc,Fijos,IncBaseRet,Referencia2,Referencia3,Cliente,
						Conductor,Vehiculo,ItemDoc,IdVehiculo
					)
					SELECT 
						@TipDoc,@Numero,@Cia,Item,Descripcion,Tarifa,
						TipoConc,RubroConcep,Cantidad,VrUnitario,TarifIva,IdConcepto,
						CdCuenta,NitTercero,CdTipoEsc,FechaNov,VrBase,TipoTarif,
						RefConc,Fijos,IncBaseRet,Referencia2,Referencia3,Cliente,
						Conductor,Vehiculo,ItemDoc,IdVehiculo
					FROM 
						@Trn_TraEspConceptos
				END

				IF(EXISTS(SELECT * FROM @Trn_TraEspAntAbonos))
				BEGIN
					INSERT INTO Trn_TraEspAntAbonos(
						TipDoc,Documento,IdCia,Item,Fecha,TipAnt,
						Anticipo,IdCiaAnt,VrAbono,TipoAplica,Detalle,CdCuentaAnt
					)
					SELECT 
						@TipDoc,@Numero,@Cia,Item,Fecha,TipAnt,
						Anticipo,IdCiaAnt,VrAbono,TipoAplica,Detalle,CdCuentaAnt
					FROM 
						@Trn_TraEspAntAbonos
				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_ComFactura))
				BEGIN
					INSERT INTO Trn_ComFactura(
						TipFac,Factura,IdCia,Item,IdProveedor,IdCuenta,
						TipDoc,Documento,IdCiaDoc,FecEmision,FecVence,VrFactura,
						VrAbonado,TipCom,Comprobante,ItemCom,Referencia,Detalle,
						pVehiculo,VehPropio,TipRef,DocRef,IdCiaRef,EstadoApr,
						MontoAprob
					)
					SELECT 
						@TipDoc,@Numero,@Cia,Item,IdProveedor,IdCuenta,
						@TipDoc,@Numero,@Cia,FecEmision,FecVence,VrFactura,
						VrAbonado,@TipComp,@Comprobante,ItemCom,Referencia,Detalle,
						pVehiculo,VehPropio,TipRef,DocRef,IdCiaRef,EstadoApr,
						MontoAprob
					FROM 
						@Trn_ComFactura
				END 

				IF(EXISTS(SELECT * FROM @Trn_Pagos))
				BEGIN
					INSERT INTO Trn_Pagos (
						TipDoc, Documento, IdCia, Item, Fecha, IdForma, 
						Detalle, VrPagado, VrCambio, EsCaja, IdBanco, NitCliente, 
						CdAgencia, NumForma, FecForma, CtaForma, Beneficiario, Referncia1, 
						Referncia2, CdLocal, NumAutoriza, VrDenom, Cantidad, TipDenom, 
						TipRef, DocRef, IdCiaRef, ItemDoc, CdCta, IdUsuario,
						CdProducto, FE_Ticket, Cant_Gals, PrecioBase, PrecioUnit, ConsCP, 
						CodCueCons, PrecioPub, RefVehiculo, RefNumVeh
					)
					SELECT 
						@TipDoc, @Numero, @Cia, Item, Fecha, IdForma,
						Detalle, VrPagado, VrCambio, EsCaja, IdBanco, NitCliente, 
						CdAgencia, NumForma, FecForma, CtaForma, Beneficiario, Referncia1, 
						Referncia2, CdLocal, NumAutoriza, VrDenom, Cantidad, TipDenom, 
						TipRef, DocRef, IdCiaRef, ItemDoc, CdCta, IdUsuario,
						CdProducto, FE_Ticket, Cant_Gals, PrecioBase, PrecioUnit, ConsCP, 
						CodCueCons, PrecioPub, RefVehiculo, RefNumVeh
					FROM 
						@Trn_Pagos
				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, Item, Fecha, 
						(
							SELECT DISTINCT 
								ISNULL(T.IdCuenta, TCD.IdCuenta)
							FROM 
								@Trn_TraEspOrdenReservas AS O
							LEFT JOIN 
								TarifCuentas T ON T.IdTarifa = (
									CASE TCD.Detalle
										WHEN 'RETENCION EN LA FUENTE' THEN O.CodTarRet
										WHEN 'RETENCION ICA' THEN O.CodTarIca
									END
								)
								AND T.TipDoc = 'OPE'
						) AS 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, 
						SUBSTRING(Referncia, 0, 50), TipDocRef, DocRef, IdCiaRef, TimeSys, FecUpdate, 
						IdCiaCrea, IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, 
						Num_Autoriza, FechAutoriza, CdCuentaNiif
					FROM 
						@Trn_ComDetalle AS TCD
				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, SUBSTRING(N.Referncia,0,50), 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
				--actualiza los items de la programaci�n detalle de cada reserva agregada en la Orden de Pago
				UPDATE Trn_TraEspProgramaDet
				SET TipDocOdp = 'OPE',NumOdp = @Numero, IdCiaOdp = t3.IdCia, FechaOdp = t3.Fecha
				FROM Trn_TraEspProgramaDet t1, @Trn_TraEspOrdenProg t2, @Trn_TraEspOrdenPago t3
				WHERE t1.TipDoc = t2.TipPgr 
					and t1.Programa = t2.Programa 
					and t1.IdCia = t2.IdCiaPgr 
					and t1.Item = t2.ItemPgr 
					and t1.TipDocRes = t2.TipRes 
					and t1.Reserva = t2.Reserva 
					and t1.IdCiaRes = t2.IdCiaRes 
					and t1.ItemRes = t2.ItemRes

				--JHON ROA-->Nuevo l�nea de c�digo actualizar el estado de la reserva cuando ya se cumpla el valor total de la reserva
				--11/12/2017 Se cambia para tener en cuenta cuando TipoTarifa de la reserva es diaria.
				SELECT @TipoTarifa = TipoTarifa 
				FROM Trn_TraEspResDetalle 
				WHERE Reserva = @Reserva 
					AND IdCia = @IdCiaRes 
					AND Item = @ItemRes
				
				--No se necesita traer la actual reserva, poque ya fue insertada arriba en este procedimiento
				SELECT @VrTotalPagosaRES = ROUND(ISNULL(SUM(R.VrServicio),0), 1) 
				FROM Trn_TraEspOrdenReservas R
				LEFT JOIN Trn_TraEspOrdenPago AS OP ON R.TipDoc = OP.TipDoc 
					AND  R.OrdPago = OP.OrdPago 
					AND  R.IdCia = OP.IdCia
				WHERE R.Reserva = @Reserva 
					AND R.IdCiaRes = @IdCiaRes 
					AND R.ItemRes = @ItemRes 
					AND OP.Anulado = 0;

				IF(upper(@TipoTarifa) <> 'DIA')
				BEGIN
					SELECT @VrPagos = VrPagos 
					FROM Trn_TraEspResDetalle 
					WHERE Reserva = @Reserva 
						AND IdCia = @IdCiaRes 
						AND Item = @ItemRes

					IF(@VrTotalPagosaRES >= @VrPagos)
					BEGIN
						UPDATE Trn_TraEspResDetalle
						SET EstadoItem ='LIQUIDADA'
						WHERE Reserva = @Reserva 
							AND IdCia = @IdCiaRes 
							AND Item = @ItemRes
					END
					ELSE -- revisar que la cant de veh que se vayan a liquidar(programados no novedad) ya hayan sido liquidados(pasan de xliquidar a liquidado) y que la reserva no se haya vencido
					BEGIN
						declare 
							@cantveh int= 0, 
							@cantord int = 0, 
							@fechares date, 
							@fechasys date,
							@idveh varchar(10)

						select @cantveh = count(*) 
						from trn_traespprogramadet 
						where Reserva = @Reserva 
							AND IdCiaRes = @IdCiaRes 
							AND ItemRes = @ItemRes 
							and IdNovedad = '0' 
							and IdVehiculo <>'0'

						select @fechares = fechafin 
						from trn_traespreservas 
						where Reserva = @Reserva 
							AND IdCia = @IdCiaRes

						select @fechasys = FechaActual 
						from companias 
						where IdCia = @IdCiaRes

						--selecciono  los progdetalle de esos vehiculos
						declare 
							@Trn_TraEspProgramaDet dataTypeTrn_TraEspProgramaDet 

						INSERT INTO @Trn_TraEspProgramaDet (
							TipDoc,Programa,IdCia,Item,FechaInicio,FechaFin,
							TipDocRes,Reserva,IdCiaRes,ItemRes,IdOrigen,IdDestino,
							IdVehiculo,CdTipVeh,IdConductor,NumPasajeros,TipDocFuec,NumFuec,
							IdCiaFuec,TipDocOdp,NumOdp,IdCiaOdp,FechaOdp,IdNovedad,
							Novedad,Cumplido,FecIniCump,FecFinCump,VrCobro,VrPagos,
							DiasDisp,Parada,CdTipServicio,DirOrigen,DirDestino,IdRuta,
							CdTipRuta,PesoNeto,EstadoItem,VrMonitor,CantMonitor,VrRecorrido,
							Observacion
						) 
						SELECT 
							TipDoc,Programa,IdCia,Item,FechaInicio,FechaFin,
							TipDocRes,Reserva,IdCiaRes,ItemRes,IdOrigen,IdDestino,
							IdVehiculo,CdTipVeh,IdConductor,NumPasajeros,TipDocFuec,NumFuec,
							IdCiaFuec,TipDocOdp,NumOdp,IdCiaOdp,FechaOdp,IdNovedad,
							Novedad,Cumplido,FecIniCump,FecFinCump,VrCobro,VrPagos,
							DiasDisp,Parada,CdTipServicio,DirOrigen,DirDestino,IdRuta,
							CdTipRuta,PesoNeto,EstadoItem,VrMonitor,CantMonitor,VrRecorrido,
							Observacion
						FROM 
							Trn_TraEspProgramaDet  
						where 
							Reserva = @Reserva 
								AND IdCiaRes = @IdCiaRes 
								AND ItemRes = @ItemRes 
								and IdNovedad = '0' 
								and IdVehiculo <>'0'
					  
						--cursor para verififcar si los vehiculos fueron pagados en ordenes de pago					   
						DECLARE verificar CURSOR
						FOR SELECT IdVehiculo  FROM @Trn_TraEspProgramaDet
						OPEN verificar
						FETCH NEXT FROM verificar INTO @idveh
						WHILE @@FETCH_STATUS = 0
						BEGIN
							--verifico la cantidad que ya fueron liquidados(tiene en cuenta la actual)
							if (exists(select * from Trn_TraEspOrdenReservas where Reserva = @Reserva AND IdCiaRes = @IdCiaRes AND ItemRes = @ItemRes and IdVehiculo = @idveh))
								select @cantord = @cantord + 1

							FETCH NEXT FROM verificar INTO @idveh 
							END
							CLOSE verificar
							DEALLOCATE verificar

							--se verifica que cumpal para colocar la resrva a liquidada
							IF((@cantord >= @cantveh) AND (@fechasys  >= @fechares))
							BEGIN 
								UPDATE Trn_TraEspResDetalle
								SET EstadoItem ='LIQUIDADA'
								WHERE Reserva = @Reserva 
									AND IdCia = @IdCiaRes 
									AND Item = @ItemRes
							END
						END
				END
				ELSE
				BEGIN
					SELECT @VrPagos = ISNULL(SUM(VrPagos),0)  
					FROM Trn_TraEspProgramaDet AS PD 
					JOIN Trn_TraEspPrograma  AS P ON P.TipDoc = PD.TipDoc 
						AND P.Programa = PD.Programa 
						AND P.IdCia = PD.IdCia 
					WHERE Reserva = @Reserva 
						AND IdCiaRes = @IdCiaRes 
						AND ItemRes = @ItemRes 
						and IdNovedad = '0' 
						and IdVehiculo <>'0' 
						and p.Anulado = 0

					IF(@VrTotalPagosaRES >= @VrPagos)
					BEGIN
						UPDATE Trn_TraEspResDetalle
						SET EstadoItem ='LIQUIDADA'
						WHERE Reserva = @Reserva 
							AND IdCia = @IdCiaRes 
							AND Item = @ItemRes
					END
				END

				--actualiza los anticipos
				UPDATE Trn_TraEspAnticipos
				SET VrAbonado = VrAbonado + t2.VrAbono
				FROM Trn_TraEspAnticipos t1, @Trn_TraEspAntAbonos t2
				WHERE t1.TipDoc = t2.TipAnt 
					and t1.Anticipo = t2.Anticipo 
					and t1.IdCia = t2.IdCiaAnt
			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
/****** Object:  StoredProcedure [dbo].[paWcfSeInsTrn_TraEspOrdenPagoGIE]    Script Date: 23/08/2024 10:53:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[paWcfSeInsTrn_TraEspOrdenPagoGIE]
	@Trn_TraEspOrdenPago [dbo].[dataTypeTrn_TraEspOrdenPago] READONLY,
	@Trn_TraEspOrdenReservas [dbo].[dataTypeTrn_TraEspOrdenReservas] READONLY,
	@Trn_TraEspOrdenProg [dbo].[dataTypeTrn_TraEspOrdenProg] READONLY,
	@Trn_TraEspConceptos [dbo].[dataTypeTrn_TraEspConceptos] READONLY,
	@Trn_TraEspAntAbonos [dbo].[dataTypeTrn_TraEspAntAbonos] READONLY,
	@Trn_DetCuentas [dbo].[dataTypeTrn_DetCuentas] READONLY,
	@Trn_ComFactura [dbo].[dataTypeTrn_ComFactura] READONLY,
	@Trn_Pagos [dbo].[dataTypeTrn_Pagos] 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
	--Nuevas variables
	DECLARE @Reserva INT = (SELECT  TOP 1 Reserva FROM @Trn_TraEspOrdenReservas) --Esta variable guarda el n�mero de reserva
	DECLARE @ItemRes INT = (SELECT  TOP 1 ItemRes FROM @Trn_TraEspOrdenReservas) --Esta variable guarda el n�mero de �tem de reserva
	DECLARE @IdCiaRes CHAR(2) = (SELECT  TOP 1 IdCiaRes FROM @Trn_TraEspOrdenReservas)  --Esta variable guarda la compa�ia de la reserva
	DECLARE @VrPagos MONEY = 0 --En esta variable va guarda el valor de pago real de la reserva
	DECLARE @VrTotalPagosaRES MONEY = 0 --En esta variable va guarda el valor de pagos hechas a la reserva por ordenes de pago
	DECLARE @TipoTarifa varchar(20)

	BEGIN TRAN

	BEGIN TRY		 
			
		IF(@operacion = 'i')
		begin
			SELECT TOP 1 @TipDoc = TipDoc, @Cia = IdCia, @IdCiaComp = IdCia, @IdCiaCompNiif = IdCia, @IdCiaCompFis = IdCia 
			FROM @Trn_TraEspOrdenPago

			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_TraEspOrdenPago))
			BEGIN
				INSERT INTO Trn_TraEspOrdenPago (
					TipDoc, OrdPago, IdCia, Fecha, TipRes, Reserva,
					IdCiaRes, IdConcepto, Cantidad, Modalidad, LiqReservas, CxPagar, 
					MulPlazos, IdPlazo, FechaVence, TipCom, Comprobante, IdCiaCom, 
					Anulado, NumDev, FecDev, Observacion, IdEstado, OrigenAdd, 
					TimeSys, FecUpdate, IdCiaCrea, IdUsuario
				)
				SELECT 
					@TipDoc, @Numero, @Cia, Fecha, TipRes, Reserva, 
					IdCiaRes, IdConcepto, Cantidad, Modalidad, LiqReservas, CxPagar, 
					MulPlazos, IdPlazo, FechaVence, @TipComp, @Comprobante, @IdCiaComp, 
					Anulado, NumDev, FecDev, Observacion, IdEstado, OrigenAdd, 
					TimeSys, FecUpdate, IdCiaCrea, IdUsuario
				FROM 
					@Trn_TraEspOrdenPago
			END 

			IF(EXISTS(SELECT * FROM @Trn_TraEspOrdenReservas))
			BEGIN
				INSERT INTO Trn_TraEspOrdenReservas (
					TipDoc, OrdPago, IdCia, Item, Fecha, TipRes, 
					Reserva, IdCiaRes, ItemRes, IdVehiculo, IdConductor, IdPropietario,
					IdPoseedor, VrServicio, VrDescuento, VrRetencion, VrReteIca, VrReteCREE,
					VrAnticipos, VrOtrosDctos, VrImpuestos, VrOtrosPagos, VrNeto, BaseRet,
					BaseIca, BaseCree, TarifaRet, TarifaIca, TarifaRtc, CodTarRet,
					CodTarIca, CodTarRtc, TipEgr, Egreso, IdCiaEgr, FechaEgr,
					NumCheque, Referencia, VrConcPagos, VrConcDctos, VrConcFondo, VrConcSeguro,
					VrConcAporte, VrConcImpuesto, VrRecCaja, CdForma, CdCenCosto, CdSubCenCos,
					VrSeguros, VrFondos, VrAportes, EdoLiqCausac, EstadoItem
				)
				SELECT 
					@TipDoc, @Numero, @Cia, Item, Fecha, TipRes,
					Reserva, IdCiaRes, ItemRes, IdVehiculo, IdConductor, IdPropietario,
					IdPoseedor, VrServicio, VrDescuento, VrRetencion, VrReteIca, VrReteCREE,
					VrAnticipos, VrOtrosDctos, VrImpuestos, VrOtrosPagos, VrNeto, BaseRet,
					BaseIca, BaseCree, TarifaRet, TarifaIca, TarifaRtc, CodTarRet,
					CodTarIca, CodTarRtc, TipEgr, Egreso, IdCiaEgr, FechaEgr,
					NumCheque, Referencia, VrConcPagos, VrConcDctos, VrConcFondo, VrConcSeguro,
					VrConcAporte, VrConcImpuesto, VrRecCaja, CdForma, CdCenCosto, CdSubCenCos,
					VrSeguros, VrFondos, VrAportes, EdoLiqCausac, EstadoItem
				FROM 
					@Trn_TraEspOrdenReservas
			END

			IF(EXISTS(SELECT * FROM @Trn_TraEspConceptos))
			BEGIN
				INSERT INTO Trn_TraEspConceptos(
					TipDoc, Documento, IdCia, Item, Descripcion, Tarifa,
					TipoConc, RubroConcep, Cantidad, VrUnitario, TarifIva, IdConcepto,
					CdCuenta, NitTercero, CdTipoEsc, FechaNov, VrBase, TipoTarif,
					RefConc, Fijos, IncBaseRet, Referencia2, Referencia3, Cliente,
					Conductor, Vehiculo, ItemDoc, IdVehiculo
				)
				SELECT 
					@TipDoc, @Numero, @Cia, Item, Descripcion, Tarifa,
					TipoConc, RubroConcep, Cantidad, VrUnitario, TarifIva, IdConcepto,
					CdCuenta, NitTercero, CdTipoEsc, FechaNov, VrBase, TipoTarif,
					RefConc, Fijos, IncBaseRet, Referencia2, Referencia3, Cliente,
					Conductor, Vehiculo, ItemDoc, IdVehiculo
				FROM	
					@Trn_TraEspConceptos
			END

			IF(EXISTS(SELECT * FROM @Trn_TraEspAntAbonos))
			BEGIN
				INSERT INTO Trn_TraEspAntAbonos(
					TipDoc, Documento, IdCia, Item, Fecha, TipAnt,
					Anticipo, IdCiaAnt, VrAbono, TipoAplica, Detalle, CdCuentaAnt
				)
				SELECT 
					@TipDoc, @Numero, @Cia, Item, Fecha, TipAnt, 
					Anticipo, IdCiaAnt, VrAbono, TipoAplica, Detalle, CdCuentaAnt
				FROM
					@Trn_TraEspAntAbonos
			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_ComFactura))
			BEGIN
				INSERT INTO Trn_ComFactura(
					TipFac, Factura, IdCia, Item, IdProveedor, IdCuenta,
					TipDoc, Documento, IdCiaDoc, FecEmision, FecVence, VrFactura, 
					VrAbonado, TipCom, Comprobante, ItemCom, Referencia, Detalle, 
					pVehiculo, VehPropio, TipRef, DocRef, IdCiaRef, EstadoApr, 
					MontoAprob
				)
				SELECT 
					@TipDoc, @Numero, @Cia, Item, IdProveedor, IdCuenta, 
					@TipDoc, @Numero, @Cia, FecEmision, FecVence, VrFactura, 
					VrAbonado, @TipComp, @Comprobante, ItemCom, Referencia, Detalle, 
					pVehiculo, VehPropio, TipRef, DocRef, IdCiaRef, EstadoApr, 
					MontoAprob
				FROM 
					@Trn_ComFactura
			END 

			IF(EXISTS(SELECT * FROM @Trn_Pagos))
			BEGIN
				INSERT INTO Trn_Pagos (
					TipDoc, Documento, IdCia, Item, Fecha, IdForma, 
					Detalle, VrPagado, VrCambio, EsCaja, IdBanco, NitCliente, 
					CdAgencia, NumForma, FecForma, CtaForma, Beneficiario, Referncia1, 
					Referncia2, CdLocal, NumAutoriza, VrDenom, Cantidad, TipDenom, 
					TipRef, DocRef, IdCiaRef, ItemDoc, CdCta, IdUsuario,
					CdProducto, FE_Ticket, Cant_Gals, PrecioBase, PrecioUnit, ConsCP, 
					CodCueCons, PrecioPub, RefVehiculo, RefNumVeh
				)
				SELECT 
					@TipDoc, @Numero, @Cia, Item, Fecha, IdForma, 
					Detalle, VrPagado, VrCambio, EsCaja, IdBanco, NitCliente, 
					CdAgencia, NumForma, FecForma, CtaForma, Beneficiario, Referncia1, 
					Referncia2, CdLocal, NumAutoriza, VrDenom, Cantidad, TipDenom, 
					TipRef, DocRef, IdCiaRef, ItemDoc, CdCta, IdUsuario,
					CdProducto, FE_Ticket, Cant_Gals, PrecioBase, PrecioUnit, ConsCP, 
					CodCueCons, PrecioPub, RefVehiculo, RefNumVeh
				FROM 
					@Trn_Pagos
			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, Item, Fecha, 
					(
						SELECT DISTINCT 
							ISNULL(T.IdCuenta, D.IdCuenta)
						FROM 
							@Trn_TraEspOrdenReservas AS O
						LEFT JOIN 
							TarifCuentas T ON T.IdTarifa = (
								CASE D.Detalle
									WHEN 'RETENCION EN LA FUENTE' THEN O.CodTarRet
									WHEN 'RETENCION ICA' THEN O.CodTarIca
								END
							)
							AND T.TipDoc = 'OPE'
					) AS IdCuenta,
					CASE 
						WHEN D.Detalle = 'CUENTA POR PAGAR' THEN (
							CASE 
								WHEN EXISTS (SELECT 1 FROM @Trn_TraEspOrdenReservas WHERE Referencia != '') THEN 'CUENTA POR PAGAR-REF:' + (SELECT Referencia FROM @Trn_TraEspOrdenReservas WHERE Referencia != '')
								ELSE 'CUENTA POR PAGAR' 
							END
						)
						ELSE D.Detalle 
					END AS 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, SUBSTRING(Referncia, 0, 50), 
					TipDocRef, DocRef, IdCiaRef, TimeSys, FecUpdate, IdCiaCrea, 
					IdUsuario, CdConcTrib, CdTarifTrib, NumEstablec, PtoEmision, Num_Autoriza, 
					FechAutoriza, CdCuentaNiif
				FROM 
					@Trn_ComDetalle D
			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, SUBSTRING(N.Referncia,0,50), 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

			BEGIN 
				UPDATE 
					Trn_TraEspResDetalle
				SET 
					EstadoItem ='LIQUIDADA'
				WHERE 
					Reserva = @Reserva 
					AND IdCia = @IdCiaRes 
					AND Item = @ItemRes
			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	
-- ==========================================================================================================================================================================================================================================================================
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_SCHEMA = 'dbo' 
           AND TABLE_NAME = 'tm_TraEsDetConc')
BEGIN
	/****** Object:  Table [dbo].[tm_TraEsDetConc]    Script Date: 24/08/2024 10:20:26 ******/
	SET ANSI_NULLS ON
	SET QUOTED_IDENTIFIER ON
	CREATE TABLE [dbo].[tm_TraEsDetConc](
		[TmNumero] [varchar](5) NULL,
		[TipDoc] [varchar](50) NULL,
		[Causacion] [int] NULL,
		[IdCia] [varchar](50) NULL,
		[Item] [int] NULL,
		[IdConcepto] [varchar](50) NULL,
		[Descripcion] [varchar](255) NULL,
		[TipoConc] [varchar](50) NULL,
		[VrDebito] [decimal](18, 4) NULL,
		[VrCredito] [decimal](18, 4) NULL,
		[CdCuenta] [varchar](50) NULL,
		[NitTercero] [varchar](50) NULL,
		[RazonSocial] [varchar](255) NULL,
		[CdCCosto] [varchar](50) NULL,
		[CCosto] [varchar](255) NULL,
		[CdSubCos] [varchar](50) NULL,
		[SubCosto] [varchar](255) NULL,
		[pVehiculo] [varchar](50) NULL,
		[NumVeh] [varchar](50) NULL,
		[ClaseMat] [varchar](50) NULL,
		[TipoAfiVehic] [varchar](50) NULL,
		[VrBase] [decimal](18, 4) NULL,
		[TarifBase] [decimal](18, 4) NULL,
		[Referencia] [varchar](50) NULL,
		[TipDocRef] [varchar](50) NULL,
		[DocRef] [int] NULL,
		[TipFac] [varchar](50) NULL,
		[Factura] [varchar](50) NULL,
		[IdCiaFac] [varchar](50) NULL,
		[ItemFac] [int] NULL,
		[FecVence] [datetime] NULL,
		[EstadoReg] [int] NULL,
		[TipoLiq] [varchar](50) NULL,
		[NumLiquida] [int] NULL,
		[CiaLiquida] [varchar](50) NULL,
		[VrAbonado] [decimal](18, 4) NULL
	) ON [PRIMARY]
END
-- ==========================================================================================================================================================================================================================================================================


