/****** Object:  UserDefinedFunction [dbo].[SF_BancoPatagonia_Proveedores_OP_TX]    Script Date: 12/28/2017 14:35:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

CREATE FUNCTION [dbo].[SF_BancoPatagonia_Proveedores_OP_TX](@pId_Trans INT) 
RETURNS CHAR(1132)
AS
BEGIN

/*================================================================================================================================*/

/*Variables del Archivo*/
DECLARE @Retorno						CHAR(1132)

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

DECLARE @aRegistroId					CHAR(2)		/*Constante 'PO'*/

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

/*Identificacion y referencias de la orden*/
DECLARE @aIRRefOrdenPago				CHAR(25)		/*Este campo traerá referencias unívocas en lo que refiere al pago. 
														Es un número o identificación que asignará internamente el cliente 
														para reconocer está orden. Este valor debe ser único, no pudiendo 
														repetirse en ningún caso para ordenes aceptadas. Este campo permitirá
														unir las ordenes con sus respectivos certificados de retención impositiva.*/

DECLARE @aIRMotivoPago					CHAR(105)	/*Aclaración sobre que se está abonando. Es el texto que iría en los Mails 
													de avisos de pagos a los beneficiarios.Por ejemplo: 'Facturas 0000-1234567890 y 891'*/

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

/*Datos para la ejecucion de la orden*/
DECLARE @aDEFechaEjecucionPago			CHAR(8)		/*Es la fecha en que se deberá ejecutar la orden de pago. No debe ser menor
														a la fecha de procesamiento deseada.Para los casos de pagos con cheques de 
														pago diferido, esta es la fecha que se toma en cuenta para determinar el tiempo
														de validez del pago a favor del beneficiario en la plaza girada (o sea para control
														de vto de validez del pago a los 30 días). La fecha de emisión será igual a esta.
														Para el resto de los medios de ejecución es la fecha en que deberá efectuarse la 
														transferencia electrónica.Normalmente debería ser informarse una fecha hacía adelante,
														para mantener la orden de pago en espera de ejecución hasta la fecha solicitada. 
														Formato AAAAMMDD*/

DECLARE @aDETipoPago					CHAR(3)		/*Opciones:	‘002’= Emisión de cheque pago diferido.
														‘003’=Transferencia interna entre ctas. en el Banco o "book to book"
														‘009’=Transferencia electrónica ‘020’=Transferencia electrónica vía MEP
														‘025’= Orden de pago por caja del Banco*/

DECLARE @aDEImportePagar				CHAR(15)		/* LONG=15.2
														Importe a abonar. Se refiere a la moneda de pago y es el neto a pagar. 
														Son 15 posiciones, de las cuales las últimas 2 corresponden a los decimales - centavos.
														No debe llevar máscara ni punto o coma decimal. Completar con ceros a la izquierda.*/

DECLARE @aDEMonedaPago					CHAR(3)		/*Moneda del pago. 'ARS' – pesos */

DECLARE @aDEFechaVenciCHPD				CHAR(8)		/*Este campo es solo para los cheques de pago diferido y es la fecha de vencimiento del
														cartular.Mandatario para pagos con CHPD*/

DECLARE @aDERequerirReciboPagoCheque	CHAR(1)		/*‘S’ - Si  (para la entrega del cheque se requerirá recibo membretado del Beneficiario
														 – valor por omisión)
														 'N' – No (no se requiere el recibo membreteado)En todos los casos el Banco imprimirá 
														 un recibo en 2 copias que deberán ser firmadas por el Beneficiario.En caso que no se
														 tenga el CUIT o Nro. de documento del beneficiario (por no tener datos en el padrón 
														 correspondiente y no se informe el dato en este archivo de Ordenes), se rechazará la
														 orden por no tenerse el dato necesario para constatar la identidad del Beneficiario
														 a través del recibo o carta de autorización.*/

DECLARE @aDEClausulaNoOrden				CHAR(1)		/*‘S’ – Si (valor por omisión) Incluir leyenda “no a la orden” */

