Files
SIG/Ventas/RepConciliacionEmitidosSat.aspx.cs
JORGE LUIS CAUDILLO ESPARZA 83f52ddd40
2019-08-19 09:56:32 -07:00

1490 lines
72 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 ADSistemaLibrary.SatXml;
public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas
{
private StringBuilder strErrores;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
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();
}
}
}
protected void CargaConciliacionemitidasSATGet()
{
ClsVentas ObjV = new ClsVentas();
ObjV.ConciliacionemitidasSATGet(UsuarioActual.CveEmpresa);
GVConciliacionemitidasSAT.DataSource = ObjV.DtResultados.FiltraParametros("", "CveVenta");
ObjV.Dispose();
GVConciliacionemitidasSAT.DataBind();
UpDatosReporte.Update();
}
private void registrarventa(GridViewRow 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 void LnkRegistrar_Click(object sender, EventArgs e)
{
GridViewRow gvrow = (GridViewRow)(((LinkButton)sender).NamingContainer);
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;
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= '{objxml.comprobante.Moneda}' ").ToEntero(),
Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $" AbreviaturaSAT= '{objxml.comprobante.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 = '{objxml.comprobante.FormaPago}'").ToEntero();
objfact.FormaPagoSAT33 = objxml.comprobante.FormaPago;
objfact.FormaPago33 = objxml.comprobante.FormaPagoTexto;
objfact.CveMetodoPago33 = GlobalDTVtaMetodoPago.FiltroPrimeroValor("CveMetodoPago", $" ClaveMetodoPagoSAT = '{objxml.comprobante.MetodoPago}'").ToEntero();
objfact.CveMetodoPago = GlobalDTVtaMetodoPago.FiltroPrimeroValor("CveMetodoPago", $" ClaveMetodoPagoSAT = '{objxml.comprobante.MetodoPago}'").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);
objfact.SubTotal = objxml.comprobante.SubTotal;
objfact.Descuento = objxml.comprobante.Descuento;
objfact.Amortizacion = 0;
objfact.IVA = objxml.Impuestos.Where(x => x.Impuesto == "002" && x.Tipo == "Traslados").Sum(item => item.Importe);
objfact.RetIVA = objxml.Impuestos.Where(x => x.Impuesto == "002" && x.Tipo == "Retenciones").Sum(item => item.Importe);
objfact.RetISR = objxml.Impuestos.Where(x => x.Impuesto == "001" && x.Tipo == "Retenciones").Sum(item => item.Importe);
objfact.IEPS = objxml.Impuestos.Where(x => x.Impuesto == "003").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)
{
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("SerieLote", 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];
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["CveSATUnidadMedida"]));
}
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["SerieLote"] = "";
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"];
ADSistemaLibrary.SatXml.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"] = decimpuesto / 100;
Row["ImporteIVA"] = decimpuesto / 100;// impuesto.Importe;//Math.Round(item.Importe * (decimpuesto/100), 2);
sumaimpuesto += impuesto.Importe;
}
else
{
Row["PorcentajeIVA"] = 0;
Row["ImporteIVA"] = 0;
}
Row["IVA"] = Row["PorcentajeIVA"];
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');");
//foreach (GridViewRow gvrow in GVConciliacionemitidasSAT.Rows)
//{
// registrarventa(gvrow);
//}
}
}
/*
//SatCFDI
namespace ADS_CFDI_SAT
{
/// <summary>
/// clase para contener los valores de un xml CFDI
/// </summary>
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 = "cfdi:Comprobante";
string keyCfdiRelacionados = "cfdi:CfdiRelacionados";
string keyEmisor = "cfdi:Emisor";
string keyReceptor = "cfdi:Receptor";
string keyConceptos = "cfdi:Conceptos";
string keyImpuestos = "cfdi:Impuestos";
string keyComplemento = "cfdi: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))
{
using (XmlTextReader xtr = new XmlTextReader(fileUrl))
{
while ((canread = xtr.Read()) && !(xtr.NodeType == XmlNodeType.Element && xtr.Name == keyComprobante))
{
//if (xtr.NodeType != XmlNodeType.Element) { while (xtr.Read() && xtr.NodeType != XmlNodeType.Element) { } }
}
if (xtr.NodeType == XmlNodeType.Element && xtr.Name == keyComprobante)
{
xmlCFDI.comprobante.xmlns_cfdi = xtr.GetAttribute("xmlns:cfdi");
xmlCFDI.comprobante.xmlns_xsi = xtr.GetAttribute("xmlns:xsi");
xmlCFDI.comprobante.xsi_schemaLocation = xtr.GetAttribute("xsi:schemaLocation");
xmlCFDI.comprobante.Version = xtr.GetAttribute("Version");
xmlCFDI.comprobante.Serie = xtr.GetAttribute("Serie");
xmlCFDI.comprobante.Folio = xtr.GetAttribute("Folio");
xmlCFDI.comprobante.Fecha = xtr.GetAttribute("Fecha");
xmlCFDI.comprobante.Moneda = xtr.GetAttribute("Moneda");
decimal SubTotal = 0;
decimal.TryParse(xtr.GetAttribute("SubTotal"), out SubTotal);
xmlCFDI.comprobante.SubTotal = SubTotal;
decimal Total = 0;
decimal.TryParse(xtr.GetAttribute("Total"), out Total);
xmlCFDI.comprobante.Total = Total;
decimal Descuento = 0;
decimal.TryParse(xtr.GetAttribute("Descuento"), out Descuento);
xmlCFDI.comprobante.Descuento = Descuento;
decimal TipoCambio = 0;
decimal.TryParse(xtr.GetAttribute("TipoCambio"), out TipoCambio);
xmlCFDI.comprobante.TipoCambio = TipoCambio;
xmlCFDI.comprobante.TipoDeComprobante = xtr.GetAttribute("TipoDeComprobante");
xmlCFDI.comprobante.FormaPago = xtr.GetAttribute("FormaPago");
xmlCFDI.comprobante.MetodoPago = xtr.GetAttribute("MetodoPago");
xmlCFDI.comprobante.CondicionesDePago = xtr.GetAttribute("CondicionesDePago");
xmlCFDI.comprobante.LugarExpedicion = xtr.GetAttribute("LugarExpedicion");
xmlCFDI.comprobante.Confirmacion = xtr.GetAttribute("Confirmacion");
xmlCFDI.comprobante.NoCertificado = xtr.GetAttribute("NoCertificado");
xmlCFDI.comprobante.Sello = xtr.GetAttribute("Sello");
xmlCFDI.comprobante.Certificado = xtr.GetAttribute("Certificado");
int Nivel = xtr.Depth;
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
while (canread && xtr.Depth > Nivel)
{
if (PrimerNivel.Contains(xtr.Name))
{
if (xtr.NodeType == XmlNodeType.Element && xtr.Name == keyCfdiRelacionados)
{
string TipoRelacion = xtr.GetAttribute("TipoRelacion");
int cDepth = xtr.Depth;
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
while (canread && xtr.Depth > cDepth)
{
if (xtr.Name == "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 == keyEmisor)
{
xmlCFDI.emisor.RegimenFiscal = xtr.GetAttribute("RegimenFiscal");
xmlCFDI.emisor.Nombre = xtr.GetAttribute("Nombre");
xmlCFDI.emisor.Rfc = xtr.GetAttribute("Rfc");
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
}
if (xtr.NodeType == XmlNodeType.Element && xtr.Name == keyReceptor)
{
xmlCFDI.receptor.Rfc = xtr.GetAttribute("Rfc");
xmlCFDI.receptor.Nombre = xtr.GetAttribute("Nombre");
xmlCFDI.receptor.ResidenciaFiscal = xtr.GetAttribute("ResidenciaFiscal");
xmlCFDI.receptor.NumRegIdTrib = xtr.GetAttribute("NumRegIdTrib");
xmlCFDI.receptor.UsoCFDI = xtr.GetAttribute("UsoCFDI");
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
}
if (xtr.NodeType == XmlNodeType.Element && xtr.Name == keyConceptos)
{
int cDepth = xtr.Depth;
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
while (canread && xtr.Depth > cDepth)
{
if (xtr.Name == "cfdi:Concepto")
{
CFDIConcepto concepto = new CFDIConcepto();
concepto.ClaveProdServ = xtr.GetAttribute("ClaveProdServ");
concepto.NoIdentificacion = xtr.GetAttribute("NoIdentificacion");
concepto.Cantidad = xtr.GetAttribute("Cantidad");
concepto.ClaveUnidad = xtr.GetAttribute("ClaveUnidad");
concepto.Unidad = xtr.GetAttribute("Unidad");
decimal ValorUnitario = 0;
decimal.TryParse(xtr.GetAttribute("ValorUnitario"), out ValorUnitario);
concepto.ValorUnitario = ValorUnitario;
decimal Importe = 0;
decimal.TryParse(xtr.GetAttribute("Importe"), out Importe);
concepto.Importe = Importe;
decimal DDescuento = 0;
decimal.TryParse(xtr.GetAttribute("Descuento"), out DDescuento);
concepto.Descuento = DDescuento;
concepto.Descripcion = xtr.GetAttribute("Descripcion");
int cDepthb = xtr.Depth;
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
while (canread && xtr.Depth > cDepthb)
{
if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "cfdi:Impuestos")
{
int cDepthc = xtr.Depth;
while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
while (canread && xtr.Depth > cDepthc)
{
if (xtr.Name == "cfdi:Traslado" || xtr.Name == "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 == "cfdi:InformacionAduanera")
{
concepto.NumeroPedimento = xtr.GetAttribute("NumeroPedimento");
rednew = false; while ((canread = xtr.Read()) && xtr.NodeType != XmlNodeType.Element) { }
}
if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "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 == 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 == "cfdi:Traslado" || xtr.Name == "cfdi:Retencion")
{
impuest.Tipo = xtr.LocalName == "Traslado" ? "Traslados" : (xtr.LocalName == "Retencion" ? "Retenciones" : "");
impuest.Impuesto = xtr.GetAttribute("Impuesto");
impuest.TipoFactor = xtr.GetAttribute("TipoFactor");
impuest.TasaOCuota = xtr.GetAttribute("TasaOCuota");
decimal ImImporte = 0;
decimal.TryParse(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 == 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.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 = xtr.GetAttribute("SelloCFD");
xmlCFDI.complemento.NoCertificadoSAT = xtr.GetAttribute("NoCertificadoSAT");
xmlCFDI.complemento.SelloSAT = xtr.GetAttribute("SelloSAT");
}
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")
{
return xmlCFDI;
}
else
{
return null;
}
}
public void ImprimirPDF(string NombreArchivo)
{
XmlSatCFDI objxml = this;
string rutaReporte = string.Format("{0}{1}", Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName, "\\Empresas\\Grales\\Formatos\\CFDIV3.rdlc");
ClbNegBICFDv3_2.ClsNegCBBGenerar QR = new ClbNegBICFDv3_2.ClsNegCBBGenerar();
//byte[] cQr = QR.GenerarCBB(objxml.emisor.Rfc, objxml.receptor.Rfc, objxml.comprobante.Total, objxml.complemento.UUID);
byte[] cQr = QR.GenerarCBBBytes(objxml.emisor.Rfc, objxml.receptor.Rfc, objxml.comprobante.Total, objxml.complemento.UUID);
//string totalqr = objxml.comprobante.Total.ToString().TrimEnd().TrimEnd('0');
//if (totalqr.Substring(totalqr.Length -1) == ".")
//{
// totalqr = totalqr + "00";
//}
//string textoqr = $"https://verificacfdi.facturaelectronica.sat.gob.mx/default.aspx?id={objxml.complemento.UUID}&re={objxml.emisor.Rfc}&rr={objxml.receptor.Rfc}&tt={totalqr}&fe{objxml.comprobante.Fecha}";
//QRCodeGenerator qrGenerator = new QRCodeGenerator();
//QRCode QRCode = new QRCode(qrGenerator.CreateQrCode(textoqr, QRCodeGenerator.ECCLevel.Q));
//System.IO.MemoryStream MemoryQr = new System.IO.MemoryStream();
//QRCode.GetGraphic(15).Save(MemoryQr, System.Drawing.Imaging.ImageFormat.Png);
//cQr = new byte[MemoryQr.Length];
//MemoryQr.Read(cQr, 0, cQr.Length);
//string QRbase64 = Convert.ToBase64String(cQr);
//this.Alert(QRbase64);
List<ReportParameter> parametros = new List<ReportParameter>();
//comprobante
parametros.Add(new ReportParameter("comprobante_Certificado", objxml.comprobante.Certificado));
parametros.Add(new ReportParameter("comprobante_CondicionesDePago", objxml.comprobante.CondicionesDePago));
parametros.Add(new ReportParameter("comprobante_Confirmacion", objxml.comprobante.Confirmacion));
parametros.Add(new ReportParameter("comprobante_Fecha", objxml.comprobante.Fecha));
parametros.Add(new ReportParameter("comprobante_Serie", objxml.comprobante.Serie));
parametros.Add(new ReportParameter("comprobante_Folio", objxml.comprobante.Folio));
parametros.Add(new ReportParameter("comprobante_Descuento", objxml.comprobante.Descuento.ToString("N2")));
parametros.Add(new ReportParameter("comprobante_SubTotal", objxml.comprobante.SubTotal.ToString("N2")));
parametros.Add(new ReportParameter("comprobante_Total", objxml.comprobante.Total.ToString("N2")));
parametros.Add(new ReportParameter("comprobante_Version", objxml.comprobante.Version));
parametros.Add(new ReportParameter("comprobante_TipoDeComprobante", objxml.comprobante.TipoDeComprobanteTexto));
parametros.Add(new ReportParameter("comprobante_FormaPago", objxml.comprobante.FormaPagoTexto));
parametros.Add(new ReportParameter("comprobante_LugarExpedicion", objxml.comprobante.LugarExpedicion));
parametros.Add(new ReportParameter("comprobante_NoCertificado", objxml.comprobante.NoCertificado));
parametros.Add(new ReportParameter("comprobante_Sello", objxml.comprobante.Sello));
parametros.Add(new ReportParameter("comprobante_Moneda", objxml.comprobante.Moneda));
parametros.Add(new ReportParameter("comprobante_TipoCambio", objxml.comprobante.TipoCambio.ToString("N2")));
parametros.Add(new ReportParameter("comprobante_MetodoPago", objxml.comprobante.MetodoPagoTexto));
//emisor
parametros.Add(new ReportParameter("emisor_Rfc", objxml.emisor.Rfc));
parametros.Add(new ReportParameter("emisor_Nombre", objxml.emisor.Nombre));
parametros.Add(new ReportParameter("emisor_RegimenFiscal", objxml.emisor.RegimenFiscalTexto));
//receptor
parametros.Add(new ReportParameter("receptor_Rfc", objxml.receptor.Rfc));
parametros.Add(new ReportParameter("receptor_Nombre", objxml.receptor.Nombre));
parametros.Add(new ReportParameter("receptor_NumRegIdTrib", objxml.receptor.NumRegIdTrib));
parametros.Add(new ReportParameter("receptor_ResidenciaFiscal", objxml.receptor.ResidenciaFiscal));
parametros.Add(new ReportParameter("receptor_UsoCFDI", objxml.receptor.UsoCFDITexto));
//complemento
parametros.Add(new ReportParameter("complemento_FechaTimbrado", objxml.complemento.FechaTimbrado));
parametros.Add(new ReportParameter("complemento_NoCertificadoSAT", objxml.complemento.NoCertificadoSAT));
parametros.Add(new ReportParameter("complemento_RfcProvCertif", objxml.complemento.RfcProvCertif));
parametros.Add(new ReportParameter("complemento_SelloCFD", objxml.complemento.SelloCFD));
parametros.Add(new ReportParameter("complemento_SelloSAT", objxml.complemento.SelloSAT));
parametros.Add(new ReportParameter("complemento_UUID", objxml.complemento.UUID));
parametros.Add(new ReportParameter("complemento_CadenaOriginal", objxml.complemento.CadenaOriginal));
// parametros.Add(new ReportParameter("QRImage", QRbase64,true));
using (ReportViewer MR = new ReportViewer())
{
ReportDataSource rdsTotales = new ReportDataSource();
List<utilValores> ltotales = new List<utilValores>();
ltotales.Add(new utilValores("Subtotal", objxml.comprobante.SubTotal.ToString("N2")));
if (objxml.comprobante.Descuento > 0)
{
ltotales.Add(new utilValores("Descuento", objxml.comprobante.Descuento.ToString("N2")));
}
foreach (CFDIImpuesto item in objxml.Impuestos)
{
if (item.Importe > 0)
{
decimal TasaOCuota = 0;
decimal.TryParse(item.TasaOCuota, out TasaOCuota);
ltotales.Add(new utilValores($"Impuestos {item.Tipo} {item.ImpuestoTexto} {(item.TipoFactor == "Tasa" ? (TasaOCuota * 100).ToString("N4") : item.TasaOCuota)} {(item.TipoFactor == "Tasa" ? "%" : "")}", item.Importe.ToString("N2")));
}
}
ltotales.Add(new utilValores("Total", objxml.comprobante.Total.ToString("N2")));
rdsTotales.Name = "dsTotales";
rdsTotales.Value = ltotales;
MR.LocalReport.DataSources.Add(rdsTotales);
ReportDataSource rds2 = new ReportDataSource();
List<utilImage> limagenes = new List<utilImage>();
limagenes.Add(new utilImage(cQr));
rds2.Name = "dsImagenes";
rds2.Value = limagenes;
MR.LocalReport.DataSources.Add(rds2);
ReportDataSource rdsrelacionados = new ReportDataSource();
rdsrelacionados.Name = "dsRelacionados";
rdsrelacionados.Value = objxml.cFDIRelacionados;
MR.LocalReport.DataSources.Add(rdsrelacionados);
ReportDataSource rds1 = new ReportDataSource();
rds1.Name = "dsConceptos";
rds1.Value = objxml.GetConceptosforpdf();
MR.LocalReport.DataSources.Add(rds1);
MR.LocalReport.ReportPath = rutaReporte;
MR.ProcessingMode = ProcessingMode.Local;
MR.LocalReport.EnableExternalImages = true;
MR.LocalReport.SetParameters(parametros);
MR.LocalReport.Refresh();
Warning[] warnings = null;
string[] streamids = null;
string mimeType = null;
string encoding = null;
string extension = null;
byte[] bytes = null;
bytes = MR.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings);
using (FileStream fs = new FileStream(NombreArchivo, FileMode.Create))
{
fs.Write(bytes, 0, bytes.Length);
fs.Close();
}
}
}
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 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 { 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:
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;
}
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;
}
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 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 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 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 string CadenaOriginal
{
get
{
return $"||{Version}|{UUID}|{FechaTimbrado}|{RfcProvCertif}|{SelloCFD}|{NoCertificadoSAT}||";
}
}
}
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; }
}
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 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 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 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; }
}
}*/