Refacturacion de facturas canceladas, cancelacion de refacturada desde el reporte. correccion de poliza en empresa UsaAC
This commit is contained in:
@@ -838,7 +838,7 @@ Public Class ClsVentas
|
||||
|
||||
Return Retorno
|
||||
End Function
|
||||
Public Function UpdateEstatusVenta(CveVenta As Integer, CveEstatusFactura As Integer, CveEmpresa As Integer, Optional Num2 As Integer = -1) As Boolean
|
||||
Public Function UpdateEstatusVenta(CveVenta As Integer, CveEstatusFactura As Integer, CveEmpresa As Integer, Optional Num2 As Integer = -1, Optional CveEstatusRefacturacion As Integer = -1, Optional CveMotivoCancelacion As Integer = -1) As Boolean
|
||||
Dim Retorno As Boolean = False
|
||||
|
||||
DataAdapter("PA_Vta_VentasEstatusUpdate")
|
||||
@@ -848,6 +848,8 @@ Public Class ClsVentas
|
||||
.Add("@CveEstatusFactura", SqlDbType.Int).Value = CveEstatusFactura
|
||||
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
|
||||
.Add("@Num2", SqlDbType.Float).Value = Num2
|
||||
.Add("@CveEstatusRefacturacion", SqlDbType.Int).Value = CveEstatusRefacturacion
|
||||
.Add("@CveMotivoCancelacion", SqlDbType.Int).Value = CveMotivoCancelacion
|
||||
End With
|
||||
|
||||
Try
|
||||
|
||||
@@ -4845,7 +4845,8 @@ Namespace Modelos
|
||||
End If
|
||||
|
||||
'SI YA ESTA TIMBRADA, NUEVO PROCESO REFACTURACION, ASIGNA LA CANCELACION PENDIENTE
|
||||
If EsRefacturacion AndAlso Me.CveEstatusFactura = 3 AndAlso CveMotivoCancelacion > 0 Then
|
||||
'EL ESTATUS REFACTURACION 4 ES PARA LAS QUE NO SE PUDIERON CANCELAR, DEBE OBLIGAR A CANCELAR ANTE EL SAT
|
||||
If EsRefacturacion AndAlso Me.CveEstatusFactura = 3 AndAlso CveMotivoCancelacion > 0 AndAlso CveEstatusRefacturacion <> 4 Then
|
||||
CveEstatusFacturaAsignado = 23
|
||||
End If
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
<div class="actions">
|
||||
<div class="btn-group">
|
||||
<div class="row" style="margin-left: 0px; text-align: right" align="left">
|
||||
<div class="row" style="margin-left: 0px; text-align: right" align="left">
|
||||
<div style="margin-right: 15px">
|
||||
<input type="text" id="TxtBusqueda1" class="form-control input-sm" onkeyup="<%= String.Format("FiltrarTabla('TxtBusqueda1','{0}')", GvDatos.ClientID) %>" style="display: inline-block; margin-right: -20px; width: 150px;" />
|
||||
<a href="javascript:;" onclick="<%= String.Format("FiltrarTabla('TxtBusqueda','{0}')", GvDatos.ClientID) %>" style="margin-top: -3px;" class="btn btn-circle btn-sm label-info"><i class="icon-magnifier"></i></a>
|
||||
@@ -49,12 +49,12 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="portlet-body rowpadding">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
||||
|
||||
<asp:GridView ID="GvDatos" runat="server" AutoGenerateColumns="false" EmptyDataText="No se encontraron solicitudes de cancelación"
|
||||
DataKeyNames="CveVenta,CveCliente,Folio,TipoDocto,Nombre,FolioFiscal,Total,SubTotal,RFCReceptor"
|
||||
CssClass="table table-striped table-advance table-hover Widthall ScrollAD mysmallbtn" data-sort="true" GridLines="None" Width="99%">
|
||||
@@ -70,7 +70,7 @@
|
||||
<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>
|
||||
<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>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
</Columns>
|
||||
@@ -88,7 +88,7 @@
|
||||
</div>
|
||||
<div class="actions">
|
||||
<div class="btn-group">
|
||||
<div class="row" style="margin-left: 0px; text-align: right" align="left">
|
||||
<div class="row" style="margin-left: 0px; text-align: right" align="left">
|
||||
<div style="margin-right: 15px">
|
||||
<input type="text" id="TxtBusqueda2" class="form-control input-sm" onkeyup="<%= String.Format("FiltrarTabla('TxtBusqueda2','{0}')", GvRefacturaciones.ClientID) %>" style="display: inline-block; margin-right: -20px; width: 150px;" />
|
||||
<a href="javascript:;" onclick="<%= String.Format("FiltrarTabla('TxtBusqueda','{0}')", GvRefacturaciones.ClientID) %>" style="margin-top: -3px;" class="btn btn-circle btn-sm label-info"><i class="icon-magnifier"></i></a>
|
||||
@@ -96,14 +96,14 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="portlet-body rowpadding">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
|
||||
|
||||
<asp:GridView ID="GvRefacturaciones" runat="server" AutoGenerateColumns="false" EmptyDataText="No se encontraron solicitudes de cancelación"
|
||||
DataKeyNames="CveVenta,CveCliente,Folio,TipoDocto,Nombre,FolioFiscal,Total,SubTotal,FolioFiscalSustitucion,CveEstatusFactura,RFCReceptor"
|
||||
DataKeyNames="CveVenta,CveCliente,SerieFolio,Folio,TipoDocto,Nombre,FolioFiscal,Total,SubTotal,CveEstatusFactura,RFCReceptor,CveEstatusRefacturacion,CveVentaSustitucion,TotalSustitucion,RFCReceptorSustitucion,CveClienteSustitucion,FolioFiscalSustitucion,SerieFolioSustitucion"
|
||||
CssClass="table table-striped table-advance table-hover Widthall ScrollAD mysmallbtn" data-sort="true" GridLines="None" Width="99%" OnRowDataBound="GvDatos_RowDataBound">
|
||||
<Columns>
|
||||
<asp:BoundField HeaderText="Cliente" DataField="Nombre" ItemStyle-Width="25%" />
|
||||
@@ -115,7 +115,7 @@
|
||||
<asp:BoundField HeaderText="Fecha Solicitud" DataField="FechaCambioEstatus" ItemStyle-Width="160px" />
|
||||
<asp:BoundField HeaderText="Estatus" DataField="EstatusFactura" ItemStyle-Width="160px" />
|
||||
<asp:HyperLinkField HeaderText="Folio Sustitución" DataTextField="SerieFolioSustitucion" DataNavigateUrlFields="CveVentaSustitucion" ItemStyle-Width="100px" DataNavigateUrlFormatString="/Ventas/Ventas.aspx?CveVenta={0}" />
|
||||
<asp:BoundField HeaderText="Motivo" DataField="MotivoCancelacion" ItemStyle-Width="25%" />
|
||||
<asp:BoundField HeaderText="Motivo" DataField="MotivoCancelacion" ItemStyle-Width="25%" />
|
||||
<asp:TemplateField ItemStyle-Width="35px" HeaderText="Verificar">
|
||||
<ItemTemplate>
|
||||
<asp:LinkButton ID="LnkValidarRefac" 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>
|
||||
@@ -123,10 +123,19 @@
|
||||
</asp:TemplateField>
|
||||
<asp:TemplateField ItemStyle-Width="35px" HeaderText="Cancelar">
|
||||
<ItemTemplate>
|
||||
<asp:LinkButton ID="LnkCancelar" Visible="false" runat="server" OnClick="BtnCancelarDocumento_Click" CssClass="btn btn-circle btn-sm red" Text="<i class='fa fa-check'></i>" data-toggle="confirmation" data-popout="true" data-original-title="¿Está seguro que desea cancelar el documento?" data-btn-ok-label="si"></asp:LinkButton>
|
||||
<div class="row" style="padding-bottom:3px;">
|
||||
<div class="col-md-12">
|
||||
<asp:LinkButton ID="LnkCancelar" Visible="false" runat="server" OnClick="BtnCancelarDocumento_Click" CssClass="btn btn-circle btn-sm red" Text="<i class='fa fa-check'> Factura Pendiente</i>" data-toggle="confirmation" data-popout="true" data-original-title="¿Está seguro que desea cancelar el documento?" data-btn-ok-label="si"></asp:LinkButton>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<asp:LinkButton ID="LnkCancelarFolioSustitucion" Visible="false" runat="server" OnClick="LnkCancelarFolioSustitucion_Click" CssClass="btn btn-circle btn-sm blue" Text="<i class='fa fa-check'> Folio Sustitucion</i>" data-toggle="confirmation" data-popout="true" data-original-title="¿Está seguro que desea cancelar el documento?" data-btn-ok-label="si"></asp:LinkButton>
|
||||
</div>
|
||||
</div>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
<asp:HyperLinkField HeaderText="Refacturar" Text="Refacturar" DataNavigateUrlFields="CveVenta" ItemStyle-Width="100px" DataNavigateUrlFormatString="/Ventas/Ventas.aspx?CveDevolucion={0}&NuevaFactura=1" />
|
||||
<asp:HyperLinkField HeaderText="Refacturar" Text="Refacturar" DataNavigateUrlFields="CveVenta" ItemStyle-Width="100px" DataNavigateUrlFormatString="/Ventas/Ventas.aspx?CveDevolucion={0}&NuevaFactura=1" />
|
||||
</Columns>
|
||||
<RowStyle CssClass="Texto" />
|
||||
<HeaderStyle CssClass="Titulos" />
|
||||
|
||||
@@ -68,9 +68,9 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
|
||||
}
|
||||
|
||||
ObjVentas.Dispose();
|
||||
GvDatos.DataSource = DtVentas.FiltraParametros("(CveEstatusFactura = 20 AND CveEstatusRefacturacion = 0)");
|
||||
GvDatos.DataSource = DtVentas.FiltraParametros("(CveEstatusFactura = 20 AND CveEstatusRefacturacion IN (0,4))");
|
||||
|
||||
var DtRefacturar = DtVentas.FiltraParametros("CveEstatusRefacturacion IN (1,3) OR (CveEstatusFactura = 20 AND CveEstatusRefacturacion > 0) OR CveEstatusFactura = 23");
|
||||
var DtRefacturar = DtVentas.FiltraParametros("CveEstatusRefacturacion IN (1,3) OR (CveEstatusFactura = 20 AND CveEstatusRefacturacion IN (1,2,3)) OR CveEstatusFactura = 23");
|
||||
if (DtRefacturar != null && DtRefacturar.Rows.Count > 0)
|
||||
{
|
||||
DivRefacturar.Visible = true;
|
||||
@@ -177,9 +177,25 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
|
||||
string Nombre = GvRow.DataKey("Nombre");
|
||||
string FolioSustitucion = GvRow.DataKey("FolioFiscalSustitucion");
|
||||
|
||||
int CveMotivoCancelacion = -1;
|
||||
int CveEstatusRefacturacion = GvRow.DataKey("CveEstatusRefacturacion").ToEntero();
|
||||
|
||||
//SI NO SE PUDO CANCELAR, CANCELAR CON EL 02
|
||||
if (CveEstatusRefacturacion == 4)
|
||||
{
|
||||
FolioSustitucion = "";
|
||||
//CUANDO LAS REFACTURACIONES NO SE PUEDEN CANCELAR, DEBE SER CANCELADO CON EL MOTIVO 02
|
||||
CveMotivoCancelacion = get_GlobalDTMotivosCancelacionEmpresa(UsuarioActual.CveEmpresa, CveSATMotivoCancelacion: 2).FiltroPrimeroValor("CveMotivoCancelacion").ToEntero();
|
||||
}
|
||||
else
|
||||
{
|
||||
CveEstatusRefacturacion = 2;
|
||||
}
|
||||
|
||||
|
||||
if (CveVenta > 0 && Uuid != "")
|
||||
{
|
||||
var respCancelacion = CancelarDocumento(CveVenta, -1, CveCliente, Folio, Uuid, "", DateTime.Now, TipoDocto, Total.ToDouble(), UsuarioActual.Empresa.CvePAC, EsRefacturacion: true, FolioSustitucion: FolioSustitucion, CveEstatusRefacturacion: 2);
|
||||
var respCancelacion = CancelarDocumento(CveVenta, -1, CveCliente, Folio, Uuid, "", DateTime.Now, TipoDocto, Total.ToDouble(), UsuarioActual.Empresa.CvePAC, EsRefacturacion: true, FolioSustitucion: FolioSustitucion, CveEstatusRefacturacion: CveEstatusRefacturacion);
|
||||
|
||||
if (!respCancelacion.HuboError)
|
||||
{
|
||||
@@ -463,7 +479,7 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
|
||||
retorno.Mensaje = sb.ToString();
|
||||
return retorno;
|
||||
}
|
||||
private Modelos.Factura.MCancelacionVentaMensaje CancelarDocumento(int CveVenta, int CveEstatus, int CveCliente, string Folio, string FolioFiscal, string CancelacionAcuse, DateTime CancelacionFecha, string TipoComprobante, double Total, int CvePACCancelacion, bool EsRefacturacion = false, string FolioSustitucion = "", int CveEstatusRefacturacion = 0)
|
||||
private Modelos.Factura.MCancelacionVentaMensaje CancelarDocumento(int CveVenta, int CveEstatus, int CveCliente, string Folio, string FolioFiscal, string CancelacionAcuse, DateTime CancelacionFecha, string TipoComprobante, double Total, int CvePACCancelacion, bool EsRefacturacion = false, string FolioSustitucion = "", int CveEstatusRefacturacion = 0, int CveMotivoCancelacion = 0)
|
||||
{
|
||||
Modelos.Factura.MCancelacionVentaMensaje retorno = null;
|
||||
var factura = new Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion: true);
|
||||
@@ -480,12 +496,22 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
|
||||
factura.CveEstatusRefacturacion = CveEstatusRefacturacion;
|
||||
}
|
||||
|
||||
if (CveMotivoCancelacion > 0)
|
||||
{
|
||||
factura.CveMotivoCancelacion = CveMotivoCancelacion;
|
||||
}
|
||||
|
||||
int CveEstatusFactura = -1;
|
||||
//SI LA FACTURA YA ESTA CANCELADA, LA ASIGNA YA COMO CANCELADA
|
||||
if (CveEstatus == 5)
|
||||
{
|
||||
CveEstatusFactura = CveEstatus;
|
||||
}
|
||||
//NO DEBE DE ASIGNAR ESTATUS
|
||||
if (CveEstatus == -2)
|
||||
{
|
||||
CveEstatusFactura = -1;
|
||||
}
|
||||
|
||||
retorno = factura.CancelarPorRefacturacion(factura.CveMotivoCancelacion, factura.MotivoCancelacion, FolioSustitucion: FolioSustitucion, CveEstatusFacturaAsignado: CveEstatusFactura);
|
||||
}
|
||||
@@ -561,6 +587,11 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
|
||||
if (e.Row.DBCampo("PuedeRefacturar").ToString().ToEntero() == 0 && e.Row.DBCampo("CveEstatusFactura").ToString().ToEntero() == 23 && e.Row.DBCampo("CveVentaSustitucion").ToEntero() > 0)
|
||||
{
|
||||
e.Row.FCLinkButton("LnkCancelar").Visible = true;
|
||||
//SOLO MOSTRAR SI LA FACTURA NUEVA ESTA EMITIDA
|
||||
if (e.Row.DBCampo("CveEstatusRefacturacion").ToString().ToEntero() != 4 && e.Row.DBCampo("CveEstatusFacturaSustitucion").ToString().ToEntero() == 3)
|
||||
{
|
||||
e.Row.FCLinkButton("LnkCancelarFolioSustitucion").Visible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -708,40 +739,127 @@ public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
|
||||
|
||||
}
|
||||
|
||||
protected void LnkCancelarFolioSustitucion_Click(object sender, EventArgs e)
|
||||
{
|
||||
//this.HdnLigaRefacturar.Value = "";
|
||||
this.CveVenta = -1;
|
||||
|
||||
//protected void BtnAcuse_Click(object sender, EventArgs e)
|
||||
//{
|
||||
// GridViewRow GvRow = (GridViewRow)(((LinkButton)sender).NamingContainer);
|
||||
// string UsuarioServicio = "rene.molina@adsistemas.mx";
|
||||
// string ClaveServicio = "rene2018";
|
||||
// string UrlServicio = "https://cfdi.gofac.com.mx/timbrado.asmx?WSDL";
|
||||
GridViewRow GvRow = (GridViewRow)(((LinkButton)sender).NamingContainer);
|
||||
this.CveVenta = GvRow.DataKey("CveVentaSustitucion").ToEntero();
|
||||
|
||||
// this.CveVenta = GvRow.DataKey("CveVenta").ToEntero();
|
||||
int CveCliente = GvRow.DataKey("CveClienteSustitucion").ToEntero();
|
||||
string Total = GvRow.DataKey("TotalSustitucion");
|
||||
string RFCReceptor = GvRow.DataKey("RFCReceptorSustitucion");
|
||||
string TipoDocto = GvRow.DataKey("TipoDocto");
|
||||
string Nombre = GvRow.DataKey("Nombre");
|
||||
string FolioSustitucion = GvRow.DataKey("FolioFiscalSustitucion");
|
||||
string SerieFolioSustitucion = GvRow.DataKey("SerieFolioSustitucion");
|
||||
|
||||
// string Uuid = GvRow.DataKey("FolioFiscal");
|
||||
// decimal Total = GvRow.DataKey("Total").ToDecimal();
|
||||
// string RFCCliente = GvRow.DataKey("RFCCliente");
|
||||
// string FolioFiscalSustitucion = GvRow.DataKey("FolioFiscalSustitucion");
|
||||
// Cancelacion2022.AcuseSat resp = new Cancelacion2022.AcuseSat();
|
||||
// GoFac.GoCfdi a = new GoFac.GoCfdi();
|
||||
// a.ObtenerAcuse(UrlServicio, UsuarioActual.Empresa.RFC, UsuarioServicio, ClaveServicio, Uuid);
|
||||
int CveVentaOriginal = GvRow.DataKey("CveVenta").ToEntero();
|
||||
string SerieFolioOriginal = GvRow.DataKey("SerieFolio");
|
||||
|
||||
// if (a.CodigoError != 0)
|
||||
// {
|
||||
// //no se pudo obtener, la mandamos cancelar
|
||||
// Timbrado ObjCancelacion = new Timbrado();
|
||||
//CUANDO LAS REFACTURACIONES NO SE PUEDEN CANCELAR, DEBE SER CANCELADO CON EL MOTIVO 02
|
||||
int CveMotivoCancelacion = get_GlobalDTMotivosCancelacionEmpresa(UsuarioActual.CveEmpresa, CveSATMotivoCancelacion: 2).FiltroPrimeroValor("CveMotivoCancelacion").ToEntero();
|
||||
|
||||
// if (ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, Uuid, Total, RFCCliente, UsuarioActual.Empresa.RFC, 4, ValidaFactura:false, CveSATMotivoCancelacion: 1, FolioSustitucion: FolioFiscalSustitucion ))
|
||||
// {
|
||||
// string b = ObjCancelacion.CancelacionAcuse;
|
||||
// //falta actualizar
|
||||
// Alert("Se regeneró la solicitud de cancelación");
|
||||
// }
|
||||
if (CveVenta > 0 && FolioSustitucion != "")
|
||||
{
|
||||
var respCancelacion = CancelarDocumento(CveVenta, -2, CveCliente, "", FolioSustitucion, "", DateTime.Now, TipoDocto, Total.ToDouble(), UsuarioActual.Empresa.CvePAC, EsRefacturacion: true, FolioSustitucion: "", CveEstatusRefacturacion: 4, CveMotivoCancelacion: CveMotivoCancelacion);
|
||||
|
||||
if (!respCancelacion.HuboError)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
var EnviarAcuse = false;
|
||||
if (respCancelacion.CveEstatus > 0)
|
||||
{
|
||||
if (respCancelacion.CveEstatus.Contiene(5, 20))
|
||||
{
|
||||
EnviarAcuse = true;
|
||||
}
|
||||
|
||||
// }
|
||||
var CveEstatus = respCancelacion.CveEstatus;
|
||||
var ObjVentas = new ClsVentas();
|
||||
if (ObjVentas.UpdateEstatusVenta(CveVenta, CveEstatus, UsuarioActual.CveEmpresa))
|
||||
{
|
||||
if (respCancelacion.CveEstatus == 20)
|
||||
{
|
||||
sb.Append($"El estatus de la factura <b>{SerieFolioSustitucion}</b> fue cambiado a 'Cancelación en proceso'.");
|
||||
sb.Append("El documento se canceló correctamente.");
|
||||
sb.Append($"</br> <a href='/Compras/PopUpVerFactura.aspx?P={Encripta($"OP=CAN&CVEVTA={CveVenta}")}' class='Texto' target='_blank'>Imprimir Acuse</a>");
|
||||
}
|
||||
else if (respCancelacion.CveEstatus == 23)
|
||||
{
|
||||
sb.Append("La solicitud de cancelación no la aplicó el SAT, intente cancelar de nuevo.");
|
||||
}
|
||||
else if (respCancelacion.CveEstatus == 5)
|
||||
{
|
||||
sb.Append($"El estatus de la factura <b>{SerieFolioSustitucion}</b> fue cambiado a 'Cancelada'.");
|
||||
sb.Append("El documento se canceló correctamente.");
|
||||
sb.Append($"</br> <a href='/Compras/PopUpVerFactura.aspx?P={Encripta($"OP=CAN&CVEVTA={CveVenta}")}' class='Texto' target='_blank'>Imprimir Acuse</a>");
|
||||
}
|
||||
|
||||
//}
|
||||
if (respCancelacion.CveEstatus.Contiene(5,20))
|
||||
{
|
||||
if (ObjVentas.UpdateEstatusVenta(CveVentaOriginal, 23, UsuarioActual.CveEmpresa, CveEstatusRefacturacion:4, CveMotivoCancelacion: CveMotivoCancelacion))
|
||||
{
|
||||
sb.Append($"</br>La Factura <b>{SerieFolioOriginal}</b> fue desligada.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append("Ocurrió un error al cambiar el estatus de la factura.");
|
||||
}
|
||||
ObjVentas.Dispose();
|
||||
|
||||
if (respCancelacion.CveEstatus == 23)
|
||||
{
|
||||
var resp = Timbrado.VerificarVigenciaSAT(FolioSustitucion, UsuarioActual.Empresa.RFC, RFCReceptor, Total, true);
|
||||
if (resp != null)
|
||||
{
|
||||
sb.AppendFormat("<br/> Folio Fiscal: {0} <br/>", FolioSustitucion);
|
||||
sb.AppendFormat("Código Estado: {0} <br/>", resp.CodigoEstatus);
|
||||
sb.AppendFormat("Estado: {0} <br/>", resp.Estado);
|
||||
sb.AppendFormat("Es Cancelable: {0} <br/>", string.IsNullOrEmpty(resp.EsCancelable) ? "Desconocido" : resp.EsCancelable);
|
||||
sb.AppendFormat("Estatus de Cancelación: {0} <br/><br/>", string.IsNullOrEmpty(resp.EsCancelable) ? "Desconocido" : resp.EstatusCancelacion);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var resp = Timbrado.VerificarVigenciaSAT(FolioSustitucion, UsuarioActual.Empresa.RFC, RFCReceptor, Total, true);
|
||||
if (resp != null)
|
||||
{
|
||||
sb.AppendFormat("Folio Fiscal: {0} <br/>", FolioSustitucion);
|
||||
sb.AppendFormat("Código Estado: {0} <br/>", resp.CodigoEstatus);
|
||||
sb.AppendFormat("Estado: {0} <br/>", resp.Estado);
|
||||
sb.AppendFormat("Es Cancelable: {0} <br/>", string.IsNullOrEmpty(resp.EsCancelable) ? "Desconocido" : resp.EsCancelable);
|
||||
sb.AppendFormat("Estatus de Cancelación: {0} <br/><br/>", string.IsNullOrEmpty(resp.EsCancelable) ? "Desconocido" : resp.EstatusCancelacion);
|
||||
}
|
||||
|
||||
sb.Append(respCancelacion.Mensaje);
|
||||
}
|
||||
|
||||
if (EnviarAcuse)
|
||||
{
|
||||
sb.Append("</br></br> ¿Desea enviar el Acuse de Cancelación al Cliente?");
|
||||
Alert(sb.ToString(), TipoMensaje.MsgConfirmacion, "BtnEnviarMailCancelacion();", TextoConfirmacion: "Enviar", TextoSegundoBoton: "Cancelar");
|
||||
}
|
||||
else
|
||||
{
|
||||
Alert(sb.ToString());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Alert(respCancelacion.Mensaje, TipoMensaje.MsgError);
|
||||
}
|
||||
|
||||
CargaDatos();
|
||||
}
|
||||
UPDatos.Update();
|
||||
|
||||
}
|
||||
}
|
||||
public class MRespuestaSAT
|
||||
{
|
||||
|
||||
@@ -1266,6 +1266,14 @@ Partial Class Ventas
|
||||
ViewState("CveEstatusRefacturacion") = value
|
||||
End Set
|
||||
End Property
|
||||
Private Property RefacturarCancelada As Boolean
|
||||
Get
|
||||
Return If(IsNothing(ViewState("RefacturarCancelada")), False, CBool(ViewState("RefacturarCancelada")))
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
ViewState("RefacturarCancelada") = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Property CveEstadoCancelacion As Integer
|
||||
Get
|
||||
@@ -4393,10 +4401,13 @@ Partial Class Ventas
|
||||
'End If
|
||||
|
||||
|
||||
If Not CveEstatus.Contiene(4, 5, 12, 13, 20, 23) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Egs", "Ant") AndAlso UsuarioActual.TienePermisoProceso(159) Then
|
||||
If (Not CveEstatus.Contiene(4, 5, 12, 13, 20, 23) OrElse (CveEstatus = 5 AndAlso DbRowVenta("CveEstatusRefacturacion").ToString().ToEntero() = 4)) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Egs", "Ant") AndAlso 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
|
||||
LkRefacturacion.Visible = True
|
||||
If (CveEstatus = 5 AndAlso DbRowVenta("CveEstatusRefacturacion").ToString().ToEntero() = 4) Then
|
||||
RefacturarCancelada = True
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
@@ -9106,6 +9117,15 @@ Partial Class Ventas
|
||||
End If
|
||||
End If
|
||||
|
||||
'MARCAR LA FACTURA ANTERIOR
|
||||
If (Me.CveDevolucion > 0 AndAlso Me.NuevaFactura = 1) Then
|
||||
If Me.ObjFacturaNC IsNot Nothing Then
|
||||
If Me.ObjFacturaNC.CveEstatusRefacturacion = 4 AndAlso Not ObjVentas.UpdateEstatusVenta(ObjFacturaNC.CveVenta, ObjFacturaNC.CveEstatusFactura, UsuarioActual.CveEmpresa, CveEstatusRefacturacion:=5) Then
|
||||
ErrorList.Add("No se actualizó el estatus de la factura anterior.")
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
If ObjFactura.CveVenta > 0 AndAlso ErrorList.Count = 0 AndAlso (SeGuardoPrePoliza Or ObjFactura.TipoDocto.Contiene("Ped", "Cot", "DPe", "PeC", "PA", "Pd2")) Then
|
||||
ObjVentas.Commit()
|
||||
|
||||
@@ -9134,13 +9154,14 @@ Partial Class Ventas
|
||||
End If
|
||||
Else
|
||||
Alert(String.Format("Falta asignación de las siguientes cuentas contables: {0}", CuentasContablesInvalidas), TipoMensaje.MsgAdvertencia)
|
||||
End If
|
||||
|
||||
Else
|
||||
If UsuarioActual.Empresa.UsaAC Then
|
||||
If ObjContPaq IsNot Nothing Then ObjContPaq.Commit()
|
||||
End If
|
||||
End If
|
||||
|
||||
|
||||
'If ObjContPaq IsNot Nothing Then ObjContPaq.RollBack()
|
||||
|
||||
'RMF, cuando es pedido, se manda autorización.
|
||||
If ObjFactura.TipoDocto.Contiene("PA") Then
|
||||
|
||||
@@ -9268,7 +9289,7 @@ Partial Class Ventas
|
||||
|
||||
'CANCELAR FACTURA ANTERIOR
|
||||
If SeTimbro AndAlso (Me.CveDevolucion > 0 AndAlso Me.NuevaFactura = 1) Then
|
||||
If Me.ObjFacturaNC IsNot Nothing Then
|
||||
If Me.ObjFacturaNC IsNot Nothing AndAlso Me.ObjFacturaNC.CveEstatusFactura <> 5 Then
|
||||
Me.ObjFacturaNC.CveEstatusRefacturacion = 2 'MARCAR COMO REFACTURADA
|
||||
MsgCancelacionRefacturacion = Me.ObjFacturaNC.CancelarPorRefacturacion(Me.ObjFacturaNC.CveMotivoCancelacion, Me.ObjFacturaNC.MotivoCancelacion, FolioFiscalFactura)
|
||||
End If
|
||||
@@ -20905,129 +20926,134 @@ Partial Class Ventas
|
||||
'End Sub
|
||||
Private Sub BtnNuevaFactura_Click(sender As Object, e As EventArgs) Handles LkRefacturacion.Click
|
||||
'Nos vamos a la nueva factura
|
||||
Dim script As String = ""
|
||||
If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Dev", "Egs") Then
|
||||
Dim sb As New StringBuilder()
|
||||
If RefacturarCancelada Then
|
||||
Response.Redirect($"Ventas.aspx?CveDevolucion={CveVenta}&NuevaFactura=1")
|
||||
Else
|
||||
Dim script As String = ""
|
||||
If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Dev", "Egs") Then
|
||||
Dim sb As New StringBuilder()
|
||||
|
||||
If Not String.IsNullOrEmpty(FolioFiscal) AndAlso Not (UsuarioActual.Empresa.Funcionalidad(529) = "1") Then
|
||||
sb.Append("La factura se encuentra en el siguiente estatus del SAT:<br/>")
|
||||
If Not String.IsNullOrEmpty(FolioFiscal) AndAlso Not (UsuarioActual.Empresa.Funcionalidad(529) = "1") Then
|
||||
sb.Append("La factura se encuentra en el siguiente estatus del SAT:<br/>")
|
||||
|
||||
Dim TotalT As Decimal = TxtTotal.Text.ToDecimal
|
||||
Dim RFCReceptor As String = LblRFC.Text.Trim
|
||||
Dim TotalT As Decimal = TxtTotal.Text.ToDecimal
|
||||
Dim RFCReceptor As String = LblRFC.Text.Trim
|
||||
|
||||
'SI SE FACTURO LA SUCURSAL DEL CLIENTE TOMA EL RFC DE ESTA
|
||||
If FacturarSucursal AndAlso Me.ClienteSucursal IsNot Nothing Then
|
||||
RFCReceptor = Me.ClienteSucursal.RFC
|
||||
End If
|
||||
'SI SE FACTURO LA SUCURSAL DEL CLIENTE TOMA EL RFC DE ESTA
|
||||
If FacturarSucursal AndAlso Me.ClienteSucursal IsNot Nothing Then
|
||||
RFCReceptor = Me.ClienteSucursal.RFC
|
||||
End If
|
||||
|
||||
Dim SWatch As New Stopwatch
|
||||
SWatch.Start()
|
||||
Dim SWatch As New Stopwatch
|
||||
SWatch.Start()
|
||||
|
||||
Dim Vigencia = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), True)
|
||||
SWatch.Stop()
|
||||
Dim Vigencia = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), True)
|
||||
SWatch.Stop()
|
||||
|
||||
Dim SegundosRespuesta As Double = SWatch.ElapsedMilliseconds / 1000
|
||||
SegundosRespuesta = SegundosRespuesta.ToEntero
|
||||
Dim SegundosRespuesta As Double = SWatch.ElapsedMilliseconds / 1000
|
||||
SegundosRespuesta = SegundosRespuesta.ToEntero
|
||||
|
||||
If SegundosRespuesta >= 5 Then
|
||||
Alert($"Los servicios de validacion del SAT presentan lentitud en la respuesta [{ SegundosRespuesta } s].", TipoMensaje.ToastError, "")
|
||||
End If
|
||||
If SegundosRespuesta >= 5 Then
|
||||
Alert($"Los servicios de validacion del SAT presentan lentitud en la respuesta [{ SegundosRespuesta } s].", TipoMensaje.ToastError, "")
|
||||
End If
|
||||
|
||||
If Vigencia IsNot Nothing Then
|
||||
If Vigencia IsNot Nothing Then
|
||||
|
||||
If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then
|
||||
sb.AppendFormat("<b>{0}</b> <br/>", Vigencia.EsCancelable)
|
||||
If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then
|
||||
sb.AppendFormat("<b>{0}</b> <br/>", Vigencia.EsCancelable)
|
||||
|
||||
DivRelacionadasRefacturacion.Visible = True
|
||||
BtnMotivoRefacturacion.Visible = False
|
||||
DivMotivoRefacturacionTexto.Visible = False
|
||||
DivRelacionadasRefacturacion.Visible = True
|
||||
BtnMotivoRefacturacion.Visible = False
|
||||
DivMotivoRefacturacionTexto.Visible = False
|
||||
|
||||
Dim Relacionados = Timbrado.ConsultarUUIDRelacionados(UsuarioActual.Empresa, FolioFiscal, UsuarioActual.Empresa.FacturaProduccion)
|
||||
If Relacionados IsNot Nothing Then
|
||||
Dim sbExtra As New StringBuilder()
|
||||
If Relacionados.Codigo = 500 Then
|
||||
sbExtra.Append("El servicio de verificación de documentos relacionados no esta disponible.")
|
||||
Else
|
||||
sbExtra.Append(Relacionados.Mensaje)
|
||||
Dim Relacionados = Timbrado.ConsultarUUIDRelacionados(UsuarioActual.Empresa, FolioFiscal, UsuarioActual.Empresa.FacturaProduccion)
|
||||
If Relacionados IsNot Nothing Then
|
||||
Dim sbExtra As New StringBuilder()
|
||||
If Relacionados.Codigo = 500 Then
|
||||
sbExtra.Append("El servicio de verificación de documentos relacionados no esta disponible.")
|
||||
Else
|
||||
sbExtra.Append(Relacionados.Mensaje)
|
||||
|
||||
Dim SbHijos = New StringBuilder()
|
||||
Dim SbPadres = New StringBuilder()
|
||||
Dim SbHijos = New StringBuilder()
|
||||
Dim SbPadres = New StringBuilder()
|
||||
|
||||
'If Relacionados.RelacionadosHijo IsNot Nothing Then
|
||||
' For Each hijo In Relacionados.RelacionadosHijo
|
||||
' SbHijos.AppendFormat("{0};", hijo.Uuid)
|
||||
' Next
|
||||
' If SbHijos.Length > 0 Then
|
||||
' SbHijos.Remove(SbHijos.Length - 1, 1)
|
||||
' End If
|
||||
'End If
|
||||
|
||||
If Relacionados.RelacionadosPadre IsNot Nothing Then
|
||||
For Each padre In Relacionados.RelacionadosPadre
|
||||
SbPadres.AppendFormat("{0};", padre.Uuid)
|
||||
Next
|
||||
If SbPadres.Length > 0 Then
|
||||
SbPadres.Remove(SbPadres.Length - 1, 1)
|
||||
End If
|
||||
End If
|
||||
|
||||
Using ObjVentas As New ClsVentas
|
||||
|
||||
'If SbHijos.Length > 0 Then
|
||||
' If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbHijos.ToString(), UsuarioActual.CveEmpresa) Then
|
||||
' GvFacturasHijosCancelar.DataSource = ObjVentas.DtResultados.Copy()
|
||||
'If Relacionados.RelacionadosHijo IsNot Nothing Then
|
||||
' For Each hijo In Relacionados.RelacionadosHijo
|
||||
' SbHijos.AppendFormat("{0};", hijo.Uuid)
|
||||
' Next
|
||||
' If SbHijos.Length > 0 Then
|
||||
' SbHijos.Remove(SbHijos.Length - 1, 1)
|
||||
' End If
|
||||
'End If
|
||||
|
||||
If SbPadres.Length > 0 Then
|
||||
If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbPadres.ToString(), UsuarioActual.CveEmpresa) Then
|
||||
GvFacturasPadreRefacturar.DataSource = ObjVentas.DtResultados.FiltraParametros($"CveVenta <> {CveVenta}")
|
||||
If Relacionados.RelacionadosPadre IsNot Nothing Then
|
||||
For Each padre In Relacionados.RelacionadosPadre
|
||||
SbPadres.AppendFormat("{0};", padre.Uuid)
|
||||
Next
|
||||
If SbPadres.Length > 0 Then
|
||||
SbPadres.Remove(SbPadres.Length - 1, 1)
|
||||
End If
|
||||
End If
|
||||
|
||||
End Using
|
||||
Using ObjVentas As New ClsVentas
|
||||
|
||||
'If SbHijos.Length > 0 Then
|
||||
' If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbHijos.ToString(), UsuarioActual.CveEmpresa) Then
|
||||
' GvFacturasHijosCancelar.DataSource = ObjVentas.DtResultados.Copy()
|
||||
' End If
|
||||
'End If
|
||||
|
||||
If SbPadres.Length > 0 Then
|
||||
If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbPadres.ToString(), UsuarioActual.CveEmpresa) Then
|
||||
GvFacturasPadreRefacturar.DataSource = ObjVentas.DtResultados.FiltraParametros($"CveVenta <> {CveVenta}")
|
||||
End If
|
||||
End If
|
||||
|
||||
End Using
|
||||
|
||||
'GvFacturasHijosCancelar.DataBind()
|
||||
GvFacturasPadreRefacturar.DataBind()
|
||||
End If
|
||||
|
||||
If sbExtra.Length > 0 Then
|
||||
LbExtraRefacturacion.Text = $"<br><b>*{sbExtra.ToString()}</b>"
|
||||
End If
|
||||
|
||||
'GvFacturasHijosCancelar.DataBind()
|
||||
GvFacturasPadreRefacturar.DataBind()
|
||||
End If
|
||||
|
||||
If sbExtra.Length > 0 Then
|
||||
LbExtraRefacturacion.Text = $"<br><b>*{sbExtra.ToString()}</b>"
|
||||
End If
|
||||
|
||||
End If
|
||||
End If
|
||||
|
||||
If Vigencia.EsCancelable = "Cancelable sin aceptación" Then
|
||||
'script = "BtnRefacturacionConfirmarAceptacion();"
|
||||
Me.CveEstadoCancelacion = 1
|
||||
sb.AppendFormat("<b>{0}</b> <br/>", Vigencia.EsCancelable)
|
||||
sb.Append("Está seguro de realizar la refacturación?.")
|
||||
End If
|
||||
If Vigencia.EsCancelable = "Cancelable sin aceptación" Then
|
||||
'script = "BtnRefacturacionConfirmarAceptacion();"
|
||||
Me.CveEstadoCancelacion = 1
|
||||
sb.AppendFormat("<b>{0}</b> <br/>", Vigencia.EsCancelable)
|
||||
sb.Append("Está seguro de realizar la refacturación?.")
|
||||
End If
|
||||
|
||||
If Vigencia.EsCancelable = "Cancelable con aceptación" OrElse String.IsNullOrEmpty(Vigencia.EsCancelable) Then
|
||||
'script = "BtnRefacturacionConfirmar();"
|
||||
Me.CveEstadoCancelacion = 2
|
||||
sb.AppendFormat("<b>{0}</b> <br/>", "Cancelable con aceptación")
|
||||
sb.Append("Está seguro de cancelar el documento para realizar la refacturación?.")
|
||||
If Vigencia.EsCancelable = "Cancelable con aceptación" OrElse String.IsNullOrEmpty(Vigencia.EsCancelable) Then
|
||||
'script = "BtnRefacturacionConfirmar();"
|
||||
Me.CveEstadoCancelacion = 2
|
||||
sb.AppendFormat("<b>{0}</b> <br/>", "Cancelable con aceptación")
|
||||
sb.Append("Está seguro de cancelar el documento para realizar la refacturación?.")
|
||||
End If
|
||||
Else
|
||||
'If Not UsuarioActual.Empresa.FacturaProduccion Then
|
||||
' script = "BtnRefacturacionConfirmar();"
|
||||
'End If
|
||||
sb.Append("<b>No encontrado</b> <br/>")
|
||||
End If
|
||||
Else
|
||||
'If Not UsuarioActual.Empresa.FacturaProduccion Then
|
||||
' script = "BtnRefacturacionConfirmar();"
|
||||
'End If
|
||||
sb.Append("<b>No encontrado</b> <br/>")
|
||||
'sb.Append("¿Desea realizar la refacturación?<br/>")
|
||||
script = "BtnRefacturacionConfirmarAceptacion();"
|
||||
End If
|
||||
Else
|
||||
'sb.Append("¿Desea realizar la refacturación?<br/>")
|
||||
script = "BtnRefacturacionConfirmarAceptacion();"
|
||||
|
||||
LblEstatusRefacturacion.Text = sb.ToString()
|
||||
UpMotivoRefac.Update()
|
||||
|
||||
RegistraScript("$('#DivMotivoRefacturacion').modal({ backdrop: 'static', keyboard: false });", "R1")
|
||||
'Alert(sb.ToString(), TipoMensaje.MsgConfirmacion, JSBtnAceptar:=script, TextoConfirmacion:=" Si ", TextoCancelacion:=" No ")
|
||||
End If
|
||||
|
||||
LblEstatusRefacturacion.Text = sb.ToString()
|
||||
UpMotivoRefac.Update()
|
||||
|
||||
RegistraScript("$('#DivMotivoRefacturacion').modal({ backdrop: 'static', keyboard: false });", "R1")
|
||||
'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
|
||||
|
||||
Reference in New Issue
Block a user