DECLARE @aDEIncluirFirmaChequeCADJ		CHAR(1)		/*‘S’ – Si (valor por omisión) 
														‘N’ – No. Implica imprimir el valor en la modalidad en lote, y enviar al adherente 
														para su firma manuscrita. Esta opción se validará según condiciones del Convenio 
														respectivo.*/

DECLARE @aDEAcompañamiendoComprobante	CHAR(3)		/*‘ICA’ – Imprimir Comprobante Adjunto a esta orden de pago, recibido o a recibir en 
														archivo ad-hoc. ‘RCA’ – Recibir y distribuir Comprobantes Adjuntos a esta orden de pago,
														impresos por el adherente.‘NEC’ – No Existen Comprobantes adjuntos asociados a esta orden.*/

DECLARE @aDETex1ReferenciaAsociadoOrden	CHAR(80)		/*Primer texto libre adicional para indicar aclaraciones sobre el pago.*/

DECLARE @aDETex2ReferenciaAsociadoOrden	CHAR(80)		/*Segundo texto libre adicional para indicar aclaraciones sobre el pago.*/

DECLARE @aDETex3ReferenciaAsociadoOrden	CHAR(80)		/*Tercer texto libre adicional para indicar aclaraciones sobre el pago.*/

DECLARE @aDEInstruccionCustomerService	CHAR(160)	/**/

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

/*Identificacion del proveedor o beneficiario del pago*/
DECLARE @aIPBNroBeneficiario			CHAR(25)		/*Este campo es Mandatario para el caso que se desee, al ejecutar esta orden de pago,
														utilizar uno o todos los datos del Beneficiario que se tengan de antemano en la base
														de Beneficiarios en poder del Banco. Este número debe coincidir con el nro. de 
														beneficiario o proveedor en los sistemas del cliente Adherente.
														NOTA: Prestar especial atención a alinear este campo de la misma forma que en el 
														padrón de beneficiario.
														Este campo deberá venir en blanco, para el caso que se desee pagar a un beneficiario
														no informado en la base de datos de Beneficiarios en poder del Banco. En tal caso, 
														se usarán (y por ende se asume que vendrán informados) los datos del beneficiario 
														que se indican a continuación.*/

DECLARE @aIPBNomBeneficiarioProveedor	CHAR(60)		/*Si se informase algo en este campo, será el que se utilice para ejecutar esta orden
														de pago en forma puntual; sin importar si se ha informado o no Nro. de Beneficiario.
														Si este campo se informa en blanco y se ha informado Nro. de Beneficiario, usará el 
														dato que se encuentre en la base de Beneficiarios en poder del Banco.Si este campo 
														se informa en blanco y no se ha informado Nro. de Beneficiario, o se ha informado y
														no se ha encontrado en la base de datos de Beneficiarios en poder del Banco, dará lugar
														a un error de Validación de la orden.*/
		
DECLARE @aIPBTipoDocumentoBeneficiario	CHAR(3)		/*Contenido único y posible		001 = DNI	002 = LE	003 = LC	004 = CI	
														010 = CUIL (*)	011 = CUIT (*)	014 = CDI (*)	040 = PSPT
														(*) Únicos documentos válidos para transferencias internas y a otros Bancos
														Comentarios: Idem nombre del beneficiario o proveedor*/

DECLARE @aIPBNroCuit_cuilBeneficiario	CHAR(11)		/*Nro. asignado por la AFIP*/

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

/*Domicilio, telefono, fax y mail del beneficiario*/
DECLARE @aDTFMBDomicilioBeneficiario		CHAR(120)	/* Actualmente: No Aplica*/

DECLARE @aDTFMBCodPostalBeneficiario	CHAR(15)		/* Actualmente: No Aplica*/

DECLARE @aDTFMBEmailBeneficiario		CHAR(70)		/*Opcional para el caso de requerirse el envío de avisos y no se cuente con él en el
														padrón de Beneficiarios en poder del Banco. Si no se contara en ningún caso no se 
														enviarán los avisos preestablecidos.
														Otros comentarios: Ídem Nombre del Beneficiario o Proveedor.*/
														
DECLARE @aDTFMBFAXBeneficiario			CHAR(25)		/* Actualmente: No Aplica*/

