Example #1
0
        public ActionResult Post([FromForm] string rfc, [FromForm] IFormFile xml)
        {
            string message = "";

            XMLManager xmlManager = new XMLManager();
            CFDIModel  cfdi       = new CFDIModel();

            if (rfc != null && !String.IsNullOrEmpty(rfc))
            {
                if (xml.FileName != "")
                {
                    cfdi.RFC = rfc;
                    cfdi.XML = xml;

                    message = xmlManager.Validate(cfdi);
                }
                else
                {
                    message = "El XML es obligatorio";
                }
            }
            else
            {
                message = "El RFC es obligatorio";
            }

            return(Content(message));
        }
Example #2
0
        public string Validate(CFDIModel cfdi)
        {
            string validate = "";
            string version;

            XmlDocument document = new XmlDocument();

            XmlNamespaceManager xmlNamespace = new XmlNamespaceManager(document.NameTable);

            document.Load(cfdi.XML.OpenReadStream());

            // Rutas del SAT
            xmlNamespace.AddNamespace("cfdi", "http://www.sat.gob.mx/cfd/3");
            xmlNamespace.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital");

            version = document.SelectSingleNode("/cfdi:Comprobante/@Version", xmlNamespace).InnerText;

            if (version == "3.3")
            {
                string emisor = document.SelectSingleNode("/cfdi:Comprobante/cfdi:Emisor/@Rfc", xmlNamespace).InnerText;

                if (emisor == cfdi.RFC)
                {
                    decimal subtotal = Decimal.Parse(document.SelectSingleNode("/cfdi:Comprobante/@SubTotal", xmlNamespace).InnerText);

                    XmlNodeList conceptos = document.SelectNodes("/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto", xmlNamespace);

                    decimal sum = 0;
                    foreach (XmlNode concepto in conceptos)
                    {
                        sum += Decimal.Parse(concepto.Attributes.GetNamedItem("Importe").Value);
                    }

                    if (sum == subtotal)
                    {
                        validate = "CFDI Valido";
                    }
                    else
                    {
                        validate = "La suma del importe de los conceptos no coincide con el subtotal";
                    }
                }
                else
                {
                    validate = "El RFC del emisor en el CFDI no coincide con el parametro RFC";
                }
            }
            else
            {
                validate = "El CFDI no es version 3.3";
            }


            return(validate);
        }