--Cambios en estructura de cancelacion con pagos y generacion de IxC

This commit is contained in:
2024-12-07 15:16:07 -07:00
parent ee88a49c7b
commit 07f9c6486b
4 changed files with 84 additions and 50 deletions

View File

@@ -347,6 +347,12 @@ Namespace Modelos
#Region " OBJETOS Ventas"
Public Enum OpcionesCancelacionPagos
SinPagos = 1
ConPagos_CancelarIE = 2
ConPagos_GenerarIxC = 3
End Enum
<Serializable>
Public Class MPrecioSugerido
Public Property CvePrecioLista As Integer
@@ -3062,9 +3068,10 @@ Namespace Modelos
Optional ValorMultiplicador As Integer = 1, ByRef Optional ObjBancos As ClsBancos = Nothing, ByRef Optional ObjVentas As ClsVentas = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing,
Optional ByRef DtRemisionesRelacionadas As DataTable = Nothing, Optional SeCancelaRemisionProceso As Boolean = False, Optional CancelarRemisiones As Boolean = False, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing,
Optional CveEstatusRefacturacion As Integer = 0, Optional ByRef ObjInventario As ClsInventarios = Nothing, Optional FechaCancelacion As DateTime = MinFecha, Optional ObjClientes As ClsClientes = Nothing,
Optional AplicaCancelacionConPagos As Boolean = False, Optional GeneraIxCconPago As Boolean = False) As Boolean
Optional CancelacionPagos As OpcionesCancelacionPagos = OpcionesCancelacionPagos.SinPagos) As Boolean
Dim ErrorPrepoliza As Boolean = False
Try
Dim AplicaCancelacionConPagos As Boolean = (CancelacionPagos = OpcionesCancelacionPagos.ConPagos_CancelarIE OrElse CancelacionPagos = OpcionesCancelacionPagos.ConPagos_GenerarIxC)
If ObjFactura.TipoDocto.Contiene("Ing", "Rem") AndAlso AplicaCancelacionConPagos AndAlso ValorMultiplicador = -1 Then
Dim DtPagosVenta As DataTable = Nothing
@@ -3088,21 +3095,27 @@ Namespace Modelos
'SI ES PAGO DE BANCOS, CANCELAR EL IE
If DrPago("TipoPago").ToString() = "B" Then
If GeneraIxCconPago Then
'RESTAR SALDOS APLICADOS
Dim ImporteIxC As Decimal = DrPago("Importe").ToString().ToDecimal()
Dim ImportePago As Decimal = ImporteIxC * -1
If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, ImportePago, ImportePago, 2, DrPago("Folio").ToString(), DrPago("Folio").ToString(), CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=DrPago("CveIE").ToString().ToEntero(), ImporteME:=If(ObjFactura.TipoCambio = 1, 0, ImportePago), Contabilizable:=True, CveSubProyecto:=ObjFactura.CveSubProyecto) Then
ErrorPrepoliza = True
End If
'RESTAR SALDOS APLICADOS
Select Case CancelacionPagos
Case OpcionesCancelacionPagos.ConPagos_GenerarIxC
Dim ImporteIxC As Decimal = DrPago("Importe").ToString().ToDecimal()
Dim ImportePago As Decimal = ImporteIxC * -1
If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, ImporteIxC, ImporteIxC, 66, DrPago("Folio").ToString(), DrPago("Folio").ToString(), CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=DrPago("CveIE").ToString().ToEntero(), ImporteME:=If(ObjFactura.TipoCambio = 1, 0, ImporteIxC), Contabilizable:=True, CveSubProyecto:=ObjFactura.CveSubProyecto) Then
If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, ImportePago, ImportePago, 2, DrPago("Folio").ToString(), DrPago("Folio").ToString(), CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=DrPago("CveIE").ToString().ToEntero(), ImporteME:=If(ObjFactura.TipoCambio = 1, 0, ImportePago), Contabilizable:=True, CveSubProyecto:=ObjFactura.CveSubProyecto) Then
ErrorPrepoliza = True
End If
If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, ImporteIxC, ImporteIxC, 66, DrPago("Folio").ToString(), DrPago("Folio").ToString(), CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=DrPago("CveIE").ToString().ToEntero(), ImporteME:=If(ObjFactura.TipoCambio = 1, 0, ImporteIxC), Contabilizable:=True, CveSubProyecto:=ObjFactura.CveSubProyecto) Then
ErrorPrepoliza = True
End If
Case OpcionesCancelacionPagos.ConPagos_CancelarIE
ErrorPrepoliza = ObjBancos.CancelarBancos_IE(UsuarioActual.CveUsuario, DrPago("CveIE").ToString().ToEntero(), False, -1, -1, Now) <= 0
Case OpcionesCancelacionPagos.SinPagos
ErrorPrepoliza = True
End If
Else
ErrorPrepoliza = ObjBancos.CancelarBancos_IE(UsuarioActual.CveUsuario, DrPago("CveIE").ToString().ToEntero(), False, -1, -1, Now) <= 0
End If
End Select
Else
'RESTAR SALDOS APLICADOS
Dim Importe As Decimal = DrPago("Importe").ToString().ToDecimal() * -1
@@ -5639,7 +5652,7 @@ Namespace Modelos
''' <param name="FechaCancelacion"></param>
''' <param name="AcuseCancelacion"></param>
''' <returns></returns>
Public Function EjecutarCancelacionPendiente(CveEstatus As Integer, FechaCancelacion As DateTime, AcuseCancelacion As String, Optional ValidarSAT As Boolean = True, Optional AplicaCancelacionConPagos As Boolean = False) As MCancelacionVentaMensaje
Public Function EjecutarCancelacionPendiente(CveEstatus As Integer, FechaCancelacion As DateTime, AcuseCancelacion As String, Optional ValidarSAT As Boolean = True, Optional CancelacionPagos As OpcionesCancelacionPagos = OpcionesCancelacionPagos.SinPagos) As MCancelacionVentaMensaje
Dim ListaRemisionesCancelar As New List(Of Integer)
Dim ObjVentas As New ClsVentas()
If ObjVentas.GetRemisionesXCancelar(Me.CveVenta) Then
@@ -5649,7 +5662,7 @@ Namespace Modelos
End If
ObjVentas.Dispose()
Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=Me.RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveEstatusFacturaAsignado:=CveEstatus, FechaCancelacion:=FechaCancelacion.ToString("dd/MM/yyyy hh:mm:ss"), AcuseCancelacion:=AcuseCancelacion, CveMotivoCancelacion:=Me.CveMotivoCancelacion, MotivoCancelacion:=Me.MotivoCancelacion, ValidarSAT:=ValidarSAT, AplicaCancelacionConPagos:=AplicaCancelacionConPagos)
Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=Me.RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveEstatusFacturaAsignado:=CveEstatus, FechaCancelacion:=FechaCancelacion.ToString("dd/MM/yyyy hh:mm:ss"), AcuseCancelacion:=AcuseCancelacion, CveMotivoCancelacion:=Me.CveMotivoCancelacion, MotivoCancelacion:=Me.MotivoCancelacion, ValidarSAT:=ValidarSAT, CancelacionPagos:=CancelacionPagos)
End Function
''' <summary>
''' Cancela la factura para poder realizar la refacturacion
@@ -5664,16 +5677,16 @@ Namespace Modelos
''' <param name="RealizarDevolucionAlmacen"></param>
''' <param name="ListaRemisionesCancelar"></param>
''' <returns></returns>
Public Function CancelarFactura(RealizarDevolucionAlmacen As Integer, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveMotivoCancelacion As Integer = -1, Optional Motivo As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0, Optional CancelarBoletos As Boolean = False, Optional AplicaCancelacionConPagos As Boolean = False, Optional GeneraIxCconPago As Boolean = False, Optional ForzarDevolucion As Boolean = False) As MCancelacionVentaMensaje
Public Function CancelarFactura(RealizarDevolucionAlmacen As Integer, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveMotivoCancelacion As Integer = -1, Optional Motivo As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0, Optional CancelarBoletos As Boolean = False, Optional ForzarDevolucion As Boolean = False, Optional CancelacionPagos As OpcionesCancelacionPagos = OpcionesCancelacionPagos.SinPagos) As MCancelacionVentaMensaje
'Comprobante emitido con errores sin relación
Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, CveEstadoCancelacion:=CveEstadoCancelacion, CancelarBoletos:=CancelarBoletos, AplicaCancelacionConPagos:=AplicaCancelacionConPagos, GeneraIxCconPago:=GeneraIxCconPago, ForzarDevolucion:=ForzarDevolucion)
Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, CveEstadoCancelacion:=CveEstadoCancelacion, CancelarBoletos:=CancelarBoletos, ForzarDevolucion:=ForzarDevolucion, CancelacionPagos:=CancelacionPagos)
End Function
Private Function CancelarVenta(ObjFactura As Modelos.Factura, UsuarioActual As Usuario, Optional EsRefacturacion As Boolean = False, Optional RealizarDevolucionAlmacen As Integer = 0,
Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveEstatusFacturaAsignado As Integer = -1, Optional FechaCancelacion As String = "-1",
Optional AcuseCancelacion As String = "", Optional CveMotivoCancelacion As Integer = -1, Optional MotivoCancelacion As String = "",
Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0,
Optional CancelarBoletos As Boolean = False, Optional AplicaCancelacionConPagos As Boolean = False, Optional GeneraIxCconPago As Boolean = False, Optional ForzarDevolucion As Boolean = False) As MCancelacionVentaMensaje
Optional CancelarBoletos As Boolean = False, Optional ForzarDevolucion As Boolean = False, Optional CancelacionPagos As OpcionesCancelacionPagos = OpcionesCancelacionPagos.SinPagos) As MCancelacionVentaMensaje
Dim Retorno As New MCancelacionVentaMensaje()
Dim ErrorList As New List(Of String)
@@ -5731,6 +5744,8 @@ Namespace Modelos
AplicaRefacturacionConPagos = False
End If
Dim AplicaCancelacionConPagos As Boolean = (CancelacionPagos = OpcionesCancelacionPagos.ConPagos_CancelarIE OrElse CancelacionPagos = OpcionesCancelacionPagos.ConPagos_GenerarIxC)
'VALIDA QUE LA FACTURA NO TENGA PAGOS
If Not AplicaRefacturacionConPagos AndAlso Not AplicaCancelacionConPagos AndAlso ObjFactura.TipoDocto.Contiene("Ing", "Rem") AndAlso ObjFactura.Pagado > 0 Then
Retorno.Mensaje = "La factura no se puede cancelar debido a que tiene pagos vinculados."
@@ -6173,7 +6188,7 @@ Namespace Modelos
If Not ErrorCancelar Then
ErrorCancelar = ProcesoPrepolizas(ObjFactura, ObjConta, -1, ObjFactura.DtDetalle, -1, ObjBancos, ObjVentas, ObjEventos, DtRemisionesRelacionadas:=DtRemisionesRelacionadas, SeCancelaRemisionProceso:=SeCancelaRemisionProceso,
CancelarRemisiones:=CancelarRemisiones, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveEstatusRefacturacion:=CveEstatusRefacturacion, ObjInventario:=ObjInventario, FechaCancelacion:=CancelacionFecha,
ObjClientes:=ObjClientes, AplicaCancelacionConPagos:=AplicaCancelacionConPagos, GeneraIxCconPago:=GeneraIxCconPago)
ObjClientes:=ObjClientes, CancelacionPagos:=CancelacionPagos)
MensajeError = "Ocurrió un error al generar la prepoliza de cancelación."
End If

