Esempio n. 1
0
        private bool CargarProductos()
        {
            bool          resultado    = true;
            CFDS_Producto cfdsProducto = new CFDS_Producto(CFDS_Id);
            CFDS_Producto producto;
            DataTable     tabla = cfdsProducto.Listado();

            Productos.Clear();
            if (tabla != null)
            {
                foreach (DataRow row in tabla.Rows)
                {
                    producto = new CFDS_Producto(CFDS_Id);
                    if (producto.Cargar(row))
                    {
                        Productos.Add(producto);
                    }
                    else
                    {
                        resultado = false;
                        break;
                    }
                }
            }
            return(resultado);
        }
Esempio n. 2
0
        public static Clases.CFDS CargarXMLFactura(string RutaArchivo, TIPO_FACTURA tipo)
        {
            Clases.CFDS CFDS     = null;
            Provedor    provedor = null;
            bool        found    = false;

            try
            {
                string     xml  = File.ReadAllText(RutaArchivo);
                XDocument  doc  = XDocument.Parse(xml);
                XNamespace cfdi = doc.Root.Name.Namespace;
                CFDS = new Clases.CFDS();

                XElement comprobante = doc.Element(cfdi + "Comprobante");
                if (comprobante != null)
                {
                    XAttribute atributo = comprobante.Attribute("certificado");
                    CFDS.Certificado = (atributo != null) ? atributo.Value.ToString() : "";

                    atributo   = comprobante.Attribute("serie");
                    CFDS.Serie = (atributo != null) ? atributo.Value.ToString() : "";

                    atributo   = comprobante.Attribute("folio");
                    CFDS.Folio = (atributo != null) ? atributo.Value.ToString() : "";

                    atributo = comprobante.Attribute("noAprobacion");
                    CFDS.Numero_Aprobacion = (atributo != null) ? atributo.Value.ToString() : "";

                    atributo = comprobante.Attribute("fecha");
                    if (atributo == null)
                    {
                        CFDS.Fecha = CFDS.Fecha;
                    }
                    else
                    {
                        CFDS.Fecha = Convert.ToDateTime(atributo.Value);
                    }

                    atributo        = comprobante.Attribute("TipoCambio");
                    CFDS.TipoCambio = (atributo != null) ? Convert.ToDouble(atributo.Value) : 1.00;

                    atributo    = comprobante.Attribute("Moneda");
                    CFDS.Moneda = (atributo != null) ? atributo.Value.ToString() : "";

                    atributo      = comprobante.Attribute("subTotal");
                    CFDS.SubTotal = CFDS.TipoCambio * ((atributo != null) ? Convert.ToDouble(atributo.Value) : 0.00);

                    atributo       = comprobante.Attribute("descuento");
                    CFDS.Descuento = CFDS.TipoCambio * ((atributo != null) ? Convert.ToDouble(atributo.Value) : 0.00);

                    atributo   = comprobante.Attribute("total");
                    CFDS.Total = CFDS.TipoCambio * ((atributo != null) ? Convert.ToDouble(atributo.Value) : 0.00);

                    atributo   = comprobante.Attribute("sello");
                    CFDS.Sello = (atributo != null) ? atributo.Value.ToString() : "";

                    atributo = comprobante.Attribute("tipoDeComprobante");
                    CFDS.Tipo_Comprobante = (atributo != null) ? atributo.Value.ToString() : "";

                    provedor = new Provedor();
                    XElement emisor = comprobante.Element(cfdi + "Emisor");
                    if (emisor != null)
                    {
                        XAttribute att = emisor.Attribute("rfc");
                        CFDS.RFC_Emisor = (att != null) ? att.Value.ToString() : "";

                        att = emisor.Attribute("nombre");
                        CFDS.Nombre_Emisor = (att != null) ? att.Value.ToString() : "";
                    }
                    if (tipo == TIPO_FACTURA.ENTRADA || tipo == TIPO_FACTURA.GASTOS)
                    {
                        provedor.Nombre       = CFDS.Nombre_Emisor;
                        provedor.Razon_Social = CFDS.Nombre_Emisor;
                        provedor.RFC          = CFDS.RFC_Emisor;
                        found = provedor.Cargar().Result;
                        if (!found)
                        {
                            XElement domicilioFiscal = emisor.Element(cfdi + "DomicilioFiscal");
                            if (domicilioFiscal != null)
                            {
                                XAttribute att = domicilioFiscal.Attribute("calle");
                                provedor.Calle = (att != null) ? att.Value.ToString() : "";

                                att = domicilioFiscal.Attribute("codigoPostal");
                                provedor.Codigo_Postal = (att != null) ? att.Value.ToString() : "";

                                att = domicilioFiscal.Attribute("colonia");
                                provedor.Colonia = (att != null) ? att.Value.ToString() : "";

                                att             = domicilioFiscal.Attribute("estado");
                                provedor.Estado = (att != null) ? att.Value.ToString() : "";

                                att = domicilioFiscal.Attribute("localidad");
                                provedor.Localidad = (att != null) ? att.Value.ToString() : "";

                                att             = domicilioFiscal.Attribute("municipio");
                                provedor.Ciudad = (att != null) ? att.Value.ToString() : "";

                                att             = domicilioFiscal.Attribute("noExterior");
                                provedor.NumExt = (att != null) ? att.Value.ToString() : "";

                                att             = domicilioFiscal.Attribute("noInterior");
                                provedor.NumInt = (att != null) ? att.Value.ToString() : "";

                                att           = domicilioFiscal.Attribute("pais");
                                provedor.Pais = (att != null) ? att.Value.ToString() : "";
                            }
                            provedor.Activo = true;
                            provedor.Grabar();
                        }
                    }
                    XElement receptor = comprobante.Element(cfdi + "Receptor");
                    if (receptor != null)
                    {
                        XAttribute att = receptor.Attribute("rfc");
                        CFDS.RFC_Receptor = (att != null) ? att.Value.ToString() : "";

                        att = receptor.Attribute("nombre");
                        CFDS.Nombre_Receptor = (att != null) ? att.Value.ToString() : "";
                    }

                    XElement complemento = comprobante.Element(cfdi + "Complemento");
                    if (complemento != null)
                    {
                        if (complemento.FirstNode != null)
                        {
                            XNamespace tfd = ((System.Xml.Linq.XElement)complemento.FirstNode).Name.Namespace;

                            XElement timbre = complemento.Element((tfd ?? "") + "TimbreFiscalDigital");
                            if (timbre != null)
                            {
                                XAttribute att = timbre.Attribute("UUID");
                                CFDS.Folio_Fiscal = (att != null) ? att.Value.ToString() : "";

                                att = timbre.Attribute("FechaTimbrado");
                                if (att != null)
                                {
                                    CFDS.Fecha_Fiscal = Convert.ToDateTime(att.Value);
                                }
                            }
                        }
                    }

                    XElement impuestos = comprobante.Element(cfdi + "Impuestos");
                    if (impuestos != null)
                    {
                        XElement traslados = impuestos.Element(cfdi + "Traslados");
                        if (traslados != null)
                        {
                            XElement traslado = traslados.Element(cfdi + "Traslado");
                            if (traslado != null)
                            {
                                XAttribute att = traslado.Attribute("impuesto");
                                CFDS.Impuesto = (att != null) ? att.Value.ToString() : "";

                                att       = traslado.Attribute("tasa");
                                CFDS.Tasa = (att != null) ? att.Value.ToString() : "";

                                att = traslado.Attribute("importe");
                                CFDS.Importe_IVA = CFDS.TipoCambio * ((att != null) ? Convert.ToDouble(att.Value) : 0.00);
                            }
                        }
                    }

                    XElement conceptos = comprobante.Element(cfdi + "Conceptos");
                    if (conceptos != null)
                    {
                        //CFDS_Gasto gasto = null;
                        CFDS_Producto producto = null;
                        foreach (XElement concepto in conceptos.Elements(cfdi + "Concepto"))
                        {
                            XAttribute att = concepto.Attribute("cantidad");
                            if (tipo == TIPO_FACTURA.GASTOS)
                            {
                                /*gasto = new CFDS_Gasto();
                                 * gasto.Cantidad = (att != null) ? Convert.ToDouble(att.Value) : 0.00;
                                 * att = concepto.Attribute("unidad");
                                 * gasto.Unidad = (att != null) ? att.Value.ToString() : "";
                                 * att = concepto.Attribute("noIdentificacion");
                                 * gasto.Numero_Identificacion = (att != null) ? att.Value.ToString() : "";
                                 *
                                 * att = concepto.Attribute("descripcion");
                                 * gasto.Descripcion = (att != null) ? att.Value.ToString() : "";
                                 *
                                 * att = concepto.Attribute("valorUnitario");
                                 * gasto.Valor_Unitario = CFDS.TipoCambio * ((att != null) ? Convert.ToDouble(att.Value) : 0.00);
                                 * att = concepto.Attribute("importe");
                                 * gasto.Importe = CFDS.TipoCambio * ((att != null) ? Convert.ToDouble(att.Value) : 0.00);*/
                            }
                            else
                            {
                                producto = new CFDS_Producto();
                                producto.Cantidad_Factura = (att != null) ? Convert.ToDouble(att.Value) : 0.00;
                                att             = concepto.Attribute("unidad");
                                producto.Unidad = (att != null) ? att.Value.ToString() : "";
                                att             = concepto.Attribute("noIdentificacion");
                                producto.Numero_Identificacion = (att != null) ? att.Value.ToString() : "";
                                producto.Codigo_Producto       = producto.Numero_Identificacion;

                                att = concepto.Attribute("descripcion");
                                producto.Descripcion = (att != null) ? att.Value.ToString() : "";

                                att = concepto.Attribute("valorUnitario");
                                producto.Valor_Unitario        = CFDS.TipoCambio * ((att != null) ? Convert.ToDouble(att.Value) : 0.00);
                                producto.ValorUnitarioOriginal = producto.Valor_Unitario;
                                att = concepto.Attribute("importe");
                                producto.Importe = CFDS.TipoCambio * ((att != null) ? Convert.ToDouble(att.Value) : 0.00);
                            }
                            //Provedor provedor = new Provedor();
                            provedor.RFC = (tipo == TIPO_FACTURA.ENTRADA || tipo == TIPO_FACTURA.GASTOS) ? CFDS.RFC_Emisor : CFDS.RFC_Receptor;

                            if ((tipo == TIPO_FACTURA.ENTRADA || tipo == TIPO_FACTURA.GASTOS) && found)// provedor.Cargar(provedor).Result)
                            {
                                if (tipo == TIPO_FACTURA.ENTRADA)
                                {
                                    if (producto.Producto_Id <= 0 && producto.Numero_Identificacion.Trim().Length > 0)
                                    {
                                        Diccionario diccionario = new Diccionario();
                                        Diccionario resultado   = null;
                                        resultado            = diccionario.Buscar(provedor.Provedor_Id, producto.Numero_Identificacion);
                                        producto.Producto_Id = resultado.Producto_Id;
                                    }

                                    if (producto.Producto_Id <= 0 && producto.Descripcion.Trim().Length > 0)
                                    {
                                        Diccionario diccionario = new Diccionario();
                                        Diccionario resultado   = null;
                                        resultado            = diccionario.Buscar(provedor.Provedor_Id, producto.Descripcion);
                                        producto.Producto_Id = resultado.Producto_Id;
                                    }
                                }

                                /*else
                                 * {
                                 *  if (gasto.Gasto_Id <= 0 && gasto.Numero_Identificacion.Trim().Length > 0)
                                 *  {
                                 *      DiccionarioGastos diccionario = new DiccionarioGastos();
                                 *      DiccionarioGastos resultado = null;
                                 *      resultado = diccionario.Buscar(provedor.Provedor_Id, gasto.Numero_Identificacion);
                                 *      gasto.Gasto_Id = resultado.Gasto_Id;
                                 *  }
                                 *
                                 *  if (gasto.Gasto_Id <= 0 && gasto.Descripcion.Trim().Length > 0)
                                 *  {
                                 *      DiccionarioGastos diccionario = new DiccionarioGastos();
                                 *      DiccionarioGastos resultado = null;
                                 *      resultado = diccionario.Buscar(provedor.Provedor_Id, gasto.Descripcion);
                                 *      gasto.Gasto_Id = resultado.Gasto_Id;
                                 *  }
                                 * }*/
                            }
                            if (tipo != TIPO_FACTURA.GASTOS)
                            {
                                if (producto.Producto_Id < 1)
                                {
                                    if (producto.Numero_Identificacion.Trim().Length > 0)
                                    {
                                        Productos prod = new Productos();
                                        if (producto.Numero_Identificacion.Trim().Length > 12)
                                        {
                                            prod.Codigo_de_Barras = producto.Numero_Identificacion.Trim();
                                        }
                                        else
                                        {
                                            prod.Codigo_de_Barras = "";
                                            prod.Codigo_Producto  = producto.Numero_Identificacion.Trim();
                                        }

                                        if (prod.Cargar().Result)
                                        {
                                            producto.ClearProducto();
                                            producto.Producto_Id = prod.Producto_Id;
                                        }
                                    }
                                }
                            }
                            if (tipo == TIPO_FACTURA.SALIDA)
                            {
                                if (producto.Numero_Identificacion.Trim().Length > 0)
                                {
                                    Productos prod = new Productos();
                                    prod.Codigo_Producto = producto.Numero_Identificacion.Trim();
                                    if (prod.Cargar().Result)
                                    {
                                        producto.ClearProducto();
                                        producto.Producto_Id = prod.Producto_Id;
                                    }
                                }
                            }
                            if (tipo == TIPO_FACTURA.GASTOS)
                            {
                                /*CFDS.Gastos.Add(gasto);
                                 * gasto = null;*/
                            }
                            else
                            {
                                CFDS.Productos.Add(producto);
                                producto = null;
                            }
                        }
                    }

                    XElement adenda = doc.Element(cfdi + "Addenda");
                    if (adenda != null)
                    {
                        XNamespace ecfd = adenda.Name.Namespace;

                        XElement ECFD = adenda.Element(ecfd + "ECFD");
                        if (ECFD != null)
                        {
                            XElement documento = adenda.Element(ecfd + "Documento");
                            if (documento != null)
                            {
                                foreach (XElement detalle in documento.Elements(ecfd + "Detalle"))
                                {
                                    XElement elemento  = detalle.Element(ecfd + "NroLinDet");
                                    int      nroLinDet = nroLinDet = elemento != null?Convert.ToInt32(elemento.Value) : 0;

                                    if (nroLinDet > 0)
                                    {
                                        try
                                        {
                                            if (tipo == TIPO_FACTURA.GASTOS)
                                            {
                                                /*CFDS_Gasto gasto = CFDS.Gastos[nroLinDet - 1];
                                                 *
                                                 * if (gasto.Descuento_Porciento <= 0)
                                                 * {
                                                 *  elemento = detalle.Element("DescuentoPct");
                                                 *  gasto.Descuento_Porciento = (elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00;
                                                 * }
                                                 *
                                                 * if (gasto.Descuento_Monto <= 0)
                                                 * {
                                                 *  elemento = detalle.Element("DescuentoMonto");
                                                 *  gasto.Descuento_Monto = CFDS.TipoCambio * ((elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00);
                                                 *
                                                 *  if (gasto.Descuento_Monto <= 0 && gasto.Descuento_Porciento > 0)
                                                 *  {
                                                 *      gasto.Descuento_Monto = gasto.Importe * (gasto.Descuento_Porciento / (double)100);
                                                 *  }
                                                 *
                                                 * }
                                                 *
                                                 * XElement impuestoDet = detalle.Element("ImpuestosDet");
                                                 * if (impuestoDet != null)
                                                 * {
                                                 *  if (gasto.Impuesto_Tasa <= 0)
                                                 *  {
                                                 *      elemento = impuestoDet.Element("TasaImp");
                                                 *      gasto.Impuesto_Tasa = (elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00;
                                                 *  }
                                                 *
                                                 *  if (gasto.Impuesto_Monto <= 0)
                                                 *  {
                                                 *      elemento = impuestoDet.Element("MontoImp");
                                                 *      gasto.Impuesto_Monto = CFDS.TipoCambio * ((elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00);
                                                 *  }
                                                 * }*/
                                            }
                                            else
                                            {
                                                CFDS_Producto producto = CFDS.Productos[nroLinDet - 1];

                                                if (producto.Descuento_Porciento <= 0)
                                                {
                                                    elemento = detalle.Element("DescuentoPct");
                                                    producto.Descuento_Porciento = (elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00;
                                                }

                                                if (producto.Descuento_Monto <= 0)
                                                {
                                                    elemento = detalle.Element("DescuentoMonto");
                                                    producto.Descuento_Monto = CFDS.TipoCambio * ((elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00);

                                                    if (producto.Descuento_Monto <= 0 && producto.Descuento_Porciento > 0)
                                                    {
                                                        producto.Descuento_Monto = producto.Importe * (producto.Descuento_Porciento / (double)100);
                                                    }
                                                }

                                                XElement impuestoDet = detalle.Element("ImpuestosDet");
                                                if (impuestoDet != null)
                                                {
                                                    if (producto.Impuesto_Tasa <= 0)
                                                    {
                                                        elemento = impuestoDet.Element("TasaImp");
                                                        producto.Impuesto_Tasa = (elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00;
                                                    }

                                                    if (producto.Impuesto_Monto <= 0)
                                                    {
                                                        elemento = impuestoDet.Element("MontoImp");
                                                        producto.Impuesto_Monto = CFDS.TipoCambio * ((elemento != null) ? Convert.ToDouble(elemento.Value) : 0.00);
                                                    }
                                                }
                                            }
                                        }
                                        catch (Exception innerex)
                                        {
                                            Log.Logger.Error(innerex, innerex.Message);
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                string RutaArchivoOrigen = RutaArchivo.Replace("TMP.xml", ".xml");

                string FolioA, SerieA;
                FolioA = "";
                SerieA = "";

                if (CFDS.Folio_Fiscal != "")
                {
                    FolioA = CFDS.Folio_Fiscal;
                    SerieA = "";
                }
                else if (CFDS.Serie == "" && CFDS.Folio == "")
                {
                    CFDS.Folio = FolioA;
                }
                else
                {
                    FolioA = CFDS.Folio;
                    SerieA = CFDS.Serie;
                }

                CFDS.Tipo_Id = (int)tipo;
            }
            catch (Exception ex)
            {
                Log.Logger.Error(ex, ex.Message);
                CFDS = null;
            }

            return(CFDS);
        }