IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'dbo.CF_VisaNet_UY_TX') 
                   and type = 'FN')
BEGIN
    DROP FUNCTION dbo.CF_VisaNet_UY_TX
END
GO

CREATE FUNCTION [dbo].[CF_VisaNet_UY_TX](@pId_Trans INT, @pImporte DECIMAL(12,2), @pId_Tar_Lote INT, @pPeriodo DATETIME) 
RETURNS CHAR(200)
AS
BEGIN

/*Variables Archivo*/
DECLARE @Retorno				CHAR(200)
DECLARE @aTipo_Registro			CHAR(1)		/*Tipo: ALFANUMERICO.	Largo: 001.			Formato:							Observacion: Siempre 1*/
DECLARE @aNro_de_Cabezal		CHAR(7)		/*Tipo: NUMERICO.		Largo: 007.			Formato:							Observacion: */
DECLARE @aNro_Transaccion		CHAR(7)		/*Tipo: NUMERICO.		Largo: 007.			Formato:							Observacion: */
DECLARE @aNro_Comercio			CHAR(8)		/*Tipo: NUMERICO.		Largo: 008.			Formato:							Observacion: */
DECLARE @aSucursal_Comercio		CHAR(3)		/*Tipo: NUMERICO.		Largo: 003.			Formato:							Observacion: */
DECLARE @aFecha_Lote			CHAR(8)		/*Tipo: NUMERICO.		Largo: 008.			Formato: AAAAMMDD					Observacion: */
DECLARE @aMoneda				CHAR(4)		/*Tipo: NUMERICO.		Largo: 004.			Formato:							Observacion: $: 0858, U$S: 0840*/
DECLARE @aCant_Cuotas			CHAR(2)		/*Tipo: NUMERICO.		Largo: 002.			Formato:							Observacion: Contado=01, 2 Cuotas = 0, 3 Cuotas = 03,...*/
DECLARE @aPlan_de_Venta			CHAR(4)		/*Tipo: NUMERICO.		Largo: 004.			Formato:							Observacion: Vta Combustible=0100, Debitos Automaticos=0090, Transacciones Contado=0001, Transacciones en Cuotas=(Cant. Cuotas)*/
DECLARE @aTipo_Transaccion		CHAR(2)		/*Tipo: NUMERICO.		Largo: 002.			Formato:							Observacion: Compra=05, Devolucion=06, Anulacion Compra=25, Anulacion devolucion=26*/
DECLARE @aNro_Tarjeta			CHAR(19)	/*Tipo: ALFANUMERICO.	Largo: 019.			Formato:							Observacion: */
DECLARE @aVencimiento_Tarjeta	CHAR(4)		/*Tipo: NUMERICO.		Largo: 004.			Formato: AAMM						Observacion: */
DECLARE @aFecha_Transaccion		CHAR(8)		/*Tipo: NUMERICO.		Largo: 008.			Formato: AAAAMMDD					Observacion: Si es anulacion debe ser fecha de la transaccion original*/
DECLARE @aImporte				CHAR(15)	/*Tipo: NUMERICO.		Largo: 015.			Formato: 13 enteros, 2 decimales	Observacion: */
DECLARE @aNumero_Autorizacion	CHAR(6)		/*Tipo: ALFANUMERICO.	Largo: 006.			Formato:							Observacion: */
DECLARE @aPeriodo				CHAR(6)		/*Tipo: ALFANUMERICO.	Largo: 006.			Formato:							Observacion: Si Plan de Venta=90 (debitos automaticos) mes/aa:"ENE/97". Si plan de venta no es 90 '     '*/
DECLARE @aSocio					CHAR(10)	/*Tipo: ALFANUMERICO.	Largo: 010.			Formato:							Observacion: */
DECLARE @aAplicaDevolucionIVA	CHAR(1)		/*Tipo: NUMERICO.		Largo: 001.			Formato:							Observacion: No aplica=0, Aplica Dev. Iva Ley 19210=6*/
DECLARE @aSerie_Comprobante		CHAR(2)		/*Tipo: ALFANUMERICO.	Largo: 002.			Formato:							Observacion: */
DECLARE @aNumero_Comprobante	CHAR(7)		/*Tipo: NUMERICO.		Largo: 007.			Formato:							Observacion: */
DECLARE @aImporte_Gravado		CHAR(15)	/*Tipo: NUMERICO.		Largo: 015.			Formato: 13 enteros, 2 decimales	Observacion: */
DECLARE @aFiller				CHAR(61)	/*Tipo: ALFANUMERICO.	Largo: 061.			Formato:							Observacion: */
/*FIN Variables Archivo*/

