SAT. Cambios en cancelacion de factura. Reforma Fiscal 2022

This commit is contained in:
2022-01-03 20:30:37 -07:00
parent 9966276fdf
commit 2790239a8a
10 changed files with 182 additions and 41 deletions

View File

@@ -261,6 +261,19 @@ Public Class ClsGenerales
End Try
Return retorno
End Function
Public Function GetMotivosCancelacionSAT() As Boolean
Dim retorno As Boolean = False
DataAdapter("PA_Gral_SAT_MotivosCancelacionGet")
Try
SqlAdapter.Fill(Data)
retorno = True
Catch ex As Exception
OnError("Ocurrió un error al obtener los mptivos de cancelación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
End Try
Return retorno
End Function
#Region " I N D I C A D O R E S Y G R A F I C A S"
Public Function GetIndicadores(CveEmpresa As Integer) As DataSet
'Dim Retorno As Boolean = False

View File

@@ -1140,6 +1140,35 @@ Public Class ClsPaginas
'ObjUnidadesMedida.Dispose()
End Set
End Property
Public Shared Property GlobalDTSATMotivosCancelacion(Optional CveMotivoCancelacion As Integer = -1, Optional CodigoSAT As String = "-1") As DataTable
Get
If HttpContext.Current.Application("GlobalDTSATMotivosCancelacion") Is Nothing Then
Using ObjGral As New ClsGenerales
If ObjGral.GetMotivosCancelacionSAT() Then
HttpContext.Current.Application("GlobalDTSATMotivosCancelacion") = ObjGral.DtResultados.Copy()
End If
End Using
End If
If CveMotivoCancelacion <> -1 OrElse CodigoSAT <> "-1" Then
Dim StrSQL As New StringBuilder
StrSQL.Append("1=1")
If CveMotivoCancelacion <> -1 Then StrSQL.AppendFormat(" AND CveMotivoCancelacion = {0}", CveMotivoCancelacion)
If CodigoSAT <> "-1" Then StrSQL.AppendFormat(" AND CodigoSAT = '{0}'", CodigoSAT)
Dim Dv As New DataView(DirectCast(HttpContext.Current.Application("GlobalDTSATMotivosCancelacion"), DataTable), StrSQL.ToString.Trim.TrimStart("A"c, "N"c, "D"c), " CveMotivoCancelacion", DataViewRowState.CurrentRows)
GlobalDTSATMotivosCancelacion = Dv.ToTable
Dv.Dispose()
Else
GlobalDTSATMotivosCancelacion = DirectCast(HttpContext.Current.Application("GlobalDTSATMotivosCancelacion"), DataTable)
End If
End Get
Set(ByVal value As DataTable)
HttpContext.Current.Application("GlobalDTSATMotivosCancelacion") = value
End Set
End Property
Property GlobalDTEstatusOrdenCompra() As DataTable
Get
GlobalDTEstatusOrdenCompra = DirectCast(Application("GlobalDTEstatusOrdenCompra"), DataTable)

View File

@@ -701,7 +701,8 @@ Public Class ClsVentas
End Function
Public Function UpdateEstatusFactura(Estatus As Integer, FolioFiscal As String, SelloSAT As String, FechaCancelacion As DateTime, CveVenta As Integer,
Optional IdPolizaCancelacion As Integer = -1, Optional CvePAC As Integer = -1, Optional CveEstatusRefacturacion As Integer = 0,
Optional CveUsuarioCambiaEstatus As Integer = -1, Optional FechaCambioEstatus As String = "-1", Optional RFCReceptor As String = "-1") As Boolean
Optional CveUsuarioCambiaEstatus As Integer = -1, Optional FechaCambioEstatus As String = "-1", Optional RFCReceptor As String = "-1",
Optional CveMotivoCancelacion As Integer = -1, Optional MotivoCancelacion As String = "") As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_VentasUpdateEstatus")
@@ -718,6 +719,8 @@ Public Class ClsVentas
.Add("@CveUsuarioCambiaEstatus", SqlDbType.Int).Value = CveUsuarioCambiaEstatus
.Add("@FechaCambioEstatus", SqlDbType.VarChar).Value = FechaCambioEstatus
.Add("@RFCReceptor", SqlDbType.VarChar).Value = RFCReceptor
.Add("@CveMotivoCancelacion", SqlDbType.Int).Value = CveMotivoCancelacion
.Add("@MotivoCancelacion", SqlDbType.VarChar).Value = MotivoCancelacion
End With
Try

