This commit is contained in:
2025-07-15 16:37:29 -07:00
19 changed files with 3123 additions and 1300 deletions

View File

@@ -4977,20 +4977,53 @@
<ajax:ValidatorCalloutExtender ID="VCERfvTxtModalLayoutBancosFecha" runat="server" HighlightCssClass="vco" TargetControlID="RfvTxtModalLayoutBancosFecha" Width="350px"></ajax:ValidatorCalloutExtender>
</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>
<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>--%>
<%--
<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>
<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 />
@@ -5012,6 +5045,11 @@
<asp:PostBackTrigger ControlID="BtnEfectivaleXLS" />
</Triggers>
</asp:UpdatePanel>
<div style="display:none!important">
<asp:FileUpload ID="FUTxt" runat="server" onchange="$('#FUTxtt').text(this.value);" ClientIDMode="Static" />
</div>
</div>

View File

@@ -1,22 +1,24 @@
using Extensiones;
using DocumentFormat.OpenXml.Drawing;
using Extensiones;
using Ionic.Zip;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
using Modelos;
using Profact.TimbraCFDI40;
using StackExchange.Redis;
using System;
using System.Activities.Expressions;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
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
{
@@ -10742,7 +10744,8 @@ public partial class Nomina_Nomina2 : ClsPaginas
SinSelccion,
Bancomer,
Banorte,
Banamex
Banamex,
ScotiaBank
}
@@ -10786,6 +10789,7 @@ public partial class Nomina_Nomina2 : ClsPaginas
CargaCuentas();
DivModalLayoutBancosFecha.Visible = false;
DVCuentasScotia.Visible = false;
TxtModalLayoutBancosFecha.Text = "";
RegistraScript("$('#ModalLayoutBancos').modal('show');");
@@ -10798,7 +10802,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','BANAMEX')");
DdlCuenta.DataSource = DTCuentas.FiltraParametros(" Banco IN('BANCOMER','BANORTE','BBVA Bancomer','BBVA','BANAMEX') OR Banco LIKE '%SCOTIA%' ");
DdlCuenta.DataBind();
DdlCuenta.Items.Insert(0, new ListItem("Seleccione", "-1"));
DdlCuenta.SelectedValueExist("-1");
@@ -10808,6 +10812,8 @@ public partial class Nomina_Nomina2 : ClsPaginas
{
ConvenioPagoElectronico = string.Empty;
DivModalLayoutBancosFecha.Visible = false;
DVCuentasScotia.Visible = false;
BtnGenerarAlta.Enabled = false;
if (DdlCuenta.SelectedValue.ToEntero() > 0)
{
@@ -10827,6 +10833,12 @@ public partial class Nomina_Nomina2 : ClsPaginas
Banco = Bancos.Banamex;
DivModalLayoutBancosFecha.Visible = true;
}
else if (DdlCuenta.SelectedItem.Text.ToUpper().Contains("SCOTIA"))
{
DivModalLayoutBancosFecha.Visible = false;
Banco = Bancos.ScotiaBank;
PreparaLayoutBancosScotiaBank();
}
else
{
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.NombreArchivo);
//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)
{
@@ -10970,6 +11250,7 @@ public partial class Nomina_Nomina2 : ClsPaginas
}
protected void BtnModalBancosProcesar_Click(object sender, EventArgs e)
{
BtnModalBancosProcesar.Enabled = true;
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)
{
@@ -12489,4 +12868,6 @@ public partial class Nomina_Nomina2 : ClsPaginas
{
CargaMovtoPermanente();
}
}