private void GenerarCertificadosRenta(GenerarCertificadosViewModel listadoCert) { var year = DateTime.Now.AddYears(-1); foreach (CertificadoViewModel cert in listadoCert.listadoColaboradores) { string nombreApellidos = cert.nombreApellidos.Replace(' ', '_'); nombreApellidos = nombreApellidos.Replace(',', '_'); string fileName = "Certificado_" + nombreApellidos + ".pdf"; // Se establecen los parámetros del PDF var actionPDF = new Rotativa.ActionAsPdf("generateCertificadoPDF", cert) { FileName = fileName, PageSize = Rotativa.Options.Size.A4, PageOrientation = Rotativa.Options.Orientation.Portrait, PageMargins = { Left = 1, Top = 1, Right = 1, Bottom = 1 } }; // Se escribe en un array de bytes byte[] applicationPDFData = actionPDF.BuildPdf(ControllerContext); // Se guarda en disco /*string path = "~/App_Data/Certificados/" + year + "/" + fileName; * string path2 = Server.MapPath(path);*/ string path2 = "~/App_Data/Certiificados/"; savePDFOnDisk(applicationPDFData, path2, fileName); } }
/// <summary> /// Genera un certificado en formato PDF de cada uno de los colaboradores con donaciones en el año anterior /// </summary> /// <returns></returns> public ActionResult Certificados() { //Se declara el objeto para guardar los datos y pasárselos al writer en PDF var certificadosData = new GenerarCertificadosViewModel() { listadoColaboradores = new List <CertificadoViewModel>() }; var fechaActual = DateTime.Now; // Se detecta el año actual y se calcula el anterior var añoCertificados = fechaActual.Date.AddYears(-1); // Se recorre la lista de colaboradores, obteniendo sus donaciones y calculando el importe total var colaboradoresList = db.colaboradores.Include(x => x.donaciones).ToList(); foreach (colaboradores col in colaboradoresList) { // Se guarda la donación en un objeto var donacion = col.donaciones.FirstOrDefault(); try { var fechaAlta = donacion.fechaAlta; // Calcular el número de meses desde que es colaborador Double numMeses = ((fechaActual.Year - fechaAlta.Year) * 12) + fechaActual.Month - fechaAlta.Month; // Si el numMeses es mayor que 12, lo truncamos a 12 if (numMeses > 12) { numMeses = 12; } Double cantidadTotalDonada = 0.0; // Con el switch miramos la periodicidad y calculamos un valor para multiplicar por la cantidad y obtener la cantidad total switch (donacion.idPeriodicidad) { //Mensual: 12 x la cantidad case 1: cantidadTotalDonada = numMeses * donacion.cantidad; break; //Bimensual: numMeses / 2 * cantidad case 2: numMeses = numMeses / 2; cantidadTotalDonada = (Math.Truncate(numMeses / 2)) * donacion.cantidad; break; //Trimestral: numMeses / 3 * cantidad case 3: cantidadTotalDonada = (Math.Truncate(numMeses / 3)) * donacion.cantidad; break; //Semestral: numMeses / 6 * cantidad case 4: cantidadTotalDonada = (Math.Truncate(numMeses / 6)) * donacion.cantidad; break; //Anual: numMeses / 12 * cantidad case 5: cantidadTotalDonada = (Math.Truncate(numMeses / 12)) * donacion.cantidad; break; default: cantidadTotalDonada = 0.0; break; } // Genero el objeto para el certificado var certificadoModel = new CertificadoViewModel() { nombreApellidos = col.apellidos + ", " + col.nombre, CIF_NIF = col.CIF_NIF, cantidadTotal = Math.Round(cantidadTotalDonada, 2) }; // Se añade el objeto generado a la lista certificadosData.listadoColaboradores.Add(certificadoModel); }catch (Exception e) { Console.Write("Colaborador con donación nula: " + e.Message); continue; } } GenerarCertificadosRenta(certificadosData); return(RedirectToAction("Index")); }