Merge branch 'master' of http://192.168.10.111:8383/SIG
This commit is contained in:
884
App_Code/ClsPagoScotia.vb
Normal file
884
App_Code/ClsPagoScotia.vb
Normal file
@@ -0,0 +1,884 @@
|
|||||||
|
Option Explicit On
|
||||||
|
Option Strict On
|
||||||
|
|
||||||
|
Imports System.Data
|
||||||
|
Imports System.Data.SqlClient
|
||||||
|
Imports System.IO
|
||||||
|
Imports DocumentFormat.OpenXml.Math
|
||||||
|
Imports Extensiones
|
||||||
|
|
||||||
|
|
||||||
|
Public Class ClsPagoScotia
|
||||||
|
Implements IDisposable
|
||||||
|
|
||||||
|
Public Sub New()
|
||||||
|
' Constructor privado para evitar instanciación directa
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'====================================================================
|
||||||
|
' GeneraPagoScotiaBank – Layout Pagos Scotiabank
|
||||||
|
'====================================================================
|
||||||
|
' ▸ Genera un archivo de pagos masivos para Scotiabank (Archivo de intercambio EE).
|
||||||
|
' ▸ Registros y longitudes exactas:
|
||||||
|
' • HA, HB, DA, TB, TA → 370 caracteres
|
||||||
|
' • DM (correo) → 104 caracteres
|
||||||
|
' ▸ Se permite partición por bloques (TamanoBloque), pero todo dentro de un
|
||||||
|
' mismo método para claridad. Sólo se complementa con LimpiarTextoScotia().
|
||||||
|
'====================================================================
|
||||||
|
|
||||||
|
Public Property ErrorLayout As Boolean = False
|
||||||
|
Public Property LayoutStr As String = String.Empty
|
||||||
|
Public Property LayouErrorStr As String = String.Empty
|
||||||
|
Public Property TotalPagos As Integer = 0
|
||||||
|
Public Property NombreArchivo As String = ""
|
||||||
|
|
||||||
|
Public Function GeneraPagoScotiaBank(ByVal DTPendientes As DataTable, InsertaEnDB As Boolean, CveCuenta As Integer, UsuarioActual As Usuario) As Boolean
|
||||||
|
'ConvenioPagoElectronico = get_GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa: UsuarioActual.CveEmpresa).FiltroPrimeroValor("ConvenioPagoElectronico", $" CveCuenta = {DdlCuenta.SelectedValue}").ToString();
|
||||||
|
Dim TamanoBloque As Integer = 5000 ' pagos por bloque
|
||||||
|
|
||||||
|
ErrorLayout = False
|
||||||
|
LayoutStr = ""
|
||||||
|
LayouErrorStr = ""
|
||||||
|
TotalPagos = 0
|
||||||
|
NombreArchivo = ""
|
||||||
|
'Dim ErrorLayout As Boolean = False
|
||||||
|
|
||||||
|
'------------------- VALIDACIONES BÁSICAS ---------------------------
|
||||||
|
If DTPendientes Is Nothing OrElse DTPendientes.Rows.Count = 0 Then
|
||||||
|
LayouErrorStr = "No hay datos pendientes para generar el Layout de ScotiaBank."
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim CuentaCargo As String = DTPendientes.Rows(0)("CLABEOrigen").ToString
|
||||||
|
If CuentaCargo.Length <> 11 Then
|
||||||
|
LayouErrorStr = "El campo CuentaCargo debe ser numérico de 11 dígitos."
|
||||||
|
ErrorLayout = True
|
||||||
|
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim NumeroConvenio As String = DTPendientes.Rows(0)("ConvenioPagoElectronico").ToString
|
||||||
|
If NumeroConvenio.Trim.Length = 0 Then
|
||||||
|
LayouErrorStr = "El campo NumeroConvenio (ConvenioPagoElectronico) no está definido en los datos de la cuenta."
|
||||||
|
ErrorLayout = True
|
||||||
|
|
||||||
|
End If
|
||||||
|
|
||||||
|
If NumeroConvenio.Length <> 5 Then
|
||||||
|
LayouErrorStr = "El campo NumeroConvenio debe ser numérico de 5 dígitos."
|
||||||
|
ErrorLayout = True
|
||||||
|
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
|
'------------------- ACUMULADORES -----------------------------------
|
||||||
|
Dim sb As New StringBuilder()
|
||||||
|
'Dim totalPagos As Integer = 0
|
||||||
|
Dim totalImporte As Decimal = 0D
|
||||||
|
Dim pagosBloque As Integer = 0
|
||||||
|
Dim importeBloque As Decimal = 0D
|
||||||
|
Dim numBloque As Integer = 0
|
||||||
|
|
||||||
|
Dim SPACE As Char = " "c
|
||||||
|
Dim CERO As Char = "0"c
|
||||||
|
|
||||||
|
'------------------- HEADER ARCHIVO (HA) ----------------------------
|
||||||
|
Dim ha As New StringBuilder()
|
||||||
|
ha.Append("EE") ' 1‑2 Tipo Archivo
|
||||||
|
ha.Append("HA") ' 3‑4 Tipo Registro
|
||||||
|
ha.Append(NumeroConvenio.PadLeft(5, "0"c)) ' 5‑9 Nº Convenio
|
||||||
|
ha.Append("01") ' 10‑11 Secuencia fija "01"
|
||||||
|
ha.Append("00000000") ' 12‑19 Fecha generación
|
||||||
|
ha.Append("00000000") ' 20‑27 Fecha inicial (opcional)
|
||||||
|
ha.Append("00000000") ' 28‑35 Fecha final (opcional)
|
||||||
|
ha.Append("000") ' 36‑38 Código status "000"
|
||||||
|
ha.Append(" ".PadLeft(332, SPACE)) ' 39‑370 FILLER (espacios)
|
||||||
|
|
||||||
|
sb.AppendLine(ha.ToString())
|
||||||
|
|
||||||
|
'------------------- RECORRIDO DETALLES -----------------------------
|
||||||
|
Dim SBErrores As StringBuilder = New StringBuilder()
|
||||||
|
'Dim esError As Boolean = False
|
||||||
|
Dim idx As Integer = 0
|
||||||
|
|
||||||
|
Dim hb As New StringBuilder()
|
||||||
|
hb.Append("EE") ' 1‑2
|
||||||
|
hb.Append("HB") ' 3‑4
|
||||||
|
hb.Append("00") ' 5‑6 Moneda cuenta cargo (00=MXN)
|
||||||
|
hb.Append("0000") ' 7‑10 Uso futuro = ceros
|
||||||
|
hb.Append(CuentaCargo) ' 11‑21 Cuenta cargo (11)
|
||||||
|
hb.Append("0000000001") ' 22‑31 Referencia de cargo? (ejemplo)
|
||||||
|
hb.Append("000") ' 32‑34 Codigo del registro
|
||||||
|
hb.Append(" ".PadLeft(336, SPACE)) ' 35‑370 FILLER espacios
|
||||||
|
|
||||||
|
sb.AppendLine(hb.ToString())
|
||||||
|
|
||||||
|
For Each dr As DataRow In DTPendientes.Rows
|
||||||
|
|
||||||
|
''--- ¿Inicia BLOQUE? (HB) ---------------------------------------
|
||||||
|
'If idx Mod TamanoBloque = 0 Then
|
||||||
|
' numBloque += 1
|
||||||
|
' pagosBloque = 0
|
||||||
|
' importeBloque = 0D
|
||||||
|
|
||||||
|
' Dim hb As New StringBuilder(New String(" "c, 370))
|
||||||
|
' hb.Append("EE") ' 1‑2
|
||||||
|
' hb.Append("HB") ' 3‑4
|
||||||
|
' hb.Append("00") ' 5‑6 Moneda cuenta cargo (00=MXN)
|
||||||
|
' hb.Append("0000") ' 7‑10 Uso futuro = ceros
|
||||||
|
' hb.Append(CuentaCargo) ' 11‑21 Cuenta cargo (11)
|
||||||
|
' hb.Append("0000000001") ' 22‑31 Referencia de cargo? (ejemplo)
|
||||||
|
' hb.Append("000") ' 32‑34 Codigo del registro
|
||||||
|
' hb.Append(" ".PadLeft(336, SPACE)) ' 35‑370 FILLER espacios
|
||||||
|
|
||||||
|
' sb.AppendLine(hb.ToString())
|
||||||
|
'End If
|
||||||
|
|
||||||
|
'----------- DETALLE ALTA (DA) ----------------------------------
|
||||||
|
Dim importe As Decimal = 0D
|
||||||
|
If Not Decimal.TryParse(Convert.ToString(dr("Importe")), importe) Then
|
||||||
|
'Alert($"Importe inválido en fila {idx + 1}", TipoMensaje.MsgAdvertencia)
|
||||||
|
SBErrores.Append($"Importe inválido en fila {idx + 1}")
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
If importe <= 0D Then
|
||||||
|
Alert($"Importe debe ser mayor a 0 en fila {idx + 1}", TipoMensaje.MsgAdvertencia)
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim importeInt As String = CDec(Math.Round(importe * 100).ToEntero).ToString().PadLeft(15, CERO) ' 2 dec.
|
||||||
|
|
||||||
|
Dim fechaAplicacion As String = ClsPaginas.NowADS.ToString("yyyyMMdd")
|
||||||
|
Dim cveBenef As String = LimpiarTextoScotia(Convert.ToString(dr("CveProveedor"))).PadRight(20)
|
||||||
|
Dim rfc As String = LimpiarTextoScotia(Convert.ToString(dr("RFC"))).PadRight(13)
|
||||||
|
Dim nombreBen As String = LimpiarTextoScotia(Convert.ToString(dr("RazonSocial"))).PadRight(40)
|
||||||
|
Dim CveIE As Integer = dr("CveIE").ToString.ToEntero
|
||||||
|
Dim referenciaPago As String = CveIE.ToString.PadLeft(16, CERO) 'If(dr.Table.Columns.Contains("Referencia"), LimpiarTextoScotia(Convert.ToString(dr("Referencia"))).PadLeft(16, "0"c), New String("0"c, 16))
|
||||||
|
|
||||||
|
Dim CuentaDestino As String = ""
|
||||||
|
Dim cuentaDigitos As String = Convert.ToString(dr("CLABEDestino"))
|
||||||
|
Dim clabe As String = Convert.ToString(dr("CLABE"))
|
||||||
|
Dim CveBanco As String = dr("CveBanco").ToString.PadLeft(3, CERO)
|
||||||
|
|
||||||
|
|
||||||
|
If cuentaDigitos.Length = 11 AndAlso CveBanco = "044" Then
|
||||||
|
CuentaDestino = cuentaDigitos
|
||||||
|
ElseIf clabe.Length = 18 Then
|
||||||
|
CuentaDestino = clabe
|
||||||
|
Else
|
||||||
|
CuentaDestino = clabe
|
||||||
|
SBErrores.Append($"Cuenta {CuentaDestino} debe tener 11 o 18 dígitos.<br>")
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
|
Dim TipoCuenta As String = If(CuentaDestino.Length = 18, "9", "1") ' 09=18 dígitos, 01=11 dígitos
|
||||||
|
|
||||||
|
CuentaDestino = CuentaDestino.PadLeft(20, CERO)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
If CveBanco = "000" Then
|
||||||
|
SBErrores.Append($"CveBanco inválida en fila {idx + 1}. Debe ser numérico de 3 dígitos.")
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim ConceptoPago As String = dr("Observaciones").ToString.Trim
|
||||||
|
|
||||||
|
If ConceptoPago.Length > 50 Then
|
||||||
|
ConceptoPago = ConceptoPago.Substring(0, 50) ' Limitar a 50 caracteres
|
||||||
|
End If
|
||||||
|
ConceptoPago = ConceptoPago.PadRight(50, SPACE)
|
||||||
|
|
||||||
|
Dim da As New StringBuilder()
|
||||||
|
da.Append("EE") ' 1‑2
|
||||||
|
da.Append("DA") ' 3‑4
|
||||||
|
da.Append("04") ' 5‑6 Tipo movimiento (04=SPEI)
|
||||||
|
da.Append("00") ' 7‑8 Moneda pago (00=MXN)
|
||||||
|
da.Append(importeInt) ' 9‑23 Importe (15)
|
||||||
|
da.Append(fechaAplicacion) ' 24‑31
|
||||||
|
da.Append("03") ' 32‑33 Servicio‑concepto (03)
|
||||||
|
da.Append(cveBenef) ' 34‑53
|
||||||
|
da.Append(rfc) ' 54‑66
|
||||||
|
da.Append(nombreBen) ' 67‑106
|
||||||
|
da.Append(referenciaPago) ' 107‑122
|
||||||
|
da.Append("00000") ' 123‑127 Plaza pago (ceros)
|
||||||
|
da.Append("00000") ' 128‑132 Sucursal pago (ceros)
|
||||||
|
|
||||||
|
da.Append(CuentaDestino) ' 133‑152 clabe destino (ceros)
|
||||||
|
da.Append("00000") ' 153‑157 PAIS (ceros)
|
||||||
|
da.Append("".PadLeft(40, SPACE)) ' 158‑197 Ciudad espacio (espacios en blanco)
|
||||||
|
da.Append(TipoCuenta) ' 198-198 Tipo cuenta
|
||||||
|
da.Append(SPACE) ' 199-199 digito intercambio
|
||||||
|
da.Append("00000") ' 200-204 plaza cuenta banco
|
||||||
|
da.Append("044") ' 205-207 num banco emisor (044=ScotiaBank)
|
||||||
|
da.Append(CveBanco) ' 208-210 num banco receptor (044=ScotiaBank)
|
||||||
|
|
||||||
|
da.Append("001") ' 211-213 dias vigencia
|
||||||
|
da.Append(ConceptoPago) ' 214-263 Concepto pago
|
||||||
|
da.Append("".PadLeft(60, SPACE)) '264-283 CAMPO-USO-EMPRESA-1
|
||||||
|
' 284-303 CAMPO-USO - Empresa - 2
|
||||||
|
' 304-323 CAMPO-USO - Empresa - 3
|
||||||
|
da.Append("".PadLeft(41, CERO)) ' 324-326 CODIGO-STATUS - REGISTRO NUM 3
|
||||||
|
' 327-327 CVE-CAMBIO - INST NUM 1
|
||||||
|
' 328-330 CODIGO-STATUS - CAMBIO - INST NUM 3
|
||||||
|
' 331-338 FECHA DE PAGO (Pago en ventanilla) NUM 8
|
||||||
|
' 339-343 PLAZA DE PAGO (Pago en ventanilla) NUM 5
|
||||||
|
' 344-348 SUCURSAL DE PAGO (Pago en ventanilla) NUM 5
|
||||||
|
' 349-364 FOLIO-UNICO NUM 16
|
||||||
|
da.Append("".PadLeft(6, SPACE))
|
||||||
|
sb.AppendLine(da.ToString()) '345-370 FILLER ALF 6
|
||||||
|
|
||||||
|
'----------- DETALLE MAIL (DM) 104 -------------------------
|
||||||
|
|
||||||
|
Dim correo As String = dr("Correo").ToString.Trim
|
||||||
|
If correo.Trim.Length = 0 Then
|
||||||
|
SBErrores.Append($" {nombreBen} Email no definido en fila {idx + 1}. Debe ser un correo electrónico válido.<br>")
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim dm As New StringBuilder()
|
||||||
|
dm.Append("EE") ' 1‑2 Tipo archivoz
|
||||||
|
dm.Append("DM") ' 3‑4 Tipo registro
|
||||||
|
dm.Append(correo.PadRight(100)) ' 5‑104 Email + filler
|
||||||
|
da.Append("".PadLeft(34, CERO)) ' 105-138 Uso Futuro
|
||||||
|
da.Append("".PadLeft(30, SPACE)) ' 139-168 Clave de Rastreo llenar con espacios en blanco
|
||||||
|
da.Append("".PadLeft(20, SPACE)) ' 169-188 Referencia de Abono Banxico
|
||||||
|
dm.Append(" ") ' 189-190 Tipo de Operación anexo G
|
||||||
|
da.Append("".PadLeft(232, SPACE)) ' 191-370 FILLER
|
||||||
|
|
||||||
|
|
||||||
|
sb.AppendLine(dm.ToString())
|
||||||
|
|
||||||
|
'----------- ACUMULADORES ---------------------------------------
|
||||||
|
TotalPagos += 1
|
||||||
|
totalImporte += importe
|
||||||
|
pagosBloque += 1
|
||||||
|
importeBloque += importe
|
||||||
|
|
||||||
|
'----------- ¿CIERRA BLOQUE? (TB) -------------------------------
|
||||||
|
Dim bloqueCompleto As Boolean = (pagosBloque = TamanoBloque)
|
||||||
|
Dim ultimoRegistro As Boolean = (idx = DTPendientes.Rows.Count - 1)
|
||||||
|
idx += 1
|
||||||
|
Next
|
||||||
|
|
||||||
|
'If bloqueCompleto OrElse ultimoRegistro Then
|
||||||
|
Dim tb As New StringBuilder()
|
||||||
|
tb.Append("EE") ' 1‑2
|
||||||
|
tb.Append("TB") ' 3‑4
|
||||||
|
tb.Append(pagosBloque.ToString().PadLeft(7, CERO)) ' 5‑11 Cnt altas
|
||||||
|
tb.Append((importeBloque * 100).ToEntero.ToString().PadLeft(17, CERO)) ' 12‑28 Importe altas
|
||||||
|
tb.Append("".PadLeft(7, CERO)) ' 29‑35 Cnt bajas
|
||||||
|
tb.Append("".PadLeft(17, CERO)) ' 36‑52 Importe bajas
|
||||||
|
tb.Append("".PadLeft(195, CERO))
|
||||||
|
' 53-59 CANTIDAD DE MOVIMIENTOS ALTAS
|
||||||
|
' 60-76 IMPORTE DE MOVIMIENTOS ALTAS
|
||||||
|
' 77-83 CANTIDAD DE MOVIMIENTOS BAJAS
|
||||||
|
' 84-100 IMPORTE DE MOVIMIENTOS BAJAS
|
||||||
|
' 101-107 CANTIDAD DE MOVIMIENTOS ALTAS
|
||||||
|
' 108-124 IMPORTE DE MOVIMIENTOS ALTAS
|
||||||
|
' 125-131 CANTIDAD DE MOVIMIENTOS BAJAS
|
||||||
|
' 132-148 IMPORTE DE MOVIMIENTOS BAJAS
|
||||||
|
' 149-155 CANTIDAD DE MOVIMIENTOS PAGADOS
|
||||||
|
' 156-172 IMPORTE DE MOVIMIENTOS PAGADOS
|
||||||
|
' 173-179 CANTIDAD DE MOVIMIENTOS DEVUELTOS
|
||||||
|
' 180-196 IMPORTE DE MOVIMIENTOS DEVUELTOS
|
||||||
|
' 197-203 CANTIDAD DE MOVIMIENTOS RECH
|
||||||
|
' 204-220 IMPORTE DE MOVIMIENTOS RECH
|
||||||
|
' 221-227 CANTIDAD DE MOVIMIENTOS BAJA
|
||||||
|
' 228-244 IMPORTE DE MOVIMIENTOS BAJA
|
||||||
|
' 245-247 CODIGO-STATUS-REGISTRO
|
||||||
|
tb.Append("".PadLeft(123, SPACE)) ' 248-370 FILLER (espacios)
|
||||||
|
sb.AppendLine(tb.ToString())
|
||||||
|
'End If
|
||||||
|
|
||||||
|
'------------------- TRAILER ARCHIVO (TA) ---------------------------
|
||||||
|
Dim ta As New StringBuilder()
|
||||||
|
ta.Append("EE") ' 1‑2
|
||||||
|
ta.Append("TA") ' 3‑4
|
||||||
|
ta.Append(TotalPagos.ToString().PadLeft(7, CERO)) ' 5‑11
|
||||||
|
ta.Append((totalImporte * 100).ToEntero.ToString().PadLeft(17, CERO)) ' 12‑28
|
||||||
|
ta.Append("".PadLeft(7, CERO)) ' 29‑35 Cnt bajas
|
||||||
|
ta.Append("".PadLeft(17, CERO)) ' 36‑52 Importe bajas
|
||||||
|
ta.Append("".PadLeft(198, CERO))
|
||||||
|
' 53-59 CANTIDAD DE MOVIMIENTOS ALTAS
|
||||||
|
' 60-76 IMPORTE DE MOVIMIENTOS ALTAS
|
||||||
|
' 77-83 CANTIDAD DE MOVIMIENTOS BAJAS
|
||||||
|
' 84-100 IMPORTE DE MOVIMIENTOS BAJAS
|
||||||
|
' 101-107 CANTIDAD DE MOVIMIENTOS ALTAS
|
||||||
|
' 108-124 IMPORTE DE MOVIMIENTOS ALTAS
|
||||||
|
' 125-131 IMPORTE DE MOVIMIENTOS BAJAS
|
||||||
|
' 132-148 MOVIMIENTOS PAGADOS
|
||||||
|
' 149-155 IMPORTE DE MOVIMIENTOS PAGADOS
|
||||||
|
' 156-172 MOVIMIENTOS DEVUELTOS
|
||||||
|
' 173-179 IMPORTE DE MOVIMIENTOS DEVUELTOS
|
||||||
|
' 180-196 MOVIMIENTOS RECHAZADOS
|
||||||
|
' 197-203 CANTIDAD DE MOVIMIENTOS RECH
|
||||||
|
' 204-220 IMPORTE DE MOVIMIENTOS RECH
|
||||||
|
' 221-227 CANTIDAD DE MOVIMIENTOS BAJA
|
||||||
|
' 228-244 IMPORTE DE MOVIMIENTOS BAJA
|
||||||
|
' 245-247 CODIGO-STATUS-REGISTRO
|
||||||
|
' 248-250 CODIGO-STATUS-ARCHIVO
|
||||||
|
|
||||||
|
ta.Append("".PadLeft(120, SPACE))
|
||||||
|
|
||||||
|
sb.Append(ta.ToString())
|
||||||
|
|
||||||
|
'------------------- ESCRIBIR ARCHIVO -------------------------------
|
||||||
|
'File.WriteAllText(RutaArchivo, sb.ToString(), Encoding.ASCII)
|
||||||
|
|
||||||
|
|
||||||
|
NombreArchivo = $"pagos_{ClsPaginas.NowADS.ToString("ddMMyyyy")}_001.txt"
|
||||||
|
'"pagos_03062025_001.txt"
|
||||||
|
|
||||||
|
If InsertaEnDB Then
|
||||||
|
|
||||||
|
Dim ObjBancos As New ClsBancos
|
||||||
|
ObjBancos.IniciaTransacSQL()
|
||||||
|
|
||||||
|
Dim CveLayoutEnvio As Integer = ObjBancos.AddLayoutEnvios(NombreArchivo, ClsPaginas.NowADS(), CveCuenta, PorGrupos:=True)
|
||||||
|
|
||||||
|
If CveLayoutEnvio > 0 Then
|
||||||
|
For Each dr As DataRow In DTPendientes.Rows
|
||||||
|
If dr("CveProveedor").ToString <> "" Or dr("CvePersonal").ToString <> "" Then
|
||||||
|
If Not ObjBancos.AddLayoutEnviosDetalle(CveLayoutEnvio, dr("CveIE").ToString.ToEntero, dr("CveProveedor").ToString.ToEntero, dr("CvePersonal").ToString.ToEntero, 1, "Observaciones") Then
|
||||||
|
ErrorLayout = True
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Else
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
If ErrorLayout Then
|
||||||
|
ObjBancos.RollBack()
|
||||||
|
ObjBancos.Dispose()
|
||||||
|
Else
|
||||||
|
ObjBancos.Commit()
|
||||||
|
ObjBancos.Dispose()
|
||||||
|
End If
|
||||||
|
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim path As String = String.Format("{0}Layout\{1}", UsuarioActual.Empresa.Ruta, NombreArchivo)
|
||||||
|
Dim pathDirectorio As String = String.Format("{0}Layout\", UsuarioActual.Empresa.Ruta)
|
||||||
|
|
||||||
|
If File.Exists(path) Then
|
||||||
|
File.Delete(path)
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Not Directory.Exists(pathDirectorio) Then
|
||||||
|
Directory.CreateDirectory(pathDirectorio)
|
||||||
|
End If
|
||||||
|
|
||||||
|
'Dim Texto As String =
|
||||||
|
|
||||||
|
Dim fs As FileStream = File.Create(path)
|
||||||
|
Dim info As Byte() = New UTF8Encoding(True).GetBytes(sb.ToString)
|
||||||
|
fs.Write(info, 0, info.Length)
|
||||||
|
fs.Close()
|
||||||
|
|
||||||
|
If ErrorLayout Then
|
||||||
|
LayouErrorStr = LayouErrorStr & $"{SBErrores.ToString}"
|
||||||
|
Return False
|
||||||
|
Else
|
||||||
|
LayoutStr = sb.ToString()
|
||||||
|
Return True
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
End Function
|
||||||
|
|
||||||
|
'====================================================================
|
||||||
|
' Limpia texto: A‑Z, 0‑9, «@» y «.» (UpperCase) – el resto se descarta
|
||||||
|
'====================================================================
|
||||||
|
Private Function LimpiarTextoScotia(ByVal valor As String) As String
|
||||||
|
Dim sb As New StringBuilder()
|
||||||
|
For Each ch As Char In If(valor, String.Empty).ToUpperInvariant()
|
||||||
|
If Char.IsLetterOrDigit(ch) OrElse ch = "@"c OrElse ch = "."c Then sb.Append(ch)
|
||||||
|
Next
|
||||||
|
Return sb.ToString()
|
||||||
|
End Function
|
||||||
|
|
||||||
|
|
||||||
|
#Region "LAYOUT SCOTIABANK"
|
||||||
|
|
||||||
|
'====================================================================
|
||||||
|
' GenerarLayoutPagosScotia
|
||||||
|
'====================================================================
|
||||||
|
Public Function AltaCuentasScotia(
|
||||||
|
DtPendientesTemp As DataTable,
|
||||||
|
UsuarioActual As Usuario,
|
||||||
|
Optional NumeroConvenio As String = "", ' 5 dígitos
|
||||||
|
Optional SistemaCentral As String = "001", ' 3 dígitos
|
||||||
|
Optional TipoArchivo As String = "EE", ' 2 digitos (define tu propio código)
|
||||||
|
Optional Secuencia As Integer = 1, ' 3 dígitos, consecutivo del día
|
||||||
|
Optional MovimientoDefault As Char = "P"c ' P =pago, cambia si usas A/C/B
|
||||||
|
) As Boolean
|
||||||
|
|
||||||
|
ErrorLayout = False
|
||||||
|
LayoutStr = ""
|
||||||
|
LayouErrorStr = ""
|
||||||
|
TotalPagos = 0
|
||||||
|
NombreArchivo = ""
|
||||||
|
|
||||||
|
'------------------- Constantes de layout -------------------
|
||||||
|
Dim LARGO_REGISTRO As Integer = 140
|
||||||
|
Dim Cero As Char = "0"c
|
||||||
|
Dim Space As Char = " "c
|
||||||
|
|
||||||
|
Dim NumeroArchivo As Integer = 1 ' ajústalo si manejas consecutivo diario
|
||||||
|
Dim FechaArchivo As Date = ClsPaginas.NowADS().Date
|
||||||
|
|
||||||
|
'If DtPendientesTemp Is Nothing Then DtPendientesTemp = DTPendientes.Copy
|
||||||
|
DtPendientesTemp.CaseSensitive = False
|
||||||
|
|
||||||
|
DtPendientesTemp = DtPendientesTemp.FiltraParametros("", "",
|
||||||
|
{"CLABEDestino", "CLABE", "CveBanco", "CveCuentaDeposito", "EstatusCtaDeposito", "EstatusPagoElectronicoScotia", "BancoNombre", "FechaEliminacion", "ConvenioPagoElectronico"}
|
||||||
|
)
|
||||||
|
|
||||||
|
If DtPendientesTemp.Rows.Count = 0 Then
|
||||||
|
LayouErrorStr = "No hay datos pendientes para generar el Layout de ScotiaBank."
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
'------------------- Acumulados para el trailer -------------
|
||||||
|
Dim Altas As Integer = 0, Cambios As Integer = 0
|
||||||
|
Dim Bajas As Integer = 0, Consultas As Integer = 0
|
||||||
|
'------------------- Acumulados para el trailer -------------
|
||||||
|
|
||||||
|
'------------------- ConvenioPagoElectronico = "0000000" ' 5 dígitos
|
||||||
|
If Not NumeroConvenio.Trim.Length > 0 Then
|
||||||
|
NumeroConvenio = DtPendientesTemp.Rows(0)("ConvenioPagoElectronico").ToString
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
If NumeroConvenio.Trim.Length = 0 Then
|
||||||
|
LayouErrorStr = "El campo NumeroConvenio (ConvenioPagoElectronico) no está definido en los datos de la cuenta."
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim sb As New StringBuilder
|
||||||
|
|
||||||
|
'=============================================================
|
||||||
|
' 1) HEADER (140 )
|
||||||
|
'=============================================================
|
||||||
|
'Dim hoy As Date = Now.Date
|
||||||
|
'Dim hora As String = Now.ToString("HHmmss")
|
||||||
|
|
||||||
|
Dim Header As New StringBuilder()
|
||||||
|
Header.Append(TipoArchivo.PadRight(2, Space)) 'TIPO ARCHIVO (2)
|
||||||
|
Header.Append("HA") 'TIPO REGISTRO (2)
|
||||||
|
Header.Append("JDF") 'SISTEMA-CENTRAL (3)
|
||||||
|
Header.Append(NumeroConvenio.PadLeft(7, Cero)) 'NUMERO DE CONTRATO (7) ' ocupa 5 dígitos pero en el layout se usa 7
|
||||||
|
Header.Append(ClsPaginas.NowADS.ToString("yyyyMMdd")) 'FECHA-SOLICITUD (8)
|
||||||
|
Header.Append("001") 'SECUENCIA (3)
|
||||||
|
Header.Append("M") 'MANTENIMIENTO-O-CONSULTA (1)
|
||||||
|
Header.Append(" ".PadLeft(8, Space)) 'FECHA GENERACIÓN ARCHIVO (8) *** Respusta de ScotiaBank ***
|
||||||
|
Header.Append(" ".PadLeft(6, Space)) 'Hora GENERACIÓN ARCHIVO (6) *** Respusta de ScotiaBank ***
|
||||||
|
Header.Append(" ".PadLeft(3, Space)) 'CÓDIGO-RESPUESTA (3) *** Respusta de ScotiaBank ***
|
||||||
|
Header.Append(" ".PadLeft(97, Space)) 'FILLER (97)
|
||||||
|
|
||||||
|
sb.AppendLine(Header.ToString)
|
||||||
|
|
||||||
|
'=============================================================
|
||||||
|
' 2) DETALLES (140 )
|
||||||
|
'=============================================================
|
||||||
|
Dim Contador As Integer = 2
|
||||||
|
Dim SBErrores As New StringBuilder
|
||||||
|
For Each dr As DataRow In DtPendientesTemp.Rows
|
||||||
|
|
||||||
|
Dim registro As New StringBuilder()
|
||||||
|
Dim esError As Boolean = False
|
||||||
|
|
||||||
|
'---- Datos base tomados de DTPendientes ------------------
|
||||||
|
|
||||||
|
Dim CuentaDestino As String = ""
|
||||||
|
Dim cuentaDigitos As String = dr("CLABEDestino").ToString.Trim
|
||||||
|
Dim Clabe As String = dr("CLABE").ToString.Trim
|
||||||
|
Dim limite As String = (9000000000 * 100D).ToString("F0")
|
||||||
|
Dim banco As String = dr("CveBanco").ToString.PadLeft(3, Cero)
|
||||||
|
|
||||||
|
If cuentaDigitos.Length = 11 AndAlso banco = "044" Then
|
||||||
|
CuentaDestino = cuentaDigitos
|
||||||
|
ElseIf Clabe.Length = 18 Then
|
||||||
|
CuentaDestino = Clabe
|
||||||
|
Else
|
||||||
|
CuentaDestino = Clabe
|
||||||
|
SBErrores.Append($"Linea {Contador} Cuenta *{CuentaDestino}* debe tener 11 o 18 dígitos.<br>")
|
||||||
|
esError = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
If banco.Length <> 3 OrElse Not IsNumeric(banco) OrElse banco = "000" Then
|
||||||
|
SBErrores.Append($"Linea {Contador} Cuenta *{CuentaDestino}* código {banco} no es un banco válido. Debe ser numérico de 3 dígitos.<br>")
|
||||||
|
esError = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim CveCuentaDeposito As String = dr("CveCuentaDeposito").ToString
|
||||||
|
|
||||||
|
'Dim movimiento As Char = If(dr.Table.Columns.Contains("Movimiento"),
|
||||||
|
' dr("Movimiento").ToString.FirstOrDefault(), MovimientoDefault)
|
||||||
|
|
||||||
|
Dim CVETIPOCUENTA As String = If(CuentaDestino.Length = 18, "09", "01")
|
||||||
|
|
||||||
|
|
||||||
|
'---- TIPO DE REGISTRO ------------------
|
||||||
|
|
||||||
|
'ANEXO E de ScotiaBank
|
||||||
|
'DA = DETALLE ALTA DE DATOS DE CUENTA Y LIMITE RELACIONADO
|
||||||
|
'DC = DETALLE CAMBIOS DE DATOS DE CUENTA Y LIMITE RELACIONADO
|
||||||
|
'DB = DETALLE BAJA DE DATOS DE CUENTA Y LIMITE RELACIONADO
|
||||||
|
'DQ = DETALLE CONSULTA DE DATOS DE CUENTA Y LIMITE RELACIONADO
|
||||||
|
'DR = DETALLE RESPUESTA *** Respusta de ScotiaBank ***
|
||||||
|
|
||||||
|
Dim TipoRegistro As String = "DA" ' Por default es D (Alta), cambia a C si es cambio o baja
|
||||||
|
'---- TIPO DE REGISTRO ------------------
|
||||||
|
|
||||||
|
'---- Construcción del registro ---------------------------
|
||||||
|
registro.Append(TipoArchivo.PadRight(2, Space)) 'TIPO ARCHIVO (2)
|
||||||
|
registro.Append(TipoRegistro) 'TIPO REGISTRO (2)
|
||||||
|
registro.Append("A") 'CVE-MOVIMIENTO-CUENTA (1)
|
||||||
|
registro.Append(CVETIPOCUENTA) 'CVE-TIPO - CUENTA (2)
|
||||||
|
registro.Append("00") 'CVE-MONEDA - CUENTA (2) 00 Pesps 01 Dollares
|
||||||
|
registro.Append(banco) 'NUM-banco - CUENTA (3)
|
||||||
|
registro.Append(CuentaDestino.PadLeft(20, Cero)) 'NUM-CUENTA (20)
|
||||||
|
registro.Append(ClsPaginas.NowADS.AddDays(364).ToString("yyyyMMdd")) 'FECHA DE ELIMINACIÓN (8)
|
||||||
|
registro.Append(CveCuentaDeposito.PadRight(50, Space)) 'DESCRIPCIÓN (50)
|
||||||
|
registro.Append(limite.PadLeft(17, Cero)) 'LIMITE-POR-TRANSACCIÓN (17)
|
||||||
|
registro.Append("04") 'TIPO DE PAGO (2)
|
||||||
|
registro.Append(" ") 'CÓDIGO-RESPUESTA (3) CÓDIGO DE RESPUESTA DE REG. "D*", ANEXO 'C' *** Respusta de ScotiaBank ***
|
||||||
|
registro.Append(" ".PadLeft(28, Space)) 'FILLER (28)
|
||||||
|
|
||||||
|
If registro.Length = LARGO_REGISTRO AndAlso Not esError Then
|
||||||
|
sb.AppendLine(registro.ToString)
|
||||||
|
Select Case TipoRegistro
|
||||||
|
Case "DA"
|
||||||
|
Altas = Altas + 1
|
||||||
|
Case "DC"
|
||||||
|
Cambios = Cambios + 1
|
||||||
|
Case "DB"
|
||||||
|
Bajas = Bajas + 1
|
||||||
|
Case "DQ"
|
||||||
|
Consultas = Consultas + 1
|
||||||
|
Case Else
|
||||||
|
esError = True
|
||||||
|
ErrorLayout = True
|
||||||
|
End Select
|
||||||
|
Else
|
||||||
|
|
||||||
|
If registro.Length <> LARGO_REGISTRO Then
|
||||||
|
SBErrores.Append($"Error linea {Contador} tamaño esperado: {LARGO_REGISTRO} tamaño: {registro.Length}, <br>")
|
||||||
|
End If
|
||||||
|
|
||||||
|
ErrorLayout = True
|
||||||
|
|
||||||
|
End If
|
||||||
|
Contador += 1
|
||||||
|
Next
|
||||||
|
|
||||||
|
'=============================================================
|
||||||
|
' 3) TRAILER (PIE) (140)
|
||||||
|
'=============================================================
|
||||||
|
Dim trailer As New StringBuilder()
|
||||||
|
|
||||||
|
|
||||||
|
trailer.Append(TipoArchivo.PadRight(2, Space)) 'TIPO DE ARCHIVO (2)
|
||||||
|
trailer.Append("TA") 'TIPO DE REGISTRO (2)
|
||||||
|
trailer.Append(Altas.ToString.PadLeft(8, Cero)) 'CANTIDAD DE MOVIMIENTOS ALTAS (8)
|
||||||
|
trailer.Append(Cambios.ToString.PadLeft(8, Cero)) 'CANTIDAD DE MOVIMIENTOS CAMBIOS (8)
|
||||||
|
trailer.Append(Bajas.ToString.PadLeft(8, Cero)) 'CANTIDAD DE MOVIMIENTOS BAJAS (8)
|
||||||
|
trailer.Append(Consultas.ToString.PadLeft(8, Cero)) 'CANTIDAD DE CONSULTAS (8)
|
||||||
|
'MOVIMIENTOS ACEPTADOS
|
||||||
|
trailer.Append("0".PadLeft(8, Cero)) 'CANTIDAD DE MOVIMIENTOS ALTAS (8) *** Respusta de ScotiaBank ***
|
||||||
|
trailer.Append("0".PadLeft(8, Cero)) 'CANTIDAD DE MOVIMIENTOS CAMBIOS (8) *** Respusta de ScotiaBank ***
|
||||||
|
trailer.Append("0".PadLeft(8, Cero)) 'CANTIDAD DE MOVIMIENTOS BAJAS (8) *** Respusta de ScotiaBank ***
|
||||||
|
trailer.Append("0".PadLeft(8, Cero)) 'CANTIDAD DE CONSULTAS (8) *** Respusta de ScotiaBank ***
|
||||||
|
'MOVIMIENTOS RECHAZADOS
|
||||||
|
trailer.Append("0".PadLeft(8, Cero)) 'CANTIDAD DE MOVIMIENTOS ALTAS (8) *** Respusta de ScotiaBank ***
|
||||||
|
trailer.Append("0".PadLeft(8, Cero)) 'CANTIDAD DE MOVIMIENTOS CAMBIOS (8) *** Respusta de ScotiaBank ***
|
||||||
|
trailer.Append("0".PadLeft(8, Cero)) 'CANTIDAD DE MOVIMIENTOS BAJAS (8) *** Respusta de ScotiaBank ***
|
||||||
|
trailer.Append("0".PadLeft(8, Cero)) 'CANTIDAD DE CONSULTAS (8) *** Respusta de ScotiaBank ***
|
||||||
|
trailer.Append("0".PadLeft(3, Cero)) 'CÓDIGO-RESPUESTA (3) *** Respusta de ScotiaBank ***
|
||||||
|
trailer.Append("0".PadLeft(3, Cero)) 'CÓDIGO-RESPUESTA - Archivo (3) *** Respusta de ScotiaBank ***
|
||||||
|
trailer.Append(" ".PadLeft(34, Space)) 'FILLER (34)
|
||||||
|
|
||||||
|
sb.Append(trailer.ToString)
|
||||||
|
|
||||||
|
'------------------- Crear archivo y mostrar descargas ------------------
|
||||||
|
|
||||||
|
If sb.Length = 0 Then
|
||||||
|
SBErrores.Append("No se generó ningún registro válido para Bajío.<br>")
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
|
||||||
|
NombreArchivo = $"altacuentasScotia_{FechaArchivo:ddMMyyyy}_{NumeroArchivo:D3}.txt"
|
||||||
|
|
||||||
|
If SBErrores.Length > 0 Then
|
||||||
|
LayouErrorStr = "Errores encontrados al generar el layout de ScotiaBank:<br>" & SBErrores.ToString
|
||||||
|
ErrorLayout = True
|
||||||
|
Else
|
||||||
|
If Not CreaArchivo(sb.ToString, NombreArchivo, UsuarioActual:=UsuarioActual) Then
|
||||||
|
ErrorLayout = True
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
LayoutStr = sb.ToString()
|
||||||
|
|
||||||
|
Return If(ErrorLayout, False, True)
|
||||||
|
|
||||||
|
|
||||||
|
'If SBErrores.Length > 0 Then
|
||||||
|
' LayouErrorStr = "Errores encontrados al generar el layout de ScotiaBank:<br>" & SBErrores.ToString
|
||||||
|
' ErrorLayout = True
|
||||||
|
'Else
|
||||||
|
' If CreaArchivo(sb.ToString, NombreArchivo, UsuarioActual:=UsuarioActual) Then
|
||||||
|
' DVDescargaPagos.Visible = False
|
||||||
|
' DVDescargaReporte.Visible = False
|
||||||
|
' LblCuentas.Text = "Cuentas Bajio"
|
||||||
|
' 'NombreArchivoBancomer = "" 'No usamos estos para scotia
|
||||||
|
' 'NombreArchivoInterbancario = ""
|
||||||
|
' 'NombreArchivoCIE = ""
|
||||||
|
' 'NombreArchivo = NombreArchivoEnviado
|
||||||
|
' DVDescargaCuentas1.Visible = True
|
||||||
|
' LnkDescargaCuentas1.Text = NombreArchivo
|
||||||
|
' RegistraScript("$('#ModalDescarga').modal({ backdrop: 'static', keyboard: false});")
|
||||||
|
' UpModalDescarga.Update()
|
||||||
|
' End If
|
||||||
|
'End If
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
'CargaDatos()
|
||||||
|
|
||||||
|
End Function
|
||||||
|
|
||||||
|
|
||||||
|
Private Function CreaArchivo(TextoCompleto As String, NombreArchivoEnviado As String, UsuarioActual As Usuario) As Boolean
|
||||||
|
|
||||||
|
|
||||||
|
DirectoryExistsCreate(String.Format("{0}Layout", UsuarioActual.Empresa.Ruta))
|
||||||
|
Dim path As String = String.Format("{0}Layout\{1}", UsuarioActual.Empresa.Ruta, NombreArchivo)
|
||||||
|
|
||||||
|
Try
|
||||||
|
If File.Exists(path) Then
|
||||||
|
File.Delete(path)
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim fs As FileStream = File.Create(path)
|
||||||
|
|
||||||
|
Dim info As Byte() = New UTF8Encoding(True).GetBytes(TextoCompleto)
|
||||||
|
fs.Write(info, 0, info.Length)
|
||||||
|
fs.Close()
|
||||||
|
Catch ex As Exception
|
||||||
|
ErrorLayout = True
|
||||||
|
|
||||||
|
End Try
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Return True
|
||||||
|
|
||||||
|
End Function
|
||||||
|
|
||||||
|
'---------------------------------------------------------------
|
||||||
|
' Limpia y normaliza texto para Scotia (solo A-Z,0-9,espacio)
|
||||||
|
'---------------------------------------------------------------
|
||||||
|
Private Function LimpiarTextoScotia(txt As String, largo As Integer) As String
|
||||||
|
Dim clean = New String(txt _
|
||||||
|
.Normalize(System.Text.NormalizationForm.FormD) _
|
||||||
|
.Where(Function(ch) Char.IsLetterOrDigit(ch) OrElse ch = " "c) _
|
||||||
|
.ToArray()) _
|
||||||
|
.ToUpperInvariant()
|
||||||
|
Return clean.PadRight(largo).Substring(0, largo)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
|
||||||
|
Public Shared Function AltaCuentaScotiaCodigoRespuestaAnexoC(ByVal codigo As String) As String
|
||||||
|
Select Case codigo
|
||||||
|
Case "002" : Return "NO EXISTE NOMBRE DE APLICACION EN EL NOMBRE DE ARCHIVO"
|
||||||
|
Case "003" : Return "EL NUM DE CONTRATO EN EL NOMBRE DE ARCHIVO NO ES NUMERICO"
|
||||||
|
Case "004" : Return "EL NUMERO DE CONTRATO EN EL NOMBRE DE ARCHIVO ES CERO"
|
||||||
|
Case "005" : Return "EL NUM DE SECUENCIA EN NOMBRE DE ARCHIVO NO ES NUMERICO"
|
||||||
|
Case "006" : Return "EL NUMERO DE SECUENCIA EN EL NOMBRE DE ARCHIVO ES CERO"
|
||||||
|
Case "007" : Return "LA CLAVE DE ARCHIVO ES INVALIDA"
|
||||||
|
Case "008" : Return "LA CLAVE DE REGISTRO ES INVALIDA"
|
||||||
|
Case "009" : Return "NO EXISTE NOMBRE DE APLICACION EN EL REGISTRO HA"
|
||||||
|
Case "010" : Return "EL NOMBRE DE APLICACION NO CORRESPONDE AL ARCHIVO"
|
||||||
|
Case "011" : Return "EL NUMERO DE CONTRATO EN EL REGISTRO HA NO ES NUMERICO"
|
||||||
|
Case "012" : Return "EL NUMERO DE CONTRATO EN EL REGISTRO HA ES CERO"
|
||||||
|
Case "013" : Return "EL NUMERO DE CONTRATO NO CORRESPONDE AL ARCHIVO"
|
||||||
|
Case "014" : Return "EL CONTRATO NO EXISTE"
|
||||||
|
Case "015" : Return "EL NUMERO DE SECUENCIA EN EL REGISTRO HA NO ES NUMERICO"
|
||||||
|
Case "016" : Return "EL NUMERO DE SECUENCIA EN EL REGISTRO HA ES CERO"
|
||||||
|
Case "017" : Return "EL NUMERO DE SECUENCIA NO CORRESPONDE AL ARCHIVO"
|
||||||
|
Case "018" : Return "EL MOVIMIENTO CUENTA ES UN DATO OBLIGATORIO"
|
||||||
|
Case "019" : Return "EL MOVIMIENTO CUENTA DEBE SER A"
|
||||||
|
Case "020" : Return "EL NUMERO DE BANCO NO ES NUMERICO"
|
||||||
|
Case "021" : Return "EL NUMERO DE BANCO NO EXISTE EN EL CATALOGO"
|
||||||
|
Case "022" : Return "EL TIPO DE CUENTA ES INVALIDO PARA ESE BANCO"
|
||||||
|
Case "023" : Return "EL TIPO DE CUENTA NO ES NUMERICO"
|
||||||
|
Case "024" : Return "LA MONEDA DE LA CUENTA NO ES NUMERICO"
|
||||||
|
Case "025" : Return "LA MONEDA DE LA CUENTA NO TIENE UN VALOR PERMITIDO"
|
||||||
|
Case "026" : Return "LA FECHA DE DE VIGENCIA NO ES NUMERICA"
|
||||||
|
Case "027" : Return "LA FECHA DE VIGENCIA ESTA FUERA DE RANGO"
|
||||||
|
Case "028" : Return "EL IMPORTE LIMITE ES NO NUMERICO"
|
||||||
|
Case "029" : Return "EL NUMERO DE ALTAS SOLICITADAS NO ES NUMERICO"
|
||||||
|
Case "030" : Return "EL NUMERO DE CAMBIOS SOLICITADOS NO ES NUMERICO"
|
||||||
|
Case "031" : Return "EL NUMERO DE BAJAS SOLICITADAS NO ES NUMERICO"
|
||||||
|
Case "032" : Return "EL NUMERO DE CONSULTAS SOLICITADAS NO ES NUMERICO"
|
||||||
|
Case "033" : Return "EL NUMERO DE ALTAS SOLICITADAS NO COINCIDE"
|
||||||
|
Case "034" : Return "EL NUMERO DE CAMBIOS SOLICITADOS NO COINCIDE"
|
||||||
|
Case "035" : Return "EL NUMERO DE BAJAS SOLICITADAS NO COINCIDE"
|
||||||
|
Case "036" : Return "EL NUMERO DE CONSULTAS SOLICITADAS NO COINCIDE"
|
||||||
|
Case "037" : Return "ARCHIVO RECHAZADO POR MOVIMIENTOS RECHAZADOS"
|
||||||
|
Case "038" : Return "ARCHIVO RECHAZADO POR NO EXISTIR MOVIMIENTOS CORRECTOS"
|
||||||
|
Case "039" : Return "EL NUMERO DE CUENTA NO ES NUMERICO"
|
||||||
|
Case "040" : Return "EL NUMERO DE CUENTA NO CERO"
|
||||||
|
Case "041" : Return "EL NUMERO DE CUENTA NO EXISTE"
|
||||||
|
Case "042" : Return "EL NUMERO DE CUENTA NO PERTENECE A ESE BANCO"
|
||||||
|
Case "043" : Return "LA PLAZA ABM NO EXISTE"
|
||||||
|
Case "044" : Return "EL DIGITO VERIFICADOR DE LA CLABE NO CORRESPONDE"
|
||||||
|
Case "045" : Return "LA CUENTA NO ESTA ACTIVA"
|
||||||
|
Case "046" : Return "LA CUENTA YA EXISTE"
|
||||||
|
Case "047" : Return "LA CUENTA NO EXISTE"
|
||||||
|
Case "048" : Return "EL TIPO DE CUENTA NO ES NUMERICO"
|
||||||
|
Case "049" : Return "EL TIPO DE CUENTA NO TIENE UN VALOR PERMITIDO"
|
||||||
|
Case "050" : Return "EL IMPORTE LIMITE ES CERO"
|
||||||
|
Case "051" : Return "NO EXISTE LA CLAVE DE MANTEMIMIENTO/CONSULTA"
|
||||||
|
Case "052" : Return "LA CLAVE DE MANT/CONS NO TIENE UN VALOR PERMITIDO"
|
||||||
|
Case "053" : Return "TIPO DE REGISTRO NO VALIDO PARA ARCHIVO DE CONSULTA"
|
||||||
|
Case Else : Return "CÓDIGO DESCONOCIDO"
|
||||||
|
End Select
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Shared Function PagosScotiaCodigoRespuestaAnexoC(ByVal codigo As String) As String
|
||||||
|
codigo = codigo.PadLeft(3, "0"c)
|
||||||
|
Select Case codigo
|
||||||
|
Case "000" : Return "NO ERROR (OK)"
|
||||||
|
Case "001" : Return "FIN DE ARCHIVO"
|
||||||
|
Case "002" : Return "ARCHIVO NO ENCONTRADO"
|
||||||
|
Case "003" : Return "LECTURA: REGISTRO NO UNICO"
|
||||||
|
Case "006" : Return "ERROR FUERA DE CATEGORIAS DE CICS"
|
||||||
|
Case "007" : Return "COMANDOS EN ORDEN ILOGICO"
|
||||||
|
Case "008" : Return "NO SE TIENE AUTORIZACION"
|
||||||
|
Case "009" : Return "MISMO BANCO PROGRAMADO - VALIDACION DE ESTRUCTURA Y ESTATUS (INACTIVO, CANCELADO)"
|
||||||
|
Case "010" : Return "ARCHIVO NO ABIERTO"
|
||||||
|
Case "011" : Return "TEF - VALIDACION DE ESTRUCTURA (ERRONEA)"
|
||||||
|
Case "012" : Return "SPEI - VALIDACION DE ESTRUCTURA (ERRONEA)"
|
||||||
|
Case "013" : Return "ERROR DE I/O NO CUBIERTO POR CICS"
|
||||||
|
Case "014" : Return "LONGITUD DE REGISTRO ERRONEA"
|
||||||
|
Case "015" : Return "ARCHIVO NO DISPONIBLE"
|
||||||
|
Case "016" : Return "ESCRITURA: REGISTRO DUPLICADO"
|
||||||
|
Case "017" : Return "NO HAY ESPACIO EN EL DISPOSITIVO PARA ADICIONAR REGISTRO"
|
||||||
|
Case "019" : Return "OTRO ERROR DE I/O"
|
||||||
|
Case "020" : Return "DATO NO NUMERICO"
|
||||||
|
Case "021" : Return "DATO REQUERIDO (SI LA OPERACIÓN ES SPID CONTACTE A SU EJECUTIVO DE RELACIÓN PARA REVISAR LA DIRECCION REGISTRADA)"
|
||||||
|
Case "022" : Return "VALOR FUERA DE RANGO"
|
||||||
|
Case "023" : Return "DATO NO COINCIDE CON NOMBRE DE ARCHIVO"
|
||||||
|
Case "024" : Return "ERROR EN SECUENCIA DE REGISTROS"
|
||||||
|
Case "025" : Return "NO EXISTE CONTRATO"
|
||||||
|
Case "026" : Return "NO EXISTE PLAZA"
|
||||||
|
Case "027" : Return "NO EXISTE SUCURSAL"
|
||||||
|
Case "028" : Return "NO EXISTE CUENTA"
|
||||||
|
Case "029" : Return "CUENTA NO ACTIVA"
|
||||||
|
Case "030" : Return "CUENTA NO RELACIONADA AL CONTRATO"
|
||||||
|
Case "031" : Return "NO EXISTE BANCO"
|
||||||
|
Case "032" : Return "MONEDA INVALIDA PARA ESE PRODUCTO"
|
||||||
|
Case "033" : Return "ERROR EN CIFRA DE CONTROL"
|
||||||
|
Case "034" : Return "ARCHIVO RECHAZADO POR REGISTROS RECHAZADOS"
|
||||||
|
Case "035" : Return "PAGO DUPLICADO"
|
||||||
|
Case "036" : Return "NO EXISTE PAGO"
|
||||||
|
Case "037" : Return "ARCHIVO NO PENDIENTE DE VALIDACION"
|
||||||
|
Case "038" : Return "CONTRATO NO ACTIVO"
|
||||||
|
Case "039" : Return "ARCHIVO RECHAZADO POR QUE NO TIENE REGISTROS CORRECTOS"
|
||||||
|
Case "040" : Return "MONEDA DE REGISTRO DETALLE DIFERENTE A MONEDA DE CUENTA DE CARGO"
|
||||||
|
Case "041" : Return "FECHA INHABIL"
|
||||||
|
Case "042" : Return "FECHA DE APLICACION INVALIDA PARA ESE TIPO DE PAGO"
|
||||||
|
Case "043" : Return "NUMERO DE BANCO INVALIDO PARA ESE TIPO DE PAGO"
|
||||||
|
Case "044" : Return "HORARIO SUCURSAL NO DISPONIBLE"
|
||||||
|
Case "045" : Return "IMPORTE SUPERIOR AL PERMITIDO SPEI"
|
||||||
|
Case "046" : Return "LA CUENTA DE ABONO NO ESTA REGISTRADA EN LA BASE DE DATOS DEL BANCO PARA ESE CONTRATO"
|
||||||
|
Case "047" : Return "IMPORTE SUPERIOR AL AUTORIZADO POR EL CLIENTE PARA ESA CUENTA DE ABONO"
|
||||||
|
Case "048" : Return "FECHA DE CONSTITUCION ERRONEA"
|
||||||
|
Case "049" : Return "TIPO DE CUENTA INVALIDA SPID"
|
||||||
|
Case "050" : Return "SPID ES SOLO PARA PERSONAS MORALES"
|
||||||
|
Case "051" : Return "ERROR AL HACER REGISTRO EN TOTALES"
|
||||||
|
Case "052" : Return "ERROR AL HACER CARGO A CHEQUES"
|
||||||
|
Case "053" : Return "EL MOVIMIENTO NO ESTA PENDIENTE DE PAGO"
|
||||||
|
Case "054" : Return "ERROR AL REVERSAR CARGO A CHEQUES"
|
||||||
|
Case "055" : Return "SU TRANSACCIÓN NO PUEDE SER PROCESADA EN ESTE MOMENTO CONTACTE A SU EJECUTIVO DE RELACIÓN (CLAVE 99)."
|
||||||
|
Case "056" : Return "EL CERTIFICADO DE SU FIEL NO ES VIGENTE. FAVOR DE SOLICITAR A SU EJECUTIVO LA ACTUALIZACIÓN PARA PODER OPERAR SPID."
|
||||||
|
Case "057" : Return "SU TRANSACCIÓN NO PUEDE SER PROCESADA EN ESTE MOMENTO CONTACTE A SU EJECUTIVO DE RELACIÓN (CLAVE 88)."
|
||||||
|
Case "058" : Return "EL MONTO DE LA OPERACIÓN SOBREPASA EL DISPONIBLE PARA ESTE BENEFICIARIO."
|
||||||
|
Case "059" : Return "TRANSACCION SPID DEVUELTA"
|
||||||
|
Case "060" : Return "PAGO NO DISPONIBLE EN HORARIO EXTENDIDO"
|
||||||
|
Case "061" : Return "INSUFICIENCIA DE FONDOS"
|
||||||
|
Case "062" : Return "CAMBIO A ABONO EN CUENTA DE DEVOLUCIONES"
|
||||||
|
Case "063" : Return "CAMBIO A PAGO EN VENTANILLA EFECTIVO"
|
||||||
|
Case "064" : Return "CAMBIO A CHEQUE DE CAJA AL BENEFICIARIO EN VENTANILLA"
|
||||||
|
Case "065" : Return "CAMBIO A CHEQUE DE CAJA CENTRAL AL BENEFICIARIO"
|
||||||
|
Case "066" : Return "CAMBIO A CHEQUE DE CAJA CENTRAL A LA EMPRESA POR TOTAL"
|
||||||
|
Case "067" : Return "CAMBIO A CHEQUE DE CAJA CENTRAL A LA EMPRESA POR DETALLE"
|
||||||
|
Case "068" : Return "CAMBIO ORIGINADO POR UN PAGO EN VENTANILLA"
|
||||||
|
Case "069" : Return "CAMBIO ORIGINADO POR UN ABONO A CHEQUES"
|
||||||
|
Case "070" : Return "CAMBIO ORIGINADO POR UN ABONO A AHORROS"
|
||||||
|
Case "071" : Return "CAMBIO ORIGINADO POR UN DEPOSITO INTERBANCARIO"
|
||||||
|
Case "072" : Return "CAMBIO ORIGINADO POR UN MOVIMIENTO DE TRANSFERENCIA DE FONDOS"
|
||||||
|
Case "073" : Return "BAJA RECHAZADA POR PAGO EN LINEA"
|
||||||
|
Case "074" : Return "DEVOLUCION GLOBAL POR RECHAZOS"
|
||||||
|
Case "075" : Return "DEVOLUCION GLOBAL POR VENCIMIENTO DE VIGENCIAS"
|
||||||
|
Case "076" : Return "DEVOLUCION GLOBAL POR BAJAS SOLICITADAS"
|
||||||
|
Case "077" : Return "HORARIO DE OPERACIÓN NO DISPONIBLE SPID"
|
||||||
|
Case "078" : Return "EL ABONO EXCEDE EL MÁXIMO PERMITIDO A LA CUENTA"
|
||||||
|
Case Else : Return "CÓDIGO DESCONOCIDO"
|
||||||
|
End Select
|
||||||
|
End Function
|
||||||
|
|
||||||
|
#End Region
|
||||||
|
|
||||||
|
|
||||||
|
#Region "IDisposable Support"
|
||||||
|
|
||||||
|
|
||||||
|
Private disposedValue As Boolean = False
|
||||||
|
' IDisposable
|
||||||
|
Protected Overridable Sub Dispose(disposing As Boolean)
|
||||||
|
If Not Me.disposedValue Then
|
||||||
|
If disposing Then
|
||||||
|
' TODO: dispose managed state (managed objects).
|
||||||
|
|
||||||
|
'If Not Data Is Nothing Then Data.Dispose() : Data = Nothing
|
||||||
|
'If Not SqlAdapter Is Nothing Then SqlAdapter.Dispose() : SqlAdapter = Nothing
|
||||||
|
'If Not SqlCommand Is Nothing Then SqlCommand.Dispose() : SqlCommand = Nothing
|
||||||
|
'If Not SqlTransacc Is Nothing Then SqlTransacc.Dispose() : SqlTransacc = Nothing
|
||||||
|
'If SqlConexion.State <> ConnectionState.Closed Then SqlConexion.Close()
|
||||||
|
'If Not SqlConexion Is Nothing Then SqlConexion.Dispose() : SqlConexion = Nothing
|
||||||
|
|
||||||
|
End If
|
||||||
|
|
||||||
|
' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below.
|
||||||
|
' TODO: set large fields to null.
|
||||||
|
End If
|
||||||
|
Me.disposedValue = True
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' TODO: override Finalize() only if Dispose(disposing As Boolean) above has code to free unmanaged resources.
|
||||||
|
'Protected Overrides Sub Finalize()
|
||||||
|
' ' Do not change this code. Put cleanup code in Dispose(disposing As Boolean) above.
|
||||||
|
' Dispose(False)
|
||||||
|
' MyBase.Finalize()
|
||||||
|
'End Sub
|
||||||
|
|
||||||
|
' This code added by Visual Basic to correctly implement the disposable pattern.
|
||||||
|
Public Sub Dispose() Implements IDisposable.Dispose
|
||||||
|
' Do not change this code. Put cleanup code in Dispose(disposing As Boolean) above.
|
||||||
|
'ConexionClose()
|
||||||
|
Dispose(True)
|
||||||
|
GC.SuppressFinalize(Me)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
|
||||||
|
End Class
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -866,7 +866,7 @@ Partial Class Bancos_PagoElectronicoGrupos
|
|||||||
ElseIf OpBancos = 2 Then
|
ElseIf OpBancos = 2 Then
|
||||||
AltaProveedoresBajio()
|
AltaProveedoresBajio()
|
||||||
ElseIf OpBancos = 3 Then
|
ElseIf OpBancos = 3 Then
|
||||||
'AltaProveedoresScotia() SE DEJA COMENTADO PORQUE NO SE ESTA USANDO, SE CAMBIO A PAGO ELECTRONICO
|
'AltaCuentasScotia() SE DEJA COMENTADO PORQUE NO SE ESTA USANDO, SE CAMBIO A PAGO ELECTRONICO
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
|
||||||
@@ -2743,7 +2743,7 @@ Partial Class Bancos_PagoElectronicoGrupos
|
|||||||
ElseIf OpBancos = 2 Then
|
ElseIf OpBancos = 2 Then
|
||||||
AltaProveedoresBajio(DTProveedores)
|
AltaProveedoresBajio(DTProveedores)
|
||||||
ElseIf OpBancos = 3 Then
|
ElseIf OpBancos = 3 Then
|
||||||
'AltaProveedoresScotia(DTProveedores)
|
'AltaCuentasScotia(DTProveedores)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4977,20 +4977,53 @@
|
|||||||
<ajax:ValidatorCalloutExtender ID="VCERfvTxtModalLayoutBancosFecha" runat="server" HighlightCssClass="vco" TargetControlID="RfvTxtModalLayoutBancosFecha" Width="350px"></ajax:ValidatorCalloutExtender>
|
<ajax:ValidatorCalloutExtender ID="VCERfvTxtModalLayoutBancosFecha" runat="server" HighlightCssClass="vco" TargetControlID="RfvTxtModalLayoutBancosFecha" Width="350px"></ajax:ValidatorCalloutExtender>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<asp:UpdatePanel runat="server" ID="UpControlesScotia" UpdateMode="Conditional">
|
||||||
|
<ContentTemplate>
|
||||||
|
|
||||||
|
<div class="row" runat="server" id="DVCuentasScotia" visible="false">
|
||||||
|
<br />
|
||||||
|
<div class="col-md-3">
|
||||||
|
<asp:Label runat="server" ID="LblCuentasScotia" ></asp:Label>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<asp:Button runat="server" ID="BtnGenerarAlta" Text="Generar Alta" OnClick="BtnGenerarAlta_Click" class="btn btn-primary" Enabled="false" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="btn-file btn green" onclick="$('#FUTxt').click();">
|
||||||
|
<i class="fa fa-plus"></i>
|
||||||
|
<span>Seleccionar</span>
|
||||||
|
</div>
|
||||||
|
<span id="FUTxtt"></span>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<asp:Button runat="server" ID="BtnCargarAlta" Text="Cargar Alta" OnClick="BtnCargarAlta_Click" class="btn btn-primary" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</ContentTemplate>
|
||||||
|
<Triggers>
|
||||||
|
<asp:PostBackTrigger ControlID="BtnCargarAlta" />
|
||||||
|
<asp:PostBackTrigger ControlID ="BtnGenerarAlta" />
|
||||||
|
</Triggers>
|
||||||
|
</asp:UpdatePanel>
|
||||||
|
|
||||||
|
|
||||||
<%-- <div class="form-group form-md-line-input input-iconright" runat="server" visible="false" >
|
|
||||||
<asp:TextBox ID="TxtModalLayoutBancosFecha" runat="server" CausesValidation="True" CssClass="form-control"></asp:TextBox>
|
|
||||||
<asp:RequiredFieldValidator ID="RfTxtModalLayoutBancosFecha" runat="server" ControlToValidate="TxtModalLayoutBancosFecha" CssClass="help-block errorimput" Display="none"
|
|
||||||
ErrorMessage="<b><span style='text-decoration: underline'>ERROR:</span></b><br />El campo <b>''Fecha''</b> es necesario "
|
|
||||||
ValidationGroup="GrpModalBancoLayout"></asp:RequiredFieldValidator>
|
|
||||||
<ajax:ValidatorCalloutExtender ID="VCERfTxtModalLayoutBancosFecha" runat="server" HighlightCssClass="vco" TargetControlID="RfTxtModalLayoutBancosFecha" Width="350px"></ajax:ValidatorCalloutExtender>
|
|
||||||
|
|
||||||
<asp:Label runat="server" Text="Fecha: " AssociatedControlID="TxtModalLayoutBancosFecha"></asp:Label>
|
|
||||||
<ajax:MaskedEditExtender ID="MaskedEditExtender6" runat="server" TargetControlID="TxtModalLayoutBancosFecha" Mask="99/99/9999" MaskType="Date" DisplayMoney="Left" AcceptNegative="Left" BehaviorID="_content_MKEFechaBaja" Century="2000" CultureAMPMPlaceholder="" CultureCurrencySymbolPlaceholder="" CultureDateFormat="" CultureDatePlaceholder="" CultureDecimalPlaceholder="" CultureThousandsPlaceholder="" CultureTimePlaceholder=""></ajax:MaskedEditExtender>
|
<%--
|
||||||
<ajax:CalendarExtender ID="CalendarExtender5" runat="server" TargetControlID="TxtModalLayoutBancosFecha" PopupButtonID="ImgFechaBaja" PopupPosition="BottomRight" BehaviorID="_content_CEFechaBaja"></ajax:CalendarExtender>
|
<div class="form-group form-md-line-input input-iconright" runat="server" visible="false" >
|
||||||
<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="TxtModalLayoutBancosFecha" Display="None" ErrorMessage="<b><span style='text-decoration: underline'>ERROR:</span></b><br />El campo <b>''Fecha de Baja''</b> no tiene el formato correcto, por favor intente de nuevo con el siguiente formato: (dd/mm/yyyy)." Operator="DataTypeCheck" Type="Date" ValidationGroup="GrpModalBancoLayout" Visible="False"></asp:CompareValidator>
|
<asp:TextBox ID="TxtModalLayoutBancosFecha" runat="server" CausesValidation="True" CssClass="form-control"></asp:TextBox>
|
||||||
</div>--%>
|
<asp:RequiredFieldValidator ID="RfTxtModalLayoutBancosFecha" runat="server" ControlToValidate="TxtModalLayoutBancosFecha" CssClass="help-block errorimput" Display="none"
|
||||||
|
ErrorMessage="<b><span style='text-decoration: underline'>ERROR:</span></b><br />El campo <b>''Fecha''</b> es necesario "
|
||||||
|
ValidationGroup="GrpModalBancoLayout"></asp:RequiredFieldValidator>
|
||||||
|
<ajax:ValidatorCalloutExtender ID="VCERfTxtModalLayoutBancosFecha" runat="server" HighlightCssClass="vco" TargetControlID="RfTxtModalLayoutBancosFecha" Width="350px"></ajax:ValidatorCalloutExtender>
|
||||||
|
|
||||||
|
<asp:Label runat="server" Text="Fecha: " AssociatedControlID="TxtModalLayoutBancosFecha"></asp:Label>
|
||||||
|
<ajax:MaskedEditExtender ID="MaskedEditExtender6" runat="server" TargetControlID="TxtModalLayoutBancosFecha" Mask="99/99/9999" MaskType="Date" DisplayMoney="Left" AcceptNegative="Left" BehaviorID="_content_MKEFechaBaja" Century="2000" CultureAMPMPlaceholder="" CultureCurrencySymbolPlaceholder="" CultureDateFormat="" CultureDatePlaceholder="" CultureDecimalPlaceholder="" CultureThousandsPlaceholder="" CultureTimePlaceholder=""></ajax:MaskedEditExtender>
|
||||||
|
<ajax:CalendarExtender ID="CalendarExtender5" runat="server" TargetControlID="TxtModalLayoutBancosFecha" PopupButtonID="ImgFechaBaja" PopupPosition="BottomRight" BehaviorID="_content_CEFechaBaja"></ajax:CalendarExtender>
|
||||||
|
<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="TxtModalLayoutBancosFecha" Display="None" ErrorMessage="<b><span style='text-decoration: underline'>ERROR:</span></b><br />El campo <b>''Fecha de Baja''</b> no tiene el formato correcto, por favor intente de nuevo con el siguiente formato: (dd/mm/yyyy)." Operator="DataTypeCheck" Type="Date" ValidationGroup="GrpModalBancoLayout" Visible="False"></asp:CompareValidator>
|
||||||
|
</div>
|
||||||
|
--%>
|
||||||
|
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
@@ -5012,6 +5045,11 @@
|
|||||||
<asp:PostBackTrigger ControlID="BtnEfectivaleXLS" />
|
<asp:PostBackTrigger ControlID="BtnEfectivaleXLS" />
|
||||||
</Triggers>
|
</Triggers>
|
||||||
</asp:UpdatePanel>
|
</asp:UpdatePanel>
|
||||||
|
|
||||||
|
<div style="display:none!important">
|
||||||
|
<asp:FileUpload ID="FUTxt" runat="server" onchange="$('#FUTxtt').text(this.value);" ClientIDMode="Static" />
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,24 @@
|
|||||||
using Extensiones;
|
using DocumentFormat.OpenXml.Drawing;
|
||||||
|
using Extensiones;
|
||||||
|
using Ionic.Zip;
|
||||||
using iTextSharp.text.pdf;
|
using iTextSharp.text.pdf;
|
||||||
|
using iTextSharp.text.pdf.parser;
|
||||||
|
using Modelos;
|
||||||
|
using Profact.TimbraCFDI40;
|
||||||
|
using StackExchange.Redis;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Activities.Expressions;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Web;
|
||||||
using System.Web.UI;
|
using System.Web.UI;
|
||||||
using System.Web.UI.WebControls;
|
using System.Web.UI.WebControls;
|
||||||
using static Extensiones.ModExtensiones;
|
using static Extensiones.ModExtensiones;
|
||||||
using Modelos;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using iTextSharp.text.pdf.parser;
|
|
||||||
using Profact.TimbraCFDI40;
|
|
||||||
using Ionic.Zip;
|
|
||||||
using DocumentFormat.OpenXml.Drawing;
|
|
||||||
using System.Web;
|
|
||||||
|
|
||||||
public partial class Nomina_Nomina2 : ClsPaginas
|
public partial class Nomina_Nomina2 : ClsPaginas
|
||||||
{
|
{
|
||||||
@@ -10742,7 +10744,8 @@ public partial class Nomina_Nomina2 : ClsPaginas
|
|||||||
SinSelccion,
|
SinSelccion,
|
||||||
Bancomer,
|
Bancomer,
|
||||||
Banorte,
|
Banorte,
|
||||||
Banamex
|
Banamex,
|
||||||
|
ScotiaBank
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -10786,6 +10789,7 @@ public partial class Nomina_Nomina2 : ClsPaginas
|
|||||||
CargaCuentas();
|
CargaCuentas();
|
||||||
|
|
||||||
DivModalLayoutBancosFecha.Visible = false;
|
DivModalLayoutBancosFecha.Visible = false;
|
||||||
|
DVCuentasScotia.Visible = false;
|
||||||
TxtModalLayoutBancosFecha.Text = "";
|
TxtModalLayoutBancosFecha.Text = "";
|
||||||
|
|
||||||
RegistraScript("$('#ModalLayoutBancos').modal('show');");
|
RegistraScript("$('#ModalLayoutBancos').modal('show');");
|
||||||
@@ -10798,7 +10802,7 @@ public partial class Nomina_Nomina2 : ClsPaginas
|
|||||||
DdlCuenta.Items.Clear();
|
DdlCuenta.Items.Clear();
|
||||||
DataTable DTCuentas = get_GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa: UsuarioActual.CveEmpresa).FiltraParametros(" CveTipoCuenta <> 1 AND UsaLayout = 'True' AND LEN(ConvenioPagoElectronico) > 0 ");
|
DataTable DTCuentas = get_GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa: UsuarioActual.CveEmpresa).FiltraParametros(" CveTipoCuenta <> 1 AND UsaLayout = 'True' AND LEN(ConvenioPagoElectronico) > 0 ");
|
||||||
DTCuentas.CaseSensitive = false;
|
DTCuentas.CaseSensitive = false;
|
||||||
DdlCuenta.DataSource = DTCuentas.FiltraParametros(" Banco IN('BANCOMER','BANORTE','BBVA Bancomer','BBVA','BANAMEX')");
|
DdlCuenta.DataSource = DTCuentas.FiltraParametros(" Banco IN('BANCOMER','BANORTE','BBVA Bancomer','BBVA','BANAMEX') OR Banco LIKE '%SCOTIA%' ");
|
||||||
DdlCuenta.DataBind();
|
DdlCuenta.DataBind();
|
||||||
DdlCuenta.Items.Insert(0, new ListItem("Seleccione", "-1"));
|
DdlCuenta.Items.Insert(0, new ListItem("Seleccione", "-1"));
|
||||||
DdlCuenta.SelectedValueExist("-1");
|
DdlCuenta.SelectedValueExist("-1");
|
||||||
@@ -10808,6 +10812,8 @@ public partial class Nomina_Nomina2 : ClsPaginas
|
|||||||
{
|
{
|
||||||
ConvenioPagoElectronico = string.Empty;
|
ConvenioPagoElectronico = string.Empty;
|
||||||
DivModalLayoutBancosFecha.Visible = false;
|
DivModalLayoutBancosFecha.Visible = false;
|
||||||
|
DVCuentasScotia.Visible = false;
|
||||||
|
BtnGenerarAlta.Enabled = false;
|
||||||
|
|
||||||
if (DdlCuenta.SelectedValue.ToEntero() > 0)
|
if (DdlCuenta.SelectedValue.ToEntero() > 0)
|
||||||
{
|
{
|
||||||
@@ -10827,6 +10833,12 @@ public partial class Nomina_Nomina2 : ClsPaginas
|
|||||||
Banco = Bancos.Banamex;
|
Banco = Bancos.Banamex;
|
||||||
DivModalLayoutBancosFecha.Visible = true;
|
DivModalLayoutBancosFecha.Visible = true;
|
||||||
}
|
}
|
||||||
|
else if (DdlCuenta.SelectedItem.Text.ToUpper().Contains("SCOTIA"))
|
||||||
|
{
|
||||||
|
DivModalLayoutBancosFecha.Visible = false;
|
||||||
|
Banco = Bancos.ScotiaBank;
|
||||||
|
PreparaLayoutBancosScotiaBank();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ConvenioPagoElectronico = string.Empty;
|
ConvenioPagoElectronico = string.Empty;
|
||||||
@@ -10838,6 +10850,274 @@ public partial class Nomina_Nomina2 : ClsPaginas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Layout ScotiaBank
|
||||||
|
private void PreparaLayoutBancosScotiaBank()
|
||||||
|
{
|
||||||
|
BtnGenerarAlta.Enabled = false;
|
||||||
|
int cuentasPendientes = 0;
|
||||||
|
using (ClsNominas objnom = new ClsNominas())
|
||||||
|
{
|
||||||
|
if (objnom.GetDispersionNomina(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa, 18))
|
||||||
|
{
|
||||||
|
string fechaHoy = DateTime.Today.ToString("MM/dd/yyyy");
|
||||||
|
cuentasPendientes = objnom.DtResultados.FiltraParametros($" EstatusPagoElectronicoScotia = False OR FechaEliminacion < #{fechaHoy}# ").Rows.Count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LblCuentasScotia.Text = string.Format("Pendientes: {0}", cuentasPendientes);
|
||||||
|
|
||||||
|
if (cuentasPendientes > 0)
|
||||||
|
{
|
||||||
|
BtnGenerarAlta.Enabled = true;
|
||||||
|
BtnModalBancosProcesar.Enabled = false;
|
||||||
|
DVCuentasScotia.Visible = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BtnModalBancosProcesar.Enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
UpControlesScotia.Update();
|
||||||
|
UpModalBancosLayout.Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void BtnGenerarAlta_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DataTable DTCuentasPendientes = new DataTable();
|
||||||
|
using (ClsNominas objnom = new ClsNominas())
|
||||||
|
{
|
||||||
|
if (objnom.GetDispersionNomina(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa, 18))
|
||||||
|
{
|
||||||
|
string fechaHoy = DateTime.Today.ToString("MM/dd/yyyy");
|
||||||
|
DTCuentasPendientes = objnom.DtResultados.FiltraParametros($" EstatusPagoElectronicoScotia = False OR FechaEliminacion < #{fechaHoy}# ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string NumeroConvenio = "";
|
||||||
|
|
||||||
|
using (ClsBancos objBancos = new ClsBancos())
|
||||||
|
{
|
||||||
|
if (objBancos.GetBancosCuentas(DdlCuenta.SelectedValue.ToEntero()))
|
||||||
|
{
|
||||||
|
if (objBancos.DtResultados.Rows.Count > 0)
|
||||||
|
{
|
||||||
|
NumeroConvenio = objBancos.DtResultados.Rows[0]["ConvenioPagoElectronico"].ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NumeroConvenio.Length > 0)
|
||||||
|
{
|
||||||
|
using (ClsPagoScotia objPagoScotia = new ClsPagoScotia())
|
||||||
|
{
|
||||||
|
if (objPagoScotia.AltaCuentasScotia(DTCuentasPendientes, UsuarioActual, NumeroConvenio))
|
||||||
|
{
|
||||||
|
Response.Clear();
|
||||||
|
Response.Buffer = true;
|
||||||
|
Response.ContentType = "text/plain";
|
||||||
|
Response.AddHeader("Content-Disposition", "attachment;filename=" + objPagoScotia.NombreArchivo);
|
||||||
|
Response.Write(objPagoScotia.LayoutStr);
|
||||||
|
Response.Flush();
|
||||||
|
Response.End();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Alert(objPagoScotia.LayouErrorStr, TipoMensaje.MsgAdvertencia);
|
||||||
|
RegistraScript("$('#ModalLayoutBancos').modal('show');");
|
||||||
|
UpModalBancosLayout.Update();
|
||||||
|
//Response.Clear();
|
||||||
|
//Response.Buffer = true;
|
||||||
|
//Response.ContentType = "text/plain";
|
||||||
|
//Response.AddHeader("Content-Disposition", "attachment;filename=" + objPagoScotia.RutaArchivo);
|
||||||
|
//Response.Write(objPagoScotia.LayoutStr);
|
||||||
|
//Response.Flush();
|
||||||
|
//Response.End();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Alert("La cuenta seleccionada no tiene un Convenio de Pago Electronico");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private string GuardaTXT()
|
||||||
|
{
|
||||||
|
string NombreArchivo = "";
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
string FileName = System.IO.Path.GetFileName(FUTxt.PostedFile.FileName);
|
||||||
|
NombreArchivo = FileName;
|
||||||
|
string Extension = System.IO.Path.GetExtension(FUTxt.PostedFile.FileName);
|
||||||
|
string FolderPath = string.Format("{0}Empresas\\", Request.ApplicationPath);
|
||||||
|
string FilePath = Server.MapPath(FolderPath + FileName);
|
||||||
|
FUTxt.SaveAs(FilePath);
|
||||||
|
NombreArchivo = FilePath;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//Retorno = false;
|
||||||
|
this.GuardaLog( $" Error al guardar el archivo TXT --> {ex.StackTrace}");
|
||||||
|
NombreArchivo = "";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return NombreArchivo;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void BtnCargarAlta_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
bool ErrorArchivo = false;
|
||||||
|
string RutaArchivo = "";
|
||||||
|
|
||||||
|
if (FUTxt.HasFile)
|
||||||
|
{
|
||||||
|
RutaArchivo = GuardaTXT();
|
||||||
|
if (RutaArchivo.Length == 0)
|
||||||
|
{
|
||||||
|
Alert("Ocurrió un error Scotia al cargar el archivo", TipoMensaje.MsgError);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Alert("No tiene ningún archivo", TipoMensaje.MsgAdvertencia);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// LEE TXT
|
||||||
|
string Texto;
|
||||||
|
Texto = System.IO.File.ReadAllText(RutaArchivo);
|
||||||
|
string[] TextoArreglo = Texto.Split(new[] { "\r\n" }, StringSplitOptions.None);
|
||||||
|
|
||||||
|
//if (OpBancos == 3)
|
||||||
|
//{
|
||||||
|
TextoArreglo = System.IO.File.ReadAllLines(RutaArchivo);
|
||||||
|
|
||||||
|
StringBuilder SBCuentasAltas = new StringBuilder();
|
||||||
|
StringBuilder SBErrores = new StringBuilder();
|
||||||
|
bool ErrorArchivoScotia = false;
|
||||||
|
|
||||||
|
string H = TextoArreglo[0];
|
||||||
|
|
||||||
|
if (!(TextoArreglo.Length >= 3))
|
||||||
|
{
|
||||||
|
Alert("El archivo no tiene el formato correcto, debe tener al menos 3 líneas (Header, Detalle y Trailer)", TipoMensaje.MsgAdvertencia);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (H.Length != 140)
|
||||||
|
{
|
||||||
|
Alert("La longitud de la cabecera es incorrecta", TipoMensaje.MsgAdvertencia);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string TipoArchivo = H.Substring(0, 2).ToUpper();
|
||||||
|
|
||||||
|
if (TipoArchivo != "SP")
|
||||||
|
{
|
||||||
|
Alert($"El archivo no es un archivo de respuesta, inicia con código {TipoArchivo}", TipoMensaje.MsgAdvertencia);
|
||||||
|
}
|
||||||
|
|
||||||
|
string HCodigo = H.Substring(40, 3);
|
||||||
|
if (HCodigo != "000" && HCodigo != " ")
|
||||||
|
{
|
||||||
|
SBErrores.Append($"El código de la cabecera es incorrecto {HCodigo} - {ClsPagoScotia.AltaCuentaScotiaCodigoRespuestaAnexoC(HCodigo)}.</br>");
|
||||||
|
ErrorArchivoScotia = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ClsBancos ObjBancos = new ClsBancos();
|
||||||
|
ObjBancos.IniciaTransacSQL();
|
||||||
|
|
||||||
|
for (int i = 1; i <= TextoArreglo.Length - 2; i++)
|
||||||
|
{
|
||||||
|
string Linea = TextoArreglo[i];
|
||||||
|
|
||||||
|
if (Linea.Length == 140)
|
||||||
|
{
|
||||||
|
string CodigoRespuesta = Linea.Substring(109, 3);
|
||||||
|
string DTipoArchivo = Linea.Substring(0, 2);
|
||||||
|
string Cuenta = Linea.Substring(12, 20);
|
||||||
|
|
||||||
|
DateTime FechaEliminacion = DateTime.ParseExact(Linea.Substring(32, 8), "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
|
if (DTipoArchivo != "SP")
|
||||||
|
{
|
||||||
|
SBErrores.Append($"Error Línea {i} el tipo de archivo no es un archivo de respuesta (SP), inicia con código {DTipoArchivo}.</br>");
|
||||||
|
ErrorArchivoScotia = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CodigoRespuesta == "000" || CodigoRespuesta == " ")
|
||||||
|
{
|
||||||
|
int CveCuentaDeposito = Linea.Substring(40, 50).Trim().ToEntero();
|
||||||
|
|
||||||
|
if (CveCuentaDeposito > 0)
|
||||||
|
{
|
||||||
|
if (ObjBancos.UpdateCuentaDepositoPagoElectronico(CveCuentaDeposito, Opcion: 3, FechaEliminacion: FechaEliminacion))
|
||||||
|
{
|
||||||
|
SBCuentasAltas.Append($"Cuenta: {Cuenta} registrada correctamente.</br>");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ErrorArchivoScotia = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SBErrores.Append($"Error Línea {i} Cve: {CveCuentaDeposito} cuenta: {Cuenta} no encontrada.</br>");
|
||||||
|
ErrorArchivoScotia = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SBErrores.Append($"Error Línea {i} cuenta no dada de alta código {CodigoRespuesta} - {ClsPagoScotia.AltaCuentaScotiaCodigoRespuestaAnexoC(CodigoRespuesta)}.</br>");
|
||||||
|
ErrorArchivoScotia = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SBErrores.Append($"Error en longitud de la línea {i} es incorrecta.</br>");
|
||||||
|
ErrorArchivoScotia = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ErrorArchivoScotia)
|
||||||
|
{
|
||||||
|
ObjBancos.RollBack();
|
||||||
|
Alert($"El archivo presentó errores en su procesamiento ({SBErrores.Length}). Correctos {SBCuentasAltas.Length} cuentas.</br>Altas:</br>{SBCuentasAltas.ToString()}<br><br>Errores:<br>{SBErrores.ToString()}", TipoMensaje.MsgAdvertencia);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ObjBancos.Commit();
|
||||||
|
Alert($"El archivo se analizó correctamente y se efectuaron todos los cambios en el sistema. Cuentas procesadas:</br>{SBCuentasAltas.ToString()}", TipoMensaje.MsgInformacion);
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjBancos.Dispose();
|
||||||
|
|
||||||
|
|
||||||
|
if (ErrorArchivo)
|
||||||
|
{
|
||||||
|
Alert("Ocurrió un error al cargar el archivo", TipoMensaje.MsgError);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Alert("El archivo se cargó correctamente", TipoMensaje.MsgInformacion);
|
||||||
|
System.IO.File.Delete(RutaArchivo);
|
||||||
|
PreparaLayoutBancosScotiaBank();
|
||||||
|
RegistraScript("$('#ModalLayoutBancos').modal('show');");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
protected void BtnLayoutXLS_Click(object sender, EventArgs e)
|
protected void BtnLayoutXLS_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -10970,6 +11250,7 @@ public partial class Nomina_Nomina2 : ClsPaginas
|
|||||||
}
|
}
|
||||||
protected void BtnModalBancosProcesar_Click(object sender, EventArgs e)
|
protected void BtnModalBancosProcesar_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
BtnModalBancosProcesar.Enabled = true;
|
||||||
|
|
||||||
if (Banco == Bancos.Bancomer)
|
if (Banco == Bancos.Bancomer)
|
||||||
{
|
{
|
||||||
@@ -11001,6 +11282,104 @@ public partial class Nomina_Nomina2 : ClsPaginas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (Banco == Bancos.ScotiaBank)
|
||||||
|
{
|
||||||
|
|
||||||
|
DataTable DTResultados = new DataTable();
|
||||||
|
using (ClsNominas objnom = new ClsNominas())
|
||||||
|
{
|
||||||
|
if (objnom.GetDispersionNomina(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa, 18))
|
||||||
|
{
|
||||||
|
DTResultados = objnom.DtResultados;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DTResultados.Rows.Count > 0)
|
||||||
|
{
|
||||||
|
using (ClsPagoScotia objPagoScotia = new ClsPagoScotia())
|
||||||
|
{
|
||||||
|
|
||||||
|
string ConvenioPagoElectronicoScotia = get_GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa: UsuarioActual.CveEmpresa).FiltroPrimeroValor("ConvenioPagoElectronico", $" CveCuenta = {DdlCuenta.SelectedValue}").ToString();
|
||||||
|
string NumCuentaOrigen = get_GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa: UsuarioActual.CveEmpresa).FiltroPrimeroValor("NumCuenta", $" CveCuenta = {DdlCuenta.SelectedValue}").ToString();
|
||||||
|
string CLABEOrigen = get_GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa: UsuarioActual.CveEmpresa).FiltroPrimeroValor("CLABE", $" CveCuenta = {DdlCuenta.SelectedValue}").ToString();
|
||||||
|
//CASE WHEN LEN(BC.NumCuenta) > 0 THEN BC.NumCuenta ELSE BC.CLABE END AS CLABEOrigen,
|
||||||
|
|
||||||
|
if (!DTResultados.Columns.Contains("ConvenioPagoElectronico"))
|
||||||
|
{
|
||||||
|
DTResultados.Columns.Add("ConvenioPagoElectronico", typeof(string));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!DTResultados.Columns.Contains("CLABEOrigen"))
|
||||||
|
{
|
||||||
|
DTResultados.Columns.Add("CLABEOrigen", typeof(string));
|
||||||
|
}
|
||||||
|
if (!DTResultados.Columns.Contains("Observaciones"))
|
||||||
|
{
|
||||||
|
DTResultados.Columns.Add("Observaciones", typeof(string));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foreach (DataRow dRow in DTResultados.Rows)
|
||||||
|
{
|
||||||
|
dRow["ConvenioPagoElectronico"] = ConvenioPagoElectronicoScotia;
|
||||||
|
dRow["CLABEOrigen"] = NumCuentaOrigen.Length > 0 ? NumCuentaOrigen : CLABEOrigen; // Si no tiene numero de cuenta, se usa la CLABE
|
||||||
|
dRow["Observaciones"] = dRow["CveNominaDetalle"].ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//DTResultados.Columns["CLABEOrigen"].ColumnName = "CLABEOrigen"; // CLABE Origen
|
||||||
|
//DTResultados.Columns["ConvenioPagoElectronico"].ColumnName = "ConvenioPagoElectronico"; // Convenio Pago Electronico
|
||||||
|
//DTResultados.Columns["Importe"].ColumnName = "Importe"; // Importe
|
||||||
|
DTResultados.Columns["CvePersonal"].ColumnName = "CveProveedor"; // Cve Proveedor
|
||||||
|
//DTResultados.Columns["RFC"].ColumnName = "RFC"; // RFC
|
||||||
|
DTResultados.Columns["Nombre"].ColumnName = "RazonSocial"; // Razon Social
|
||||||
|
DTResultados.Columns["CveNominaDetalle"].ColumnName = "CveIE"; // Cve IE
|
||||||
|
//DTResultados.Columns["CLABEDestino"].ColumnName = "CLABEDestino"; // CLABE Destino
|
||||||
|
//DTResultados.Columns["CLABE"].ColumnName = "CLABE"; // CLABE
|
||||||
|
//DTResultados.Columns["CveBanco"].ColumnName = "CveBanco"; // Cve Banco
|
||||||
|
DTResultados.Columns["Observaciones"].ColumnName = "Observaciones"; // Observaciones
|
||||||
|
DTResultados.Columns["Correo"].ColumnName = "Correo"; // Correo
|
||||||
|
//DTResultados.Columns["CvePersonal"].ColumnName = "CvePersonal"; // Cve Personal
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
CLABEOrigen
|
||||||
|
ConvenioPagoElectronico
|
||||||
|
Importe
|
||||||
|
CveProveedor
|
||||||
|
RFC
|
||||||
|
RazonSocial
|
||||||
|
CveIE
|
||||||
|
CLABEDestino
|
||||||
|
CLABE
|
||||||
|
CveBanco
|
||||||
|
Observaciones
|
||||||
|
Correo
|
||||||
|
CvePersonal
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
if (objPagoScotia.GeneraPagoScotiaBank(DTResultados, false, DdlCuenta.SelectedValue.ToEntero(), UsuarioActual))
|
||||||
|
{
|
||||||
|
Response.Clear();
|
||||||
|
Response.Buffer = true;
|
||||||
|
Response.ContentType = "text/plain";
|
||||||
|
Response.AddHeader("Content-Disposition", "attachment;filename=" + objPagoScotia.NombreArchivo);
|
||||||
|
Response.Write(objPagoScotia.LayoutStr);
|
||||||
|
Response.Flush();
|
||||||
|
Response.End();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Alert(objPagoScotia.LayouErrorStr, TipoMensaje.MsgAdvertencia);
|
||||||
|
RegistraScript("$('#ModalLayoutBancos').modal('show');");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Alert("No se encontraron registros para generar el layout de ScotiaBank", TipoMensaje.MsgAdvertencia);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private void CrearLayoutNominaBancomer(DataTable DTNomina)
|
private void CrearLayoutNominaBancomer(DataTable DTNomina)
|
||||||
{
|
{
|
||||||
@@ -12489,4 +12868,5 @@ public partial class Nomina_Nomina2 : ClsPaginas
|
|||||||
{
|
{
|
||||||
CargaMovtoPermanente();
|
CargaMovtoPermanente();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3976,6 +3976,8 @@ Partial Class OC_OC
|
|||||||
Protected Sub BtnCancelar_Click(sender As Object, e As EventArgs) Handles BtnCancelar.Click
|
Protected Sub BtnCancelar_Click(sender As Object, e As EventArgs) Handles BtnCancelar.Click
|
||||||
Dim ObjEventos As New ClsOIEventos
|
Dim ObjEventos As New ClsOIEventos
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
If CveEstatusFinalError > 0 Then
|
If CveEstatusFinalError > 0 Then
|
||||||
Dim objOrdenCompra As New ClsOC
|
Dim objOrdenCompra As New ClsOC
|
||||||
objOrdenCompra.IniciaTransacSQL()
|
objOrdenCompra.IniciaTransacSQL()
|
||||||
@@ -9499,6 +9501,10 @@ Partial Class OC_OC
|
|||||||
|
|
||||||
Dim Respuesta As Boolean = True
|
Dim Respuesta As Boolean = True
|
||||||
|
|
||||||
|
If TipoOC <> "OC" Then
|
||||||
|
Return True 'solo genera poliza de presupuesto si es OC
|
||||||
|
End If
|
||||||
|
|
||||||
If UsuarioActual.Empresa.Funcionalidad(532).Contiene("2") Then
|
If UsuarioActual.Empresa.Funcionalidad(532).Contiene("2") Then
|
||||||
|
|
||||||
Dim CveMonedaPresupuesto As Integer = DdlMoneda.SelectedValue.ToEntero
|
Dim CveMonedaPresupuesto As Integer = DdlMoneda.SelectedValue.ToEntero
|
||||||
|
|||||||
Reference in New Issue
Block a user