Ejemplo n.º 1
0
        public ActionResult Editar(Guid id)
        {
            GetPAC_Result pacs = db.GetPAC(id, 1).First();

            ViewBag.RegimenFiscal = db.RegimenFiscal.ToList();
            return(PartialView("_EditarPAC", pacs));
        }
        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));
            }
        }
        public ActionResult Descargar(Guid id)
        {
            GetPAC_Result pac = db.GetPAC(id, 1).First();

            byte[]       Cer         = pac.Certificado;
            byte[]       Key         = pac.Llave;
            MemoryStream Certificado = new MemoryStream(Cer);
            MemoryStream Llave       = new MemoryStream(Key);

            using (ZipFile zip = new ZipFile())
            {
                MemoryStream memory = new MemoryStream();
                zip.AddEntry("certificado.cer", Certificado);
                zip.AddEntry("llave.key", Llave);
                zip.Save(memory);
                memory.Seek(0, SeekOrigin.Begin);
                return(File(memory, "application/zip", pac.RFC + ".zip"));
            }
        }
        public ActionResult Editar(GetPAC_Result pac)
        {
            GetPAC_Result old = db.GetPAC(pac.Id, 1).First();

            try {
                /* db.UpdatePAC(pac.Id, pac.RFC, old.Usuario, old.Contrasena, pac.ContrasenaLlave, pac.Nombre, pac.CURP,
                 *   pac.PersonaMoral, old.Llave, pac.RegimenFiscal, pac.RegistroPatronal, pac.RfcPatronOrigen,
                 *   old.Certificado,old.FechaVigenciaIncio,old.FechaVigenciaFinal,old.UsuarioCreacion,old.FechaCreacion,old.Logo);*/
                string PATH = Server.MapPath("~/Certificados/" + pac.RFC);
                if (!System.IO.Directory.Exists(PATH))
                {
                    System.IO.Directory.CreateDirectory(PATH);
                }
                System.IO.File.WriteAllBytes(PATH + "/" + pac.RFC + ".cer", old.Certificado);
                System.IO.File.WriteAllBytes(PATH + "/" + pac.RFC + ".key", old.Llave);
            } catch (Exception ex) {
                return(Json(new { error = ex.InnerException, Message = ex.Message }, JsonRequestBehavior.AllowGet));
            }
            return(Json(new { error = "none" }, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 5
0
 public ActionResult Cancelar(Guid Id)
 {
     try {
         CFDI          Factura = db.GetCFDI(Id, 1).FirstOrDefault();
         GetPAC_Result PAC     = db.GetPAC(null, 0).Where(x => x.Id == Factura.IdProveedor).First();
         RVCFDI33.RVCancelacion.Cancelacion Cancelar = new RVCFDI33.RVCancelacion.Cancelacion();
         string Certificado       = Server.MapPath("~/Certificados/" + PAC.RFC + "/" + PAC.RFC + ".cer"),
                Llave             = Server.MapPath("~/Certificados/" + PAC.RFC + "/" + PAC.RFC + ".key"),
                Cancelacion       = Server.MapPath("~/Facturas/" + PAC.RFC + "/Cancelaciones");
         string cadenaCancelacion = Cancelar.crearXMLCancelacionCadena(Certificado, Llave, PAC.ContrasenaLlave, Factura.Id.ToString());
         if (Cancelar.MensajeDeError == "")
         {
             //Cancelar.enviarCancelacionCadena(cadenaCancelacion, PAC.RFC, PAC.Contrasena, "http://generacfdi.com.mx/rvltimbrado/service1.asmx");
             if (Cancelar.CodigoDeError == 0)
             {
                 if (!System.IO.Directory.Exists(Cancelacion))
                 {
                     System.IO.Directory.CreateDirectory(Cancelacion);
                 }
                 System.IO.File.WriteAllText(Cancelacion + "\\Cancelacion_" + Factura.Folio + ".xml", cadenaCancelacion);
                 db.UpdateCFDI(Id, Factura.Tipo, Factura.Folio, Factura.XML, Factura.Ruta, Factura.IdCliente, Factura.IdEmpleado, Factura.IdProveedor, true);
                 return(Json(new { error = false }, JsonRequestBehavior.AllowGet));
             }
             else
             {
                 return(Json(new { error = "Error Al enviar la Cadena De Cancelacion", Message = Cancelar.MensajeDeError }, JsonRequestBehavior.AllowGet));
             }
         }
         else
         {
             return(Json(new { error = "Error Al hacer la Cadena De Cancelacion", Message = Cancelar.MensajeDeError }, JsonRequestBehavior.AllowGet));
         }
     }
     catch (Exception ex) {
         return(Json(new { error = "error", Message = ex.Message }, JsonRequestBehavior.AllowGet));
     }
 }
Ejemplo n.º 6
0
        public ActionResult Descarga(ReciboView recibo)
        {
            byte[] pdf;
            int    count = 0;

            try {
                string Nombre = recibo.nombreCompleto;
                byte[] Logo;
                string direccion = "";
                string RFC       = "";
                string Mes       = recibo.mes.FirstOrDefault();
                string server    = Server.MapPath("~/Content/Recibos");
                Dictionary <string, string> conceptos = new Dictionary <string, string>();
                Guid          id  = recibo.proveedor;
                GetPAC_Result pac = db.GetPAC(id, 1).First();
                if (recibo.mensualidad == "on")
                {
                    using (ZipFile zip = new ZipFile())
                    {
                        MemoryStream    memory   = new MemoryStream();
                        List <Clientes> clientes = db.GetClientes(null, true, 0).OrderBy(x => x.Colonia).ToList();
                        foreach (var cliente in clientes)
                        {
                            Nombre = cliente.Nombres + " " + cliente.ApellidoPaterno + " " + cliente.ApellidoMaterno;
                            string calle      = cliente.Calle == null || cliente.Calle == "" ? "" : cliente.Calle,
                                   noExterior = cliente.NoExterior == null || cliente.NoExterior == "" ? "" : cliente.NoExterior,
                                   NoInterior = cliente.NoInterior == null || cliente.NoInterior == "" ? "" : cliente.NoInterior,
                                   Colonia    = cliente.Colonia == null || cliente.Colonia == "" ? "" : cliente.Colonia;
                            direccion = Colonia + ", " + calle + " " + noExterior + " " + NoInterior + "\n" + cliente.Ciudad + "," + cliente.Estado;
                            RFC       = cliente.RFC == null || cliente.RFC == "" ? "" : cliente.RFC;
                            Logo      = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Avenzo_Logo_Header.png"));
                            string cantidad = "1";
                            string unidad   = "1";
                            System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("es-MX");
                            DateTime  time     = DateTime.Now.AddMonths(1);
                            string    concepto = "Mensualidad de " + time.ToString("MMMM", ci) + " " + time.ToString("yyyy", ci);
                            Catalogos catalogo = db.Catalogos.Where(x => x.IdCatalogo == cliente.TipoAfilacion).FirstOrDefault();
                            string    precio   = catalogo == null?"0.00":catalogo.Valor.Value.ToString("f2");
                            conceptos["cantidad"]      = float.Parse(cantidad).ToString("f2") + "\n";
                            conceptos["unidad"]        = unidad + "\n";
                            conceptos["descripcion"]   = concepto + "\n";
                            conceptos["valorUnitario"] = "$ " + (float.Parse(precio) / 1.16).ToString("f2") + "\n";
                            conceptos["importe"]       = "$ " + (float.Parse(precio) / 1.16).ToString("f2") + "\n";
                            float Total = float.Parse(precio);
                            pdf = PDF.CrearRecibo(Nombre, RFC, conceptos, direccion, server, Total, true, Logo, "MXN", Mes);
                            MemoryStream tempPDF = new MemoryStream(pdf);
                            zip.AddEntry(count + "_Recibo_" + Nombre.Replace(" ", "_") + ".pdf", tempPDF);
                            count++;
                        }
                        zip.Save(memory);
                        memory.Seek(0, SeekOrigin.Begin);
                        return(File(memory, "application/zip", "Recibos_" + ".zip"));
                    }
                }
                else
                {
                    Guid            IdCliente = recibo.id;
                    List <Clientes> Clientes  = db.GetClientes(IdCliente, true, 1).ToList();
                    if (Clientes.Count > 0)
                    {
                        string calle      = Clientes.First().Calle == null || Clientes.First().Calle == "" ? "" : Clientes.First().Calle,
                               noExterior = Clientes.First().NoExterior == null || Clientes.First().NoExterior == "" ? "" : Clientes.First().NoExterior,
                               NoInterior = Clientes.First().NoInterior == null || Clientes.First().NoInterior == "" ? "" : Clientes.First().NoInterior,
                               Colonia    = Clientes.First().Colonia == null || Clientes.First().Colonia == "" ? "" : Clientes.First().Colonia;
                        direccion = Colonia + "," + calle + " " + noExterior + " " + NoInterior + "\nTelefono: " + Clientes.First().Telefono;
                        RFC       = Clientes.First().RFC == null || Clientes.First().RFC == "" ? "" : Clientes.First().RFC;
                        if (User.IsInRole("Admin"))
                        {
                            Guid          Id  = recibo.proveedor;
                            GetPAC_Result PAC = db.GetPAC(Id, 1).First();
                            Logo = null;
                            if (Logo == null)
                            {
                                Logo = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Avenzo_Logo_Header.png"));
                            }
                        }
                        else
                        {
                            GetPAC_Result PAC = db.GetPAC(Clientes.First().IdProveedor, 1).First();
                            Logo = null;
                            if (Logo == null)
                            {
                                Logo = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Avenzo_Logo_Header.png"));
                            }
                        }
                    }
                    else
                    {
                        Logo = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Avenzo_Logo_Header.png"));
                    }
                    float Total = 0;
                    conceptos["cantidad"]      = "";
                    conceptos["unidad"]        = "";
                    conceptos["descripcion"]   = "";
                    conceptos["valorUnitario"] = "";
                    conceptos["importe"]       = "";
                    DateTime time = DateTime.Now;
                    foreach (var concepto in recibo.conceptos)
                    {
                        string cantidad    = concepto.cantidad.ToString("f2");
                        string unidad      = concepto.unidad;
                        string descripcion = concepto.descripcion;
                        string precio      = concepto.precio.ToString("f2");
                        conceptos["cantidad"]      = conceptos["cantidad"] + "" + float.Parse(cantidad).ToString("f2") + "\n";
                        conceptos["unidad"]        = conceptos["unidad"] + "" + unidad + "\n";
                        conceptos["descripcion"]   = conceptos["descripcion"] + descripcion + "\n";
                        conceptos["valorUnitario"] = conceptos["valorUnitario"] + "$ " + (float.Parse(precio) / 1.16).ToString("f2") + "\n";
                        conceptos["importe"]       = conceptos["importe"] + "$ " + (float.Parse(precio) / 1.16).ToString("f2") + "\n";
                        Total = Total + float.Parse(precio);
                    }
                    bool   leyenda = recibo.leyenda == "on" ? true : false;
                    string Moneda  = recibo.moneda.First();;
                    pdf = PDF.CrearRecibo(Nombre, RFC, conceptos, direccion, server, Total, leyenda, Logo, Moneda, "");
                    return(File(pdf, "application/pdf", "RECIBO.PDF"));
                }
            }
            catch (Exception ex) {
                return(Json(new { error = ex.InnerException + ", Count:" + count, Message = ex.Message }, JsonRequestBehavior.AllowGet));
            }
        }
Ejemplo n.º 7
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));
            }
        }