/*Variable Locales*/
DECLARE @Id_Tarjeta				VARCHAR(10)
DECLARE @Fecha_Presentacion		DATETIME
DECLARE @Comercio_Nro			VARCHAR(50)
DECLARE @Tar_Nro				VARCHAR(22)
DECLARE @Id_Contrato			INT
DECLARE @Tar_Fecha_Vence		DATETIME
DECLARE @Fecha_Cbte				DATETIME
DECLARE @Mes_Periodo			SMALLINT
DECLARE @Mes_Periodo_VC			VARCHAR(3)
DECLARE @Id_Cliente				INT
DECLARE @Id_Cliente_Externo		INT
DECLARE @Comprobante_Nro		INT
/*FIN Variable Locales*/

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

/*Seteo Variables Locales*/
SELECT	
@Id_Tarjeta				= ISNULL(Id_Tarjeta, ''),
@Fecha_Presentacion		= ISNULL(Fecha_Presentacion, '19000101')
FROM Val_Tarjetas_Lotes
WHERE
Id_Tar_Lote = @pId_Tar_Lote

SELECT
@Comercio_Nro			= ISNULL(Comercio_Nro, '')
FROM Valores_Tarjetas_Cred
WHERE
ISNULL(Id_Tarjeta, '') = @Id_Tarjeta

SELECT	
@Tar_Nro				= ISNULL(Nro, '')
FROM Val_Tarjetas_Lotes_Items 
WHERE
Id_Tar_Lote = @pId_Tar_Lote
AND Id_Trans = @pId_Trans


SELECT	
@Id_Cliente				= ISNULL(Id_Cliente, 0),
@Fecha_Cbte				= ISNULL(Fecha, '19000101'),
@Id_Contrato			= ISNULL(Id_Contrato, 0),
@Comprobante_Nro		= ISNULL(Comprobante_Nro, 0)
FROM Cbtes 
WHERE
Id_Trans = @pId_Trans

SELECT 
@Id_Cliente_Externo		= ISNULL(Id_Cliente_Externo, Id_Cliente)
FROM Clientes
WHERE
Id_Cliente = @Id_Cliente

SELECT
@Tar_Fecha_Vence		= ISNULL(Tar_Fecha_Vence, DATEADD(YEAR, 1, GETDATE()))
FROM Contratos
WHERE
Id_Contrato = @Id_Contrato

SET @Mes_Periodo = DATEPART(MONTH, @pPeriodo)

SELECT
@Mes_Periodo_VC =	CASE @Mes_Periodo
						WHEN 1	THEN 'ENE'
						WHEN 2	THEN 'FEB'
						WHEN 3	THEN 'MAR'
						WHEN 4	THEN 'ABR'
						WHEN 5	THEN 'MAY'
						WHEN 6	THEN 'JUN'
						WHEN 7	THEN 'JUL'
						WHEN 8	THEN 'AGO'
						WHEN 9	THEN 'SEP'
						WHEN 10 THEN 'OCT'
						WHEN 11 THEN 'NOV'
						WHEN 12 THEN 'DIC'
					END


/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

SET @aTipo_Registro			=	'1'

