From 2158afce7338691563a7ea0eac83ea903ee46ab3 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Thu, 4 Jul 2024 10:17:28 -0700 Subject: [PATCH] --Layout para nomina banamex. inicial --- Nomina/Nomina.aspx.cs | 160 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 155 insertions(+), 5 deletions(-) diff --git a/Nomina/Nomina.aspx.cs b/Nomina/Nomina.aspx.cs index bc55c5c63..5ab31fe5d 100644 --- a/Nomina/Nomina.aspx.cs +++ b/Nomina/Nomina.aspx.cs @@ -7198,11 +7198,11 @@ public partial class Nomina_Nomina2 : ClsPaginas } using (ClsNominas ObjMovt = new ClsNominas()) { - ObjMovt.GetMovtoPermanenteSaldos(UsuarioActual.CveEmpresa,SRCvePersonal, CcveMovtoPermanente); + ObjMovt.GetMovtoPermanenteSaldos(UsuarioActual.CveEmpresa, SRCvePersonal, CcveMovtoPermanente); GVMovtoPermanenteSaldos.DataSource = ObjMovt.DtResultados; GVMovtoPermanenteSaldos.DataBind(); - } - + } + CargaConcepto(); DdlConcepto.SelectedValueExist(cveConcepto); TxtDescripcion.Text = descripcion.ToString(); @@ -9829,7 +9829,8 @@ public partial class Nomina_Nomina2 : ClsPaginas { SinSelccion, Bancomer, - Banorte + Banorte, + Banamex } @@ -9885,7 +9886,7 @@ public partial class Nomina_Nomina2 : ClsPaginas DdlCuenta.Items.Clear(); DataTable DTCuentas = get_GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa: UsuarioActual.CveEmpresa).FiltraParametros(" CveTipoCuenta <> 1 AND UsaLayout = 'True' AND LEN(ConvenioPagoElectronico) > 0 "); DTCuentas.CaseSensitive = false; - DdlCuenta.DataSource = DTCuentas.FiltraParametros(" Banco IN('BANCOMER','BANORTE','BBVA Bancomer','BBVA')"); + DdlCuenta.DataSource = DTCuentas.FiltraParametros(" Banco IN('BANCOMER','BANORTE','BBVA Bancomer','BBVA','BANAMEX')"); DdlCuenta.DataBind(); DdlCuenta.Items.Insert(0, new ListItem("Seleccione", "-1")); DdlCuenta.SelectedValueExist("-1"); @@ -9915,6 +9916,11 @@ public partial class Nomina_Nomina2 : ClsPaginas Banco = Bancos.Banorte; DivModalLayoutBancosFecha.Visible = true; } + else if (DdlCuenta.SelectedItem.Text.ToUpper().Contains("BANAMEX")) + { + Banco = Bancos.Banamex; + DivModalLayoutBancosFecha.Visible = true; + } else { ConvenioPagoElectronico = string.Empty; @@ -10016,6 +10022,17 @@ public partial class Nomina_Nomina2 : ClsPaginas } } + } + else if (Banco == Bancos.Banamex) + { + using (ClsNominas objnom = new ClsNominas()) + { + if (objnom.GetDispersionnominaXLS(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa)) + { + CrearLayoutNominaBanamex(objnom.DtResultados.Copy()); + } + } + } } @@ -10247,6 +10264,139 @@ public partial class Nomina_Nomina2 : ClsPaginas } + } + + private void CrearLayoutNominaBanamex(DataTable DTNomina) + { + StringBuilder sb = new StringBuilder(); + StringBuilder SbErrores = new StringBuilder(); + bool ErroresValidaciones = false; + + + SbErrores.AppendLine("Se detectaron los siguientes errores en la generación del layout"); + + foreach (DataRow dRow in DTNomina.Rows) + { + //string RFC = dRow["RFC"].ToString(); + string Nombre = dRow["Nombre"].ToString(); + string BancoNumCuenta = dRow["BancoNumCuenta"].ToString(); + decimal Importe = dRow["Importe"].ToString().ToDecimal(); + + //if (RFC.Trim().Length == 0) + // SbErrores.AppendLine($"El RFC es requerido del empleado {Nombre}
"); + + //System.Text.RegularExpressions.Match Coincidencia = System.Text.RegularExpressions.Regex.Match(RFC, @"/^([A-Z,Ñ,&]{3,4}([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[A-Z|\d]{3})$/"); + //if (!Coincidencia.Success) + //{ + // SbErrores.AppendLine($"El RFC {RFC} del empleado {Nombre} no es valido
"); + // ErroresValidaciones = true; + //} + + if (BancoNumCuenta.Trim().Length != 10) + { + SbErrores.AppendLine($"Empleado {Nombre} numero de cuenta incorrecto, la cuenta debe de tener 10 caracteres
"); // Bancomer 10 caracteres + ErroresValidaciones = true; + } + + + if (Importe <= 0) + { + SbErrores.AppendLine($"Empleado {Nombre} el importe debe de ser mayor a 0 importe {Importe}"); // importe mayot a 0 + ErroresValidaciones = true; + } + } + + ErroresValidaciones = false; + + //LAYOUT “C” FORMATOS PARA IMPORTACIÓN (TEF / TEF INTELAR) + //DOC: https://www.banamex.com/resources/bancanets/premium/esp/contenedor/archivos/TEF_Version_C_PagosCobros_Masivos.pdf + if (!ErroresValidaciones) + { + DataTable DTCuentas = get_GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa: UsuarioActual.CveEmpresa); + DataRow RowCuenta = DTCuentas.FiltroPrimero($"CveCuenta={DdlCuenta.SelectedValue}"); + var ClaveMoneda = "001"; // PESOS MEXICANOS + + //REGISTRO DE CONTROL - IMPORTACIÓN + var TipoRegistro = "1"; + var NumeroCliente = ("111511111111").Trim().PadLeft(12, '0'); //CONVENIO + + var Fecha = TxtModalLayoutBancosFecha.Text.ToDate(); + var FechaPago = $"{Fecha.Day.ToString().PadLeft(2, '0')}{Fecha.ToString("MM")}{Fecha.Year.ToString().Replace("20", "")}"; + var Secuencia = (1).ToString("0000"); + var RazonSocial = (UsuarioActual.Empresa.Empresa).Replace("-Prueba", "").Trim().PadRight(36); + var Descripcion = ("TEST").Trim().PadRight(20); + var Naturaleza = "12"; //= 12 Pagos interbancarios CLABE, 05 Nomina banamex + var Instrucciones = ("").Trim().PadRight(40); + var Version = "C"; + var Volumen = "0"; + var Caracteristicas = "1"; // 0= Si es modificable, 1 = Solo lectura + + sb.AppendLine($"{TipoRegistro}{NumeroCliente}{FechaPago}{Secuencia}{RazonSocial}{Descripcion}{Naturaleza}{Instrucciones}{Version}{Volumen}{Caracteristicas}"); + + + //REGISTRO GLOBAL - IMPORTACIÓN + var TipoReg2 = "2"; + var TipoOpe2 = "1"; //0 = Si es Abono, 1 = Si es Cargo + var ImporteTotal = DTNomina.SUMD("Importe").ToString("0000000000000000.00").Replace(".", "");//16 enteros y 2 decimales + var TipoCuenta = "01"; //CUENTA DE CHEQUES + var Sucursal = "5555"; + var NumCuenta = ("9999999").Trim().PadLeft(20, '0'); //OBTENER DE BANCOS CUENTAS + var Espacio = ("").Trim().PadRight(20); + + sb.AppendLine($"{TipoReg2}{TipoOpe2}{ClaveMoneda}{ImporteTotal}{TipoCuenta}{Sucursal}{NumCuenta}{Espacio}"); + + //REGISTRO DE CARGOS O ABONOS INDIVIDUALES - IMPORTACIÓN + int Count = 1; + foreach (DataRow dRow in DTNomina.Rows) + { + var TipoReg3 = "3"; //Registro de Movtos. Individuales + var TipoOpe3 = "0"; //0 = Si es Abono, 1 = Si es Cargo (solo aplica para cobros) + + string Nombres = dRow["Nombres"].ToString().Replace("ñ,Ñ", "n").Replace("*,#,$,%,=,+", ""); + string APaterno = dRow["APaterno"].ToString().Replace("ñ,Ñ", "n").Replace("*,#,$,%,=,+", ""); + string AMaterno = dRow["AMaterno"].ToString().Replace("ñ,Ñ", "n").Replace("*,#,$,%,=,+", ""); + //string BancoNumCuenta = dRow["BancoNumCuenta"].ToString(); + + string CLABE = dRow["CLABE"].ToString(); + decimal Importe = dRow["Importe"].ToString().ToDecimal().RoundSQL(2); + + var StrImporte = Importe.ToString("0000000000000000.00").Replace(".", ""); + var StrTipoCuenta = "01";// 01- Cheques / CLABE + var StrCuenta = CLABE.Trim().PadLeft(20, '0'); + var ReferenciaAlfa = ("PAGO03072024NOM").PadRight(40); //No se ocupa si es nomina banamex + var Beneficiario = ($"{Nombres},{APaterno}/{AMaterno}").PadRight(55); + var Inst3 = ("").PadRight(40); + var DescTEF = ("").PadRight(24); + var ClaveBanco = ("0012").PadRight(4); //BANCOMER //No se ocupa si es nomina baname + var ReferenciaNum = ("2222222").PadRight(7, '0'); //QUE TOME DE LA CvePersonal como folio + var Plazo = "00"; // MISMO DIA + + sb.AppendLine($"{TipoReg3}{TipoOpe3}{ClaveMoneda}{StrImporte}{StrTipoCuenta}{StrCuenta}{ReferenciaAlfa}{Beneficiario}{Inst3}{DescTEF}{ClaveBanco}{ReferenciaNum}{Plazo}00"); + + + Count = Count + 1; + } + + //REGISTRO DE TOTALES - IMPORTACIÓN + var TipoReg4 = "4"; + var NumAbonos = Count.ToString("000000"); + var NumCargos = Count.ToString("000000"); + + sb.AppendLine($"{TipoReg4}{ClaveMoneda}{NumAbonos}{ImporteTotal}{NumCargos}{ImporteTotal}"); + + Response.Clear(); + Response.ClearHeaders(); + Response.AppendHeader("Content-Length", sb.ToString()); + Response.ContentType = "text/plain"; + //Response.AppendHeader("Content-Disposition", $"attachment;filename=\"Nomina{NowADS().ToString("yyyyMMddhhmmss").ToString()}.txt\""); + Response.AppendHeader("Content-Disposition", $"attachment;filename=\"Nomina {DdlPeriodo.SelectedItem.Text}.txt\""); + Response.Write(sb.ToString()); + RegistraScript("$('#ModalLayoutBancos').modal('hide');"); + Response.Flush(); + Response.End(); + } + else + Alert(SbErrores.ToString(), TipoMensaje.MsgAdvertencia); } #endregion