Ejemplo n.º 8
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);
            }
        }
Ejemplo n.º 9
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));
            }
        }
        public ActionResult UpdateFile(Guid Id)
        {
            try
            {
                byte[]        cer   = new byte[3072];
                byte[]        llave = new byte[3072];;
                byte[]        logo  = new byte[3072];
                GetPAC_Result pac   = db.GetPAC(Id, 1).First();
                foreach (string file in Request.Files)
                {
                    var fileContent = Request.Files[file];
                    if (fileContent != null && fileContent.ContentLength > 0)
                    {
                        var stream   = fileContent.InputStream;
                        var fileName = Path.GetFileName(fileContent.FileName);
                        if (file.Contains("llave"))
                        {
                            llave = new byte[fileContent.ContentLength];
                            llave = StreamHelper.ReadToEnd(fileContent.InputStream);
                            string Key = Server.MapPath("~/Certificados/" + pac.RFC + "/" + pac.RFC + ".key");
                            System.IO.File.WriteAllBytes(Key, llave);
                        }
                        if (file.Contains("certificado"))
                        {
                            cer = new byte[fileContent.ContentLength];
                            cer = StreamHelper.ReadToEnd(fileContent.InputStream);
                            string Cer = Server.MapPath("~/Certificados/" + pac.RFC + "/" + pac.RFC + ".cer");
                            System.IO.File.WriteAllBytes(Cer, cer);
                        }
                        if (file.Contains("logo"))
                        {
                            logo = new byte[fileContent.ContentLength];
                            logo = StreamHelper.ReadToEnd(fileContent.InputStream);
                        }
                    }
                }
                if (llave == null)
                {
                    llave = pac.Llave;
                }

                if (cer == null)
                {
                    cer = pac.Certificado;
                }

                if (logo == null)
                {
                    logo = null;
                }
                X509Certificate2 Certificado = new X509Certificate2(cer);

                /* db.UpdatePAC(Id,pac.RFC,pac.Usuario,pac.Contrasena,pac.ContrasenaLlave,pac.Nombre,pac.CURP,pac.PersonaMoral,llave,pac.RegimenFiscal,
                 *   pac.RegistroPatronal,pac.RfcPatronOrigen,cer,Certificado.NotBefore,Certificado.NotAfter,pac.UsuarioCreacion,pac.FechaCreacion,logo);*/
            }
            catch (Exception ex)
            {
                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return(Json(new { error = ex.InnerException, Message = ex.Message }, JsonRequestBehavior.AllowGet));
            }

            return(Json(new { error = "none" }, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 11
0
        public ActionResult Generar(Guid IdNominaHistorial)
        {
            NominaHistorial           nominaHistorial    = db.GetNominaHistorial(1, IdNominaHistorial).First();
            Empleados                 Empleado           = db.GetEmpleados(1, nominaHistorial.IdEmpleado).First();
            GetPAC_Result             PAC                = db.GetPAC(nominaHistorial.IdProveedor, 1).First();
            List <NominaDeduccion>    NominaDeducciones  = db.NominaDeduccion.Where(x => x.IdNominaHistorial == IdNominaHistorial).ToList();
            List <NominaPercepciones> NominaPercepciones = db.NominaPercepciones.Where(x => x.IdNominaHistorial == IdNominaHistorial).ToList();
            List <Model.CFDI>         CFDIs              = db.GetCFDI(null, 0).Where(x => x.IdProveedor == PAC.Id).ToList();

            int FolioFactura = 1;

            if (CFDIs.Count > 0)
            {
                FolioFactura = CFDIs.Max(x => x.Folio).Value + 1;
            }

            GeneraCFDI obj  = new GeneraCFDI();
            string     PATH = "~/Certificados/" + PAC.RFC;
            string     CER  = Server.MapPath(PATH + "/" + PAC.RFC + ".cer");
            string     KEY  = Server.MapPath(PATH + "/" + PAC.RFC + ".key");

            obj.agregarCertificado(CER);
            double SubTotal   = NominaPercepciones.Sum(x => x.ImporteGravado + x.ImporteExcento).Value;
            double Descuento  = NominaDeducciones.Sum(x => x.Importe);
            double OtrosPagos = 0;
            double TotalImpuestosRetenidos = NominaDeducciones.Where(x => x.Tipo.Contains("002")).Sum(x => x.Importe);
            double TotalOtrasDeducciones   = NominaDeducciones.Where(x => !x.Tipo.Contains("002")).Sum(x => x.Importe);

            obj.agregarComprobante33("A", "" + FolioFactura, System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"), "99", "", SubTotal, Descuento, "MXN", "", SubTotal - Descuento, "N", "PUE", "22210", "");
            obj.agregarEmisor(PAC.RFC, PAC.Nombre, PAC.RegimenFiscal);
            TimeSpan Time = (nominaHistorial.FechaFinalPago - Empleado.FechaInicioRelLaboral.Value);
            DateTime A    = new DateTime();

            A = A + Time;

            int    Semanas                = Time.Days / 7;
            string Antiguedad             = "P" + Semanas + "W";
            int    DiasDeVacaciones       = CalcularDiasDeVacaciones(A);
            string SalarioDiarioIntegrado = ((double)(((365 + 15 + (DiasDeVacaciones * 0.25)) / 365) * Empleado.SalarioDiario)).ToString("f2");

            obj.agregarReceptor(Empleado.RFC, Empleado.Nombre + " " + Empleado.ApellidoPaterno + " " + Empleado.ApellidoMaterno, "", "", "P01");
            obj.agregarConcepto("84111505", "", 1, "ACT", "", "Pago de nómina", NominaPercepciones.Sum(x => x.ImporteGravado).Value, NominaPercepciones.Sum(x => x.ImporteGravado).Value, NominaDeducciones.Sum(x => x.Importe));
            //Nomina
            obj.agregarNomina12("1.2", "O", nominaHistorial.FechaPago.ToString("yyyy-MM-dd"), nominaHistorial.FechaInicialPago.ToString("yyyy-MM-dd"),
                                nominaHistorial.FechaFinalPago.ToString("yyyy-MM-dd"), nominaHistorial.NumeroDiasPagados.ToString(), SubTotal.ToString("f2"), Descuento.ToString("f2"), "0");
            obj.agregarNominaEmisor12(PAC.CURP, PAC.RegistroPatronal, PAC.RfcPatronOrigen);
            obj.agregarNominaReceptor12(Empleado.CURP, Empleado.NumeroSeguridadSocial, Empleado.FechaInicioRelLaboral.Value.ToString("yyyy-MM-dd"), Antiguedad,
                                        Empleado.TipoContrato, "No", Empleado.TipoJornada, "02", Empleado.NoEmpleado.ToString(),
                                        Empleado.Departamento, Empleado.Puesto, Empleado.RiesgoPuesto, nominaHistorial.PeriodicidadPago, Empleado.Banco, Empleado.CuentaBancaria,
                                        "0", SalarioDiarioIntegrado, Empleado.ClaveEntFed);

            double TotalPercepciones = NominaPercepciones.Sum(x => x.ImporteGravado + x.ImporteExcento).Value, TotalPercepcionesTemp = 0;

            obj.agregarNominaPercepciones12(NominaPercepciones.Sum(x => x.ImporteGravado + x.ImporteExcento).Value.ToString("f2"), "0", "0", NominaPercepciones.Sum(x => x.ImporteGravado).Value.ToString("f2"), NominaPercepciones.Sum(x => x.ImporteExcento).Value.ToString("f2"));
            foreach (var item in NominaPercepciones)
            {
                obj.agregarNominaPercepcionesPercepcion12(item.Tipo, item.Clave, item.Concepto, item.ImporteGravado.Value.ToString("f2"), item.ImporteExcento.Value.ToString("f2"));
                TotalPercepcionesTemp += item.ImporteGravado.Value + item.ImporteExcento.Value;
            }

            obj.agregarNominaDeducciones12(TotalOtrasDeducciones.ToString("f2"), TotalImpuestosRetenidos.ToString("f2"));
            foreach (var item in NominaDeducciones)
            {
                obj.agregarNominaDeduccionesDeduccion12(item.Tipo, item.Clave, item.Concepto, item.Importe.ToString("f2"));
            }

            obj.GeneraXML(KEY, PAC.ContrasenaLlave);
            string XML  = obj.Xml.Replace("Sello=\"\"", "Sello=\"" + obj.SelloEmisor + "\"");
            //obj.UUID;
            //obj.Serie;
            string NombreArchivo = Empleado.RFC + "_" + FolioFactura + "_" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + "_SinTimbrar";
            string File = Server.MapPath("~/Facturas/" + PAC.RFC + "/Nominas/" + NombreArchivo + ".xml");

            Tools.NumLetra NL = new Tools.NumLetra();
            System.IO.File.WriteAllText(File, XML);
            byte[] CFDI;
            obj.TimbrarCfdiArchivo(File, PAC.Usuario, PAC.Contrasena, "http://generacfdi.com.mx/rvltimbrado/service1.asmx", File.Replace(NombreArchivo + ".xml", ""), NombreArchivo.Replace("_SinTimbrar", ""), true);
            if (obj.MensajeError == "")
            {
                System.IO.File.WriteAllText(File.Replace("_SinTimbrar", ""), obj.XmlTimbrado);
                CFDI = System.IO.File.ReadAllBytes(File.Replace("_SinTimbrar", ""));
                db.InsertCFDI(Guid.Parse(obj.UUID), "Nomina", FolioFactura, CFDI, "~\\Facturas\\" + PAC.RFC + "\\Nominas\\" + NombreArchivo.Replace("_SinTimbrar.xml", ""),
                              null, Empleado.Id, PAC.Id, false, DateTime.Now, User.Identity.Name);
                var base64 = "";
                if (PAC.Logo != null)
                {
                    base64 = Convert.ToBase64String(PAC.Logo);
                }
                else
                {
                    base64 = Convert.ToBase64String(System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Avenzo_Logo_Header.png")));
                }
                var imgSrc = String.Format("data:image/gif;base64,{0}", base64);
                db.InsertCFDIPorOperacion(Guid.NewGuid(), IdNominaHistorial, null, Guid.Parse(obj.UUID));
                CultureInfo CI = CultureInfo.CreateSpecificCulture("es-MX");
                PDF.CrearNomina(Server.MapPath("/"), NombreArchivo, nominaHistorial.LugarExpedicion, PAC.RFC, PAC.Nombre, "", "", obj.UUID,
                                obj.NoCertificadoPac, obj.Folio, obj.Serie, obj.FechaEmision, Empleado.Nombre + " " + Empleado.ApellidoPaterno + " " + Empleado.ApellidoMaterno,
                                Empleado.Departamento, Empleado.RFC, Empleado.Puesto, imgSrc, Empleado.CURP, Empleado.NumeroSeguridadSocial,
                                nominaHistorial.NumeroDiasPagados.ToString(), nominaHistorial.FechaPago.ToString("yyyy-MM-dd"), nominaHistorial.FechaInicialPago.ToString("yyyy-MM-dd"), nominaHistorial.FechaFinalPago.ToString("yyyy-MM-dd"), NL.Convertir((SubTotal - Descuento).ToString("f2"), true, "MXN"),
                                "NA", Empleado.CuentaBancaria, PAC.RegimenFiscal, TotalImpuestosRetenidos.ToString("C2", CI), (SubTotal - Descuento).ToString("C2", CI), obj.SelloEmisor,
                                obj.SelloSat, obj.CadenaOriginal, NominaPercepciones, NominaDeducciones);
                return(Json(new { error = "none", Id = obj.UUID }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json(new { error = "Error a Timbrar", Message = obj.MensajeError }, JsonRequestBehavior.AllowGet));
            }
        }