SET @aNro_de_Cabezal		=	'0000001'

SET @aNro_Transaccion		=	(RIGHT('0000000' + CAST(@pId_Trans AS VARCHAR), 7))

SET @aNro_Comercio			=	(RIGHT('00000000' + @Comercio_Nro, 8))

SET @aSucursal_Comercio		=	(RIGHT('000' + dbo.CF_xParam('Id_Visa_Suc'), 3))

SET @aFecha_Lote			=	RIGHT('0000' + CAST(DATEPART(YEAR, @Fecha_Presentacion) AS VARCHAR), 4) + 
								RIGHT('00' + CAST(DATEPART(MONTH, @Fecha_Presentacion) AS VARCHAR), 2)  + 
								RIGHT('00' + CAST(DATEPART(DAY, @Fecha_Presentacion) AS VARCHAR), 2)

SET @aMoneda				=	'0858' /*PESOS URUGUAYOS*/

SET @aCant_Cuotas			=	'01' /*CONTADO*/

SET @aPlan_de_Venta			=	'0090' /*DEBITO AUTOMATICO*/

SET @aTipo_Transaccion		=	'05' /*COMPRA*/

SET @aNro_Tarjeta			=	(RIGHT('0000000000000000000' + @Tar_Nro, 19))

SET @aVencimiento_Tarjeta	=	SUBSTRING(RIGHT('0000' + CAST(DATEPART(YEAR, @Tar_Fecha_Vence) AS VARCHAR), 4), 3, 2) + 
								RIGHT('00' + CAST(DATEPART(MONTH, @Tar_Fecha_Vence) AS VARCHAR), 2)

SET @aFecha_Transaccion		=	RIGHT('0000' + CAST(DATEPART(YEAR, @Fecha_Cbte) AS VARCHAR), 4) + 
								RIGHT('00' + CAST(DATEPART(MONTH, @Fecha_Cbte) AS VARCHAR), 2)  + 
								RIGHT('00' + CAST(DATEPART(DAY, @Fecha_Cbte) AS VARCHAR), 2)

SET @aImporte				=	RIGHT('000000000000000' + CAST(CAST(@pImporte * 100 AS INT) AS VARCHAR), 15)

SET @aNumero_Autorizacion	=	'000000'

SET @aPeriodo				=	@Mes_Periodo_VC +
								'/' +
								SUBSTRING(RIGHT('0000' + CAST(DATEPART(YEAR, @pPeriodo) AS VARCHAR), 4), 3, 2)

SET @aSocio					= (RIGHT('0000000000' + CAST(@Id_Cliente_Externo AS VARCHAR), 10))

SET @aAplicaDevolucionIVA	= '0' /*NO APLICA*/

SET @aSerie_Comprobante		= 'SC'

SET @aNumero_Comprobante	= (RIGHT('0000000' + CAST(@Comprobante_Nro AS VARCHAR), 7)) 

SET @aImporte_Gravado		= '000000000000000'

SET @aFiller				= '                                                             '

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

SET @Retorno =	@aTipo_Registro			+
				@aNro_de_Cabezal		+
				@aNro_Transaccion		+
				@aNro_Comercio			+
				@aSucursal_Comercio		+
				@aFecha_Lote			+
				@aMoneda				+
				@aCant_Cuotas			+
				@aPlan_de_Venta			+
				@aTipo_Transaccion		+
				@aNro_Tarjeta			+
				@aVencimiento_Tarjeta	+
				@aFecha_Transaccion		+
				@aImporte				+
				@aNumero_Autorizacion	+
				@aPeriodo				+
				@aSocio					+
				@aAplicaDevolucionIVA	+
				@aSerie_Comprobante		+
				@aNumero_Comprobante	+
				@aImporte_Gravado		+
				@aFiller

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

RETURN ISNULL(@Retorno, '                                                                                                                                                                                                        ')
END