View File

@@ -4591,8 +4591,8 @@ Namespace Modelos
''' Cancela la factura para poder realizar la refacturacion
''' </summary>
''' <returns></returns>
Public Function CancelarPorRefacturacion() As MCancelacionVentaMensaje
Return CancelarVenta(Me, Me.UsuarioActual, EsRefacturacion:=True)
Public Function CancelarPorRefacturacion(CveMotivoCancelacion As Integer, Motivo As String, Optional FolioSustitucion As String = "") As MCancelacionVentaMensaje
Return CancelarVenta(Me, Me.UsuarioActual, EsRefacturacion:=True, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, FolioSustitucion:=FolioSustitucion)
End Function
''' <summary>
''' Cancela la factura y realiza las operaciones correspondientes
@@ -4600,13 +4600,15 @@ Namespace Modelos
''' <param name="RealizarDevolucionAlmacen"></param>
''' <param name="ListaRemisionesCancelar"></param>
''' <returns></returns>
Public Function CancelarFactura(RealizarDevolucionAlmacen As Boolean, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing) As MCancelacionVentaMensaje
Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar)
Public Function CancelarFactura(RealizarDevolucionAlmacen As Boolean, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional Motivo As String = "") As MCancelacionVentaMensaje
'Comprobante emitido con errores sin relación
Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=2, MotivoCancelacion:=Motivo)
End Function
Private Function CancelarVenta(ObjFactura As Modelos.Factura, UsuarioActual As Usuario, Optional EsRefacturacion As Boolean = False, Optional RealizarDevolucionAlmacen As Boolean = False,
Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveEstatusFacturaAsignado As Integer = -1,
Optional FechaCancelacion As String = "-1", Optional AcuseCancelacion As String = "") As MCancelacionVentaMensaje
Optional FechaCancelacion As String = "-1", Optional AcuseCancelacion As String = "",
Optional CveMotivoCancelacion As Integer = -1, Optional MotivoCancelacion As String = "", Optional FolioSustitucion As String = "") As MCancelacionVentaMensaje
Dim Retorno As New MCancelacionVentaMensaje()
Dim ErrorList As New List(Of String)
@@ -4783,6 +4785,11 @@ Namespace Modelos
Dim RequiereAceptacion As Boolean = False
Dim Mensaje As String = ""
'SI YA ESTA TIMBRADA, NUEVO PROCESO REFACTURACION, ASIGNA LA CANCELACION PENDIENTE
If EsRefacturacion AndAlso Me.CveEstatusFactura = 3 AndAlso CveMotivoCancelacion > 0 Then
CveEstatusFacturaAsignado = 23
End If
If CveEstatusFacturaAsignado <= 0 Then
Try
If ObjFactura.FolioFiscal <> "" AndAlso UsuarioActual.Empresa.FacturaProduccion Then
@@ -4865,7 +4872,7 @@ Namespace Modelos
If Not ObtenerAcuse Then
If ContinuarCancelacion Then
If ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, TotalT, RFCReceptor, UsuarioActual.Empresa.RFC, CvePACCancelacion) Then
If ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, TotalT, RFCReceptor, UsuarioActual.Empresa.RFC, CvePACCancelacion, CveMotivoCancelacion:=CveMotivoCancelacion, FolioSustitucion:=FolioSustitucion) Then
'GENERAMOS EL ACUSE Y MANDAMOS MAIL DE CON EL ACUSE DE CANCELACIÓN
If RequiereAceptacion Then
CancelacionFecha = Now.Date
@@ -4906,7 +4913,7 @@ Namespace Modelos
End Try
Else
CveEstatus = CveEstatusFacturaAsignado
CancelacionFecha = FechaCancelacion.ToDateTime()
CancelacionFecha = If(IsDate(FechaCancelacion), FechaCancelacion, Now.ToString("dd/MM/yyyy")).ToDateTime()
CancelacionAcuse = AcuseCancelacion
End If
@@ -4936,7 +4943,7 @@ Namespace Modelos
End If
'SI ES CANCELACION EN PROCESO CANCELA EL PROCESO DE LAS REMISIONES
Dim SeCancelaRemisionProceso = (CveEstatus = 20 AndAlso TieneRemisionesRelacionadas AndAlso CancelarRemisiones)
Dim SeCancelaRemisionProceso = (CveEstatus.Contiene(20, 23) AndAlso TieneRemisionesRelacionadas AndAlso CancelarRemisiones)
Retorno.CveEstatus = CveEstatus
@@ -4972,7 +4979,7 @@ Namespace Modelos
End If
'CUANDO LA CANCELACION ESTA EN PROCESO NO DEBE REALIZAR NADA DE ESTE PROCESO
If Not AplicaRefacturacionConPagos AndAlso ((((ObjFactura.Saldo > 0 AndAlso (CveEstatus > 0 AndAlso CveEstatus <> 20)) OrElse (ObjFactura.Total = 0 AndAlso UsuarioActual.CveEmpresa.Contiene(72) AndAlso ObjFactura.TipoDocto.Contiene("Ing"))) AndAlso CveEstatus.Contiene(4, 5)) OrElse (CvePlantillaPoliza = 7 AndAlso (CveEstatus > 0 AndAlso CveEstatus <> 20))) Then
If Not AplicaRefacturacionConPagos AndAlso ((((ObjFactura.Saldo > 0 AndAlso (CveEstatus > 0 AndAlso Not CveEstatus.Contiene(20, 23))) OrElse (ObjFactura.Total = 0 AndAlso UsuarioActual.CveEmpresa.Contiene(72) AndAlso ObjFactura.TipoDocto.Contiene("Ing"))) AndAlso CveEstatus.Contiene(4, 5)) OrElse (CvePlantillaPoliza = 7 AndAlso (CveEstatus > 0 AndAlso Not CveEstatus.Contiene(20, 23)))) Then
'CUANDO SE CANCELA, LA PÓLIZA DEBE DE SER DE DIARIO
CvePrePoliza = ObjConta.AddPrePolizas("Modelos/CancelarDocumento", CvePlantillaPoliza, ObjFactura.Total, ObjFactura.Total, ObjFactura.CveMoneda, Now, ObjFactura.Cliente.Nombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoPoliza:=3)
@@ -5009,7 +5016,7 @@ Namespace Modelos
End If
'CUANDO LA CANCELACION ESTA EN PROCESO NO DEBE REALIZAR NADA DE ESTE PROCESO
If Not ErrorCancelar AndAlso Not EsRefacturacion AndAlso (CveEstatus > 0 AndAlso CveEstatus <> 20) AndAlso CveEstatusRefacturacion = 0 Then
If Not ErrorCancelar AndAlso Not EsRefacturacion AndAlso (CveEstatus > 0 AndAlso Not CveEstatus.Contiene(20, 23)) AndAlso CveEstatusRefacturacion = 0 Then
'DEVOLUCION DE ALMACEN
If Not ErrorCancelar AndAlso TieneAlmacen Then
@@ -5477,26 +5484,28 @@ Namespace Modelos
'ACTUALIZA ESTATUS
If Not ErrorCancelar Then
Select Case ObjFactura.TipoDocto
Case "Rem"
CveEstatus = 12
Case "Com"
CveEstatus = 9
Case "Cot"
CveEstatus = 10
Case "Ped", "DPe"
CveEstatus = 14
End Select
If CveEstatus <> 23 Then
Select Case ObjFactura.TipoDocto
Case "Rem"
CveEstatus = 12
Case "Com"
CveEstatus = 9
Case "Cot"
CveEstatus = 10
Case "Ped", "DPe"
CveEstatus = 14
End Select
End If
If CveEstatus.Contiene(4, 5) Then
If Not ObjVentas.UpdateCancelaVenta(CveVenta, CancelacionFecha, CancelacionAcuse, UsuarioActual.CveEmpresa, CvePACCancelacion, CveEstatusRefacturacion) Then
ErrorCancelar = True
MensajeError = "Ocurrió un error al guardar el estatus de cancelación."
End If
Else
If Not ObjVentas.UpdateEstatusFactura(CveEstatus, FolioFiscal, CancelacionAcuse, CancelacionFecha, CveVenta, IDPoliza, CvePAC:=CvePACCancelacion, CveEstatusRefacturacion:=CveEstatusRefacturacion,
CveUsuarioCambiaEstatus:=UsuarioActual.CveUsuario, FechaCambioEstatus:=Now.ToString("yyyy-MM-dd HH:mm:ss.mmm")) Then
CveUsuarioCambiaEstatus:=UsuarioActual.CveUsuario, FechaCambioEstatus:=Now.ToString("yyyy-MM-dd HH:mm:ss.mmm"), CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=MotivoCancelacion) Then
ErrorCancelar = True
MensajeError = "Ocurrió un error al guardar el estatus de cancelación."
End If
@@ -6735,6 +6744,10 @@ Namespace Modelos
Public Property VentaDesglosaIEPS As Boolean
Public Property CveMotivoCancelacion As Integer = -1
Public Property MotivoCancelacion As String = ""
#End Region

