Пример #1
0
        public void GuardarInformacion(RVCFDI33.GeneraCFDI objCfdi, Clientes Clientes, List <AdeudosInstalaciones> Adeudos, GetPAC_Result PAC, string Ruta, string NombreArchivo,
                                       int Folio, string Moneda, byte[] Logo, double Total, string FormaDePago, string MetodoPago, string CantidadPDF, string ConceptoPDF,
                                       string ValorUnitarioPDF, string ImportePDF, string UnidadPDF)
        {
            Usuarios usuario = db.Usuarios.Where(x => x.Usuario == User.Identity.Name).FirstOrDefault();

            System.IO.File.WriteAllText(Ruta + "\\" + NombreArchivo + ".xml", objCfdi.XmlTimbrado);
            byte[] XML = System.IO.File.ReadAllBytes(Ruta + "\\" + NombreArchivo + ".xml");
            foreach (var adeudo in Adeudos)
            {
                db.InsertCFDIPorOperacion(Guid.NewGuid(), null, adeudo.Id, Guid.Parse(objCfdi.UUID));
            }
            db.InsertCFDI(Guid.Parse(objCfdi.UUID), "Factura", Folio, XML, "~/Facturas/" + PAC.RFC + "/Facturas/" + NombreArchivo, Clientes.IdCliente, null, PAC.Id, false, DateTime.Now, usuario.Id);
            int TimbresUsados = 1;

            TimbresUsados = usuario.TimbresUsados + 1;
            db.UpdateUsuarios(usuario.Id, usuario.Usuario, usuario.Contraseña, usuario.TipoUsuario, usuario.Roles, usuario.Activo, usuario.Timbres, TimbresUsados, usuario.TimbresCancelados, usuario.PrimeraVez);
            string Domicilio = Clientes.Calle + " " + Clientes.NoExterior + " " + Clientes.Colonia + " C.P " + Clientes.CodigoPostal + " " + Clientes.Ciudad + "," + Clientes.Estado + " " + Clientes.Pais;
            double TotalImpuestosRetenidos = Total - (Total / 1.16);

            Tools.PDF.CrearFactura(Ruta + "\\", NombreArchivo, Moneda, Logo, objCfdi, PAC.RFC, PAC.Nombre, PAC.RegimenFiscal, Clientes.RFC, "22210"
                                   , Domicilio, FormaDePago, MetodoPago, Total.ToString("f2"), TotalImpuestosRetenidos.ToString("f2"), float.Parse((Total / 1.16) + "").ToString("f2"),
                                   CantidadPDF, ConceptoPDF, ValorUnitarioPDF, ImportePDF, UnidadPDF);
            if (Adeudos.FirstOrDefault().RequiereEnvio == true && !string.IsNullOrEmpty(Clientes.Email))
            {
                CFDI CFDI = db.GetCFDI(Guid.Parse(objCfdi.UUID), 1).First();
                Helpers.Correo.EnviarFactura(Clientes.Email, NombreArchivo, "http://facturacion.avenzo.mx/Facturas/Descargar", Server.MapPath("~/Tools/plantilla_facturas.html"), CFDI);
            }
        }
        public ActionResult ComprobarLlave(Guid Id)
        {
            Utils         util    = new Utils();
            GetPAC_Result pac     = db.GetPAC(Id, 1).FirstOrDefault();
            string        Cer     = Server.MapPath("~/Certificados/" + pac.RFC + "/" + pac.RFC + ".cer");
            string        Key     = Server.MapPath("~/Certificados/" + pac.RFC + "/" + pac.RFC + ".key");
            string        Dir     = Server.MapPath("~/Facturas/" + pac.RFC);
            string        Factura = Dir + "/Facturas/Prueba.xml";

            RVCFDI33.GeneraCFDI objCfdi = new RVCFDI33.GeneraCFDI();
            objCfdi.agregarCertificado(Cer);
            objCfdi.agregarComprobante33("A", "6172", System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"), "01", "", 1, 0, "MXN", "1", 1.16, "I", "PUE", "39300", "");
            objCfdi.agregarEmisor(pac.RFC, pac.Nombre, pac.RegimenFiscal.Trim());
            objCfdi.agregarReceptor("XAXX010101000", "Cliente general", "", "", "P01");
            objCfdi.agregarConcepto("01010101", "1", 1.00, "EA", "Pieza", "Producto Generica", 1.00, 1.00, 0.00);
            objCfdi.agregarImpuestoConceptoTraslado(1, "002", "Tasa", 0.160000, 0.16);
            objCfdi.agregarImpuestos(0, 0.16);
            objCfdi.agregarTraslado("002", "Tasa", 0.160000, 0.16);
            objCfdi.GeneraXML(Key, pac.ContrasenaLlave);
            if (objCfdi.MensajeError != "")
            {
                return(Json(new { error = "Error", Message = objCfdi.MensajeError }, JsonRequestBehavior.AllowGet));
            }
            string XML = objCfdi.Xml.Replace("Sello=\"\"", "Sello=\"" + objCfdi.SelloEmisor + "\"").Replace(",", ".");

            System.IO.File.WriteAllText(Factura, XML);
            objCfdi.TimbrarCfdiArchivo(Factura, pac.Usuario, pac.Contrasena, "http://generacfdi.com.mx/rvltimbrado/service1.asmx", Factura.Replace("Prueba.xml", ""), "Timbrado", true);
            if (objCfdi.MensajeError == "")
            {
                RVCFDI33.RVCancelacion.Cancelacion obj = new RVCFDI33.RVCancelacion.Cancelacion();
                string cadenaCancelacion = obj.crearXMLCancelacionCadena(Cer, Key, pac.ContrasenaLlave, objCfdi.UUID);
                if (obj.MensajeDeError == "")
                {
                    obj.enviarCancelacionCadena(cadenaCancelacion, pac.RFC, pac.Contrasena, "http://generacfdi.com.mx/rvltimbrado/service1.asmx", true);
                    if (obj.CodigoDeError == 0)
                    {
                        return(Json(new { error = "none", Message = "Se Timbro Correctamente" }, JsonRequestBehavior.AllowGet));
                    }
                    else
                    {
                        return(Json(new { error = "error", Message = obj.CodigoDeError }, JsonRequestBehavior.AllowGet));
                    }
                }
                else
                {
                    return(Json(new { error = "error", Message = obj.MensajeDeError }, JsonRequestBehavior.AllowGet));
                }
            }
            else
            {
                return(Json(new { error = "error", Message = objCfdi.MensajeError }, JsonRequestBehavior.AllowGet));
            }
        }
Пример #3
0
        public ActionResult Facturar(Guid IdFactura)
        {
            try
            {
                List <CFDIPorOperacion> CFDIs = db.CFDIPorOperacion.Where(x => x.IdAdeudosInstalaciones == IdFactura).ToList();
                bool isExist = false;
                foreach (var CFDI in CFDIs)
                {
                    if (db.CFDI.Where(x => x.Id == CFDI.IdCFDI).FirstOrDefault().Cancelado == false)
                    {
                        isExist = true;
                    }
                }
                if (!isExist)
                {
                    List <AdeudosInstalaciones> Adeudos = ListaAdeudos(IdFactura);
                    RVCFDI33.GeneraCFDI         objCfdi = new RVCFDI33.GeneraCFDI();
                    bool   pagado    = true;
                    double Total     = 0;
                    Guid   IdCliente = new Guid();
                    byte[] Logo;
                    string Moneda = "MXN", FormaDePago = "01", TipoCambio = "1", MetodoDePago = "PUE", UsoCFDI = "G03";
                    foreach (var adeudo in Adeudos)
                    {
                        if (adeudo.Pagado == false)
                        {
                            pagado = false;
                        }
                        List <MonitoreoIngresos> Operaciones = db.GetMonitoreoIngreso(0, null).Where(x => x.IdAdeudo == adeudo.Id).OrderBy(x => x.FechaCreacion).ToList();
                        foreach (var Operacion in Operaciones)
                        {
                            double total = (double)(Operacion.Cargos + (Operacion.CargosUSD * Operacion.TipoCambio));
                            Moneda = Operacion.Moneda.Trim();

                            var TC = Operacion.TipoCambio;
                            TipoCambio = TC.Value == 0 || TC == null ? "" : TC.Value.ToString("f2");
                        }
                        FormaDePago  = Operaciones.First().FormaDePago;
                        MetodoDePago = Operaciones.First().MetodoDePago;
                        UsoCFDI      = Operaciones.First().UsoCFDI;
                        Total        = Total + adeudo.Total;
                        IdCliente    = (Guid)adeudo.IdCliente;
                    }
                    if (pagado == true)
                    {
                        GetPAC_Result PAC       = db.GetPAC(Adeudos.First().IdProveedor, 1).First();
                        int           Folio     = 1;
                        var           TempFolio = db.CFDI.Where(x => x.IdProveedor == PAC.Id).Max(x => x.Folio);
                        if (TempFolio != null)
                        {
                            Folio = db.CFDI.Where(x => x.IdProveedor == PAC.Id).Max(x => x.Folio).Value + 1;
                        }
                        string Path        = Server.MapPath("~/"),
                               Certificado = Server.MapPath("~/Certificados/" + PAC.RFC + "/" + PAC.RFC + ".cer"),
                               Llave       = Server.MapPath("~/Certificados/" + PAC.RFC + "/" + PAC.RFC + ".key"),
                               Factura     = Path + "Facturas\\" + PAC.RFC + "\\Facturas";
                        Clientes Clientes  = db.Clientes.Where(x => x.IdCliente == IdCliente).First();
                        Logo = null;
                        if (Logo == null)
                        {
                            Logo = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Avenzo_Logo_Header.png"));
                        }
                        objCfdi.agregarCertificado(Certificado);
                        objCfdi.agregarComprobante33("B", Folio.ToString(), DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"), FormaDePago, "", Total / 1.16, 0, Moneda, TipoCambio == "1.00"?"1":TipoCambio, Total, "I", MetodoDePago, "22210", "");
                        objCfdi.agregarEmisor(PAC.RFC.Trim(), PAC.Nombre, PAC.RegimenFiscal.Trim());
                        objCfdi.agregarReceptor(Clientes.RFC, Clientes.Nombres + " " + Clientes.ApellidoPaterno + " " + Clientes.ApellidoMaterno.TrimEnd(), "", "", UsoCFDI);
                        string ConceptoPDF = "", CantidadPDF = "", ValorUnitarioPDF = "", ImportePDF = "", UnidadPDF = "";
                        foreach (var adeudo in Adeudos)
                        {
                            string ClaveProServ = adeudo.ClaveProdServ, NoIdentificacion = "1", ClaveUnidad = adeudo.Unidad, Concepto = adeudo.Concepto;
                            double Cantidad = (double)adeudo.Cantidad, ValorUnitario = (adeudo.Total / 1.16) / Cantidad, Importe = adeudo.Total / 1.16;
                            objCfdi.agregarConcepto(ClaveProServ, NoIdentificacion, Cantidad, ClaveUnidad, "Elemento", Concepto, ValorUnitario, Importe, 0.00);
                            ConceptoPDF      += Concepto + "\n";
                            CantidadPDF      += Cantidad.ToString("f2") + "\n";
                            ValorUnitarioPDF += (ValorUnitario).ToString("f2") + "\n";
                            ImportePDF       += Importe.ToString("f2") + "\n";
                            UnidadPDF        += ClaveUnidad + "\n";
                            objCfdi.agregarImpuestoConceptoTraslado(adeudo.Total / 1.16, "002", "Tasa", 0.160000, adeudo.Total - (adeudo.Total / 1.16));
                        }
                        objCfdi.agregarImpuestos(0, Total - (Total / 1.16));
                        objCfdi.agregarTraslado("002", "Tasa", 0.160000, Total - (Total / 1.16));
                        objCfdi.GeneraXML(Llave, PAC.ContrasenaLlave);
                        string Xml    = objCfdi.Xml.Replace("Sello=\"\"", "Sello=\"" + objCfdi.SelloEmisor + "\"");
                        string Nombre = PAC.RFC + "_" + Folio + "_" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year;
                        System.IO.File.WriteAllText(Factura + "\\" + Nombre + "_SinTimbrar.xml", Xml);
                        //XmlDocument myXmlDocument = new XmlDocument();
                        objCfdi.TimbrarCfdiArchivo(Factura + "\\" + Nombre + "_SinTimbrar.xml", PAC.Usuario, PAC.Contrasena, "http://generacfdi.com.mx/rvltimbrado/service1.asmx", Factura, Nombre, true);
                        if (objCfdi.MensajeError == "")
                        {
                            GuardarInformacion(objCfdi, Clientes, Adeudos, PAC, Factura, Nombre, Folio, Moneda,
                                               Logo, Total, FormaDePago, MetodoDePago, CantidadPDF, ConceptoPDF, ValorUnitarioPDF, ImportePDF, UnidadPDF);
                            return(Json(new { error = "none", IdFactura = objCfdi.UUID }, JsonRequestBehavior.AllowGet));
                        }
                        else
                        {
                            return(Json(new { error = "Error Al faturar", Message = objCfdi.MensajeError }, JsonRequestBehavior.AllowGet));
                        }
                    }
                    else
                    {
                        return(Json(new { error = "No estan Pagado Todos Los Conceptos" }, JsonRequestBehavior.AllowGet));
                    }
                }
                else
                {
                    return(Json(new { error = "" }, JsonRequestBehavior.AllowGet));
                }
            }
            catch (Exception Ex)
            {
                return(Json(new { error = Ex.InnerException, Message = Ex.Message }, JsonRequestBehavior.AllowGet));
            }
        }
Пример #4
0
        public ActionResult Complemento(string Folios, string Complemento, string FechaPago, string FormaPago)
        {
            try {
                RVCFDI33.GeneraCFDI objCfdi     = new RVCFDI33.GeneraCFDI();
                RVCFDI33.GeneraCFDI LeerObjCfdi = new RVCFDI33.GeneraCFDI();
                int           PrimerFolio       = int.Parse(Folios.Split(',')[0]);
                CFDI          Factura           = db.CFDI.Where(x => x.Folio == PrimerFolio).First();
                GetPAC_Result Proveedor         = db.GetPAC(Factura.IdProveedor, 1).First();
                Clientes      cliente           = db.Clientes.Where(x => x.IdCliente == Factura.IdCliente).First();
                Usuarios      usuario           = db.Usuarios.Where(x => x.Usuario == User.Identity.Name).FirstOrDefault();
                string        Certificado       = Server.MapPath("~/Certificados/" + Proveedor.RFC + "/" + Proveedor.RFC + ".cer");
                string        Llave             = Server.MapPath("~/Certificados/" + Proveedor.RFC + "/" + Proveedor.RFC + ".key");
                string        Domicilio         = cliente.Calle + " " + cliente.NoExterior + " " + cliente.Colonia + " C.P " + cliente.CodigoPostal + " " + cliente.Ciudad + "," + cliente.Estado + " " + cliente.Pais;
                System.IO.File.WriteAllBytes(Server.MapPath(Factura.Ruta) + ".xml", Factura.XML);
                objCfdi.agregarCertificado(Certificado);
                int    Folio      = 0;
                double total      = 0;
                string Moneda     = "";
                double TipoCambio = 1;

                objCfdi.agregarComprobante33("P", Folio.ToString(), System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"), "", "", 0, 0, "XXX", "", 0, "P", "", "22230", "");
                objCfdi.agregarEmisor(Proveedor.RFC, Proveedor.Nombre.Trim(), Proveedor.RegimenFiscal);
                objCfdi.agregarReceptor(cliente.RFC, cliente.Nombres + " " + cliente.ApellidoPaterno + " " + cliente.ApellidoMaterno, "", "", "P01");                //
                objCfdi.agregarConcepto("84111506", "", 1, "ACT", "", "Pago", 0, 0, 0);

                foreach (string folioStr in Folios.Split(','))
                {
                    Folio   = int.Parse(folioStr);
                    Factura = db.CFDI.Where(x => x.Folio == Folio).First();
                    string XMLTimbrado = System.IO.File.ReadAllText(Server.MapPath(Factura.Ruta) + ".xml");

                    Moneda = LeerObjCfdi.LeerValorXML(XMLTimbrado, "Moneda", "Comprobante");

                    if (LeerObjCfdi.LeerValorXML(XMLTimbrado, "TipoCambio", "Comprobante") != "")
                    {
                        double.TryParse(LeerObjCfdi.LeerValorXML(XMLTimbrado, "TipoCambio", "Comprobante"), out TipoCambio);
                    }
                    total = total + double.Parse(objCfdi.LeerValorXML(XMLTimbrado, "Total", "Comprobante"));
                    double totalIndividual = double.Parse(objCfdi.LeerValorXML(XMLTimbrado, "Total", "Comprobante"));
                    objCfdi.agregarPago10(FechaPago, FormaPago, Moneda, TipoCambio, totalIndividual, "01", "", "", "", "", "", "", "", "", "");
                    objCfdi.agregarPago10DoctoRelacionado(Factura.Id.ToString(), "B", folioStr, objCfdi.LeerValorXML(XMLTimbrado, "Moneda", "Comprobante"), 0, "PPD", 1, totalIndividual, totalIndividual, 0);
                }

                string path = Server.MapPath("~/Facturas/" + Proveedor.RFC + "/Complementos");
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                Folio = ((int)db.CFDI.Where(x => x.Tipo == Complemento).Max(x => x.Folio)) + 1;

                switch (Complemento)
                {
                case "Pago10":


                    //"2018-09-11T12:42:47"
                    break;
                }
                string NombreArchivo = Proveedor.RFC + "_" + Folio + "_" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year;

                objCfdi.GeneraXML(Llave, Proveedor.ContrasenaLlave);
                System.IO.File.WriteAllText(path + "//" + NombreArchivo + "_SinTimbrar.xml", objCfdi.Xml);
                objCfdi.TimbrarCfdiArchivo(path + "\\" + NombreArchivo + "_SinTimbrar.xml", Proveedor.Usuario, Proveedor.Contrasena, "http://generacfdi.com.mx/rvltimbrado/service1.asmx", path, NombreArchivo, true);
                if (objCfdi.MensajeError == "")
                {
                    byte[] Logo = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Avenzo_Logo_Header.png"));
                    System.IO.File.WriteAllText(path + "\\" + NombreArchivo + ".xml", objCfdi.XmlTimbrado);
                    db.InsertCFDI(Guid.Parse(objCfdi.UUID), "Pago10", Folio, System.IO.File.ReadAllBytes(path + "//" + NombreArchivo + ".xml"), "~/Facturas/" + Proveedor.RFC + "/Complementos/" + NombreArchivo + ".xml", cliente.IdCliente, null, Proveedor.Id, false, DateTime.Now, Guid.Parse("8BEAD89F-B0CA-4CA9-9268-4DE6C727E3A2"));

                    Tools.PDF.ComplementoPago10(path + "\\", NombreArchivo, "XXX", Logo, objCfdi, Proveedor.RFC, Proveedor.Nombre, Proveedor.RegimenFiscal, cliente.RFC, "22210"
                                                , Domicilio, FechaPago, FormaPago, Moneda, TipoCambio.ToString("f2"), total.ToString("f2"), "01", Factura.Id.ToString(), "B", Factura.Folio.ToString(), Moneda, "PPD", "1", total.ToString("f2"), total.ToString("f2"), "0");


                    return(Json(new { error = false }, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(Json(new { error = true, Message = objCfdi.MensajeError }, JsonRequestBehavior.AllowGet));
                }
            } catch (Exception ex) {
                return(Json(new { error = true, Message = ex.Message }, JsonRequestBehavior.AllowGet));
            }
        }