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

CREATE FUNCTION [dbo].[CF_MasterCard_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 @aNro_Comercio				CHAR(8)		/*Formato: Numérico (8).		Desde: 001. Hasta: 008. Nota: Informar el número de comercio.*/
DECLARE @aTipo_Registro				CHAR(1)		/*Formato: Numérico (1).		Desde: 009. Hasta: 009. Nota: 2 = registro detalle de débito automático, 3 = registro detalle de cupón crédito*/
DECLARE @aNro_Tarjeta				CHAR(16)	/*Formato: Numérico (16).		Desde: 010. Hasta: 025. Nota: Se indicará el número de tarjeta del socio.*/
DECLARE @aNro_Refencia				CHAR(12)	/*Formato: Numérico (12).		Desde: 026. Hasta: 037. Nota: Corresponde al número mediante el cual el socio es identificado por el Establecimiento; puede ser el número de abonado, socio, afiliado, etc. Deberá indicarse alineado a la derecha, con ceros a izquierda. */
DECLARE @aCuotas					CHAR(3)		/*Formato: Numérico (3).		Desde: 038. Hasta: 040. Nota: Adhesiones nuevas: indica la cuota a partir de la cual comienza el débito automático de las mismas. El dato a informar deberá ser igual a 1 (uno) o mayor (sólo cuando se desee cobrar más de una cuota en el mismo período) y menor que la cantidad informada en cuotas plan. Adhesiones existentes: indica la cantidad de cuotas que se cancelan. En caso de informarse ceros se cobrará el importe indicado en la novedad pero no se cancelarán cuotas. */
DECLARE @aCuotas_Plan				CHAR(3)		/*Formato: Numérico (3).		Desde: 041. Hasta: 043. Nota: Es la cantidad de cuotas del plan al que pertenece la adhesión. Si se trata de un plan ilimitado de cuotas deberá informarse “999”. */
DECLARE @aFrecuencia_DB				CHAR(2)		/*Formato: Numérico (2).		Desde: 044. Hasta: 045. Nota: Indica la periodicidad de debitación de las cuotas. Valor: 01. */
DECLARE @aImporte					CHAR(11)	/*Formato: Numérico (9,2).		Desde: 046. Hasta: 056. Nota: Monto correspondiente al valor del débito automático cobrado o del cupón crédito devuelto por el Establecimiento al usuario, se encuentra formado por una parte entera y otra decimal. El monto no incluye punto ni coma decimal, como tampoco signo; simplemente deberá informarse alineado a la derecha, con ceros a la izquierda.*/
DECLARE @aPeriodo					CHAR(5)		/*Formato: Alfanumérico (5).	Desde: 057. Hasta: 061. Nota: En este campo deberá indicarse el período al que corresponde la cuota del débito.  Si la novedad corresponde a un cupón crédito, este campo deberá informar “CRED “. */
DECLARE @aFiller1					CHAR(1)		/*Formato: Alfanumérico (1).	Desde: 062. Hasta: 062. Nota: Se deberá completar con espacios en blanco.*/
DECLARE @aFecha_Vto_Pago			CHAR(6)		/*Formato: Alfanumérico (6).	Desde: 063. Hasta: 068. Nota: Indicar fecha de vencimiento de la obligación de pago del débito automático que se está informando. Formato DDMMAA */
DECLARE @aDatos_Auxiliares			CHAR(40)	/*Formato: Alfanumérico (40).	Desde: 069. Hasta: 108. Nota: Se informarán los datos auxiliares enviados por el comercio para la novedad.*/
DECLARE @aMarcaAplicaDevolucionIVA	CHAR(1)		/*Formato: Numérico (1).		Desde: 109. Hasta: 109. Nota: Indicador de devolución de IVA, Ley 19.210. Valores: 0 – no aplica, 1 – aplica */
DECLARE @aImporte_Gravado			CHAR(11)	/*Formato: Numérico (9,2).		Desde: 110. Hasta: 120. Nota: Importe del débito sin IVA.*/
DECLARE @aNumero_Factura			CHAR(20)	/*Formato: Alfanumérico (20).	Desde: 121. Hasta: 140. Nota: Identificación de la factura.*/
DECLARE @aFiller2					CHAR(60)	/*Formato: Alfanumérico (60).	Desde: 141. Hasta: 200. Nota: Se deberá completar con espacios en blanco.*/

/*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				= LTRIM(RTRIM(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 @aNro_Comercio				=	(RIGHT('00000000' + @Comercio_Nro, 8))

SET @aTipo_Registro				=	'2' /*Debito Automatico*/

SET @aNro_Tarjeta				=	(RIGHT('0000000000000000' + @Tar_Nro, 16))

SET @aNro_Refencia				=	(RIGHT('000000000000' + CAST(@pId_Trans AS VARCHAR), 12))

SET @aCuotas					=	'001'

SET @aCuotas_Plan				=	'999'

SET @aFrecuencia_DB				=	'01'

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

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

SET @aFiller1					=	' '

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

SET @aDatos_Auxiliares			= '                                        '

SET @aMarcaAplicaDevolucionIVA	= '0' /*No Aplica*/

SET @aImporte_Gravado			= '00000000000'

SET @aNumero_Factura			= (RIGHT('00000000000000000000' + CAST(@Comprobante_Nro AS VARCHAR), 20)) 

SET @aFiller2					= '                                                            '

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

SET @Retorno =	@aNro_Comercio +
				@aTipo_Registro +
				@aNro_Tarjeta +
				@aNro_Refencia +
				@aCuotas +
				@aCuotas_Plan +
				@aFrecuencia_DB +
				@aImporte +
				@aPeriodo +
				@aFiller1 +
				@aFecha_Vto_Pago +
				@aDatos_Auxiliares +
				@aMarcaAplicaDevolucionIVA +
				@aImporte_Gravado +
				@aNumero_Factura +
				@aFiller2


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

RETURN ISNULL(@Retorno, '                                                                                                                                                                                                        ')
END