View File

@@ -627,13 +627,19 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
}
}
bool AplicaCancelacionConPagos = false;
if (UsuarioActual.Empresa.Funcionalidad(382) == "1" || UsuarioActual.Empresa.Funcionalidad(109) == "1")
var CancelacionPagos = Modelos.OpcionesCancelacionPagos.SinPagos;
if (UsuarioActual.Empresa.Funcionalidad(109) == "1")
{
AplicaCancelacionConPagos = true;
CancelacionPagos = Modelos.OpcionesCancelacionPagos.ConPagos_CancelarIE;
}
retorno = factura.EjecutarCancelacionPendiente(CveEstatus, CancelacionFecha, CancelacionAcuse, AplicaCancelacionConPagos: AplicaCancelacionConPagos);
if (UsuarioActual.Empresa.Funcionalidad(382) == "1")
{
CancelacionPagos = Modelos.OpcionesCancelacionPagos.ConPagos_GenerarIxC;
}
retorno = factura.EjecutarCancelacionPendiente(CveEstatus, CancelacionFecha, CancelacionAcuse, CancelacionPagos: CancelacionPagos);
}
@@ -722,11 +728,6 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
// if (e.Row.FCLinkButton("LnkCancelarFolioSustitucion") != null) e.Row.FCLinkButton("LnkCancelarFolioSustitucion").Visible = true;
//}
}
if (string.IsNullOrEmpty(e.Row.DBCampo("FolioFiscal")))
{
e.Row.FCLinkButton("LnkValidarRefac").Visible = false;
}
}
}

