160 lines
10 KiB
VB.net
160 lines
10 KiB
VB.net
Imports tsUtilidades.SEPA_3414
|
|
|
|
Namespace SEPA3414
|
|
Public Class Ordenante
|
|
Property CIF As String
|
|
Property NOMBRE As String
|
|
Property DOMICILIO As String
|
|
Property NUMERO As String
|
|
Property CPO As String
|
|
Property CIUDAD As String
|
|
Property PAIS As String
|
|
Property IBAN As String
|
|
Property BIC As String
|
|
Property SUFIJO As String
|
|
Property ENELMISMODIA As Boolean = False
|
|
|
|
End Class
|
|
Public Class Beneficiario
|
|
Property CIF As String
|
|
Property ImporteTransferencia As Double
|
|
Property IdentificacionPago As String
|
|
Property IdentificacionPagoFichero As String
|
|
Property IBAN As String
|
|
Property BIC As String
|
|
Property NOMBRE As String
|
|
Property Proposito As String
|
|
|
|
End Class
|
|
Public Class Utilidades
|
|
Public Shared Sub GeneraXML(Ordenante As Ordenante, ListaBeneficiarios As List(Of Beneficiario), FicheroXML As String, FechaEnvio As DateTime, FechaEjecucion As DateTime)
|
|
Try
|
|
'
|
|
' COMPROBACIONES
|
|
'
|
|
Dim benibaninc = ListaBeneficiarios.Where(Function(x) tsUtilidades.Bancos.Genericas.IBANCorrecto(x.IBAN) = False).ToList
|
|
Dim ListaErrores As String = ""
|
|
If benibaninc.Count > 0 Then
|
|
For Each ben In benibaninc
|
|
ListaErrores &= "El beneficiacio " & ben.NOMBRE & " Pago: " & ben.IdentificacionPago & " tiene un IBAN Incorrecto." & vbCrLf
|
|
Next
|
|
End If
|
|
If ListaErrores <> "" Then Throw New Exception(ListaErrores)
|
|
|
|
Dim org(0) As GenericOrganisationIdentification1
|
|
org(0) = New GenericOrganisationIdentification1 With {.Id = Ordenante.CIF & Ordenante.SUFIJO}
|
|
|
|
|
|
Dim Document As New SEPA_3414.Document
|
|
Document.CstmrCdtTrfInitn = New SEPA_3414.CustomerCreditTransferInitiationV03
|
|
Document.CstmrCdtTrfInitn.GrpHdr = New SEPA_3414.GroupHeader32
|
|
'Dim GrupoCabecera = Document.CstmrCdtTrfInitn.GrpHdr
|
|
Document.CstmrCdtTrfInitn.GrpHdr.MsgId = Now.ToString 'IDENTIFICACION UNICA
|
|
' Dim FechaEnvio As DateTime = Now
|
|
' Dim FechaEjecucion As DateTime = Now
|
|
Document.CstmrCdtTrfInitn.GrpHdr.CreDtTm = FechaEnvio.ToString("yyyy-MM-ddTHH:mm:ss")
|
|
Document.CstmrCdtTrfInitn.GrpHdr.NbOfTxs = ListaBeneficiarios.Where(Function(X) X.ImporteTransferencia > 0).Count.ToString
|
|
Document.CstmrCdtTrfInitn.GrpHdr.CtrlSum = ListaBeneficiarios.Where(Function(X) X.ImporteTransferencia > 0).Sum(Function(x) x.ImporteTransferencia).ToString("F2").Replace(",", ".")
|
|
Document.CstmrCdtTrfInitn.GrpHdr.CtrlSumSpecified = True
|
|
Document.CstmrCdtTrfInitn.GrpHdr.InitgPty = New SEPA_3414.PartyIdentification32
|
|
Document.CstmrCdtTrfInitn.GrpHdr.InitgPty.Nm = Ordenante.NOMBRE
|
|
Document.CstmrCdtTrfInitn.GrpHdr.InitgPty.Id = New Party6Choice With {.Item = New OrganisationIdentification4 With {.Othr = org}}
|
|
|
|
Document.CstmrCdtTrfInitn.GrpHdr.InitgPty.PstlAdr = New SEPA_3414.PostalAddress6
|
|
Document.CstmrCdtTrfInitn.GrpHdr.InitgPty.PstlAdr.StrtNm = Ordenante.DOMICILIO
|
|
If Ordenante.NUMERO <> "" Then Document.CstmrCdtTrfInitn.GrpHdr.InitgPty.PstlAdr.BldgNb = Ordenante.NUMERO
|
|
Document.CstmrCdtTrfInitn.GrpHdr.InitgPty.PstlAdr.PstCd = Ordenante.CPO
|
|
Document.CstmrCdtTrfInitn.GrpHdr.InitgPty.PstlAdr.TwnNm = Ordenante.CIUDAD
|
|
Document.CstmrCdtTrfInitn.GrpHdr.InitgPty.PstlAdr.Ctry = Ordenante.PAIS
|
|
'Dim listaInformacionPago As List(Of SEPA_3414.PaymentInstructionInformation3)
|
|
'Dim informacionpago As SEPA_3414.PaymentInstructionInformation3
|
|
Dim ListaPmtInf As New List(Of SEPA_3414.PaymentInstructionInformation3)
|
|
Dim PmtInf As New SEPA_3414.PaymentInstructionInformation3
|
|
PmtInf.PmtInfId = Ordenante.CIF
|
|
PmtInf.PmtMtd = SEPA_3414.PaymentMethod3Code.TRF
|
|
If Ordenante.BIC = "UCJAES2MXXX" Then
|
|
PmtInf.BtchBookg = False ' para unicaja
|
|
PmtInf.BtchBookgSpecified = True ' para unicaja
|
|
PmtInf.NbOfTxs = Document.CstmrCdtTrfInitn.GrpHdr.NbOfTxs
|
|
PmtInf.CtrlSum = ListaBeneficiarios.Where(Function(X) X.ImporteTransferencia > 0).Sum(Function(x) x.ImporteTransferencia)
|
|
PmtInf.CtrlSumSpecified = True ' para unicaja
|
|
PmtInf.PmtTpInf = New SEPA_3414.PaymentTypeInformation19
|
|
PmtInf.PmtTpInf.SvcLvl = New SEPA_3414.ServiceLevel8Choice With {.Item = "SEPA"} ' para Unicaja
|
|
PmtInf.PmtTpInf.LclInstrm = New SEPA_3414.LocalInstrument2Choice With {.Item = "SDCL"} ' para Unicaja
|
|
If ListaBeneficiarios(0).Proposito IsNot Nothing AndAlso ListaBeneficiarios(0).Proposito <> "" Then
|
|
PmtInf.PmtTpInf.CtgyPurp = New SEPA_3414.CategoryPurpose1Choice ' para Unicaja
|
|
PmtInf.PmtTpInf.CtgyPurp.Item = ListaBeneficiarios(0).Proposito ' para Unicaja
|
|
End If
|
|
|
|
End If
|
|
|
|
PmtInf.ReqdExctnDt = FechaEjecucion
|
|
'PmtInf.BtchBookg = False
|
|
PmtInf.Dbtr = New SEPA_3414.PartyIdentification32
|
|
PmtInf.Dbtr.Id = New Party6Choice
|
|
PmtInf.Dbtr.Id.Item = New OrganisationIdentification4 With {.Othr = org}
|
|
PmtInf.Dbtr.Nm = Ordenante.NOMBRE
|
|
PmtInf.Dbtr.PstlAdr = New SEPA_3414.PostalAddress6
|
|
PmtInf.Dbtr.PstlAdr.StrtNm = Ordenante.DOMICILIO
|
|
If Ordenante.NUMERO <> "" Then PmtInf.Dbtr.PstlAdr.BldgNb = Ordenante.NUMERO
|
|
PmtInf.Dbtr.PstlAdr.PstCd = Ordenante.CPO
|
|
PmtInf.Dbtr.PstlAdr.TwnNm = Ordenante.CIUDAD
|
|
PmtInf.Dbtr.PstlAdr.Ctry = Ordenante.PAIS
|
|
PmtInf.DbtrAcct = New SEPA_3414.CashAccount16
|
|
PmtInf.DbtrAcct.Id = New SEPA_3414.AccountIdentification4Choice With {.Item = Ordenante.IBAN}
|
|
PmtInf.DbtrAgt = New SEPA_3414.BranchAndFinancialInstitutionIdentification4
|
|
PmtInf.DbtrAgt.FinInstnId = New SEPA_3414.FinancialInstitutionIdentification7
|
|
PmtInf.DbtrAgt.FinInstnId.BIC = Ordenante.BIC
|
|
'If Ordenante.ENELMISMODIA Then
|
|
' PmtInf.PmtTpInf = New SEPA_3414.PaymentTypeInformation19
|
|
' PmtInf.PmtTpInf.SvcLvl = New SEPA_3414.ServiceLevel8Choice With {.Item = "SEPA"}
|
|
' PmtInf.PmtTpInf.LclInstrm = New SEPA_3414.LocalInstrument2Choice With {.Item = "SDCL"}
|
|
'End If
|
|
' PmtInf.Dbtr.Id.Item = Ordenante.CIF & "SEV"
|
|
Dim cts As New List(Of SEPA_3414.CreditTransferTransactionInformation10)
|
|
Dim ct As SEPA_3414.CreditTransferTransactionInformation10
|
|
For Each Beneficiario In ListaBeneficiarios
|
|
If Beneficiario.ImporteTransferencia > 0 Then
|
|
ct = New SEPA_3414.CreditTransferTransactionInformation10
|
|
ct.PmtId = New SEPA_3414.PaymentIdentification1
|
|
ct.PmtId.InstrId = Beneficiario.IdentificacionPago.Trim.PadRight(35, " ").Substring(0, 35)
|
|
ct.PmtId.EndToEndId = Beneficiario.IdentificacionPago.Trim.PadRight(35, " ").Substring(0, 35)
|
|
If Beneficiario.IdentificacionPagoFichero <> "" Then
|
|
ct.RmtInf = New SEPA_3414.RemittanceInformation5
|
|
ct.RmtInf.Ustrd = {Beneficiario.IdentificacionPagoFichero}
|
|
End If
|
|
If Beneficiario.Proposito <> "" Then
|
|
ct.PmtTpInf = New SEPA_3414.PaymentTypeInformation19
|
|
If Ordenante.ENELMISMODIA Then
|
|
ct.PmtTpInf.SvcLvl = New SEPA_3414.ServiceLevel8Choice With {.Item = "SEPA"}
|
|
ct.PmtTpInf.LclInstrm = New SEPA_3414.LocalInstrument2Choice With {.Item = "SDCL"}
|
|
End If
|
|
ct.PmtTpInf.CtgyPurp = New SEPA_3414.CategoryPurpose1Choice
|
|
ct.PmtTpInf.CtgyPurp.Item = Beneficiario.Proposito
|
|
End If
|
|
Dim sImporteTransferencia = Beneficiario.ImporteTransferencia.ToString("F2").Replace(",", ".")
|
|
ct.Amt = New SEPA_3414.AmountType3Choice
|
|
ct.Amt.Item = New SEPA_3414.ActiveOrHistoricCurrencyAndAmount With {.Ccy = "EUR", .Value = sImporteTransferencia}
|
|
ct.ChrgBr = SEPA_3414.ChargeBearerType1Code.DEBT
|
|
ct.CdtrAgt = New SEPA_3414.BranchAndFinancialInstitutionIdentification4
|
|
ct.CdtrAgt.FinInstnId = New SEPA_3414.FinancialInstitutionIdentification7
|
|
' ct.CdtrAgt.FinInstnId.BIC = Beneficiario.BIC
|
|
ct.Cdtr = New SEPA_3414.PartyIdentification32
|
|
ct.Cdtr.Nm = tsUtilidades.Extensiones.StringExtensions.ConvierteAAlfanumerico(Beneficiario.NOMBRE, "ÁÉÍÓÚáéíóúÑñÜü", "AEIOUaeiouNnUu")
|
|
ct.CdtrAcct = New SEPA_3414.CashAccount16
|
|
ct.CdtrAcct.Id = New SEPA_3414.AccountIdentification4Choice With {.Item = Beneficiario.IBAN}
|
|
cts.Add(ct)
|
|
End If
|
|
Next
|
|
PmtInf.CdtTrfTxInf = cts.ToArray
|
|
ListaPmtInf.Add(PmtInf)
|
|
' Document.CstmrCdtTrfInitn = New SEPA_3414.CustomerCreditTransferInitiationV03
|
|
Document.CstmrCdtTrfInitn.PmtInf = ListaPmtInf.ToArray
|
|
tsUtilidades.Utilidades.Serializar(Document, FicheroXML)
|
|
Catch ex As Exception
|
|
Throw New Exception(ex.Message, ex)
|
|
End Try
|
|
End Sub
|
|
End Class
|
|
End Namespace
|