View File

@@ -61,7 +61,7 @@ Public Class Timbrado
End Using
Return Retorno
End Function
Public Function CFDICancelar(Empresa As Empresa, FolioFiscal As String, Total As Decimal, RFCReceptor As String, RFCEmisor As String, Optional CvePACCancelacion As Integer = 2, Optional ValidaFactura As Boolean = True) As Boolean
Public Function CFDICancelar(Empresa As Empresa, FolioFiscal As String, Total As Decimal, RFCReceptor As String, RFCEmisor As String, Optional CvePACCancelacion As Integer = 2, Optional ValidaFactura As Boolean = True, Optional CveMotivoCancelacion As Integer = -1, Optional FolioSustitucion As String = "") As Boolean
Dim Retorno As Boolean = False
Dim MsgCancelacion As New StringBuilder
@@ -78,6 +78,14 @@ Public Class Timbrado
End If
End If
Dim CodigoSATMotivoCancelacion As String = ""
If CveMotivoCancelacion > 0 Then
If ClsPaginas.GlobalDTSATMotivosCancelacion(CveMotivoCancelacion) IsNot Nothing AndAlso ClsPaginas.GlobalDTSATMotivosCancelacion(CveMotivoCancelacion).Rows.Count > 0 Then
CodigoSATMotivoCancelacion = ClsPaginas.GlobalDTSATMotivosCancelacion(CveMotivoCancelacion).Rows(0)("CodigoSAT").ToString()
End If
End If
MsgCancelacion.AppendFormat("CvePAC:{0}", CvePACCancelacion)
Select Case CvePACCancelacion
@@ -471,7 +479,7 @@ Public Class Timbrado
objCan.CancelacionCfdi = True
objCan.FechaCancelacion = System.DateTime.Now.AddMinutes(-120) ' operación requerida para que no se presente problemas con fechas adelantadas del PAC
MsgCancelacion.AppendFormat("4.3-")
objCan.GeneraCancelacionB64(certBase64, llaveBase64, Clave, FolioFiscal)
objCan.GeneraCancelacionB64(certBase64, llaveBase64, Clave, FolioFiscal, CodigoSATMotivoCancelacion, FolioSustitucion)
If (objCan.MensajeError = "") Then
MsgCancelacion.AppendFormat("4.4-")
objCan.CancelaCfdi(UsuarioServicio, ClaveServicio, UrlServicio, Empresa.FacturaProduccion)