View File

@@ -8174,11 +8174,6 @@
<asp:CheckBox ID="ChkDevAlm" AutoPostBack="true" runat="server" OnCheckedChanged="ChkDevAlm_CheckedChanged" /><asp:Label ID="LblDevAlm" Text="Devolución Almacen" runat="server"></asp:Label>
</h5>
</div>
<div id="DivGeneraIxC" runat="server" visible="false">
<h5>
<asp:CheckBox ID="ChkGeneraIxC" runat="server" /><asp:Label ID="Label4" Text="Genera IxC" runat="server"></asp:Label>
</h5>
</div>
</div>
<div class="modal-footer">
<asp:UpdatePanel ID="UpFooterCancelarRemision" runat="server" UpdateMode="Conditional">

View File

@@ -12,6 +12,7 @@ Imports ADSNetLibrary.SIGAPI.Services.CRM
Imports ADSTimbrado
Imports Extensiones
Imports Microsoft.Reporting.WebForms
Imports Modelos
Imports Newtonsoft.Json.Linq
Partial Class Ventas
@@ -9015,6 +9016,10 @@ Partial Class Ventas
End If
If UsuarioActual.CveEmpresa = 189 AndAlso Not DdlTipoComprobante.SelectedValue.Contiene("Ant") Then
GvPS.Rows(e.NewEditIndex).FCTextBox("TxtPrecio").Enabled = False
End If
End Sub
Protected Sub GvPS_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GvPS.RowCancelingEdit
GvPS.EditIndex = -1
@@ -18404,7 +18409,12 @@ Partial Class Ventas
ObjPrecioSugerido.PrecioSugerido = 0
tPrecioSugerido = 0
PrecioSugerido = 0
TxtPrecio.Enabled = True
Else
TxtPrecio.Enabled = False
End If
End If
If PrecioSugerido <= 0 Then PrecioSugerido = tPrecioSugerido
@@ -18664,6 +18674,7 @@ Partial Class Ventas
If PrecioSugerido <= 0 Then PrecioSugerido = tPrecioSugerido
GvRow.FCTextBox("TxtPrecio").Text = PrecioSugerido.ToString("#,###.####") ' que muestre hasta los 4 digitos si lo requiere
End If
End If
End If
@@ -26217,6 +26228,10 @@ Partial Class Ventas
SbCondiciones.Append("<br><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-La remisión está relacionada con otra factura.</b>")
End If
If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then
DivCanRem.Visible = False
End If
If Extra.Length > 0 Then
SbCondiciones.AppendFormat("<br><b>*{0}</b>", Extra)
End If
@@ -26254,10 +26269,6 @@ Partial Class Ventas
Exit Sub
End If
If UsuarioActual.CveRol = 1 AndAlso UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then
DivGeneraIxC.Visible = True
End If
If SaldoAlmacen <> 0 Then
If UsuarioActual.TienePermisoProceso(269) Then
@@ -26412,6 +26423,14 @@ Partial Class Ventas
End If
LblCancelarDocumento.Text = sb.ToString()
If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then
sbExtra.Append("Se generará un saldo a favor con el pago del cliente")
If GvCancelarRemisiones.Rows.Cast(Of GridViewRow).Count(Function(x) x.RowType = DataControlRowType.DataRow) > 0 Then
sbExtra.Append("<br/><b>*Las remisones relacionadas se van a cancelar con la factura</b>")
End If
End If
MostrarCondicionesCancelacion(sbExtra.ToString(), SaldoAlmacen)
RegistraScript("$('#ModalCancelarDocumento').modal();")
@@ -26665,25 +26684,29 @@ Partial Class Ventas
ChkDevAlm.Checked = True
End If
Dim AplicaCancelacionConPagos As Boolean = False
Dim CancelacionPagos = OpcionesCancelacionPagos.SinPagos
If (UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(382) = "1") AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Ing", "Rem") AndAlso Not EsRefacturacion AndAlso ObjFacturaCancelacion.Pagado > 0 Then
AplicaCancelacionConPagos = True
If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Ing", "Rem") AndAlso Not EsRefacturacion AndAlso ObjFacturaCancelacion.Pagado > 0 Then
CancelacionPagos = OpcionesCancelacionPagos.ConPagos_CancelarIE
End If
Dim GenerarIxC As Boolean = False
'PARA GENERAR LA DEVOLUCION DE ALMACEN SIN ESPERAR LA ACEPTACION DEL SAT
Dim GenerarDevolucionAnticipada As Boolean = False
If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso AplicaCancelacionConPagos AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Ing") Then
GenerarIxC = ChkGeneraIxC.Checked
If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Ing", "Rem") AndAlso Not EsRefacturacion AndAlso ObjFacturaCancelacion.Pagado > 0 Then
If ChkDevAlm.Checked Then
GenerarDevolucionAnticipada = True
End If
For Each Gvr As GridViewRow In GvCancelarRemisiones.Rows
ListaRemisionesCancelar.Add(Gvr.DataKey("CveVenta").ToEntero())
Next
CancelacionPagos = OpcionesCancelacionPagos.ConPagos_GenerarIxC
End If
Dim ForzarDevolucion As Boolean = False
If ChkDevAlm.Checked AndAlso UsuarioActual.CveEmpresa = 189 Then
ForzarDevolucion = True
End If
resp = ObjFacturaCancelacion.CancelarFactura(If(ChkDevAlm.Checked, 1, 0), ListaRemisionesCancelar, CveMotivoCancelacion:=DdlMotivoCancelacion.SelectedValue.ToEntero(), Motivo:=TxtMotivoCancelacion.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion, AplicaCancelacionConPagos:=AplicaCancelacionConPagos, GeneraIxCconPago:=GenerarIxC, ForzarDevolucion:=ForzarDevolucion)
resp = ObjFacturaCancelacion.CancelarFactura(If(ChkDevAlm.Checked, 1, 0), ListaRemisionesCancelar, CveMotivoCancelacion:=DdlMotivoCancelacion.SelectedValue.ToEntero(), Motivo:=TxtMotivoCancelacion.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion, ForzarDevolucion:=GenerarDevolucionAnticipada, CancelacionPagos:=CancelacionPagos)
strMensaje.Append(resp.Mensaje)
Dim DtBonificaciones As DataTable = Nothing