DECLARE @aDTFMBMedioComunicacionBene	CHAR(3)		/*Es el medio elegido para el envío automático de avisos referidos al pago. 
														Actualmente:‘       ‘ – No se enviarán avisos (valor por omisión).
														‘EML’ – Se enviarán e-mail de avisos a la dirección indicada más arriba */

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

/*Datos para pagos electronicos*/
DECLARE @aDEEspacioCero					CHAR(5)		/*Filler*/

DECLARE @aDEEspacioBlanco1				CHAR(35)		/*Filler*/

DECLARE @aPECBUCuentaBenefiAcreditar	CHAR(22)		/*Mandatario para pagos electrónicos y siempre que el Beneficiario no exista 
														en el padrón en poder del Banco. Si el Beneficiario existiese, y no se informase 
														ninguna cuenta, se usará la cuenta por default declarada en dicho padrón.*/

DECLARE @aDESistemaCtaAcreditar			CHAR(2)		/*Campo mandatario para pagos electrónicos o por transferencias.
														'CC' - cuenta corriente		'CA' - caja de ahorro*/

DECLARE @aDEMonedaCtaAcredidarBanco		CHAR(3)		/*'ARS' - pesos (por default)*/

DECLARE @aDEEspacioBlanco2				CHAR(35)		/*Filler*/	

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

/*Canales de envios de pagos con cheques*/
DECLARE @aCECanalEntregaCheque			CHAR(3)		/*Canal de entrega de los pagos con cheques y sus posibles comprobantes adjuntos.
														Mandatario en caso de no contarse con esta indicación a nivel del Padrón de Beneficiarios.
														Actualmente: 'BCO’ – Se enviará a una sucursal del Banco.
														‘ADH’ – Se entregará el valor al Adherente, quien se encargará de enviárselo a 
														los beneficiarios.	El despacho de los cheques se realizará a la sucursal de un Banco,
														teniendo en cuenta el siguiente orden de prioridades:
														1ro. A la sucursal que se indique en el campo siguiente (si el canal fuese BCO) 
														siempre que esté habilitada en el servicio para el adherente.
														2do. Si se indicara BCO y no se indicare sucursal, a la sucursal que pueda haberse
														indicado en el maestro de Beneficiarios.	Si después de este escalonamiento no se 
														tuviese la forma de entrega, se rechazará la orden.*/

DECLARE @aCESucursalEnviarChequeCbte	CHAR(8)		/*Si el canal de entrega fuese ADH (entrega el propio adherente), este campo será tomado
														de la siguiente forma:
														Si este campo viene informado en blanco, se deberá enviar el cheque a la sucursal 010.
														Si en este campo viene un valor informado distinto de blanco, se deberá enviar el cheque
														a la sucursal especificada en dicho campo.
														Se espera recibir 3 dígitos numéricos ajustados a izquierda. 
														Solo para el caso de pagos con Giro en efectivo, si éste campo viene informado con 999, 
														se asumíra que el mismo puede ser pagado en cualesquiera de las sucursales habilitadas 
														para el servicio. En caso de indicarse 999, se rechazará la OP si la misma tuviera un 
														valor diferente de ‘NEC’, el campo “Acompañamiento de Comprobantes Adjuntos”*/
														
/*--------------------------------------------------------------------------------------------------------------------------------*/

/*Datos de la cuenta del adherente a ser debitada*/
DECLARE @aCADCero						CHAR(5)		/*Filler*/

DECLARE @aCADCbuCtaAdherenteDebitada	CHAR(22)		/*Si no se informasen datos de la cuenta débito, la orden se ejecutará sobre la cuenta de
														pago indicada por omisión al momento del alta del adherente.*/

DECLARE @aCADSistemaCtaDebitar			CHAR(2)		/*'CC' - cuenta corriente	'CA' - caja de ahorro*/

DECLARE @aCADMonedaCtaDebitar			CHAR(3)		/*'ARS' - pesos		'USD' - dólares*/

DECLARE @aCADTipoOperatoria				CHAR(1)		/*‘ ‘ ó ‘1’ - Pago a proveedores*/