Binary file not shown.

View File

@@ -67,7 +67,7 @@
<asp:BoundField HeaderText="Mon" DataField="Abreviatura" ItemStyle-Width="30px" />
<asp:BoundField HeaderText="Estatus" DataField="EstatusFactura" ItemStyle-Width="160px" />
<asp:BoundField HeaderText="Fecha Solicitud" DataField="FechaCambioEstatus" ItemStyle-Width="160px" />
<asp:BoundField HeaderText="Fecha Cancelacion" DataField="FechaCancelacion" ItemStyle-Width="160px" />
<asp:BoundField HeaderText="Motivo" DataField="MotivoCancelacion" ItemStyle-Width="25%" />
<asp:TemplateField ItemStyle-Width="35px" HeaderText="Verificar">
<ItemTemplate>
<asp:LinkButton runat="server" OnClick="BtnValidar_Click" CssClass="btn btn-circle btn-sm green" Text="<i class='fa fa-check'></i>" data-toggle="confirmation" data-popout="true" data-original-title="¿Está seguro que desea verificar la cancelación?" data-btn-ok-label="si"></asp:LinkButton>
@@ -116,6 +116,7 @@
<asp:BoundField HeaderText="Fecha Solicitud" DataField="FechaCambioEstatus" ItemStyle-Width="160px" />
<asp:BoundField HeaderText="Fecha Cancelacion" DataField="FechaCancelacion" ItemStyle-Width="160px" />
<asp:BoundField HeaderText="Estatus" DataField="EstatusFactura" ItemStyle-Width="160px" />
<asp:BoundField HeaderText="Motivo" DataField="MotivoCancelacion" ItemStyle-Width="25%" />
<asp:TemplateField ItemStyle-Width="35px" HeaderText="Verificar">
<ItemTemplate>
<asp:LinkButton runat="server" OnClick="BtnValidarRefacturacion_Click" CssClass="btn btn-circle btn-sm green" Text="<i class='fa fa-check'></i>" data-toggle="confirmation" data-popout="true" data-original-title="¿Está seguro que desea verificar la cancelación?" data-btn-ok-label="si"></asp:LinkButton>

