diff --git a/App_Code/ClsGenerales.vb b/App_Code/ClsGenerales.vb index f1c04e6e0..7bf8d911c 100644 --- a/App_Code/ClsGenerales.vb +++ b/App_Code/ClsGenerales.vb @@ -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 diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 5dc4ae116..1f84f03f7 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -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) diff --git a/App_Code/ClsVentas.vb b/App_Code/ClsVentas.vb index ad1c04887..ece017883 100644 --- a/App_Code/ClsVentas.vb +++ b/App_Code/ClsVentas.vb @@ -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 diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index 1f4db56e7..e8db041ba 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -4591,8 +4591,8 @@ Namespace Modelos ''' Cancela la factura para poder realizar la refacturacion ''' ''' - 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 ''' ''' Cancela la factura y realiza las operaciones correspondientes @@ -4600,13 +4600,15 @@ Namespace Modelos ''' ''' ''' - 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 diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index c075709d5..e6c93b891 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -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) diff --git a/Bin/GoCfdi.dll b/Bin/GoCfdi.dll index 9ccff8cbe..9fbf0c80c 100644 Binary files a/Bin/GoCfdi.dll and b/Bin/GoCfdi.dll differ diff --git a/Ventas/RepCancelacionesPorRespuesta.aspx b/Ventas/RepCancelacionesPorRespuesta.aspx index 5d2d38310..4d64e0f22 100644 --- a/Ventas/RepCancelacionesPorRespuesta.aspx +++ b/Ventas/RepCancelacionesPorRespuesta.aspx @@ -67,7 +67,7 @@ - + @@ -116,6 +116,7 @@ + diff --git a/Ventas/RepCancelacionesPorRespuesta.aspx.cs b/Ventas/RepCancelacionesPorRespuesta.aspx.cs index f6aba3b50..63d67104c 100644 --- a/Ventas/RepCancelacionesPorRespuesta.aspx.cs +++ b/Ventas/RepCancelacionesPorRespuesta.aspx.cs @@ -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 { diff --git a/Ventas/Ventas.aspx b/Ventas/Ventas.aspx index e79c5ec37..c7c7fe0f8 100644 --- a/Ventas/Ventas.aspx +++ b/Ventas/Ventas.aspx @@ -10,7 +10,8 @@ padding: 0px 5px; } - .nolineheight { line-height: 1; + .nolineheight { + line-height: 1; } .claseesconder { @@ -496,8 +497,8 @@ - - + + @@ -5356,7 +5357,7 @@ - <%--
+ <%--
@@ -6758,7 +6759,7 @@ " style="display: inline-block; margin-right: -20px; width: 150px;" /> " style="margin-top: -3px;" class="btn btn-circle btn-sm label-info">
-
+
@@ -7718,6 +7719,42 @@
+ + diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 12b59b146..205aea07c 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -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:="    Si    ", TextoCancelacion:="    No    ") 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();")