DECLARE @aCADChequeCruzado				CHAR(1)		/*‘ ‘ ó ‘S’ - Cruzar el cheque       ‘N’ - NO cruzar el cheque
														Será necesario informar este valor solo si la orden de Pago es con cheque.*/

DECLARE @aCADEspacioBlanco				CHAR(78)		/*Filler*/	

/*FIN Variables del Archivo*/
/*================================================================================================================================*/

/*Variables de Calculo intermedio*/
DECLARE @FechaAcreditacion	DATETIME
DECLARE @Importe			DECIMAL(12,2)
DECLARE @Id_Proveedor		INT
DECLARE @Sucursal_Banco		VARCHAR(3)
DECLARE @Id_Cta_Banco		SMALLINT
/*FIN Variables de Calculo intermedio*/

/*Asignacion de variables*/
SET @FechaAcreditacion	= (SELECT Fecha_Acreditacion FROM Valores WHERE Id_Trans = @pId_Trans)
SET @Importe			= (SELECT Importe FROM Valores WHERE Id_Trans = @pId_Trans)
SET @Id_Proveedor		= (SELECT Id_Proveedor FROM Cbtes WHERE Id_Trans = @pId_Trans)
SET @Id_Cta_Banco		= (SELECT Id_Cta_Banco FROM Valores WHERE Id_Trans = @pId_Trans)
SET @Sucursal_Banco		= (SELECT RIGHT('000' + CAST(Sucursal AS VARCHAR), 3) FROM Bancos_Ctas WHERE Id_Cta_Banco = @Id_Cta_Banco)
/*FIN Asignacion de variables*/

SET @aRegistroId						= 'PO'

/*Identificacion y referencias de la orden*/
SET @aIRRefOrdenPago					= (SELECT LEFT(CAST(@pId_Trans AS VARCHAR) + '                         ', 25))
SET @aIRMotivoPago						= (SELECT LEFT(dbo.CF_Descrip_Cbte(@pId_Trans) + '                                                                                                         ', 105))

/*Datos para la ejecucion de la orden*/
SET @aDEFechaEjecucionPago				= (/*AAAA*/CAST(DATEPART(YY, @FechaAcreditacion) AS CHAR(4)) + /*MM*/RIGHT('00' + CAST(DATEPART(mm, @FechaAcreditacion) AS VARCHAR),2) + /*DD*/RIGHT('00' + CAST(DATEPART(dd, @FechaAcreditacion) AS VARCHAR),2))
SET @aDETipoPago						= '009' /*Transferencia Eléctronica*/
SET @aDEImportePagar					= (SELECT RIGHT( '000000000000000' + CAST(CAST((ISNULL(@Importe,0)) * 100 AS INT) AS VARCHAR), 15))
SET @aDEMonedaPago						= 'ARS'
SET @aDEFechaVenciCHPD					= (/*AAAA*/CAST(DATEPART(YY, @FechaAcreditacion) AS CHAR(4)) + /*MM*/RIGHT('00' + CAST(DATEPART(mm, @FechaAcreditacion) AS VARCHAR),2) + /*DD*/RIGHT('00' + CAST(DATEPART(dd, @FechaAcreditacion) AS VARCHAR),2))
SET @aDERequerirReciboPagoCheque		= 'N' /*No (No se requiere el recibo membretado)*/
SET @aDEClausulaNoOrden					= 'N' /*NO incluye leyenda "No a la orden"*/
SET @aDEIncluirFirmaChequeCADJ			= 'N' /*No (Implica imprimir el valor en la modalidad en lote y enviar al adherente para su firma manuscrita)*/
SET @aDEAcompañamiendoComprobante		= 'NEC' /*No existen comprobantes adjuntos asociados a esta orden*/
SET @aDETex1ReferenciaAsociadoOrden		= '                                                                                '
SET @aDETex2ReferenciaAsociadoOrden		= '                                                                                '
SET @aDETex3ReferenciaAsociadoOrden		= '                                                                                '
SET @aDEInstruccionCustomerService		= '                                                                                                                                                                '

