1755 lines
85 KiB
C#
1755 lines
85 KiB
C#
using Microsoft.Reporting.WebForms;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using System.Xml;
|
|
using Extensiones;
|
|
using System.Data;
|
|
using System.Text;
|
|
using ADSistemaLibrary2.SatXml;
|
|
|
|
//using ADS_CFDI_SAT;
|
|
|
|
public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas
|
|
{
|
|
#region "Propiedades"
|
|
const string rqFechaInicio = "FechaInicio";
|
|
const string rqFechaFin = "FechaFin";
|
|
const string rqRegistroEn = "RegistroEn";
|
|
|
|
public string RfechaI
|
|
{
|
|
get
|
|
{
|
|
return ViewState["RfechaI"].ToString();
|
|
}
|
|
set { ViewState["RfechaI"] = value; }
|
|
}
|
|
public string RfechaF
|
|
{
|
|
get
|
|
{
|
|
return ViewState["RfechaF"].ToString();
|
|
}
|
|
set { ViewState["RfechaF"] = value; }
|
|
}
|
|
public object CurrentRow
|
|
{
|
|
get
|
|
{
|
|
return ViewState["CurrentRow"];
|
|
}
|
|
set { ViewState["CurrentRow"] = value; }
|
|
}
|
|
public int RegistroEn
|
|
{
|
|
get
|
|
{
|
|
if (ViewState["RegistroEn"] != null)
|
|
{
|
|
return ViewState["RegistroEn"].ToString().ToEntero();
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
set { ViewState["RegistroEn"] = value; }
|
|
}
|
|
private StringBuilder strErrores;
|
|
#endregion
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
if (!IsPostBack)
|
|
{
|
|
string path;
|
|
if (Request["op"] != null && Request["op"].ToString().Length > 0)
|
|
{
|
|
try
|
|
{
|
|
|
|
if (System.IO.File.Exists((path = string.Format("{0}\\{1}", UsuarioActual.Empresa.Ruta.Trim(), Extensiones.ModExtensiones.Decripta(Request["op"].ToString()).Trim()).Replace("/", "\\"))))
|
|
{
|
|
|
|
System.IO.FileInfo archivo = new System.IO.FileInfo(path);
|
|
|
|
HttpContext.Current.Response.Clear();
|
|
HttpContext.Current.Response.ClearContent();
|
|
HttpContext.Current.Response.ContentType = "text/plain";
|
|
HttpContext.Current.Response.AppendHeader("Content-disposition", string.Format("attachment; filename={0}", archivo.Name));
|
|
HttpContext.Current.Response.AddHeader("Content-Length", archivo.Length.ToString());
|
|
HttpContext.Current.Response.TransmitFile(path);
|
|
HttpContext.Current.Response.End();
|
|
}
|
|
else
|
|
{
|
|
RegistraScript("window.close()");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Extensiones.ModExtensiones.GuardaLog(ex.ToString());
|
|
RegistraScript("window.close()");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fillrequestfields();
|
|
DdlSubProyectoDatos.DataSource = get_GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, 1).FiltraParametros("EsSucursal = True ");
|
|
DdlSubProyectoDatos.DataBind();
|
|
DdlClasificacion.DataSource = get_GlobalDTClasificaciones(UsuarioActual.CveEmpresa, UsoClasificacion: 1).FiltraParametros(" Codigo = '' OR Codigo IS NULL ", Orderby: "Clasificacion");
|
|
|
|
DdlClasificacion.DataBind();
|
|
|
|
|
|
CargaConciliacionemitidasSATGet();
|
|
int CveClasificacion = DdlClasificacion.SelectedValue.ToEntero();
|
|
if (UsuarioActual.Empresa.Funcionalidad(141).ToString() == "1")
|
|
{
|
|
|
|
DdlPS.setEsWebService(true);
|
|
DdlPS.ddlWS.Attributes.Add("data-cveclasificacion", CveClasificacion.ToString());
|
|
DdlPS.ddlWS.Attributes.Add("data-pagina", "ventas/ventas");
|
|
DdlPS.ddlWS.Attributes.Add("data-Estatus", "1");
|
|
}
|
|
else
|
|
{
|
|
|
|
DdlPS.setEsWebService(false);
|
|
DdlPS.ddl.DataSource = get_GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion: CveClasificacion, Estatus: 1, AplicaParaVenta: 1);
|
|
DdlPS.ddl.DataBind();
|
|
}
|
|
}
|
|
}
|
|
private void downfile(string path)
|
|
{
|
|
|
|
}
|
|
public void fillrequestfields()
|
|
{
|
|
|
|
DateTime fecha;
|
|
DateTime fechaInicio = DateTime.Now;
|
|
DateTime fechaFin = DateTime.Now;
|
|
RegistroEn = -1;
|
|
if (fechaInicio.Day < 5) { fechaInicio = fechaInicio.AddMonths(-1); }
|
|
fechaInicio = fechaInicio.AddDays(1 - fechaInicio.Day);
|
|
fechaFin = fechaInicio.AddYears(1).AddDays(-1);
|
|
if (Request[rqRegistroEn] != null) { RegistroEn = Request[rqRegistroEn].ToEntero(); }
|
|
if (Request[rqFechaInicio] != null) { DateTime.TryParse(Request[rqFechaInicio], out fecha); fechaInicio = fecha.Year > 1900 ? fecha : fechaInicio; }
|
|
if (Request[rqFechaFin] != null) { DateTime.TryParse(Request[rqFechaFin], out fecha); fechaFin = fecha.Year > 1900 ? fecha : fechaFin; }
|
|
txtFechaI.Text = string.Format("{0:dd/MM/yyyy}", fechaInicio);
|
|
txtFechaF.Text = string.Format("{0:dd/MM/yyyy}", fechaFin);
|
|
ddlRegistroen.SelectedValueExist(RegistroEn);
|
|
}
|
|
|
|
protected void CargaRepConciliacionSatGET()
|
|
{
|
|
string RtipoDocto;
|
|
RtipoDocto = "I";
|
|
RfechaI = txtFechaI.Text.Length > 0 ? txtFechaI.Text.ToDateTime().ToString("yyyy/MM/dd") : "";
|
|
RfechaF = txtFechaF.Text.Length > 0 ? string.Format("{0:yyyy/MM/dd}", txtFechaF.Text.ToDateTime()) : "";
|
|
RegistroEn = ddlRegistroen.SelectedValue.ToEntero();
|
|
using (ClsGenerales ObjRepC = new ClsGenerales())
|
|
{
|
|
if (ObjRepC.RepConciliacionSatDetalleGET(UsuarioActual.CveEmpresa, RtipoDocto, RfechaI, RfechaF, RegistroEn))
|
|
{
|
|
Ltlsinregistrar.Text = $"{ObjRepC.DtResultados.COUNT("FolioFiscal", "CveVenta IS NULL")}";
|
|
ltlTotal.Text = $"{ObjRepC.DtResultados.Rows.Count}";
|
|
|
|
}
|
|
GVConciliacionemitidasSAT.DataSource = ObjRepC.DtResultados;
|
|
ObjRepC.Dispose();
|
|
|
|
}
|
|
GVConciliacionemitidasSAT.DataBind();
|
|
UpDatosReporte.Update();
|
|
}
|
|
protected void CargaConciliacionemitidasSATGet()
|
|
{
|
|
CargaRepConciliacionSatGET();
|
|
//ClsVentas ObjV = new ClsVentas();
|
|
//ObjV.ConciliacionemitidasSATGet(UsuarioActual.CveEmpresa);
|
|
//GVConciliacionemitidasSAT.DataSource = ObjV.DtResultados.FiltraParametros("", "CveVenta");
|
|
//Ltlsinregistrar.Text = $"{ObjV.DtResultados.COUNT("FolioFiscal","CveVenta IS NULL")}";
|
|
//ltlTotal.Text = $"{ObjV.DtResultados.Rows.Count}";
|
|
//ObjV.Dispose();
|
|
//GVConciliacionemitidasSAT.DataBind();
|
|
//UpDatosReporte.Update();
|
|
|
|
}
|
|
private void registrarventa(GridViewRow gvrow)
|
|
{
|
|
|
|
{
|
|
string rutaempresa = UsuarioActual.Empresa.Ruta.Trim().Replace("/", "\\");
|
|
string rutafile = gvrow.DataKey("RutaXml").Trim().Replace("/", "\\");
|
|
rutaempresa = rutaempresa.Substring(rutaempresa.Length - 1, 1) == "\\" ? rutaempresa.Substring(0, rutaempresa.Length - 1): rutaempresa;
|
|
rutafile = rutafile.Substring(0, 1) == "\\" ? rutafile.Substring(1): rutafile;
|
|
string ruta = string.Format("{0}\\{1}", rutaempresa, rutafile); //gvrow.DataKey("RutaXml");
|
|
//Alert(ruta);
|
|
|
|
//return false;
|
|
strErrores = new StringBuilder();
|
|
XmlSatCFDI objxml = null;
|
|
Modelos.Factura objfact = null;
|
|
bool continuar = true;
|
|
objxml = XmlSatCFDI.readXML(ruta);
|
|
continuar = continuar && (objxml != null);
|
|
if (continuar)
|
|
{
|
|
|
|
objfact = GetFacturaFromXML(objxml);
|
|
}
|
|
continuar = continuar && (objfact != null);
|
|
if (continuar)
|
|
{
|
|
|
|
// Dim As New (ObjVentas.IniciaTransacSQL())
|
|
// Dim As = Nothing
|
|
// Dim MensajeAlert = New StringBuilder
|
|
ClsVentas ObjVentas = new ClsVentas();
|
|
ClsInventarios ObjInventario = new ClsInventarios(ObjVentas.IniciaTransacSQL());
|
|
ClsContabilidad ObjConta = new ClsContabilidad(ObjVentas.IniciaTransacSQL());
|
|
ClsContratos ObjContr = new ClsContratos(ObjVentas.IniciaTransacSQL());
|
|
ClsOS ObjOS = new ClsOS(ObjVentas.IniciaTransacSQL());
|
|
ClsBancos ObjBancos = new ClsBancos(ObjVentas.IniciaTransacSQL());
|
|
ClsClientes ObjClientes = new ClsClientes(ObjVentas.IniciaTransacSQL());
|
|
ClsOIEventos ObjEventos = new ClsOIEventos(ObjVentas.IniciaTransacSQL());
|
|
ClsCGame ObjCGame = new ClsCGame(ObjVentas.IniciaTransacSQL());
|
|
ClsEdocumentacion ObjDocCliente = new ClsEdocumentacion(ObjVentas.IniciaTransacSQL());
|
|
ClsAcumuladores ObjAcum = new ClsAcumuladores(ObjVentas.IniciaTransacSQL());
|
|
//ClsContPAQi ObjContPaq = null;
|
|
//StringBuilder MensajeAlert = new StringBuilder() ;
|
|
Modelos.Factura.MMensajeFactura Resp = new Modelos.Factura.MMensajeFactura();
|
|
DataTable DtDetalle = objfact.DtDetalle;
|
|
try
|
|
{
|
|
// objfact.GuardarVenta(ref objfact, ref ObjVentas, ref ObjConta, ref ObjInventario, ref ObjContr, ref DtDetalle, objfact.CveNCaVincular, ref ObjContPaq, ref ObjBancos, ref ObjOS, ref ObjEventos, ref ObjCGame, ref ObjClientes, ref Resp, ObjAcum: ObjAcum);
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
objfact.CveVenta = -1;
|
|
e.ToString().GuardaLog();
|
|
strErrores.AppendLine("<br/>");
|
|
strErrores.AppendLine(e.ToString());
|
|
}
|
|
if (ObjVentas.UpdateEstatusFactura(3, objxml.complemento.UUID, "", DateTime.ParseExact(objxml.comprobante.Fecha.Replace("T", " "), "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture), ObjVentas.CveVenta, CvePAC: 4))
|
|
if (objfact.CveVenta > 0 && objfact.ErrorList.Count == 0)
|
|
{
|
|
ObjVentas.Commit();
|
|
}
|
|
else
|
|
{
|
|
foreach (string item in objfact.ErrorList)
|
|
{
|
|
strErrores.AppendLine("<br/>");
|
|
strErrores.AppendLine(item);
|
|
}
|
|
objfact.CveVenta = -1;
|
|
ObjVentas.RollBack();
|
|
}
|
|
ObjVentas.Dispose();
|
|
ObjConta.Dispose();
|
|
ObjInventario.Dispose();
|
|
ObjCGame.Dispose();
|
|
ObjContr.Dispose();
|
|
ObjDocCliente.Dispose();
|
|
ObjClientes.Dispose();
|
|
ObjAcum.Dispose();
|
|
|
|
}
|
|
if (objfact != null && objfact.CveVenta > 0)
|
|
{
|
|
CargaConciliacionemitidasSATGet();
|
|
Alert($"se ha agregado la factura correctamente.<br/> <a href=\"/Ventas/Ventas.aspx?CveVenta={objfact.CveVenta}\" > Ver Factura </a>", ModExtensiones.TipoMensaje.ToastInformacion, timeout: 25);
|
|
}
|
|
else { continuar = false; }
|
|
if (!continuar)
|
|
{
|
|
Alert($"no se pudo agregar la factura {strErrores.ToString()}", ModExtensiones.TipoMensaje.MsgAdvertencia);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
protected void LnkRegistrar_Click(object sender, EventArgs e)
|
|
{
|
|
GridViewRow gvrow = (GridViewRow)(((LinkButton)sender).NamingContainer);
|
|
CurrentRow = gvrow;
|
|
RegistraScript("$('#DModalDefaults').modal();");
|
|
//registrarventa(gvrow);
|
|
//string ruta = gvrow.DataKey("RutaXml");
|
|
//strErrores = new StringBuilder();
|
|
//XmlSatCFDI objxml = null;
|
|
//Modelos.Factura objfact = null;
|
|
//bool continuar = true;
|
|
//objxml = XmlSatCFDI.readXML(ruta);
|
|
//continuar = continuar && (objxml != null);
|
|
//if (continuar)
|
|
//{
|
|
|
|
// objfact = GetFacturaFromXML(objxml);
|
|
//}
|
|
//continuar = continuar && (objfact != null);
|
|
//if (continuar)
|
|
//{
|
|
|
|
// // Dim As New (ObjVentas.IniciaTransacSQL())
|
|
// // Dim As = Nothing
|
|
// // Dim MensajeAlert = New StringBuilder
|
|
// ClsVentas ObjVentas = new ClsVentas();
|
|
// ClsInventarios ObjInventario = new ClsInventarios(ObjVentas.IniciaTransacSQL());
|
|
// ClsContabilidad ObjConta = new ClsContabilidad(ObjVentas.IniciaTransacSQL());
|
|
// ClsContratos ObjContr = new ClsContratos(ObjVentas.IniciaTransacSQL());
|
|
// ClsOS ObjOS = new ClsOS(ObjVentas.IniciaTransacSQL());
|
|
// ClsBancos ObjBancos = new ClsBancos(ObjVentas.IniciaTransacSQL());
|
|
// ClsClientes ObjClientes = new ClsClientes(ObjVentas.IniciaTransacSQL());
|
|
// ClsOIEventos ObjEventos = new ClsOIEventos(ObjVentas.IniciaTransacSQL());
|
|
// ClsCGame ObjCGame = new ClsCGame(ObjVentas.IniciaTransacSQL());
|
|
// ClsEdocumentacion ObjDocCliente = new ClsEdocumentacion(ObjVentas.IniciaTransacSQL());
|
|
// ClsAcumuladores ObjAcum = new ClsAcumuladores(ObjVentas.IniciaTransacSQL());
|
|
// ClsContPAQi ObjContPaq = null;
|
|
// //StringBuilder MensajeAlert = new StringBuilder() ;
|
|
// try
|
|
// {
|
|
// objfact.GuardarVenta(ref objfact, ref ObjVentas, ref ObjConta, ref ObjInventario, ref ObjContr, ref objfact.DtDetalle, objfact.CveNCaVincular, ref ObjContPaq, ref ObjBancos, ref ObjOS, ref ObjEventos, ref ObjCGame, ref ObjClientes, ObjAcum: ObjAcum);
|
|
|
|
// }
|
|
// catch (Exception )
|
|
// {
|
|
// objfact.CveVenta = -1;
|
|
// }
|
|
// if (ObjVentas.UpdateEstatusFactura(3, objxml.complemento.UUID, "", DateTime.ParseExact(objxml.comprobante.Fecha.Replace("T", " "), "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture), ObjVentas.CveVenta, CvePAC: 4))
|
|
// if (objfact.CveVenta > 0 && objfact.ErrorList.Count == 0)
|
|
// {
|
|
// ObjVentas.Commit();
|
|
// }
|
|
// else
|
|
// {
|
|
// foreach (string item in objfact.ErrorList)
|
|
// {
|
|
// strErrores.AppendLine("<br/>");
|
|
// strErrores.AppendLine(item);
|
|
// }
|
|
// objfact.CveVenta = -1;
|
|
// ObjVentas.RollBack();
|
|
// }
|
|
// ObjVentas.Dispose();
|
|
// ObjConta.Dispose();
|
|
// ObjInventario.Dispose();
|
|
// ObjCGame.Dispose();
|
|
// ObjContr.Dispose();
|
|
// ObjDocCliente.Dispose();
|
|
// ObjClientes.Dispose();
|
|
// ObjAcum.Dispose();
|
|
|
|
//}
|
|
//if (objfact != null && objfact.CveVenta > 0)
|
|
//{
|
|
// CargaConciliacionemitidasSATGet();
|
|
// Alert($"se ha agregado la factura correctamente.<br/> <a href=\"/Ventas/Ventas.aspx?CveVenta={objfact.CveVenta}\" > Ver Factura </a>", ModExtensiones.TipoMensaje.ToastInformacion,timeout:25);
|
|
//}
|
|
//else { continuar = false; }
|
|
//if (!continuar)
|
|
//{
|
|
// Alert($"no se pudo agregar la factura {strErrores.ToString()}", ModExtensiones.TipoMensaje.MsgAdvertencia);
|
|
//}
|
|
}
|
|
|
|
protected Modelos.Factura GetFacturaFromXML(XmlSatCFDI objxml)
|
|
{
|
|
int CvePsReconstruccion = DdlPS.SelectedValue.ToEntero();
|
|
int CveSubProyectoReconstruccion = DdlSubProyectoDatos.SelectedValue.ToEntero();
|
|
//Modelos.Factura.MMensajeFactura resp;
|
|
|
|
string Moneda = objxml.comprobante.Moneda;
|
|
if (objxml.comprobante.Version == "3.2")
|
|
{
|
|
switch (Moneda)
|
|
{
|
|
case "Peso Mexicano": Moneda = "MXN"; break;
|
|
case "Dolar Americano": Moneda = "USD"; break;
|
|
}
|
|
|
|
}
|
|
string formadepago = objxml.comprobante.FormaPago;
|
|
string metododepago = objxml.comprobante.MetodoPago;
|
|
if (objxml.comprobante.Version == "3.2")
|
|
{
|
|
switch (objxml.comprobante.MetodoPago)//si es correcto estan invertidos
|
|
{
|
|
case "TRANSFERENCIA ELECTRONICA": formadepago = "03"; break;
|
|
default: formadepago = objxml.comprobante.MetodoPago; break;
|
|
}
|
|
|
|
}
|
|
if (objxml.comprobante.Version == "3.2")
|
|
{
|
|
switch (objxml.comprobante.FormaPago)//si es correcto estan invertidos
|
|
{
|
|
case "PAGO EN UNA SOLA EXHIBICION": metododepago = "PUE"; break;
|
|
default: metododepago = objxml.comprobante.FormaPago; break;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
Modelos.Factura objfact = new Modelos.Factura(UsuarioActual)
|
|
{
|
|
TipoMensajeRespuesta = Modelos.TipoMensajeRespuesta.TextoLimpio,//?que es esto
|
|
CveUsuario = UsuarioActual.CveUsuario,
|
|
CveEmpresa = UsuarioActual.CveEmpresa,
|
|
|
|
FolioFiscal = objxml.complemento.UUID,
|
|
Serie = objxml.comprobante.Serie,
|
|
Folio = objxml.comprobante.Folio.ToEntero(),//Nota en el sat puede ser un string
|
|
Version = objxml.comprobante.Version,
|
|
TipoCambio = objxml.comprobante.TipoCambio,
|
|
//ConvertirPesos =false,//?para que sirve
|
|
MonedaSAT = objxml.comprobante.Moneda,
|
|
CveMoneda = GlobalDTMonedas.FiltroPrimeroValor("CveMoneda", $" AbreviaturaSAT= '{Moneda}' ").ToEntero(),
|
|
Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $" AbreviaturaSAT= '{Moneda}' "),
|
|
TipoDocto = objxml.comprobante.TipoDeComprobanteSIG,
|
|
RefDocto = "",
|
|
CveMesa = -1,
|
|
Fecha = DateTime.ParseExact(objxml.comprobante.Fecha, "yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture),
|
|
CvePrePoliza = -1,
|
|
FechaPago = DateTime.Now,
|
|
MotivoDescuento = "",
|
|
FechaEjecucion = DateTime.Now,
|
|
UsuarioCreo = UsuarioActual.Usuario,
|
|
CveCondicionEntrega = -1,
|
|
CondicionEntrega = "",
|
|
NumeroCuenta = "",
|
|
CondicionesPago = 0,
|
|
FormaPago = 0,
|
|
PedidoContrato = "",
|
|
NumeroContrato = "",
|
|
DescripcionContrato = "",
|
|
CveCorte = -1,
|
|
TipoDocumento = objxml.comprobante.TipoDeComprobanteTexto,
|
|
Alfa1 = "",
|
|
Alfa2 = "",
|
|
Alfa3 = "",
|
|
CveContrato = -1
|
|
};
|
|
DataRow dr = get_GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa, 1).FiltroPrimero(string.Format("Serie='{0}'", objfact.Serie));
|
|
if (dr == null) { dr = get_GlobalDTSubProyectos(-1, CveSubProyectoReconstruccion, UsuarioActual.CveEmpresa, 1).Rows[0]; }
|
|
if (dr != null)
|
|
{
|
|
objfact.CveSubProyecto = dr["CveSubProyecto"].ToString().ToEntero();
|
|
objfact.CveSubProyectoCobranza = dr["CveSubProyecto"].ToString().ToEntero();
|
|
objfact.CveSubProyectoEjecucion = dr["CveSubProyecto"].ToString().ToEntero();
|
|
objfact.SubProyecto = new Modelos.SubProyectoModel(dr);
|
|
objfact.SubProyectoMatriz = new Modelos.SubProyectoModel(get_GlobalDTSubProyectos(-1, CveSubProyecto: -1, CveEmpresa: UsuarioActual.CveEmpresa).FiltroPrimero("TipoSucursal=1"));
|
|
|
|
}
|
|
using (ClsClientes objClientes = new ClsClientes())
|
|
{
|
|
if (objClientes.GetClientes(-1, "-1", "-1", "-1", objxml.receptor.Rfc, "-1", "-1", -1, UsuarioActual.CveEmpresa, -1, TipoCliente: -1) && objClientes.DtResultados.Rows.Count > 0)
|
|
{
|
|
DataRow drCliente = objClientes.DtResultados.Rows[0];
|
|
objfact.CveCliente = drCliente["CveCliente"].ToString().ToEntero();
|
|
objfact.SetCliente();
|
|
|
|
|
|
}
|
|
}
|
|
|
|
objfact.CveAlmacen = -1;
|
|
objfact.CveFormaPago33 = GlobalDTVtaFormaPago.FiltroPrimeroValor("CveFormaPago", $"ClaveFormaPagoSAT = '{formadepago}'").ToEntero();
|
|
objfact.FormaPagoSAT33 = objxml.comprobante.FormaPago;
|
|
objfact.FormaPago33 = objxml.comprobante.FormaPagoTexto;
|
|
objfact.CveMetodoPago33 = GlobalDTVtaMetodoPago.FiltroPrimeroValor("CveMetodoPago", $" ClaveMetodoPagoSAT = '{metododepago}'").ToEntero();
|
|
objfact.CveMetodoPago = GlobalDTVtaMetodoPago.FiltroPrimeroValor("CveMetodoPago", $" ClaveMetodoPagoSAT = '{metododepago}'").ToEntero();
|
|
objfact.ClaveMetodoPagoSAT = objxml.comprobante.MetodoPago;
|
|
objfact.MetodoPago33 = objxml.comprobante.MetodoPagoTexto;
|
|
objfact.CveUsoCFDI = get_GlobalDTSATUsosCFDI(-1).FiltroPrimeroValor("CveUsoCFDI", $"UsoCFDI = '{objxml.receptor.UsoCFDI}'").ToEntero();
|
|
objfact.UsoCFDI = objxml.receptor.UsoCFDITexto;
|
|
objfact.ClaveUsoCFDI = objxml.receptor.UsoCFDI;
|
|
objfact.CveClienteSucursal = -1;
|
|
|
|
objfact.DtDetalle = CreaDTDetalle(UsuarioActual, objxml.conceptos, objfact.CveSubProyecto, CvePsReconstruccion, objxml);
|
|
|
|
objfact.TipoCambioDolares = objxml.comprobante.TipoCambio;
|
|
objfact.SubTotal = objxml.comprobante.SubTotal;
|
|
objfact.Descuento = objxml.comprobante.Descuento;
|
|
objfact.Amortizacion = 0;
|
|
objfact.IVA = objxml.Impuestos.Where(x => (x.Impuesto == "002" || x.Impuesto == "IVA") && x.Tipo == "Traslados").Sum(item => item.Importe);
|
|
objfact.RetIVA = objxml.Impuestos.Where(x => (x.Impuesto == "002" || x.Impuesto == "IVA") && x.Tipo == "Retenciones").Sum(item => item.Importe);
|
|
objfact.RetISR = objxml.Impuestos.Where(x => (x.Impuesto == "001" || x.Impuesto == "ISR") && x.Tipo == "Retenciones").Sum(item => item.Importe);
|
|
objfact.IEPS = objxml.Impuestos.Where(x => (x.Impuesto == "003" || x.Impuesto == "IEPS")).Sum(item => item.Importe);
|
|
objfact.Total = objxml.comprobante.Total;
|
|
objfact.TotalOtrosConceptos = 0;
|
|
|
|
|
|
objfact.Observaciones = "";
|
|
objfact.OrdenCompra = "";
|
|
objfact.PedidoContrato = "";
|
|
objfact.ObservacionesAlmacen = "";
|
|
if (strErrores.Length > 0)
|
|
{
|
|
objfact = null;
|
|
}
|
|
return objfact;
|
|
}
|
|
private DataTable CreaDTDetalle(Usuario UsuarioActual, List<CFDIConcepto> conceptos, int CveSubProyecto, int CvePsReconstruccion, XmlSatCFDI objxml)
|
|
{
|
|
bool continuar = true;
|
|
var TmpDT = new DataTable();
|
|
#region TmpDT Fields
|
|
TmpDT.Columns.Add("CveVenta", typeof(int));
|
|
TmpDT.Columns.Add("Consec", typeof(int));
|
|
TmpDT.Columns.Add("Cantidad", typeof(decimal));
|
|
TmpDT.Columns.Add("Codigo", typeof(string));
|
|
TmpDT.Columns.Add("CveUM", typeof(int));
|
|
TmpDT.Columns.Add("UM", typeof(string));
|
|
TmpDT.Columns.Add("SATClaveUM", typeof(string));
|
|
TmpDT.Columns.Add("CveClasificacion", typeof(int));
|
|
TmpDT.Columns.Add("Clasificacion", typeof(string));
|
|
TmpDT.Columns.Add("CvePS", typeof(int));
|
|
TmpDT.Columns.Add("PS", typeof(string));
|
|
TmpDT.Columns.Add("CodigoPS", typeof(string));
|
|
TmpDT.Columns.Add("SATClaveProdServ", typeof(string));
|
|
TmpDT.Columns.Add("NoIdentificacion", typeof(string));
|
|
TmpDT.Columns.Add("CveTipoPS", typeof(int));
|
|
TmpDT.Columns.Add("CveTipoInvPS", typeof(int));
|
|
TmpDT.Columns.Add("Serie", typeof(string));
|
|
TmpDT.Columns.Add("CuentaPredial", typeof(string));
|
|
TmpDT.Columns.Add("Obs", typeof(string));
|
|
TmpDT.Columns.Add("TiempoEntrega", typeof(string));
|
|
TmpDT.Columns.Add("PU", typeof(decimal));
|
|
TmpDT.Columns.Add("IVA", typeof(decimal));
|
|
TmpDT.Columns.Add("ImporteIVA", typeof(decimal));
|
|
TmpDT.Columns.Add("PorcentajeIVA", typeof(decimal));
|
|
TmpDT.Columns.Add("ImporteRetIVA", typeof(decimal));
|
|
TmpDT.Columns.Add("ImporteRetISR", typeof(decimal));
|
|
TmpDT.Columns.Add("PorcentajeRetIVA", typeof(decimal));
|
|
TmpDT.Columns.Add("PorcentajeRetISR", typeof(decimal));
|
|
TmpDT.Columns.Add("ImporteIEPS", typeof(decimal));
|
|
TmpDT.Columns.Add("IEPS", typeof(decimal));
|
|
TmpDT.Columns.Add("PorcentajeIEPS", typeof(decimal));
|
|
TmpDT.Columns.Add("Descuento", typeof(decimal));
|
|
TmpDT.Columns.Add("TipoDescuento", typeof(int));
|
|
TmpDT.Columns.Add("TotalImporte", typeof(decimal));
|
|
TmpDT.Columns.Add("Total", typeof(decimal));
|
|
// Para uso del módulo contable
|
|
TmpDT.Columns.Add("AsientoContableVentas", typeof(int));
|
|
TmpDT.Columns.Add("IdCtaContVentas", typeof(int));
|
|
TmpDT.Columns.Add("AplicaParaConcepto", typeof(bool));
|
|
TmpDT.Columns.Add("CveProyecto", typeof(int));
|
|
TmpDT.Columns.Add("Proyecto", typeof(string));
|
|
TmpDT.Columns.Add("CveSubProyecto", typeof(int));
|
|
TmpDT.Columns.Add("SubProyecto", typeof(string));
|
|
// TipoDescuento: 1 = Descuento * PU; 2 = Descuento por Total del concepto
|
|
TmpDT.Columns.Add("CvePresupuestoIngreso", typeof(int));
|
|
TmpDT.Columns.Add("CveFuenteRecaudacion", typeof(int));
|
|
// Contratos
|
|
TmpDT.Columns.Add("CveContratoDetalle", typeof(int));
|
|
// Remisiones a Facturas
|
|
TmpDT.Columns.Add("CveVentaDetalle", typeof(int));
|
|
TmpDT.Columns.Add("CveVentaDetalleRemision", typeof(int));
|
|
TmpDT.Columns.Add("CveVentaDetalleCotizacion", typeof(int));
|
|
// Pedido2 a Facturas
|
|
TmpDT.Columns.Add("CveVentaDetallePedido2", typeof(int));
|
|
TmpDT.Columns.Add("Origen", typeof(int));
|
|
// Ordenes Servicio
|
|
TmpDT.Columns.Add("CveOS", typeof(int));
|
|
TmpDT.Columns.Add("CveOSDetalle", typeof(int));
|
|
TmpDT.Columns.Add("SeFacturara", typeof(int));
|
|
TmpDT.Columns.Add("Folio", typeof(int));
|
|
TmpDT.Columns.Add("Estatus", typeof(string));
|
|
// Ordenamiento
|
|
TmpDT.Columns.Add("Orden", typeof(int));
|
|
TmpDT.Columns.Add("TipoDocto", typeof(string));
|
|
// OC
|
|
TmpDT.Columns.Add("CveOrdenCompraDetalle", typeof(int));
|
|
TmpDT.Columns.Add("EntregaDirecta", typeof(int));
|
|
TmpDT.Columns.Add("CveMovimientoDetallePedido", typeof(int));
|
|
TmpDT.Columns.Add("CantidadFacturadaRem", typeof(decimal));
|
|
TmpDT.Columns.Add("CantidadFacturadaCot", typeof(decimal));
|
|
TmpDT.Columns.Add("CantidadInventario", typeof(decimal));
|
|
TmpDT.Columns.Add("ClaveSATFraccionArancelaria", typeof(string));
|
|
TmpDT.Columns.Add("ClaveSATUnidadAduana", typeof(string));
|
|
TmpDT.Columns.Add("ClaveSATFraccionArancelariaDescripcion", typeof(string));
|
|
TmpDT.Columns.Add("ClaveSATUnidadAduanaDescripcion", typeof(string));
|
|
TmpDT.Columns.Add("CveTamaño", typeof(int));
|
|
#endregion
|
|
foreach (CFDIConcepto item in conceptos)
|
|
{
|
|
DataRow DrPS = null;// get_GlobalDTPS(UsuarioActual.CveEmpresa).FiltroPrimero(string.Format("PS ={0}",item.Descripcion));
|
|
|
|
DataRow DrSubProyecto = null;
|
|
DataRow DrUmSat = null;
|
|
DataRow DrUm = null;
|
|
if (continuar)
|
|
{
|
|
using (ClsProductosServicios obj = new ClsProductosServicios())
|
|
{
|
|
if (obj.GetPS(-1, -1, UsuarioActual.CveEmpresa, PS: item.Descripcion) && obj.DtResultados.Rows.Count > 0)
|
|
{
|
|
DrPS = obj.DtResultados.Rows[0];
|
|
}
|
|
else if (obj.GetPS(CvePsReconstruccion, -1, UsuarioActual.CveEmpresa) && obj.DtResultados.Rows.Count > 0)
|
|
{
|
|
|
|
DrPS = obj.DtResultados.Rows[0];
|
|
}
|
|
|
|
}
|
|
DrSubProyecto = get_GlobalDTSubProyectos(-1, CveSubProyecto, UsuarioActual.CveEmpresa).Rows[0];
|
|
|
|
|
|
if (objxml.comprobante.Version == "3.2")
|
|
{
|
|
item.ClaveUnidad = item.Unidad;
|
|
switch (item.ClaveUnidad)
|
|
{
|
|
case "TON": item.ClaveUnidad = "A75"; break;
|
|
case "No aplica": item.ClaveUnidad = "ACT"; break;
|
|
case "LITROS": item.ClaveUnidad = "E32"; break;
|
|
case "M3-KM": item.ClaveUnidad = "M73"; break;
|
|
}
|
|
|
|
}
|
|
|
|
DrUmSat = GlobalDTPSATUM.FiltroPrimero(string.Format("SATClaveUnidadMedida='{0}'", item.ClaveUnidad));
|
|
}
|
|
if (continuar && DrUmSat == null) { continuar = false; strErrores.AppendLine($"No se encontro la unidad de medida en el catalogo del sat '{item.ClaveUnidad}', favor de contactar a soporte tecnico."); }
|
|
if (continuar)
|
|
{
|
|
DrUm = get_GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa).FiltroPrimero(string.Format("CveUnidadMedidaSAT={0}", DrUmSat["CveUnidadMedidaSAT"]));
|
|
}
|
|
if (continuar && DrUm == null) { continuar = false; strErrores.AppendLine($"No se encontro la unidad de medida relacionada a la clave del sat '{item.ClaveUnidad}', favor de asignarla en el catalogo de unidad de medida."); }
|
|
if (continuar)
|
|
{
|
|
//no se encontro una undidad de medida para
|
|
DataRow Row = TmpDT.NewRow();
|
|
Row["CveProyecto"] = DrSubProyecto["CveProyecto"].ToString().ToEntero();
|
|
Row["Proyecto"] = DrSubProyecto["Proyecto"].ToString();
|
|
Row["CveSubProyecto"] = CveSubProyecto;
|
|
Row["SubProyecto"] = DrSubProyecto["SubProyecto"].ToString();
|
|
Row["Serie"] = "";
|
|
Row["TiempoEntrega"] = "";
|
|
Row["Orden"] = TmpDT.Rows.Count + 1;
|
|
Row["Cantidad"] = item.Cantidad;
|
|
Row["CveUM"] = DrUm["CveUnidadMedida"];
|
|
Row["UM"] = DrUm["UnidadMedida"];
|
|
Row["CveClasificacion"] = DrPS["CveClasificacion"];
|
|
Row["Clasificacion"] = DrPS["Clasificacion"];
|
|
Row["CvePS"] = DrPS["CvePS"];
|
|
Row["Obs"] = item.Descripcion;
|
|
|
|
//TotalCalculableImpuestos = (Cantidad * PU) - Descuento;
|
|
|
|
Row["PU"] = item.ValorUnitario;
|
|
Row["Codigo"] = DrPS["Codigo"];
|
|
Row["NoIdentificacion"] = DrPS["Codigo"];
|
|
Row["ClaveSATFraccionArancelaria"] = DrPS["ClaveSATFraccionArancelaria"];
|
|
Row["ClaveSATUnidadAduana"] = DrPS["ClaveSATUnidadAduana"];
|
|
Row["ClaveSATFraccionArancelariaDescripcion"] = DrPS["ClaveSATFraccionArancelariaDescripcion"];
|
|
Row["ClaveSATUnidadAduanaDescripcion"] = DrPS["ClaveSATUnidadAduanaDescripcion"];
|
|
Row["Consec"] = TmpDT.Rows.Count + 1;
|
|
Row["PS"] = item.Descripcion;
|
|
Row["CodigoPS"] = DrPS["PSCodigo"].ToString();
|
|
Row["CveTipoPS"] = DrPS["CveTipoPS"];
|
|
Row["CveTipoInvPS"] = DrPS["Inv_CveMetodoInventario"];
|
|
Row["CveTamaño"] = DrPS["CveTamaño"];
|
|
CFDIConceptoImpuesto impuesto = item.Impuestos.FirstOrDefault(x => x.Impuesto == "002" && x.Tipo == "Traslado");
|
|
decimal sumaimpuesto = 0;
|
|
decimal PorcentajeIVA = 0;
|
|
if (impuesto != null)
|
|
{
|
|
decimal decimpuesto = 0;
|
|
decimal.TryParse(impuesto.TasaOCuota, out decimpuesto);
|
|
PorcentajeIVA = decimpuesto / 100;
|
|
Row["PorcentajeIVA"] = PorcentajeIVA;
|
|
Row["ImporteIVA"] = impuesto.Importe;// impuesto.Importe;//Math.Round(item.Importe * (decimpuesto/100), 2);
|
|
sumaimpuesto += impuesto.Importe;
|
|
}
|
|
else
|
|
{
|
|
Row["PorcentajeIVA"] = 0;
|
|
Row["ImporteIVA"] = 0;
|
|
if (objxml.comprobante.Version == "3.2")
|
|
{
|
|
if (item.Importe > 0)
|
|
{
|
|
PorcentajeIVA = .16M;
|
|
Row["PorcentajeIVA"] = PorcentajeIVA;
|
|
Row["ImporteIVA"] = item.Importe * PorcentajeIVA;//Math.Round(((item.Importe / (1 + PorcentajeIVA))*.16M),2);
|
|
|
|
}
|
|
}
|
|
}
|
|
Row["IVA"] = Row["ImporteIVA"];
|
|
impuesto = item.Impuestos.FirstOrDefault(x => x.Impuesto == "003" && x.Tipo == "Traslado");
|
|
if (impuesto != null)
|
|
{
|
|
decimal decimpuesto = 0;
|
|
decimal.TryParse(impuesto.TasaOCuota, out decimpuesto);
|
|
Row["PorcentajeIEPS"] = decimpuesto / 100;
|
|
Row["ImporteIEPS"] = impuesto.Importe;
|
|
Row["IEPS"] = impuesto.Importe;
|
|
sumaimpuesto += impuesto.Importe;
|
|
}
|
|
else
|
|
{
|
|
Row["PorcentajeIEPS"] = 0;
|
|
Row["ImporteIEPS"] = 0;
|
|
Row["IEPS"] = 0;
|
|
}
|
|
impuesto = item.Impuestos.FirstOrDefault(x => x.Impuesto == "001" && x.Tipo == "Retencion");
|
|
if (impuesto != null)
|
|
{
|
|
decimal decimpuesto = 0;
|
|
decimal.TryParse(impuesto.TasaOCuota, out decimpuesto);
|
|
Row["PorcentajeRetISR"] = decimpuesto / 100;
|
|
Row["ImporteRetISR"] = impuesto.Importe;
|
|
sumaimpuesto -= impuesto.Importe;
|
|
}
|
|
else
|
|
{
|
|
Row["ImporteRetISR"] = 0;
|
|
Row["PorcentajeRetISR"] = 0;
|
|
}
|
|
impuesto = item.Impuestos.FirstOrDefault(x => x.Impuesto == "002" && x.Tipo == "Retencion");
|
|
if (impuesto != null)
|
|
{
|
|
decimal decimpuesto = 0;
|
|
decimal.TryParse(impuesto.TasaOCuota, out decimpuesto);
|
|
Row["PorcentajeRetIVA"] = decimpuesto / 100;
|
|
Row["ImporteRetIVA"] = impuesto.Importe;
|
|
sumaimpuesto -= impuesto.Importe;
|
|
}
|
|
else
|
|
{
|
|
Row["ImporteRetIVA"] = 0;
|
|
Row["PorcentajeRetIVA"] = 0;
|
|
}
|
|
Row["Descuento"] = item.Descuento;
|
|
Row["TipoDescuento"] = "2";
|
|
|
|
//Row["Total"] = item.Importe - sumaimpuesto;
|
|
Row["Total"] = item.Importe / (1 + PorcentajeIVA);
|
|
Row["TotalImporte"] = item.Importe;
|
|
|
|
Row["SATClaveProdServ"] = item.ClaveProdServ;
|
|
Row["SATClaveUM"] = item.ClaveUnidad;
|
|
|
|
Row["EntregaDirecta"] = "-1";
|
|
// Contratos
|
|
Row["CveContratoDetalle"] = -1;
|
|
Row["CveVentaDetalle"] = -1;
|
|
Row["CveMovimientoDetallePedido"] = -1;
|
|
Row["CveOrdenCompraDetalle"] = -1;
|
|
Row["CveVentaDetalleRemision"] = -1;
|
|
Row["CveVentaDetalleCotizacion"] = -1;
|
|
Row["CveVentaDetallePedido2"] = -1;
|
|
Row["CuentaPredial"] = item.CuentaPredial;
|
|
|
|
TmpDT.Rows.Add(Row);
|
|
}
|
|
}
|
|
|
|
|
|
return TmpDT;
|
|
}
|
|
|
|
|
|
|
|
protected void LnkAceptarDefault_Click(object sender, EventArgs e)
|
|
{
|
|
RegistraScript("$('#DModalDefaults').modal('hide');");
|
|
registrarventa((GridViewRow)CurrentRow);
|
|
//foreach (GridViewRow gvrow in GVConciliacionemitidasSAT.Rows)
|
|
//{
|
|
|
|
// registrarventa(gvrow);
|
|
//}
|
|
}
|
|
|
|
protected void BtnConsultar_Click(object sender, EventArgs e)
|
|
{
|
|
CargaRepConciliacionSatGET();
|
|
}
|
|
|
|
protected void GVConciliacionemitidasSAT_RowDataBound(object sender, GridViewRowEventArgs e)
|
|
{
|
|
if (e.Row.RowType == DataControlRowType.DataRow)
|
|
{
|
|
string navurl = "";
|
|
if (e.Row.DBCampo("Tipo") == "1")
|
|
{
|
|
string RutaXml = e.Row.DBCampo("RutaXml");
|
|
//if (RutaXml.IndexOf("Empresas")>0)
|
|
//{
|
|
// RutaXml = RutaXml.Substring(RutaXml.IndexOf("Empresas"));
|
|
//}
|
|
navurl = string.Format("RepConciliacionEmitidosSat.aspx?op={0}", Extensiones.ModExtensiones.Encripta(e.Row.DataKey("RutaXml")));
|
|
}
|
|
else
|
|
{
|
|
navurl = string.Format("/Compras/PopUpVerFactura.aspx?P={0}", Extensiones.ModExtensiones.Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", e.Row.DBCampo("CveVenta"), "XML", e.Row.DBCampo("SerieFolio"), e.Row.DBCampo("TipoDocto"))));
|
|
}
|
|
e.Row.FCHyperLink("HypXml").NavigateUrl = navurl;
|
|
}
|
|
//String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", DbRowVenta("SerieFolio"), DbRowVenta("TipoDocto"))))
|
|
}
|
|
}
|
|
namespace ADSistemaLibrary2.SatXml
|
|
{
|
|
public class XmlSatCFDI
|
|
{
|
|
public XmlSatCFDI()
|
|
{
|
|
comprobante = new CFDIComprobante();
|
|
emisor = new CFDIEmisor();
|
|
receptor = new CFDIReceptor();
|
|
complemento = new CFDIComplemento();
|
|
cFDIRelacionados = new List<CFDIRelacionado>();
|
|
conceptos = new List<CFDIConcepto>();
|
|
Impuestos = new List<CFDIImpuesto>();
|
|
}
|
|
public CFDIComprobante comprobante;
|
|
public CFDIEmisor emisor;
|
|
public CFDIReceptor receptor;
|
|
public CFDIComplemento complemento;
|
|
public List<CFDIRelacionado> cFDIRelacionados;
|
|
public List<CFDIConcepto> conceptos;
|
|
public List<CFDIImpuesto> Impuestos;
|
|
public List<CFDIConcepto_I> GetConceptosforpdf()
|
|
{
|
|
List<CFDIConcepto_I> lcon = new List<CFDIConcepto_I>();
|
|
if (conceptos != null)
|
|
{
|
|
int _orden = 0;
|
|
foreach (CFDIConcepto item in conceptos)
|
|
{
|
|
_orden += 1;
|
|
CFDIConcepto_I con = new CFDIConcepto_I
|
|
{
|
|
tipo = 1,
|
|
orden = _orden,
|
|
ClaveProdServ = item.ClaveProdServ,
|
|
NoIdentificacion = item.NoIdentificacion,
|
|
Cantidad = item.Cantidad,
|
|
ClaveUnidad = item.ClaveUnidad,
|
|
Unidad = item.Unidad,
|
|
ValorUnitario = item.ValorUnitario,
|
|
Importe = item.Importe,
|
|
Descuento = item.Descuento,
|
|
NumeroPedimento = item.NumeroPedimento,
|
|
CuentaPredial = item.CuentaPredial,
|
|
Descripcion = item.Descripcion
|
|
};
|
|
int index = 0;
|
|
foreach (CFDIConceptoImpuesto Imp in item.Impuestos)
|
|
{
|
|
index++;
|
|
if (index > 1)
|
|
{
|
|
lcon.Add(con);
|
|
con = new CFDIConcepto_I
|
|
{
|
|
tipo = 2,
|
|
orden = _orden,
|
|
};
|
|
|
|
}
|
|
|
|
con.Impuesto = Imp.ImpuestoTexto;
|
|
con.Impuesto_Tipo = Imp.Tipo;
|
|
con.Impuesto_Base = Imp.Base;
|
|
con.Impuesto_TipoFactor = Imp.TipoFactor;
|
|
con.Impuesto_TasaOCuota = Imp.TasaOCuota;
|
|
con.Impuesto_Importe = Imp.Importe;
|
|
}
|
|
lcon.Add(con);
|
|
}
|
|
}
|
|
|
|
return lcon;
|
|
}
|
|
|
|
public static XmlSatCFDI readXML(string fileUrl)
|
|
{
|
|
XmlSatCFDI xmlCFDI = new XmlSatCFDI();
|
|
bool canread = true;
|
|
//keys
|
|
string keyComprobante = "Comprobante";
|
|
string keyCfdiRelacionados = "CfdiRelacionados";
|
|
string keyEmisor = "Emisor";
|
|
string keyReceptor = "Receptor";
|
|
string keyConceptos = "Conceptos";
|
|
string keyImpuestos = "Impuestos";
|
|
string keyComplemento = "Complemento";
|
|
//endkeys
|
|
string[] PrimerNivel = new string[] { keyCfdiRelacionados, keyEmisor, keyReceptor, keyConceptos, keyImpuestos, keyComplemento };
|
|
//(canread = xtr.Read()) para evitar ciclos infinitos, todos los .Read() los guardo en la variable Canread y en los while reviso primero esta variable
|
|
if (File.Exists(fileUrl))
|
|
{
|
|
XmlReaderSettings settings = new XmlReaderSettings();
|
|
settings.ConformanceLevel = ConformanceLevel.Fragment;
|
|
settings.IgnoreWhitespace = true;
|
|
settings.IgnoreComments = true;
|
|
using (XmlReader xtr = XmlReader.Create(fileUrl, settings))
|
|
{
|
|
|
|
while ((canread = xtr.Read()) && !(xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:","") == keyComprobante))
|
|
{
|
|
//if (xtr.NodeType != XmlNodeType.Element) { while (xtr.Read() && xtr.NodeType != XmlNodeType.Element) { } }
|
|
}
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:", "") == keyComprobante)
|
|
{
|
|
int Nivel = xtr.Depth;
|
|
bool cont = xtr.MoveToFirstAttribute();
|
|
while (cont)
|
|
{
|
|
|
|
switch (xtr.Name.ToUpper())
|
|
{
|
|
case "XMLNS:CFDI": xmlCFDI.comprobante.xmlns_cfdi = xtr.Value; break;
|
|
case "XMLNS:XSI": xmlCFDI.comprobante.xmlns_xsi = xtr.Value; break;
|
|
case "XSI:SCHEMALOCATION": xmlCFDI.comprobante.xsi_schemaLocation = xtr.Value; break;
|
|
case "VERSION": xmlCFDI.comprobante.Version = xtr.Value; break;
|
|
case "SERIE": xmlCFDI.comprobante.Serie = xtr.Value; break;
|
|
case "FOLIO": xmlCFDI.comprobante.Folio = xtr.Value; break;
|
|
case "FECHA": xmlCFDI.comprobante.Fecha = xtr.Value; break;
|
|
case "MONEDA": xmlCFDI.comprobante.Moneda = xtr.Value; break;
|
|
case "SUBTOTAL": decimal SubTotal = 0; decimal.TryParse(xtr.Value, out SubTotal); xmlCFDI.comprobante.SubTotal = SubTotal; break;
|
|
case "TOTAL": decimal Total = 0; decimal.TryParse(xtr.Value, out Total); xmlCFDI.comprobante.Total = Total; break;
|
|
case "DESCUENTO": decimal Descuento = 0; decimal.TryParse(xtr.Value, out Descuento); xmlCFDI.comprobante.Descuento = Descuento; break;
|
|
case "TIPOCAMBIO": decimal TipoCambio = 0; decimal.TryParse(xtr.Value, out TipoCambio); xmlCFDI.comprobante.TipoCambio = TipoCambio; break;
|
|
case "TIPODECOMPROBANTE": xmlCFDI.comprobante.TipoDeComprobante = xtr.Value; break;
|
|
case "FORMAPAGO": xmlCFDI.comprobante.FormaPago = xtr.Value; break;
|
|
case "FORMADEPAGO": xmlCFDI.comprobante.FormaPago = xtr.Value; break;
|
|
case "METODOPAGO": xmlCFDI.comprobante.MetodoPago = xtr.Value; break;
|
|
case "METODODEPAGO": xmlCFDI.comprobante.MetodoPago = xtr.Value; break;
|
|
case "CONDICIONESDEPAGO": xmlCFDI.comprobante.CondicionesDePago = xtr.Value; break;
|
|
case "LUGAREXPEDICION": xmlCFDI.comprobante.LugarExpedicion = xtr.Value; break;
|
|
case "CONFIRMACION": xmlCFDI.comprobante.Confirmacion = xtr.Value; break;
|
|
case "NOCERTIFICADO": xmlCFDI.comprobante.NoCertificado = xtr.Value; break;
|
|
case "SELLO": xmlCFDI.comprobante.Sello = xtr.Value; break;
|
|
case "CERTIFICADO": xmlCFDI.comprobante.Certificado = xtr.Value; break;
|
|
}
|
|
cont = xtr.MoveToNextAttribute();
|
|
}
|
|
cont = xtr.MoveToFirstAttribute();
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
while (canread && xtr.Depth > Nivel)
|
|
{
|
|
if (PrimerNivel.Contains(xtr.Name.Replace("cfdi:", "")))
|
|
{
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:", "") == keyCfdiRelacionados)
|
|
{
|
|
int cDepth = xtr.Depth;
|
|
|
|
string TipoRelacion = null;
|
|
cont = xtr.MoveToFirstAttribute();
|
|
while (cont)
|
|
{
|
|
switch (xtr.Name.ToUpper())
|
|
{
|
|
case "TIPORELACION": TipoRelacion = xtr.Value; break;
|
|
}
|
|
cont = xtr.MoveToNextAttribute();
|
|
}
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
while (canread && xtr.Depth > cDepth)
|
|
{
|
|
if (xtr.Name.Replace("cfdi:", "") == "CfdiRelacionado")
|
|
{
|
|
CFDIRelacionado cfdir = new CFDIRelacionado();
|
|
cfdir.TipoRelacion = TipoRelacion;
|
|
cfdir.UUID = xtr.GetAttribute("UUID");
|
|
xmlCFDI.cFDIRelacionados.Add(cfdir);
|
|
}
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
}
|
|
|
|
}
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:", "") == keyEmisor)
|
|
{
|
|
|
|
|
|
int curentNivel = xtr.Depth;
|
|
cont = xtr.MoveToFirstAttribute();
|
|
while (cont)
|
|
{
|
|
switch (xtr.Name.ToUpper())
|
|
{
|
|
case "REGIMENFISCAL": xmlCFDI.emisor.RegimenFiscal = xtr.Value; break;
|
|
case "NOMBRE": xmlCFDI.emisor.Nombre = xtr.Value; break;
|
|
case "RFC": xmlCFDI.emisor.Rfc = xtr.Value; break;
|
|
}
|
|
cont = xtr.MoveToNextAttribute();
|
|
}
|
|
while ((canread = xtr.Read()) && !(xtr.NodeType == XmlNodeType.Element && curentNivel >= xtr.Depth)) { }//continua hasta que no tenga nodos y (el nodo sea tipo elemnto y ete en el mismo nivel)
|
|
}
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:", "") == keyReceptor)
|
|
{
|
|
int curentNivel = xtr.Depth;
|
|
cont = xtr.MoveToFirstAttribute();
|
|
while (cont)
|
|
{
|
|
switch (xtr.Name.ToUpper())
|
|
{
|
|
case "RFC": xmlCFDI.receptor.Rfc = xtr.Value; break;
|
|
case "NOMBRE": xmlCFDI.receptor.Nombre = xtr.Value; break;
|
|
case "RESIDENCIAFISCAL": xmlCFDI.receptor.ResidenciaFiscal = xtr.Value; break;
|
|
case "NUMREGIDTRIB": xmlCFDI.receptor.NumRegIdTrib = xtr.Value; break;
|
|
case "USOCFDI": xmlCFDI.receptor.UsoCFDI = xtr.Value; break;
|
|
}
|
|
cont = xtr.MoveToNextAttribute();
|
|
}
|
|
|
|
while ((canread = xtr.Read()) && !(xtr.NodeType == XmlNodeType.Element && curentNivel >= xtr.Depth)) { }//continua hasta que no tenga nodos y (el nodo sea tipo elemnto y ete en el mismo nivel)
|
|
}
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:", "") == keyConceptos)
|
|
{
|
|
int cDepth = xtr.Depth;
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
while (canread && xtr.Depth > cDepth)
|
|
{
|
|
if (xtr.Name.Replace("cfdi:", "") == "Concepto")
|
|
{
|
|
int cDepthb = xtr.Depth;
|
|
CFDIConcepto concepto = new CFDIConcepto();
|
|
|
|
cont = xtr.MoveToFirstAttribute();
|
|
while (cont)
|
|
{
|
|
switch (xtr.Name.ToUpper())
|
|
{
|
|
case "CLAVEPRODSERV": concepto.ClaveProdServ = xtr.Value; break;
|
|
case "NOIDENTIFICACION": concepto.NoIdentificacion = xtr.Value; break;
|
|
case "CANTIDAD": concepto.Cantidad = xtr.Value; break;
|
|
case "CLAVEUNIDAD": concepto.ClaveUnidad = xtr.Value; break;
|
|
case "UNIDAD": concepto.Unidad = xtr.Value; break;
|
|
case "VALORUNITARIO": decimal ValorUnitario = 0; decimal.TryParse(xtr.Value, out ValorUnitario); concepto.ValorUnitario = ValorUnitario; ; break;
|
|
case "IMPORTE": decimal Importe = 0; decimal.TryParse(xtr.Value, out Importe); concepto.Importe = Importe; ; break;
|
|
case "DESCUENTO": decimal DDescuento = 0; decimal.TryParse(xtr.Value, out DDescuento); concepto.Descuento = DDescuento; ; break;
|
|
case "DESCRIPCION": concepto.Descripcion = xtr.Value; break;
|
|
}
|
|
cont = xtr.MoveToNextAttribute();
|
|
}
|
|
xtr.MoveToFirstAttribute();
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
while (canread && xtr.Depth > cDepthb)
|
|
{
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:", "") == "Impuestos")
|
|
{
|
|
int cDepthc = xtr.Depth;
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
while (canread && xtr.Depth > cDepthc)
|
|
{
|
|
if (xtr.Name.Replace("cfdi:", "") == "Traslado" || xtr.Name.Replace("cfdi:", "") == "Retencion")
|
|
{
|
|
CFDIConceptoImpuesto impuesto = new CFDIConceptoImpuesto();
|
|
impuesto.Impuesto = xtr.GetAttribute("Impuesto");
|
|
impuesto.Tipo = xtr.LocalName;
|
|
decimal Base = 0;
|
|
decimal.TryParse(xtr.GetAttribute("Base"), out Base);
|
|
impuesto.Base = Base;
|
|
impuesto.TipoFactor = xtr.GetAttribute("TipoFactor");
|
|
decimal tasaOCuota = 0;
|
|
decimal.TryParse(xtr.GetAttribute("TasaOCuota"), out tasaOCuota);
|
|
impuesto.TasaOCuota = impuesto.TipoFactor == "Tasa" ? (tasaOCuota * 100).ToString("N4") : xtr.GetAttribute("TasaOCuota");
|
|
decimal ImImporte = 0;
|
|
decimal.TryParse(xtr.GetAttribute("Importe"), out ImImporte);
|
|
impuesto.Importe = ImImporte;
|
|
|
|
concepto.Impuestos.Add(impuesto);
|
|
}
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bool rednew = true;
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:", "") == "InformacionAduanera")
|
|
{
|
|
concepto.NumeroPedimento = xtr.GetAttribute("NumeroPedimento");
|
|
rednew = false; while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
}
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:", "") == "CuentaPredial")
|
|
{
|
|
concepto.CuentaPredial = xtr.GetAttribute("CuentaPredial");
|
|
rednew = false; while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
}
|
|
if (rednew) { while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { } }
|
|
|
|
}
|
|
}
|
|
|
|
xmlCFDI.conceptos.Add(concepto);
|
|
}
|
|
}
|
|
}
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:", "") == keyImpuestos)
|
|
{
|
|
int cDepth = xtr.Depth;
|
|
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
while (canread && xtr.Depth > cDepth)
|
|
{
|
|
CFDIImpuesto impuest = new CFDIImpuesto();
|
|
if (xtr.Name.Replace("cfdi:", "") == "Traslado" || xtr.Name.Replace("cfdi:", "") == "Retencion" && xmlCFDI.comprobante.Version != null)
|
|
{
|
|
impuest.Tipo = xtr.LocalName == "Traslado" ? "Traslados" : (xtr.LocalName == "Retencion" ? "Retenciones" : "");
|
|
impuest.Impuesto = xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("Impuesto") : xtr.GetAttribute("impuesto");
|
|
impuest.TipoFactor = xtr.GetAttribute("TipoFactor");
|
|
impuest.TasaOCuota = xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("TasaOCuota") : xtr.GetAttribute("tasa");
|
|
decimal ImImporte = 0;
|
|
decimal.TryParse((xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("Importe") : xtr.GetAttribute("importe")), out ImImporte);
|
|
impuest.Importe = ImImporte;
|
|
xmlCFDI.Impuestos.Add(impuest);
|
|
}
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
|
|
}
|
|
}
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.Name.Replace("cfdi:", "") == keyComplemento)
|
|
{
|
|
int cDepth = xtr.Depth;
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
while (canread && xtr.Depth > cDepth)
|
|
{
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.LocalName == "TimbreFiscalDigital" && xmlCFDI.comprobante.Version != null)
|
|
{
|
|
xmlCFDI.complemento.xmlns_tfd = xtr.GetAttribute("xmlns:tfd");
|
|
xmlCFDI.complemento.xsi_schemaLocation = xtr.GetAttribute("xsi:schemaLocation");
|
|
xmlCFDI.complemento.Version = xtr.GetAttribute("Version");
|
|
xmlCFDI.complemento.UUID = xtr.GetAttribute("UUID");
|
|
xmlCFDI.complemento.FechaTimbrado = xtr.GetAttribute("FechaTimbrado");
|
|
xmlCFDI.complemento.RfcProvCertif = xtr.GetAttribute("RfcProvCertif");
|
|
xmlCFDI.complemento.SelloCFD = xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("SelloCFD") : xtr.GetAttribute("selloCFD");
|
|
xmlCFDI.complemento.NoCertificadoSAT = xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("NoCertificadoSAT") : xtr.GetAttribute("noCertificadoSAT");
|
|
xmlCFDI.complemento.SelloSAT = xmlCFDI.comprobante.Version == "3.3" ? xtr.GetAttribute("SelloSAT") : xtr.GetAttribute("selloSAT");
|
|
|
|
}
|
|
|
|
if (xtr.NodeType == XmlNodeType.Element && xtr.LocalName == "Pagos" && xmlCFDI.comprobante.Version != null)
|
|
{
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
xmlCFDI.complemento.Pagos = new CFDIPago();
|
|
int depthpagos = xtr.Depth;
|
|
bool conts = xtr.MoveToFirstAttribute();
|
|
while (conts)
|
|
{
|
|
|
|
decimal Base = 0;
|
|
switch (xtr.Name.ToUpper())
|
|
{
|
|
case "FECHAPAGO": xmlCFDI.complemento.Pagos.FechaPago = xtr.Value; break;
|
|
case "FORMADEPAGOP": xmlCFDI.complemento.Pagos.FormaDePagoP = xtr.Value; break;
|
|
case "FORMADEPAGOPTEXT": xmlCFDI.complemento.Pagos.FormaDePagoPText = xtr.Value; break;
|
|
case "MONEDAP": xmlCFDI.complemento.Pagos.MonedaP = xtr.Value; break;
|
|
case "MONTO": decimal.TryParse(xtr.Value, out Base); xmlCFDI.complemento.Pagos.Monto = Base; break;
|
|
case "TIPOCAMBIOP": decimal.TryParse(xtr.Value, out Base); xmlCFDI.complemento.Pagos.TipoCambioP = Base; break;
|
|
case "NUMOPERACION": xmlCFDI.complemento.Pagos.NumOperacion = xtr.Value; break;
|
|
case "NOMBANCOORDEXT": xmlCFDI.complemento.Pagos.NomBancoOrdExt = xtr.Value; break;
|
|
case "RFCEMISORCTAORD": xmlCFDI.complemento.Pagos.RfcEmisorCtaOrd = xtr.Value; break;
|
|
case "CTAORDENANTE": xmlCFDI.complemento.Pagos.CtaOrdenante = xtr.Value; break;
|
|
case "RFCEMISORCTABEN": xmlCFDI.complemento.Pagos.RfcEmisorCtaBen = xtr.Value; break;
|
|
case "CTABENEFICIARIO": xmlCFDI.complemento.Pagos.CtaBeneficiario = xtr.Value; break;
|
|
}
|
|
conts = xtr.MoveToNextAttribute();
|
|
}
|
|
conts = xtr.MoveToFirstAttribute();
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
while (canread && xtr.Depth > depthpagos)
|
|
{
|
|
CFDIPagoDoctoRelacionado objpago = new CFDIPagoDoctoRelacionado();
|
|
conts = xtr.MoveToFirstAttribute();
|
|
while (conts)
|
|
{
|
|
|
|
decimal Basep = 0;
|
|
switch (xtr.Name.ToUpper())
|
|
{
|
|
case "IDDOCUMENTO": objpago.IdDocumento = xtr.Value; break;
|
|
case "SERIE": objpago.Serie = xtr.Value; break;
|
|
case "FOLIO": objpago.Folio = xtr.Value; break;
|
|
case "MONEDADR": objpago.MonedaDR = xtr.Value; break;
|
|
case "METODODEPAGODR": objpago.MetodoDePagoDR = xtr.Value; break;
|
|
case "NUMPARCIALIDAD": objpago.NumParcialidad = xtr.Value; break;
|
|
case "IMPSALDOANT": decimal.TryParse(xtr.Value, out Basep); objpago.ImpSaldoAnt = Basep; break;
|
|
case "IMPPAGADO": decimal.TryParse(xtr.Value, out Basep); objpago.ImpPagado = Basep; break;
|
|
case "IMPSALDOINSOLUTO": decimal.TryParse(xtr.Value, out Basep); objpago.ImpSaldoInsoluto = Basep; break;
|
|
|
|
}
|
|
conts = xtr.MoveToNextAttribute();
|
|
}
|
|
conts = xtr.MoveToFirstAttribute();
|
|
xmlCFDI.complemento.Pagos.doctosRelacionados.Add(objpago);
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
}
|
|
}
|
|
else
|
|
{
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//si no entro en ninguna de los anteriores no se debe ciclar
|
|
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
if (xmlCFDI.comprobante.Version == "3.3" || xmlCFDI.comprobante.Version == "3.2")
|
|
{
|
|
return xmlCFDI;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public class utilValores
|
|
{
|
|
public utilValores(string nombre, string valor)
|
|
{
|
|
Nombre = nombre;
|
|
Valor = valor;
|
|
}
|
|
public string Nombre { get; set; }
|
|
public string Valor { get; set; }
|
|
}
|
|
public class utilImage
|
|
{
|
|
public utilImage(byte[] imagenByte)
|
|
{
|
|
ImagenByte = imagenByte;
|
|
}
|
|
public byte[] ImagenByte { get; set; }
|
|
}
|
|
}
|
|
|
|
public class CFDIComplemento
|
|
{
|
|
public string xmlns_tfd { get; set; }
|
|
public string xsi_schemaLocation { get; set; }
|
|
public string Version { get; set; }
|
|
public string UUID { get; set; }
|
|
public string FechaTimbrado { get; set; }
|
|
public string RfcProvCertif { get; set; }
|
|
public string SelloCFD { get; set; }
|
|
public string NoCertificadoSAT { get; set; }
|
|
public string SelloSAT { get; set; }
|
|
public CFDIPago Pagos { get; set; }
|
|
public string CadenaOriginal
|
|
{
|
|
get
|
|
{
|
|
return string.Format("||{0}|{1}|{2}|{3}|{4}|{5}||", Version, UUID, FechaTimbrado, RfcProvCertif, SelloCFD, NoCertificadoSAT);
|
|
}
|
|
}
|
|
|
|
}
|
|
public class CFDIComprobante
|
|
{
|
|
public string xmlns_cfdi { get; set; }
|
|
public string xmlns_xsi { get; set; }
|
|
public string xsi_schemaLocation { get; set; }
|
|
public string Version { get; set; }
|
|
public string Serie { get; set; }
|
|
public string Folio { get; set; }
|
|
public string Fecha { get; set; }
|
|
public string Moneda { get; set; }
|
|
public decimal SubTotal { get; set; }
|
|
public decimal Total { get; set; }
|
|
public decimal Descuento { get; set; }
|
|
public decimal TipoCambio { get; set; }
|
|
public string TipoDeComprobante { get; set; }
|
|
|
|
public string TipoDeComprobanteSIG
|
|
{
|
|
get
|
|
{
|
|
string retorno = "";
|
|
if (Version == "3.3")
|
|
{
|
|
switch (TipoDeComprobante)
|
|
{
|
|
case "I":
|
|
retorno = "Ing";
|
|
break;
|
|
case "E":
|
|
retorno = "Egs";
|
|
break;
|
|
case "P":
|
|
retorno = "PA";
|
|
break;
|
|
//case "T":
|
|
// retorno = "Traslado";
|
|
// break;
|
|
//case "N":
|
|
// retorno = "Nómina";
|
|
// break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else if (Version == "3.2")
|
|
{
|
|
switch (TipoDeComprobante)
|
|
{
|
|
case "ingreso":
|
|
retorno = "Ing";
|
|
break;
|
|
case "egreso":
|
|
retorno = "Egs";
|
|
break;
|
|
case "P":
|
|
retorno = "PA";
|
|
break;
|
|
//case "T":
|
|
// retorno = "Traslado";
|
|
// break;
|
|
//case "N":
|
|
// retorno = "Nómina";
|
|
// break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else { retorno = TipoDeComprobante; }
|
|
return retorno;
|
|
}
|
|
}
|
|
public string TipoDeComprobanteTexto
|
|
{
|
|
get
|
|
{
|
|
string retorno = "";
|
|
|
|
if (Version == "3.3")
|
|
{
|
|
switch (TipoDeComprobante)
|
|
{
|
|
case "I":
|
|
retorno = "Ingreso";
|
|
break;
|
|
case "E":
|
|
retorno = "Egreso";
|
|
break;
|
|
case "P":
|
|
retorno = "Pago";
|
|
break;
|
|
case "T":
|
|
retorno = "Traslado";
|
|
break;
|
|
case "N":
|
|
retorno = "Nómina";
|
|
break;
|
|
|
|
default:
|
|
retorno = TipoDeComprobante;
|
|
break;
|
|
}
|
|
}
|
|
else if (Version == "3.2")
|
|
{
|
|
switch (TipoDeComprobante)
|
|
{
|
|
case "ingreso":
|
|
retorno = "Ing";
|
|
break;
|
|
case "egreso":
|
|
retorno = "Egs";
|
|
break;
|
|
case "P":
|
|
retorno = "PA";
|
|
break;
|
|
//case "T":
|
|
// retorno = "Traslado";
|
|
// break;
|
|
//case "N":
|
|
// retorno = "Nómina";
|
|
// break;
|
|
|
|
default:
|
|
retorno = TipoDeComprobante;
|
|
break;
|
|
}
|
|
}
|
|
else { retorno = TipoDeComprobante; }
|
|
return retorno;
|
|
}
|
|
}
|
|
public string FormaPago { get; set; }
|
|
|
|
public string FormaPagoTexto
|
|
{
|
|
get
|
|
{
|
|
string retorno = "";
|
|
|
|
switch (FormaPago)
|
|
{
|
|
case "01": retorno = "Efectivo"; break;
|
|
case "02": retorno = "Cheque nominativo"; break;
|
|
case "03": retorno = "Transferencia electrónica de fondos"; break;
|
|
case "04": retorno = "Tarjeta de crédito"; break;
|
|
case "05": retorno = "Monedero electrónico"; break;
|
|
case "06": retorno = "Dinero electrónico"; break;
|
|
case "08": retorno = "Vales de despensa"; break;
|
|
case "12": retorno = "Dación en pago"; break;
|
|
case "13": retorno = "Pago por subrogación"; break;
|
|
case "14": retorno = "Pago por consignación"; break;
|
|
case "15": retorno = "Condonación"; break;
|
|
case "17": retorno = "Compensación"; break;
|
|
case "23": retorno = "Novación"; break;
|
|
case "24": retorno = "Confusión"; break;
|
|
case "25": retorno = "Remisión de deuda"; break;
|
|
case "26": retorno = "Prescripción o caducidad"; break;
|
|
case "27": retorno = "A satisfacción del acreedor"; break;
|
|
case "28": retorno = "Tarjeta de débito"; break;
|
|
case "29": retorno = "Tarjeta de servicios"; break;
|
|
case "30": retorno = "Aplicación de anticipos"; break;
|
|
case "31": retorno = "Intermediario pagos"; break;
|
|
case "99": retorno = "Por definir"; break;
|
|
default: retorno = FormaPago; break;
|
|
}
|
|
return retorno;
|
|
}
|
|
}
|
|
public string MetodoPago { get; set; }
|
|
public string MetodoPagoTexto
|
|
{
|
|
get
|
|
{
|
|
string retorno = "";
|
|
|
|
switch (MetodoPago)
|
|
{
|
|
case "PUE": retorno = "Pago en una sola exhibición"; break;
|
|
case "PPD": retorno = "Pago en parcialidades o diferido"; break;
|
|
default: retorno = MetodoPago; break;
|
|
}
|
|
return retorno;
|
|
}
|
|
}
|
|
public string CondicionesDePago { get; set; }
|
|
public string LugarExpedicion { get; set; }
|
|
public string Confirmacion { get; set; }
|
|
public string NoCertificado { get; set; }
|
|
public string Sello { get; set; }
|
|
public string Certificado { get; set; }
|
|
|
|
}
|
|
|
|
public class CFDIConcepto
|
|
{
|
|
public CFDIConcepto()
|
|
{
|
|
Impuestos = new List<CFDIConceptoImpuesto>();
|
|
}
|
|
public string ClaveProdServ { get; set; }
|
|
public string NoIdentificacion { get; set; }
|
|
public string Cantidad { get; set; }
|
|
public string ClaveUnidad { get; set; }
|
|
public string Unidad { get; set; }
|
|
public decimal ValorUnitario { get; set; }
|
|
public decimal Importe { get; set; }
|
|
public decimal Descuento { get; set; }
|
|
public string NumeroPedimento { get; set; }
|
|
public string CuentaPredial { get; set; }
|
|
public string Descripcion { get; set; }
|
|
public List<CFDIConceptoImpuesto> Impuestos { get; set; }
|
|
}
|
|
|
|
public class CFDIConcepto_I
|
|
{
|
|
public int tipo { get; set; }
|
|
public int orden { get; set; }
|
|
public string ClaveProdServ { get; set; }
|
|
public string NoIdentificacion { get; set; }
|
|
public string Cantidad { get; set; }
|
|
public string ClaveUnidad { get; set; }
|
|
public string Unidad { get; set; }
|
|
public decimal ValorUnitario { get; set; }
|
|
public decimal Importe { get; set; }
|
|
public decimal Descuento { get; set; }
|
|
public string NumeroPedimento { get; set; }
|
|
public string CuentaPredial { get; set; }
|
|
public string Descripcion { get; set; }
|
|
|
|
|
|
public string Impuesto { get; set; }
|
|
|
|
public string Impuesto_Tipo { get; set; }
|
|
public decimal Impuesto_Base { get; set; }
|
|
public string Impuesto_TipoFactor { get; set; }
|
|
public string Impuesto_TasaOCuota { get; set; }
|
|
public decimal Impuesto_Importe { get; set; }
|
|
}
|
|
|
|
public class CFDIConceptoImpuesto
|
|
{
|
|
public string Impuesto { get; set; }
|
|
public string ImpuestoTexto
|
|
{
|
|
get
|
|
{
|
|
string retorno = "";
|
|
|
|
switch (Impuesto)
|
|
{
|
|
case "001": retorno = "ISR"; break;
|
|
case "002": retorno = "IVA"; break;
|
|
case "003": retorno = "IEPS"; break;
|
|
}
|
|
return retorno;
|
|
}
|
|
}
|
|
public string Tipo { get; set; }
|
|
public decimal Base { get; set; }
|
|
public string TipoFactor { get; set; }
|
|
public string TasaOCuota { get; set; }
|
|
public decimal Importe { get; set; }
|
|
|
|
}
|
|
|
|
public class CFDIEmisor
|
|
{
|
|
public string RegimenFiscal { get; set; }
|
|
|
|
public string RegimenFiscalTexto
|
|
{
|
|
get
|
|
{
|
|
string retorno = "";
|
|
|
|
switch (RegimenFiscal)
|
|
{
|
|
case "601": retorno = "General de Ley Personas Morales"; break;
|
|
case "603": retorno = "Personas Morales con Fines no Lucrativos"; break;
|
|
case "605": retorno = "Sueldos y Salarios e Ingresos Asimilados a Salarios"; break;
|
|
case "606": retorno = "Arrendamiento"; break;
|
|
case "608": retorno = "Demás ingresos"; break;
|
|
case "609": retorno = "Consolidación"; break;
|
|
case "610": retorno = "Residentes en el Extranjero sin Establecimiento Permanente en México"; break;
|
|
case "611": retorno = "Ingresos por Dividendos (socios y accionistas)"; break;
|
|
case "612": retorno = "Personas Físicas con Actividades Empresariales y Profesionales"; break;
|
|
case "614": retorno = "Ingresos por intereses"; break;
|
|
case "616": retorno = "Sin obligaciones fiscales"; break;
|
|
case "620": retorno = "Sociedades Cooperativas de Producción que optan por diferir sus ingresos"; break;
|
|
case "621": retorno = "Incorporación Fiscal"; break;
|
|
case "622": retorno = "Actividades Agrícolas, Ganaderas, Silvícolas y Pesqueras"; break;
|
|
case "623": retorno = "Opcional para Grupos de Sociedades"; break;
|
|
case "624": retorno = "Coordinados"; break;
|
|
case "628": retorno = "Hidrocarburos"; break;
|
|
case "607": retorno = "Régimen de Enajenación o Adquisición de Bienes"; break;
|
|
case "629": retorno = "De los Regímenes Fiscales Preferentes y de las Empresas Multinacionales"; break;
|
|
case "630": retorno = "Enajenación de acciones en bolsa de valores"; break;
|
|
case "615": retorno = "Régimen de los ingresos por obtención de premios"; break;
|
|
|
|
}
|
|
return retorno;
|
|
}
|
|
}
|
|
public string Nombre { get; set; }
|
|
public string Rfc { get; set; }
|
|
|
|
}
|
|
|
|
public class CFDIImpuesto
|
|
{
|
|
public string Tipo { get; set; }
|
|
public string Impuesto { get; set; }
|
|
public string ImpuestoTexto
|
|
{
|
|
get
|
|
{
|
|
string retorno = "";
|
|
|
|
switch (Impuesto)
|
|
{
|
|
case "001": retorno = "ISR"; break;
|
|
case "002": retorno = "IVA"; break;
|
|
case "003": retorno = "IEPS"; break;
|
|
}
|
|
return retorno;
|
|
}
|
|
}
|
|
public string TipoFactor { get; set; }
|
|
public string TasaOCuota { get; set; }
|
|
public decimal Importe { get; set; }
|
|
}
|
|
|
|
public class CFDIPago
|
|
{
|
|
public CFDIPago()
|
|
{
|
|
doctosRelacionados = new List<CFDIPagoDoctoRelacionado>();
|
|
}
|
|
public string FechaPago { get; set; }
|
|
public string FormaDePagoP { get; set; }
|
|
public string FormaDePagoPText { get; set; }
|
|
public string MonedaP { get; set; }
|
|
public decimal Monto { get; set; }
|
|
public decimal TipoCambioP { get; set; }
|
|
public string NumOperacion { get; set; }
|
|
public string NomBancoOrdExt { get; set; }
|
|
public string RfcEmisorCtaOrd { get; set; }
|
|
public string CtaOrdenante { get; set; }
|
|
public string RfcEmisorCtaBen { get; set; }
|
|
public string CtaBeneficiario { get; set; }
|
|
public List<CFDIPagoDoctoRelacionado> doctosRelacionados { get; set; }
|
|
}
|
|
|
|
public class CFDIPagoDoctoRelacionado
|
|
{
|
|
public string IdDocumento { get; set; }
|
|
public string Serie { get; set; }
|
|
public string Folio { get; set; }
|
|
public string MonedaDR { get; set; }
|
|
public string MetodoDePagoDR { get; set; }
|
|
public string NumParcialidad { get; set; }
|
|
public decimal ImpSaldoAnt { get; set; }
|
|
public decimal ImpPagado { get; set; }
|
|
public decimal ImpSaldoInsoluto { get; set; }
|
|
}
|
|
|
|
public class CFDIReceptor
|
|
{
|
|
public string Rfc { get; set; }
|
|
public string Nombre { get; set; }
|
|
public string ResidenciaFiscal { get; set; }
|
|
public string NumRegIdTrib { get; set; }
|
|
public string UsoCFDI { get; set; }
|
|
public string UsoCFDITexto
|
|
{
|
|
get
|
|
{
|
|
string retorno = "N/A";
|
|
|
|
switch (UsoCFDI)
|
|
{
|
|
case "G01":
|
|
retorno = "Adquisición de mercancías";
|
|
break;
|
|
case "G02":
|
|
retorno = "Devoluciones, descuentos o bonificaciones";
|
|
break;
|
|
case "G03":
|
|
retorno = "Gastos en general";
|
|
break;
|
|
case "I01":
|
|
retorno = "Construcciones";
|
|
break;
|
|
case "I02":
|
|
retorno = "Mobiliario y equipo de oficina por inversiones";
|
|
break;
|
|
case "I03":
|
|
retorno = "Equipo de transporte";
|
|
break;
|
|
case "I04":
|
|
retorno = "Equipo de cómputo y accesorios";
|
|
break;
|
|
case "I05":
|
|
retorno = "Dados, troqueles, moldes, matrices y herramental";
|
|
break;
|
|
case "I06":
|
|
retorno = "Comunicaciones telefónicas";
|
|
break;
|
|
case "I07":
|
|
retorno = "Comunicaciones satelitales";
|
|
break;
|
|
case "I08":
|
|
retorno = "Otra maquinaria y equipo";
|
|
break;
|
|
case "D01":
|
|
retorno = "Honorarios médicos, dentales y gastos hospitalarios.";
|
|
break;
|
|
case "D02":
|
|
retorno = "Gastos médicos por incapacidad o discapacidad";
|
|
break;
|
|
case "D03":
|
|
retorno = "Gastos funerales.";
|
|
break;
|
|
case "D04":
|
|
retorno = "Donativos.";
|
|
break;
|
|
case "D05":
|
|
retorno = "Intereses reales efectivamente pagados por créditos hipotecarios (casa habitación).";
|
|
break;
|
|
case "D06":
|
|
retorno = "Aportaciones voluntarias al SAR.";
|
|
break;
|
|
case "D07":
|
|
retorno = "Primas por seguros de gastos médicos.";
|
|
break;
|
|
case "D08":
|
|
retorno = "Gastos de transportación escolar obligatoria.";
|
|
break;
|
|
case "D09":
|
|
retorno = "Depósitos en cuentas para el ahorro, primas que tengan como base planes de pensiones.";
|
|
break;
|
|
case "D10":
|
|
retorno = "Pagos por servicios educativos (colegiaturas)";
|
|
break;
|
|
case "P01":
|
|
retorno = "Por definir";
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return retorno;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public class CFDIRelacionado
|
|
{
|
|
public string TipoRelacion { get; set; }
|
|
public string TipoRelacionTexto
|
|
{
|
|
|
|
get
|
|
{
|
|
string retorno;
|
|
|
|
switch (TipoRelacion)
|
|
{
|
|
case "01": retorno = "Nota de crédito de los documentos relacionados"; break;
|
|
case "02": retorno = "Nota de débito de los documentos relacionados"; break;
|
|
case "03": retorno = "Devolución de mercancía sobre facturas o traslados previos"; break;
|
|
case "04": retorno = "Sustitución de los CFDI previos"; break;
|
|
case "05": retorno = "Traslados de mercancias facturados previamente"; break;
|
|
case "06": retorno = "Factura generada por los traslados previos"; break;
|
|
case "07": retorno = "CFDI por aplicación de anticipo"; break;
|
|
default:
|
|
retorno = "Por definir";
|
|
break;
|
|
}
|
|
return retorno;
|
|
}
|
|
}
|
|
public string UUID { get; set; }
|
|
|
|
}
|
|
} |