コード例 #1
0
        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);
            }
        }
コード例 #2
0
        /// <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"));
        }