View File

@@ -55,7 +55,7 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
}
ObjVentas.Dispose();
GvDatos.DataSource = DtVentas.FiltraParametros("CveEstatusFactura = 20 AND CveEstatusRefacturacion = 0");
GvDatos.DataSource = DtVentas.FiltraParametros("CveEstatusFactura IN(20,23) AND CveEstatusRefacturacion = 0");
var DtRefacturar = DtVentas.FiltraParametros("CveEstatusRefacturacion IN (1,3)");
if (DtRefacturar != null && DtRefacturar.Rows.Count > 0)
@@ -314,7 +314,7 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
var factura = new Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:true);
if (EsRefacturacion)
{
retorno = factura.CancelarPorRefacturacion();
retorno = factura.CancelarPorRefacturacion(1,"");
}
else
{

View File

@@ -10,7 +10,8 @@
padding: 0px 5px;
}
.nolineheight { line-height: 1;
.nolineheight {
line-height: 1;
}
.claseesconder {
@@ -496,8 +497,8 @@
<asp:ListItem Selected="true" Text="Seleccione" Value="-1"></asp:ListItem>
</asp:DropDownList>
</span>
<asp:LinkButton ID="LnkEditarDir" runat="server" OnClick="LnkEditarDir_Click" AlternateText="Editar Dirección" Visible="false" ToolTip="Editar Dirección" CausesValidation="False" CssClass="btn btn-circle btn-xs green" Text="<i class='fa fa-pencil'></i>" />
<asp:LinkButton ID="LnkAplicarDir" runat="server" OnClick="LnkAplicarDir_Click" AlternateText="Actualizar Dirección" Visible="false" ToolTip="Actualizar Dirección" CausesValidation="False" CssClass="btn btn-circle btn-xs blue" Text="<i class='fa fa-check'></i>" />
<asp:LinkButton ID="LnkEditarDir" runat="server" OnClick="LnkEditarDir_Click" AlternateText="Editar Dirección" Visible="false" ToolTip="Editar Dirección" CausesValidation="False" CssClass="btn btn-circle btn-xs green" Text="<i class='fa fa-pencil'></i>" />
<asp:LinkButton ID="LnkAplicarDir" runat="server" OnClick="LnkAplicarDir_Click" AlternateText="Actualizar Dirección" Visible="false" ToolTip="Actualizar Dirección" CausesValidation="False" CssClass="btn btn-circle btn-xs blue" Text="<i class='fa fa-check'></i>" />
<asp:LinkButton ID="LnkOtraDireccion" runat="server" Text="Otra dirección?" Visible="false"></asp:LinkButton>
</table>
</td>
@@ -5356,7 +5357,7 @@
</div>
</div>
</div>
<%-- <div class="row " runat="server" id="DVDireccionCliente1" visible="false">
<%-- <div class="row " runat="server" id="DVDireccionCliente1" visible="false">
<div class="col-md-6">
<div class="form-group form-md-line-input input-iconright">
<asp:TextBox ID="TxtEnvioEstado" runat="server" Width="100%" CssClass="form-control" CausesValidation="true"></asp:TextBox>
@@ -6758,7 +6759,7 @@
<input type="text" id="TxtBusquedaNCBon" class="form-control input-sm" onkeyup="<%= String.Format("FiltrarTabla('TxtBusquedaNCBon','{0}')", GvRemisionesNCBon.ClientID) %>" style="display: inline-block; margin-right: -20px; width: 150px;" />
<a href="javascript:;" onclick="<%= String.Format("FiltrarTabla('TxtBusquedaNCBon','{0}')", GvRemisionesNCBon.ClientID) %>" style="margin-top: -3px;" class="btn btn-circle btn-sm label-info"><i class="icon-magnifier"></i></a>
</div>
<div class="row" id="DivRNCBonificaciones" runat="server" visible="false">
<div class="row" id="DivRNCBonificaciones" runat="server" visible="false">
<div class="col-md-12" style="max-height: 440px; overflow: auto">
<asp:GridView ID="GvRemisionesNCBon" runat="server" AutoGenerateColumns="False"
DataKeyNames="CveVenta,CveVentaRNCCargo" CssClass="table table-striped table-advance table-hover Widthall mysmallbtn" GridLines="None">
@@ -7718,6 +7719,42 @@
</ContentTemplate>
</asp:UpdatePanel>
</div>
<div id="DivMotivoRefacturacion" class="modal ADS fade" role="dialog">
<asp:UpdatePanel class="modal-dialog" runat="server" ID="UpRefac" UpdateMode="Conditional">
<ContentTemplate>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title" id="H1" runat="server">Motivo</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-2">
<label>Motivo:</label>
</div>
<div class="col-md-8">
<asp:DropDownList ID="DdlMotivoCancelacion" CssClass=" form-control input-sm select2me" runat="server" Width="100%" DataTextField="CodigoSATDescripcion" DataValueField="CveMotivoCancelacion">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RFVDdlMotivo" runat="server" CssClass="help-block errorimput" InitialValue="-1" ControlToValidate="DdlMotivoCancelacion" ErrorMessage="<b><span style='text-decoration: underline'>ERROR:</span></b><br />El campo <b>''Motivo''</b> es necesario, por favor ingréselo." ValidationGroup="GrpMotivo"></asp:RequiredFieldValidator>
</div>
</div>
<div>
<label>Descripción:</label>
<asp:TextBox ID="TxtMotivoRefac" runat="server" Height="100" Width="600" TextMode="MultiLine" CausesValidation="true" MaxLength="500"></asp:TextBox>
<asp:RequiredFieldValidator ID="RFVTxtMotivoRefac" runat="server" CssClass="help-block errorimput" ControlToValidate="TxtMotivoRefac" ErrorMessage="<b><span style='text-decoration: underline'>ERROR:</span></b><br />El campo <b>''Descripcion''</b> es necesario, por favor ingréselo." ValidationGroup="GrpMotivo"></asp:RequiredFieldValidator>
</div>
</div>
<div class="modal-footer">
<asp:LinkButton ID="BtnMotivoRefacturacion" runat="server" CssClass="btn btn-primary" ValidationGroup="GrpMotivo"> Refacturar</asp:LinkButton>
<button type="button" class="btn btn-default" data-dismiss="modal">Cancelar</button>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</asp:Content>
<asp:Content ID="Content7" ContentPlaceHolderID="JS" runat="Server">
<script src="/Metronic/assets/global/scripts/jquery-sortable.js"></script>

View File

@@ -2319,6 +2319,7 @@ Partial Class Ventas
CargaMetodosPago()
'CargaFormaPago(-1)
CargaUsoCFDI()
CargaMotivosCancelacion()
CargaTiposRelacion()
CargaMonedas()
CargaVendedores()
@@ -2981,9 +2982,12 @@ Partial Class Ventas
If Me.CveDevolucion > 0 AndAlso Me.NuevaFactura = 1 Then
Dim TipoEstatus As Integer = GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {Me.ObjFacturaNC.CveEstatusFactura}").ToEntero()
If TipoEstatus <> 5 Then
Alert($"El documento de tipo '{Me.ObjFacturaNC.TipodeComprobante}' a refacturar no ha sido cancelado. Favor de verificar el documento", TipoMensaje.MsgAdvertencia)
BtnEmitirImprimir.Visible = False
UpFacturar.Update()
'ESTATUS DE CANCELACION PENDIENTE
If Not Me.ObjFacturaNC.CveEstatusFactura = 23 Then
Alert($"El documento de tipo '{Me.ObjFacturaNC.TipodeComprobante}' a refacturar no ha sido cancelado. Favor de verificar el documento", TipoMensaje.MsgAdvertencia)
BtnEmitirImprimir.Visible = False
UpFacturar.Update()
End If
End If
End If
End If
@@ -4187,7 +4191,7 @@ Partial Class Ventas
LblAlertRefacInv.Visible = True
End If
If DdlTipoComprobante.SelectedValue.Contiene("Egs", "Ing", "Ant", "Dev", "Rem", "DPe", "RNC", "Pd2", "Cot") AndAlso Not CveEstatus.Contiene(4, 5, 10, 12, 13, 20) Then
If DdlTipoComprobante.SelectedValue.Contiene("Egs", "Ing", "Ant", "Dev", "Rem", "DPe", "RNC", "Pd2", "Cot") AndAlso Not CveEstatus.Contiene(4, 5, 10, 12, 13, 20, 23) Then
If UsuarioActual.TienePermisoProceso(159) Then
Dim TienePermiso As String = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, -1).FiltroPrimeroValor("CveSubProyecto", String.Format("CveSubProyecto = {0}", DbRowVenta("CveSubProyecto")))
If TienePermiso <> "" Then
@@ -5480,6 +5484,13 @@ Partial Class Ventas
DdlUsoCFDI.DataBind()
DdlSucursalUsoCFDI.DataBind()
End Sub
Private Sub CargaMotivosCancelacion()
DdlMotivoCancelacion.DataSource = GlobalDTSATMotivosCancelacion()
DdlMotivoCancelacion.DataBind()
DdlMotivoCancelacion.Items.Insert(0, New ListItem("Seleccione", "-1"))
End Sub
Private Sub CargaTiposRelacion()
DdlTiposRelacion.DataSource = GlobalDTVtaTiposRelacion
DdlTipoRelacionARelacionar.DataSource = GlobalDTVtaTiposRelacion
@@ -8766,6 +8777,12 @@ Partial Class Ventas
Alert(ObjTimbrado.MensajeErrorCFDI, TipoMensaje.MsgError)
End If
If SeTimbro AndAlso (Me.CveDevolucion > 0 AndAlso Me.NuevaFactura = 1) Then
If Me.ObjFacturaNC IsNot Nothing Then
Me.ObjFacturaNC.CancelarPorRefacturacion(Me.ObjFacturaNC.CveMotivoCancelacion, Me.ObjFacturaNC.MotivoCancelacion, ObjTimbrado.UUID)
End If
End If
End If
'NOTA DE CREDITO DE REFACTURACION
@@ -20312,12 +20329,26 @@ Partial Class Ventas
Alert(sb.ToString(), TipoMensaje.MsgConfirmacion, JSBtnAceptar:=script, TextoConfirmacion:="&nbsp;&nbsp;&nbsp;&nbsp;Si&nbsp;&nbsp;&nbsp;&nbsp;", TextoCancelacion:="&nbsp;&nbsp;&nbsp;&nbsp;No&nbsp;&nbsp;&nbsp;&nbsp;")
End If
End Sub
Private Sub BtnMotivoRefacturacion_Click(sender As Object, e As System.EventArgs) Handles BtnMotivoRefacturacion.Click
CancelarDocumento(EsRefacturacion:=True)
End Sub
'BtnRefacturacionConfirmar
Private Sub BtnRefacturacionConfirmar_Click(sender As Object, e As System.EventArgs) Handles BtnRefacturacionConfirmar.Click
CancelarDocumento(True)
DdlMotivoCancelacion.SelectedValueExist(1)
DdlMotivoCancelacion.Enabled = False
UpRefac.Update()
RegistraScript("$('#DivMotivoRefacturacion').modal({ backdrop: 'static', keyboard: false });", "R1")
'CancelarDocumento(True)
End Sub
Private Sub BtnRefacturacionConfirmarAceptacion_Click(sender As Object, e As System.EventArgs) Handles BtnRefacturacionConfirmarAceptacion.Click
CancelarDocumento(True)
DdlMotivoCancelacion.SelectedValueExist(1)
DdlMotivoCancelacion.Enabled = False
UpRefac.Update()
RegistraScript("$('#DivMotivoRefacturacion').modal({ backdrop: 'static', keyboard: false });", "R1")
'CancelarDocumento(True)
End Sub
Private Sub BtnContabilizar_Click(sender As Object, e As System.EventArgs) Handles BtnContabilizar.Click
'Dim ObjMov As New ClsContabilidad
@@ -22997,7 +23028,13 @@ Partial Class Ventas
SWatch.Start()
If EsRefacturacion Then
resp = ObjFacturaCancelacion.CancelarPorRefacturacion()
'Dim msgBitacora As String = $"Motivo de refacturación: {TxtMotivoRefac.Text}"
'Dim ObjE As New ClsOIEventos()
'ObjE.AddEventoBitacora(msgBitacora, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta)
'ObjE.Dispose()
resp = ObjFacturaCancelacion.CancelarPorRefacturacion(DdlMotivoCancelacion.SelectedValue.ToEntero(), TxtMotivoRefac.Text)
Else
Dim ListaRemisionesCancelar As New List(Of Integer)
If ChkCanRem.Checked Then
@@ -23031,7 +23068,7 @@ Partial Class Ventas
If EsRefacturacion Then
If resp.CveEstatus = 20 Then
LigaRedirigir = $"/Ventas/RepCancelacionesPorRespuesta.aspx?CveVenta={CveVenta}"
ElseIf resp.CveEstatus.Contiene(4, 5) Then
ElseIf resp.CveEstatus.Contiene(4, 5, 23) Then
LigaRedirigir = $"Ventas.aspx?CveDevolucion={CveVenta}&NuevaFactura=1"
Else
Alert(resp.Mensaje, resp.TipoMensaje, JSBtnAceptar:="BtnRefrescarPagina();")