From a6990e696ca497ee009341ecdbe0ce25122dfad2 Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 12 Aug 2022 15:56:23 -0700 Subject: [PATCH 01/28] -- desaplicar pago de venta --- App_Code/ClsContabilidad.vb | 20 ++++++++++++ Contabilidad/PopUpAuxiliar.aspx | 1 + Contabilidad/PopUpAuxiliar.aspx.vb | 52 +++++++++++++++++++++++++++--- 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/App_Code/ClsContabilidad.vb b/App_Code/ClsContabilidad.vb index b28b1630c..0a37fc57f 100644 --- a/App_Code/ClsContabilidad.vb +++ b/App_Code/ClsContabilidad.vb @@ -1539,6 +1539,26 @@ Public Class ClsContabilidad Return Retorno End Function + Public Function DesAplicarPago(CvePrePoliza As Integer, CveConcepto As Integer, CveVenta As Integer, CveVentaAmortizacion As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_Conta_DesAplicarMovimiento") + With SqlAdapter.SelectCommand.Parameters + .Add("@CvePrePoliza", SqlDbType.Int).Value = CvePrePoliza + .Add("@CveConceptoContable", SqlDbType.Int).Value = CveConcepto + .Add("@CveVenta", SqlDbType.Int).Value = CveVenta + .Add("@CveVentaAmortizacion", SqlDbType.Int).Value = CveVentaAmortizacion + End With + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + + OnError("Ocurrió un error al desaplicar pago.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + + End Try + Return Retorno + End Function + Public Function GetEncabezadoPrePoliza(CvePrePoliza As Integer, CveEmpresa As Integer) As Boolean Dim Retorno As Boolean = False diff --git a/Contabilidad/PopUpAuxiliar.aspx b/Contabilidad/PopUpAuxiliar.aspx index 50fe4092b..0a5826bef 100644 --- a/Contabilidad/PopUpAuxiliar.aspx +++ b/Contabilidad/PopUpAuxiliar.aspx @@ -148,6 +148,7 @@ + diff --git a/Contabilidad/PopUpAuxiliar.aspx.vb b/Contabilidad/PopUpAuxiliar.aspx.vb index 6f0951149..b324091bd 100644 --- a/Contabilidad/PopUpAuxiliar.aspx.vb +++ b/Contabilidad/PopUpAuxiliar.aspx.vb @@ -164,9 +164,6 @@ Partial Class PopUpAuxiliar Protected Sub GVAuxiliar_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GVAuxiliar.RowDataBound - - - If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.RowIndex = 0 Then e.Row.BackColor = Drawing.Color.LightGray @@ -213,6 +210,17 @@ Partial Class PopUpAuxiliar e.Row.FCLiteral("LtlConcepto").Text = String.Format("{0}{1}", Liga, e.Row.DBCampo("ConceptoContable")) End If + If e.Row.DBCampo("CveConceptoContable").Contiene("91", "251") Then 'desaplicar NC + + e.Row.FCLinkButton("LnkDesAplicar").Visible = True + e.Row.FCLinkButton("imgD").Visible = False + If e.Row.DBCampo("CveConceptoContable").Contiene("251") Then + e.Row.FCLinkButton("LnkDesAplicar").CommandArgument = String.Format("{0}|{1}|{2}", e.Row.DBCampo("CvePrePoliza"), e.Row.DBCampo("CveVenta"), e.Row.DBCampo("CveVentaAmortizacion")) + Else + e.Row.FCLinkButton("LnkDesAplicar").CommandArgument = String.Format("{0}|{1}|{2}", e.Row.DBCampo("CvePrePoliza"), e.Row.DBCampo("CveVentaAmortizacion"), e.Row.DBCampo("CveVenta")) + End If + End If + If e.Row.DBCampo("TipoReferencia").ToEntero = 1 Then e.Row.FCHyperLink("HplReferencia").NavigateUrl = $"/Bancos/IE.aspx?CveIE={e.Row.DBCampo("CveReferencia").ToEntero}" 'If e.Row.DBCampo("CveReferencia").ToEntero > 0 Then @@ -418,7 +426,6 @@ Partial Class PopUpAuxiliar Alert(Str.ToString) Else ObjContabilidad.RollBack() - End If ObjContabilidad.Dispose() @@ -439,6 +446,43 @@ Partial Class PopUpAuxiliar RegistraScript(" $('#DivCancelar').modal('show'); ") End Sub + Private Sub GVAuxiliar_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GVAuxiliar.RowCommand + If e.CommandName = "DesAplicar" Then + + Dim CvePrePoliza, CveVenta, CveVentaAmortizacion As Integer + Dim TieneError = False + + Dim St As String() = e.CommandArgument.ToString.Split("|"c) + If St.Length > 0 Then + CvePrePoliza = St(0).ToEntero + CveVenta = St(1).ToEntero + CveVentaAmortizacion = St(2).ToEntero + End If + + If CvePrePoliza > 0 Then + Dim Conta As New ClsContabilidad() + Conta.IniciaTransacSQL() + + If Not Conta.UpdatePrePolizasDetalleBloquear(CvePrePoliza, False) Then + TieneError = True + End If + + If Not TieneError AndAlso Not Conta.DesAplicarPago(CvePrePoliza, 251, CveVenta, CveVentaAmortizacion) Then + TieneError = True + End If + + If Not TieneError Then + Conta.Commit() + Alert("Pago Desaplicado.", TipoMensaje.ToastInformacion) + Else + Conta.RollBack() + Alert("Pago no fue desaplicado.", TipoMensaje.ToastError) + End If + End If + + End If + + End Sub End Class From 51b09b7687595b7c3b053bf6469bb8b1bd630b8e Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Sun, 14 Aug 2022 23:44:01 -0700 Subject: [PATCH 02/28] estatuse incapacidad personal --- App_Code/ClsNominas.vb | 6 +- App_Code/ClsRH.vb | 21 ++ App_Code/Timbrado.vb | 2 +- Nomina/Finiquito.aspx.cs | 4 +- Nomina/Nomina.aspx | 14 +- Nomina/Nomina.aspx.cs | 9 +- RH/Personal.aspx | 585 +++++++++++++++++++++++++++++----- RH/Personal.aspx.vb | 399 +++++++++++++++++++++++ SAT/SolicitudesNominaSat.aspx | 203 ++++++------ 9 files changed, 1031 insertions(+), 212 deletions(-) diff --git a/App_Code/ClsNominas.vb b/App_Code/ClsNominas.vb index e688b1a85..f317b2d84 100644 --- a/App_Code/ClsNominas.vb +++ b/App_Code/ClsNominas.vb @@ -2733,7 +2733,7 @@ Public Class ClsNominas End Try Return retorno End Function - Public Function PersonalIncapacidadAdd(CveUsuarioCapturo As Integer, cvePersonal As Int32, folio As String, fechaInicio As DateTime, diasAutorizados As Int32, cveTipodeIncidencia As Int32, cveRamoSeguro As Int32, cveTipoRiesgo As Int32, porcentajedeIncapacidad As Int32, cveSecuelaConsecuencia As Int32, cveControlIncapacidad As Int32, descripcion As String) As Boolean + Public Function PersonalIncapacidadAdd(CveUsuarioCapturo As Integer, cvePersonal As Int32, folio As String, fechaInicio As DateTime, diasAutorizados As Int32, cveTipodeIncidencia As Int32, cveRamoSeguro As Int32, cveTipoRiesgo As Int32, porcentajedeIncapacidad As Int32, cveSecuelaConsecuencia As Int32, cveControlIncapacidad As Int32, descripcion As String, Optional DiasPagoEmpresa As Integer = 0) As Boolean Dim retorno As Boolean = False DataAdapter("PA_Nom_PersonalIncapacidadAdd", CommandType.StoredProcedure) Try @@ -2750,6 +2750,7 @@ Public Class ClsNominas .Add("@CveSecuelaConsecuencia", SqlDbType.Int).Value = cveSecuelaConsecuencia .Add("@CveControlIncapacidad", SqlDbType.Int).Value = cveControlIncapacidad .Add("@Descripcion", SqlDbType.VarChar).Value = descripcion + .Add("@DiasPagoEmpresa", SqlDbType.Int).Value = DiasPagoEmpresa End With SqlAdapter.Fill(Data) retorno = True @@ -2766,7 +2767,7 @@ Public Class ClsNominas End Try Return retorno End Function - Public Function PersonalIncapacidadUp(CveUsuarioCapturo As Integer, cvePersonalIncapacidad As Int32, folio As String, fechaInicio As DateTime, diasAutorizados As Int32, cveTipodeIncidencia As Int32, cveRamoSeguro As Int32, cveTipoRiesgo As Int32, porcentajedeIncapacidad As Int32, cveSecuelaConsecuencia As Int32, cveControlIncapacidad As Int32, descripcion As String) As Boolean + Public Function PersonalIncapacidadUp(CveUsuarioCapturo As Integer, cvePersonalIncapacidad As Int32, folio As String, fechaInicio As DateTime, diasAutorizados As Int32, cveTipodeIncidencia As Int32, cveRamoSeguro As Int32, cveTipoRiesgo As Int32, porcentajedeIncapacidad As Int32, cveSecuelaConsecuencia As Int32, cveControlIncapacidad As Int32, descripcion As String, Optional DiasPagoEmpresa As Integer = 0) As Boolean Dim retorno As Boolean = False DataAdapter("PA_Nom_PersonalIncapacidadUp", CommandType.StoredProcedure) Try @@ -2783,6 +2784,7 @@ Public Class ClsNominas .Add("@CveSecuelaConsecuencia", SqlDbType.Int).Value = cveSecuelaConsecuencia .Add("@CveControlIncapacidad", SqlDbType.Int).Value = cveControlIncapacidad .Add("@Descripcion", SqlDbType.VarChar).Value = descripcion + .Add("@DiasPagoEmpresa", SqlDbType.Int).Value = DiasPagoEmpresa End With SqlAdapter.Fill(Data) retorno = True diff --git a/App_Code/ClsRH.vb b/App_Code/ClsRH.vb index d7d2ecae0..96d7cd193 100644 --- a/App_Code/ClsRH.vb +++ b/App_Code/ClsRH.vb @@ -7343,6 +7343,27 @@ chkAplicaVacacion As Boolean, chkAplicaIncapacidad As Boolean, chkAplicaRetardo End Try Return Retorno End Function + Public Function estatusPersonalUp(Fecha As DateTime, CvePersonal As Integer, CveEstatusPersonal As Integer, CveEmpresa As Integer, CveUsuario As Integer) As Boolean + Dim Retorno As Boolean = False + Data = New DataTable + SqlDataAdapter("estatusPersonalUp") + With SqlAdapter.SelectCommand.Parameters + .Add("@Fecha", SqlDbType.DateTime).Value = Fecha + .Add("@CvePersonal", SqlDbType.Int).Value = CvePersonal + .Add("@CveEstatusPersonal", SqlDbType.Int).Value = CveEstatusPersonal + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + End With + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch Ex1 As SqlException + Me.OnError("Ocurrió un error al guardar correos nominas", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + Catch ex As Exception + OnError("Ocurrió un error al guardar correos nominas.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + Return Retorno + End Function Public Function NomBitacoraCorreoAdd(CvePeriodo As Integer, CvePersonal As Integer, Correos As String, CveEmpresa As Integer, CveUsuario As Integer) As Boolean Dim Retorno As Boolean = False Data = New DataTable diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 48bfd0a27..09b82768c 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -4832,7 +4832,7 @@ Public Class Timbrado If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos - cfdi.Concepto(concep.ClaveProdServ, concep.Noidentificacion, concep.Cantidad.ToString("0.00####"), concep.ClaveUnidad, concep.Unidad, concep.Descripcion, concep.ValorUnitario.ToString("0.00####"), concep.Importe, concep.Descuento, concep.ObjetoImpuesto) + cfdi.Concepto(concep.ClaveProdServ, concep.Noidentificacion, concep.Cantidad.ToString("0.00####").ToDouble(), concep.ClaveUnidad, concep.Unidad, concep.Descripcion, concep.ValorUnitario.ToString("0.00####").ToDouble(), concep.Importe, concep.Descuento, concep.ObjetoImpuesto) For Each imp As CFDIConceptosImpuestos In concep.Impuestos If imp.TrasladooRetencion = "T" Then cfdi.ConceptoTraslado(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe) diff --git a/Nomina/Finiquito.aspx.cs b/Nomina/Finiquito.aspx.cs index 0f0849dc7..25bc63094 100644 --- a/Nomina/Finiquito.aspx.cs +++ b/Nomina/Finiquito.aspx.cs @@ -166,8 +166,8 @@ public partial class Nomina_Finiquito : ClsPaginas chkPrimaantiguedad.Checked = da["ValPrimadeantiguedad"].ToString().ToUpper().Contiene(new string[] { "1", "TRUE" }); } } - - + + DdlTipoPeriodo.SelectedValueExist(da["CveTipoPeriodo"]); DdlMotivoBaja.SelectedValueExist(da["CveMotivoBaja"]); TxtSalarioMinimo.Text = $"{da["SalarioMinimo"]:N2}"; ChkesLiquidacion.Checked = (da["esLiquidacion"].ToString() == "1" || da["esLiquidacion"].ToString().ToUpper() == "TRUE"); diff --git a/Nomina/Nomina.aspx b/Nomina/Nomina.aspx index 543a0c32f..ef037529c 100644 --- a/Nomina/Nomina.aspx +++ b/Nomina/Nomina.aspx @@ -1741,7 +1741,7 @@
+ DataKeyNames="CvePersonalIncapacidad,CvePersonal,Folio,FechaInicio,DiasAutorizados,DiasPagoEmpresa,CveTipodeIncidencia,CveRamoSeguro,CveTipoRiesgo,PorcentajedeIncapacidad,CveSecuelaConsecuencia,CveControlIncapacidad,Descripcion"> @@ -1795,7 +1795,7 @@
-
+
@@ -1804,7 +1804,7 @@
-
+
@@ -1816,7 +1816,7 @@
-
+
@@ -1824,6 +1824,12 @@ Dias autorizados
+
+
+ + Dias pagados por empresa +
+
diff --git a/Nomina/Nomina.aspx.cs b/Nomina/Nomina.aspx.cs index b4ad46dc9..840e92404 100644 --- a/Nomina/Nomina.aspx.cs +++ b/Nomina/Nomina.aspx.cs @@ -7363,6 +7363,8 @@ public partial class Nomina_Nomina2 : ClsPaginas string folio = gvRow.DataKey("Folio"); DateTime fechaInicio = gvRow.DataKey("FechaInicio").ToDateTime(); int diasAutorizados = gvRow.DataKey("DiasAutorizados").ToEntero(); + int diasPagoEmpresa = gvRow.DataKey("DiasPagoEmpresa").ToEntero(); + int cveTipodeIncidencia = gvRow.DataKey("CveTipodeIncidencia").ToEntero(); int cveRamoSeguro = gvRow.DataKey("CveRamoSeguro").ToEntero(); int cveTipoRiesgo = gvRow.DataKey("CveTipoRiesgo").ToEntero(); @@ -7374,6 +7376,7 @@ public partial class Nomina_Nomina2 : ClsPaginas TxtSRINCfolio.Text = folio.ToString(); TxtSRINCfechaInicio.Text = $"{fechaInicio:dd/MM/yyyy}"; TxtSRINCdiasAutorizados.Text = diasAutorizados.ToString(); + TxtDiasPagoEmpresa.Text = diasPagoEmpresa.ToString(); DdlSRINCcveTipodeIncidencia.SelectedValueExist(cveTipodeIncidencia.ToString()); DdlSRINCcveRamoSeguro.SelectedValueExist(cveRamoSeguro.ToString()); DdlSRINCcveTipoRiesgo.SelectedValueExist(cveTipoRiesgo.ToString()); @@ -7399,6 +7402,7 @@ public partial class Nomina_Nomina2 : ClsPaginas string folio = TxtSRINCfolio.Text; DateTime fechaInicio = TxtSRINCfechaInicio.Text.ToDateTime(); int diasAutorizados = TxtSRINCdiasAutorizados.Text.ToEntero(); + int diasPagoEmpresa = TxtDiasPagoEmpresa.Text.ToEntero(); int cveTipodeIncidencia = DdlSRINCcveTipodeIncidencia.Text.ToEntero(); int cveRamoSeguro = DdlSRINCcveRamoSeguro.Text.ToEntero(); int cveTipoRiesgo = DdlSRINCcveTipoRiesgo.Text.ToEntero(); @@ -7409,7 +7413,7 @@ public partial class Nomina_Nomina2 : ClsPaginas bool Continuar; using (ClsNominas ObjPers = new ClsNominas()) { - Continuar = ObjPers.PersonalIncapacidadAdd(UsuarioActual.CveUsuario, SRCvePersonal, folio, fechaInicio, diasAutorizados, cveTipodeIncidencia, cveRamoSeguro, cveTipoRiesgo, porcentajedeIncapacidad, cveSecuelaConsecuencia, cveControlIncapacidad, descripcion); + Continuar = ObjPers.PersonalIncapacidadAdd(UsuarioActual.CveUsuario, SRCvePersonal, folio, fechaInicio, diasAutorizados, cveTipodeIncidencia, cveRamoSeguro, cveTipoRiesgo, porcentajedeIncapacidad, cveSecuelaConsecuencia, cveControlIncapacidad, descripcion, diasPagoEmpresa); } if (Continuar) { @@ -7425,6 +7429,7 @@ public partial class Nomina_Nomina2 : ClsPaginas string folio = TxtSRINCfolio.Text; DateTime fechaInicio = TxtSRINCfechaInicio.Text.ToDateTime(); int diasAutorizados = TxtSRINCdiasAutorizados.Text.ToEntero(); + int diasPagoEmpresa = TxtDiasPagoEmpresa.Text.ToEntero(); int cveTipodeIncidencia = DdlSRINCcveTipodeIncidencia.Text.ToEntero(); int cveRamoSeguro = DdlSRINCcveRamoSeguro.Text.ToEntero(); int cveTipoRiesgo = DdlSRINCcveTipoRiesgo.Text.ToEntero(); @@ -7436,7 +7441,7 @@ public partial class Nomina_Nomina2 : ClsPaginas using (ClsNominas ObjPers = new ClsNominas()) { Continuar = ObjPers.PersonalIncapacidadUp(UsuarioActual.CveUsuario, CcvePersonalIncapacidad, folio, fechaInicio, diasAutorizados, - cveTipodeIncidencia, cveRamoSeguro, cveTipoRiesgo, porcentajedeIncapacidad, cveSecuelaConsecuencia, cveControlIncapacidad, descripcion); + cveTipodeIncidencia, cveRamoSeguro, cveTipoRiesgo, porcentajedeIncapacidad, cveSecuelaConsecuencia, cveControlIncapacidad, descripcion, diasPagoEmpresa); } if (Continuar) { diff --git a/RH/Personal.aspx b/RH/Personal.aspx index 5b3dec480..0e3d14f19 100644 --- a/RH/Personal.aspx +++ b/RH/Personal.aspx @@ -62,6 +62,10 @@
  • Agregar buzón de calidad
  • +
  • + Activar + Desactivar +
  • @@ -588,13 +592,13 @@
    -
    - - - +
    + + +
    - +
    @@ -604,7 +608,7 @@
    -
    +
    @@ -621,7 +625,7 @@
    - +
    @@ -634,7 +638,8 @@
    @@ -712,79 +717,46 @@
    -
    - - - - - - -
    -
    - - - - - -
    - <%--
    - -
    - - - - - +
    +
    + + + + + +
    - - - - - - - - -
    --%> - -
    - -
    - - - - - - +
    + + + + +
    - - - - - + +
    + +
    + + + + + + +
    + + + + + + + +
    - <%--
    - -
    - - - - - - -
    - - - - - - - -
    --%> -
    - -
    @@ -1449,7 +1418,7 @@
    - + @@ -1597,6 +1566,408 @@
    + + + + + +
    +
    +
    + + Movimientos Permanentes +
    +
    + +
    + +
    +
    + Agregar +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    + + + +
    +
    +
    + + Incapacidades registradas +
    +
    + +
    +
    +
    + Agregar +
    +
    +
    +
    + + + + + + + + + + + + + + + +
    +
    + <%# Eval("DiasAutorizados")%> +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + + +
    +
    <%--
    @@ -3093,14 +3464,8 @@ - - + + @@ -5291,6 +5656,52 @@
    + diff --git a/RH/Personal.aspx.vb b/RH/Personal.aspx.vb index 628fc2cc2..4f0d1d4a6 100644 --- a/RH/Personal.aspx.vb +++ b/RH/Personal.aspx.vb @@ -16,6 +16,18 @@ Partial Class RH_Personal #Region "P R O P I E D A D E S" + Property CcveMovtoPermanente As Integer + Get + If ViewState("CcveMovtoPermanente") Is Nothing Then + Return -1 + Else + Return DirectCast(ViewState("CcveMovtoPermanente"), Integer) + End If + End Get + Set(value As Integer) + ViewState("CcveMovtoPermanente") = value + End Set + End Property Property CveFonacot As Integer Get If ViewState("CveFonacot") Is Nothing Then @@ -218,6 +230,17 @@ Partial Class RH_Personal End If End Get End Property + + + Private Property dtNomConceptos As Data.DataTable + Get + Return CType(ViewState("dtNomConceptos"), DataTable) + End Get + Set(value As Data.DataTable) + ViewState("dtNomConceptos") = value + End Set + End Property + Private Property DtCuentasContables As Data.DataTable Get Return CType(ViewState("DtCuentasContables"), DataTable) @@ -825,6 +848,10 @@ Partial Class RH_Personal pnlSalarioIMSS.Visible = False End If ' + Using objno = New ClsNominas + objno.GetConceptos() + dtNomConceptos = objno.DtResultados + End Using PnlSalarios.Visible = showsalarios ViewState("Orden") = "" @@ -877,6 +904,8 @@ Partial Class RH_Personal 'CvePersonal = ViewState("CvePersonal").ToString().ToEntero() CargaDatos() CargaDocumentacionFirmaDecontratos() + CargaPersonalIncapacidad() + CargaMovtoPermanente() 'LnkAddLicencias.Visible = True 'TabLicencias.Visible = True 'Configuración de Modalidad Update @@ -1663,6 +1692,8 @@ Partial Class RH_Personal 'End If DdlEstatusPersonal.SelectedValue = ObjPersonal.CveEstatusPersonal.ToString() + LnkActivar.Visible = (ObjPersonal.CveEstatusPersonal = 2) + LnkDesactivar.Visible = Not LnkActivar.Visible CargaEstatusPersonal(DdlEstatusPersonal.SelectedValue.ToEntero()) MostrarOcultarFechasEstatus() @@ -7062,5 +7093,373 @@ Partial Class RH_Personal End Using End Sub +#Region "movtosPermanentes" + Protected Sub CargaTipoConcepto() + CargaConcepto() + End Sub + + Protected Sub CargaConcepto() + Dim dt As DataTable = dtNomConceptos.FiltraParametros(" FormulaTotal = 'FNC.[MovimientosPermanentes]'") + DdlConcepto.Items.Clear() + + If DdlTipo.SelectedValue.Contiene("P", "D", "O") Then + DdlConcepto.DataSource = dt.FiltraParametros(String.Format("Tipo ='{0}'", DdlTipo.SelectedValue)) + End If + + Dim drow As DataRow = dt.NewRow() + drow("CveConcepto") = "-1" + drow("Concepto") = "Seleccione" + dt.Rows.InsertAt(drow, 0) + DdlConcepto.DataSource = dt + DdlConcepto.SelectedValueExist("-1") + DdlConcepto.DataBind() + End Sub + + Private Sub CargaMovtoPermanente() + Using ObjMovt As ClsNominas = New ClsNominas() + ObjMovt.GetMovtoPermanente(UsuarioActual.CveEmpresa, CvePersonal) + GVMovtoPermanente.DataSource = ObjMovt.DtResultados + End Using + + GVMovtoPermanente.DataBind() + UpMovtosPermanentes.Update() + End Sub + + Protected Sub DdlTipo_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) + CargaConcepto() + End Sub + + Protected Sub LnkAddMovtoPermanente_Click(ByVal sender As Object, ByVal e As EventArgs) + CargaConcepto() + DdlTipoDescto_SelectedIndexChanged(Nothing, Nothing) + pnlAddupMovto.Visible = True + LnkAddMovto.Visible = True + LnkUpMovto.Visible = False + LtlMovtoPermanenteaddup.Text = "Agregar Movimiento" + TxtDescripcion.Text = "" + TxtValor.Text = "" + TxtVecesAplicar.Text = "" + TxtMontoLimite.Text = "" + TxtFechaAplicacion.Text = "" + ChkEstatus.Visible = True + ChkEstatus.Checked = True + UpMovtosPermanentesModal.Update() + RegistraScript("$('#ModalMovtoPermanente').modal()") + End Sub + + Protected Sub LnkAddMovto_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim cveConcepto As Integer = DdlConcepto.SelectedValue.ToEntero() + Dim descripcion As String = TxtDescripcion.Text + Dim tipoDescuento As Integer = DdlTipoDescto.SelectedValue.ToEntero() + Dim valor As Double = TxtValor.Text.ToDouble() + Dim vecesAplicar As Integer = TxtVecesAplicar.Text.ToEntero() + Dim montoLimite As Decimal = TxtMontoLimite.Text.ToDecimal() + Dim fechaInicioAplicacion As String = TxtFechaAplicacion.Text.ToDate().ToString("yyyy/MM/dd") + Dim estatus As Boolean = ChkEstatus.Checked + Dim CveCuenta As Integer = DdlCtaContable.SelectedValue.ToEntero() * (If(DdlCtaContable.DataValueField = "Id", -1, 1)) + Dim Continuar As Boolean + + Using ObjMovt As ClsNominas = New ClsNominas() + Continuar = ObjMovt.AddMovtoPermanente(cveConcepto, CvePersonal, descripcion, tipoDescuento, valor, vecesAplicar, montoLimite, fechaInicioAplicacion, estatus, CveCuenta) > 0 + End Using + + If Continuar Then + Me.RegistraScript("$('#DModalMovtoPermanente').modal('hide');") + CargaMovtoPermanente() + UpMovtosPermanentes.Update() + Me.Alert("Se ha agregado el movimiento permanente") + End If + + RegistraScript("$('#ModalMovtoPermanente').modal('hide')") + End Sub + + Protected Sub LnkUpMovto_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim cveConcepto As Integer = DdlConcepto.SelectedValue.ToEntero() + Dim descripcion As String = TxtDescripcion.Text + Dim tipoDescuento As Integer = DdlTipoDescto.SelectedValue.ToEntero() + Dim valor As Double = TxtValor.Text.ToDouble() + Dim vecesAplicar As Integer = TxtVecesAplicar.Text.ToEntero() + Dim montoLimite As Decimal = TxtMontoLimite.Text.ToDecimal() + Dim fechaInicioAplicacion As String = TxtFechaAplicacion.Text.ToDate().ToString("yyyy/MM/dd") + Dim estatus As Boolean = ChkEstatus.Checked + Dim CveCuenta As Integer = DdlCtaContable.SelectedValue.ToEntero() * (If(DdlCtaContable.DataValueField = "Id", -1, 1)) + Dim Continuar As Boolean + + Using ObjMovt As ClsNominas = New ClsNominas() + Continuar = ObjMovt.UpMovtoPermanente(CcveMovtoPermanente, cveConcepto, CvePersonal, descripcion, tipoDescuento, valor, vecesAplicar, montoLimite, fechaInicioAplicacion, estatus, CveCuenta) + End Using + + If Continuar Then + Me.RegistraScript("$('#ModalMovtoPermanente').modal('hide');") + CargaMovtoPermanente() + UpMovtosPermanentes.Update() + Me.Alert("Se ha actualizado el movimiento permanente") + End If + End Sub + + Protected Sub DdlTipoDescto_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) + pnlMonto.Visible = DdlTipoDescto.SelectedValue.ToEntero() > 2 + pnlVecesAplicar.Visible = DdlTipoDescto.SelectedValue.ToEntero() < 3 + End Sub + + Protected Sub LnkremoveMovtoPermanente_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim gvRow As GridViewRow = CType(((CType(sender, LinkButton)).NamingContainer), GridViewRow) + CcveMovtoPermanente = gvRow.DataKey("CveMovtoPermanente").ToEntero() + Dim Continuar As Boolean = False + + Using ObjMovt As ClsNominas = New ClsNominas() + Continuar = ObjMovt.RemoveMovtoPermanente(CcveMovtoPermanente) + End Using + + If Continuar Then + Me.RegistraScript("$('#ModalMovtoPermanente').modal('hide');") + CargaMovtoPermanente() + UpMovtosPermanentes.Update() + Me.Alert("Se ha eliminadó el movimiento permanente") + End If + End Sub + + Protected Sub LnkEditarMovtoPermanente_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim gvRow As GridViewRow = CType(((CType(sender, LinkButton)).NamingContainer), GridViewRow) + CcveMovtoPermanente = gvRow.DataKey("CveMovtoPermanente").ToEntero() + Dim cveConcepto As Integer = gvRow.DataKey("CveConcepto").ToEntero() + Dim cvePersonal As Integer = gvRow.DataKey("CvePersonal").ToEntero() + Dim CveCuenta As Integer = gvRow.DataKey("CveCuenta").ToEntero() + Dim IdCtaContable As Integer = gvRow.DataKey("IdCtaContable").ToEntero() + Dim descripcion As String = gvRow.DataKey("Descripcion") + Dim tipoDescuento As Integer = gvRow.DataKey("TipoDescuento").ToEntero() + Dim valor As Double = gvRow.DataKey("Valor").ToDouble() + Dim vecesAplicar As Integer = gvRow.DataKey("VecesAplicar").ToEntero() + Dim montoLimite As Decimal = gvRow.DataKey("MontoLimite").ToDecimal() + Dim fechaInicioAplicacion As DateTime = gvRow.DataKey("FechaInicioAplicacion").ToDate() + Dim estatus As Boolean = gvRow.DataKey("Estatus") = "1" OrElse gvRow.DataKey("Estatus").ToUpper() = "TRUE" + Dim fechaRegistro As DateTime = gvRow.DataKey("FechaRegistro").ToDateTime() + Dim tipo As String = "P" + Dim drow As DataRow = dtNomConceptos.FiltroPrimero(String.Format("CveConcepto ='{0}'", cveConcepto)) + + If drow IsNot Nothing Then + tipo = drow("Tipo").ToString() + DdlTipo.SelectedValueExist(tipo) + DdlTipo_SelectedIndexChanged(Nothing, Nothing) + End If + + CargaConcepto() + DdlConcepto.SelectedValueExist(cveConcepto) + TxtDescripcion.Text = descripcion.ToString() + DdlTipoDescto.SelectedValueExist(tipoDescuento.ToString()) + DdlTipoDescto_SelectedIndexChanged(Nothing, Nothing) + TxtValor.Text = valor.ToString() + TxtVecesAplicar.Text = vecesAplicar.ToString() + TxtMontoLimite.Text = montoLimite.ToString() + TxtFechaAplicacion.Text = $"{fechaInicioAplicacion}" + DdlCtaContable.SelectedValueExist("-1") + + If DdlCtaContable.DataValueField = "Id" Then + DdlCtaContable.SelectedValueExist(IdCtaContable) + Else + DdlCtaContable.SelectedValueExist(CveCuenta) + End If + + ChkEstatus.Checked = estatus + RegistraScript("$('#ModalMovtoPermanente').modal()") + pnlAddupMovto.Visible = True + LnkAddMovto.Visible = False + LnkUpMovto.Visible = True + UpMovtosPermanentesModal.Update() + End Sub +#End Region +#Region "incapacidad" + Private Property CcvePersonalIncapacidad As Integer + Get + Return If((ViewState("CcvePersonalIncapacidad") Is Nothing), 0, Convert.ToInt32(ViewState("CcvePersonalIncapacidad"))) + End Get + Set(ByVal value As Integer) + ViewState("CcvePersonalIncapacidad") = value + End Set + End Property + + Protected Sub CargaPersonalIncapacidad() + LimpiaPersonalIncapacidad() + LnkAgregarIncapacidad.Visible = False + LnkActualizarIncapacidad.Visible = False + CcvePersonalIncapacidad = 0 + + Using ObjPers As ClsNominas = New ClsNominas() + ObjPers.PersonalIncapacidadGet(-1, CvePersonal, UsuarioActual.CveEmpresa) + GVNom_PersonalIncapacidad.DataSource = ObjPers.DtResultados + End Using + + GVNom_PersonalIncapacidad.DataBind() + UpsrIncapacidadpersonal.Update() + End Sub + + Protected Sub LimpiaPersonalIncapacidad() + TxtSRINCfolio.Text = "" + TxtSRINCfechaInicio.Text = "" + TxtSRINCdiasAutorizados.Text = "" + DdlSRINCcveTipodeIncidencia.SelectedValue = "-1" + DdlSRINCcveRamoSeguro.SelectedValue = "-1" + DdlSRINCcveTipoRiesgo.SelectedValue = "-1" + TxtSRINCporcentajedeIncapacidad.Text = "100" + DdlSRINCcveSecuelaConsecuencia.SelectedValue = "-1" + DdlSRINCcveControlIncapacidad.SelectedValue = "-1" + TxtSRINCdescripcion.Text = "" + UpsrIncapacidadpersonal.Update() + End Sub + + Protected Sub LnkPersonalIncapacidad_Click(ByVal sender As Object, ByVal e As EventArgs) + LimpiaPersonalIncapacidad() + Dim gvRow As GridViewRow = CType(((CType(sender, LinkButton)).NamingContainer), GridViewRow) + CcvePersonalIncapacidad = gvRow.DataKey("CvePersonalIncapacidad").ToEntero() + Dim cvePersonal As Integer = gvRow.DataKey("CvePersonal").ToEntero() + Dim folio As String = gvRow.DataKey("Folio") + Dim fechaInicio As DateTime = gvRow.DataKey("FechaInicio").ToDateTime() + Dim diasAutorizados As Integer = gvRow.DataKey("DiasAutorizados").ToEntero() + Dim diasPagoEmpresa As Integer = gvRow.DataKey("DiasPagoEmpresa").ToEntero() + Dim cveTipodeIncidencia As Integer = gvRow.DataKey("CveTipodeIncidencia").ToEntero() + Dim cveRamoSeguro As Integer = gvRow.DataKey("CveRamoSeguro").ToEntero() + Dim cveTipoRiesgo As Integer = gvRow.DataKey("CveTipoRiesgo").ToEntero() + Dim porcentajedeIncapacidad As Integer = gvRow.DataKey("PorcentajedeIncapacidad").ToEntero() + Dim cveSecuelaConsecuencia As Integer = gvRow.DataKey("CveSecuelaConsecuencia").ToEntero() + Dim cveControlIncapacidad As Integer = gvRow.DataKey("CveControlIncapacidad").ToEntero() + Dim descripcion As String = gvRow.DataKey("Descripcion") + TxtSRINCfolio.Text = folio.ToString() + TxtSRINCfechaInicio.Text = $"{fechaInicio}" + TxtSRINCdiasAutorizados.Text = diasAutorizados.ToString() + TxtDiasPagoEmpresa.Text = diasPagoEmpresa.ToString() + DdlSRINCcveTipodeIncidencia.SelectedValueExist(cveTipodeIncidencia.ToString()) + DdlSRINCcveRamoSeguro.SelectedValueExist(cveRamoSeguro.ToString()) + DdlSRINCcveTipoRiesgo.SelectedValueExist(cveTipoRiesgo.ToString()) + TxtSRINCporcentajedeIncapacidad.Text = porcentajedeIncapacidad.ToString() + DdlSRINCcveSecuelaConsecuencia.SelectedValueExist(cveSecuelaConsecuencia.ToString()) + DdlSRINCcveControlIncapacidad.SelectedValueExist(cveControlIncapacidad.ToString()) + TxtSRINCdescripcion.Text = descripcion.ToString() + LnkAgregarIncapacidad.Visible = False + LnkActualizarIncapacidad.Visible = True + RegistraScript("$('#ModalSRIncapacidad').modal()") + End Sub + + Protected Sub LnkshowaaddIncapacidad_Click(ByVal sender As Object, ByVal e As EventArgs) + LimpiaPersonalIncapacidad() + LnkAgregarIncapacidad.Visible = True + LnkActualizarIncapacidad.Visible = False + CcvePersonalIncapacidad = 0 + RegistraScript("$('#ModalSRIncapacidad').modal()") + End Sub + + Protected Sub LnkAgregarIncapacidad_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim folio As String = TxtSRINCfolio.Text + Dim fechaInicio As DateTime = TxtSRINCfechaInicio.Text.ToDateTime() + Dim diasAutorizados As Integer = TxtSRINCdiasAutorizados.Text.ToEntero() + Dim DiasPagoEmpresa As Integer = TxtDiasPagoEmpresa.Text.ToEntero() + Dim cveTipodeIncidencia As Integer = DdlSRINCcveTipodeIncidencia.Text.ToEntero() + Dim cveRamoSeguro As Integer = DdlSRINCcveRamoSeguro.Text.ToEntero() + Dim cveTipoRiesgo As Integer = DdlSRINCcveTipoRiesgo.Text.ToEntero() + Dim porcentajedeIncapacidad As Integer = TxtSRINCporcentajedeIncapacidad.Text.ToEntero() + Dim cveSecuelaConsecuencia As Integer = DdlSRINCcveSecuelaConsecuencia.Text.ToEntero() + Dim cveControlIncapacidad As Integer = DdlSRINCcveControlIncapacidad.Text.ToEntero() + Dim descripcion As String = TxtSRINCdescripcion.Text + Dim Continuar As Boolean + + Using ObjPers As ClsNominas = New ClsNominas() + Continuar = ObjPers.PersonalIncapacidadAdd(UsuarioActual.CveUsuario, CvePersonal, folio, fechaInicio, diasAutorizados, cveTipodeIncidencia, cveRamoSeguro, cveTipoRiesgo, porcentajedeIncapacidad, cveSecuelaConsecuencia, cveControlIncapacidad, descripcion, DiasPagoEmpresa) + End Using + + If Continuar Then + CargaPersonalIncapacidad() + UpsrIncapacidadpersonal.Update() + Me.Alert("La incapacidad se ha agregado.", TipoMensaje.ToastInformacion) + RegistraScript("$('#ModalSRIncapacidad').modal('hide')") + End If + End Sub + + Protected Sub LnkActualizarIncapacidad_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim folio As String = TxtSRINCfolio.Text + Dim fechaInicio As DateTime = TxtSRINCfechaInicio.Text.ToDateTime() + Dim diasAutorizados As Integer = TxtSRINCdiasAutorizados.Text.ToEntero() + Dim DiasPagoEmpresa As Integer = TxtDiasPagoEmpresa.Text.ToEntero() + Dim cveTipodeIncidencia As Integer = DdlSRINCcveTipodeIncidencia.Text.ToEntero() + Dim cveRamoSeguro As Integer = DdlSRINCcveRamoSeguro.Text.ToEntero() + Dim cveTipoRiesgo As Integer = DdlSRINCcveTipoRiesgo.Text.ToEntero() + Dim porcentajedeIncapacidad As Integer = TxtSRINCporcentajedeIncapacidad.Text.ToEntero() + Dim cveSecuelaConsecuencia As Integer = DdlSRINCcveSecuelaConsecuencia.Text.ToEntero() + Dim cveControlIncapacidad As Integer = DdlSRINCcveControlIncapacidad.Text.ToEntero() + Dim descripcion As String = TxtSRINCdescripcion.Text + Dim Continuar As Boolean + + Using ObjPers As ClsNominas = New ClsNominas() + Continuar = ObjPers.PersonalIncapacidadUp(UsuarioActual.CveUsuario, CcvePersonalIncapacidad, folio, fechaInicio, diasAutorizados, cveTipodeIncidencia, cveRamoSeguro, cveTipoRiesgo, porcentajedeIncapacidad, cveSecuelaConsecuencia, cveControlIncapacidad, descripcion, DiasPagoEmpresa) + End Using + + If Continuar Then + CargaPersonalIncapacidad() + UpsrIncapacidadpersonal.Update() + Me.Alert("La incapacidad se ha actualizado.", TipoMensaje.ToastInformacion) + RegistraScript("$('#ModalSRIncapacidad').modal('hide')") + End If + End Sub +#End Region + + + Protected Sub LnkActivar_Click(sender As Object, e As EventArgs) + LblEstatus.Text = "Activar personal" + LblFechaEstatus.Text = "Fecha ingreso ó reingreso" + TxtFechaEstatus.Text = "" + RegistraScript("$('#ModalUpEstatus').modal();") + upPersonEstatus.Update() + End Sub + + Protected Sub LnkDesactivar_Click(sender As Object, e As EventArgs) + LblEstatus.Text = "Desactivar personal" + LblFechaEstatus.Text = "Fecha baja" + TxtFechaEstatus.Text = "" + RegistraScript("$('#ModalUpEstatus').modal();") + upPersonEstatus.Update() + End Sub + + Protected Sub LnkUpEstatus_Click(sender As Object, e As EventArgs) + Dim fini As DateTime + Dim ffin As DateTime + Dim fecha As DateTime = TxtFechaEstatus.Text.ToDateTime() + + If GvPersonalAltas.Rows.Count > 0 Then + Dim gvrow As GridViewRow = GvPersonalAltas.Rows(0) + fini = gvrow.DataKey("FechaInicio").ToDateTime() + ffin = gvrow.DataKey("FechaFin").ToDateTime() + + End If + Dim estatus = -1 + Dim continuar = False + + + If (LnkActivar.Visible) Then + estatus = 1 + If ffin >= fecha Then + continuar = False + Alert(String.Format("la '{0}' debe ser mayor a {1:dd/MM/yyyy}", LblFechaEstatus.Text, ffin), TipoMensaje.MsgAdvertencia) + Else + continuar = True + + End If + Else + + estatus = 2 + If fini >= fecha Then + continuar = False + Alert(String.Format("la '{0}' debe ser mayor a {1:dd/MM/yyyy}", LblFechaEstatus.Text, fini), TipoMensaje.MsgAdvertencia) + Else + continuar = True + + End If + End If + + + If continuar Then + + RegistraScript("$('#ModalUpEstatus').modal('hide');") + Alert("Se guardo correctamente", TipoMensaje.MsgInformacion) + CargaDatos() + End If + End Sub End Class diff --git a/SAT/SolicitudesNominaSat.aspx b/SAT/SolicitudesNominaSat.aspx index 92de2442c..d4ec0e936 100644 --- a/SAT/SolicitudesNominaSat.aspx +++ b/SAT/SolicitudesNominaSat.aspx @@ -14,7 +14,7 @@ } .ajax__tab_xp .ajax__tab_body { - font-family: verdana,tahoma,helvetica; + font-family: "Open Sans", sans-serif; font-size: 12px; } @@ -131,12 +131,13 @@ background-color: #3598dc; color: #FFF; } - + .reporte5 .GVSolicitudTimbreNominaGral tr td:nth-child(2), .reporte5 .GVSolicitudTimbreNominaGral tr td:nth-child(3), - .reporte5 .GVSolicitudTimbreNominaGral tr td:nth-child(4){ - text-align:right + .reporte5 .GVSolicitudTimbreNominaGral tr td:nth-child(4) { + text-align: right } + .reporte5 .GVSolicitudTimbreNominaGral tr th:nth-child(2) /*, .reporte5 .ADScroller-body .GVSolicitudTimbreNominaGral tr:nth-child(2) td:nth-child(2)*/ { background-color: #C46B06; @@ -490,121 +491,95 @@ -
    -
    -
    - - -
    -
    - - -
    -
    -
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    - - -
    -
    - - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    From f76e42b2e8f40985ebc7e20544125e044f004617 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Sun, 14 Aug 2022 23:56:47 -0700 Subject: [PATCH 03/28] --- App_Code/ClsRH.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/App_Code/ClsRH.vb b/App_Code/ClsRH.vb index 96d7cd193..d8aa2d0f5 100644 --- a/App_Code/ClsRH.vb +++ b/App_Code/ClsRH.vb @@ -7346,7 +7346,7 @@ chkAplicaVacacion As Boolean, chkAplicaIncapacidad As Boolean, chkAplicaRetardo Public Function estatusPersonalUp(Fecha As DateTime, CvePersonal As Integer, CveEstatusPersonal As Integer, CveEmpresa As Integer, CveUsuario As Integer) As Boolean Dim Retorno As Boolean = False Data = New DataTable - SqlDataAdapter("estatusPersonalUp") + SqlDataAdapter("PA_RH_EstatusPersonalUp") With SqlAdapter.SelectCommand.Parameters .Add("@Fecha", SqlDbType.DateTime).Value = Fecha .Add("@CvePersonal", SqlDbType.Int).Value = CvePersonal From 262804eab079b7852e03afb7d1e4ecf0a4932a47 Mon Sep 17 00:00:00 2001 From: Oscar Irigoyen Date: Mon, 15 Aug 2022 10:15:02 -0700 Subject: [PATCH 04/28] eFacturas Solicitdes SAt solo empresas con PFX, Rep CxC detalle incluir cartera en impresion de reporte. --- Compras/eFacturas.aspx | 3 + Compras/eFacturas.aspx.vb | 13 + CxC/RepCxCDetalle.aspx.vb | 54 ++- Empresas/Grales/Formatos/RepCxCDetalle.rdlc | 476 +++++++++++++++++++- Ventas/RepVentas.aspx.vb | 2 +- 5 files changed, 531 insertions(+), 17 deletions(-) diff --git a/Compras/eFacturas.aspx b/Compras/eFacturas.aspx index ec13217d4..670f7fa0d 100644 --- a/Compras/eFacturas.aspx +++ b/Compras/eFacturas.aspx @@ -30,6 +30,9 @@ .table table-striped table-hover dataTable no-footer { margin-top: 0px !important; } + .ajax__tab_xp .ajax__tab_body { + font-size: 12px !important; + } diff --git a/Compras/eFacturas.aspx.vb b/Compras/eFacturas.aspx.vb index 6fc2bdb8f..295d0a10a 100644 --- a/Compras/eFacturas.aspx.vb +++ b/Compras/eFacturas.aspx.vb @@ -778,6 +778,7 @@ Partial Class Compras_eFacturas CargaGvBitacora() CargaDatos() + MostrarSolcitudesSAT() End If removeasincevent() End Sub @@ -2976,6 +2977,18 @@ Partial Class Compras_eFacturas End If End Sub + Private Sub MostrarSolcitudesSAT() + LnkShowSolicitudes.Visible = False + + If UsuarioActual.Empresa.ArchivoPfx.Trim.Length > 0 Then + Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoPfx}" + If File.Exists(ArchivoCertificado) Then + LnkShowSolicitudes.Visible = True + End If + End If + + End Sub + #End Region diff --git a/CxC/RepCxCDetalle.aspx.vb b/CxC/RepCxCDetalle.aspx.vb index e6a841ce5..3e189178f 100644 --- a/CxC/RepCxCDetalle.aspx.vb +++ b/CxC/RepCxCDetalle.aspx.vb @@ -426,8 +426,13 @@ Partial Class RepCxCDetalle If UsuarioActual.CveEmpresa.Contiene(72, 80, 146, 119) Then ChkAnticipos.Visible = True End Sub - Private Function CargaDatos() As DataTable - Dim dt As DataTable = Nothing + Private Function CargaDatos() As DataSet + + Dim DSRespuesta As New DataSet + + Dim DTaDAtos As New DataTable + Dim DTCartera As New DataTable + Dim ObjMovtos As New ClsMovimientos() Dim FechaI, FechaF, FechaVI, FechaVF As String @@ -452,10 +457,20 @@ Partial Class RepCxCDetalle CveClienteClasificacion:=DdlClienteClasificacion.SelectedValue.ToEntero, LimiteCredito:=LimiteCredito, TipoCliente:=DdlTipoCliente.SelectedValue.ToEntero, CveMoneda:=CveMoneda, EstatusCliente:=DdlEstatusCliente.SelectedValue.ToEntero, AplicaAnticiposPagados:=If(ChkAnticipos.Checked, 1, 0)) Then - GvDatos.DataSource = ObjMovtos.DSResultados.Tables(0) - dt = ObjMovtos.DSResultados.Tables(0) + GvDatos.DataSource = ObjMovtos.DSResultados.Tables(0) + + 'DTaDAtos = ObjMovtos.DSResultados.Tables(0) + 'DTaDAtos.TableName = "DTaDAtos" + DSRespuesta.Tables.Add(ObjMovtos.DSResultados.Tables(0).Copy) + If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then + GvCartera.DataSource = ObjMovtos.DSResultados.Tables(1) + + 'DTCartera = ObjMovtos.DSResultados.Tables(1) + 'DTCartera.TableName = "DTCartera" + DSRespuesta.Tables.Add(ObjMovtos.DSResultados.Tables(1).Copy) + End If @@ -475,7 +490,7 @@ Partial Class RepCxCDetalle UPDatos.Update() UpCartera.Update() - Return dt + Return DSRespuesta End Function @@ -949,11 +964,36 @@ Partial Class RepCxCDetalle Else params.Add(New ReportParameter("LogoPath", "")) End If + + + Dim lrds As New List(Of ReportDataSource) + + Dim DSDatos As DataSet = CargaDatos() + + Dim rds As New ReportDataSource With {.Name = "DataSet1", .Value = DSDatos.Tables(0)} + lrds.Add(rds) + + + If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then + Dim rdsCartera As New ReportDataSource With {.Name = "DSCartera", .Value = DSDatos.Tables(1)} + lrds.Add(rdsCartera) + Else + Dim DTCartera As New DataTable + DTCartera.Columns.Add("Rango") + DTCartera.Columns.Add("Saldo", GetType(Decimal)) + DTCartera.Columns.Add("Porcentaje", GetType(Decimal)) + DTCartera.Columns.Add("Objetivo", GetType(Decimal)) + Dim rdsCartera As New ReportDataSource With {.Name = "DSCartera", .Value = DTCartera} + lrds.Add(rdsCartera) + End If + + + Dim Archivo As New System.IO.FileInfo(String.Format("{0}Formatos/RepCxCDetalle.rdlc", UsuarioActual.Empresa.Ruta)) If Archivo.Exists Then - ImprimirPDF(String.Format("{0}Formatos/RepCxCDetalle.rdlc", UsuarioActual.Empresa.Ruta), CargaDatos, params, "ReporteCxCDetalle", TipoImpresion) + ImprimirPDF(String.Format("{0}Formatos/RepCxCDetalle.rdlc", UsuarioActual.Empresa.Ruta), lrds, params, "ReporteCxCDetalle", TipoImpresion) Else - ImprimirPDF("Empresas/Grales/Formatos/RepCxCDetalle.rdlc", CargaDatos, params, "ReporteCxCDetalle", TipoImpresion) + ImprimirPDF("Empresas/Grales/Formatos/RepCxCDetalle.rdlc", lrds, params, "ReporteCxCDetalle", TipoImpresion) End If diff --git a/Empresas/Grales/Formatos/RepCxCDetalle.rdlc b/Empresas/Grales/Formatos/RepCxCDetalle.rdlc index 4aeb0b169..4f7fbd6a6 100644 --- a/Empresas/Grales/Formatos/RepCxCDetalle.rdlc +++ b/Empresas/Grales/Formatos/RepCxCDetalle.rdlc @@ -1202,8 +1202,435 @@ + + + + + 2.5cm + + + 2.5cm + + + 2.5cm + + + 2.5cm + + + + + 0.49417cm + + + + + true + true + + + + + Rango Días + + + + + + + Textbox15 + + + + Black + + 1pt + + + Black + + 1pt + + + Black + + 1pt + + + Black + + 1pt + + Silver + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Importe + + + + + + + Textbox19 + + + + Black + + 1pt + + + Black + + 1pt + + + Black + + 1pt + + + Black + + 1pt + + Silver + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + % + + + + + + + Textbox23 + + + + Black + + 1pt + + + Black + + 1pt + + + Black + + 1pt + + + Black + + 1pt + + Silver + 2pt + 2pt + 2pt + 2pt + + + true + + + + + + true + true + + + + + Objetivo + + + + + + + Textbox26 + + + + Black + + 1pt + + + Black + + 1pt + + + Black + + 1pt + + + Black + + 1pt + + Silver + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.2825cm + + + + + true + true + + + + + =Fields!Rango.Value + + + + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!Saldo.Value + + + + + + + Saldo1 + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!Porcentaje.Value + + + + + + + Porcentaje + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!Objetivo.Value + + + + + + + Objetivo + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + + + + + + + + + + + + + After + + + + + + + DSCartera + 1.6429cm + 0.77667cm + 10cm + 1 + + =IIF(CountRows()>0,false,true) + + + + + - 0.78933in + 0.99425in - 0.11642cm + 0.11641cm 0.0635cm 0cm 26.34825cm @@ -1549,7 +1975,7 @@ Textbox13 - 0.6103cm + 0.61029cm 0.14cm 0.6cm 6.69369cm @@ -1651,6 +2077,38 @@ + + + DataSet + /* Local Query */ + + + + Rango + System.String + + + Saldo + System.Double + + + Porcentaje + System.Double + + + Objetivo + System.Double + + + + DataSet + C:\Users\Caudillo\Documents\Visual Studio 2013\WebSites\WebSite9\App_Code\DSCartera.xsd + DataTable1 + + + + + diff --git a/Ventas/RepVentas.aspx.vb b/Ventas/RepVentas.aspx.vb index ae9338284..c551a0f98 100644 --- a/Ventas/RepVentas.aspx.vb +++ b/Ventas/RepVentas.aspx.vb @@ -957,7 +957,7 @@ Partial Class Ventas_RepVentas ObjVentas.Dispose() - DTDataos.ExportToExcel("RepCartasPorte.xls") + DTDataos.ExportToExcel("RepCartasPorte") End Sub From bac2fb339e09c984ae159ceb63b5f9a833376229 Mon Sep 17 00:00:00 2001 From: Oscar Irigoyen Date: Mon, 15 Aug 2022 16:31:03 -0700 Subject: [PATCH 05/28] =?UTF-8?q?Clientes=20Abonar=20Liquidaci=C3=B3n=20Se?= =?UTF-8?q?milla?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ventas/ClientesAbonar.aspx | 14 ++++++++++---- Ventas/ClientesAbonar.aspx.vb | 30 +++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/Ventas/ClientesAbonar.aspx b/Ventas/ClientesAbonar.aspx index 0258b17f2..cb3cafa40 100644 --- a/Ventas/ClientesAbonar.aspx +++ b/Ventas/ClientesAbonar.aspx @@ -462,19 +462,25 @@ <%--25--%> + + + + + + <%--26--%> - <%--26--%> + <%--27--%> - <%--27--%> + <%--28--%> @@ -482,7 +488,7 @@ - <%--28--%> + <%--29--%> Auxiliar @@ -490,7 +496,7 @@ - <%--29--%> + <%--30--%> Comp
    Pago
    diff --git a/Ventas/ClientesAbonar.aspx.vb b/Ventas/ClientesAbonar.aspx.vb index 9c38fd83e..d31a60e0f 100644 --- a/Ventas/ClientesAbonar.aspx.vb +++ b/Ventas/ClientesAbonar.aspx.vb @@ -391,7 +391,8 @@ Partial Class Ventas_ClientesAbonar GvCxC.Columns(22).HeaderText = "Diversos" 'GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacionCol6).FiltroPrimeroValor("Clasificacion").Substring(0, 12) GvCxC.Columns(23).HeaderText = "Aduana
    USA" 'GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacionCol7).FiltroPrimeroValor("Clasificacion").Substring(0, 12) GvCxC.Columns(24).HeaderText = "Material
    Empaque" 'GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacionCol7).FiltroPrimeroValor("Clasificacion").Substring(0, 12) - GvCxC.Columns(25).HeaderText = "Total
    Gastos" + GvCxC.Columns(25).HeaderText = "Semilla" 'GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacionCol7).FiltroPrimeroValor("Clasificacion").Substring(0, 12) + GvCxC.Columns(26).HeaderText = "Total
    Gastos" DvLiquidacion1.Visible = True DvLiquidacion2.Visible = True @@ -549,6 +550,7 @@ Partial Class Ventas_ClientesAbonar e.Row.FCTextBox("TxtLiqCol6").Visible = False e.Row.FCTextBox("TxtLiqCol7").Visible = False e.Row.FCTextBox("TxtLiqCol8").Visible = False + e.Row.FCTextBox("TxtLiqCol9").Visible = False e.Row.FCTextBox("TxtLiqColT").Visible = False e.Row.FCTextBox("TxtAmort").Visible = False e.Row.FCTextBox("TxtAmort2").Visible = False @@ -638,6 +640,8 @@ Partial Class Ventas_ClientesAbonar e.Row.FCTextBox("TxtLiqCol6").Attributes.Add("class", $"ClsSelLiq ClsSelLiqVenta{e.Row.DBCampo("CveVenta")}") e.Row.FCTextBox("TxtLiqCol7").Attributes.Add("class", $"ClsSelLiq ClsSelLiqVenta{e.Row.DBCampo("CveVenta")}") e.Row.FCTextBox("TxtLiqCol8").Attributes.Add("class", $"ClsSelLiq ClsSelLiqVenta{e.Row.DBCampo("CveVenta")}") + e.Row.FCTextBox("TxtLiqCol9").Attributes.Add("class", $"ClsSelLiq ClsSelLiqVenta{e.Row.DBCampo("CveVenta")}") + e.Row.FCTextBox("TxtLiqColT").Attributes.Add("class", $"ClsSelLiqVentaTotal{e.Row.DBCampo("CveVenta")}") e.Row.FCTextBox("TxtAmort").Attributes.Add("class", $"ClsSelLiqAnt") e.Row.FCTextBox("TxtAmort2").Attributes.Add("class", $"ClsSelLiqAnt") @@ -650,6 +654,7 @@ Partial Class Ventas_ClientesAbonar e.Row.FCTextBox("TxtLiqCol6").Attributes.Add("onkeyup", $"SumaLiq(this,{e.Row.DBCampo("CveVenta")},{CveMonedaFiltro},{ moneda})") e.Row.FCTextBox("TxtLiqCol7").Attributes.Add("onkeyup", $"SumaLiq(this,{e.Row.DBCampo("CveVenta")},{CveMonedaFiltro},{ moneda})") e.Row.FCTextBox("TxtLiqCol8").Attributes.Add("onkeyup", $"SumaLiq(this,{e.Row.DBCampo("CveVenta")},{CveMonedaFiltro},{ moneda})") + e.Row.FCTextBox("TxtLiqCol9").Attributes.Add("onkeyup", $"SumaLiq(this,{e.Row.DBCampo("CveVenta")},{CveMonedaFiltro},{ moneda})") e.Row.FCTextBox("TxtAmort").Attributes.Add("onkeyup", $"SumaLiq(this,{e.Row.DBCampo("CveVenta")},{CveMonedaFiltro},{ moneda})") e.Row.FCTextBox("TxtAmort2").Attributes.Add("onkeyup", $"SumaLiq(this,{e.Row.DBCampo("CveVenta")},{CveMonedaFiltro},{ moneda})") @@ -1005,6 +1010,7 @@ Partial Class Ventas_ClientesAbonar Dim ImporteLiq6 As Decimal = gvr.FCTextBox("TxtLiqCol6").Text.ToDecimal Dim ImporteLiq7 As Decimal = gvr.FCTextBox("TxtLiqCol7").Text.ToDecimal Dim ImporteLiq8 As Decimal = gvr.FCTextBox("TxtLiqCol8").Text.ToDecimal + Dim ImporteLiq9 As Decimal = gvr.FCTextBox("TxtLiqCol9").Text.ToDecimal Dim CveClasificacionCol1 As Integer = 21514 'comisiones sobre venta Dim CveClasificacionCol2 As Integer = 21916 ' manejo @@ -1014,6 +1020,7 @@ Partial Class Ventas_ClientesAbonar Dim CveClasificacionCol6 As Integer = 21920 ' diveros Dim CveClasificacionCol7 As Integer = 21919 'gastos aduanales usa Dim CveClasificacionCol8 As Integer = 21211 'material Empaque + Dim CveClasificacionCol9 As Integer = 21207 'Semilla Dim CveSubProyectoLiquidacion As Integer = gvr.DataKey("CveSubProyecto").ToEntero Dim CveConceptoLiquidacion As Integer = 51 @@ -1068,6 +1075,13 @@ Partial Class Ventas_ClientesAbonar End If End If + If ImporteLiq9 <> 0 Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, ImporteLiq9, gvr.DataKey("SerieFolio"), CveConceptoLiquidacion, ConceptoPartida, Now, -1, -1, CveIE, gvr.DataKey("CveVenta").ToEntero, -1, CveSubProyectoLiquidacion, ViewState("CveCliente").ToString.ToEntero, ImporteMX:=ImporteLiq9 * tipoCambioPago, TipoCambio:=TipoCambioGeneral, TipoCambioPago:=tipoCambioPago, PorcentajeImpuesto:=0, CveClasificacion:=CveClasificacionCol9, ImporteME:=If(CveMoneda > 1, ImporteLiq9, 0), CveTipoGasto:=gvr.FCDropDownList("DdlTG").SelectedValue.ToEntero) Then + MsgError = "No se pudo insertar la póliza" + Exit For + End If + End If + If gvr.FCDropDownList("DdlAnti").SelectedValue.ToEntero > 0 Then Dim TCP As Decimal = 0 Dim FolioPago As String = " " @@ -2900,11 +2914,12 @@ Partial Class Ventas_ClientesAbonar GvCxC.Columns(23).Visible = True GvCxC.Columns(24).Visible = True GvCxC.Columns(25).Visible = True - GvCxC.Columns(26).Visible = True 'anticipos - GvCxC.Columns(27).Visible = True 'anticipos2 + GvCxC.Columns(26).Visible = True + GvCxC.Columns(27).Visible = True 'anticipos + GvCxC.Columns(28).Visible = True 'anticipos2 - GvCxC.Columns(28).Visible = False GvCxC.Columns(29).Visible = False + GvCxC.Columns(30).Visible = False Else @@ -2924,11 +2939,12 @@ Partial Class Ventas_ClientesAbonar GvCxC.Columns(23).Visible = False GvCxC.Columns(24).Visible = False GvCxC.Columns(25).Visible = False - GvCxC.Columns(26).Visible = False 'anticipos - GvCxC.Columns(27).Visible = False 'anticipos2 + GvCxC.Columns(26).Visible = False + GvCxC.Columns(27).Visible = False 'anticipos + GvCxC.Columns(28).Visible = False 'anticipos2 - GvCxC.Columns(28).Visible = True GvCxC.Columns(29).Visible = True + GvCxC.Columns(30).Visible = True End If From 1812fd5d71a632a53bdff834ae8b50867b06ff44 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 15 Aug 2022 19:28:35 -0700 Subject: [PATCH 06/28] --mejora --- Compras/ReembolsosComprobaciones.aspx | 2 +- Compras/ReembolsosComprobaciones.aspx.vb | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Compras/ReembolsosComprobaciones.aspx b/Compras/ReembolsosComprobaciones.aspx index 772a28732..6b1e0781a 100644 --- a/Compras/ReembolsosComprobaciones.aspx +++ b/Compras/ReembolsosComprobaciones.aspx @@ -294,7 +294,7 @@ + DataKeyNames="CveCompra,FechaCompra,CveProveedor,CveMoneda,Proveedor,SerieFolio,SubTotal,IVA,RetIVA,RetISR,IEPS,Total,TipoCambio,IdCtaContProveedores,IdCtaContAcreedor,CvePrePoliza,IdPoliza,CveRetIVAConcepto,CveRetISRConcepto,IVAPorcentaje,IVADeducible,IVANoDeducible,CveTipoConcepto,CveSubProyecto,IVAPorPagar"> diff --git a/Compras/ReembolsosComprobaciones.aspx.vb b/Compras/ReembolsosComprobaciones.aspx.vb index 43a31ced1..64faacc41 100644 --- a/Compras/ReembolsosComprobaciones.aspx.vb +++ b/Compras/ReembolsosComprobaciones.aspx.vb @@ -739,18 +739,18 @@ Partial Class Compras_ReembolsosComprobaciones Pago.OtroGastoIngreso = gvr.FCTextBox("TxtComision").Text.ToDecimal End If - If MsgError = "" AndAlso Not ChkReembolsarSinBancos.Checked AndAlso (Not HdnCheque.Value.ToEntero > 0 Or Not UsuarioActual.CveEmpresa.Contiene(119, 158)) Then - - 'Si es caja chica metemos el concepto 30, si es funcionario metemos 29 - ImporteMovto += Pago.OtroGastoIngreso ' si ajuste, sedebe de aplicar en su contraparte - If Not ObjMov.AddPrePolizasDetalle(CvePrePolizaPago, True, ImporteMovto, Referencia, If(CveCajaChica > 0, 30, 29), ConceptoMovimiento, gvr.FCLiteral("LtlFecha").Text.ToDate, If(CveCajaChica > 0, IdCuentaBancaria, IdCtaPersonal), -1, CveIE:=CveIEPago, CveIEDevolucion:=If(CveCajaChica > 0, If(DDlCheques.SelectedValue.ToEntero = -1, CveIECajaChica, DDlCheques.SelectedValue.ToEntero), -1), CvePersonal:=CvePersonal, CveCompra:=gvr.FCHyperLink("HplF2").Text.ToEntero, CveProveedor:=gvr.FCHyperLink("HLProv").Text.ToEntero, ImporteME:=If(tipoCambio = 1, 0, ImporteMovto), ImporteMX:=ImporteMovto * tipoCambio, CvePrePolizaOriginal:=CvePrePolizaPagoOriginal, Contabilizable:=If(CveCajaChica > 0 Or CvePersonal > 0, Not UsaSimplificacionCajaChica, True)) Then - MsgError = "Detalle" + If MsgError = "" Then + If Not ChkReembolsarSinBancos.Checked AndAlso (Not HdnCheque.Value.ToEntero > 0 Or Not UsuarioActual.CveEmpresa.Contiene(119, 158)) Then + 'Si es caja chica metemos el concepto 30, si es funcionario metemos 29 + ImporteMovto += Pago.OtroGastoIngreso ' si ajuste, sedebe de aplicar en su contraparte + If Not ObjMov.AddPrePolizasDetalle(CvePrePolizaPago, True, ImporteMovto, Referencia, If(CveCajaChica > 0, 30, 29), ConceptoMovimiento, gvr.FCLiteral("LtlFecha").Text.ToDate, If(CveCajaChica > 0, IdCuentaBancaria, IdCtaPersonal), -1, CveIE:=CveIEPago, CveIEDevolucion:=If(CveCajaChica > 0, If(DDlCheques.SelectedValue.ToEntero = -1, CveIECajaChica, DDlCheques.SelectedValue.ToEntero), -1), CvePersonal:=CvePersonal, CveCompra:=gvr.FCHyperLink("HplF2").Text.ToEntero, CveProveedor:=gvr.FCHyperLink("HLProv").Text.ToEntero, ImporteME:=If(tipoCambio = 1, 0, ImporteMovto), ImporteMX:=ImporteMovto * tipoCambio, CvePrePolizaOriginal:=CvePrePolizaPagoOriginal, Contabilizable:=If(CveCajaChica > 0 Or CvePersonal > 0, Not UsaSimplificacionCajaChica, True)) Then + MsgError = "Detalle" + End If + Else + If AplicaPrePolizaPago(CompraActual, Pago, CvePrePolizaPago, ObjMov) Then + MsgError = "Detalle" + End If End If - - If AplicaPrePolizaPago(CompraActual, Pago, CvePrePolizaPago, ObjMov) Then - MsgError = "Detalle" - End If - End If Dim SaldoExcedente As Decimal = gvr.FCTextBox("TxtSaldoExcedente").Text.ToDecimal From a3f3a643b78a87aa4cb8e67990fcc02e40c0c9a4 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 15 Aug 2022 19:28:44 -0700 Subject: [PATCH 07/28] -- mejora, decimales --- Bin/GoCfdi.dll | Bin 552448 -> 564736 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Bin/GoCfdi.dll b/Bin/GoCfdi.dll index 0148216cc2cc9ed76fa78ad6a51597a147df71f1..ee10c6e4d3579a562e4d720bbcc7877067ce51f5 100644 GIT binary patch delta 95431 zcmeFa2b3Je)jvAblhdwdXLHVK?d)n-d6jd{NJ0^iKuAaejWkP^mLV7rAQ4nRW03^L zn4FEkCP)N-)jiWQI~e}o_r7!9d*|&r+tYn3-MXpbtvdCM zx>Fyhzi`{kZ~yhh;STffEk}KAP;@vPm--wIj{;WTgZEmz@5Qgf(TCqPhr>l*_%oy7 z&41C$ZF$e!?Q_f}IHDiryr?c3ddues;rrsde2z*Za-^?SE){(Pt1mXQy;Pnn8vK+w z<#?IASJe2C#DO9lSI8bw-`7DH;BOlKHHX{r%@ob?M!C}=80v7mvdZn)JI_gZ_mlIq znvP1sD%M|f>iy_V(<|_!H#i)D;sYY+Z7l?-1faxa4#%dr=8{)yF;OX>*4ps=RvRKJ zWV^HY2#OLHE;DJ!*IMAv5|zTSN#_DO31O9yGyaj23!)^h_$TQPcl@*TN1iYKciWdg z{*SwFa2_E%T+sJ2;x6`@Wy=2UW9!GE==cC&?TA%tTTok9!tZiy%JXPjh+6tMmwftx za@ph7#W?Bp)Zp3Ivjfjx^ZV~T4~Q1I(|a|Z1ATEkul1c>+5!wgg@C8k-FY4nl!>6n z9Gl$I7rL-zki!JE`%!VP zqJ{~YNuZxlYKvSQ9st}g4Q~Jz`|>;Gh`d4zYj+Ck{(Xw&8F}jw@sm7h;orZg95JUC zRddQYxl(OGikte36s_|8KIf(0Z;Kd%?A5FS`?M|40~h2k;?TDW8n{3H#S-a_7Byrhh`J;0RFWf+ z#6?NQMyU>mMyCSB>!XKR6$}g@a;tTj`DPLE`nw|Hbye{|DABy)eo&~BiwEF&OR*j*q$u8{uHU8YJR03ZIcUHRs^w>hI_*Czhsi)W=drR<@KQ1FFqmWUBy_x1Z?H`6p5^q}Rjz z`Ly-P=`1W&q6$u&4Co*hQeN|;Q3E=}3ba0%3&`X5jr?xr&iU&39I(h9pon8HHlRm1 zT7RA5fqp7&9|o3di7&&BO%YF`EDr)aj(AfkzptpDGoD{5Qcsb?;VW4Z@_Ei*cfb`5 zMM5J&|N8#>mhmv7^!FkDD`89BkcK9_mxId{9fgih@QrG)bjVGW&Ati9^4gO4M0r)^ zDsj+VRi#>T5&JLS6{tDjherGZ z)*j6d2GWbaCLeOqXO~6-VnPacC8SYPWfPJIYii3_NKp1SZ0SKUvy89hS2Z;gI28Gq zGV~9Yp=@SDE`b0Q&D_e6ow0IpZBuq_!{AUmixb;>U-id5uqF1Ay-yPPka_ax@O}6 z+o#v7l1LKb??XtqW75`#$__Mj`Wh`nW;E3WInsv|X{J2BsiAZlERQNe+oDRMo|ryW z-r3ZG>b%iZGeaRehYIULM=TI>=>LTby5`|M>WaAZ`SjxUM%?j(@aFJ3eV+INdh^5= zQV=xZ{B>nZcbp+7HxKC`4D>~SN4)Wa@e_ZK5q0e9Zx|pqRN6XC#f^3`dfn#HDu%+D}rbnYxLS$ zmZVs+>vZAp1f2R3gaOvb-|Xv1ERBHZ20ea@M;ApS@yU!R zkBQYbDkazmQ|5^;N3=w=0L0*8Axo_z0bU`y`;{bDP~d3@^u!OrtJzwRymwY3HN~SC z4V0V+L~VO(nWl;~(@e26AXb?QI23W?hf$8HP&+1^l|SN74!;D2z{0WWklLk$k|Bw+ zQE=ktR65C7+=YiFwJO4JPez1)5~)qGRuNcI(>eS*Bfkxad#5QyLN-oAxGEe_-Vq>13!)?j7R7$?6AOrR+!L*X@utO$d6%C5lZxS7Qg1%O-FTN6Vcf5gt zistaNhCT6^ydzeWY{!>5OuCk64md$3THMn#y$TrpZ!w|2osXGZ$i)PiXg$qKM$Q>u zWsE7*T4i%vo{x3V+jY1c)mD{M72k`xc;ZKpsIA5$0xc#sX{(V{;J zVdA8nXCkRjMOjNx&}VJU2iwP{qQs75g^jvOqP|#-BjWPJk3!6duOz;Xth(y-x*QQ- z=@L>66&zoWAatuB;BC(+VT`!q7*klH>4~Ft59rN!&{(&&e*-jsQvVUbqX}%v*E#(+ z*SC^F#QIrdlUR)!u&|(@6IQCX%F6b7anRjk+gFPk6}y_ioUTwSH{SyECLigTgQ$@K z4~Iu_gig%`IWWgPonJcfVJ7H=@lSueP9GI2tIp?~a^JX$yZeq^=)?eP>x9dq#{g-_ zUIAJkui5y>z7t!b=!h^J?Y75)ubwy@*7d51NB2D*!q;Rf!E2-hCjvlCp3~*dQ_`R3 zj-Mk3OsXhjb`^$uic!FoDKYlOua-wnYKcq+VFMb{V3x!aq(*!9q_P+WYMzj<@PLzv zg>bh|Zzr;}pdD~ID$q)!)3186?@o%&unxnpuIM$F^RsFu%6o*Gtp?I$hM+hpyOTQL55c1kIp?@!@A&eYg2 z6{inKOUh278*ubQn<0LSn=A?4|2eSCb1^C<1H<$tH%=`E7H3Xv#Pg=94R}7s&%g7t zcpAY+@^j_1Ie5Q)+Hb^UxqkWtlz!{<bs5JqrbHnSGy&MhbGnq8fSdoc<{H%sFH5+&34v1_;;va|qYMxswrn+1xc8X5u&d zk0p*x-H>IM;;jLyHTE9E@&wB%2-CI%5m!w-@KE9PalTIjG=HS1$RleOH4FQ6n6au9GP$Exc)c90tkc+B z3&`lIkx4&%G|qQaR&6F{{|dHfPd-o(|0*T5}I+qJeW- zY=T+vKI9aKss|iSR@8Jf%;Q+JdmWK1+9o!p%i%uYDJaC!eXyN-`^5(u)ePK`2sBH2 zFIAEWa1S?5Z4za9wt^zV9Y*aKQJP1Sk!G}Zz`(dN`I|*S=WKis%Z&UKdkz_{7)E?m z4BI@M88*|-*0YC$Vwv-6mlMdB5*d=T8wq6c%PjtG0tMtnGYf~Fl~wc8GbwD=oGPxx zj@Gu23MI}emJbz{$vft|^=FZjBDIT@&nr|>gX9pjuP(dYj)j9v6jngA@)9k5SLIf?D=EMb$! zyd}DEKfVpJ$`HzkAu$XQubN*{mp{VddA53)%rH)F5;gLzy&l;fC@IXLBP{&Y!6HkI zBEyaLW>J+-lb|VJ`*3490ZHOhz}dr%vjH4Q9kCSf5E5ro4;+wwnjJ~&JP$}xaiK?V zA_KN^Q!OjUij=7$tVn_0iWJNMu_A>a+|iw*gNJH~KB;DgdJq@}qBoICzTKV2un}Pb zQz9lX%`%&6G$cji6c^-}{F0 zdv#G(L^V> zAVke3m<95`p#9z-pw4XwGtnv=X-ON#yIi5gBYWA{BS!YNv6}(2Y^>)@9IL%i;57+?zZw!FJ>M*|3SG_jHB3c-hvv>N9y&s1vPd)UA16vzca>X(d|(H5}y*( z&Zm(Rm`{5qq~Xk`Jrm^0S%unF6J_VZVcPW*<>rMg=s{kwurKsAEz&*$51hwZsAArOL8NiiiIn`_Ge?v7g6 z-$PNj&twYHO90TiRk}B(wC|sQQ$Ic%UOyF*oC7{5%WQn2XvBJtUU=4$(4H zpkbB;u(V`$3S!o`3jk*hd>0xn~0Qwu6uSCfRW1~;r|WfdgBJ;NXRWbtU~KITW&sV5^%itusJ}^ zy|QDOT_(n6<8?#|VA1uw6vU+K?EqwI(xZUz`~j7E{mL@!_p{}`l~k%{)wy|@<;km7 z4b29{9*EHtutp*=(AdRk7UwBz{Lwd!rbdN6o~Dt@F}wZYCJeYu2Jy+cSH<9RFIWGAcz4plN##au? zLfEq)3ov+rJjYd2I1lhlP8_uWMHb3)*MziP3*`L$Me^1)2Wc-YfDNqE{<;A6uSgDG z8!GZG1R|N8{nmxBf<-dEHl!_ED7)7-`j4eZA+oDCt)=<67uHs3yB5k%*H&uo;py5& zhI4J(hjVRb4@a@4nZIr@5Sg@Yjpqp<2YTJH z?#!56ltrFL0dP_;-kNhUCE@Kwa^?E^hOZIKo&2oe=)o|yE;hFE536ha!|`plE98K*oxeEM3SGZA-3mRmINb{U zV==Wtm7XOiG;@H}OrQ|zBfmSkA=F7nO}%bLr}oCmd7 z;kJTpV_Hm!S`8@{Y8ue%>w~c^#*x+}4O`bD*%}IIY+UOs!)kVS|3}8vbz*DU%5|RD z!h^5AlT{~v!Vy_D z;P!FXPa8uRpUo1bBY6-(YxXfw%;SjvM~)X_TUsHuOSVkVpGIX(Q}oNUAf0|>771v~ zP%YouGC)k1FRm_=v8|zXcOg>FVZt*MV688Bi#zi2Jc+*oW=&c0EP^$@;xUESHm1n) zLDJNpnNsfFTH@z11`Q?T-mMJ*9$4`B!FYJGD6P-PUTt?!g2Dq0UW=km>X>fonXT;3 z*}?n!k-a*2KC6Q#Kkx33l(nZ!@Tjh#JnEFXXyKYHGL2XxuQ-La5mRAroPrhNoymos z6^I5ivn)A4^RJaVl8sUS+N^}JwMbYe-%FMuF|YN}(2}!hKeZMm&pTE1CaXJX8jL!W zrq0jI&MFB&;!1+rW&ZWGEb}9eO2b*^M;=9!ECYIJ&NqmdtGivj4%VBvFy^#2pmp?V z6UK}K$ZQ7In@D{OP=*RMtxp*uGs;9jIHS!oi+D3Gk*wl$YAHKUUpVFn1ZQO$*pQX! z7yvRY@=8E@W%}*uWbX^l$k`n~B|For07yJQP&@hlxq->I?C3O{$+zri`S2M{hhaHA z3lp*#nXOzu#K|0%%mgGgC&gRD@#R4`(ckQ*^oZBF^zoU6MR_H#=I`S8|rGU8p+*fR*j<=)`TT(&IrX*S*tf~R20%<*uC*dgpqX0u}PMfB&=$tF} zjw>om3_+w!Bs$Y0iKUw`k|>%w+TunMku3(g&HZ<7a0_kY(NM@f*we+dx*72-wpwZT zZA$e?Uf+bVN1gsP#mZbM%->9$vgD5Q>bqHW$sayDq>bIoLm~`Xw56LdIaF7)mJ)0%t#uj}Bw%Yjh1bzAne0rB$aZY6scBNvEj<3M0 zABQ(i0pqdboRTDVqGBgpflEIDF9lBiSsL{hI3s@jM1Zixk~jF!g0v^%FR_P(k?bUu zjDD6z0}=8`iH0NL)`J{oW@gsd(~}p;YaPMZos8Jg{78Olqii_0LYyeap4+zy+u>8C z6+{Y9S^%X1r$|8GBF{Lt?_sG*ZADbQn=%PT{KW^fXknzV71i}~1C~HUwRt;4_-N6h zND+kwROk_@P+vh%fz~oe`p=sH&75^!`OM)2p#B47mNaJree+a*Y?disiOyFXa^JW@XX4r}ZY-apqNzE+ zY>4jzDwRGqU06T0{#a;B4!K$ZIPW^i7P#XnATvec{A1;T?PVZM>5eK5ANOBeUvmTE zW#RV_fz*1){qpvmmD&x*%A+r;YdYz;EJ|GiKqjRgK2E-|qrU!W1mwi(Lki$|zuNQ3 zdcwNNZ!ZWPM7(hyZxtJ}tlB*QWf+tX0B~B)G1*ntP5{BIK)LF&(lP)Px5&!92D1u& zsactSoZp_zQT1s^VOISNL^nmG{lqLZ76U*_P7tgNbFm8W%w~$pput#n%;QdUcod1K zS3(rtcLBAlZ(Pt;dJ%Flk$5GI#Jwl6h0sPK(Hharnq&xH6zi0ME&ctrWn_ z018#t;VYvVY6G#XW@zU{?YSi76{ImSebpu@$@Z;T1ltTiuKv$Cfahzy$#Wy%|Gm19 zP{{WdMPimq_*{;Fb9<#H)EC;(^L^0?}-mtTwkV9!tZc1~J?9H8Hw7a@N_rfUp z238;Yjc!#LW9AG|MgBIf1WjX-uBJsY;X6fkOJeC|vP#3p9@*fjJ%!7AOLjEv$7_aY zWAjf=W%9E}85@F?7n9CxyLgSK29bgIKQ6vv=o@&=$jEhS7C;9emzvsg{`?Y}S1P@< zrF8-#E0)HFnBxCoc7|1_DFQ%riy|$gTfeaD*2R~$wT?yTCmn>Hpfz{MtwhcGCDKAu_42JYIA@8OjMJA-V%8Y|1 zF5R2C6vdgM{5UED)#rYXiY%Wp2CSiM)qvgF!*JLcSvA^`4cG%fE<^Du;F*TvYe2ZV zt1eqoPQ%_fPfIr?%6^u9ult#N`LbAj5MtJy2f5R_urJlqolmbkkAZ#MV$m5|4fy2Cf0e-PoIbfZ!!;?fCnu=)a6Vpb|K2A zcqo4dasrCFoeAE3o^peTdYp-ioE)**|4o6wnX(%nwbvl(+=YfC5Ym5!XIMWIeJUD(9#qjB8 z<450yN7p$NO*x#p*j(t+D5EXTO%hZNks^YWQmJ;DQ!XI)Y~S`G)?4nU<1`TdnEwByf| zhg?-FZjz^5ReH#CD5^V3vQ#?^mFh0UYplT$D+3ypXQjek1|d`!hS4{0{uS79G6rDm zqX&I7XV>8g+NEd9m#=P!o(5Nd_ztd8PZRcECtf;R`ge~iI2Ca2*wCmB;91+` z;@y+9$F|8UcQ>?MdbU-Gnj^X3&IP0z`uWI6zW@(tI_B;wk+AX{`SI?uB@~i4>l~OY z{X&W~4v#*IXnqiiw5$GYogla=SttT3$(A#m4{s0NYp*!+J=>L z&$HsxtWk9O5X{Y_69}y6WJRrg(vpkL-=<>cqTTK1NzX5u8*YQ-#4iDMQI{hIe;}q= z8Pg09Cx$K?<=kHsH>44+{nnC7?7G*ZUexAt)F$GUp=+DvZNKPC_`mv#5mmkT3`NF# zD={U0sqBAUj3O?-u1&lDJbCVQRoL)A3@nZtL^8iKj;%oW?fN+*M}9_}au+`1ms3#J z6%+z?u=$N&$*`*k2AzfiUrhjFXM8uksr02?*H8>_&CKsweDZ736-QGVVCKcIqZDBC zFYyZldcFDiEAton2D9mBH$E7?lK71P#Bai**&n|dKgR)ULA(Fqgn`kIUqR!yPz;Bk z9Rq_s{i39le+HW)fp}l}%U{kSihS|Q25s(nvh@09tzo+ycYR}W!}b(+pGt9e3b+7g zA0isf&YEP4xSa7@0Rrxda3IeQ5Dt6rdJ)bW@u0Sfa702TTvBDw1yNxKtZc&drkh*Q z&1cfh9anU7$C++WF(w>XnhN>e;zzTVB zpaO||DPdu#a~lY6BkHjo;5C$`>rTQ51c%QMy}=pX74f+AyYLae8xMF`^kaSbbi4fa zhJFS20OlY(!`OE3LoHXz!8a}<89498O7Sas!;MYahVAnC8!Mu}MpTy$GJ1kNeW_Bz zcF6B;oSM8B@L<;-JVUOqe>kKc-Lyn<2dYZWN^HgB_u;MCn|SGpT+lOb$_4H7U@mCI z3t7-4XZ(krEHFd;ANGbiVv~U0&%Wv%;!QlSi5y64;oeY(FMdC&R1*IUbzjV{;yCP` z^-((l{j&H2X+TD3Y5X^~km8!^t_SfQe<%%%Ka6*8d@n?k70^S^}qkz*npiiVvD+TLjLoxJLf@+9XTLO_TE@D~3QB7ixhRK=0vRyXkK zS=#jmWg9NYJ5U6j69swR?)`wU^Sbg~KeZfmD#-J7_W&LVNAlut;>8gO7subiOTdF{ z3Ys018(JE7{A~)A!|t4#e20SJEg1hZfnb%_H=}FzE0-pF6cu%~Gvfc52;1z{2wiIZ!Ig4XX z@A>Q2$G@RK&0FBm(d?6F`?mmq>i@(K1pHrz;FsvlY#=J?5YQM&chuW64a2#vJ{ZI| zDY}R8>S*dJB1kPAz7a2ENTL>a*hhTv0)of$<AHbKQ zn`>U;9ze_^54e5+r7P%~R}%jou^l`T4RU=Gf2S0Qe^XB55XN1JkUdDN7D-!JIN_@n zo1!kSuh?g?TpiEgN~{zRFM8;heN|cUIS<7Vw-wc?41&*53xnZc<&64cc@8hs5{joJ zDB`0pKhg-~(-cj@f;-6&w*8ShFFtf$EVpm3znJ22I@dgJT%&@SW3G8|CqB?6^A@j< zyYT8z!LO)N!(OOeBy1Ma?2Ug!q=|$qs42{0ETTZxLg*}Y+&g$E@&4EekTr7urLL9- zy)2Bzz1~zWuq=e8+Kuu!9@;4VF1hR8Ni#7a6R3r?cJ$A8#`%LL5oltn1Q`r~h?7Ji zao4}_8%DRC^g8P5Y4Ept{bu&c<6ZXKGhzH-*b_@E-#0ys7_+Pxv*ghG`&R#&6hlj(I-B%8 z^d5_0vSB)g<(Q1PS8ln#OuQm5xxZi7jJS&<%BSzIt2ZGqh@1Sj`3}yd$ESJpzsS7b zR41F&Z2rB-oE3?O`|Rj}xhfQb*2Z?Q1?Y*+bj^{vnLD4E##wgi6x~TZCE(`Lf5*RW z{VD#1Wsad{TAshVjec2Cx|Jjp2kP*A>Vd`|OA>mJA`W=6G=NcN3yLk)XUKUEZv3%yr#)U0q^Uj)z5|rx z0OwQtkQDbCt@WZ@KKD?O#j*!bU44)I?4haRUfKEZR0}@1mf_nUt{Q4dK^;Mep0Oi9 z>8X$cw3C=Q084nfz~ahD98tdc@H}MMu{V|FzZLvvdv7NAzJcXt#*f!q8FxMiH3Ikk zB)9H+%-Vl@ublSC_`*32h%^M$Z5^s@=|?O$wLxC_$OsGHdnkO5eD{$dDk?Jq{VOYK z+oQ*bLGtoPoABKC=w+bmvd4BhX9$O!7b=v_#|LRMgxt5aSk8Go+?-}*qqc=4$Hq?N z$q=ygw8s^H==u2L4QYfwd;BLOy#04S3E|V_-~Q{h{~?MCo@@o-Pkpjoo6{ige6pBE zgQVV@8&mWzkVik=Ap=hhK#fK{HAl=a#B@2@0@ZR`O$7AH40F(=nNJ&o|Z5ei}Pq zqloFPVRvFfvut{%7Im1y&rwfx%B!C#?OhxB=`+4I=sM2H%c#JqwhB1WD5O@=?v;(t zwil&k5#nJAn2>ioQZ0M_?C)<<^|)q>sP3fETIw~p z?@!D4j_10-?vLIqg~X43z8%kFp0Bl0-=;^`JfG5|!F6Qo512k|W9sGij|S{vTy!@|zOVbZDhwVS+ZOX)dyR zG^@;poDLjetF6LPwiFTMt1mW!O8*ZOMa?Fcm0&+^7O)m&EHnxkJB*iiHD`DT8#~kUkH?J>ZCtjz`dhKjX6ywg-&;zw^ z)x&_or2zJ5&Vh(#-?@h}nq3Lnx~DlaM8XsZ+PtTPMV|79k`h7{?JQX>%tMgg(^i9f z!9rB-VhG7%6}4jI%Ux0~B#l8_CrRzgCyy}HyY z;0Q!Dn^~&>`#wL;E@Ph`Luj90?gEznv0Tr=zh$VLoqr9e=q&m0$EAv2F+aYUj~46f zZaQ3KFE<@#U1(k|*0GZg>!P-WS;qi7>rx)0`POy}E`;57sxfYwT<(>}zPq%>EQg(g zxSYbV+uXAkHwuC5R#95~R6u$rL#S<(4*b3&Po3oJh#J&Cx!bmE{tImPit=SG`{b za@_ZRre_dG&F~Cj2t0$<{)IXh+y63fu~{j05K?SfZL-PkAjIi19E2E>;UL72l!H*w z2Ln;Uv=1^Jgg8!ygAhaDAaw2r>>valSPnw_KS((Ueg6SF2!%gv44$)+2;xmOQwu&M zLD=+RYA|;VBA}P?*oT>(LR^mBQ-}c>oeS-XGSa`WfW`rfWVYH*B|YEGa$gN&uKh3Oh(8UoYta_-yNj+dP3r`l?{`r|>l zTKP+UsFlZ2XEc86)yms<|1$=?cK>rL|4(!`dUw$5&H&uX!x>=ACrwK;oB=r33}*m_ zWHrFbG}&kN@4~72u^7UU>$fv46)Gd={l@a1S6M8SzEKAaV=P;1{48^^87h zwqtKrbIGEFVYf!lTtE$3O*(semy^D0p>L9D~YS)r~0A>XK zQo#8CNbjffQU?Dr?4Ti=H zre14#GdT^U<{$rJAIZP+ZM#`{tDnjK0*r&{?#`v!{RJ41!(V{m8U6wc$>A@+@Z;bU zU?Y-T^!q5Ga{E6^L6j%{Ine52v+saH2&*U7@SA-Hl=zVUK(_dh8$nup#*rgIZt)>k z0vi_Qn4A$LX99~=AY%o)6QqTIJcQqE3jfZ3TV%8*k=c(xVg06j{yX+Ku_P(OnShHT zXM)@_GCAA{I0d;A{C8`_%EIHBLElj~cHVdFQE=LK*^0o<1bgHY-!)`96L4z@XM*p) zvz!U!sIP-T@**&6Va%F=lQJ=+Eg?Sw#fh}2k|)762dH20zybCoc>REGnFw|$*dzOV zpXpG*mCkS|V2Dzn!_>UHq0a1fxto2DxP=>F(uv!YRn_K*XVz%8j-63b2P)%fFT*K z1`O%#YC!X?_W5{rJ5ZAUU(i>pyJb&^ZOG-U$i`oMq9~aw3f9r!lfdZPeG(X8_eo$t z4xa>uXZR#AgnSaR)kZG=eb{)%DKM5b{_PZPb4_NvRb{cXvk$tB)``)enEe20d}3sS zS$9+_d+PblYRbVl(Ix6EyKq%aD%0J@i-SaUKeM#uwW)x(eU!qp-l^G0G0+IP#jG+j zky@SL$?~^})cR~=vs>JTm7Q9TD96u84@>Gwk7%(B{4I^Cf_{a?98}CYr@E#&YwDcO ztY%j3--@W3Tb~RiRs*^0x;DhDWth%+hztML^&pLTzBSRTF2JV@(iW0lg!-z93Dx2i zjg}qQ*UX^hUQug-R`g}iHXA6cGw9bg&|?bpjxDcC`f;qNFP;6E76wi7i8)sGUntPk zK7q5fjb(l@2?V^_FHSTU%G^QfWEg`2VlX7-sDKzf(quzH8)e39h)}E0KxCyq-f^Ez zso!#J?GTgC#$+Z}N7H4!_! zgLAkwFU|Iu0~pkUOs!b1fegyaPlMi8pfUOBg!c{NSaBODIhaAa^LvTVzw*Uz_~dh= ztyI()f9xYVKtX>*jKj~22ov(ih!_e&zA#4=8+S!SUke>2OUC<=w9V)oLItsSl^UnG zkf5VLxQoqNDske_ze41U!+fI5SY05>tsIqb8Rr#<^(g+U0zqqX=+GFgQBk-SyFPeP z2N`7TI2j8PXC5uuOTtE{#I}GeWI6*F!x6BU$^_6cqsI3|A~g))BS!ZaPenz8wK0ZI z7gcrKMJi+^#fy<&C`zr$RE%T29b70HJ52(7#2_XBokfsZ#o;y7oa=BG7K*xzb+|Le zXEm~q0+4YKX1>*fDvwqAlE9(Buh?+L*Ic;-urxm+% zBE`mR2Am|Q72u|+n1tdlD9>7te~sfCHx-M9Mw3H{;i)X%1&440gw-|>dp|E0rB=+g z5viCrP)tuMCfaZcOCLzbJep#9jgP&e%o39?M^Zk<86{$r1$ts4OU^STxDe^Q zNfy7k8v@ooJjvMBM>H9&r6T(*SnfEevtV&E+hpUsQc+=Q&_ku7U#@w^3o$ToC9WF< zB!-~vYYn>+H;gh~Xc5IRlO(rLn3DGeh^%d)jaW*5ct-?wg|`{=%FsJ96RaJbN)SZ? z+qyWqN>d$)HDhSIA~wIOtDNYmk3-q)6=^XmTY=9;uwe`s++g8st))jZ7Sk7x zr3A*;WumI_D|)Bu@qUBstpBZI;`Y9276)!0$BB28i|V4I#{*rQ+`wDl=~xB`h1b|y zE()#KV<&Lzx64IslEkHEAkIsmebU(_1twBN*8f%1{^WVnb|@N&L|Ugg5@nN69FA^a z>L5aI@XzGg32Yx?Nvqi-?sbm^Tc^gMxvZ1@S_`&LJB@2v(I`DpDN3EV ztit$nr5NV4Zl%bth*YHJ3{&?~R7NUOKzq0niAUb^Aw0=nV8?C zh!>k^DX{GV3HjpQa?DB_6*b)X9aket=P82|Qs%Q}HFrfZL6$8`L#L+LvKGuU>HQus z%ou~2S4J4&77=t>mqp;9@Sqdx9(00vbNYq|+y_BR9DF&1bwWFv6m>m>o^=Kq2mRD_ z4rBa0QEGft3xjm8;X`k2xM?lgr={xgBnW3#TR))X7^OVHagDAz(PZh~G1Doz@yj~V z?!0qp@7gO;4|9Q%;XcUF1)pg^#afXdKyBl+6C&p5>ds+}@EP>;8i(`Tk6%@kb7~6C)6dMfa#)PH--IAczxs6YC(N|MfBN+YriAXbDhtO+|Sj{`og$U+CnsH=5 z?wD=wCrT~OPzUU`exkU;Y`PRd~${8OrlaS2521-=mDrTg4>Zyp#cwq}HMwxUVX+ zo;_So56{DhEROZ@Qh%NkSp8Thsg&3=!-!9^~ z55f4pom;-f4$<$RaYPfE=L1V~SpSa~r`UfzIwH0{DEgJz&Ew7`T-B>P(qrX8OBwWh zN4oWRLxIGAbgbi+ajXFY(*5zm%2^qmr>^$u=z$bocN} z2Z=%8_25BbfHl_q6{S|n@(wA>f0#U5a|qY(%0Z&el9bVhG6>hqrKY*wSD=5}K&KtX zvDyaPXtk0-#}5{0DvW)DF#$B$=ow5SdE>jmq6R-zL+FRc^$Uk!J`y56M3mK_jaI9HF#fZ91*^E1VwZQ36X)5F1X7o_d z2O1~ty>yruZIR+B#6u5b#;~+iKl?}qoivR57JG+@wh^Xjy?70Uu!&j+s?!kEoQTXJ z(Bs!~Hhnuqb-guE&DH9@ui~xk6sfg`%|~(4D>}uWiGIV=7~Hllg~2yJiovS&oXuZ` zr|b5a0u_%CwJD@%yLh&OUAcjiE*X)gl!?@HW5sae^%3G>lgW3D^G5F4X9oQRy1(-AEx!(?fr>M)5djbJ*w~p=t3Zj(7FwG);e@K(CAz zuV&Hos?8}3ew?NY5}dQ0rtd1ykJ40janhfSO;ajO({D_2_KXvG!^<&zg!%Y^`7oMt zOf`;BC|lELB&TDPstmpTNh+OTW{UBm)7a5?M&ysGl`R!*s zHeQSzbNA}3u}a3_#9Xxff)jUlD~yXAWHhu6(&$NbLVD;!Tgeg z)QY@({-koXjT6LFmzjjp7nzv*N%=ODIxT&XiP}%fmznT>Qu9I+Zr!b2E9zpCI*so% zsWkRZ#2)9=#U|bvT$_()!1`Oeq!azi%(ZU#JM<$mnY3 zqUKLM5Sh#Up#zbF)E=29A{!eg!`;%DNhR{mF5|+uz**N^E%SMmzjhZ4OeS&hL{#K20EgnR}vlQ4FIS$#e|S*_Ufny`}zVQu&@ zo}ME79k%TZiIu%dRIGdlWnu!1S!uYYrn_;fOk>GZ(U@`YG81jY8sh?7$)dEq;gsHa zQ*{=C+o|gOW2#7Prse~h_ZZ8j2|A(K*f9-7*pF!DB4TT)h&uV(S1>(DehpZFqxN{# zuI$q2e7Of9k+ywmdV}hrv9ITK|Jl;i4=2es$!foAiqS}U4rJ&n-!*mo5yqdUi)kV$ z>y9Wg&;R2zFHKSB*3tQY^*-ymC>+ySY@9a(y~g^f>L@qk>KUTJkL#h-@r%aO^qIO7 z%J>?eLEBAG*nL=JjF>4x{&y$|9X@Q#orxr=yPt4YcS(_X0V!j`mp{?D-NvsFu_4!u zPaH3GEohYBOvk!cjymu4G9lJ=`0?e&%-VI68}4*NGMZU5}oL@^Ds z>|dF2`&<#?yPy!0gSDfHfts&!k8$tB?k&7BR^9ZUK-Ow5MvJI9^oP ztfZpSO|ou=t;8~Mvb(WIH+Uci%P_Y}}&9rex*xr z-U!cUE)B+N98PaM1ZYhM&qoBD-jaCOIBJ=Qd9d>33V7tE7j$QF_aNi3Wun36pu5c6 zrgUn9@vmj#P;1HXYG7-IyoOhO9Fa)%-oA3kPoE!Q>{%|Fa(eF?pDh==#X);6S|J8T zyo-lqj#p(U;2P!QFCRW1-O&7bT5TkuOqWV%1f= zzBoP&pUr$!9S(p|;P?#VsJN(F&h^)7|HaZz0<{0%;0mN@CZon8m6?x+50C4Dp5jC* zua2$|q)vZ`s&|)3b_7u89w_tX$p$vJdbI$NhpU!oGHt4@hoKbka)W_+Y7 zrPcI(C`3OBY4rODu~^8wy`8_z_{vXGpMle2C{{6$Q^eP{z^c3S=^S9lO+4{+-zL#f zYSMsCpHbS|;?}`32MP%dX^a?h?W?1 z29Cf9W*-8ALxVi=#fCp2nk%VvE*U5Nz;gg+ZhBG-F=i%2Y?WyvlgLWRIPT(N8ii1Yx=|Z<<(Qo zeoijOW5vrAZxGg^6MUZTe~vddJ08x#%USS-?1(=Q4`&D43Qh=o>f?zvj3tJK+&uk( zepNr{Wvbm}mbizEykkXB>@muZ6}1h@r0hUsZomTOnXVqMD}ENqy9e#pA;*debHN^; zL_AIvo2+@1F2&Cw;3Gs#6+x9Y1W5623Y`vb#L0PHkG{gFIYCr4 zAL4U37Um*9I+E_r2?)iBEq{@3 zlKzo#>Q+%+@-YSC0IDji3ejjSpi$|6H16Cg3X?dJERaHpuwg*8`3sa7KnI_p_?1?9 zf9KEn)+eX2YNv9jFcW^pG5h{dOc)7JLzVG4MEbs9QKkKW>(j% zii+_S$G9UMLxG`wsK?I{jI19RYvfTd>E3f<8Ro2+0-l2uhwxmlet9NwJS zAblC8V~!JLc~DNKm$I2K2?L^GXfRCR?PO7`E*&fIiC3|ki#0nKUw=)3rMsH`C_tM2 zIGz!Y(q4_IkGXdw0r~00Uy~12?XwFhp*0Fp2uJ|`QT!KKO1yxTAqfF{LY0(OSo-c9 z%;B&cf3ku#ItEPp^eR*-xswSJ5x)Y4znj}63O zT)FI8rfWx|7hsFwpG`vJ!ztUKao`Nm5h5Ds7%d>yFnM!%nGDx8B^AwTA{L1XcBwRB zj)y9vZ%E3g;(-e41;VIaAdTt;szNV1&N)W`*HFTgh1JNYsAw>C91VNBA@SYG9J%Yo z9Co;=4IrWhO;gEAIB05)to2e3YE5UTmocPVOR!eBb7_Tf{F$QMGoGjfC$;(#!A*Iuc7G=oT3C z_$?k?6paSMnGvlqwd$Z4pPrQ(Q=bM7dg9BGDiJM!Dp2dp!{<2wlb9qLQeYY;52c|9 z!%qX;6Q{E!ZMv_Sq53LNL#cjeHHyf{Y!H=^q&*5`b*VyTK2yvw0(e!G3ON+90mp?oEr{J9eyT?vBnnqV&X<>$Z|GtP5hiH!u{Akph)BK!J`}2TY&pnQ-L9lT4{BqIp$+c8_uHHnAGq|8yH1J-Fwux!ifKJhy%X zRiUM#!|m7x3Lc!RT5RxmSy`DgE&W0fDgj@cJyjVul73vUhhAPeb@{ zJ~~EpYHmbzpZ8-51gswbWLhy@6T>f?Y+7I;X{se@Y9}bS0!e&PTvKo^Wqz8;=AvXZ zGO{rLQ5L6}$oGPz`Se2^ZeZ#7&n!0XKUbuV_E>hdz^z4z1b%Ev5Le3Z40S@ehf&5ma{r*)MpO(m_8V3QiCY^7>V;lW%6z$3z*5>PFMVP zd#>3l1<7y}71Asw4 z&>|CsHJJ6makyE+im`(?UW7C$97^beaqz~=@J{y^(Aqx^!c+i#qcL>{oQlR7TX%?B z@r-fh4pDjpgg&4=D3$~<#$1n2+>1dcob}7nnvXyW7k4@Jailq17RreAb0(U%iA`QU zXglQe`n*fyXe8;94=-rj$0$7?J4MDB9Z{_m#U64##KBf<$d@XX)U55N6w4#Ls3%sX ziuQ5QVW-dUQ^$7W>}O95_rQ<@R&;nBXW@5DhgMAh5~N z(?|1o*~aC0^rMZ<7l<)4)|1sS73COyw-g0qW2Go)3o{gjW@l`IrAD3@Z+?4$Xje1F zTCvGWHCAWqs%EmSIc!Wy1Ecg%9=%^@P>d2z%Bya@;ix){PPBHT*#nnCN) z(d?Xo6sgkAqz|TB=F!O{`oef`r-(%^1W(wiZ=(9rY)zdMRYR@@7*o-iLIuj{U}o_- znCS1tOo*t_B}F6O_7d=vu>2&}Aa3FmJmToOVp>;!6B!q{4-{1Z103L804PgINK?xm zZy_8DF;T!hiTfyFAztG}c;Mt{0xKwby8)cCj&O8t>A-1~qF$q$+j=Fb*8t@tL+LFe z35b*<1w$!?LOJR#aHp?Q$jl(`TsxLY3rz-74$j0Bvxu?T(ii(=QQyrz;wc z$r+oW6dPun>F2;TIX6M*o6+gwUswV48=q<1e~GB_D~%<=c=Hl53agWqmx^*VZ*RXX zjjRBapN*pJ&NS-7gfqZ=a~gqhm4g{QeSaEvd1!ioE^JVFrEgK=MCf7cgLHXtGKjv< z_$_c5L3Y@>TFvTIKSC0yqN*o1eCb=(G`eQ(cq88s#mOX<_kZs#Yf-<3+hw~@%V4Z3 zOYQmYHKwY%IxQJRry6USjw5XC*JU($Ov4{EICMSTYJ{5vu~WU{{|2h#xcZ+=cBVR! zoAIN;4)yfu79|XkO#IAC?tU^S(1-coWW|p&KwVvj8aa$nKNr5_X+-uPy}0gwc5fYS z>&+62)E##I)S$(9=I0`o+)Oszy2Z|E-C_r9=|Z{f_+8EYVd{DYx+>6Ez(C_{c~1yz z`XgBZ?udGP@q7x)(FdjuXzxC7r`i9EnGKOQo~r{&gS;?SVyQ!l{^vEj#KO=x(9c>! zHpJzkDoG|eyA^3e1*_|pf23h`_b6H_P<=G z5Qbe`DX!C#SBUYWPRdm$G&w#p)aKF3-d>HUo?|JRH^tn;_Um%oW6&jU{6a{ zN5(!V#5E`&IOF!nmEw?f9kiZO+>N0n{S2lbwjJHDZPx2hex(Znx`(BqQ|Yy&dm2MX zj=QnuOgDH!x-j61!t{k80Qqb*w=9yMU0!1Bxk~ht9anh8661xdFsrl_DFQKvr)5I= zZpZV8S}kj`0O;)NaD+k#)Jk(qLC!A9*`XD7FQRgbyD{hC!q;N;vqb%1>I>^dR1St? z5GS1cSJ+LT4&26Ithri@@pJN;le!N!ZoOL63{;;db9SBRnx(HFM9++_W7M~!t{kg& zKZ23&z}2EQn#u;5_Y4Ay^s|fsyG2z!FA7))GJ4f%2)Aoqs^_h-su^(s0uj^QKhHTU5-8QZZ?KX~tXw3MHOP zMWrfZVjSN2(0$zG##1lFsCVW0R=sN!bue?`^y)H|C(Y3nrSUwG;uD^+f!NHj$k=s_ zs4$5^BOBCy-!-D$B*s>JetV6m9API$4BRs}Xu!VGN+02IX^Q?eNM)n;+-tL`ed4u3 z_wvnk+l9=(q0Gxy*Qxg;-(9zzuqO%p9df2dGeepbge6M7no>mqgy{~a<3$i_n38ZM zW3c z$+uPNNTnaM5i9dbO^k_CS86KBe-hPJv1?MXv#-<~^F#NMu14jo`$!2H-WiqiCemT+ zP`CfaO{B*BUy8!jJCV5gr{6uQYW6LQF|dNg*P}2k>MBoLTW#{=nAc#y_E4%9`Z!0_MFJfAnt}nezIFf7!oP6yYa`dvj zq2*y92&&;mB1h-LEZWluCo9KO?Fhp0zjYKLcp(rB`Dkhki*~J;weaa=l<3AZ0+Qc< zo+FZPW*u?FG@8qH#13~R?y=|Y*lEKT4*#uVDEFPnD(t6>$ju+aXxy#E1}a(@DI{=F zq=@n_B-(EKm1tki*!J-xQrKb|G&MP1h`F^{9=?GrQ*_rXO}OQ zbM?AdjyQw+>Uv)+M|bj3z#j=Ux-TxcA1nQIBigID(U>=#lq%m)9LCVf;m@e>KN#=c zAZi0xyrvCd9{oxq??zFw9?3XWxk?58(6w;Eo{eVdBy+W=Aq%t+>Q*}os}clIBZ2@r zm4R;NL_1 zkSs|fSre%NL;EN(%PiBIDzi3HtIAxPyUe;sos9&x-0LIt_T1xxSqLFSrVutn8dS#l zDq{}zNBTtks_Jf{tFh-6O!RXQw7mp0Xo@to207@jw}|p83R*^=_+1hWk+Kx-hY@1( z7)=y@XNevy8yVWg|#^23hUV0_f53m0)ynlD9?mPku$AxC4zA;x0!Jf~@93t-XVr|{8(GTCWdZ~L@R+y_5NUdb_eFjNFthJwJ^P= zIU&=Fd$Uv4q+tKYs0DVOFt3%RH*Ey9l~96${ZCU2WwOY+J5OT~Leoh(rAu%^wjf&6 zmRcnoMOsv_A7eLUz|x6{2b!R#gK{`%Q)b>BDsQre8F|}`p_RAF8Wx*t`|+Jvyy6l( zu^5ol6f)(JawwQtHkO`M48A$FU_VCW>6=qMbaSfr3Oe<`ygAiGAR6$;TOkES>r2#@ z>j-TxWDANb$W{Gu<@VC3KZ$$pO_LK;0cP7u))cK|K@a9@7=w`Cyk#|t8+uzLI_hEl zYLFeKU<`c))t95wj!VFOCL^qrqZy(SR>C!qjcEnj&h_1AxD3Tz$7Fjiw|evi~zO zuOwPe-Hk&OUNt_x8#IRliw7q;SrrP<1Zoy6XoH2S4D5kt_*gri*RURp;+ZpOBIL}`Cgj&Lf9KT?uAE#{mEJL9=~MC|}dgE6#~ z@BhWxn}A1AY>nSlJ-tm5!X%kYb_ir41ds&6rYvFK5_W+=kN{y73;oV;&F*LwOh9#4IMYz4tTea{!G-p8Nu zzHZML+B=7!CJ|SV!nq$L=91oFG)_Bw8^J=1<{NNNs|W=MG{S;TLJ9Dp?NiL|UA143 z0U0gSyTF-L5N*v^%Ofgc2o6mPpOb-~t>u;CV5A!m(Yv4?=)~|GI~#GoA+j&r{lB)B zyG)!s!l!%dTNT&AOO`UM8tZtaDsVXsdLejjM?53~muBIqGbqog<}hwmBO+7YvPP_f z=Mm>wFRtTV>tff1cko45<>{&Lu5EcoRl)Al=hzD_TY>9&Tm<}lsuJ&Wc(qeO@YsRX zY(0PYfBar>wDs|Nm|nHv*Y=n(iQuXHQ3 z4y#nLdxoq*xCGsWi4ho(wg0ye_C#*SEN8+nWi8|47qGi<^!husDZ;DC)h zq7&-ieNQL?J>S{J&uqh2w!M7?4Dn#W3v6MTbVN=Cc)JmrV>bassCCI!-ho&#Zl^RwC46bJ{9>q*(o959Qg*>L;exMithS!AMD#XF%3_cyKf?wtJcQv2 z{G~$Snluz@pZFq5#H69twN2cW1nc|cRauyx+a@7F3H-0;!gISdKj)F|Oh{08g@r>C z&{M4-n1*9Aq786CV(=uBD+Mn2!EX&JsO7#_hs8BqB?X3;@N^qog=>R0!Wb?sqd$?d zja7$3_bePbWx_Db99)sGrL^KKBw$=HxD8S!Vz6nXC|2GT?o7Pbv<>*buca0L1=l0s zok6;?fj zSI}e9G31e@S|!_gjR%#W6?$)O-Q30>ifIex0lMqWaZf@918XoN6;>R>`blTXZmaor zc!BaGJGdiwk2kIUkcbtuoks;I6L23UsqL-(-@~zZaR-lmP>LNe#kSVP?V>#R69n$_ zDNo#2Ji69?ZyI^v7Y>{`+yB5}Fr+5SH}0zkm#+(^mTi^p;C17?=_QbTiTbsV( z4ZHp`ZET$7YGY^05$^%$&M-+_**9Sz?7`gvX!PM)hw`_6)SE5TSo^=?32<#2_hI=N z9g3B^c+CeL_*~3Rj#avo!|Ok+wB0;C=(tE1dLx|;w6ed3nsmaO$RKOPF5bW#g#PWG z;;#Jq!Nnbj{`*@ucllN&?5F&y(rHp z?guA343iy<#fq@*e$CT7WjpIzwn=+G7S#nOx8XL_AifIxfASD?s5KNH8X)o0WZ%Cs?K5@Wdp#qdX4M5n~21 zNwXjRz96M)k9!ON;DTK4@&YvCM@ zQ64Anv;4dx`FO7-tNUy}8>G~3VmUrO#EaF)Ht7u!5eI3|!LfgdcqxyfR+;dI_1Z!1 zs_eC$<7W#Csd2IFqjSE6_fYh(Dt!wVc|2h-Qrv=u9L%eb`zwz}xTzD}at1_&tdKzTP zo3QZ=ub&kP*Q9sBD-EyTwHE#YmrQ+!&KLuS&S)iu&KU4t7&@arQDNoKc_thrWx`Sj z^bVZ^0>&l75r(1jQmfV$9us%3jTnabnOI#8!%*fuKQH4_q?7lozrKT^%sm#uhrdNB z`dH@g19FNPS!Rto3_k9$5I+1Z(vEEnGX z`v~|zi%R7d!iUEK;=!;i#JY2Y*LS&L@UbWe^O7V8(Nl-x1xA}JEulQ!McX@BV5YqSU3#NOsjT-0+wqeuk9UCS^sMFmn9uI|I z>dFK(FYoY=e*fUH&k8Kaa;xF@JgMeHJgVhcAK)3`;eBpr%4@!vZfzAGhcVa;Zw431 z44#4vdIzuKr719iMV)upcj@?pk1D+NT`yQ^#UJMlp@+^n&f@}SiBxg$(cKz#0)EQb z-Xs@WOONxE;KjaWW!CBw4=(IF^uNYRJOOL$|M?5aVp`q=Gs}ONC6I>i4>Q-B3Dm$3 zllX>DxuM7y>=}Dv=39WTsiNJSfc4w?w-pXkfkfPYaL@e(W_P1?=fwZAw@$U*I?3Za z{pkwuUEW(G!Aaq{rU1PS4j(`CvqAbtfBKP#=;=?P;}LzNY@W>zIqD!)wlfod<^lR|G^4(-~Q(lKff?m@yP?~TyMVn#e?Fm@{3FP_w=i)tY1&v z+sS-`oy-=j1<=WC2AOgYHl9vqn^3qWtpT^x$*lQjCxbDtlR+!d$zZ^Lp_4&>;#ZWN z4D{R3$$SQZzMV`R*`|JGeU5Evd>OR5SjLVQd)>=)>y%Fn(>*O-`NZ(r8J--r2M&R3gFl6caL&|uLk#4tray2yr%7S|A0FH~ zTmc6Km#k%HeCH1TNNu0R&u~}5YDmNPjNR`|9W{`8Q<*wUBQU@_jevKO;FvlQi~Qg- z^Ezhb+W+CqT-)F*@5MWmpMY|3IAIGUQ+|>n{o@4Oih*$A$^k75nMCEcuAbwrjC%)E z+wN;CPgc~yNtSM1Im9FV$5nf=%HM=CVU_;_WQr3)JXQX-P`D=T0tZy(cm1=h`K}`@BZyH!#k8)RC4Su5Xp;CEww;f#ho;*6( z$y0axe;PhvwDRH8(?9W8d=1|Hu8GBi!-6=Q)#!Vk_&*Fg?7n$yZH4>{!;S!Nes(~T za5CR_*nv9luw%l{56(?8<|e^rRXNTZc*Y$SM6z<+@fV~S80<~+D>?4?3QOy`sKTsP zmmWOssEG+ww^sk`JML%zKdcxT%5g`CH^I#EA7Uq@;rl~`dNYBV`;0p<_yOY%tTi<5 zNW%RGw{CSXyR~iBUnh9l|LQV9s#W81`M_fzI4^J0ki_{bFB8zfW51sb(m&e010tfQ z-Gk|sPp5ytdhIfIHSrES4*J>p4=zx5zrlr738seK{09@?3fl({CJymg*q#?!tw6bjd*!{C70*Tes8Uoi%@uV^LOR}A)%lF`)^LwB}xc_a%4-+0FecdlM|Oyf|H6 z*}sFRzLmWx7|B)#HBi|*-80C>;0IK8EP$u7MX4+i`fst@|}sXlOt07j(eAkeq^w3XH8oHg?b54WDX#)Bft zO+@YSx4429Kl(Wt*IxSg(OP(oSMgDb=)TIBxDP}o&ilvjDC3{ELVknz1{4)Z2<0#boiKorlA? zAK5$Zw^sh~;8fqnRNu6Y-r!9FyiHmgF^1xgTWxOgq~MX>WKM!x>+%hFfvhqC_r-|l zgPRY&dAAt7msl77_^0=v0?@(X!-Ln`%Dx3RC`Nk|Iwi|9*SdOxC&FDGWK0Z)`*1_= z)`Q0*%Q3~J*3Fy$@hFb9(r?4OZJam3(=x#=G;e$EcKN(*!R-ehy_J~S3hUyn|Crj- z@;4j$C*1QH?@h8yCVAdFS;K(xAMMDW4^DOsCcDaV+<|*Ozup%2eBiCE>3o9q@*SQO z3ZGr3N_a-55o&F|1LHrsXIJsB2YcR#p4Xvgyh(;m)7=n6zth0-9_%w3Bs}BF@uYQAM%KIy%fAm+sW1zRc z`V^W4ygy<&?ur{E58Z`pKb}B2$Gi>^pcBIrQn>caPpuIcoC~#iUnZc~$oub?KbtwyiI^TjM zdmfGy%YPcdPrL@R``n*kCx79ptgzc0K6-yIc=%XJ=?QKMdckIFZ`cGHMQA9^gK98S zHi(=Bf}_ubqdTA%hpZ}7iVz?no4AD~h8HQ@;AbzK1_?ZeO1MQ^i7S!SMd;GFISM z9hjJSPT&#e4(uyf#&%v-G$td^@0t-&UJ_ERcaE9O}!dZgroIRo!oJLB)rR4C; zO9dES-vOJHT7pl7!qY4C2swrLyig>+f>JZFDwaqNW8f(|PvNk`Pxh26*;-veN#N<$ z(F*Y8;&e+5R%*qhV*(A&b9fnDKOCGfcop2($6yZ@!DR(2Iqk;4Z&0&>QP`mbsuP0e z)thzURen%p@u^rRysQP{7&7Jn*kv_B^@4#uVb(9fN|m~UPzA4_%}2>j!NW-K#0xyi zhd;E)%E@2gnCsAv4<^eYR`ZHV*r=g^VekmVFp%&x&~Oo7zVIC%5r7Bh)v>|`q6(W} zvKc!9W8xUKB6J0hV?5Y13r5nOJvdCgcJx$ zs%1;Ap~Gh=@F>8tb~H7*quVDtTRd7rK`{Cq%p$3`5|>V79{YcY=u^O|fOjSL2EgK!`9M%)|?Ey*YqKOjX@5;V~0@5Ck6n zZfdO$Q4-w`gV(X}#)*JHHg+5cc%`6G@FeUo_zcHWLKZv?qHw_?Y{kaIZn7yuK7|m~ zFJv=>XnrC4AOxCM-)JW>$YbS}u71Zb-OsGTVhA$)f?_bp^b4wnL3SAgFUfmGX82jm zCG$O<8$mJg2`2xy8Ny>lP+JTGYS#~;N_P2sI@^aSu@1Ol;P-k^>p-Lu?!3Eey5@_S0+aE!3hBb6u@)`uXa{1vb8LJkey@R}D1%{)vNB0X<- zjR%f|9n|1v@!4?rfhV?4g|n+cQQci;DEpm9S9BxyzP&8 zihEKGFoZcFiu=t8;n7-{6XLee{pHf~;fe_PHv|+`cn?Bp(k4RxF)0+G&B4q&k`W;T zAjCUoz!1;4P3+UyMC413O+tM?r-b32!ATc9K_56c>0~vGRx-kapuXt?;%9Nj`vi!( zs=#qAj#g?nnX-Yg1Q;(}1)29a>~|kmIQ)sBID}(epx1y`j*-gT=N=u9yuUw|O2SIM{&BNJ(s^(A}*oX|`2)RFNQeSW4w0jCcG~z;XK~K z=7iL4J(!PWmju0%Si5yLdy4%gXj?<1iR`YRM;joyq0dn;;@%j<7g(4AUg4`LwOfzj zZ?FsnllY;3?befk8VcR1?x>r?9u~T-LN|vs6}r(Pp2aeSu6-WHvsf#k+t3Z;&1G$b zZo^}!o69;VZcOm0uBe>HvV?L_KUB_RT|~q`M8r2)H=(;GBEHFb3f)=}?=99_=-v_W z-eS2zcSq>vv&V$)q|nW01BEV6_>`}L&4vl(G*QBL*a#8vDN(|A*b_oG zUqoC0-@?Kpvp~dKz{Uwm%Q-Z#2`^z!i6gp1KQu6#eZbxl@!sfqXy6$B5nCiI-Te*? zoCLHKbg;0ZhfuC$%Y?F(P_ASvM8rYeG2+MUBcbcjA0vLuRtcR`=ssbqg)UI&K4I&G zuBaQvTg5gA-KfVf-YWKmpvQQ6vnKpgR*D&Qvsr`Fn`N_g>{}6WY4`MIWB69~voM|6 zKfT!`pesVRS?IR0t3tP2=(e%zP&cWi^Gas2j#R#2ym5QIBD~ zL#&RVzKL=6Cj2{=VZ+MZC^gQW&5p9>B3|WgarQC%d)7u+{^jl$XP*SvLEx{A$MuG-WAHf`=jm#TP}2syJN&Z*at$FCUk$W zl|nZ|#JkBp5xOBF!JBN2&@~Ymy~WlFU8Kn9Ew)kU+V>dm2B){#=R%nzBHm_jPXKq4e+JGUjeK==G2xqe%b-*cbYs4tn z{~g}jRfUD-V)&LmV_=(=;~ocM(_q{_mWA6o*|>eZHE!2bej2uUaT8&?G7cU6%fPMN z@7WXgr}P{X62h*h6@$$p^##~!tuXwlOx(VdhT78|96W@z6mb_dK+m^C+|+D`^-Ho+ zy)Wht^Ug)yxnJI8PGjL+^q%C8w8Q;&VjDCJ_p@@)=|79nGk%Qqcs1qeC{&NH^fGMg z#o_*WQ5qKas`Y0zKx}WgFl19W zZqp-h`={7%D#90t?H3~anAm@B1SVV@y%4t9(eJ|ck(lMMO$q;SB#6YYPhdMOd<|@; zhpmS#bAArncbuDHyDe%vY;QZihHdv)%wm$*epGcIgj}eK1-L1;JH+;g*ftg0fU0Q! za|~`F#HvzVsm{k(9jhz-MZxRje+RMu|7^b(1%FFy-xNj87TYg;3f?>H7^HGF^b~Ag zjXDe43Q-sPfcVDw3v7L}I<_hv_y3%s<0657i>*AeSEGIdKQYmNNN?8URHeDQyks(u z56;~ki1um}55;`xu>Hmv2;2XCw(@++n&EUnTs^^oql>2E@XOMKiu}s@6D1;a5p`*t zJX~Ubk_dlB?8}n%4i5)+kHkd7c3W6w*nS?J2;0t4)nWTg%tNpp=Bx`_9@7xE<(am& z)KIE6DL)AR`Iw?Mge`iwNoWY`TfGHrmn62es?>xl8CbtEtKjzMc-$IQ##mizDwCqJ zAU)X}{8AYevZaA@*}70uNqDrYS1paUhvG>vqFPUH_?1dnFTK$~J4l2yjCVkTS6lBJ zT9+SJ^I+Rs!|fW|V5@&ErJ7>|tR5Vh1Wh44iEugNHn--~Qc~QLLL=BtxIl!Vzx8?{ zG=?35SszlH>=~g|Sw7rmlJrh!O?IM|q)n|>gw|&%wI%gywj%Tqb`I`2q2>A@2g_t7 zFs(rPS3L)7&W6>IG%@-2n*FS|&SyRui>vn8SLp<3wE>I)E+`t?t9& zb1cqQn3<_;cEevmjV>gmgsd#D_BIGzHbSb>hR=d_l!*OiKqF&Q^3n zT`_Y6UkDw+9GxZ2ALw8snY&e2iLVXhY!n+!G&W0TPq5yDP&bvWgAzW$))6i3bS<=i zT_<`IzLq|QrR7V@fdLLy$i@-P({F~3WjBdhcCv+yXIX=#^U~hJyhbmT6oy= z?8FF3^R&dUf3cL2k`nt?2%Eu1j*=AHw?^1(HnBj`iB^eW@38TsC4Iyig)L;UV)i$c z&Ftx5E7%mGg!b*iK4gw3rDY>HzH3>@lQ5je5+?O>z@_N;rz9Qe)h=uUTk*7{AKUi~ z+r}P;%ll?DATZ|QJa!{SPOo0o}_|74%Uq?c~eqc^}8p$qtm4<-Gbkr=j+ zkB8NIsH;#fF>DF%u~O2rJl^>pkNiZ^`#o>-mAs5-w7xNP6`#IJ=-e!`S54i>G$q9w{j%UDS zXr#Y``Z|yB*iDk2@7UgXoM(P6DYxk$XBnUPg(UZreb%qiG)DwU+2+JW=CJq#1&W&93=K z%SdN6IB4AAr9|sR@<)lHveEJ?(cB~?bC=B8R!pwzF0Q#uxpc*y~}9)h;9M(H~Hi%*w2=4#~tir+1dud7u{#r-#*NZ4F) zz{MsNu8v|A`pW(?+)mj;w6l?eab@~msXG9jv7(s!B`tv7P*qwH?N*Sc6P?pLaaBo# zYoh4WggX_Q((aI?zgQ;@m$QZuc2qlYLzzZ2ly~B$vP@7hoBN2y?aHR_WW-ko%y0%O z?68O4a0V$wf{NLz1Kx55D`iJfSIkoT=**#GX^oR!!+lI%kFhs5j|;gPNbB7H(% z!>TJ|&WZl7*eq`E0DP8|Uqg9QmFFqqQ7CV!@(Sq=H_L%HRL>&ag=P+*`J@Zfb68Df z3F(}=1L#B2HEo^4YAI_-*QK=s=nEhy|5USP#T@pKvV)Y(D>{JoQN(YcO{lFLA>C;h zP}Nq-NY@o~Y05>?4FFx5a*cFRgL7EAa*K4ygW(#CqWmb2Z?(2Ltd0_ZPF@lQCDKIdpt0a;xtEmGn^4211+%$*PQ|b}zse90@ zMoKYJ1^aoR>5|wcXiFYeE)xyw1lOaKapy(pSsDMu*;u*$vmiMBFb?gYjK3t67ommf zsEocW=~w7Dvy{=lNcyeUU1w)y+7(G{vd!=wO4@H83J>q6l>S@NYM4n3Q8NFK)TPae z(8rbhTas{kGFlmZTap{+Cu5ZSKPBS)q)=)6w^O10{ z6KlHzH}jEju;Z>|y9xKB5OK6q)ixXM!Xe>kC)pN{@4y7Y(M~m684-?lQf-aXqz-2? zwQMDIB;iCR-L|a0B%H`Jw#7G;gcF%&wyTXK;Y6mT+jgRfM4ZWF+om;>gcF1=wyVu0 z;ryV7Ev2<2oaOYjm35GWvz#HeqK=YqmNV4WE?W}La>m$3c9MjXoUyj6L^#PAXLGOX zB9%DHdCs=2yCj_DylmS8E2**cILnz~I{}>%63%jF+e&jJ;Vj3pErIR?bvVnJXB*#F z(xd@8d()PmE9uANs^M?i#`Tx9x=DKYyS7sI0Ex3YJRJVMEpw10cMS*o$j0&|jjD0i zxzbiTSkl*8i}2O9pkb0!sFoXS4Tnp*29_Ibmq$oC4VI<0hNC3m9AJknZ?q(w1AJ$j zUg(yHbAZ#f+_92y4sgbn1?wWPOgINPYg++}Bam=%cEL6tRyH8vZu~rd}2_m1U0@9-g93n-{YRL9ZbHPyLOCEW_>#A~aUiC%ySeVSS} zP3o%DK#F}6J~e^)#)}4NYAzrqUmYl2oi9jUUZ|s9Cc^oBT{Z13w4BO9;d(}f>Udky zbv>EYSBnG{GrYRdP@VRU)a4nScq4Ta(YM*1_`_=N1)#(EA71%*MD1OIro{}ed^A=Y zFO(4{D|eku)yzebqKwJSBN^QjaMPbD@57qbRxV$ z)JfeV2Zx~~@2hD$WxU#*Oy^2CbLgHCrQle_NjM>a8|cZg$Xcb)WoUUKD8zhPR{nJt%zc^OX2&} zTuJ0}l$Vmha+)BV9l3ROK)o!LY%TPE2hjS7+~+@nBZvW+&9FgA#EfbyA%nsF-yb z4wsKq^APHa*{8!(mDB1HqSbA0hL@@E>L;NK8s_epX{oN*Xo%X1M#3T6$XIF2Kub?paAEhsU^nQPX~u)M7-U>sNIr5zc^qQ)ACd z-JlV*UB9bSE=a1B{)p=jHS?mRzw=wTZmK0jiw1RY-B#BT;f(7~x9a!_O{a?A=`S^3 zl9`;=)%BM;k?7&Ho){}Njl8{(zJY{pztSLx;CGv3Xq{4 zBGSXgxlAqSvWyo8WY<~|jSPR*6`)OY6BYvoYO9H!2rF_0X_tv!0IHxR{vzF+3Y+Q* z)^dq%0aesy6S#Vjo{D=1pqM7nneuW-d^mx*pVV9|_r z(@RTTaayaZ)c;k4h?TY3S7j1U4qf4j*R~OLfCQ^(`@OW(RaJ|*CmDcWi;t#Z}Sf_{_nuDh~=YHPVbqW?S0OI&H%bfJXt4b1=2wYgqe z>Z+riqlg>Avw||TjNfHOyJT!|)ziihJ?WSf+DMz?rLC?eTA83?Ry!gqsD+kxUB>%J z-{Wej6(V8(x2xh^XFF{QDR)&o?8?^82`Xl{Ai?fh#=m96OBKpoJ+x^=S1NuMo~y0! z(l4%jE%pXl7PH1s!cp2tK~veh#M`bXv?WAU;mC~9Rttjuuc~8}Yn&GJhm80(L>#Z> z3Yy9m<(0Xf(LN?R==dzWSUcpUUtBL~t!~PAo1lcRYqJHxh$3}^YnFC^r~@1sOFQSK zt**DU%v&O!n;n4!OSD%7LWk?f3RJ%j^bdi0rgln5`Lt<|m) z;l;DH+8rXivb9cg{v}I@SGLw^@kDrKYrWQx2rq1{*IE%>gbOwsv|LX-xR|rStqmg_ z-6V%?)QX5EH*o+>CmIBols9Qhh@Q-L0DVk!D>a9GuI(hM0LSoi?GVvOxN7``cA4mD zxbpFZc9Wl^m zZG~%vTeOKpdtqR|MVm&1Kj>Digb07ot=bB>{w%5q{-WEoZAAEsZu9#^w`*X=Y+{@c z804WHe0Xw5#8;%-!SjO7 zq0>hq4tXg*xkbcbFQL=#wSc>rZRzy57B6V3d1Y|th|^?=1De1f524Q<5of$!@{{{U zoJDer1kvdQt&NY^5lrWyo64<{)LZIML*Bk;I0h(!O?b$ z($~{J@^M;U-{y7tW5mOLPCbN9e~xJEaRZ0+w}_@*!i=`ifA;a&QiuCD-Xq%9>l6CF zz#tEzQx@6Y>n1?!{K@leLoQn*L&!Z zipc0=~3<)k^OX4l@V7t>qI`LHzwKv)L$PbiCy81BJ=d^ zL~ARyi5#Mz@KV>vk$RSfUW(aK7_yDk=L>?B1*~7>IQ=ZqoQlIEpV4o6X{j}O482~`XA7Fj60%;2d|5wC z^s3{o^ELgVmkzsT>+MV#uOq~Bzp2j^h;#qhk#FfciR!?3eZGFkOG{mE>+$$WWhmh$ z7_u$UeTQr%`e@SOkZqxUNYGRh2Oo>{%S1T%Sft-1!v0{fTX*1RbKzIR4q>q#OLP|A zG`~d8Ao?}CrLsi#9s9iNt-)ALGOcQ{-N+m;B^wk^8-b89k)`=Hv4_-3)ZggMVf4 zLF1U8QxBojyOGDeZt|0jsFPkor)Tts;BKs^H~c|wB?z1DPa@CjBPEG8;k;f-I&2fp z>qi3>EdNv!8-??Fe2~lx&fzcU4T-Q#xS(ed9gYf*x~NYf`U&VKeG}2$sMx5V_3K2= z=-8-Bdd&*LCwqQyLeym)p5?^!SQ*TKe$~eTiTPg{%z%E=_XuS%I|ir44Lvqkn!XJY z|Im97U4n?W^?Wa_a{Z-m5>(87hj`rZJu4I=2)~;NXAGVdHe<9Pc~+>#G$fe+nRr^L z#%xmJX`vY_i14h?jCDjfDAkSqL^vqbjT1yT(lw0hL^#ql47m9%jxUaMO(T*B2fC(_ zCbz>*#u;y1c%7|*Yq2^aNQbJ{Ju;!;4nM7FgQ;i-( z4ZIziT*hVxWYH(C7;||e_Ko1!iVbbUM$dOUCjgdrp)X1nbV+qkJr+aKv zx^aSVhjVOH9mDAq5uwL>Hma^MmawW$2Gw36m<_YSR}fU=jb3KUywXU^Noo_c#7s5(}?gC z9c+{k;VC-USV4px*AQbH5q4Zd{3`HJzq&Tm?X6J5lV6P*?xp`l#nvQ zc{%EBFfxfaRJMgimY0^g78!E|6|=`+l(fXJvb}3uBpvn# zOO32p>i<55`xoyS`LQzJTk_#Xi!qvLJFHw;W=td64=Y!e`BkXpeuvaU_%q#(`oMb( z^OKe6550s(^b_NC@CnCX{`RYkWt7B~!H($9jQx_tA^prqj4MB+pBasb@Q{9HOd-NU zy4ILaghzC(@i9@Oa98v?<04U4p!G(4CGd&;Uu;ZV^ai6hB2Wguig0RHsO~y{5 z&w)NSSY>HBJGw^n7e+&(&w#!(MiW(!suNvmEF)?MwAm;l>KxN3dW#Vmk6xhvD+JtX zbP+h!Y~##~-eycA8UVE2C?z@`-8OoMag*pa&{sxU6_FXXxo)TEoyJ6>!HyR~_ZcN# z>KlF72&#&funZd-uTw^@ps8;5ij*kA@SWM)O3Nf9kxsEU@ zWMXuH8Ji>{c7g;$%#nhovgdM#Mu(b9h?c@gDBN7_rB$v-GbmZcD})lpnz@3evLYy8 zoH?7Q4-_!oT;d^j$SPNYd50oyf&{CXS=D3-_XfWhonn>{RfLPrY34RB{o-n9W~9gj zCqN0Cn^Oc$WrK#k7~R4=N>n%Gv+xe)9WVXj>Sm6tF5^8N>COu3Yx<7aa?MSo#B;Qt z8J{XLBW5y>nXo=pR8s5@9y41JVSmuy%q7D9puahc2$$sLnMFjnTrbb`8PK@d0CPGi zu@x9#E+N8JV1W5C5w-#Y&7DNp3Jf$45zT}Jwu8*eM2nIgKsSlLX`I9IO-Bux?Q@MC zKt9Pc_h1tWLqKA?W2UKrI5BCx_AEV4@;Z(LBPncKz`^bq>| zBzm0JOMdeD=%?IXM5oW1J$;-`Fh}}0^;pW0pNG)tSJA~@FZs#)q9=O^eZFYE?&EWs zxyNMT>E4LLlTSv!>ZSbTAERe@37yV1_xd<}!#wBXbRJpCjCu$&`g`IdWLD(685WUpTsfW<1J!YAY(~y|=y@WnLGTZq0 zTxsU|`1}+sq5Ph~G$Il@tsJw)OZmywV%B;Ioo+Or_i?((oa^JXlq_ZGJ%m2%#cc6< z$xm()vkj^I`sYsb3m>Pu%tJm-zcFunbvpaTRBPdJnq{VR?HKconMKsHdRL%9M4hYm z0vbt_QU4LX*PKoCCr8=@1m&M&{xJBln7!s9p`2=V;5lrsd6TFWtdH1h#y%uZpmuON z?KLxrY6{DIqF_POh;G4skGa_tH4hLy z4`=#b^LwH`Ik3*b{DJ8490$-PqH_at*nabOqJP7x%KhdYqDY8$z*K9?LR5!%2h0kB z#Pv^|9W+~z67PT=G&>OC9k7FDcOtw4_O02M2=9P>YvvQ-9k4^@NFuxgcF25^2=9P> zXHFu*J7C{=8X>nR{b6$|DRCk4Ve>U2T!?(cw1{va@)2_Z5iUeNVlE@Xg~&(EkBM+0 z@=*9r44qV?@yA&04@$-})9*3FzWgNbmOe#&$a9d*Mz{ghdm5ZC^mHmecg+TYV= z8WFB;E;Abv;p*lxvpEs2Za!nSC&JauXUuLyxVZTTvkwt2ZvMd>MD$HdcMdyiK2C_M zo6nl#h;ViDIddWru5LbOzCeVln}0O_MTD!He>CS1)rHcZH{T&@1*Jc4zDI-$m@k+g z6Tt#zH@j%ABgAFV7tK;4TorxM+$BlWlAp|zq-$x*VLzEa5_PjVfUXct%g>Mb*}OqC zJAVYwT}i^rC9_Jp{9*9H6!#^wIw3xpa>=YiG_zel<+AxO(foFtT{c@v5^jDmb4Z6h z{4eGJLGYXi^zgr!BS?o!_pg|Rq{F5ASImi0$5yo;6Z5OvRO^b|um$x^=bvT?(N8sA z2<7%J8B+IW-{Kh4zKy6&ZgEVYy0 zD$cGo5(%2K+RTWlWUnBo*nGRq93U6z@ZeXrS8|gQ4}N8Pid3@q+Q1;ueqE9{+zIxu zhow`Dm|%|)RBU3r1bd>?u_kTbj!Cp{Yb-29yxMl((N1mqQK37}&sEo1ZTq>#ZZzEn z7!FvuNqNLHd!{7u{8E~|ogkTDn!PLO-fID?{OvhJ8(P515&J+%kUT8ww~v#=8f0j^ zu05kErclhj?06u&o_%67G5;$TYXFt!!&jk>8Oo(FyG&kB;~K_B~M z(&2f~*ZvCW@I2^ipN-@a{a-T6wQp*JZf3EJx|?DiTibcKVsdNElSbo`|$&|Hg(}s^2&vbN&F1M)gNcr^w1Z073BlS{~5M$$aHR3d9T;` zHKDyFww&Xy`4j7v`U$`0h6w9HJ@?@+`6n!F_}6^1ZHBrJwg>8b2hS;C-CA#}TPK@^ zK(yPuih2NUzExKb!T7$q`b`pU4>y2|uKZR7yOORRjmcrp*f7>++Xa|KL_w^UN+We( z9q6~%ID2O;|_d=2Fu{Kx?16Wde6 zror}D?kr^UXce2lpoV8XBFb%R)^-TD0#IQVLB+dOe_mfQ9X9&W>fUtp^adADrou+>=( z9L9HS&H3SsrLf(Zx)iiClUCSIhYxsoGOcvw3QV{AO&X8lQQZbp`t-I*5l;V$??JBSWjISk_drpQ%Ri({K#Vu$aVf z_$>!OTbu(CMnL$#hmTfsc+C;2_4Z;V!u=G$>cmOv7*J1v$U`5^f!CabcgbO6__liR z&^CX$?W^i~RZX1@mUZB_$>Dn&P6yXhlipIRDD@KFg>81iN3d-U`&fzKK@#wGKwSt& zU9pc>MnsyBxnnHgW;*#F?C6L8f^2D8o<`k zuc=lAqP2$o>qE0(n^3*GHjf`m$^rY_ggn@e&mXES=l$}ZfbCMaDR4`j(OG8;`L4k_ z6r*t_)`tFru}HUiOxK`b)u(Ig!KVXiKz8~}*sof5j$7keXc`*L9sZ7H*ZRRBdP%L7 z4$GCmXo=QHT?%#k6DUnfWfw$#fx~B;)qUD7uB3en+eYdUEkyg6ABX*gP-S-UmAOA? z#j?cw(fo_r0sixli&~U+d(dU=C3R_?-@)<}980X>aPO;;nlTjC1KB1I3(!N<5wL_S zL`60J$PUFQ=Nv#iCv{`Tan77f7*%t6D{hDyM+!iyuKkU!x zoUf;Ay;3K`cFUlb_2$~l&}3NAHy;L!>Dn6!uwKQsOW()S-P+K)Gr(w9^*3~`OltI& zeheJFz}stW1~1f)u@CaT*1Kw=>EM5+g~Oq1Hh3>2|6=HOu+6ReHN<@%V%e3r7BloH zWjXi>QNok{(AV?$x*0Y+jr%V+eY^EUdm7G#n6Ms88#&i zf18R!o0w@ z8$RA{R~#+A)?d;(bv$do#<4+|slA$U-ab?Ndc-fVeJbOIJze3w{1XKr0SAbo?#&Q>b0!sOeR;A^O0S9=Dj=$?&<6<8W zfhNKv1Gil4tFR4G(_yHNZPUtt^|rvY)d9~yCeDlPwSe^+{`i}nw{qYO{B1r3Mt!D~sKZJvMOPQZqE9i`dYY9IAOQ>Q>)uH{APn3N_F9H4hf z%cwX;&wK>hCjF-o{gfbfwNXyRAolx^eo8RQ;O>gStRAdW3T6%Y7qH)$--2x>f5;Kc zTJip{ZO7-hL1gh=uQp}wqbJCqYx zwvdxq&vt_-93_UMoXiHan@r&-F&yP&HmcoL3P*|IC?`XP&f*0KOaOL-0_9}(Tss>a zg~e=!kRPzjIOI>+YQY=X7wr;+{tqEhkBoYh-?Gs5D37xS?OT!^O0+|Xb|}$q5H5gT z%>HOMhzwAo0ZKHO3=;Jy(E&=-qeT5;(xXH@O4Or7{brD_Ksd@-tZBQgAhBR)DEy3@ z6lY0+5*?vLM;u0F=l~@;uz^Gec%|7R(HUo7;0v_pw{l&D9Ebz-Z~&uDiRr5g?v?w}z`G_=8bKk?i8NYp0)iwsiuARmc( zWRVdHU+g1AMo7Pv!q0+qV?wwiGC&44SYU$TC@~zR$QVd*`UyRpexyfAe z&PR$2l3g*#SHLewc%LHF(#d4FkQ68}d@+TiL$mFL5Y5vgT(kK z(XJ&(j6ZR5*?sK!^t4g?j?|CA$%d}QKEh^=~1E|l;~$O zNc4je?Y4qMKW8Z1jXS6~OA3_e03|x$aG4k#phPJuourH@2CGU^9W z_~ZaM|1lxhkr^O^#bmJ6M~V!P{;UXpy#vbM!7<8LFav?*axpv9!4@P3Feq{0fpRi? zsAB?!Cj`Oyj|vQ!%$juM6{G`{c!;VHqeM<1Ztf#7d;l>@!+<6J4jc3N8#6yZQkWcD}GK^2{xSaGTQI8V!D8u-+j+;T^Pk<6LvI`{oLy7h% z(H>u&1GnfbL#u5)81xitJ z;$k0(;U&ZieI$mL5|@$052vBuc#@eU^GFtvEQyBm9}P<>pp4`hABhRD7;;E5lVl#r zB9bK}OG%cIWU&;VWG2bHSUCSN14R^2>?1{qi5L1vQDWlFJ`%&v5Tiuqane6Zn=4BPD3Q+)qeSNMlmJNND#R#}n-il%9zcu|*Si9CQ9rRe{QDF7uJEF?yWyqOp!@)=^3$UK2E01~+hF-qj-#3+#m5Tl&s zhJa!UKq(w1l0%TfA#oMr=ENw4L*fC%#l$F4zmOOu@@8U`ZjnHeOt1<_F zlVl#rB9bK_x3bo8B@Nt+?Ph)A;v32Ul)Kqql}dDcMd}HM3nk7PRs+HGSX0*snJ0&DbNtTghU8qDPGfC!= zEFxI~ayNUdc6?WqYI=!~@7Ia%hTJ`)M991KN_tCwr6k>Dw8L^JA&|S-f(9i*Hf@yG zpK?mFgk&knGLkHh;*-oInFkUxRwm^8b@B$t43!Ca*Ih4usEn9NG7sc#cKYG?5fn}` zk7NC(B3UA&J2S470?J6Tk>mj6ZZ@ZJiI7kSMj=1kv_!~r z&ElUxe!Y2#kWE^~7a(75RU+i9HhIrVKSd-)$oOrI8&LjSIYeJQl9%=P8ihdLRv3=snm8S^X|Mi zAIOLB0zQu)=jSA zwu!dWwjXUj*{;~G+wRx`)w*g&wTrr1y`U;^`)i!`zIIcK(v$S2dRKk8{*iuCzoh>K zAI++2bTIlFBaQKHW2*6*G0#|GY%um1hmDiQIpdbW%!+2DnP}EETbiBB-e$fz#++zQ zHaD2N%){nc^OyhE*SUaKQJj7J-FG%*PtGMI3M3(cP%r@kO5|c9w<4sVC=j`es0gW2 z<)K(FMXVg?>I;A4H*O5i1Ic9u-o>3Zf+{qAee2LF5i{sYQ&4`F^uUZQAGS zcOK?9|NYPGp4r`**$umA#{0_q)(eGlLY+cahgv!lL)D?pp^jbxBr+gU7MW2VnHsqxa!=&GNL6G( z{M)pPyM@~h)jGT)&(bQ;mv?$s$S{fZ5ogAGRt%@#;E{?8z5#>OVa?u-38_E>CXY)vedo|E1$eQ^5l^z!r@6CF0`ZYRE} zEz=0c-hx958sPR4%a^a){)2PDIO`OQvra?kBiORfE;ue^oil@N>eWBC96QZ&>1Fo5 zxIS1b?;7hodXZ&K%rY(bmMtk(-`Tq%PP98>7k(Lh!Ii;k$wDMInk>rs-ZsyP&X!rd zEIR}nnt!F$9|vn48yKXvupConS(a}3Sy05>Ay#*-2>hXz4~%bUO9LG>z%K0XX-mDJ z-+s6!&FUG&*3SqXfz6LWa*vbynxAr#)B!!tz~WMy|FfIyy5|e6-qX=?%!IFDubb`B znjWy_B&!cjfpOVaW*1%w%05f&3eBD07g=Xrn&rhVj0Xk&1QZU_#nbg@~Re?e1)lPl6x(V`h`p6~r|;5TQ> ze{-52o94T>Ek2@EkTs_n^8;-UV^f9o|I^CJ`q6yvulT7g*7X7JA8GZeK9>J;mF4N+ z=r&ap1lzYPE{)rSi0hkn<<-IV zdjw8q!1F;(T0o(x|1&4rOpP~Nb`SJ_sH^h-H^OA|YZX-0ZNu!=lBdQtGaBvx-7MqG zwPll&?Q&SKTCzcw1#NVkv8mgpjbWdX9n|t+w$3LHX0o?P?ttAJk!OE$-48jF`IG$P z6*l#sYk9JYXI@Ny^c0aw8(~@<$%3A&c3cvkhAP>Tf}aCD`Gdo7!}1JNX)CGtxzLj} zj)(s&RLPSNemm&Nb50umTIfi7o~(L2eU0Ee4^`$!6#u?BktZ)WF%s58m1;@Hd6C(2 z`1uV~F7g>T2`3ZhWvDWb2eh8N;#`RHDpZ*-t#CFtt#LL&4iTI@&H_ViKYbqI_StoDaDy&F2}hZs{B#<;@3k@CYyfvH$auwq(A=a z(32a@0Q{Sv$|f0z{{~e4HXMY06KY&G%U~9^K$W+o480Yqye&h~??C0g|4Q^WsL~+A z(eFZ)_m~vPk@um>b{UEO04mQ3%F!P}m5-QP&|x_3(dfU*SoBV)yn8kt9p6Qy@-cs( zIXu&zi2j6U<_@!JPD1aI$>_aMdE@Fv^ggIOBbtKV4^C8eu5hqf4l3DT?j0q~U<=uro4plyP?m?e`Dkq)U=u=Rc zL(k6B_XT90Kj&BIGf)|NK8`*MRlahn(2Y98^XwnvXsYl^!!*!-8lH3yv;C zD^xLBi*}(haq%K_Dpc`wF**d5Nj>Y(VW<+(-=L#VC8iIf(;*#<`sfU(%;v`nb#ft8 zX{Afit#zp_X&YU}LKdXM(Z|s_kWNN<*GzID9gD6+w}Z+L?)wku0;mkyy$0PGD&ufJhwciMv9;H6k{CvN9Shy{1rjcX${5%$qI*DPTS>!09c-3+JdTX4F*4QJ|~;a%DQ@6q?z+ApEXY~3!L zse6f(iTQSr@F-MSrXQgngDQ{fU(w5<$|_z`R9U0D;S2f+d`0)b*Ys1kNk1d!8;}O3 z2heXq+JYWJe+X#{ypTm(fV2fYhK}zfqA}>_EbM|RyY(dcV@O-j)9AlJ+Jb(8-V139 zdIr4@(iZeAdOxHsXe0U{R5_&Q(1#(FSI@&U+62$4<1jrHRB4Q>o%-!-NTo0-XhtSP zw=t>cEJ&R&A#@Jpe48*VG*Q^yq{E&j1NJr-kf#q+xy-aemq2Bfy*B78pvqw0yL4m- z~xAT!elAa$PWm=vqksZ(j|S zMUZ~p6rmSGx^vSVT?bWuYc7G0nPT{a=?R}Uz2ih{&1LWtp4&O7Q;SMvFEqn;60cJe>SOLf ze+8*NW;Xh3sB+HCL4N~P&Ko-)>9>$R&IFTsy7ovrZWX>lx;S?(I_?swq`320XaVWt z+!}N$R0+8Y(P@xA&aFj9A$^>?2%QdlT2Ga-GPTZg_7sx| z$nGliDCkNzr_kP{nL=(_cE?V~I<5DZMz9y`;S7PP#m*R_OZ@}ewPUMk=_g{s$F=zG zGtJNYKntB|ei>1#8R^lUHlcZr8Gh9VdO?>N=_~k8&3{drmcE=Pts)VN?>=|?^&e>a zc%$=Fi&~u;uGLwDIAIZCDPc7sLD)>#LD*0DlCUIFt4|PKB5Wn>B3uxy)r$yagz<#w zggJzzgbjoS!XCnDf{E2?D?%Zm)Uc!ei5;4osNA9NFHhW3>Gn2h*;BcUS8yLy><@g( zu3DT?dSh|p1Z++f0}!_ zO)E*%&v$7Pl_!(g2R!J;{P7FjOn>+aH!bmgjeDn~Re3+G*)FkVp<7M<#vk%;O3Yp4 zzCEGkqP?%L${fA z7BZ_#Bl(7CDR2G0(=+gUzgtrRF<% zDH+w}e%(iWdNlWx>O_-9VJlRH$`XI9sH5lNva^_~qLUy_%Sm*NS>fc(EW?Jh|T zNAuGhwq-xQ@&X8lD z+9dwonEFY!6RH_Dr$u7eoYa0tx;38r;%3_pm5|Gw-`eLrS^M9fTswNm=;4pH@7(nK zgpp4k%UYGcbmhFn`e~l$Wd0-h)7hZ)#^@^~zpg_YXMN&eg_os%>{hR@^LpZ{TfKw{ Ut@VPIp5H5xal3cYsq2yYzc(H6yZ`_I delta 93131 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 Ktu>2sWB(0XRTLZm From c240217cde61b389f73e16f1c8a54d1538dea85c Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 15 Aug 2022 19:29:07 -0700 Subject: [PATCH 08/28] -- mejora % impuesto --- Bancos/IE.aspx.vb | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Bancos/IE.aspx.vb b/Bancos/IE.aspx.vb index 4c511f2c9..60e52e7ed 100644 --- a/Bancos/IE.aspx.vb +++ b/Bancos/IE.aspx.vb @@ -3359,11 +3359,11 @@ Partial Class Bancos_IE IdCtaIVADevolucionIMPUESTOS = IdCtaIVAXAcreditarDevDinC - If ObjMov.AddPrePolizasDetalle(CvePrePoliza, True, -IVADev, ReferenciaAplicar, 14, ConceptoAplicar, Now, IdCtaIVADevolucionIMPUESTOS, -1, CveIE, CveCompra:=CveCompraDeCDin, CveProveedor:=CveProveedor, ImporteMX:=-IVADevMN, ImporteME:=-IVADev) Then + If ObjMov.AddPrePolizasDetalle(CvePrePoliza, True, -IVADev, ReferenciaAplicar, 14, ConceptoAplicar, Now, IdCtaIVADevolucionIMPUESTOS, -1, CveIE, CveCompra:=CveCompraDeCDin, CveProveedor:=CveProveedor, ImporteMX:=-IVADevMN, ImporteME:=-IVADev, PorcentajeImpuesto:=PorcentajeCompraDevDinC) Then IdCtaIVADevolucionIMPUESTOS = IdCtaIVAAcreditableDevDinC - If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, -IVADev, ReferenciaAplicar, 19, ConceptoAplicar, Now, IdCtaIVADevolucionIMPUESTOS, -1, CveIE, CveCompra:=CveCompraDeCDin, CveProveedor:=CveProveedor, ImporteMX:=-IVADevMN, ImporteME:=-IVADev) Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, -IVADev, ReferenciaAplicar, 19, ConceptoAplicar, Now, IdCtaIVADevolucionIMPUESTOS, -1, CveIE, CveCompra:=CveCompraDeCDin, CveProveedor:=CveProveedor, ImporteMX:=-IVADevMN, ImporteME:=-IVADev, PorcentajeImpuesto:=PorcentajeCompraDevDinC) Then MsgError = "Ocurrió un error al registrar el asiento de impuestos de devolución" ErrorDevolucionImpuestos = True End If @@ -3547,23 +3547,19 @@ Partial Class Bancos_IE PorcentajeCompraDevDinC = ObjCompras.DtResultados.Rows(0)("PorcentajeIVA").ToString.ToDecimal Dim DTCuentas As DataTable = GlobalDTClasificacionPorcentaje(UsuarioActual.CveEmpresa, PorcentajeIVA:=PorcentajeCompraDevDinC) - Dim CveCuentaIVAxAcreditarDevDinC = 0 - Dim CveCuentaIVAAcreditableDevDinC = 0 Dim IdCtaIVAXAcreditarDevDinC As Integer Dim IdCtaIVAAcreditableDevDinC As Integer - If DTCuentas IsNot Nothing AndAlso DTCuentas.Rows.Count > 0 Then - IdCtaIVAXAcreditarDevDinC = DTCuentas.Rows(0)("IdCtaIVAXAcreditar").ToString.ToEntero - IdCtaIVAAcreditableDevDinC = DTCuentas.Rows(0)("IdCtaIVAAcreditable").ToString.ToEntero - Else - MsgError = "Sin Registros de porcentaje impuesto" - End If + 'If DTCuentas IsNot Nothing AndAlso DTCuentas.Rows.Count > 0 Then + ' IdCtaIVAXAcreditarDevDinC = DTCuentas.Rows(0)("IdCtaIVAXAcreditar").ToString.ToEntero + ' IdCtaIVAAcreditableDevDinC = DTCuentas.Rows(0)("IdCtaIVAAcreditable").ToString.ToEntero + 'Else + ' MsgError = "Sin Registros de porcentaje impuesto" + 'End If Dim IVADevMN As Decimal = 0 Dim IEPSDevMN As Decimal = 0 - - Dim PorcentajeDevolucion As Decimal = ((TxtImporte.Text.ToDecimal * 100D / TotalCompraDev) / 100).RoundSQL(2) IVADev = Math.Round(IVADev * PorcentajeDevolucion, 2) @@ -3587,11 +3583,11 @@ Partial Class Bancos_IE IdCtaIVADevolucionIMPUESTOS = IdCtaIVAXAcreditarDevDinC - If ObjMov.AddPrePolizasDetalle(CvePrePoliza, True, -IVADev, ReferenciaAplicar, 14, ConceptoAplicar, Now, IdCtaIVADevolucionIMPUESTOS, -1, CveIE, CveCompra:=CveCompraDeCDin, CveProveedor:=CveProveedor, ImporteMX:=-IVADevMN, ImporteME:=-IVADev) Then + If ObjMov.AddPrePolizasDetalle(CvePrePoliza, True, -IVADev, ReferenciaAplicar, 14, ConceptoAplicar, Now, IdCtaIVADevolucionIMPUESTOS, -1, CveIE, CveCompra:=CveCompraDeCDin, CveProveedor:=CveProveedor, ImporteMX:=-IVADevMN, ImporteME:=-IVADev, PorcentajeImpuesto:=PorcentajeCompraDevDinC) Then IdCtaIVADevolucionIMPUESTOS = IdCtaIVAAcreditableDevDinC - If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, -IVADev, ReferenciaAplicar, 19, ConceptoAplicar, Now, IdCtaIVADevolucionIMPUESTOS, -1, CveIE, CveCompra:=CveCompraDeCDin, CveProveedor:=CveProveedor, ImporteMX:=-IVADevMN, ImporteME:=-IVADev) Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, -IVADev, ReferenciaAplicar, 19, ConceptoAplicar, Now, IdCtaIVADevolucionIMPUESTOS, -1, CveIE, CveCompra:=CveCompraDeCDin, CveProveedor:=CveProveedor, ImporteMX:=-IVADevMN, ImporteME:=-IVADev, PorcentajeImpuesto:=PorcentajeCompraDevDinC) Then MsgError = "Ocurrió un error al registrar el asiento de impuestos de devolución" ErrorDevolucionImpuestos = True End If From d6b5bc150ae1c45f08ed73dce6848309e25f41ec Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 15 Aug 2022 19:29:15 -0700 Subject: [PATCH 09/28] -- --- General/CatCompuestos.aspx | 2 +- General/CatCompuestos.aspx.vb | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/General/CatCompuestos.aspx b/General/CatCompuestos.aspx index 1ac8c194f..b9a0aa1bd 100644 --- a/General/CatCompuestos.aspx +++ b/General/CatCompuestos.aspx @@ -27,7 +27,7 @@
    - + diff --git a/General/CatCompuestos.aspx.vb b/General/CatCompuestos.aspx.vb index ee7e77328..b1276ba2e 100644 --- a/General/CatCompuestos.aspx.vb +++ b/General/CatCompuestos.aspx.vb @@ -32,11 +32,11 @@ Partial Class General_CatCompuestos CveCompuesto = -1 EsEditar = 0 dvEstatus.Visible = False - CargaDatos(-1) + CargaDatos() End If End Sub - Private Sub CargaDatos(CveConductor As Integer) + Private Sub CargaDatos() Dim PS As New ClsProductosServicios If PS.GetCompuestosActivos(UsuarioActual.CveEmpresa) Then GvDatos.DataSource = PS.DtResultados @@ -85,7 +85,7 @@ Partial Class General_CatCompuestos TxtCompuesto.Text = "" - CargaDatos(-1) + CargaDatos() UpDatos.Update() UpBodyCompuesto.Update() @@ -98,7 +98,7 @@ Partial Class General_CatCompuestos Alert("El Compuesto se eliminó correctamente", TipoMensaje.MsgInformacion) End If PS.Dispose() - CargaDatos(-1) + CargaDatos() UpDatos.Update() End Sub From bebd233a70665d1e4b29c42ea2478d0ce96e02cb Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 15 Aug 2022 19:30:29 -0700 Subject: [PATCH 10/28] -- mejora --- Inventarios/RepRSCO.aspx | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Inventarios/RepRSCO.aspx b/Inventarios/RepRSCO.aspx index d272cef28..5f9149377 100644 --- a/Inventarios/RepRSCO.aspx +++ b/Inventarios/RepRSCO.aspx @@ -113,21 +113,17 @@ - + - - - + - - + From aaf5a95b11af8eebcb6b8b8aeafe48db0cb4c815 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 15 Aug 2022 19:30:49 -0700 Subject: [PATCH 11/28] -- centralizado de pago de venta en prepolizas --- App_Code/ClsPaginas.vb | 321 +++++++++++++++++++-- Ventas/Ventas.aspx.vb | 630 +++++++++++++---------------------------- 2 files changed, 497 insertions(+), 454 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 4f709540a..f8f0acc7a 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -9388,15 +9388,19 @@ Public Class ClsPaginas Dim FuncionalidadFluctuacionImpuestos As Boolean = If(UsuarioActual.Empresa.Funcionalidad(159) = "1", True, False) Dim tFecha As Date = Pago.Fecha - Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) - If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then - If UltimaFluctuacion.FechaFluctuacion <= tFecha Then - 'FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion - TCValuacion = UltimaFluctuacion.TCFluctuacion + If CompraActual.CveMoneda <> 1 OrElse Pago.CveMonedaPago <> 1 Then + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) + + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion <= tFecha Then + 'FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion + TCValuacion = UltimaFluctuacion.TCFluctuacion + End If End If End If + If CompraActual.CveMoneda = 1 And Pago.CveMonedaPago <> 1 Then 'factura pesos, pago en dolares tImportePago = ((Pago.ImportePago * TCValuacion / Pago.TCPago).RoundSQL * Pago.TCPago).RoundSQL ElseIf CompraActual.CveMoneda <> 1 And Pago.CveMonedaPago <> 1 Then 'factura dolares, pago en dolares @@ -9425,7 +9429,7 @@ Public Class ClsPaginas ImporteMN = (ImporteMovimiento * CompraActual.TC).RoundSQL If CompraActual.CveMoneda > 1 Then ImporteME = ImporteMovimiento - Dim Ret As CompraRetenciones = CompraActual.ConceptoPrePolizaIVA + Dim Ret As ConceptosRetenciones = CompraActual.ConceptoPrePolizaIVA If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMN, Ret.CveConceptoxAcreditar, CompraActual.SerieFolio, Concepto, Ret.IdCtaContablexAcreditar, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, PorcentajeImpuesto:=CompraActual.PorcentajeIVA, CvePersonal:=Pago.CvePersonal, TipoCambio:=CompraActual.TC, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe @@ -9451,7 +9455,7 @@ Public Class ClsPaginas ImporteMN = (ImporteMovimiento * CompraActual.TC).RoundSQL If CompraActual.CveMoneda > 1 Then ImporteME = ImporteMovimiento - Dim Ret As CompraRetenciones = CompraActual.ConceptoPrePolizaRetIVA + Dim Ret As ConceptosRetenciones = CompraActual.ConceptoPrePolizaRetIVA If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMN, Ret.CveConceptoxAcreditar, CompraActual.SerieFolio, Concepto, Ret.IdCtaContablexAcreditar, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe @@ -9467,7 +9471,7 @@ Public Class ClsPaginas ImporteMN = (ImporteMovimiento * CompraActual.TC).RoundSQL If CompraActual.CveMoneda > 1 Then ImporteME = ImporteMovimiento - Dim Ret As CompraRetenciones = CompraActual.ConceptoPrePolizaRetISR + Dim Ret As ConceptosRetenciones = CompraActual.ConceptoPrePolizaRetISR If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMN, Ret.CveConceptoxAcreditar, CompraActual.SerieFolio, Concepto, Ret.IdCtaContablexAcreditar, CveCompra:=CompraActual.CveCompra, CveProveedor:=CompraActual.CveProveedor, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe @@ -9483,7 +9487,7 @@ Public Class ClsPaginas ImporteMN = (ImporteMovimiento * CompraActual.TC).RoundSQL If CompraActual.CveMoneda > 1 Then ImporteME = ImporteMovimiento - Dim Ret As New CompraRetenciones + Dim Ret As New ConceptosRetenciones If UsuarioActual.Empresa.TipoContabilidad = 2 Then If ObjConta.GetRetCuenta(26, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then Ret.IdCtaContableAcreditable = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSAcreditable").ToString.ToEntero @@ -9590,9 +9594,9 @@ Public Class ClsPaginas Public Property IdCtaContableProv As Integer Public Property IdCtaContableProvComplementaria As Integer - Public ReadOnly Property ConceptoPrePolizaIVA As CompraRetenciones + Public ReadOnly Property ConceptoPrePolizaIVA As ConceptosRetenciones Get - Dim Ret As New CompraRetenciones + Dim Ret As New ConceptosRetenciones If EsImportacion Then Ret.CveConceptoAcreditable = 288 Ret.CveConceptoxAcreditar = 287 @@ -9618,9 +9622,9 @@ Public Class ClsPaginas End Get End Property - Public ReadOnly Property ConceptoPrePolizaRetIVA As CompraRetenciones + Public ReadOnly Property ConceptoPrePolizaRetIVA As ConceptosRetenciones Get - Dim Ret As New CompraRetenciones + Dim Ret As New ConceptosRetenciones Dim Funcionalidad As Integer If CveConceptoRetIVA = 1 Then Funcionalidad = 308 @@ -9670,9 +9674,9 @@ Public Class ClsPaginas Return Ret End Get End Property - Public ReadOnly Property ConceptoPrePolizaRetISR As CompraRetenciones + Public ReadOnly Property ConceptoPrePolizaRetISR As ConceptosRetenciones Get - Dim Ret As New CompraRetenciones + Dim Ret As New ConceptosRetenciones Dim Funcionalidad As Integer If CveConceptoRetISR = 1 Then Funcionalidad = 316 @@ -9714,7 +9718,7 @@ Public Class ClsPaginas End Class - Public Class CompraRetenciones + Public Class ConceptosRetenciones Public Property CveConceptoxAcreditar As Integer Public Property CveConceptoAcreditable As Integer Public Property IdCtaContablexAcreditar As Integer @@ -9727,5 +9731,290 @@ Public Class ClsPaginas #End Region + + +#Region "P A G O D E V E N T A S " + + + Public Function AplicaPrePolizaPagoVenta(VentaActual As Venta, Pago As VentaPago, CvePrePoliza As Integer, ByRef ObjConta As ClsContabilidad) As Boolean + Dim ErrorMovtos As Boolean = False + Dim PorcentajePago As Decimal = Pago.ImportePago / VentaActual.Total + Dim ImporteMovimiento As Decimal = 0 + Dim ImporteMN As Decimal = 0 + Dim ImporteME As Decimal = 0 + Dim TCValuacion As Decimal + Dim TCValuacionVenta As Decimal = VentaActual.TC + Dim TCValuacionPago As Decimal = Pago.TCPago + Dim tFechaUltimaFluctuacion As Date + Dim tImportePago, tImporteVenta As Decimal + Dim CveConceptoContableComplementaria As Integer = 207 + + Pago.CveConceptoPago = If(Pago.CveConceptoPago = -1, 2, Pago.CveConceptoPago) 'si viene en parametro lo toma com primera opcion, sino el 2 + + If VentaActual.CveMoneda <> 1 Then Pago.CveConceptoPago = 292 + + Dim Concepto As String = String.Format("{0} F:{1}", VentaActual.ClienteNombre, VentaActual.SerieFolio) + Dim FuncionalidadFluctuacionImpuestos As Boolean = If(UsuarioActual.Empresa.Funcionalidad(159) = "1", True, False) + + Dim tFecha As Date = Pago.Fecha + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) + + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion <= tFecha Then + tFechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion + TCValuacion = UltimaFluctuacion.TCFluctuacion + End If + If VentaActual.Fecha < tFechaUltimaFluctuacion Then TCValuacionVenta = TCValuacion + If Pago.FechaDocumentoRelacionado < tFechaUltimaFluctuacion Then TCValuacionPago = TCValuacion + + End If + + If VentaActual.CveMoneda = 1 And Pago.CveMonedaPago <> 1 Then 'factura pesos, pago en dolares + tImportePago = ((Pago.ImportePago * TCValuacionVenta / Pago.TCPago).RoundSQL * Pago.TCPago).RoundSQL + ElseIf VentaActual.CveMoneda <> 1 And Pago.CveMonedaPago <> 1 Then 'factura dolares, pago en dolares + tImporteVenta = (Pago.ImportePago * TCValuacionVenta).RoundSQL + tImportePago = (Pago.ImportePago * TCValuacionPago).RoundSQL + ElseIf VentaActual.CveMoneda <> 1 And Pago.CveMonedaPago = 1 Then 'factura dolares, pago en pesos + tImporteVenta = (Pago.ImportePago * TCValuacionVenta).RoundSQL + tImportePago = (Pago.ImportePago * TCValuacionPago).RoundSQL + End If + If VentaActual.CveMoneda > 1 Then ImporteME = Pago.ImportePagoVenta + + 'movimiento de pago cliente + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Pago.ImportePagoVenta, Pago.ImportePagoVenta, Pago.CveConceptoPago, VentaActual.SerieFolio, Concepto, VentaActual.IdCtaContableCliente, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, CveVentaAmortizacion:=Pago.CveVentaAmortizacion, TipoCambio:=TCValuacion, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + 'movimiento de pago cliente Complementaria + If Not ErrorMovtos AndAlso VentaActual.CveMoneda > 1 Then + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Pago.ImportePagoVenta, (ImporteME * TCValuacion - ImporteME).RoundSQL, CveConceptoContableComplementaria, VentaActual.SerieFolio, Concepto, VentaActual.IdCtaContableClienteComplementaria, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, CveVentaAmortizacion:=Pago.CveVentaAmortizacion, TipoCambio:=TCValuacion, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + End If + + If Pago.AplicaTraslado Then + + 'si tiene iva y su proporcion + If Not ErrorMovtos AndAlso VentaActual.IVA <> 0 Then + ImporteMovimiento = (PorcentajePago * VentaActual.IVA).RoundSQL + ImporteMN = (ImporteMovimiento * VentaActual.TC).RoundSQL + If VentaActual.CveMoneda > 1 Then ImporteME = ImporteMovimiento + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMN, 13, VentaActual.SerieFolio, Concepto, 0, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, PorcentajeImpuesto:=VentaActual.PorcentajeIVA, CvePersonal:=Pago.CvePersonal, TipoCambio:=VentaActual.TC, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe + If FuncionalidadFluctuacionImpuestos Then ImporteMN = (ImporteMovimiento * TCValuacionPago).RoundSQL + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMN, 61, VentaActual.SerieFolio, Concepto, 0, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, PorcentajeImpuesto:=VentaActual.PorcentajeIVA, CvePersonal:=Pago.CvePersonal, TipoCambio:=VentaActual.TC, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + End If + + End If + + 'si tiene RET IVA y su proporcion + If Not ErrorMovtos AndAlso VentaActual.RetIVA > 0 Then + ImporteMovimiento = (PorcentajePago * VentaActual.RetIVA).RoundSQL + ImporteMN = (ImporteMovimiento * VentaActual.TC).RoundSQL + If VentaActual.CveMoneda > 1 Then ImporteME = ImporteMovimiento + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMN, 8, VentaActual.SerieFolio, Concepto, 0, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe + If FuncionalidadFluctuacionImpuestos Then ImporteMN = (ImporteMovimiento * TCValuacionPago).RoundSQL + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMN, 62, VentaActual.SerieFolio, Concepto, 0, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + End If + + 'si tiene Ret ISR y su proporcion + If Not ErrorMovtos AndAlso VentaActual.RetISR > 0 Then + ImporteMovimiento = (PorcentajePago * VentaActual.RetISR).RoundSQL + ImporteMN = (ImporteMovimiento * VentaActual.TC).RoundSQL + If VentaActual.CveMoneda > 1 Then ImporteME = ImporteMovimiento + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMN, 9, VentaActual.SerieFolio, Concepto, 0, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe + If FuncionalidadFluctuacionImpuestos Then ImporteMN = (ImporteMovimiento * TCValuacionPago).RoundSQL + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMN, 63, VentaActual.SerieFolio, Concepto, 0, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + End If + + 'si tiene IEPS y su proporcion + If Not ErrorMovtos AndAlso VentaActual.IEPS > 0 Then + ImporteMovimiento = (PorcentajePago * VentaActual.IEPS).RoundSQL + ImporteMN = (ImporteMovimiento * VentaActual.TC).RoundSQL + If VentaActual.CveMoneda > 1 Then ImporteME = ImporteMovimiento + + Dim Ret As New ConceptosRetenciones + If UsuarioActual.Empresa.TipoContabilidad = 2 Then + If ObjConta.GetRetCuenta(38, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then Ret.IdCtaContableAcreditable = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSAcreditable").ToString.ToEntero + + If ObjConta.GetRetCuenta(39, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then Ret.IdCtaContablexAcreditar = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSxAcreditar").ToString.ToEntero + + End If + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMN, 38, VentaActual.SerieFolio, Concepto, Ret.IdCtaContablexAcreditar, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + 'si tiene funcionalidad para tomar el TC de pago. se recalcula el importe + If FuncionalidadFluctuacionImpuestos Then ImporteMN = (ImporteMovimiento * Pago.TCPago).RoundSQL + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMN, 39, VentaActual.SerieFolio, Concepto, Ret.IdCtaContableAcreditable, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + End If + + If Pago.TipoPago = "A" AndAlso Not ErrorMovtos Then 'A N T I C I P O + Dim Ret As New ConceptosRetenciones + If Pago.CveMonedaPago > 1 Then + 'Agregamos la Extranjera + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Pago.ImportePago, Pago.ImportePago, 11, Pago.Referencia, Concepto, VentaActual.IdCtaContableClienteAnticipo, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, ImporteME:=Pago.ImportePago, TipoCambio:=TCValuacionPago, CveSubProyecto:=VentaActual.CveSubProyecto) Then ErrorMovtos = True + + ImporteMN = (Pago.ImportePago * TCValuacionPago - Pago.ImportePago).RoundSQL + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Pago.ImportePago, ImporteMN, 207, Pago.Referencia, Concepto, VentaActual.IdCtaContableClienteAnticipoComplementaria, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, ImporteME:=Pago.ImportePago, TipoCambio:=TCValuacionPago, CveSubProyecto:=VentaActual.CveSubProyecto) Then ErrorMovtos = True + Else + 'Agregamos Nacional + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Pago.ImportePago, Pago.ImportePago, 11, Pago.Referencia, Concepto, VentaActual.IdCtaContableClienteAnticipoExtranjera, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, TipoCambioPago:=Pago.TCPago) Then ErrorMovtos = True + + End If + + End If + + If Pago.TipoPago = "NC" AndAlso Not ErrorMovtos Then ' N O T A D E C R E D I T O + Dim Ret As New ConceptosRetenciones + If Pago.CveMonedaPago > 1 Then + 'Agregamos la Extranjera + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Pago.ImportePago, Pago.ImportePago, 91, Pago.Referencia, Concepto, VentaActual.IdCtaContableCliente, CveVenta:=Pago.CveVentaAmortizacion, CveVentaAmortizacion:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, ImporteME:=Pago.ImportePago, TipoCambio:=TCValuacionPago, CveSubProyecto:=VentaActual.CveSubProyecto) Then ErrorMovtos = True + + ImporteMN = (Pago.ImportePago * TCValuacionPago - Pago.ImportePago).RoundSQL + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Pago.ImportePago, ImporteMN, 203, Pago.Referencia, Concepto, VentaActual.IdCtaContableClienteComplementaria, CveVenta:=Pago.CveVentaAmortizacion, CveVentaAmortizacion:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, ImporteME:=Pago.ImportePago, TipoCambio:=TCValuacionPago, CveSubProyecto:=VentaActual.CveSubProyecto) Then ErrorMovtos = True + Else + 'Agregamos Nacional + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Pago.ImportePago, Pago.ImportePago, 91, Pago.Referencia, Concepto, VentaActual.IdCtaContableCliente, CveVenta:=Pago.CveVentaAmortizacion, CveVentaAmortizacion:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + End If + + End If + + If Pago.TipoPago = "I" AndAlso Not ErrorMovtos Then 'I N G R E S O S X C O M P R O B A R + + Dim Ret As New ConceptosRetenciones + If UsuarioActual.Empresa.TipoContabilidad = 2 Then + If ObjConta.GetRetCuenta(66, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then Ret.IdCtaContableAcreditable = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSAcreditable").ToString.ToEntero + + If Pago.CveMonedaPago > 1 AndAlso ObjConta.GetRetCuenta(207, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then Ret.IdCtaContablexAcreditar = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSxAcreditar").ToString.ToEntero + + End If + + If Pago.CveMonedaPago > 1 Then + 'Agregamos la Extranjera + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Pago.ImportePago, Pago.ImportePago, 66, Pago.Referencia, Concepto, Ret.IdCtaContableAcreditable, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, ImporteME:=Pago.ImportePago, TipoCambio:=TCValuacionPago, CveSubProyecto:=VentaActual.CveSubProyecto, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + ImporteMN = (Pago.ImportePago * TCValuacionPago - Pago.ImportePago).RoundSQL + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Pago.ImportePago, ImporteMN, 207, Pago.Referencia, Concepto, Ret.IdCtaContablexAcreditar, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, ImporteME:=Pago.ImportePago, TipoCambio:=TCValuacionPago, CveSubProyecto:=VentaActual.CveSubProyecto, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + Else + 'Agregamos Nacional + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Pago.ImportePago, Pago.ImportePago, 66, Pago.Referencia, Concepto, Ret.IdCtaContableAcreditable, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CveSubProyecto:=VentaActual.CveSubProyecto, CvePersonal:=Pago.CvePersonal) Then ErrorMovtos = True + + End If + + End If + + 'si tiene otros gastos/ingresos + ImporteMovimiento = Pago.OtroGastoIngreso + If Not ErrorMovtos AndAlso ImporteMovimiento <> 0 Then + Dim tOtCveCon As Integer = 211 + Dim tOtTipoMovto As Boolean = False + If ImporteMovimiento < 0 Then + tOtTipoMovto = True : tOtCveCon = 78 + ImporteMovimiento = Math.Abs(ImporteMovimiento) + End If + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, tOtTipoMovto, ImporteMovimiento, ImporteMovimiento, tOtCveCon, VentaActual.SerieFolio, Concepto, 0, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, CveSubProyecto:=VentaActual.CveSubProyecto, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True + + End If + + If Not ErrorMovtos AndAlso VentaActual.TC <> Pago.TCPago Then + Dim ConceptoContable, IdCtaContable As Integer + Dim TipoMovimiento As Boolean + Dim Diferencia As Decimal = 0 + + If tImporteVenta <> tImportePago Then + If tImporteVenta > tImportePago Then + ConceptoContable = 64 : IdCtaContable = UsuarioActual.Empresa.IdCuentaGananciaCambiaria + TipoMovimiento = True + Else + ConceptoContable = 65 : IdCtaContable = UsuarioActual.Empresa.IdCuentaPerdidaCambiaria + TipoMovimiento = False + End If + Diferencia = (tImporteVenta - tImportePago).Abs.RoundSQL + + End If + + If FuncionalidadFluctuacionImpuestos Then + Dim TCImpuestos As Decimal = If(FuncionalidadFluctuacionImpuestos, Pago.TCPago, VentaActual.TC) + Diferencia = (Pago.ImportePago * VentaActual.TC) - (Pago.ImportePago * Pago.TCPago) 'Añadimos la diferencia de perdida en la venta + Diferencia -= ((VentaActual.IVA * PorcentajePago) * VentaActual.TC) - ((VentaActual.IVA * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el IVA + Diferencia += ((VentaActual.RetIVA * PorcentajePago) * VentaActual.TC) - ((VentaActual.RetIVA * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el RetIVA + Diferencia += ((VentaActual.RetISR * PorcentajePago) * VentaActual.TC) - ((VentaActual.RetISR * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el RetISR + Diferencia -= ((VentaActual.IEPS * PorcentajePago) * VentaActual.TC) - ((VentaActual.IEPS * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el IEPS + Diferencia = Diferencia.Abs.RoundSQL + End If + + If Diferencia <> 0 Then + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, Diferencia, Diferencia, ConceptoContable, Concepto, Concepto, IdCtaContable, CveVenta:=VentaActual.CveVenta, CveSubProyecto:=VentaActual.CveSubProyecto, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE) Then + ErrorMovtos = True + End If + End If + End If + + Return ErrorMovtos + End Function + + + Public Class VentaPago + Public Property TipoPago As String = "B" ' B - Bancos, A - Anticipos, I - IxC, NC - Nota de crédito + Public FechaDocumentoRelacionado As Date + Public Fecha As Date + Public Property CveIE As Integer = -1 + Public Property CvePersonal As Integer = -1 + Public Property ImportePagoVenta As Decimal = 0 + Public Property ImportePago As Decimal = 0 + Public Property CveMonedaPago As Integer = 1 + Public Property TCPago As Decimal = 1 + Public Property CveVentaAmortizacion As Integer = 0 + Public Property OtroGastoIngreso As Decimal = 0 + Public Property CveConceptoPago As Integer = -1 'no definido de inicio + Public Property CveCreditoDetalle As Integer = -1 + Public Property AplicaTraslado As Boolean = True + Public Property Referencia As String + + End Class + + Public Class Venta + Public Property CveVenta As Integer = -1 + Public Property CveCliente As Integer + Public Property CveMoneda As Integer + Public Property Fecha As Date + Public Property SerieFolio As String = "" + Public Property ClienteNombre As String = "" + Public Property TC As Decimal = 1 + Public Property Total As Decimal + Public Property IVA As Decimal + Public Property IEPS As Decimal + Public Property RetIVA As Decimal + Public Property RetISR As Decimal + Public Property PorcentajeIVA As Decimal + Public Property CveSubProyecto As Integer + Public Property UsuarioActual As Usuario + Public Property IdCtaContableCliente As Integer + Public Property IdCtaContableClienteComplementaria As Integer + Public Property IdCtaContableClienteAnticipo As Integer + Public Property IdCtaContableClienteAnticipoExtranjera As Integer + Public Property IdCtaContableClienteAnticipoComplementaria As Integer + + End Class + +#End Region + + End Class diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index affd10af3..70dc5994f 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -1388,6 +1388,15 @@ Partial Class Ventas End Set End Property + Private Property VentaActual As Venta + Get + Return DirectCast(ViewState("VentaActual"), Venta) + End Get + Set(value As Venta) + ViewState("VentaActual") = value + End Set + End Property + Private Property ListaAnticiposAplicados As List(Of MAnticipoRelacionado) Get Return If(IsNothing(ViewState("ListaAnticiposAplicados")), Nothing, CType(ViewState("ListaAnticiposAplicados"), List(Of MAnticipoRelacionado))) @@ -5055,6 +5064,30 @@ Partial Class Ventas TxtPedidoContrato.Enabled = False TxtKilometraje.Text = DbRowVenta("Kilometraje").ToString().PadLeft(6, "0"c) + + VentaActual = New Venta + VentaActual.CveVenta = CveVenta + VentaActual.CveCliente = DbRowVenta("CveCliente").ToString.ToEntero + VentaActual.CveMoneda = DbRowVenta("CveMoneda").ToString.ToEntero + VentaActual.SerieFolio = DbRowVenta("SerieFolio").ToString + VentaActual.ClienteNombre = DbRowVenta("ClienteNombre").ToString + VentaActual.TC = DbRowVenta("TipoCambio").ToString.ToDecimal + VentaActual.Total = DbRowVenta("Total").ToString.ToDecimal + VentaActual.IVA = DbRowVenta("IVA").ToString.ToDecimal + VentaActual.IEPS = DbRowVenta("IEPS").ToString.ToDecimal + VentaActual.RetIVA = DbRowVenta("RetIVA").ToString.ToDecimal + VentaActual.RetISR = DbRowVenta("RetISR").ToString.ToDecimal + + VentaActual.PorcentajeIVA = DbRowVenta("PorcentajeIVA").ToString.ToDecimal + VentaActual.UsuarioActual = UsuarioActual + VentaActual.CveSubProyecto = DbRowVenta("CveSubProyecto").ToString.ToEntero + VentaActual.IdCtaContableCliente = IIf(VentaActual.CveMoneda = 1, ViewState("IdCtaContClientes"), ViewState("IdCtaContMonedaExtranjera")).ToString.ToEntero + VentaActual.IdCtaContableClienteComplementaria = ViewState("IdCtaContComplementaria").ToString.ToEntero + + VentaActual.IdCtaContableClienteAnticipo = ViewState("IdCtaContAnticipos").ToString.ToEntero + VentaActual.IdCtaContableClienteAnticipoExtranjera = ViewState("IdCtaContAnticiposExtranjera").ToString.ToEntero + VentaActual.IdCtaContableClienteAnticipoComplementaria = ViewState("IdCtaContAnticiposComplementaria").ToString.ToEntero + HdnAmortizacion.Value = LblAmort.Text.ToDouble.ToString() HdnSubTotalDescuestos.Value = (TxtSubTotal.Text.Replace(",", "").ToDouble - LblDescuentos.Text.Replace(",", "").ToDouble - LblAmortizacion.Text.Trim.Replace(",", "").ToDouble - TxtRetISR.Text.Replace(",", "").ToDouble).FormatoNumero(2) 'DdlAmortizacionConceptos.SelectedValue = DbRowVenta("AnticipoPosicion").ToString() @@ -15496,14 +15529,14 @@ Partial Class Ventas Dim ErrorConta As Boolean Dim CveIEAnticipo As Integer Dim CvePlantillaPoliza As Integer = 10 - Dim PorcentajeAmortizacion As Decimal - Dim sumaAmorticaciones As Decimal = 0 - Dim alertaContabilizacion As String = "Se enviaron correctamente las siguientes pólizas:

    " - Dim CveCuentaContabilizacion As Integer = 1 + 'Dim PorcentajeAmortizacion As Decimal + 'Dim sumaAmorticaciones As Decimal = 0 + 'Dim alertaContabilizacion As String = "Se enviaron correctamente las siguientes pólizas:

    " + 'Dim CveCuentaContabilizacion As Integer = 1 Dim CuentasContablesInvalidas As New StringBuilder Dim ContaIdPoliza As Integer = 0 - Dim ConceptoAmortizacion As Integer = 0 - Dim UsaComplementariaClientes As Boolean = True + 'Dim ConceptoAmortizacion As Integer = 0 + 'Dim UsaComplementariaClientes As Boolean = True Dim SimplificaPrePoliza As Boolean = True ''[IPP] PARCHE TEMPORAL PARA ANTICIPOS DE JAM @@ -15532,11 +15565,6 @@ Partial Class Ventas Dim Importe91 As Decimal = 0 - If GlobalDTClasificacionPorcentaje(UsuarioActual.CveEmpresa, PorcentajeIVA:=TmpDT.MAX("PorcentajeIVA").ToDouble).Rows.Count > 0 Then - Dim Dr As DataRow = GlobalDTClasificacionPorcentaje(UsuarioActual.CveEmpresa, PorcentajeIVA:=TmpDT.MAX("PorcentajeIVA").ToDouble).FiltroPrimero("") - IdCtaIVAXTrasladar = Dr("IdCtaIVAXTrasladar").ToString().ToEntero() - IdCtaIVATrasladado = Dr("IdCtaIVATrasladado").ToString().ToEntero() - End If For Each gvr As GridViewRow In GVAnticipos.Rows If gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked Then @@ -15557,7 +15585,6 @@ Partial Class Ventas End If - If DdlMoneda.SelectedValue.ToEntero() = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 1 Then 'SI LA VENTA VIENE EN PESOS Y SE VA A PAGAR EN PESOS tipoCambioPago = 1 tipoCambioVenta = 1 @@ -15580,440 +15607,167 @@ Partial Class Ventas PorcentajePago = (gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal) / gvr.DataKey("Original").ToDecimal End If - If dtConceptos IsNot Nothing Then - For Each Row As DataRow In dtConceptos.Rows + Dim importeMovimiento As Decimal = 0 + Dim importeMN As Decimal = 0 + Dim TC As Decimal + Dim IdCtaContable As Integer + Dim TipoMovimiento As Boolean = True + Dim Concepto As String = VentaActual.SerieFolio + Dim Referencia As String = VentaActual.SerieFolio - Dim ConceptoContable = Row("CveConcepto").ToString().ToEntero() - Dim TipoMovimiento As Boolean = If(Row("TipoMovto").ToString() = "True", True, False) - Dim importeMovimiento As Decimal = 0 - Dim importeMX As Decimal = 0 - Dim IdCtaContable As Integer = 0 - Dim FechaMovimiento As Date = Now - Dim Concepto As String = ViewState("VentaFolio").ToString() - Dim Referencia As String = ViewState("VentaFolio").ToString() - Dim FuncionalidadFluctuacionImpuestos As Boolean = If(UsuarioActual.Empresa.Funcionalidad(159) = "1", True, False) - Dim TipoCambioGeneral As Decimal = 1 - Dim PorcentajeImpuesto As Decimal = 0 + Select Case gvr.DataKey("CveConceptoContable").ToString() + Case "3" + CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() - Select Case ConceptoContable - Case 2 'Cliente - 'If CveMonedaVenta > 1 Then ConceptoContable = 292 - If Not (gvr.DataKey("CveIE").ToString().ToEntero() > 0 AndAlso gvr.DataKey("CveConceptoContable").ToString().ToEntero() = 66) Then - If DdlMoneda.SelectedValue.ToEntero() = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 1 Then - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - importeMX = importeMovimiento - ElseIf DdlMoneda.SelectedValue.ToEntero() = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 1 Then - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - importeMX = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * tipoCambioVentaValuacion - ElseIf DdlMoneda.SelectedValue.ToEntero() = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 2 Then - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - importeMX = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * tipoCambioVentaValuacion - ElseIf DdlMoneda.SelectedValue.ToEntero() = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 2 Then - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - importeMX = importeMovimiento - End If - importeMovimiento = importeMovimiento.RoundSQL - importeMX = importeMX.RoundSQL - TipoCambioGeneral = tipoCambioVentaValuacion + importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("TotalAnticipo").ToDecimal) * gvr.DataKey("IVAAnticipo").ToDecimal) - If CveMonedaVenta = 1 Then - IdCtaContable = IdCtaContClientes - 'CveCuenta = CveCuentaClientes - Else - IdCtaContable = IdCtaContComplementaria - If importeMovimiento <> 0 AndAlso (IdCtaContable > 0 Or UsaComplementariaClientes) Then - 'Conta ContPAQ - If IdCtaContable <= 0 Then - CuentasContablesInvalidas.Append("
    " & GlobalDTContaConceptosContables(-1).FiltroPrimero(String.Format("CveConceptoContable = {0}", ConceptoContable))("ConceptoContable").ToString()) - idCuentaContabilizacion = 0 - End If - - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, 0, Concepto, 207, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, ImporteMX:=Math.Round(importeMovimiento * tipoCambioVenta - importeMovimiento, 2, MidpointRounding.AwayFromZero), ImporteME:=importeMovimiento, TipoCambio:=tipoCambioVentaValuacion, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - - importeMX = importeMovimiento - IdCtaContable = IdCtaContMonedaExtranjera - - End If - - End If - CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() - ConceptoContable = 251 ' cambia para dejar el concepto 2, solamente para pago en banco - - End If - Case 11 'Anticipo - If gvr.DataKey("CveConceptoContable").ToString().ToEntero() = 3 Then - CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() - - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("TotalAnticipo").ToDecimal) * gvr.DataKey("IVAAnticipo").ToDecimal) - 'Mantenemos la integridad de la suma para el pagocliente - 'SumaAnticipos += row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal - 'sumaAmorticaciones += row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal - TipoCambioGeneral = tipoCambioPago - IdCtaContable = IdCtaContAnticipos - - If importeMovimiento <> 0 Then - - 'Conta ContPAQ - If IdCtaContable <= 0 Then - CuentasContablesInvalidas.Append("
    " & GlobalDTContaConceptosContables(-1).FiltroPrimero(String.Format("CveConceptoContable = {0}", ConceptoContable))("ConceptoContable").ToString()) - idCuentaContabilizacion = 0 - End If - - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, importeMovimiento, Concepto, ConceptoContable, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=gvr.DataKey("CveVenta").ToEntero(), CveVentaAmortizacion:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMovimiento * tipoCambioPago, ImporteME:=If(tipoCambioPago = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - End If - - ' PorcentajeAmortizacion = SumaAnticipos / TxtTotal.Text.ToDecimal - 'Los Anticipos solo ocupan los ivas por trasladar - If PorcentajePago > 0 Then - Dim Importe13 = gvr.DataKey("IVA").ToDecimal - Dim Importe8 = gvr.DataKey("RetIVA").ToDecimal - Dim Importe9 = gvr.DataKey("RetISR").ToDecimal - If Not AgregarPrePolizasXTrasladar(ObjConta, CvePrePoliza, PorcentajePago, tipoCambioPago, CuentasContablesInvalidas, idCuentaContabilizacion, CveCuentaContabilizacion, Importe13, Importe8, Importe9) Then - ErrorConta = True - End If - End If - End If - importeMovimiento = 0 - Case 91 'Amortizacion Nota de Credito - Dim TC As Decimal = 1 - If gvr.DataKey("CveConceptoContable").ToEntero() = 12 Then - If CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToEntero = 1 Then - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - importeMX = importeMovimiento - TC = gvr.DataKey("TipoCambio").ToString().ToDecimal - ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToEntero = 2 Then - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - importeMX = importeMovimiento * gvr.DataKey("TipoCambio").ToString().ToDecimal - TC = gvr.DataKey("TipoCambio").ToString().ToDecimal - ElseIf CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToEntero = 2 Then - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal - importeMX = importeMovimiento * gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal - TC = TipoCambioFluctuacion - ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToEntero = 1 Then - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal - importeMX = importeMovimiento - TC = gvr.DataKey("TipoCambio").ToString().ToDecimal - End If - importeMovimiento = importeMovimiento.RoundSQL - importeMX = importeMX.RoundSQL - - If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso ObjConta.GetRetCuenta(ConceptoContable, CveCliente) Then - If ObjConta.DtResultados.Rows.Count > 0 Then - IdCtaContable = ObjConta.DtResultados.Rows(0)("IdCtaContable").ToString().ToEntero() - End If - End If - - If importeMovimiento <> 0 Then - 'Conta ContPAQ - If IdCtaContable <= 0 Then - CuentasContablesInvalidas.Append("
    " & GlobalDTContaConceptosContables(-1).FiltroPrimero(String.Format("CveConceptoContable = {0}", ConceptoContable))("ConceptoContable").ToString()) - idCuentaContabilizacion = 0 - End If - - Dim ImporteComplementaria As Decimal = 0 - If UsaComplementariaClientes = True AndAlso gvr.DataKey("CveMoneda").ToString().ToDecimal > 1 Then - IdCtaContable = IdCtaContComplementaria - importeMX = importeMovimiento - ImporteComplementaria = ((importeMovimiento * TC) - importeMovimiento).RoundSQL - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importeMovimiento, Concepto, 203, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=gvr.DataKey("CveVenta").ToString().ToEntero(), CveCliente:=CveCliente, CveVentaAmortizacion:=CveVenta, ImporteMX:=ImporteComplementaria, ImporteME:=If(gvr.DataKey("TipoCambio").ToString().ToDecimal = 1, 0, importeMovimiento), TipoCambio:=TC, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - Exit For - End If - IdCtaContable = IdCtaContMonedaExtranjera - End If - - If CveMonedaVenta > 1 AndAlso IdCtaContMonedaExtranjera > 0 Then - IdCtaContable = IdCtaContMonedaExtranjera - End If - - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, importeMovimiento, Concepto, ConceptoContable, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=gvr.DataKey("CveVenta").ToString().ToEntero(), CveCliente:=CveCliente, CveVentaAmortizacion:=CveVenta, ImporteMX:=importeMX, TipoCambio:=TC, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - Exit For - End If - - 'AMORTIZA NC CONTRA ANTICIPO A CLIENTES - If Not ErrorConta And DdlTipoComprobante.SelectedValue = "Ant" Then - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("Original").ToDecimal) * gvr.DataKey("IVA").ToDecimal) - If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importeMovimiento, Concepto, 11, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveVentaAmortizacion:=gvr.DataKey("CveVenta").ToString().ToEntero(), ImporteMX:=importeMovimiento) Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, Concepto, 4, Concepto, FechaMovimiento, gvr.DataKey("IdCtaContableNC").ToEntero(), -1, CveClasificacion:=gvr.DataKey("CveClasificacionNC").ToEntero(), CveVenta:=gvr.DataKey("CveVenta").ToString().ToEntero(), CveCliente:=CveCliente, CveVentaAmortizacion:=CveVenta, ImporteMX:=importeMovimiento * TC, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - Exit For - End If - Else - ErrorConta = True - Exit For - End If - End If - End If - End If - Importe91 = importeMovimiento - importeMovimiento = 0 - Case 92 'Amortizacion Ingreso X Comprobar - If gvr.DataKey("CveIE").ToEntero() > 0 AndAlso gvr.DataKey("CveConceptoContable").ToEntero() = 66 Then - CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - IdCtaContable = IdCtaContClientes - - If importeMovimiento <> 0 Then - ' Agregamos el 2 - If tipoCambioPago = 1 Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovimiento, importeMovimiento, Concepto, 2, Concepto, FechaMovimiento, IdCtaContClientes, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMovimiento, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - Else 'Cuando son dolares - If importeMovimiento <> 0 Then - If IdCtaContComplementaria > 0 Or 0 > 0 Then - 'Agregamos la Complementaria - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovimiento, 0, Concepto, 207, Concepto, FechaMovimiento, IdCtaContComplementaria, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=Math.Round(importeMovimiento * tipoCambioVenta - importeMovimiento, 2, MidpointRounding.AwayFromZero), ImporteME:=importeMovimiento, CveCuenta:=0, TipoCambio:=tipoCambioVenta, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - 'Agregamos la Extranjera - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovimiento, importeMovimiento, Concepto, 2, Concepto, FechaMovimiento, IdCtaContMonedaExtranjera, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMovimiento, ImporteME:=importeMovimiento, CveCuenta:=0, TipoCambio:=tipoCambioVenta, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - Else - 'Agregamos la Extranjera - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovimiento, importeMovimiento, Concepto, 2, Concepto, FechaMovimiento, IdCtaContMonedaExtranjera, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=Math.Round(importeMovimiento * tipoCambioVenta, 2, MidpointRounding.AwayFromZero), ImporteME:=importeMovimiento, CveCuenta:=0, TipoCambio:=tipoCambioVenta, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - End If - End If - End If - - importeMovimiento = ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / TxtTotal.Text.ToDecimal) * TxtIVA.Text.ToDecimal) - importeMX = Math.Round(importeMovimiento * tipoCambioPago, 2, MidpointRounding.AwayFromZero) - - If importeMX <> 0 Then - - - 'Agregamos el 13 - - IdCtaContable = If(IdCtaIVAXTrasladar > 0, IdCtaIVAXTrasladar, UsuarioActual.Empresa.IdCuentaIVAxTrasladar) - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, importeMovimiento, Concepto, 13, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMX, TipoCambio:=tipoCambioPago, PorcentajeImpuesto:=PorcentajeImpuestoAmortizacion, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - - 'Agregamos el 61 - - IdCtaContable = If(IdCtaIVATrasladado > 0, IdCtaIVATrasladado, UsuarioActual.Empresa.IdCuentaIVATrasladado) - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovimiento, importeMovimiento, Concepto, 61, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMX, TipoCambio:=tipoCambioPago, PorcentajeImpuesto:=PorcentajeImpuestoAmortizacion, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - End If - - 'IEPS - importeMovimiento = ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / TxtTotal.Text.ToDecimal) * TxtIEPS.Text.ToDecimal) - importeMX = Math.Round(importeMovimiento * tipoCambioPago, 2, MidpointRounding.AwayFromZero) - - If importeMX <> 0 Then - - 'Agregamos el 38 - - IdCtaContable = UsuarioActual.Empresa.IdCuentaIEPSxTrasladar - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, importeMovimiento, Concepto, 38, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMX, TipoCambio:=tipoCambioPago, PorcentajeImpuesto:=PorcentajeImpuestoAmortizacion, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - - 'Agregamos el 39 - - IdCtaContable = UsuarioActual.Empresa.IdCuentaIEPSTrasladado - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovimiento, importeMovimiento, Concepto, 61, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMX, TipoCambio:=tipoCambioPago, PorcentajeImpuesto:=PorcentajeImpuestoAmortizacion, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - End If - - - 'Agregamos el 92 - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal 'gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("TotalAnticipo" & gvr.RowIndex).ToDecimal) * gvr.DataKey("IVAAnticipo").ToDecimal) - importeMX = Math.Round(importeMovimiento * tipoCambioPago, 2, MidpointRounding.AwayFromZero) - IdCtaContable = IdCtaContAnticipos - - If ObjCliente.GetClientes(gvr.DataKey("CveCliente").ToEntero(), "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa) Then - If ObjCliente.DtResultados.Rows.Count > 0 Then - If Not tipoCambioPago = 1 Then - IdCtaContable = ObjCliente.IdCtaMonedaExtranjeraAnticipos - Else - IdCtaContable = ObjCliente.IdCtaContAnticipos - End If - End If - End If - - If UsuarioActual.CveEmpresa.Contiene(119) Then - If gvr.DataKey("Fecha").ToDate.Year <= 2017 AndAlso TxtFechaAnticipoCliente.Text.ToDate.Year >= 2018 Then - If ObjCliente.DtResultados.Rows.Count > 0 Then - If Not tipoCambioPago = 1 Then - IdCtaContable = ObjCliente.IdCtaContMonedaExtranjera - Else - IdCtaContable = ObjCliente.IdCtaContClientes - End If - End If - End If - End If - - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, importeMovimiento, Concepto, ConceptoContable, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMX, CveCuenta:=-1, TipoCambio:=tipoCambioPago, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - End If - - - End If - End If - importeMovimiento = 0 - Case 64 'Ganancia - If CveMonedaVenta <> 1 OrElse gvr.DataKey("CveMoneda").ToEntero() <> 1 Then - IdCtaContable = UsuarioActual.Empresa.IdCuentaGananciaCambiaria - - If CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToString().ToDecimal = 2 Then - - If tipoCambioVentaValuacion > tipoCambioPago AndAlso gvr.DataKey("CveMoneda").ToEntero() = 2 Then - importeMovimiento = Importe91 * (tipoCambioVentaValuacion - tipoCambioPago) 'Añadimos la diferencia de ganancia en la venta - importeMovimiento = Math.Abs(Math.Round(importeMovimiento, 2)) - importeMX = importeMovimiento - End If - - Dim TCImpuestos As Decimal = If(FuncionalidadFluctuacionImpuestos, tipoCambioVentaValuacion, tipoCambioPago) - TipoCambioGeneral = TCImpuestos - Else - Dim TipoCambioGanancia As Decimal = If(Not (gvr.DataKey("CveIE").ToEntero() > 0 AndAlso gvr.DataKey("CveConceptoContable").ToString().ToEntero() = 66), tipoCambioVentaValuacion, tipoCambioVenta) - - If tipoCambioPago > TipoCambioGanancia AndAlso gvr.DataKey("CveMoneda").ToEntero() = 2 Then - importeMovimiento = (gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * tipoCambioPago) - (gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * TipoCambioGanancia) 'Añadimos la diferencia de ganancia en la venta - importeMovimiento = Math.Abs(Math.Round(importeMovimiento, 2)) - importeMX = importeMovimiento - End If - Dim TCImpuestos As Decimal = If(FuncionalidadFluctuacionImpuestos, TipoCambioGanancia, tipoCambioPago) - TipoCambioGeneral = TCImpuestos - End If - - Else - importeMovimiento = 0 - End If - Case 65 'Perdida - If CveMonedaVenta <> 1 OrElse gvr.DataKey("CveMoneda").ToEntero() <> 1 Then - IdCtaContable = UsuarioActual.Empresa.IdCuentaPerdidaCambiaria - - If CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToString().ToDecimal = 2 Then - If tipoCambioVentaValuacion < tipoCambioPago AndAlso gvr.DataKey("CveMoneda").ToEntero() = 2 Then - importeMovimiento = Importe91 * Math.Abs(tipoCambioVentaValuacion - tipoCambioPago) 'Añadimos la diferencia de ganancia en la venta - importeMovimiento = Math.Abs(Math.Round(importeMovimiento, 2)) - importeMX = importeMovimiento - End If - - Dim TCImpuestos As Decimal = If(FuncionalidadFluctuacionImpuestos, tipoCambioVentaValuacion, tipoCambioPago) - TipoCambioGeneral = TCImpuestos - Else - Dim TipoCambioPerdida As Decimal = If(Not (gvr.DataKey("CveIE").ToEntero() > 0 AndAlso gvr.DataKey("CveConceptoContable").ToString().ToEntero() = 66), tipoCambioVentaValuacion, tipoCambioVenta) - - If tipoCambioPago < TipoCambioPerdida AndAlso gvr.DataKey("CveMoneda").ToEntero() = 2 Then - importeMovimiento = (gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * TipoCambioPerdida) - (gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * tipoCambioPago) 'Añadimos la diferencia de perdida en la venta - importeMovimiento = Math.Abs(Math.Round(importeMovimiento, 2)) - importeMX = importeMovimiento - End If - - Dim TCImpuestos As Decimal = If(FuncionalidadFluctuacionImpuestos, TipoCambioPerdida, tipoCambioPago) - TipoCambioGeneral = TCImpuestos - End If - - Else - importeMovimiento = 0 - End If - Case 13 ' IVA x Trasladar - If gvr.DataKey("RegresarImpuesto") = "1" Then - ''gvr.DataKey("DevolucionImportePagado"), de aqui se toma que % de pago tenia la DEV - - CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * gvr.DataKey("DevolucionImportePagado").ToDecimal - PorcentajeImpuesto = TmpDT.MAX("PorcentajeIVA").ToDecimal '(importeMovimiento / TxtTotal.Text.ToDecimal()) 'falta TC - - importeMovimiento = (TxtIVA.Text.ToDecimal * (importeMovimiento / TxtTotal.Text.ToDecimal())).RoundSQL - importeMX = importeMovimiento - IdCtaContable = IdCtaIVAXTrasladar - Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 13, NombreCliente, VentaFolio, "") - 'If importeMovimiento <> 0 Then - ' IdCtaContable = If(IdCtaIVAXTrasladar > 0, IdCtaIVAXTrasladar, UsuarioActual.Empresa.IdCuentaIVAxTrasladar) - 'End If - Else - importeMovimiento = 0 - PorcentajeImpuesto = 0 - End If - - Case 61 ' IVA Trasladado - If gvr.DataKey("RegresarImpuesto") = "1" Then - CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * gvr.DataKey("DevolucionImportePagado").ToDecimal - PorcentajeImpuesto = TmpDT.MAX("PorcentajeIVA").ToDecimal - - importeMovimiento = (TxtIVA.Text.ToDecimal * (importeMovimiento / TxtTotal.Text.ToDecimal())).RoundSQL - importeMX = importeMovimiento - IdCtaContable = IdCtaIVATrasladado - Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 61, NombreCliente, VentaFolio, "") - Else - importeMovimiento = 0 - PorcentajeImpuesto = 0 - End If - - Case 38 ' IEPS x Trasladar - If gvr.DataKey("RegresarImpuesto") = "1" Then - CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * gvr.DataKey("DevolucionImportePagado").ToDecimal - PorcentajeImpuesto = 0 '(importeMovimiento / TxtTotal.Text.ToDecimal()) 'falta TC - - importeMovimiento = (TxtIEPS.Text.ToDecimal * (importeMovimiento / TxtTotal.Text.ToDecimal())).RoundSQL - importeMX = importeMovimiento - If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso importeMovimiento <> 0 AndAlso ObjConta.GetRetCuenta(ConceptoContable, UsuarioActual.CveEmpresa) Then - If ObjConta.DtResultados.Rows.Count > 0 Then - IdCtaContable = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSxTrasladar").ToString().ToEntero() - End If - End If - Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 38, NombreCliente, VentaFolio, "") - Else - importeMovimiento = 0 - PorcentajeImpuesto = 0 - End If - - Case 39 ' IEPS Trasladado - If gvr.DataKey("RegresarImpuesto") = "1" Then - SimplificaPrePoliza = False - CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * gvr.DataKey("DevolucionImportePagado").ToDecimal - PorcentajeImpuesto = 0 - - importeMovimiento = (TxtIEPS.Text.ToDecimal * (importeMovimiento / TxtTotal.Text.ToDecimal())).RoundSQL - importeMX = importeMovimiento - If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso importeMovimiento <> 0 AndAlso ObjConta.GetRetCuenta(ConceptoContable, UsuarioActual.CveEmpresa) Then - If ObjConta.DtResultados.Rows.Count > 0 Then - IdCtaContable = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSTrasladado").ToString().ToEntero() - End If - End If - Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 39, NombreCliente, VentaFolio, "") - Else - importeMovimiento = 0 - PorcentajeImpuesto = 0 - End If - Case Else - importeMovimiento = 0 - PorcentajeImpuesto = 0 - importeMX = 0 - End Select + ' TipoCambioGeneral = tipoCambioPago + ' IdCtaContable = IdCtaContAnticipos If importeMovimiento <> 0 Then - If IdCtaContable <= 0 Then - CuentasContablesInvalidas.Append("
    " & GlobalDTContaConceptosContables(-1).FiltroPrimero(String.Format("CveConceptoContable = {0}", ConceptoContable))("ConceptoContable").ToString()) - idCuentaContabilizacion = 0 - End If - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, importeMovimiento, Referencia, ConceptoContable, Concepto, FechaMovimiento, IdCtaContable, -1, - CveVenta:=CveVenta, CveCliente:=CveCliente, ImporteMX:=importeMX, TipoCambio:=TipoCambioGeneral, CveIE:=CveIEAnticipo, - PorcentajeImpuesto:=PorcentajeImpuesto, CveSubProyecto:=CveSubProyectoVenta) Then - ErrorConta = True - Exit For + Dim Pago As New VentaPago + Pago.ImportePagoVenta = importeMovimiento + Pago.ImportePago = importeMovimiento + Pago.CveIE = CveIEAnticipo + Pago.CveMonedaPago = gvr.DataKey("CveMoneda").ToEntero() + Pago.TipoPago = "A" + Pago.CveVentaAmortizacion = gvr.DataKey("CveVenta").ToEntero() + Pago.AplicaTraslado = gvr.DataKey("RegresarImpuesto") = "1" + Pago.Referencia = gvr.DataKey("Folio") + + ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) + + End If + + Case "12" + + If CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToEntero = 1 Then + importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal + importeMN = importeMovimiento + TC = gvr.DataKey("TipoCambio").ToString().ToDecimal + ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToEntero = 2 Then + importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal + importeMN = importeMovimiento * gvr.DataKey("TipoCambio").ToString().ToDecimal + TC = gvr.DataKey("TipoCambio").ToString().ToDecimal + ElseIf CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToEntero = 2 Then + importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal + importeMN = importeMovimiento * gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal + TC = TipoCambioFluctuacion + ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToEntero = 1 Then + importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal * gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal + importeMN = importeMovimiento + TC = gvr.DataKey("TipoCambio").ToString().ToDecimal + End If + importeMovimiento = importeMovimiento.RoundSQL + importeMN = importeMN.RoundSQL + + If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso ObjConta.GetRetCuenta(12, CveCliente) Then + If ObjConta.DtResultados.Rows.Count > 0 Then + IdCtaContable = ObjConta.DtResultados.Rows(0)("IdCtaContable").ToString().ToEntero() End If End If - Next - End If + + If importeMovimiento <> 0 Then + + Dim Pago As New VentaPago + Pago.Fecha = TxtFechaAnticipoCliente.Text.ToDate + Pago.FechaDocumentoRelacionado = gvr.DataKey("Fecha").ToDate + Pago.ImportePagoVenta = importeMovimiento + Pago.ImportePago = importeMovimiento + Pago.CveIE = CveIEAnticipo + Pago.CveMonedaPago = gvr.DataKey("CveMoneda").ToEntero() + Pago.TCPago = gvr.DataKey("TipoCambio").ToDecimal + Pago.TipoPago = "NC" + Pago.CveVentaAmortizacion = gvr.DataKey("CveVenta").ToEntero() + Pago.AplicaTraslado = gvr.DataKey("RegresarImpuesto") = "1" + + ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) + SimplificaPrePoliza = False + End If + + Case "66" + If gvr.DataKey("CveIE").ToEntero() > 0 Then + CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() + importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal + IdCtaContable = IdCtaContClientes + + If importeMovimiento <> 0 Then + + Dim Pago As New VentaPago + Pago.ImportePago = importeMovimiento + Pago.CveIE = CveIEAnticipo + Pago.CveMonedaPago = gvr.DataKey("CveMoneda").ToEntero() + Pago.TipoPago = "A" + Pago.CveVentaAmortizacion = gvr.DataKey("CveVenta").ToEntero() + Pago.AplicaTraslado = gvr.DataKey("RegresarImpuesto") = "1" + + ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) + + ' Agregamos el 2 + If tipoCambioPago = 1 Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovimiento, importeMovimiento, Concepto, 2, Concepto, Now, IdCtaContClientes, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMovimiento, CveSubProyecto:=CveSubProyectoVenta) Then + ErrorConta = True + End If + Else 'Cuando son dolares + If importeMovimiento <> 0 Then + If IdCtaContComplementaria > 0 Or 0 > 0 Then + 'Agregamos la Complementaria + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovimiento, 0, Concepto, 207, Concepto, Now, IdCtaContComplementaria, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=Math.Round(importeMovimiento * tipoCambioVenta - importeMovimiento, 2, MidpointRounding.AwayFromZero), ImporteME:=importeMovimiento, CveCuenta:=0, TipoCambio:=tipoCambioVenta, CveSubProyecto:=CveSubProyectoVenta) Then + ErrorConta = True + End If + 'Agregamos la Extranjera + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovimiento, importeMovimiento, Concepto, 2, Concepto, Now, IdCtaContMonedaExtranjera, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMovimiento, ImporteME:=importeMovimiento, CveCuenta:=0, TipoCambio:=tipoCambioVenta, CveSubProyecto:=CveSubProyectoVenta) Then + ErrorConta = True + End If + Else + 'Agregamos la Extranjera + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovimiento, importeMovimiento, Concepto, 2, Concepto, Now, IdCtaContMonedaExtranjera, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=Math.Round(importeMovimiento * tipoCambioVenta, 2, MidpointRounding.AwayFromZero), ImporteME:=importeMovimiento, CveCuenta:=0, TipoCambio:=tipoCambioVenta, CveSubProyecto:=CveSubProyectoVenta) Then + ErrorConta = True + End If + End If + End If + End If + + importeMovimiento = ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / TxtTotal.Text.ToDecimal) * TxtIVA.Text.ToDecimal) + importeMN = Math.Round(importeMovimiento * tipoCambioPago, 2, MidpointRounding.AwayFromZero) + + + 'Agregamos el 92 + importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal 'gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("TotalAnticipo" & gvr.RowIndex).ToDecimal) * gvr.DataKey("IVAAnticipo").ToDecimal) + importeMN = Math.Round(importeMovimiento * tipoCambioPago, 2, MidpointRounding.AwayFromZero) + IdCtaContable = IdCtaContAnticipos + + If ObjCliente.GetClientes(gvr.DataKey("CveCliente").ToEntero(), "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa) Then + If ObjCliente.DtResultados.Rows.Count > 0 Then + If Not tipoCambioPago = 1 Then + IdCtaContable = ObjCliente.IdCtaMonedaExtranjeraAnticipos + Else + IdCtaContable = ObjCliente.IdCtaContAnticipos + End If + End If + End If + + If UsuarioActual.CveEmpresa.Contiene(119) Then + If gvr.DataKey("Fecha").ToDate.Year <= 2017 AndAlso TxtFechaAnticipoCliente.Text.ToDate.Year >= 2018 Then + If ObjCliente.DtResultados.Rows.Count > 0 Then + If Not tipoCambioPago = 1 Then + IdCtaContable = ObjCliente.IdCtaContMonedaExtranjera + Else + IdCtaContable = ObjCliente.IdCtaContClientes + End If + End If + End If + End If + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, importeMovimiento, Concepto, 555, Concepto, Now, IdCtaContable, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteMX:=importeMN, CveCuenta:=-1, TipoCambio:=tipoCambioPago, CveSubProyecto:=CveSubProyectoVenta) Then + ErrorConta = True + End If + + End If + End If + End Select + End If Next Else From d4de703003ccb75940c9a14aa222575b97ca5f19 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Tue, 16 Aug 2022 09:14:36 -0700 Subject: [PATCH 12/28] --- RH/CalculoSBC.aspx | 20 ++++++++++++++++---- RH/Personal.aspx | 34 +++++++++++++++++----------------- RH/Personal.aspx.vb | 6 +++++- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/RH/CalculoSBC.aspx b/RH/CalculoSBC.aspx index 70e8fd98a..1b04dfa5a 100644 --- a/RH/CalculoSBC.aspx +++ b/RH/CalculoSBC.aspx @@ -328,7 +328,11 @@ - + + + Fecha alta
    + o reingreso +
    @@ -353,12 +357,20 @@
    - + + + Percepciones
    + variables +
    - + + + Días
    + incapacidad +
    @@ -487,7 +499,7 @@
    - + diff --git a/RH/Personal.aspx b/RH/Personal.aspx index 0e3d14f19..d5861ca53 100644 --- a/RH/Personal.aspx +++ b/RH/Personal.aspx @@ -63,7 +63,7 @@ Agregar buzón de calidad
  • - Activar + Reingreso Desactivar
  • @@ -664,16 +664,6 @@
    -
    - - - <%-- - - --%> - - <%----%> - -
    Proyecto: @@ -704,6 +694,16 @@
    +
    + + + <%-- + + --%> + + <%----%> + +
    @@ -5657,7 +5657,9 @@
    + + +
    diff --git a/RH/Personal.aspx.vb b/RH/Personal.aspx.vb index 4f0d1d4a6..0edc84b8a 100644 --- a/RH/Personal.aspx.vb +++ b/RH/Personal.aspx.vb @@ -7452,7 +7452,11 @@ Partial Class RH_Personal End If End If - + If continuar Then + Using objrh As New ClsRH + continuar = objrh.estatusPersonalUp(fecha, CvePersonal, estatus, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) + End Using + End If If continuar Then From 511f71de49e9abd2e87580a85c53cc8a0adaeb81 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 16 Aug 2022 22:02:44 -0700 Subject: [PATCH 13/28] -- mejora es RSCO --- App_Code/ClsInventarios.vb | 7 +++-- Inventarios/RepProductosPorCaducar.aspx | 1 + Inventarios/RepRSCO.aspx | 40 +++++++++++-------------- Inventarios/RepRSCO.aspx.vb | 13 ++++---- 4 files changed, 27 insertions(+), 34 deletions(-) diff --git a/App_Code/ClsInventarios.vb b/App_Code/ClsInventarios.vb index 6bc4d1389..1852ebb92 100644 --- a/App_Code/ClsInventarios.vb +++ b/App_Code/ClsInventarios.vb @@ -5963,7 +5963,7 @@ Public Class ClsInventarios - Public Function RepCompuestosVigencia(CveCompuesto As Integer, CveProveedor As Integer, FechaI As Date, FechaF As Date, VigenciaIndeterminada As Boolean, CveEmpresa As Integer, Optional ConCaducidad As Boolean = False) As Boolean + Public Function RepCompuestosVigencia(CveCompuesto As Integer, CveProveedor As Integer, FechaI As Date, FechaF As Date, VigenciaIndeterminada As Boolean, CveEmpresa As Integer, CveAlmacen As Integer, CveUsuario As Integer, Optional ConCaducidad As Boolean = False) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_CompuestosVigenciaRep") @@ -5975,9 +5975,10 @@ Public Class ClsInventarios .Add("@FechaI", SqlDbType.Date).Value = FechaI .Add("@FechaF", SqlDbType.Date).Value = FechaF .Add("@VigenciaIndeterminada", SqlDbType.Int).Value = VigenciaIndeterminada + .Add("@CveAlmacen", SqlDbType.Int).Value = CveAlmacen .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa - .Add("@ConCaducidad", SqlDbType.Bit).Value = ConCaducidad - + .Add("@ConCaducidad", SqlDbType.Bit).Value = If(ConCaducidad, 1, 0) + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario End With Try diff --git a/Inventarios/RepProductosPorCaducar.aspx b/Inventarios/RepProductosPorCaducar.aspx index 69bd14031..451465fb4 100644 --- a/Inventarios/RepProductosPorCaducar.aspx +++ b/Inventarios/RepProductosPorCaducar.aspx @@ -179,6 +179,7 @@ + diff --git a/Inventarios/RepRSCO.aspx b/Inventarios/RepRSCO.aspx index 5f9149377..ae968ebcf 100644 --- a/Inventarios/RepRSCO.aspx +++ b/Inventarios/RepRSCO.aspx @@ -90,41 +90,35 @@
    - - - - +
    -
    - - - - - - - - + + EmptyDataText="No se Encontraron Registros" ToolTip="Listado de Unidades" CssClass="table table-striped table-advance table-hover mysmallbtn ScrollAD " data-sort="true" Style="width: 100%" GridLines="None"> - - - - - - - - - + + + + + + + diff --git a/Inventarios/RepRSCO.aspx.vb b/Inventarios/RepRSCO.aspx.vb index ddd0ca648..720d140d6 100644 --- a/Inventarios/RepRSCO.aspx.vb +++ b/Inventarios/RepRSCO.aspx.vb @@ -36,7 +36,7 @@ Partial Class Inventarios_RepRSCO LnkDescargaExcel.Visible = False - If ObjInventarios.RepCompuestosVigencia(DdlCompuesto.SelectedValue.ToEntero, DdlProveedores.SelectedValue.ToEntero, txtFechaI.Text.ToDate, txtFechaF.Text.ToDate, 1, UsuarioActual.CveEmpresa) Then + If ObjInventarios.RepCompuestosVigencia(DdlCompuesto.SelectedValue.ToEntero, DdlProveedores.SelectedValue.ToEntero, txtFechaI.Text.ToDate, txtFechaF.Text.ToDate, 1, UsuarioActual.CveEmpresa, ddlAlmacen.SelectedValue.ToEntero, UsuarioActual.CveUsuario) Then DTDatos = ObjInventarios.DtResultados GvDatos.DataSource = DTDatos @@ -63,6 +63,10 @@ Partial Class Inventarios_RepRSCO DdlProveedores.SelectedText = "Todos" DdlProveedores.SelectedValue = "-1" + ddlAlmacen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + ddlAlmacen.DataBind() + ddlAlmacen.Items.Insert(0, New ListItem("Todos", "-1")) + ddlAlmacen.SelectedValue = "-1" Dim ObjPS As New ClsProductosServicios @@ -80,15 +84,8 @@ Partial Class Inventarios_RepRSCO txtFechaF.Text = Now.ToString("dd/MM/yyyy") txtFechaI.Text = txtFechaF.Text.ToDate.AddMonths(-2).ToString("dd/MM/yyyy") - - End Sub - - - - - Protected Sub LnkDescargaExcel_Click(sender As Object, e As EventArgs) ImprimirReporte("EXCEL") End Sub From 2b898c58e5833a6a47f6fe807328e648ba0e2691 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 16 Aug 2022 22:03:02 -0700 Subject: [PATCH 14/28] -- mejora pago compra --- App_Code/ClsPaginas.vb | 4 ++-- Compras/ReembolsosComprobaciones.aspx.vb | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index f8f0acc7a..ffee09df2 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -9861,6 +9861,8 @@ Public Class ClsPaginas If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMN, 39, VentaActual.SerieFolio, Concepto, Ret.IdCtaContableAcreditable, CveVenta:=VentaActual.CveVenta, CveCliente:=VentaActual.CveCliente, CveIE:=Pago.CveIE, CvePersonal:=Pago.CvePersonal, TipoCambioPago:=Pago.TCPago, ImporteME:=ImporteME) Then ErrorMovtos = True End If + 'concepto pago + Concepto = String.Format("{0} NC:{1}", VentaActual.ClienteNombre, Pago.Referencia) If Pago.TipoPago = "A" AndAlso Not ErrorMovtos Then 'A N T I C I P O Dim Ret As New ConceptosRetenciones @@ -9895,11 +9897,9 @@ Public Class ClsPaginas End If If Pago.TipoPago = "I" AndAlso Not ErrorMovtos Then 'I N G R E S O S X C O M P R O B A R - Dim Ret As New ConceptosRetenciones If UsuarioActual.Empresa.TipoContabilidad = 2 Then If ObjConta.GetRetCuenta(66, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then Ret.IdCtaContableAcreditable = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSAcreditable").ToString.ToEntero - If Pago.CveMonedaPago > 1 AndAlso ObjConta.GetRetCuenta(207, UsuarioActual.CveEmpresa) AndAlso ObjConta.DtResultados.Rows.Count > 0 Then Ret.IdCtaContablexAcreditar = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSxAcreditar").ToString.ToEntero End If diff --git a/Compras/ReembolsosComprobaciones.aspx.vb b/Compras/ReembolsosComprobaciones.aspx.vb index 64faacc41..a682a10fd 100644 --- a/Compras/ReembolsosComprobaciones.aspx.vb +++ b/Compras/ReembolsosComprobaciones.aspx.vb @@ -723,6 +723,7 @@ Partial Class Compras_ReembolsosComprobaciones CveIEPago = 0 Dim FolioIENew = ObjIE.GetNextFolio(CveCajaChica, 6).ToString CveIEPago = ObjIE.AddBancos_IE(CveCajaChica, 6, If(ChkReembolsarSinBancos.Checked, TxtFechaPrePoliza.Text.ToDate, TxtFechaDocumento.Text.ToDate), FolioIENew, gvr.DataKey("Proveedor"), ImporteMovto, CveMoneda, 0.0, $"{gvr.DataKey("Proveedor")} F:{gvr.DataKey("SerieFolio")} {If(DdlPersonal.Visible, DdlPersonal.SelectedItem.Text, DdlCajaChica.SelectedItem.Text)}", "", False, True, -1, CvePrePolizaPago, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, FueConciliado:=If(ChkReembolsarSinBancos.Checked Or CveCajaChica > 0, True, False)) + TipoCambioPago = 1 Else CveIEPago = CveIERegistrado End If @@ -746,10 +747,10 @@ Partial Class Compras_ReembolsosComprobaciones If Not ObjMov.AddPrePolizasDetalle(CvePrePolizaPago, True, ImporteMovto, Referencia, If(CveCajaChica > 0, 30, 29), ConceptoMovimiento, gvr.FCLiteral("LtlFecha").Text.ToDate, If(CveCajaChica > 0, IdCuentaBancaria, IdCtaPersonal), -1, CveIE:=CveIEPago, CveIEDevolucion:=If(CveCajaChica > 0, If(DDlCheques.SelectedValue.ToEntero = -1, CveIECajaChica, DDlCheques.SelectedValue.ToEntero), -1), CvePersonal:=CvePersonal, CveCompra:=gvr.FCHyperLink("HplF2").Text.ToEntero, CveProveedor:=gvr.FCHyperLink("HLProv").Text.ToEntero, ImporteME:=If(tipoCambio = 1, 0, ImporteMovto), ImporteMX:=ImporteMovto * tipoCambio, CvePrePolizaOriginal:=CvePrePolizaPagoOriginal, Contabilizable:=If(CveCajaChica > 0 Or CvePersonal > 0, Not UsaSimplificacionCajaChica, True)) Then MsgError = "Detalle" End If - Else - If AplicaPrePolizaPago(CompraActual, Pago, CvePrePolizaPago, ObjMov) Then - MsgError = "Detalle" - End If + End If + + If AplicaPrePolizaPago(CompraActual, Pago, CvePrePolizaPago, ObjMov) Then + MsgError = "Detalle" End If End If From 79691a0747969ca9b086f5fb58e1b9b96157f965 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 16 Aug 2022 22:05:48 -0700 Subject: [PATCH 15/28] =?UTF-8?q?--=20E119-=20se=20quit=C3=B3=20la=20fucni?= =?UTF-8?q?onalidad=20para=20limitar=20el=20uso=20de=20=20lote/cad=20por?= =?UTF-8?q?=20sucursal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inventarios/EntradasSalidas.aspx.vb | 15 --------------- Inventarios/EntregaAlmacen.aspx.vb | 11 ----------- Inventarios/RecepcionAlmacen.aspx.vb | 10 ---------- Inventarios/TraspasoAlmacen.aspx.vb | 14 ++------------ 4 files changed, 2 insertions(+), 48 deletions(-) diff --git a/Inventarios/EntradasSalidas.aspx.vb b/Inventarios/EntradasSalidas.aspx.vb index c57e02d42..5cb82bd97 100644 --- a/Inventarios/EntradasSalidas.aspx.vb +++ b/Inventarios/EntradasSalidas.aspx.vb @@ -1411,12 +1411,6 @@ Partial Class Inventarios_EntradasSalidas tCveSubProyecto = drA2("CveSubProyecto").ToString.ToEntero End If - If UsuarioActual.CveEmpresa = 119 AndAlso Not tCveSubProyecto.ToString.Contiene(UsuarioActual.Empresa.Funcionalidad(347).Split(","c)) Then - FechaCaducidadVal = MinFecha - FechaCaducidad = MinFecha - Lote = "" - End If - 'salida If Valido AndAlso DdlConcepto.SelectedValue.Contiene({"3", "5", "7", "8", "11", "12", "13", "15", "16", "17", "20", "21", "30", "31"}) Then ' salida de almacen @@ -4682,11 +4676,6 @@ Partial Class Inventarios_EntradasSalidas Dim CveSubProyectoAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacenInventarioFisico.SelectedValue.ToEntero).FiltroPrimeroValor("CveSubProyecto").ToString.ToEntero - If UsuarioActual.CveEmpresa = 119 AndAlso Not CveSubProyectoAlmacen.ToString.Contiene(UsuarioActual.Empresa.Funcionalidad(347).Split(","c)) Then - AplicaLote = False - AplicaCaducidad = False - End If - 'activa seccion ThSeccionEntrada.Visible = AplicaSeccion TrSeccionEntrada.Visible = AplicaSeccion @@ -4724,10 +4713,6 @@ Partial Class Inventarios_EntradasSalidas Dim CveSubProyectoAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacenInventarioFisico.SelectedValue.ToEntero).FiltroPrimeroValor("CveSubProyecto").ToString.ToEntero - If UsuarioActual.CveEmpresa = 119 AndAlso Not CveSubProyectoAlmacen.ToString.Contiene(UsuarioActual.Empresa.Funcionalidad(347).Split(","c)) Then - AplicaLote = False - AplicaCaducidad = False - End If 'activa seccion ThSeccionSalida.Visible = AplicaSeccion TrSeccionSalida.Visible = AplicaSeccion diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 66162fb19..bab5eb6ef 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -665,17 +665,6 @@ Partial Class Inventarios_EntregaAlmacen End If End If - If UsuarioActual.CveEmpresa = 119 Then - Dim CveSubProyectoAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacen).FiltroPrimeroValor("CveSubProyecto", "").ToEntero - - If CveSubProyectoAlmacen.ToString.Contiene(UsuarioActual.Empresa.Funcionalidad(347).Split(","c)) Then - ValidaLoteCaducidad = True - Else - ValidaLoteCaducidad = False - End If - - End If - If Not DtDatos.Columns.Contains("Serie") Then DtDatos.Columns.Add("Serie", GetType(String)) If Not DtDatos.Columns.Contains("Lote") Then DtDatos.Columns.Add("Lote", GetType(String)) diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index c6c6fc156..81721ec42 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -606,21 +606,11 @@ Partial Class Inventarios_RecepcionAlmacen Dim drr As DataRow = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacen.SelectedValue.ToEntero).FiltroPrimero("") If drr IsNot Nothing Then - '("CveSubProyecto").ToEntero - Dim CveSubProyecto As Integer = drr("CveSubProyecto").ToString.ToEntero - 'RMF condición temporal - If UsuarioActual.CveEmpresa = 119 AndAlso CveSubProyecto.ToString.Contiene(UsuarioActual.Empresa.Funcionalidad(347).Split(","c)) Then - ValidaLoteCaducidad = True - Else - ValidaLoteCaducidad = False - End If CveTipoAlmacen = drr("CveTipoAlmacen").ToString.ToEntero End If - - CargaGVInv() 'For Each Gvr As GridViewRow In GvInv.Rows ' If Gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue = "-1" Then diff --git a/Inventarios/TraspasoAlmacen.aspx.vb b/Inventarios/TraspasoAlmacen.aspx.vb index f4ea14462..4e5b5d322 100644 --- a/Inventarios/TraspasoAlmacen.aspx.vb +++ b/Inventarios/TraspasoAlmacen.aspx.vb @@ -597,14 +597,14 @@ Partial Class Inventarios_TraspasoAlmacen 'codigo provisional. Dim CveSubP As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=DdlAlmacenOrigen.SelectedValue.ToEntero).FiltroPrimeroValor("CveSubProyecto", "").ToEntero - If DrPS("AplicaCaducidad").ToString = "True" AndAlso CveSubP.ToString.Contiene(UsuarioActual.Empresa.Funcionalidad(347).Split(","c)) Then + If DrPS("AplicaCaducidad").ToString = "True" Then If Not ChkSugiereFechaCaducidad.Checked AndAlso (TxtnFechaCaducidad.Text = "" OrElse TxtnLote.Text = "") Then Alert("Falta Especificar lote/Fecha del producto", TipoMensaje.MsgAdvertencia) Exit Sub End If End If - If DrPS("AplicaCaducidad").ToString = "True" AndAlso ChkSugiereFechaCaducidad.Checked And CveSubP.ToString.Contiene(UsuarioActual.Empresa.Funcionalidad(347).Split(","c)) Then + If DrPS("AplicaCaducidad").ToString = "True" AndAlso ChkSugiereFechaCaducidad.Checked Then Dim ObjInventarios As New ClsInventarios If ObjInventarios.GetExistenciasCaducidad(CveProducto, DdlAlmacenOrigen.SelectedValue.ToEntero, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, DdlAlmacenOrigen.SelectedValue) Then @@ -641,11 +641,6 @@ Partial Class Inventarios_TraspasoAlmacen tLote = If(TxtnLote.Visible, TxtnLote.Text, "-1") tCaducidad = If(TxtnFechaCaducidad.Visible, TxtnFechaCaducidad.Text.ToDate, MinFecha) - If Not CveSubP.ToString.Contiene(UsuarioActual.Empresa.Funcionalidad(347).Split(","c)) Then - tLote = "-1" - tCaducidad = MinFecha - End If - Dim tSerie As String = If(TxtnSerie.Visible, TxtnSerie.Text, "-1") Dim Valido = ValidaExistencia(Cantidad, CveProducto, DdlUnidad.SelectedValue.ToEntero, DdlSeccionAlmacen.SelectedValue.ToEntero, tSerie, tLote, tCaducidad) @@ -2127,11 +2122,6 @@ Partial Class Inventarios_TraspasoAlmacen Dim tSerie As String = gvr.FCTextBox("TxtSerie").Text 'gvr.DataKey("Serie").ToString Dim tFechaCaducidad As Date = gvr.DataKey("FechaCaducidad").ToDate - If CveSubProyectoRecibe.ToString.Contiene(UsuarioActual.Empresa.Funcionalidad(347).Split(","c)) Then - tLote = gvr.FCTextBox("TxtLote").Text - tFechaCaducidad = gvr.FCTextBox("TxtCaducidad").Text.ToDate - End If - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, gvr.FCTextBox("TxtCantidad").Text.ToString.ToDecimal, gvr.DataKey("CveUM").ToString.ToEntero, gvr.DataKey("CvePS").ToString.ToEntero, PrecioEntrada, CveAF:=gvr.DataKey("CveAF").ToString.ToEntero, CveSeccionAlmacen:=gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue.ToEntero, Serie:=tSerie, Lote:=tLote, FechaCaducidad:=tFechaCaducidad, CveMovimientoDetalleEntrada:=CveMovimientoDetalleEntrada) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de salida" From 4ab11944a91a892be1b2ba245b07e46bb09b082e Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 16 Aug 2022 22:38:31 -0700 Subject: [PATCH 16/28] -- cambio en el nombre oc a oc_oc --- OC/OC.aspx | 2 +- OC/OC.aspx.vb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OC/OC.aspx b/OC/OC.aspx index 0f3e4323b..65afc2c17 100644 --- a/OC/OC.aspx +++ b/OC/OC.aspx @@ -1,4 +1,4 @@ -<%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="OC.aspx.vb" EnableEventValidation="false" Inherits="OC" %> +<%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="OC.aspx.vb" EnableEventValidation="false" Inherits="OC_OC" %> diff --git a/OC/OC.aspx.vb b/OC/OC.aspx.vb index 5348222a8..09e76310d 100644 --- a/OC/OC.aspx.vb +++ b/OC/OC.aspx.vb @@ -6,7 +6,7 @@ Imports Extensiones Imports GemBox.Spreadsheet Imports Newtonsoft.Json -Partial Class OC +Partial Class OC_OC Inherits ClsPaginas Private Shared missing As Object = System.Reflection.Missing.Value From bcf39c08737ee8fa9d2ff9813a1c5e364b32b0bb Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Wed, 17 Aug 2022 01:24:22 -0700 Subject: [PATCH 17/28] --- App_Code/ClsNominas.vb | 3 ++- App_Code/LogicNominas.vb | 4 ++-- Nomina/Nomina.aspx.cs | 3 +++ RH/CalculoSBC.aspx | 5 +++++ SAT/SolicitudesNominaSat.aspx | 10 +++++++++- SAT/SolicitudesNominaSat.aspx.cs | 22 +++++++++++----------- vwd.webinfo | 4 ++++ 7 files changed, 36 insertions(+), 15 deletions(-) diff --git a/App_Code/ClsNominas.vb b/App_Code/ClsNominas.vb index f317b2d84..a2d3ffa62 100644 --- a/App_Code/ClsNominas.vb +++ b/App_Code/ClsNominas.vb @@ -3205,10 +3205,11 @@ Public Class ClsNominas End Function #Region "Visor sat" - Public Function SATSolicitudTimbreNominaGral(IDsolicitud As Integer, cveEmpresa As Integer, fechaInicio As String, fechaFin As String) As Boolean + Public Function SATSolicitudTimbreNominaGral(IDsolicitud As Integer, cveEmpresa As Integer, fechaInicio As String, fechaFin As String, TipoNomina As Integer) As Boolean Dim retorno As Boolean = False DataAdapter("[PA_SAT_SolicitudTimbreNominaGral]", CommandType.StoredProcedure) addParameters("@IDsolicitud", SqlDbType.Int, IDsolicitud) + addParameters("@TipoNomina", SqlDbType.Int, TipoNomina) addParameters("@CveEmpresa", SqlDbType.Int, cveEmpresa) addParameters("@FechaInicio", SqlDbType.VarChar, fechaInicio) addParameters("@FechaFin", SqlDbType.VarChar, fechaFin) diff --git a/App_Code/LogicNominas.vb b/App_Code/LogicNominas.vb index a7b7cb98b..55071651d 100644 --- a/App_Code/LogicNominas.vb +++ b/App_Code/LogicNominas.vb @@ -206,9 +206,9 @@ Public Class LogicNominas End If If continuar AndAlso objNomina.GetNom_NominasDetalles(CveNomina, CvePersonal, CvePeriodo, "-1") Then If objNomina.DtResultados.Rows.Count > 0 Then - Dim filtropercepciones As String = "Tipo = 'P' AND EsPadre = 1 AND SoloVisible =0 AND SATCveConcepto NOT IN ('022', '023','025')" + Dim filtropercepciones As String = "Tipo = 'P' AND EsPadre = 1 AND SoloVisible =0 AND (TipoConceptoSAT<>'O' OR TipoConceptoSAT IS NULL) AND SATCveConcepto NOT IN ('022', '023','025')" If TimbreIndemnizacion Then - filtropercepciones = " Tipo = 'P' AND SATCveConcepto IN ('022', '023','025')" + filtropercepciones = " Tipo = 'P' AND SATCveConcepto IN ('022', '023','025') AND (TipoConceptoSAT<>'O' OR TipoConceptoSAT IS NULL) " End If DtPercepciones = objNomina.DtResultados.FiltraParametros(filtropercepciones) Dim filtrodeduc As String = "Tipo = 'D' AND EsPadre = 1 AND SoloVisible =0 AND (TipoConceptoSAT<>'O' OR TipoConceptoSAT IS NULL) AND CveSistema <> 47" diff --git a/Nomina/Nomina.aspx.cs b/Nomina/Nomina.aspx.cs index 840e92404..d156afc20 100644 --- a/Nomina/Nomina.aspx.cs +++ b/Nomina/Nomina.aspx.cs @@ -1570,6 +1570,7 @@ public partial class Nomina_Nomina2 : ClsPaginas CveMotivoCancelacion = rowc["CveSATMotivoCancelacion"].ToString().ToEntero(); } var reultado = ObjTimbrado.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, Total, RFCReceptor, RFCEmisor, 4, CveSATMotivoCancelacion: CveMotivoCancelacion); + string.Format("CveNomina:{0},RFC{3}, FolioFiscal:{1},Resultado :{2}", CveNomina, FolioFiscal, Newtonsoft.Json.JsonConvert.SerializeObject(reultado), RFCReceptor).GuardaLog(); if (reultado.Verificado)//,CveSATMotivoCancelacion:= { try @@ -1603,6 +1604,7 @@ public partial class Nomina_Nomina2 : ClsPaginas else { reultado = ObjTimbrado.CFDICancelar(UsuarioActual.Empresa, FolioFiscalFiniquito, Total, RFCReceptor, RFCEmisor, 4, CveSATMotivoCancelacion: CveMotivoCancelacion); + string.Format("CveNomina:{0},RFC{3}, FolioFiscal:{1},Resultado :{2}", CveNomina, FolioFiscal, Newtonsoft.Json.JsonConvert.SerializeObject(reultado), RFCReceptor).GuardaLog(); if (reultado.Verificado)//,CveSATMotivoCancelacion:= { try @@ -8306,6 +8308,7 @@ public partial class Nomina_Nomina2 : ClsPaginas string RFCReceptor = TxtRFCReceptor.Text; string RFCEmisor = TxtRFCEmisor.Text; var resultado = ObjTimbrado.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, Total, RFCReceptor, RFCEmisor, 4); + string.Format("CveNomina:{0},RFC{3}, FolioFiscal:{1},Resultado :{2}", -1, FolioFiscal, Newtonsoft.Json.JsonConvert.SerializeObject(resultado), RFCReceptor).GuardaLog(); if (resultado.Verificado) { Alert($"La nómina con folio fiscal '{FolioFiscal}' fue cancelada ante el SAT", TipoMensaje.MsgInformacion); diff --git a/RH/CalculoSBC.aspx b/RH/CalculoSBC.aspx index 1b04dfa5a..3c4ccae4a 100644 --- a/RH/CalculoSBC.aspx +++ b/RH/CalculoSBC.aspx @@ -291,6 +291,11 @@ + + + + + diff --git a/SAT/SolicitudesNominaSat.aspx b/SAT/SolicitudesNominaSat.aspx index d4ec0e936..f46d5c7db 100644 --- a/SAT/SolicitudesNominaSat.aspx +++ b/SAT/SolicitudesNominaSat.aspx @@ -247,7 +247,7 @@
    - + @@ -289,6 +289,14 @@
    + +
    + + + + + +
    diff --git a/SAT/SolicitudesNominaSat.aspx.cs b/SAT/SolicitudesNominaSat.aspx.cs index 235a88821..3e15678f4 100644 --- a/SAT/SolicitudesNominaSat.aspx.cs +++ b/SAT/SolicitudesNominaSat.aspx.cs @@ -60,7 +60,7 @@ public partial class SAT_SolicitudesNominaSat : ClsPaginas using (ClsNominas nom = new ClsNominas()) { - nom.SATSolicitudTimbreNominaGral(DdlReporte.SelectedValue.ToString().ToEntero(), UsuarioActual.CveEmpresa, fechaInicio, fechaFin); + nom.SATSolicitudTimbreNominaGral(DdlReporte.SelectedValue.ToString().ToEntero(), UsuarioActual.CveEmpresa, fechaInicio, fechaFin, DdlTipoNomina.SelectedValue.ToEntero()); ClosedXML.Excel.XLWorkbook wb = new ClosedXML.Excel.XLWorkbook(); var libro = wb.AddWorksheet(nom.DtResultados , "Nomina"); @@ -69,36 +69,36 @@ public partial class SAT_SolicitudesNominaSat : ClsPaginas switch (DdlReporte.SelectedValue.ToString().ToEntero()) { case 1: - libro.Range(1, 2, 1, 2).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(153,0,0)); + libro.Range(1, 2, 1, 2).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(255,153,0)); libro.Range(1, 3, 1, 5).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(53, 152, 220)); break; case 2: - libro.Range(1, 2, 1, 2).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(153, 0, 0)); + libro.Range(1, 2, 1, 2).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(255,153,0)); libro.Range(1, 3, 1, 6).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(53, 152, 220)); libro.Range(1, 8, 1, 11).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(53, 152, 220)); break; case 3: libro.Range(1, 1, 1, 10).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(53, 152, 220)); - libro.Range(1, 11, 1, nom.DtResultados.Columns.Count).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(153, 0, 0)); + libro.Range(1, 11, 1, nom.DtResultados.Columns.Count).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(255,153,0)); break; case 4: - libro.Range(1, 2, 1, 2).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(153, 0, 0)); + libro.Range(1, 2, 1, 2).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(255,153,0)); libro.Range(1, 3, 1, 5).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(53, 152, 220)); break; case 5: - libro.Range(1, 2, 1, 2).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(153, 0, 0)); + libro.Range(1, 2, 1, 2).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(255,153,0)); libro.Range(1, 3, 1, 3).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(53, 152, 220)); break; case 6: - libro.Range(1, 4, 1, 6).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(153, 0, 0)); + libro.Range(1, 4, 1, 6).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(255,153,0)); libro.Range(1, 7, 1, 9).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(53, 152, 220)); break; case 7: - libro.Range(1, 3, 1, 5).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(153, 0, 0)); + libro.Range(1, 3, 1, 5).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(255,153,0)); libro.Range(1, 6, 1, 8).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(53, 152, 220)); break; case 8: - libro.Range(1, 6, 1, 8).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(153, 0, 0)); + libro.Range(1, 6, 1, 8).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(255,153,0)); libro.Range(1, 9, 1, 12).Style.Fill.SetBackgroundColor(ClosedXML.Excel.XLColor.FromArgb(53, 152, 220)); break; case 9: @@ -140,7 +140,7 @@ public partial class SAT_SolicitudesNominaSat : ClsPaginas fechaInicio = TxtRpdFechaInicio.Text.ToDateTime().ToString("yyyy/MM/dd"); fechaFin = TxtRpdFechaFin.Text.ToDateTime().ToString("yyyy/MM/dd"); - nom.SATSolicitudTimbreNominaGral(0, UsuarioActual.CveEmpresa, fechaInicio, fechaFin); + nom.SATSolicitudTimbreNominaGral(0, UsuarioActual.CveEmpresa, fechaInicio, fechaFin, DdlTipoNomina.SelectedValue.ToEntero()); if (nom.DtResultados.Rows.Count > 0) { DataRow drow = nom.DtResultados.Rows[0]; @@ -156,7 +156,7 @@ public partial class SAT_SolicitudesNominaSat : ClsPaginas } - nom.SATSolicitudTimbreNominaGral(DdlReporte.SelectedValue.ToString().ToEntero(), UsuarioActual.CveEmpresa, fechaInicio, fechaFin); + nom.SATSolicitudTimbreNominaGral(DdlReporte.SelectedValue.ToString().ToEntero(), UsuarioActual.CveEmpresa, fechaInicio, fechaFin, DdlTipoNomina.SelectedValue.ToEntero()); GVSolicitudTimbreNominaGral.DataSource = nom.DtResultados; GVSolicitudTimbreNominaGral.DataBind(); clasegrid = string.Format("reporte{0}", DdlReporte.SelectedValue); diff --git a/vwd.webinfo b/vwd.webinfo index 7f69c1418..c6ab9419c 100644 --- a/vwd.webinfo +++ b/vwd.webinfo @@ -536,6 +536,10 @@ + + + + From a2fb63718fbc6eb3b4f9416f346acce2d09b5f76 Mon Sep 17 00:00:00 2001 From: Oscar Irigoyen Date: Wed, 17 Aug 2022 10:01:59 -0700 Subject: [PATCH 18/28] E140.ashx, Clscontabilidad --- App_Code/ClsContabilidad.vb | 1 + Ashx/E140.ashx | 263 ++++++++++++++++++++++++++++++++++++ 2 files changed, 264 insertions(+) create mode 100644 Ashx/E140.ashx diff --git a/App_Code/ClsContabilidad.vb b/App_Code/ClsContabilidad.vb index 0a37fc57f..2e545adf1 100644 --- a/App_Code/ClsContabilidad.vb +++ b/App_Code/ClsContabilidad.vb @@ -4384,6 +4384,7 @@ Public Class ClsContabilidad End With Try + SqlAdapter.SelectCommand.CommandTimeout = 0 SqlAdapter.Fill(DSet) Retorno = True Catch ex As Exception diff --git a/Ashx/E140.ashx b/Ashx/E140.ashx new file mode 100644 index 000000000..b1e309b3d --- /dev/null +++ b/Ashx/E140.ashx @@ -0,0 +1,263 @@ +<%@ WebHandler Language="VB" Class="E140" %> + +Imports System +Imports System.Web +Imports System.Data +Imports Newtonsoft.Json +Imports Extensiones +Imports System.IO +Imports Microsoft.Reporting.WebForms + +Public Class E140 : Implements IHttpHandler, IRequiresSessionState + Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable + Get + Return False + End Get + End Property + Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest + + Try + Select Case context.Request("metodo") + Case "MetasVendedores" + MetasVendedores(context) + End Select + Catch ex As Exception + ex.GuardaLog(ex.Message) + End Try + End Sub + + + Private Shared Sub MetasVendedores(ByVal context As HttpContext) + + Dim CveEmpresa = 140 + Dim RutaEmpresa As String = String.Format("{0}Empresas\{1}\", DirectorioBaseEmpresas, CveEmpresa) + + Dim ObjEmpresa As New ClsSisEmpresas() + If ObjEmpresa.GetEmpresas(CveEmpresa, "-1", "-1", "-1", "-1") Then + End If + + If ObjEmpresa.Empresa.RutaArchivos.Trim.Length > 0 Then + RutaEmpresa = ObjEmpresa.Empresa.RutaArchivos.Trim + End If + + ObjEmpresa.Dispose() + + Dim DTVendedores As System.Data.DataTable = New System.Data.DataTable() + Dim Temporal As String = "" + + Temporal = String.Format("{0}\Temp\", RutaEmpresa, CveEmpresa) + Dim Empresa As String = "BDH BATERIAS DISTRIBUCIONES DE HERMOSILLO SA DE CV" + + DTVendedores.Columns.Add("CveSubProyecto", GetType(Integer)) + DTVendedores.Columns.Add("Sucursal") + DTVendedores.Columns.Add("Nombre") + DTVendedores.Columns.Add("Correo") + + Dim Row_11791 As DataRow = DTVendedores.NewRow + Dim Row_11993 As DataRow = DTVendedores.NewRow + Dim Row_11796 As DataRow = DTVendedores.NewRow + Dim Row_11797 As DataRow = DTVendedores.NewRow + Dim Row_11793 As DataRow = DTVendedores.NewRow + Dim Row_12010 As DataRow = DTVendedores.NewRow + Dim Row_12011 As DataRow = DTVendedores.NewRow + Dim Row_11790 As DataRow = DTVendedores.NewRow + Dim Row_11795 As DataRow = DTVendedores.NewRow + Dim Row_11794 As DataRow = DTVendedores.NewRow + + Row_11791("CveSubProyecto") = 11791 + Row_11791("Sucursal") = "SOLIDARIDAD" + Row_11791("Nombre") = "Fernando grijalva López" + Row_11791("Correo") = "hmo.martirezdecananea@bdhbaterias.com.mx" + + Row_11993("CveSubProyecto") = 11993 + Row_11993("Sucursal") = "PROGRESO" + Row_11993("Nombre") = "Brayam Uriel Corrales Soto" + Row_11993("Correo") = "cajaprogreso.hmo@bdhbaterias.com" + + Row_11796("CveSubProyecto") = 11796 + Row_11796("Sucursal") = "OBREGON" + Row_11796("Nombre") = "Brayam Uriel Corrales Soto" + Row_11796("Correo") = "cen.pisocentro@bdhbaterias.mx" + + Row_11797("CveSubProyecto") = 11797 + Row_11797("Sucursal") = "NAVOJOA" + Row_11797("Nombre") = "Orlando Lagarda Cantú" + Row_11797("Correo") = "almacen.nvj@bdhbaterias.mx" + + Row_11793("CveSubProyecto") = 11793 + Row_11793("Sucursal") = "LOMA LINDA" + Row_11793("Nombre") = "Adrian fernando murrieta Rodríguez" + Row_11793("Correo") = "adrian.murrieta@bdhbaterias.com" + + Row_12010("CveSubProyecto") = 12010 + Row_12010("Sucursal") = "LOS NOGALES" + Row_12010("Nombre") = "GERMAN LUNA CASTRO" + Row_12010("Correo") = "" + + Row_12011("CveSubProyecto") = 12011 + Row_12011("Sucursal") = "NOGALES CENTRO" + Row_12011("Nombre") = "GERMAN LUNA CASTRO" + Row_12011("Correo") = "german.luna@bdhbaterias.com" + + Row_11790("CveSubProyecto") = 11790 + Row_11790("Sucursal") = "MATRIZ" + Row_11790("Nombre") = "Luis Fernando grijalva cota" + Row_11790("Correo") = "luis.grijalva@bdhbaterias.com" + + + Row_11795("CveSubProyecto") = 11795 + Row_11795("Sucursal") = "GUAYMAS CENTRO" + Row_11795("Nombre") = "Gastelum Hurtado Juan Daniel" + Row_11795("Correo") = "daniel.gastelum@bdhbaterias.com" + + Row_11794("CveSubProyecto") = 11794 + Row_11794("Sucursal") = "GUAYMAS AURORA" + Row_11794("Nombre") = "Gastelum Hurtado Juan Daniel" + Row_11794("Correo") = "daniel.gastelum@bdhbaterias.com" + + DTVendedores.Rows.Add(Row_11791) + DTVendedores.Rows.Add(Row_11993) + DTVendedores.Rows.Add(Row_11796) + DTVendedores.Rows.Add(Row_11797) + DTVendedores.Rows.Add(Row_11793) + DTVendedores.Rows.Add(Row_12010) + DTVendedores.Rows.Add(Row_12011) + DTVendedores.Rows.Add(Row_11790) + DTVendedores.Rows.Add(Row_11795) + DTVendedores.Rows.Add(Row_11794) + + For Each dRow As System.Data.DataRow In DTVendedores.Rows + + + Dim CorreoSupervisor As String = dRow("Correo").ToString() + Dim Sucursal As String = dRow("Sucursal").ToString + Dim Vendedor As String = dRow("Nombre").ToString() + Dim CveSubProyecto As Integer = dRow("CveSubProyecto").ToString() + + + CorreoSupervisor = "oscar.irigoyen@adssistemas.mx;rene.molina@adssistemas.mx" + + Dim ObjGen = New ClsVentas + + Dim RutaRDLC As String = If(File.Exists($"{RutaEmpresa}\Formatos\MetasVendedores.rdlc"), $"{RutaEmpresa}\Formatos\MetasVendedores.rdlc", $"{DirectorioBaseEmpresas}\Empresas\Grales\Formatos\MetasVendedores.rdlc") + + If ObjGen.GetRepMetasVendedores(DateTime.Now, CveEmpresa, -1, -1, -1, -1, -1, CveSubProyecto, -1, -1, 0) Then + + + Dim Imagen As System.IO.FileInfo = New System.IO.FileInfo(String.Format("{0}/Logo.png", RutaEmpresa)) + Dim parametros As List(Of ReportParameter) = New List(Of ReportParameter)() + parametros.Add(New ReportParameter("pEmp", Empresa)) + + If Imagen.Exists Then + parametros.Add(New ReportParameter("pImg", $"file://{Imagen.FullName}")) + Else + parametros.Add(New ReportParameter("pImg", "")) + End If + + parametros.Add(New ReportParameter("UsuarioImprimio", "Sistema")) + parametros.Add(New ReportParameter("FechaImpresion", DateTime.Now.ToString("dd/MM/yyyy"))) + parametros.Add(New ReportParameter("SubProyecto", Sucursal)) + parametros.Add(New ReportParameter("Agente", Vendedor)) + + Dim bytes As Byte() = Nothing + + Dim rds1 As ReportDataSource = New ReportDataSource() + rds1.Name = "DataSet1" + rds1.Value = ObjGen.DtResultados + + If EsProduccion Then + + Dim wsreport As New WSRDLC2.WebServiceSoapClient + Dim params As New List(Of WSRDLC2.ReportParameter) + Dim reportobjects As New List(Of WSRDLC2.ReportObjects) + + Dim jsonData As String = Nothing + Dim ds As New DataSet + + Dim dt As DataTable = DirectCast(rds1.Value, Data.DataTable) + dt = dt.Copy() + dt.TableName = rds1.Name + ds.Tables.Add(dt) + + For Each rpds As ReportParameter In parametros + Dim param As New WSRDLC2.ReportParameter + param.Name = rpds.Name + 'SI ES TEXTO, QUITAR TABS Y OTROS ESPACIOS QUE DEN PROBLEMAS AL MANDAR LA PETICION + If rpds IsNot Nothing AndAlso rpds.Values IsNot Nothing AndAlso rpds.Values.Count > 0 AndAlso rpds.Values(0) IsNot Nothing AndAlso rpds.Values(0).GetType() = GetType(String) Then + param.Values = {rpds.Values(0).Replace(vbVerticalTab, "")} + Else + param.Values = {rpds.Values(0)} + End If + params.Add(param) + Next + + bytes = wsreport.StreamNEWPDFBytes(RutaRDLC, ds, reportobjects.ToArray(), params.ToArray(), "MetasVendedores", "PDF", CveEmpresa, 100, jsonData) + wsreport = Nothing + params = Nothing + ds.Dispose() : ds = Nothing + + Else + + Using MR As ReportViewer = New ReportViewer() + + MR.LocalReport.DataSources.Add(rds1) + MR.LocalReport.ReportPath = RutaRDLC + MR.ProcessingMode = ProcessingMode.Local + MR.LocalReport.EnableExternalImages = True + MR.LocalReport.SetParameters(parametros) + MR.LocalReport.Refresh() + Dim warnings As Warning() = Nothing + Dim streamids As String() = Nothing + Dim mimeType As String = Nothing + Dim encoding As String = Nothing + Dim extension As String = Nothing + + bytes = MR.LocalReport.Render("PDF", Nothing, mimeType, encoding, extension, streamids, warnings) + + End Using + + End If + + MandaCorreo(CorreoSupervisor, $"Envió de estado de scorecard sucursal {Sucursal} a {Now.ToString("dd/MM/yyyy")}", bytes) + bytes = Nothing + + End If + + ObjGen.Dispose() + + Next + + End Sub + + Private Shared Sub MandaCorreo(Para As String, Cuerpo As String, bytes As Byte()) + Try + Dim ListaArchivos As List(Of ClsSisMail.ArchivoMail) = New List(Of ClsSisMail.ArchivoMail)() + + Dim AdjuntoReporte As ClsSisMail.ArchivoMail = New ClsSisMail.ArchivoMail() + + AdjuntoReporte.NombreArchivo = "MetasVendedores.Pdf" + AdjuntoReporte.ArchivoBinario = bytes + ListaArchivos.Add(AdjuntoReporte) + + Dim Correo As ClsSisMail = New ClsSisMail() + + Dim Asunto As String = Cuerpo + Correo.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Cuerpo, Archivos:=ListaArchivos) + + Catch ex As Exception + Extensiones.ModExtensiones.GuardaLog(Nothing, $"Error Tareas Programadas 140 error enviar mail --> {ex.Message} ") + End Try + End Sub + + + Public Shared ReadOnly Property EsProduccion As Boolean + Get + If IsNothing(System.Configuration.ConfigurationManager.AppSettings("EsProduccion")) Then + Return False + Else + Return (System.Configuration.ConfigurationManager.AppSettings("EsProduccion").ToString() = "1") + End If + End Get + End Property + +End Class \ No newline at end of file From cf7baa8aa5fc8f88c89efe4f592c875279e274ff Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 17 Aug 2022 10:33:37 -0700 Subject: [PATCH 19/28] -- mejora en titulo --- Inventarios/RepProductosPorCaducar.aspx.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Inventarios/RepProductosPorCaducar.aspx.cs b/Inventarios/RepProductosPorCaducar.aspx.cs index 18fc44e5a..3fbb2a6d8 100644 --- a/Inventarios/RepProductosPorCaducar.aspx.cs +++ b/Inventarios/RepProductosPorCaducar.aspx.cs @@ -57,11 +57,11 @@ public partial class Inventarios_RepProductosPorCaducar : ClsPaginas DTDatos = ObjInventarios.DtResultados; if (DdlOpcion.SelectedValue == "1") { - GvDatos.Columns[4].HeaderText = "F.Elaboración"; + GvDatos.Columns[5].HeaderText = "F.Elaboración"; } else { - GvDatos.Columns[4].HeaderText = "F.Caducidad"; + GvDatos.Columns[5].HeaderText = "F.Caducidad"; } } @@ -230,11 +230,11 @@ public partial class Inventarios_RepProductosPorCaducar : ClsPaginas { if (ChkTiempoCaducidad.Checked) { - GvDatos.Columns[5].Visible = true; + GvDatos.Columns[6].Visible = true; } else { - GvDatos.Columns[5].Visible = false; + GvDatos.Columns[6].Visible = false; } CargarDatos();//Si no se recarga no se muestran los valores dela la columna de tiempo caducindad laprimera vez que pasa de oculta a mostrarse UpDatos.Update(); From 6fad705558aaf33c76569c64714c3080a5d138a5 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 17 Aug 2022 10:33:49 -0700 Subject: [PATCH 20/28] =?UTF-8?q?--=20correcci=C3=B3n=20manejo=20de=20lote?= =?UTF-8?q?/cad=20por=20sucursal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inventarios/EntregaAlmacen.aspx.vb | 70 +++++++++++----------------- Inventarios/RecepcionAlmacen.aspx.vb | 27 ++--------- 2 files changed, 31 insertions(+), 66 deletions(-) diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index bab5eb6ef..749ad971a 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -269,14 +269,6 @@ Partial Class Inventarios_EntregaAlmacen End Set End Property - Private Property ValidaLoteCaducidad As Boolean - Get - Return CType(ViewState("ValidaLoteCaducidad"), Boolean) - End Get - Set(value As Boolean) - ViewState("ValidaLoteCaducidad") = value - End Set - End Property #End Region @@ -997,39 +989,36 @@ Partial Class Inventarios_EntregaAlmacen e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = False End If - If (ValidaLoteCaducidad) OrElse (UsuarioActual.CveEmpresa <> 119) Then - If CBool(e.Row.DBCampo("AplicaCaducidad")) Then - e.Row.FCTextBox("TxtCaducidad").Visible = True - e.Row.FCLinkButton("LnkCaducidad").Visible = True - e.Row.FCTextBox("TxtCaducidad").ReadOnly = True - CType(e.Row.FindControl("RFVCaducidad"), RequiredFieldValidator).Enabled = False + If CBool(e.Row.DBCampo("AplicaCaducidad")) Then + e.Row.FCTextBox("TxtCaducidad").Visible = True + e.Row.FCLinkButton("LnkCaducidad").Visible = True + e.Row.FCTextBox("TxtCaducidad").ReadOnly = True + CType(e.Row.FindControl("RFVCaducidad"), RequiredFieldValidator).Enabled = False - 'si aplica caducidad y viene vacía (posible por venta anterior), que se active su registro - If e.Row.FCTextBox("TxtCaducidad").Text = "" OrElse e.Row.FCTextBox("TxtCaducidad").Text.ToDate <= MinFecha Then - e.Row.FCTextBox("TxtCaducidad").ReadOnly = False - CType(e.Row.FindControl("RFVCaducidad"), RequiredFieldValidator).Enabled = True - e.Row.FCTextBox("TxtCaducidad").Enabled = True - End If - Else - e.Row.FCTextBox("TxtCaducidad").Visible = False - e.Row.FCLinkButton("LnkCaducidad").Visible = False + 'si aplica caducidad y viene vacía (posible por venta anterior), que se active su registro + If e.Row.FCTextBox("TxtCaducidad").Text = "" OrElse e.Row.FCTextBox("TxtCaducidad").Text.ToDate <= MinFecha Then + e.Row.FCTextBox("TxtCaducidad").ReadOnly = False + CType(e.Row.FindControl("RFVCaducidad"), RequiredFieldValidator).Enabled = True e.Row.FCTextBox("TxtCaducidad").Enabled = True End If + Else + e.Row.FCTextBox("TxtCaducidad").Visible = False + e.Row.FCLinkButton("LnkCaducidad").Visible = False + e.Row.FCTextBox("TxtCaducidad").Enabled = True + End If - If CBool(e.Row.DBCampo("AplicaLote")) Then - e.Row.FCTextBox("TxtLote").Visible = True - 'si aplica caducidad y viene vacía (posible por venta anterior), que se active su registro - If e.Row.FCTextBox("TxtLote").Text = "" Then - e.Row.FCTextBox("TxtLote").ReadOnly = False - e.Row.FCTextBox("TxtLote").Enabled = True - Else - e.Row.FCTextBox("TxtLote").ReadOnly = True - End If - + If CBool(e.Row.DBCampo("AplicaLote")) Then + e.Row.FCTextBox("TxtLote").Visible = True + 'si aplica caducidad y viene vacía (posible por venta anterior), que se active su registro + If e.Row.FCTextBox("TxtLote").Text = "" Then + e.Row.FCTextBox("TxtLote").ReadOnly = False + e.Row.FCTextBox("TxtLote").Enabled = True Else - e.Row.FCTextBox("TxtLote").Visible = False + e.Row.FCTextBox("TxtLote").ReadOnly = True End If + Else + e.Row.FCTextBox("TxtLote").Visible = False End If e.Row.FCButton("BtnDividir").Attributes.Add("onclick", String.Format("Dividir('{0}');", e.Row.FCTextBox("TxtDividir").ClientID)) @@ -1708,11 +1697,9 @@ Partial Class Inventarios_EntregaAlmacen Next - If (Not ValidaLoteCaducidad) OrElse (UsuarioActual.CveEmpresa <> 119) Then - ValidaSeccion = False - ValidaCaducidad = False - ValidaLote = False - End If + ValidaSeccion = False + ValidaCaducidad = False + ValidaLote = False If ValidaSeccion Then Alert("La sección de almacen no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia) @@ -1855,11 +1842,6 @@ Partial Class Inventarios_EntregaAlmacen FechaCaducidad = If(CBool(Dr("AplicaCaducidad")) AndAlso Dr("FechaCaducidad").ToString() <> "", Dr("FechaCaducidad").ToString().ToDate, MinFecha) Lote = If(CBool(Dr("AplicaLote")), Dr("Lote").ToString().Trim, "-1") - If Not ValidaLoteCaducidad Then - FechaCaducidad = MinFecha - Lote = "-1" - End If - If Dr("CantidadGV").ToString().ToDecimal > 0 Then If CBool(Dr("AplicaSerie")) Then DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec"))) diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index 81721ec42..d533f8438 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -28,14 +28,6 @@ Partial Class Inventarios_RecepcionAlmacen End Set End Property - Private Property ValidaLoteCaducidad As Boolean - Get - Return CType(ViewState("ValidaLoteCaducidad"), Boolean) - End Get - Set(value As Boolean) - ViewState("ValidaLoteCaducidad") = value - End Set - End Property Private Property CveTipoAlmacen As Integer Get Return CType(ViewState("CveTipoAlmacen"), Integer) @@ -1537,8 +1529,7 @@ Partial Class Inventarios_RecepcionAlmacen e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = False End If - If (ValidaLoteCaducidad) OrElse (UsuarioActual.CveEmpresa <> 119) Then - If CBool(e.Row.DBCampo("AplicaCaducidad")) Then + If CBool(e.Row.DBCampo("AplicaCaducidad")) Then e.Row.FCTextBox("TxtCaducidad").Visible = True e.Row.FCLinkButton("LnkCaducidad").Visible = True e.Row.FCTextBox("TxtCaducidad").Text = Now.ToShortDateString @@ -1548,12 +1539,10 @@ Partial Class Inventarios_RecepcionAlmacen e.Row.FCLinkButton("LnkCaducidad").Visible = False End If - If CBool(e.Row.DBCampo("AplicaLote")) Then - e.Row.FCTextBox("TxtLote").Visible = True - Else - e.Row.FCTextBox("TxtLote").Visible = False - End If - + If CBool(e.Row.DBCampo("AplicaLote")) Then + e.Row.FCTextBox("TxtLote").Visible = True + Else + e.Row.FCTextBox("TxtLote").Visible = False End If e.Row.FCButton("BtnDividir").Attributes.Add("onclick", String.Format("Dividir('{0}');", e.Row.FCTextBox("TxtDividir").ClientID)) @@ -2271,12 +2260,6 @@ Partial Class Inventarios_RecepcionAlmacen Index += 1 Next - If (Not ValidaLoteCaducidad) OrElse (UsuarioActual.CveEmpresa <> 119) Then - ValidaSeccion = False - ValidaCaducidad = False - ValidaLote = False - End If - If ValidaSeccion Then Alert("La sección de almacen no ha sido especificada en todos los productos.", TipoMensaje.MsgAdvertencia) Return False From 0af293832b4e67bd911974ab38cfea3cfd120b63 Mon Sep 17 00:00:00 2001 From: Oscar Irigoyen Date: Wed, 17 Aug 2022 11:37:35 -0700 Subject: [PATCH 21/28] RegPrePolizasS Error al cargar importe negativo con platilla, ligas de Folio generados --- Contabilidad/RegPrePolizaS.aspx.vb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Contabilidad/RegPrePolizaS.aspx.vb b/Contabilidad/RegPrePolizaS.aspx.vb index bd55a5b41..af366386b 100644 --- a/Contabilidad/RegPrePolizaS.aspx.vb +++ b/Contabilidad/RegPrePolizaS.aspx.vb @@ -1010,6 +1010,14 @@ Partial Class ContabilidadC_RegPrePolizaS If CveIE < 0 Then MsgError = "No se pudo registrar movimiento bancario" Exit For + Else + + If tFolio > 0 Then + FolioIE = tFolio + Else + FolioIE = ObjIE.Folio + End If + End If End If @@ -2421,7 +2429,7 @@ Partial Class ContabilidadC_RegPrePolizaS End If Folio = FolioExcel - ImporteDocumento = IIf(Row("Abono").ToString.ToDecimal > 0, Row("Abono").ToString.ToDecimal, Row("Cargo").ToString.ToDecimal) + ImporteDocumento = IIf(Row("Abono").ToString.ToDecimal <> 0, Row("Abono").ToString.ToDecimal, Row("Cargo").ToString.ToDecimal) Observaciones = Row("Referencia").ToString Beneficiario = Row("Concepto").ToString From ea672ce3f3d2d9dbd011dea97e6d890752f97e55 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 18 Aug 2022 09:56:43 -0700 Subject: [PATCH 22/28] -- nuevo concepto de pago a clientes por NC ME --- App_Code/ClsPaginas.vb | 4 +++- Contabilidad/PopUpAuxiliar.aspx.vb | 4 ++-- Ventas/Ventas.aspx.vb | 11 +++++------ 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index ffee09df2..b945bee87 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -9751,7 +9751,9 @@ Public Class ClsPaginas Pago.CveConceptoPago = If(Pago.CveConceptoPago = -1, 2, Pago.CveConceptoPago) 'si viene en parametro lo toma com primera opcion, sino el 2 - If VentaActual.CveMoneda <> 1 Then Pago.CveConceptoPago = 292 + If VentaActual.CveMoneda <> 1 Then + If Pago.TipoPago = "NC" Then Pago.CveConceptoPago = 301 : Pago.CveConceptoPago = 292 + End If Dim Concepto As String = String.Format("{0} F:{1}", VentaActual.ClienteNombre, VentaActual.SerieFolio) Dim FuncionalidadFluctuacionImpuestos As Boolean = If(UsuarioActual.Empresa.Funcionalidad(159) = "1", True, False) diff --git a/Contabilidad/PopUpAuxiliar.aspx.vb b/Contabilidad/PopUpAuxiliar.aspx.vb index b324091bd..250bd30f0 100644 --- a/Contabilidad/PopUpAuxiliar.aspx.vb +++ b/Contabilidad/PopUpAuxiliar.aspx.vb @@ -210,11 +210,11 @@ Partial Class PopUpAuxiliar e.Row.FCLiteral("LtlConcepto").Text = String.Format("{0}{1}
    ", Liga, e.Row.DBCampo("ConceptoContable")) End If - If e.Row.DBCampo("CveConceptoContable").Contiene("91", "251") Then 'desaplicar NC + If e.Row.DBCampo("CveConceptoContable").Contiene("91", "251", "301") Then 'desaplicar NC e.Row.FCLinkButton("LnkDesAplicar").Visible = True e.Row.FCLinkButton("imgD").Visible = False - If e.Row.DBCampo("CveConceptoContable").Contiene("251") Then + If e.Row.DBCampo("CveConceptoContable").Contiene("251", "301") Then e.Row.FCLinkButton("LnkDesAplicar").CommandArgument = String.Format("{0}|{1}|{2}", e.Row.DBCampo("CvePrePoliza"), e.Row.DBCampo("CveVenta"), e.Row.DBCampo("CveVentaAmortizacion")) Else e.Row.FCLinkButton("LnkDesAplicar").CommandArgument = String.Format("{0}|{1}|{2}", e.Row.DBCampo("CvePrePoliza"), e.Row.DBCampo("CveVentaAmortizacion"), e.Row.DBCampo("CveVenta")) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index ec39ffe05..26d9255ef 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -15615,16 +15615,12 @@ Partial Class Ventas Dim TipoMovimiento As Boolean = True Dim Concepto As String = VentaActual.SerieFolio Dim Referencia As String = VentaActual.SerieFolio + CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() Select Case gvr.DataKey("CveConceptoContable").ToString() Case "3" - CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() - importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("TotalAnticipo").ToDecimal) * gvr.DataKey("IVAAnticipo").ToDecimal) - ' TipoCambioGeneral = tipoCambioPago - ' IdCtaContable = IdCtaContAnticipos - If importeMovimiento <> 0 Then Dim Pago As New VentaPago @@ -15682,6 +15678,8 @@ Partial Class Ventas Pago.TipoPago = "NC" Pago.CveVentaAmortizacion = gvr.DataKey("CveVenta").ToEntero() Pago.AplicaTraslado = gvr.DataKey("RegresarImpuesto") = "1" + Pago.Referencia = gvr.DataKey("Folio") + Pago.CveConceptoPago = 251 ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) SimplificaPrePoliza = False @@ -15689,7 +15687,7 @@ Partial Class Ventas Case "66" If gvr.DataKey("CveIE").ToEntero() > 0 Then - CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() + importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal IdCtaContable = IdCtaContClientes @@ -15702,6 +15700,7 @@ Partial Class Ventas Pago.TipoPago = "A" Pago.CveVentaAmortizacion = gvr.DataKey("CveVenta").ToEntero() Pago.AplicaTraslado = gvr.DataKey("RegresarImpuesto") = "1" + Pago.Referencia = gvr.DataKey("Folio") ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) From f2e156088f791f33f5273b3cf35f45bb72ec8164 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 18 Aug 2022 09:56:56 -0700 Subject: [PATCH 23/28] =?UTF-8?q?--=20mejora=20en=20registro=20de=20prep?= =?UTF-8?q?=C3=B3liza=20cuando=20es=20*C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inventarios/EntregaAlmacen.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 749ad971a..17f8a1462 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -2055,7 +2055,7 @@ Partial Class Inventarios_EntregaAlmacen ErrorMovInv = True End If - If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaSinCosto, False, 0, 0, 68, TxtObservaciones.Text, TxtObservaciones.Text, -1, -1, CveMovimientoAlmacen:=CveMovimientoEntrada, Contabilizable:=False) Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaSinCosto, False, 0, 0, 68, TxtObservaciones.Text, TxtObservaciones.Text, -1, -1, CveMovimientoAlmacen:=CveMovimientoEntradaApartado, Contabilizable:=False) Then ErrorMovInv = True End If From 18b5cd358e66d7ad9c6232fa97ca71d33823435c Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 18 Aug 2022 09:57:14 -0700 Subject: [PATCH 24/28] =?UTF-8?q?--=20correci=C3=B3n=20de=20visualizacion?= =?UTF-8?q?=20de=20facturas,=20cuando=20no=20son=20refacturas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ventas/RepCancelacionesPorRespuesta.aspx.cs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/Ventas/RepCancelacionesPorRespuesta.aspx.cs b/Ventas/RepCancelacionesPorRespuesta.aspx.cs index a2f74d2bd..977fb4f16 100644 --- a/Ventas/RepCancelacionesPorRespuesta.aspx.cs +++ b/Ventas/RepCancelacionesPorRespuesta.aspx.cs @@ -62,9 +62,9 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas } ObjVentas.Dispose(); - GvDatos.DataSource = DtVentas.FiltraParametros("(CveEstatusFactura = 20 AND CveEstatusRefacturacion IN (0,4))"); + GvDatos.DataSource = DtVentas.FiltraParametros("(CveEstatusFactura IN (20,23) AND CveEstatusRefacturacion IN (0,4))"); - var DtRefacturar = DtVentas.FiltraParametros("CveEstatusRefacturacion IN (1,3) OR (CveEstatusFactura = 20 AND CveEstatusRefacturacion IN (1,2,3)) OR CveEstatusFactura = 23"); + var DtRefacturar = DtVentas.FiltraParametros("CveEstatusRefacturacion IN (1,3) OR (CveEstatusFactura IN (20,23) AND CveEstatusRefacturacion IN (1,2,3))"); if (DtRefacturar != null && DtRefacturar.Rows.Count > 0) { DivRefacturar.Visible = true; @@ -595,15 +595,10 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas // - //if (e.Row.DBCampo("PuedeRefacturar").ToString().ToEntero() == 1 && e.Row.DBCampo("CveEstatusFactura").ToString().ToEntero() == 23) - //{ - // e.Row.FCLinkButton("LnkValidarRefac").Visible = false; - //} - - if (e.Row.DBCampo("CveEstatusFactura").ToEntero() == 23) + if (e.Row.DBCampo("PuedeRefacturar").ToString().ToEntero() == 1 && e.Row.DBCampo("CveEstatusFactura").ToString().ToEntero() == 23) { e.Row.FCLinkButton("LnkValidarRefac").Visible = false; - } + } if (e.Row.DBCampo("PuedeRefacturar") == "0" && e.Row.DBCampo("CveEstatusFactura") == "23" && e.Row.DBCampo("CveVentaSustitucion").ToEntero() > 0) { From a814d6d2773e54df7d172854570116d71b81670e Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 18 Aug 2022 09:57:28 -0700 Subject: [PATCH 25/28] -- nuevo filtro --- Inicio.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Inicio.aspx.vb b/Inicio.aspx.vb index 0c46cefdd..90e21f9fc 100644 --- a/Inicio.aspx.vb +++ b/Inicio.aspx.vb @@ -357,7 +357,7 @@ Partial Class Inicio Dim ObjInventarios As New ClsInventarios - If ObjInventarios.RepCompuestosVigencia(-1, -1, MinFecha, Now.AddDays(30), 1, UsuarioActual.CveEmpresa, True) Then + If ObjInventarios.RepCompuestosVigencia(-1, -1, MinFecha, Now.AddDays(30), 1, UsuarioActual.CveEmpresa, -1, UsuarioActual.CveUsuario, True) Then If ObjInventarios.DtResultados.Rows.Count > 0 Then GvModalRSCOPorCaducar.DataSource = ObjInventarios.DtResultados From 583fec9cc64410eea6b0de38ce95103fa8130ee3 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 18 Aug 2022 22:30:12 -0700 Subject: [PATCH 26/28] -- mejora comercio ext --- Ventas/Ventas.aspx.vb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 26d9255ef..7ec63c062 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -29292,8 +29292,9 @@ Partial Class Ventas Private Sub CargaEstado() DdlComExtEstado.Items.Clear() If DdlComExtPais.SelectedValue.ToEntero() > 0 Then - DdlComExtEstado.DataSource = GlobalDTGralEstados("-1", CvePais:=DdlComExtPais.SelectedValue.ToEntero)(0)("ClaveSATPais").ToString() + DdlComExtEstado.DataSource = GlobalDTGralEstados("-1", CvePais:=DdlComExtPais.SelectedValue.ToEntero) '(0)("ClaveSATPais").ToString() End If + DdlComExtEstado.Visible = True DdlComExtEstado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlComExtEstado.DataBind() End Sub From 8414d8d9c28a774c0886f92a15fd5de9f21487e5 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Fri, 19 Aug 2022 03:33:03 -0700 Subject: [PATCH 27/28] --- App_Code/ClsPaginas.vb | 2 +- Compras/PopUpVerFactura.aspx.vb | 298 ++++++++++++++++++++++++++++++++ GPS/ReciboNom.rdlc | 10 +- Nomina/Nomina.aspx.cs | 7 +- RH/CalculoSBC.aspx.cs | 2 +- SAT/SolicitudesNominaSat.aspx | 28 +-- vwd.webinfo | 2 + 7 files changed, 327 insertions(+), 22 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index ffee09df2..e3d5653d6 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -8689,7 +8689,7 @@ Public Class ClsPaginas End If DTPercepciones = ObjNomina.DtResultados.FiltraParametros($"((Tipo = 'P' OR (Tipo = 'D' AND Importe <0)) AND Importe <>0 AND EsPadre = 1 AND SoloVisible =0) {filtrop}") DTDeducciones = ObjNomina.DtResultados.FiltraParametros($"(Tipo = 'D' AND Importe >0 AND EsPadre = 1 AND SoloVisible =0) {friltrod}") - DTDeducciones2 = ObjNomina.DtResultados.FiltraParametros($"((Tipo = 'D' AND Importe >0 AND EsPadre = 1 AND SoloVisible =0) OR CveSistema IN (20,21)){friltrod}") + DTDeducciones2 = ObjNomina.DtResultados.FiltraParametros($"((Tipo = 'D' AND Importe >0 AND EsPadre = 1 AND SoloVisible =0) OR CveSistema IN (20,21) OR CveConcepto =4714){friltrod}") ajusteindemnizacion = ObjNomina.DtResultados.FiltraParametros($"((Tipo = 'P' OR (Tipo = 'D' AND Importe <0)) AND Importe <>0 AND EsPadre = 1 AND SoloVisible =0) AND CveSistema IN(10,11,32)").SUM("Importe") - ObjNomina.DtResultados.FiltraParametros($"(Tipo = 'D' AND Importe >0 AND EsPadre = 1 AND SoloVisible =0) AND CveSistema =47").SUM("Importe") diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb index 5f77cd67e..a35a9eb35 100644 --- a/Compras/PopUpVerFactura.aspx.vb +++ b/Compras/PopUpVerFactura.aspx.vb @@ -198,6 +198,13 @@ Partial Class PopUpVerFactura End If If Request("onlyPrint") IsNot Nothing Then + If Request("onlyPrint").ToString() = "GeneraPDFNomina" AndAlso Not IsNothing(Request("CvePersonal")) AndAlso + Not IsNothing(Request("CvePeriodo")) AndAlso Not IsNothing(Request("indemnizacion")) Then + Dim CveEmpresa As Integer = UsuarioActual.CveEmpresa + Dim RutaEmpresa As String = UsuarioActual.Empresa.Ruta + Dim indemnizacion As Boolean = Request("indemnizacion").ToString.ToEntero() = 1 + GeneraPDFNomina(Request("CvePersonal").ToString.ToEntero(), Request("CvePeriodo").ToString.ToEntero(), CveEmpresa, RutaEmpresa, indemnizacion) + End If If Request("onlyPrint").ToString() = "Pallet" AndAlso Not IsNothing(Request("CvePallet")) Then imprimirpallet2(Request("CvePallet").ToString.ToEntero()) End If @@ -227,6 +234,297 @@ Partial Class PopUpVerFactura End Sub + Public Function GeneraPDFNomina(CvePersonal As Integer, CvePeriodo As Integer, CveEmpresa As Integer, RutaEmpresa As String, Optional indemnizacion As Boolean = False) As Byte() + + + Dim ObjNomina As New ClsNominas + Dim ObjPersonal As New ClsRH + Dim TieneError = False + Dim Retorno As Byte() = Nothing + + If Not ObjNomina.GetNom_Nominas(-1, CvePersonal, CvePeriodo, -1, CveEmpresa) Then + Alert("Ocurrio un erro al obtener datos de la nomina", TipoMensaje.MsgError) + ObjPersonal.Dispose() + ObjNomina.Dispose() + Return Nothing + End If + + Dim CveNomina = ObjNomina.CveNomina + Dim DTPercepciones As Data.DataTable + Dim DTDeducciones As Data.DataTable + Dim DTDeducciones2 As New Data.DataTable + + Dim Ruta As String = UsuarioActual.Empresa.Ruta + Dim PathXML As String = $"{Ruta}XML\Nomina\{ObjNomina.Serie }{If(indemnizacion, "F", "")}-{ObjNomina.Folio}.xml" + Dim FechaEmision, FechaCertificacion As DateTime + Dim FolioFiscal, NoSerieCertificado, NoSerieCertificadoContribuyente, SelloCFDi, SelloSAT As String + FolioFiscal = "" + NoSerieCertificado = "" + SelloCFDi = "" + SelloSAT = "" + NoSerieCertificadoContribuyente = "" + + Dim RutaCBB As String = String.Format("{0}CBB\Nomina\{1}.jpg", RutaEmpresa, ObjNomina.SerieFolio) + Dim ImagenCBB As New System.IO.FileInfo(RutaCBB) + Dim ImgCBB As String + + Dim RutaFormato As String = String.Format("{0}Formatos\Nomina.rdlc", RutaEmpresa) + Dim RutaFormatoDefault As String = String.Format("Empresas\Grales\Formatos\Nomina.rdlc") + + 'SI ESTA TIMBRADA - CON XML + + If System.IO.File.Exists(PathXML) Then + + Dim XmlDoc As New System.Xml.XmlDocument + 'XmlDoc.Load(Ruta & "XML\\Nomina\NOM A-3845.xml") + XmlDoc.Load(PathXML) + + If ValorNodoXML(XmlDoc.DocumentElement, "version").Contiene("3.3", "4.0") Then + FechaEmision = XmlDoc.DocumentElement.Attributes("Fecha").InnerText.ToDate + NoSerieCertificadoContribuyente = XmlDoc.DocumentElement.Attributes("NoCertificado").InnerText + + For i As Integer = 0 To XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes.Count - 1 + If XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Name = "tfd:TimbreFiscalDigital" Then + FolioFiscal = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("UUID").InnerText + NoSerieCertificado = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("NoCertificadoSAT").InnerText + FechaCertificacion = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("FechaTimbrado").InnerText.ToDate + SelloCFDi = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("SelloCFD").InnerText + SelloSAT = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("SelloSAT").InnerText + End If + Next + Else + FechaEmision = XmlDoc.DocumentElement.Attributes("fecha").InnerText.ToDate + NoSerieCertificadoContribuyente = XmlDoc.DocumentElement.Attributes("noCertificado").InnerText + + For i As Integer = 0 To XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes.Count - 1 + If XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Name = "tfd:timbreFiscalDigital" Then + FolioFiscal = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("UUID").InnerText + NoSerieCertificado = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("noCertificadoSAT").InnerText + FechaCertificacion = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("fechaTimbrado").InnerText.ToDate + SelloCFDi = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("selloCFD").InnerText + SelloSAT = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("selloSAT").InnerText + End If + Next + End If + + + 'SIN TIMBRAR - SIN XML + Else + FolioFiscal = "Sin Timbrar" + NoSerieCertificado = "Sin Timbrar" + SelloCFDi = "Sin Timbrar" + SelloSAT = "Sin Timbrar" + End If + + 'Si no tiene CBB, SE GENERA + If Not ImagenCBB.Exists Then + Dim CBB As New ClbNegBICFDv3_2.ClsNegCBBGenerar() + If ObjPersonal.GetPersonal(CvePersonal, CveEmpresa) Then + CBB.GenerarCBB(UsuarioActual.Empresa.RFC, ObjPersonal.RFC, ObjNomina.Total.ToString.ToDecimal, FolioFiscal, RutaCBB) + End If + End If + + ImgCBB = String.Format("{0}://{1}:{2}/Empresas/{3}/CBB/Nomina/{4}.jpg", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa, ObjNomina.SerieFolio) + + Dim cQr As Byte() = Nothing + Try + Dim CadenaOriginalCFD As String = "||1.0|" + FolioFiscal + "|" + FechaCertificacion.ToString("yyyy-MM-dd") + "T" + FechaCertificacion.ToString("HH:mm:ss") + "|" + SelloCFDi + "|" + NoSerieCertificado + "||" + + Dim RptParametro As New List(Of ReportParameter) + + + 'Datos Empresa + RptParametro.Add(New ReportParameter("RegistroPatronal", ObjNomina.RegistroPatronal)) + Dim ajusteindemnizacion As Double = 0 + 'PERCECIONES - DEDUCCIONES + If ObjNomina.GetNom_NominasDetalles(CveNomina, CvePersonal, CvePeriodo, "-1") Then + Dim filtrop As String = " AND CveSistema NOT IN(10,11,32)" + Dim friltrod As String = " AND CveSistema <>47" + If indemnizacion Then + filtrop = "AND CveSistema IN(10,11,32)" + friltrod = " AND CveSistema =47" + End If + DTPercepciones = ObjNomina.DtResultados.FiltraParametros($"((Tipo = 'P' OR (Tipo = 'D' AND Importe <0)) AND Importe <>0 AND EsPadre = 1 AND SoloVisible =0) {filtrop}") + DTDeducciones = ObjNomina.DtResultados.FiltraParametros($"(Tipo = 'D' AND Importe >0 AND EsPadre = 1 AND SoloVisible =0) {friltrod}") + DTDeducciones2 = ObjNomina.DtResultados.FiltraParametros($"((Tipo = 'D' AND Importe >0 AND EsPadre = 1 AND SoloVisible =0) OR CveSistema IN (20,21) OR CveConcepto =4714){friltrod}") + + ajusteindemnizacion = ObjNomina.DtResultados.FiltraParametros($"((Tipo = 'P' OR (Tipo = 'D' AND Importe <0)) AND Importe <>0 AND EsPadre = 1 AND SoloVisible =0) AND CveSistema IN(10,11,32)").SUM("Importe") - + ObjNomina.DtResultados.FiltraParametros($"(Tipo = 'D' AND Importe >0 AND EsPadre = 1 AND SoloVisible =0) AND CveSistema =47").SUM("Importe") + For Each row As DataRow In DTPercepciones.Rows + If row("Tipo").ToString() = "D" Then + row("Codigo") = row("Codigo").ToString().Replace("D", "OP") + row("Importe") = row("Importe").ToString().ToDecimal() * -1 + End If + Next + + Else + DTPercepciones = Nothing + DTDeducciones = Nothing + End If + 'DATOS DEL EMPLEADO + If ObjPersonal.GetPersonal(CvePersonal, CveEmpresa) Then + + RptParametro.Add(New ReportParameter("NoEmpleado", ObjPersonal.Codigo)) + RptParametro.Add(New ReportParameter("RFC", ObjPersonal.RFC)) + RptParametro.Add(New ReportParameter("CURP", ObjPersonal.CURP)) + + RptParametro.Add(New ReportParameter("NombreCompleto", String.Format("{0} {1} {2}", ObjPersonal.Nombres, ObjPersonal.APaterno, ObjPersonal.AMaterno).Trim())) + RptParametro.Add(New ReportParameter("Regimen", ObjPersonal.RegimenContratacion)) + RptParametro.Add(New ReportParameter("RiesgoPuesto", ObjPersonal.RiesgoPuesto)) + + RptParametro.Add(New ReportParameter("NSS", ObjPersonal.NumeroSS)) + RptParametro.Add(New ReportParameter("Departamento", ObjPersonal.Departamento)) + RptParametro.Add(New ReportParameter("Puesto", ObjPersonal.Puesto.ToString())) + RptParametro.Add(New ReportParameter("FechaIngreso", ObjPersonal.FechaIngreso.ToString("dd/MM/yyyy"))) + + RptParametro.Add(New ReportParameter("Contrato", ObjPersonal.TipoContrato.ToString)) + + RptParametro.Add(New ReportParameter("Jornada", ObjPersonal.Jornada)) + RptParametro.Add(New ReportParameter("Periodo", ObjNomina.TipoPeriodo)) + RptParametro.Add(New ReportParameter("SalarioBase", ObjPersonal.SalarioDiario.ToString)) + RptParametro.Add(New ReportParameter("SalarioDiarioInt", ObjPersonal.SDI.ToString)) + + RptParametro.Add(New ReportParameter("Banco", ObjPersonal.Banco)) + RptParametro.Add(New ReportParameter("CLABE", ObjPersonal.CLABE)) + + + 'DATOS NOMINA + If ObjNomina.GetNom_Nominas(CveNomina, CvePersonal, CvePeriodo, 1, CveEmpresa) Then + RptParametro.Add(New ReportParameter("ReciboNomina", ObjNomina.Folio.ToString)) + RptParametro.Add(New ReportParameter("Serie", ObjNomina.Serie)) + RptParametro.Add(New ReportParameter("Fecha", ObjNomina.Fecha.ToString)) + RptParametro.Add(New ReportParameter("Periodo", ObjNomina.TipoPeriodo)) + + RptParametro.Add(New ReportParameter("DiasPagados", ObjNomina.DiasPagados.ToString)) + RptParametro.Add(New ReportParameter("MetodoPago", ObjNomina.MetodoPago)) '"""PUE"" (Pago en una sola exhibición)" + RptParametro.Add(New ReportParameter("FormaPago", """99"" (Por definir)")) + + RptParametro.Add(New ReportParameter("Cantidad", "1")) + RptParametro.Add(New ReportParameter("Unidad", "ACT")) + RptParametro.Add(New ReportParameter("Descripcion", "PAGO DE NÓMINA")) + RptParametro.Add(New ReportParameter("Total", If(indemnizacion, ajusteindemnizacion, ObjNomina.Total - ajusteindemnizacion).ToString())) + + Dim CBB As New ClbNegBICFDv3_2.ClsNegCBBGenerar() + cQr = CBB.GenerarCBBBytes(UsuarioActual.Empresa.RFC, ObjPersonal.RFC, ObjNomina.Total.ToString().ToDecimal(), FolioFiscal) + RptParametro.Add(New ReportParameter("ImporteLetra", ObjNomina.Total.ToString.ToDouble.Texto2Letras)) + RptParametro.Add(New ReportParameter("Clave", "84111505")) + Else + TieneError = True + End If + Else + TieneError = True + End If + + If Not TieneError Then + If ObjNomina.GetPeriodos(-1, CveEmpresa, -1, -1, CvePeriodo) Then + RptParametro.Add(New ReportParameter("FechaInicio", ObjNomina.FechaInicio.ToString("dd/MM/yyyy"))) + RptParametro.Add(New ReportParameter("FechaFin", ObjNomina.FechaFin.ToString("dd/MM/yyyy"))) + Else + TieneError = True + End If + End If + + + RptParametro.Add(New ReportParameter("PU", DTPercepciones.SUM("Importe").ToString())) + RptParametro.Add(New ReportParameter("Importe", DTPercepciones.SUM("Importe").ToString())) + RptParametro.Add(New ReportParameter("ImporteDeducciones", DTDeducciones.SUM("Importe").ToString())) + + RptParametro.Add(New ReportParameter("SubTotal", DTPercepciones.SUM("Importe").ToString())) + RptParametro.Add(New ReportParameter("Descuentos", DTDeducciones.SUM("Importe", "SATCveConcepto <> '002'").ToString())) + RptParametro.Add(New ReportParameter("ISR", DTDeducciones.SUM("Importe", "SATCveConcepto = '002'").ToString())) + 'Timbrado + RptParametro.Add(New ReportParameter("FolioFiscal", FolioFiscal)) + RptParametro.Add(New ReportParameter("CertificadoSAT", NoSerieCertificado)) + RptParametro.Add(New ReportParameter("FechaCertificacion", FechaCertificacion.ToString)) + RptParametro.Add(New ReportParameter("SelloDigitalEmisor", SelloCFDi)) + RptParametro.Add(New ReportParameter("SelloDigitalSAT", SelloSAT)) + RptParametro.Add(New ReportParameter("CadenaOriginal", CadenaOriginalCFD)) + RptParametro.Add(New ReportParameter("QR", ImgCBB.ToString)) + + + Dim LSRds As New List(Of ReportDataSource) + + + Dim rds2 = New ReportDataSource() + + Dim dtqr As New DataTable + + Dim column As DataColumn = New DataColumn("ImagenByte") + column.DataType = System.Type.[GetType]("System.Byte[]") + column.AllowDBNull = True + column.Caption = "ImagenByte" + dtqr.Columns.Add(column) + Dim rowqr As DataRow = dtqr.NewRow() + rowqr("ImagenByte") = cQr + + dtqr.Rows.Add(rowqr) + rds2.Name = "dsImagenes" + rds2.Value = dtqr + LSRds.Add(rds2) + Dim numnewfiles As Integer = 0 + If DTPercepciones.Rows.Count > DTDeducciones2.Rows.Count Then + + numnewfiles = DTPercepciones.Rows.Count - DTDeducciones2.Rows.Count + For index = 1 To numnewfiles + + DTDeducciones2.Rows.Add(DTDeducciones2.NewRow) + Next + Else + + If DTDeducciones2.Rows.Count > DTPercepciones.Rows.Count Then + numnewfiles = DTDeducciones2.Rows.Count - DTPercepciones.Rows.Count + For index = 1 To numnewfiles + + DTPercepciones.Rows.Add(DTPercepciones.NewRow) + Next + + End If + End If + + Dim RptDS As New ReportDataSource + RptDS.Name = "DsOC" + RptDS.Value = DTPercepciones + LSRds.Add(RptDS) + + Dim RDS As New ReportDataSource + RDS.Name = "DataSet1" + RDS.Value = DTDeducciones2 + LSRds.Add(RDS) + Dim Archivo As New System.IO.FileInfo(RutaFormato) + + If Not TieneError Then + If Archivo.Exists Then + Retorno = StreamPDF(RutaFormato, LSRds, RptParametro, ObjNomina.SerieFolio, "PDF", MR:=Nothing) + Dim ArchivoPDF As New System.IO.FileInfo(String.Format("{0}PDF\\{1}.pdf", RutaEmpresa, ObjNomina.SerieFolio)) + If Not ArchivoPDF.Exists Then + Try + DirectoryExistsCreate(String.Format("{0}PDF", RutaEmpresa)) + DirectoryExistsCreate(String.Format("{0}PDF\{1}", RutaEmpresa, "Nomina")) + File.WriteAllBytes(String.Format("{0}PDF\Nomina\{1}.pdf", RutaEmpresa, ObjNomina.SerieFolio), Retorno) + Catch ex As Exception + Alert("Ocurrió un error al generar el PDF", TipoMensaje.MsgAdvertencia) + GuardaLog(String.Format("Ocurrió un error al generar el PDF {0}", ex)) + End Try + End If + Else + 'ImprimirPDF(String.Format("{0}\Formatos\Nomina.rdlc", RutaEmpresa), LSRds, RptParametro, ObjNomina.SerieFolio) + End If + Else + Alert("Ocurrio un error al obtener los datos de la Nomina") + End If + Catch ex As Exception + + GuardaLog(String.Format("Ocurrio un error al generar el reporte RLDC {0}", ex)) + End Try + + + ObjNomina.Dispose() + ObjPersonal.Dispose() + + Return Retorno + End Function + + Private Sub DescargaArchivoDirecto(RutaArchivo As String) If RutaArchivo <> "" Then diff --git a/GPS/ReciboNom.rdlc b/GPS/ReciboNom.rdlc index 567941e6e..13eb33297 100644 --- a/GPS/ReciboNom.rdlc +++ b/GPS/ReciboNom.rdlc @@ -5162,7 +5162,7 @@ HERMOSILLO, SONORA - 0.6cm + 0.36187cm @@ -6471,7 +6471,7 @@ Firma del Trabajador DataSet1 0.15557cm 0.10265cm - 12.89958cm + 12.66146cm 19.12116cm - 5.31354in + 5.14687in