示例#1
0
        public static bool DeleteUUID(string uuid)
        {
            PRNFACTEntities        contextoCfdi = new PRNFACTEntities();
            UAG_CFDI_HDR           hdr          = new UAG_CFDI_HDR();
            List <UAG_CFDI_LN>     ln           = new List <UAG_CFDI_LN>();
            List <UAG_CFDI_LN_IMP> ln_imp       = new List <UAG_CFDI_LN_IMP>();
            List <UAG_CFDI_IM_LOC> im_loc       = new List <UAG_CFDI_IM_LOC>();

            //UAG_PO_UUID ppo = new UAG_PO_UUID();

            hdr = contextoCfdi.UAG_CFDI_HDR
                  .Where(i => i.UAG_CFDI_UUID == uuid)
                  .FirstOrDefault();
            ln = contextoCfdi.UAG_CFDI_LN
                 .Where(i => i.UAG_CFDI_UUID == uuid)
                 .ToList();
            ln_imp = contextoCfdi.UAG_CFDI_LN_IMP
                     .Where(i => i.UAG_CFDI_UUID == uuid)
                     .ToList();
            im_loc = contextoCfdi.UAG_CFDI_IM_LOC
                     .Where(i => i.UAG_CFDI_UUID == uuid)
                     .ToList();

            /*ppo = contextoCfdi.UAG_PO_UUID
             *          .Where(i => i.UAG_CFDI_UUID == uuid
             *                  && i.STATUS_CONCIL == "0")
             *          .FirstOrDefault();*/

            if (hdr != null)
            {
                contextoCfdi.UAG_CFDI_HDR.Remove(hdr);
                contextoCfdi.SaveChanges();
            }

            if (ln != null && ln.Count > 0)
            {
                foreach (UAG_CFDI_LN lnT in ln)
                {
                    contextoCfdi.UAG_CFDI_LN.Remove(lnT);
                    contextoCfdi.SaveChanges();
                }
            }

            if (ln_imp != null && ln_imp.Count > 0)
            {
                foreach (UAG_CFDI_LN_IMP ln_impT in ln_imp)
                {
                    contextoCfdi.UAG_CFDI_LN_IMP.Remove(ln_impT);
                    contextoCfdi.SaveChanges();
                }
            }

            if (im_loc != null && im_loc.Count > 0)
            {
                foreach (UAG_CFDI_IM_LOC im_locT in im_loc)
                {
                    contextoCfdi.UAG_CFDI_IM_LOC.Remove(im_locT);
                    contextoCfdi.SaveChanges();
                }
            }

            /*
             * if (ppo != null)
             * {
             *  contextoCfdi.UAG_PO_UUID.Remove(ppo);
             *  contextoCfdi.SaveChanges();
             * }*/

            return(true);
        }
