public ActionResult ReporteMensual(int?ciudadId, int?facilityId,
                                           int?planProgramaticoId, int?cuentaContableId, int?contraparteId, int?codigoAuditoriaId, int?accionNacionalId, int?territorioId,
                                           string descripcion, string notasAdicionales,
                                           bool tieneCobertura = false)
        {
            var listaPlanProgramatico = planProgramaticoManager.GetAllPlan();

            if (facilityId != null)
            {
                listaPlanProgramatico = planProgramaticoManager.GetPlanByFacility(facilityId.Value);
            }

            // Parámetros
            ViewBag.CiudadId   = new SelectList(ciudadesManager.GetAllCiudades(), "Id", "Nombre");
            ViewBag.FacilityId = ciudadId != null ?
                                 new SelectList(facilitiesManager.GetFacilitiesPorCiudad(ciudadId.Value), "Id", "NombreDespliegue") :
                                 new SelectList(facilitiesManager.GetAllFacilities(), "Id", "NombreDespliegue");

            ViewBag.PlanProgramaticoId = new SelectList(listaPlanProgramatico, "Id", "NombreLista", new object(), planProgramaticoManager.GetParentsPlanIds());
            ViewBag.CuentaContableId   = new SelectList(cuentasContablesManager.GetAllCuentasContables(), "Id", "NombreDespliegue");
            ViewBag.ContraparteId      = new SelectList(new ContrapartesManager().GetAllContrapartes(), "Id", "NombreDespliegue");
            ViewBag.CodigoAuditoriaId  = new SelectList(new CodigosAuditoriasManager().GetAllCodigosAuditoria(), "Id", "Descripcion");
            ViewBag.AccionNacionalId   = new SelectList(new AccionesNacionalesManager().GetAllAccionesNacionales(), "Id", "NombreDespliegue");
            ViewBag.TerritorioId       = new SelectList(new TerritoriosManager().GetAllTerritorios(), "Id", "NombreDespliegue");

            var presupuestoActual = presupuestosManager.GetPresupuestoActual();

            ViewBag.CiudadOrigenId = ciudadId;

            var reporte = reportesManager.GetReportePresupuestoMensual(presupuestoActual.Id, ciudadId, facilityId);

            //Filtros
            reporte = FiltrarReporteMensual(reporte, planProgramaticoId, cuentaContableId, contraparteId, codigoAuditoriaId, accionNacionalId, territorioId, descripcion, notasAdicionales);

            reporte = tieneCobertura ?
                      reporte.Where(r => r.Recurso.Cobertura.HasValue && r.Recurso.Cobertura.Value > 0).ToList() :
                      reporte.Where(r => !r.Recurso.Cobertura.HasValue || r.Recurso.Cobertura.Value == 0).ToList();

            ViewBag.TotalReporte          = reporte.Sum(r => r.Recurso.Monto);
            ViewBag.TotalReporteCobertura = reporte.Sum(r => r.Recurso.Cobertura);
            ViewBag.TieneCobertura        = tieneCobertura;
            return(View(reporte));
        }