Commit inicial Ventas Productivo
This commit is contained in:
519
Ventas/RepCancelacionesPorRespuesta.aspx.cs
Normal file
519
Ventas/RepCancelacionesPorRespuesta.aspx.cs
Normal file
@@ -0,0 +1,519 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.ServiceModel;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using Extensiones;
|
||||
using static Extensiones.ModExtensiones;
|
||||
|
||||
public partial class Ventas_RepCancelacionesPorRespuesta : ClsPaginas
|
||||
{
|
||||
private DataTable DtVentas
|
||||
{
|
||||
get { return (ViewState["DtVentas"] == null) ? null : (DataTable)ViewState["DtVentas"]; }
|
||||
set { ViewState["DtVentas"] = value; }
|
||||
}
|
||||
private int CveVenta
|
||||
{
|
||||
get { return (ViewState["CveVenta"] == null) ? -1 : ViewState["CveVenta"].ToString().ToEntero(); }
|
||||
set { ViewState["CveVenta"] = value; }
|
||||
}
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!IsPostBack)
|
||||
{
|
||||
CargaDatos();
|
||||
}
|
||||
}
|
||||
private void CargaDatos()
|
||||
{
|
||||
if (Request["CveVenta"] != null)
|
||||
{
|
||||
this.CveVenta = Request["CveVenta"].ToString().ToEntero();
|
||||
}
|
||||
var ObjVentas = new ClsVentas();
|
||||
if (ObjVentas.GetVentas(UsuarioActual.CveEmpresa, "-1", "-1", -1, "-1", -1, -1, -2, -1, "-1", "-1", "-1", CveUsuarioConsulta: UsuarioActual.CveUsuario))
|
||||
{
|
||||
if (CveVenta > 0)
|
||||
{
|
||||
DtVentas = ObjVentas.DtResultados.FiltraParametros($"CveVenta={CveVenta}");
|
||||
}
|
||||
else
|
||||
{
|
||||
DtVentas = ObjVentas.DtResultados.Copy();
|
||||
}
|
||||
}
|
||||
ObjVentas.Dispose();
|
||||
GvDatos.DataSource = DtVentas.FiltraParametros("CveEstatusFactura = 20 AND CveEstatusRefacturacion = 0");
|
||||
var DtRefacturar = DtVentas.FiltraParametros("CveEstatusRefacturacion = 1");
|
||||
if (DtRefacturar.Rows.Count > 0)
|
||||
{
|
||||
DivRefacturar.Visible = true;
|
||||
GvRefacturaciones.DataSource = DtRefacturar;
|
||||
GvRefacturaciones.DataBind();
|
||||
}
|
||||
GvDatos.DataBind();
|
||||
UPDatos.Update();
|
||||
}
|
||||
protected void BtnValidar_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
GridViewRow GvRow = (GridViewRow)(((LinkButton)sender).NamingContainer);
|
||||
int CveVenta = GvRow.DataKey("CveVenta").ToEntero();
|
||||
int CveCliente = GvRow.DataKey("CveCliente").ToEntero();
|
||||
string Total = GvRow.DataKey("Total");
|
||||
string SubTotal = GvRow.DataKey("SubTotal");
|
||||
string Uuid = GvRow.DataKey("FolioFiscal");
|
||||
string RFCCliente = GvRow.DataKey("RFCCliente");
|
||||
string Folio = GvRow.DataKey("Folio");
|
||||
string TipoDocto = GvRow.DataKey("TipoDocto");
|
||||
string Nombre = GvRow.DataKey("Nombre");
|
||||
if (CveVenta > 0)
|
||||
{
|
||||
Alert(VerificarVigenciaSAT(CveVenta, CveCliente, Folio, TipoDocto, Uuid, UsuarioActual.Empresa.RFC, RFCCliente, Total));
|
||||
}
|
||||
CargaDatos();
|
||||
}
|
||||
private string VerificarVigenciaSAT(int CveVenta, int CveCliente, string Folio, string TipoDocto, string uuid, string emisor, string receptor, string total, bool EsRefacturacion = false)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
var CancelacionAcuse = "";
|
||||
var CancelacionFecha = DateTime.Now;
|
||||
int CveEstatus = 4;
|
||||
try
|
||||
{
|
||||
var resp = Timbrado.VerificarVigenciaSAT(uuid, UsuarioActual.Empresa.RFC, receptor, total, UsuarioActual.Empresa.FacturaProduccion);
|
||||
if (resp != null)
|
||||
{
|
||||
if (resp.Estado == null)
|
||||
{
|
||||
sb.Append("No se pudo comprobar el estado de la factura. El servicio del sat no esta disponible");
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
sb.AppendFormat("Folio Fiscal: {0} <br/>", uuid);
|
||||
sb.AppendFormat("Codigo 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);
|
||||
|
||||
if ((resp.EsCancelable.ToUpper() == "NO CANCELABLE"))
|
||||
{
|
||||
sb.Append("Esta factura no es cancelable.");
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
if (resp.Estado.ToUpper().Trim() == "CANCELADO" || resp.EstatusCancelacion.ToUpper() == "PLAZO VENCIDO")
|
||||
{
|
||||
CveEstatus = 5;
|
||||
var solicitud = new WSGF.Service1SoapClient();
|
||||
var acuse = solicitud.GetAcuse(emisor, "rene.molina@adsistemas.mx", "rene2018", uuid);
|
||||
|
||||
if (acuse.Estado == 0)
|
||||
{
|
||||
var xmlAcuse = new System.Xml.XmlDocument();
|
||||
xmlAcuse.LoadXml(DecodeBase64(acuse.CfdiB64));
|
||||
|
||||
CancelacionAcuse = xmlAcuse.GetElementsByTagName("SignatureValue")[0].InnerText;
|
||||
CancelacionFecha = xmlAcuse.SelectSingleNode("Acuse").Attributes["Fecha"].Value.ToDate();
|
||||
}
|
||||
|
||||
var FueCancelado = CancelarDocumento(CveVenta, CveEstatus, CveCliente, Folio, uuid, CancelacionAcuse, CancelacionFecha, TipoDocto, total.ToDouble(), UsuarioActual.Empresa.CvePAC);
|
||||
sb.AppendFormat("{0} <br/>", FueCancelado);
|
||||
if (CveEstatus.Contiene(4, 5) && EsRefacturacion)
|
||||
{
|
||||
Response.Redirect(string.Format("Ventas.aspx?CveDevolucion={0}&NuevaFactura=1", CveVenta));
|
||||
}
|
||||
}
|
||||
else if (resp.EstatusCancelacion.ToUpper() == "SOLICITUD RECHAZADA")
|
||||
{
|
||||
//ASIGNAMOS ESTATUS EMITIDA
|
||||
CveEstatus = 3;
|
||||
var ObjVentas = new ClsVentas();
|
||||
if (ObjVentas.UpdateEstatusVenta(CveVenta, CveEstatus, UsuarioActual.CveEmpresa))
|
||||
{
|
||||
sb.Append("El estatus de la factura fue cambiado a 'Emitida'.");
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append("Ocurrió un error al cambiar el estatus de la factura.");
|
||||
}
|
||||
ObjVentas.Dispose();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append("No se pudo comprobar la vigencia de la factura.");
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
sb.Append("Error al consumir el servicio: " + ex.Message);
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
private string CancelarDocumento(int CveVenta, int CveEstatus, int CveCliente, string Folio, string FolioFiscal, string CancelacionAcuse, DateTime CancelacionFecha, string TipoComprobante, double Total, int CvePACCancelacion)
|
||||
{
|
||||
string Mensaje = "";
|
||||
ClsVentas ObjVentas = new ClsVentas();
|
||||
ClsOIEventos ObjEventos = new ClsOIEventos(ObjVentas.IniciaTransacSQL());
|
||||
ClsContabilidad ObjConta = new ClsContabilidad(ObjVentas.IniciaTransacSQL());
|
||||
ClsContPAQi ObjContPaq = null;
|
||||
|
||||
try
|
||||
{
|
||||
if (UsuarioActual.Empresa.UsaAC || UsuarioActual.Empresa.Funcionalidad(200) == "1")
|
||||
{
|
||||
ObjContPaq = new ClsContPAQi(UsuarioActual.Empresa);
|
||||
ObjContPaq.IniciaTransacSQL();
|
||||
}
|
||||
bool ErrorCancelar = false;
|
||||
var ErrorList = new List<string>();
|
||||
|
||||
int IDPoliza = -1;
|
||||
int CvePrePolizaCancelacion = -1;
|
||||
|
||||
// CANCELA PREPOLIZA
|
||||
ErrorCancelar = !ObjVentas.ProcesoPrepolizasCancelacion(CveVenta, UsuarioActual.CveUsuario);
|
||||
|
||||
if (ErrorCancelar)
|
||||
{
|
||||
Mensaje = "Ocurrió un error al generar la prepoliza de cancelación.";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ObjVentas.DtResultados.Rows.Count > 0)
|
||||
{
|
||||
CvePrePolizaCancelacion = ObjVentas.DtResultados.FiltroPrimeroValor("CvePrepolizaCancelacion").ToEntero();
|
||||
if (CvePrePolizaCancelacion <= 0)
|
||||
{
|
||||
ErrorCancelar = true;
|
||||
Mensaje = "Ocurrió un error al generar la prepoliza de cancelación.";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorCancelar = true;
|
||||
Mensaje = "Ocurrió un error al generar la prepoliza de cancelación.";
|
||||
}
|
||||
}
|
||||
|
||||
// POLIZA DE CANCELACION
|
||||
if (!ErrorCancelar)
|
||||
{
|
||||
if (UsuarioActual.Empresa.UsaAC)
|
||||
{
|
||||
IDPoliza = GenerarPolizaAC(ObjContPaq, CveVenta, Folio, CveCliente, TipoComprobante, DateTime.Now, true);
|
||||
if ((IDPoliza <= 0))
|
||||
{
|
||||
ErrorCancelar = true;
|
||||
Mensaje = "Ocurrió un error al generar la poliza de cancelación.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//AUTO CONTABILIDAD
|
||||
if (!ErrorCancelar)
|
||||
{
|
||||
if (UsuarioActual.Empresa.Funcionalidad(200) == "1" & !ErrorCancelar && CvePrePolizaCancelacion > 0)
|
||||
{
|
||||
if (!ObjConta.ContabilizarPrePoliza(CvePrePolizaCancelacion, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta: ObjContPaq))
|
||||
{
|
||||
ErrorCancelar = true;
|
||||
Mensaje = "Ocurrió un error al contabilizar. Favor de ponerse en contacto con Soporte Técnico";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ACTUALIZA ESTATUS
|
||||
if (!ErrorCancelar)
|
||||
{
|
||||
switch (TipoComprobante)
|
||||
{
|
||||
case "Rem":
|
||||
CveEstatus = 12;
|
||||
break;
|
||||
case "Com":
|
||||
CveEstatus = 9;
|
||||
break;
|
||||
}
|
||||
if (!ObjVentas.UpdateCancelaVenta(CveVenta, CancelacionFecha, CancelacionAcuse, UsuarioActual.CveEmpresa, CvePACCancelacion))
|
||||
{
|
||||
ErrorCancelar = true;
|
||||
Mensaje = "Ocurrió un error al guardar el estatus de cancelación.";
|
||||
}
|
||||
}
|
||||
|
||||
if (!ErrorCancelar)
|
||||
{
|
||||
if (ObjContPaq != null)
|
||||
{
|
||||
ObjContPaq.Commit();
|
||||
}
|
||||
ObjVentas.Commit();
|
||||
Mensaje = "El Documento se canceló correctamente";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ObjContPaq != null)
|
||||
{
|
||||
ObjContPaq.RollBack();
|
||||
}
|
||||
ObjVentas.RollBack();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ObjVentas.RollBack();
|
||||
if (ObjContPaq != null)
|
||||
{
|
||||
ObjContPaq.RollBack();
|
||||
}
|
||||
Mensaje = "Ocurrió un error al cancelar la factura";
|
||||
this.OnError(Mensaje, ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
ObjVentas.Dispose();
|
||||
ObjEventos.Dispose();
|
||||
ObjConta.Dispose();
|
||||
if (ObjContPaq != null)
|
||||
{
|
||||
ObjContPaq.Dispose();
|
||||
}
|
||||
}
|
||||
return Mensaje;
|
||||
}
|
||||
|
||||
private int GenerarPolizaAC(ClsContPAQi ObjAC, int CveVenta, string Folio, int CveCliente, string TipoComprobante, DateTime Fecha, bool CancelacionIngreso = false)
|
||||
{
|
||||
int CtaCliente = 0;
|
||||
int OrdenPago = 0;
|
||||
string NombreCliente = "";
|
||||
|
||||
var ObjClientes = new ClsClientes();
|
||||
if (ObjClientes.GetClientes(CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa))
|
||||
{
|
||||
CtaCliente = ObjClientes.IdCtaContClientes;
|
||||
NombreCliente = ObjClientes.NombreComercial;
|
||||
}
|
||||
ObjClientes.Dispose();
|
||||
|
||||
var ObjVentas = new ClsVentas();
|
||||
if (ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa))
|
||||
{
|
||||
if (ObjVentas.DtResultados.Rows.Count > 0)
|
||||
{
|
||||
OrdenPago = ObjVentas.DtResultados.Rows[0]["Num3"].ToEntero();
|
||||
}
|
||||
}
|
||||
|
||||
int Retorno = 0;
|
||||
int IDPoliza = 0;
|
||||
bool ErrorAC = false;
|
||||
string Concepto = string.Format("GD {0}", NombreCliente);
|
||||
int Paridad = 1;
|
||||
bool TipoMovto = false;
|
||||
if (CancelacionIngreso)
|
||||
{
|
||||
Concepto = string.Format("Cancelación GD {0}", NombreCliente);
|
||||
Paridad = -1;
|
||||
TipoMovto = true;
|
||||
}
|
||||
var TipoPoliza = TipoComprobante.Contiene("OP", "Com") ? 3 : 1;
|
||||
DataRow dr = null;
|
||||
int CtaISSSTESON = 643;
|
||||
int CtaISPT = 1745;
|
||||
var AC = new ClsAC();
|
||||
|
||||
//var ObjAC = new ClsContPAQi(UsuarioActual.Empresa);
|
||||
//ObjAC.IniciaTransacSQL();
|
||||
|
||||
IDPoliza = ObjAC.AddPoliza(TipoPoliza, Concepto, 0, 0, UsuarioActual.CveUsuario, Fecha);
|
||||
|
||||
if (IDPoliza > 0)
|
||||
{
|
||||
if (TipoComprobante == "OP")
|
||||
{
|
||||
//Orden de PAGO
|
||||
if (OrdenPago == 1)
|
||||
{
|
||||
//ISSSTESON
|
||||
if (ObjAC.AddMovimiento(IDPoliza, CtaCliente, false, (Paridad * 0d), "", Concepto, 0, Fecha, ""))
|
||||
{
|
||||
if (!ObjAC.AddMovimiento(IDPoliza, CtaISSSTESON, true, (Paridad * 0d), "", Concepto, 0, Fecha, ""))
|
||||
{
|
||||
ErrorAC = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorAC = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//ISPT
|
||||
if (ObjAC.AddMovimiento(IDPoliza, CtaCliente, false, (Paridad * 0d), "", Concepto, 0, Fecha, ""))
|
||||
{
|
||||
if (!ObjAC.AddMovimiento(IDPoliza, CtaISPT, true, (Paridad * 0d), "", Concepto, 0, Fecha, ""))
|
||||
{
|
||||
ErrorAC = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorAC = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//NORMAL
|
||||
DataTable Detalles = null;
|
||||
DataTable DTPresupuestoIngresos = null;
|
||||
if (ObjVentas.GetVentaDetalle(CveVenta))
|
||||
{
|
||||
Detalles = ObjVentas.DtResultados.Copy();
|
||||
}
|
||||
if (AC.GetPresupuestoIngresos(-1, DateTime.Now.Year, true, UsuarioActual.CveEmpresa))
|
||||
{
|
||||
DTPresupuestoIngresos = AC.DtResultados.Copy();
|
||||
}
|
||||
|
||||
if (Detalles != null && DTPresupuestoIngresos != null)
|
||||
{
|
||||
var query = from gvr in Detalles.AsEnumerable()
|
||||
group gvr by gvr["CvePresupuestoIngreso"].ToString().ToEntero() into g
|
||||
select new { TotalImporte = g.Sum((x) => x["Total"].ToString().ToDouble()), CvePresupuestoIngreso = g.Key };
|
||||
|
||||
foreach (var item in query)
|
||||
{
|
||||
dr = DTPresupuestoIngresos.FiltroPrimero(string.Format("CvePresupuestoIngreso = {0}", item.CvePresupuestoIngreso));
|
||||
if (dr != null)
|
||||
{
|
||||
Concepto = string.Format("{0} - {1}: {2}", NombreCliente, TipoComprobante, Folio);
|
||||
if (ObjAC.AddMovimiento(IDPoliza, dr["IdCuentaPorEjecutar"].ToString().ToEntero(), false, (Paridad * item.TotalImporte), "", Concepto, 0, Fecha, ""))
|
||||
{
|
||||
if (ObjAC.AddMovimiento(IDPoliza, dr["IdCuentaDevengado"].ToString().ToEntero(), true, (Paridad * item.TotalImporte), "", Concepto, 0, Fecha, ""))
|
||||
{
|
||||
// CARGO la deuda del cliente
|
||||
if (ObjAC.AddMovimiento(IDPoliza, CtaCliente, TipoMovto, item.TotalImporte, "", Concepto, 0, Fecha, ""))
|
||||
{
|
||||
// abono,
|
||||
if (!ObjAC.AddMovimiento(IDPoliza, dr["IdCuentaMatriz"].ToString().ToEntero(), !TipoMovto, item.TotalImporte, "", Concepto, 0, Fecha, ""))
|
||||
{
|
||||
ErrorAC = true;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorAC = true;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorAC = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorAC = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorAC = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorAC = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorAC = true;
|
||||
}
|
||||
|
||||
if (!ErrorAC)
|
||||
{
|
||||
ObjAC.AjustaPoliza(IDPoliza);
|
||||
Retorno = IDPoliza;
|
||||
}
|
||||
else
|
||||
{
|
||||
Alert("Error al Agregar la Póliza de AC.", TipoMensaje.MsgError);
|
||||
}
|
||||
AC.Dispose();
|
||||
ObjVentas.Dispose();
|
||||
|
||||
return Retorno;
|
||||
}
|
||||
private string DecodeBase64(string strXMLCodificado)
|
||||
{
|
||||
try
|
||||
{
|
||||
byte[] decbuff = Convert.FromBase64String(strXMLCodificado);
|
||||
return System.Text.Encoding.UTF8.GetString(decbuff);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
protected void LnkValidar_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (DtVentas != null)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
foreach (DataRow Row in DtVentas.Rows)
|
||||
{
|
||||
int CveVenta = Row["CveVenta"].ToEntero();
|
||||
string Total = Row["Total"].ToString();
|
||||
string SubTotal = Row["SubTotal"].ToString();
|
||||
string Uuid = Row["FolioFiscal"].ToString();
|
||||
string RFCCliente = Row["RFCCliente"].ToString();
|
||||
string Folio = Row["Folio"].ToString();
|
||||
string TipoDocto = Row["TipoDocto"].ToString();
|
||||
string Nombre = Row["Nombre"].ToString();
|
||||
int CveCliente = Row["CveCliente"].ToEntero();
|
||||
if (CveVenta > 0)
|
||||
{
|
||||
sb.AppendFormat("{0}<br/>", VerificarVigenciaSAT(CveVenta, CveCliente, Folio, TipoDocto, Uuid, UsuarioActual.Empresa.RFC, RFCCliente, SubTotal));
|
||||
}
|
||||
}
|
||||
Alert(sb.ToString());
|
||||
}
|
||||
CargaDatos();
|
||||
}
|
||||
|
||||
protected void GvDatos_RowDataBound(object sender, GridViewRowEventArgs e)
|
||||
{
|
||||
if (e.Row.RowType == DataControlRowType.DataRow)
|
||||
{
|
||||
if (e.Row.DBCampo("PuedeRefacturar").ToString().ToEntero() == 0)
|
||||
{
|
||||
e.Row.Cells[8].Text = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user