示例#2
0
        public SaveFromXML(byte[] fileBytes, string source)
        {
            contexto = new PRNFACTEntities();


            memoryStream = new MemoryStream(fileBytes);
            if (memoryStream.CanSeek)
            {
                try
                {
                    cfdi = new XmlDocument();

                    try
                    {
                        XmlTextReader reader = new XmlTextReader(memoryStream);
                        cfdi.Load(reader);
                    }
                    catch (Exception)
                    {
                        memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
                        encoding = "ISO-8859-1";
                        StreamReader streamReader = new StreamReader(memoryStream, System.Text.Encoding.GetEncoding(encoding));

                        try
                        {
                            cfdi.Load(streamReader);
                        }
                        catch (Exception exc)
                        {
                            throw new ArgumentException("Error Inesperado, Disculpe las molestias que esto le ocasione - ", exc.Message);
                        }
                    }

                    XmlNamespaceManager nsmgr = new XmlNamespaceManager(cfdi.NameTable);
                    nsmgr.AddNamespace("cfdi", "http://www.sat.gob.mx/cfd/3");
                    nsmgr.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital");

                    XmlNode xmlVoucher      = cfdi.SelectSingleNode("cfdi:Comprobante", nsmgr);
                    XmlNode xmlClient       = cfdi.SelectSingleNode("cfdi:Comprobante/cfdi:Receptor", nsmgr);
                    XmlNode xmlProvider     = cfdi.SelectSingleNode("cfdi:Comprobante/cfdi:Emisor", nsmgr);
                    XmlNode xmlTax          = cfdi.SelectSingleNode("cfdi:Comprobante/cfdi:Impuestos", nsmgr);
                    XmlNode xmlTimbreFiscal = cfdi.SelectSingleNode("cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital", nsmgr);
                    XmlNode xmlComplemento  = cfdi.SelectSingleNode("cfdi:Comprobante/cfdi:Complemento", nsmgr);
                    XmlNode xmlConceptos    = cfdi.SelectSingleNode("cfdi:Comprobante/cfdi:Conceptos", nsmgr);
                    //folioProv = contexto.UAG_CFDI_HDR.OrderByDescending(l => l.UAG_CFDI_FOLIOPROV).Select(l => l.UAG_CFDI_FOLIOPROV).FirstOrDefault() + 1;

                    //Cabecera XML
                    UAG_CFDI_HDR cabecera = new UAG_CFDI_HDR();
                    cabecera.SOURCE              = source;
                    cabecera.UAG_CFDI_UUID       = (xmlTimbreFiscal.Attributes["UUID"] == null) ? " " : xmlTimbreFiscal.Attributes["UUID"].Value.ToUpper();
                    cabecera.UAG_CFDI_FOLIO      = (xmlVoucher.Attributes["Folio"] == null) ? " " : xmlVoucher.Attributes["Folio"].Value;
                    cabecera.UAG_CFDI_FECHA      = (xmlVoucher.Attributes["Fecha"] == null) ? DateTime.Now : DateTime.Parse(xmlVoucher.Attributes["Fecha"].Value);
                    cabecera.UAG_CFDI_FORMAPAGO  = (xmlVoucher.Attributes["FormaPago"] == null) ? " " : xmlVoucher.Attributes["FormaPago"].Value.Trim();
                    cabecera.UAG_CFDI_METODOPAG  = (xmlVoucher.Attributes["MetodoPago"] == null) ? " " : xmlVoucher.Attributes["MetodoPago"].Value;
                    cabecera.UAG_CFDI_MONEDA     = (xmlVoucher.Attributes["Moneda"] == null) ? " " : xmlVoucher.Attributes["Moneda"].Value;
                    cabecera.UAG_CFDI_SERIE      = xmlVoucher.Attributes["Serie"] == null ? " " : xmlVoucher.Attributes["Serie"].Value;
                    cabecera.UAG_CFDI_SUBTOTAL   = (xmlVoucher.Attributes["SubTotal"] == null) ? 0 : decimal.Parse(xmlVoucher.Attributes["SubTotal"].Value, new CultureInfo("en-US"));
                    cabecera.UAG_CFDI_TIPOCOMPR  = (xmlVoucher.Attributes["TipoDeComprobante"] == null) ? " " : xmlVoucher.Attributes["TipoDeComprobante"].Value;
                    cabecera.UAG_CFDI_TOTAL      = (xmlVoucher.Attributes["Total"] == null) ? 0 : decimal.Parse(xmlVoucher.Attributes["Total"].Value, new CultureInfo("en-US"));
                    cabecera.UAG_CFDI_VERSION    = (xmlVoucher.Attributes["Version"] == null) ? " " : xmlVoucher.Attributes["Version"].Value;
                    cabecera.UAG_CFDI_EMISOR     = (xmlProvider.Attributes["Nombre"] == null) ? " " : xmlProvider.Attributes["Nombre"].Value;
                    cabecera.UAG_CFDI_EMISORRFC  = (xmlProvider.Attributes["Rfc"] == null) ? " " : xmlProvider.Attributes["Rfc"].Value;
                    cabecera.UAG_CFDI_EMISORREG  = (xmlProvider.Attributes["RegimenFiscal"] == null) ? " " : xmlProvider.Attributes["RegimenFiscal"].Value;
                    cabecera.UAG_CFDI_RECEPTOR   = (xmlClient.Attributes["Nombre"] == null) ? " " : xmlClient.Attributes["Nombre"].Value;
                    cabecera.UAG_CFDI_RECEPTRFC  = (xmlClient.Attributes["Rfc"] == null) ? " " : xmlClient.Attributes["Rfc"].Value;
                    cabecera.UAG_CFDI_USO        = (xmlClient.Attributes["UsoCFDI"] == null) ? " " : xmlClient.Attributes["UsoCFDI"].Value;
                    cabecera.UAG_CFDI_TIPOCAMBIO = (xmlVoucher.Attributes["TipoCambio"] != null) ?
                                                   decimal.Parse(xmlVoucher.Attributes["TipoCambio"].Value.Trim() == "" ? "1.0" : xmlVoucher.Attributes["TipoCambio"].Value, new CultureInfo("en-US"))
                        : decimal.Parse("1.0", new CultureInfo("en-US"));

                    if (xmlTax == null)
                    {
                        cabecera.UAG_CFDI_IVA = 0;
                    }
                    else
                    {
                        if (xmlTax.Attributes["TotalImpuestosTrasladados"] == null)
                        {
                            cabecera.UAG_CFDI_IVA = 0;
                        }
                        else
                        {
                            cabecera.UAG_CFDI_IVA = decimal.Parse(xmlTax.Attributes["TotalImpuestosTrasladados"].Value, new CultureInfo("en-US"));
                        }
                    }

                    if (xmlVoucher.Attributes["Folio"] == null && xmlVoucher.Attributes["Serie"] == null)
                    {
                        cabecera.UAG_CFDI_FOLIOPROV = cabecera.UAG_CFDI_UUID.Substring(6, 30);
                    }
                    else if (xmlVoucher.Attributes["Serie"] == null && xmlVoucher.Attributes["Folio"] != null)
                    {
                        cabecera.UAG_CFDI_FOLIOPROV = xmlVoucher.Attributes["Folio"].Value;
                    }
                    else if (xmlVoucher.Attributes["Serie"] != null && xmlVoucher.Attributes["Folio"] == null)
                    {
                        cabecera.UAG_CFDI_FOLIOPROV = cabecera.UAG_CFDI_UUID.Substring(6, 30);
                    }
                    else if (xmlVoucher.Attributes["Serie"] != null && xmlVoucher.Attributes["Folio"] != null)
                    {
                        cabecera.UAG_CFDI_FOLIOPROV = xmlVoucher.Attributes["Serie"].Value + xmlVoucher.Attributes["Folio"].Value;
                    }


                    cabecera.UAG_CFDI_DOC          = fileBytes;
                    cabecera.UAG_CFDI_TOTAL_LINEAS = (xmlConceptos.ChildNodes.Count > 0) ? (short)xmlConceptos.ChildNodes.Count : (short)0;
                    contexto.UAG_CFDI_HDR.Add(cabecera);
                    contexto.SaveChanges();

                    uuid  = xmlTimbreFiscal.Attributes["UUID"].Value.ToUpper();
                    total = (xmlVoucher.Attributes["Total"] == null) ? 0 : decimal.Parse(xmlVoucher.Attributes["Total"].Value, new CultureInfo("en-US"));

                    for (int x = 0; x < xmlComplemento.ChildNodes.Count; x++)
                    {
                        if (xmlComplemento.ChildNodes[x].Name == "implocal:ImpuestosLocales")
                        {
                            int     countImpLocal      = 1;
                            XmlNode impuestosLocales   = xmlComplemento.ChildNodes.Item(x);
                            XmlNode retencionesLocales = impuestosLocales.ChildNodes.Item(0);
                            XmlNode trasladosLocales   = impuestosLocales.ChildNodes.Item(1);

                            if (retencionesLocales != null)
                            {
                                UAG_CFDI_IM_LOC retencion = new UAG_CFDI_IM_LOC();
                                retencion.UAG_CFDI_UUID      = (xmlTimbreFiscal.Attributes["UUID"] == null) ? " " : xmlTimbreFiscal.Attributes["UUID"].Value.ToUpper();
                                retencion.UAG_CFDI_NUM_LINEA = countImpLocal;
                                retencion.UAG_CFDI_TIPOIMP   = "R";
                                retencion.UAG_CFDI_IMP_LOC   = (retencionesLocales.Attributes["ImpLocRetenido"] == null) ? " " : retencionesLocales.Attributes["ImpLocRetenido"].Value;
                                retencion.UAG_CFDI_TASACUOTA = (retencionesLocales.Attributes["TasadeRetencion"] == null) ? 0 : decimal.Parse(retencionesLocales.Attributes["TasadeRetencion"].Value, new CultureInfo("en-US"));
                                retencion.UAG_CFDI_IMPORTE   = (retencionesLocales.Attributes["Importe"] == null) ? 0 : decimal.Parse(retencionesLocales.Attributes["Importe"].Value, new CultureInfo("en-US"));
                                contexto.UAG_CFDI_IM_LOC.Add(retencion);
                                contexto.SaveChanges();
                                countImpLocal++;
                            }

                            if (trasladosLocales != null)
                            {
                                UAG_CFDI_IM_LOC traslado = new UAG_CFDI_IM_LOC();
                                traslado.UAG_CFDI_UUID      = (xmlTimbreFiscal.Attributes["UUID"] == null) ? " " : xmlTimbreFiscal.Attributes["UUID"].Value.ToUpper();
                                traslado.UAG_CFDI_NUM_LINEA = countImpLocal;
                                traslado.UAG_CFDI_TIPOIMP   = "T";
                                traslado.UAG_CFDI_IMP_LOC   = (trasladosLocales.Attributes["ImpLocTrasladado"] == null) ? " " : trasladosLocales.Attributes["ImpLocTrasladado"].Value;
                                traslado.UAG_CFDI_TASACUOTA = (trasladosLocales.Attributes["TasadeTraslado"] == null) ? 0 : decimal.Parse(trasladosLocales.Attributes["TasadeTraslado"].Value, new CultureInfo("en-US"));
                                traslado.UAG_CFDI_IMPORTE   = (trasladosLocales.Attributes["Importe"] == null) ? 0 : decimal.Parse(trasladosLocales.Attributes["Importe"].Value, new CultureInfo("en-US"));
                                contexto.UAG_CFDI_IM_LOC.Add(traslado);
                                contexto.SaveChanges();
                            }
                        }
                    }
                    int count = 1;
                    for (int x = 0; x < xmlConceptos.ChildNodes.Count; x++)
                    {
                        XmlNode concepto  = xmlConceptos.ChildNodes.Item(x);
                        XmlNode impuestos = concepto.ChildNodes.Item(0);

                        try
                        {
                            UAG_CFDI_LN linea = new UAG_CFDI_LN();
                            linea.UAG_CFDI_UUID      = (xmlTimbreFiscal.Attributes["UUID"] == null) ? " " : xmlTimbreFiscal.Attributes["UUID"].Value.ToUpper();
                            linea.UAG_CFDI_NUM_LINEA = count;
                            linea.UAG_CFDI_PRODSERV  = (concepto.Attributes["ClaveProdServ"] == null) ? " " : concepto.Attributes["ClaveProdServ"].Value;
                            linea.UAG_CFDI_CLVUNIDAD = (concepto.Attributes["ClaveUnidad"] == null) ? " " : concepto.Attributes["ClaveUnidad"].Value.Trim();
                            linea.UAG_CFDI_CANTIDAD  = (concepto.Attributes["Cantidad"] == null) ? 0 : decimal.Parse(concepto.Attributes["Cantidad"].Value, new CultureInfo("en-US"));

                            linea.UAG_CFDI_DESCR = (concepto.Attributes["Descripcion"] == null) ? " " :
                                                   concepto.Attributes["Descripcion"].Value.Length > 499 ?
                                                   concepto.Attributes["Descripcion"].Value.Substring(1, 499) :
                                                   concepto.Attributes["Descripcion"].Value;

                            linea.UAG_CFDI_VALORUNIT = (concepto.Attributes["ValorUnitario"] == null) ? 0 : decimal.Parse(concepto.Attributes["ValorUnitario"].Value, new CultureInfo("en-US"));
                            linea.UAG_CFDI_IMPORTE   = (concepto.Attributes["Importe"] == null) ? 0 : decimal.Parse(concepto.Attributes["Importe"].Value, new CultureInfo("en-US"));
                            linea.UAG_CFDI_DESCUENTO = (concepto.Attributes["Descuento"] != null) ? decimal.Parse(concepto.Attributes["Descuento"].Value, new CultureInfo("en-US")) : decimal.Parse("0.00", new CultureInfo("en-US"));
                            contexto.UAG_CFDI_LN.Add(linea);
                            contexto.SaveChanges();
                        }
                        catch (DbEntityValidationException e)
                        {
                            string messaex1 = string.Empty;
                            string messaex2 = string.Empty;
                            messaex1 = e.Message;
                            foreach (var eve in e.EntityValidationErrors)
                            {
                                messaex1 = "Entity of type \"{0}\" in state \"{1}\" has the following validation errors:" +
                                           eve.Entry.Entity.GetType().Name + eve.Entry.State;
                                foreach (var ve in eve.ValidationErrors)
                                {
                                    messaex2 = "- Property: \"{0}\", Error: \"{1}\"" + ve.PropertyName + ve.ErrorMessage;
                                }
                            }
                        }
                        if (impuestos != null)
                        {
                            int countImp = 1;
                            for (int y = 0; y < impuestos.ChildNodes.Count; y++)
                            {
                                if (impuestos.ChildNodes[y].Name == "cfdi:Traslados")
                                {
                                    XmlNode trasladosConceptoT = impuestos.ChildNodes.Item(y);
                                    for (int tras = 0; tras < trasladosConceptoT.ChildNodes.Count; tras++)
                                    {
                                        XmlNode trasladosConcepto = trasladosConceptoT.ChildNodes.Item(tras);

                                        UAG_CFDI_LN_IMP lineaImp = new UAG_CFDI_LN_IMP();
                                        lineaImp.UAG_CFDI_UUID      = (xmlTimbreFiscal.Attributes["UUID"] == null) ? " " : xmlTimbreFiscal.Attributes["UUID"].Value.ToUpper();
                                        lineaImp.UAG_CFDI_NUM_LINEA = count;
                                        lineaImp.UAG_CFDI_NUMLN_IMP = countImp;
                                        lineaImp.UAG_CFDI_TIPOIMP   = "T";
                                        lineaImp.UAG_CFDI_BASE      = (trasladosConcepto.Attributes["Base"] == null) ? 0 : decimal.Parse(trasladosConcepto.Attributes["Base"].Value, new CultureInfo("en-US"));
                                        lineaImp.UAG_CFDI_IMPUESTO  = (trasladosConcepto.Attributes["Impuesto"] == null) ? " " : trasladosConcepto.Attributes["Impuesto"].Value;
                                        lineaImp.UAG_CFDI_TIPOFACTO = (trasladosConcepto.Attributes["TipoFactor"] == null) ? " " : trasladosConcepto.Attributes["TipoFactor"].Value;
                                        lineaImp.UAG_CFDI_TASACUOTA = (trasladosConcepto.Attributes["TasaOCuota"] == null) ? 0 : decimal.Parse(trasladosConcepto.Attributes["TasaOCuota"].Value, new CultureInfo("en-US"));
                                        lineaImp.UAG_CFDI_IMPORTE   = (trasladosConcepto.Attributes["Importe"] == null) ? 0 : decimal.Parse(trasladosConcepto.Attributes["Importe"].Value, new CultureInfo("en-US"));
                                        contexto.UAG_CFDI_LN_IMP.Add(lineaImp);
                                        contexto.SaveChanges();

                                        countImp++;
                                    }
                                }

                                if (impuestos.ChildNodes[y].Name == "cfdi:Retenciones")
                                {
                                    XmlNode retencionesConceptoT = impuestos.ChildNodes.Item(y);
                                    for (int ret = 0; ret < retencionesConceptoT.ChildNodes.Count; ret++)
                                    {
                                        XmlNode         retencionesConcepto = retencionesConceptoT.ChildNodes.Item(ret);
                                        UAG_CFDI_LN_IMP lineaImp            = new UAG_CFDI_LN_IMP();
                                        lineaImp.UAG_CFDI_UUID      = (xmlTimbreFiscal.Attributes["UUID"] == null) ? " " : xmlTimbreFiscal.Attributes["UUID"].Value.ToUpper();
                                        lineaImp.UAG_CFDI_NUM_LINEA = count;
                                        lineaImp.UAG_CFDI_NUMLN_IMP = countImp;
                                        lineaImp.UAG_CFDI_TIPOIMP   = "R";
                                        lineaImp.UAG_CFDI_BASE      = (retencionesConcepto.Attributes["Base"] == null) ? 0 : decimal.Parse(retencionesConcepto.Attributes["Base"].Value, new CultureInfo("en-US"));
                                        lineaImp.UAG_CFDI_IMPUESTO  = (retencionesConcepto.Attributes["Impuesto"] == null) ? " " : retencionesConcepto.Attributes["Impuesto"].Value;
                                        lineaImp.UAG_CFDI_TIPOFACTO = (retencionesConcepto.Attributes["TipoFactor"] == null) ? " " : retencionesConcepto.Attributes["TipoFactor"].Value;
                                        lineaImp.UAG_CFDI_TASACUOTA = (retencionesConcepto.Attributes["TasaOCuota"] == null) ? 0 : decimal.Parse(retencionesConcepto.Attributes["TasaOCuota"].Value, new CultureInfo("en-US"));
                                        lineaImp.UAG_CFDI_IMPORTE   = (retencionesConcepto.Attributes["Importe"] == null) ? 0 : decimal.Parse(retencionesConcepto.Attributes["Importe"].Value, new CultureInfo("en-US"));
                                        contexto.UAG_CFDI_LN_IMP.Add(lineaImp);
                                        contexto.SaveChanges();
                                        countImp++;
                                    }
                                }
                            }
                        }


                        count++;
                    }
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                          eve.Entry.Entity.GetType().Name, eve.Entry.State);
                        foreach (var ve in eve.ValidationErrors)
                        {
                            Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                              ve.PropertyName, ve.ErrorMessage);
                        }
                    }
                    throw new ArgumentException("Error Inesperado, Ver consola - ", e.Message);
                }
                catch (Exception ex)
                {
                    throw new ArgumentException("Error Inesperado, Disculpe las molestias que esto le ocasione - ", ex.Message);
                }
            }
        }