/*Identificacion del proveedor o beneficiario del pago*/
SET @aIPBNroBeneficiario				= (SELECT LEFT(CAST(Id_Proveedor_Externo AS VARCHAR) + '                         ', 25) FROM Proveedores WHERE Id_Proveedor = @Id_Proveedor)
SET @aIPBNomBeneficiarioProveedor		= (SELECT LEFT(CAST(Razon_Social AS VARCHAR) + '                                                            ', 60) FROM Proveedores WHERE Id_Proveedor = @Id_Proveedor)
SET @aIPBTipoDocumentoBeneficiario		= '011' /*TIPO CUIT*/
SET @aIPBNroCuit_cuilBeneficiario		= (SELECT Cuit FROM Proveedores WHERE Id_Proveedor = @Id_Proveedor)

/*Domicilio, telefono, fax y mail del beneficiario*/
SET @aDTFMBDomicilioBeneficiario		= '                                                                                                                        '
SET @aDTFMBCodPostalBeneficiario		= '               '
SET @aDTFMBEmailBeneficiario			= '                                                                      '
SET @aDTFMBFAXBeneficiario				= '                         '
SET @aDTFMBMedioComunicacionBene		= '   '

/*Datos para pagos electronicos*/
SET @aDEEspacioCero						= '00000'
SET @aDEEspacioBlanco1					= '                                   '
SET @aPECBUCuentaBenefiAcreditar		= (SELECT CBU FROM Proveedores WHERE Id_Proveedor = @Id_Proveedor)
SET @aDESistemaCtaAcreditar				= 'CA' /*Caja de Ahorro*/
SET @aDEMonedaCtaAcredidarBanco			= 'ARS' /*Pesos*/
SET @aDEEspacioBlanco2					= '                                   '

/*Canales de envios de pagos con cheques*/
SET @aCECanalEntregaCheque				= 'BCO'
SET @aCESucursalEnviarChequeCbte		= @Sucursal_Banco

/*Datos de la cuenta del adherente a ser debitada*/
SET @aCADCero							= '00000'
SET @aCADCbuCtaAdherenteDebitada		= '0000000000000000000000'
SET @aCADSistemaCtaDebitar				= 'CC' /*Cuenta Corriente*/
SET @aCADMonedaCtaDebitar				= 'ARS' /*Pesos*/
SET @aCADTipoOperatoria					= '1' /*Pago a Proveedores*/
SET @aCADChequeCruzado					= 'N' /*NO cruzar el cheque*/
SET @aCADEspacioBlanco					= '                                                                              '

SET @Retorno	=	@aRegistroId					+ @aIRRefOrdenPago					+ @aIRMotivoPago +
					@aDEFechaEjecucionPago			+ @aDETipoPago						+ @aDEImportePagar +
					@aDEMonedaPago					+ @aDEFechaVenciCHPD				+ @aDERequerirReciboPagoCheque +
					@aDEClausulaNoOrden				+ @aDEIncluirFirmaChequeCADJ		+ @aDEAcompañamiendoComprobante +
					@aDETex1ReferenciaAsociadoOrden + @aDETex2ReferenciaAsociadoOrden	+ @aDETex3ReferenciaAsociadoOrden +
					@aDEInstruccionCustomerService	+ @aIPBNroBeneficiario				+ @aIPBNomBeneficiarioProveedor +
					@aIPBTipoDocumentoBeneficiario	+ @aIPBNroCuit_cuilBeneficiario		+ @aDTFMBDomicilioBeneficiario +
					@aDTFMBCodPostalBeneficiario	+ @aDTFMBEmailBeneficiario			+ @aDTFMBFAXBeneficiario +
					@aDTFMBMedioComunicacionBene	+ @aDEEspacioCero					+ @aDEEspacioBlanco1 +
					@aPECBUCuentaBenefiAcreditar	+ @aDESistemaCtaAcreditar			+ @aDEMonedaCtaAcredidarBanco +
					@aDEEspacioBlanco2				+ @aCECanalEntregaCheque			+ @aCESucursalEnviarChequeCbte +
					@aCADCero						+ @aCADCbuCtaAdherenteDebitada		+ @aCADSistemaCtaDebitar +
					@aCADMonedaCtaDebitar			+ @aCADTipoOperatoria				+ @aCADChequeCruzado +
					@aCADEspacioBlanco
					
RETURN @Retorno
END