Esempio n. 1
0
        // GET: Reports
        /// <summary>
        /// Action <c>Index</c> can render a view with list of reports from database.
        /// </summary>
        /// <remarks>
        /// This action operates on <c>Report</c> class fields.
        /// <para>If user is assigned to role "Admin" he can see a complete list of reports from database.
        /// Otherwise, action will only show reports associated with that user.</para>
        /// <para>Reports are selected and sorted using LINQ operators.</para>
        /// </remarks>
        /// <param name="sortOrder">Contains sorting order string for view, e.g. sort by priority ascending.</param>
        /// <param name="etrnumberS">Search string for sorting by EtrNumber value.</param>
        /// <param name="etrnumberC">Current search value for EtrNumber, used to restore previous results for next sorting.</param>
        /// <param name="priorityS">Search string for sorting by Priority value.</param>
        /// <param name="priorityC">Current search value for Priority to restore previous results for next sorting.</param>
        /// <param name="rfaidS">Search string for sorting by RfaId value.</param>
        /// <param name="rfaidC">Current search value for RfaId to restore previous results for next sorting.</param>
        /// <param name="rfanameS">Search string for sorting by RfaName value.</param>
        /// <param name="rfanameC">Current search value for RfaName to restore previous results for next sorting.</param>
        /// <param name="gradeS">Search string for sorting by Grade value.</param>
        /// <param name="gradeC">Current search value for Grade to restore previous results for next sorting.</param>
        /// <param name="troubletypeS">Search string for sorting by TroubleType value.</param>
        /// <param name="troubletypeC">Current search value for TroubleType to restore previous results for next sorting.</param>
        /// <param name="dateissuedfromS">Search string for sorting by DateIssuedFrom value.</param>
        /// <param name="dateissuedtoS">Search string for sorting by DateIssuedTo value.</param>
        /// <param name="dateissuedfromC">Current search value for DateIssuedFrom to restore previous results for next sorting.</param>
        /// <param name="dateissuedtoC">Current search value for DateIssuedTo to restore previous results for next sorting.</param>
        /// <param name="datesentfromS">Search string for sorting by DateSentFrom value.</param>
        /// <param name="datesenttoS">Search string for sorting by DateSentTo value.</param>
        /// <param name="datesentfromC">Current search value for DateSentFrom to restore previous results for next sorting.</param>
        /// <param name="datesenttoC">Current search value for DateSentTo to restore previous results for next sorting.</param>
        /// <param name="etrstatusS">Search string for sorting by EtrStatus value.</param>
        /// <param name="etrstatusC">Current search value for EtrStatus to restore previous results for next sorting.</param>
        /// <param name="etrtypeS">Search string for sorting by EtrType value.</param>
        /// <param name="etrtypeC">Current search value for EtrType to restore previous results for next sorting.</param>
        /// <param name="nsncoordS">Search string for sorting by NsnCoordinator value.</param>
        /// <param name="nsncoordC">Current search value for NsnCoordinator to restore previous results for next sorting.</param>
        /// <param name="subconS">Search string for sorting by Subcontractor value.</param>
        /// <param name="subconC">Current search value for Subcontractor to restore previous results for next sorting.</param>
        /// <param name="zoneS">Search string for sorting by Zone value.</param>
        /// <param name="zoneC">Current search value for Zone to restore previous results for next sorting.</param>
        /// <returns>
        /// ViewResult - list of selected reports
        /// </returns>
        public async Task <IActionResult> Index(string sortOrder, string etrnumberS, string priorityS, string etrnumberC, string priorityC, string rfaidS, string rfaidC, string rfanameS, string rfanameC, string gradeS, string gradeC, string troubletypeS, string troubletypeC, string dateissuedfromS, string dateissuedtoS, string dateissuedfromC, string dateissuedtoC, string datesentfromS, string datesenttoS, string datesentfromC, string datesenttoC, string etrstatusS, string etrstatusC, string etrtypeS, string etrtypeC, string nsncoordS, string nsncoordC, string subconS, string subconC, string zoneS, string zoneC)
        {
            var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

            //lets us see only users of given roles in our dropdowns
            //this is for dropdowns in filter sidebar
            var requestors = await _userManager.GetUsersInRoleAsync("Requestor");

            var nsnCoordinators = await _userManager.GetUsersInRoleAsync("Nokia Coordinator");

            var subcontractors = await _userManager.GetUsersInRoleAsync("Subcontractor");

            var filters = await(from x in _context.ReportFilter
                                where x.UserId.Equals(userId)
                                select x).ToListAsync();

            ViewData["EtrStatusFilter"]      = new SelectList(_context.EtrStatus, "Status", "Status", null);
            ViewData["EtrTypeFilter"]        = new SelectList(_context.EtrType, "Type", "Type", null);
            ViewData["NsnCoordinatorFilter"] = new SelectList(nsnCoordinators, "UserName", "UserName", null);
            ViewData["SubcontractorFilter"]  = new SelectList(subcontractors, "UserName", "UserName", null);
            ViewData["ZoneFilter"]           = new SelectList(_context.Zone, "ZoneName", "ZoneName", null);
            ViewData["SavedFilters"]         = new SelectList(filters, "Id", "Name", null);
            //---
            ViewBag.EtrNumSortParm      = sortOrder == "etrnumber_desc" ? "etrnumber" : "etrnumber_desc";
            ViewBag.RfaIdSortParm       = sortOrder == "rfaid_desc" ? "rfaid" : "rfaid_desc";
            ViewBag.RfaNameSortParm     = sortOrder == "rfaname_desc" ? "rfaname" : "rfaname_desc";
            ViewBag.PrioritySortParm    = sortOrder == "priority_desc" ? "priority" : "priority_desc";
            ViewBag.GradeSortParm       = sortOrder == "grade_desc" ? "grade" : "grade_desc";
            ViewBag.TroubleTypeSortParm = sortOrder == "troubletype_desc" ? "troubletype" : "troubletype_desc";
            ViewBag.DateIssuedSortParm  = sortOrder == "dateissued_desc" ? "dateissued" : "dateissued_desc";
            ViewBag.DateSentSortParm    = sortOrder == "datesent_desc" ? "datesent" : "datesent_desc";
            ViewBag.EtrStatusSortParm   = sortOrder == "etrstatus_desc" ? "etrstatus" : "etrstatus_desc";
            ViewBag.EtrTypeSortParm     = sortOrder == "etrtype_desc" ? "etrtype" : "etrtype_desc";
            ViewBag.NsnCoordSortParm    = sortOrder == "nsncoord_desc" ? "nsncoord" : "nsncoord_desc";
            ViewBag.SubconSortParm      = sortOrder == "subcon_desc" ? "subcon" : "subcon_desc";
            ViewBag.ZoneSortParm        = sortOrder == "zone_desc" ? "zone" : "zone_desc";

            //restore current filters
            if (String.IsNullOrEmpty(etrnumberS))
            {
                etrnumberS = etrnumberC;
            }
            if (String.IsNullOrEmpty(rfaidS))
            {
                rfaidS = rfaidC;
            }
            if (String.IsNullOrEmpty(rfanameS))
            {
                rfanameS = rfanameC;
            }
            if (String.IsNullOrEmpty(priorityS))
            {
                priorityS = priorityC;
            }
            if (String.IsNullOrEmpty(gradeS))
            {
                gradeS = gradeC;
            }
            if (String.IsNullOrEmpty(troubletypeS))
            {
                troubletypeS = troubletypeC;
            }
            if (String.IsNullOrEmpty(dateissuedfromS))
            {
                dateissuedfromS = dateissuedfromC;
            }
            if (String.IsNullOrEmpty(dateissuedtoS))
            {
                dateissuedtoS = dateissuedtoC;
            }
            if (String.IsNullOrEmpty(datesentfromS))
            {
                datesentfromS = datesentfromC;
            }
            if (String.IsNullOrEmpty(datesenttoS))
            {
                datesenttoS = datesenttoC;
            }
            if (String.IsNullOrEmpty(etrstatusS))
            {
                etrstatusS = etrstatusC;
            }
            if (String.IsNullOrEmpty(etrtypeS))
            {
                etrtypeS = etrtypeC;
            }
            if (String.IsNullOrEmpty(nsncoordS))
            {
                nsncoordS = nsncoordC;
            }
            if (String.IsNullOrEmpty(subconS))
            {
                subconS = subconC;
            }
            if (String.IsNullOrEmpty(zoneS))
            {
                zoneS = zoneC;
            }

            //restore current filters
            ViewBag.etrnumberC      = etrnumberS;
            ViewBag.rfaidC          = rfaidS;
            ViewBag.rfanameC        = rfanameS;
            ViewBag.priorityC       = priorityS;
            ViewBag.gradeC          = gradeS;
            ViewBag.troubletypeC    = troubletypeS;
            ViewBag.dateissuedfromC = dateissuedfromS;
            ViewBag.dateissuedtoC   = dateissuedtoS;
            ViewBag.datesentfromC   = datesentfromS;
            ViewBag.datesenttoC     = datesenttoS;
            ViewBag.etrstatusC      = etrstatusS;
            ViewBag.etrtypeC        = etrtypeS;
            ViewBag.nsncoordC       = nsncoordS;
            ViewBag.subconC         = subconS;
            ViewBag.zoneC           = zoneS;

            IQueryable <Report> reports;

            if (User.IsInRole("Admin"))
            {
                reports = _reportRepository.GetAllReportsWithNavigationProperties();
            }
            else
            {
                //var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
                reports = _reportRepository.GetReportsWhereInvolved(userId);
            }

            reports = _reportRepository.GetFilteredReports(reports, etrnumberS, priorityS, rfaidS, rfanameS, gradeS, troubletypeS, dateissuedfromS, dateissuedtoS, datesentfromS, datesenttoS, etrstatusS, etrtypeS, nsncoordS, subconS, zoneS);

            //sorting order
            switch (sortOrder)
            {
            case "etrnumber":
                reports = reports.OrderBy(r => r.EtrNumber);
                break;

            case "etrnumber_desc":
                reports = reports.OrderByDescending(r => r.EtrNumber);
                break;

            case "rfaid":
                reports = reports.OrderBy(r => r.RfaId);
                break;

            case "rfaid_desc":
                reports = reports.OrderByDescending(r => r.RfaId);
                break;

            case "rfaname":
                reports = reports.OrderBy(r => r.RfaName);
                break;

            case "rfaname_desc":
                reports = reports.OrderByDescending(r => r.RfaName);
                break;

            case "priority":
                reports = reports.OrderBy(r => r.Priority);
                break;

            case "priority_desc":
                reports = reports.OrderByDescending(r => r.Priority);
                break;

            case "grade":
                reports = reports.OrderBy(r => r.Grade).Include(r => r.EtrStatus);
                break;

            case "grade_desc":
                reports = reports.OrderByDescending(r => r.Grade).Include(r => r.EtrStatus);
                break;

            case "troubletype":
                reports = reports.OrderBy(r => r.TroubleType).Include(r => r.EtrStatus);
                break;

            case "troubletype_desc":
                reports = reports.OrderByDescending(r => r.TroubleType).Include(r => r.EtrStatus);
                break;

            case "dateissued":
                reports = reports.OrderBy(r => r.DateIssued).Include(r => r.EtrStatus).Include(r => r.EtrType);
                break;

            case "dateissued_desc":
                reports = reports.OrderByDescending(r => r.DateIssued).Include(r => r.EtrStatus);
                break;

            case "datesent":
                reports = reports.OrderBy(r => r.DateSent);
                break;

            case "datesent_desc":
                reports = reports.OrderByDescending(r => r.DateSent);
                break;

            case "etrstatus":
                reports = reports.OrderBy(r => r.EtrStatus);
                break;

            case "etrstatus_desc":
                reports = reports.OrderByDescending(r => r.EtrStatus);
                break;

            case "etrtype":
                reports = reports.OrderBy(r => r.EtrType);
                break;

            case "etrtype_desc":
                reports = reports.OrderByDescending(r => r.EtrType);
                break;

            case "nsncoord":
                reports = reports.OrderBy(r => r.NsnCoordinator);
                break;

            case "nsncoord_desc":
                reports = reports.OrderByDescending(r => r.NsnCoordinator);
                break;

            case "subcon":
                reports = reports.OrderBy(r => r.Subcontractor);
                break;

            case "subcon_desc":
                reports = reports.OrderByDescending(r => r.Subcontractor);
                break;

            case "zone":
                reports = reports.OrderBy(r => r.Zone);
                break;

            case "zone_desc":
                reports = reports.OrderByDescending(r => r.Zone);
                break;
            }

            TempData["etrnumberS"]      = etrnumberS;
            TempData["rfaidS"]          = rfaidS;
            TempData["rfanameS"]        = rfanameS;
            TempData["priorityS"]       = priorityS;
            TempData["gradeS"]          = gradeS;
            TempData["troubletypeS"]    = troubletypeS;
            TempData["dateissuedfromS"] = dateissuedfromS;
            TempData["dateissuedtoS"]   = dateissuedtoS;
            TempData["datesentfromS"]   = datesentfromS;
            TempData["datesenttoS"]     = datesentfromS;
            TempData["etrstatusS"]      = etrstatusS;
            TempData["etrtypeS"]        = etrtypeS;
            TempData["nsncoordS"]       = nsncoordS;
            TempData["subconS"]         = subconS;
            TempData["zoneS"]           = zoneS;

            var reportsList = await reports.ToListAsync();

            /*var filters = await (from x in _context.ReportFilter
             *                         where x.User.Equals(User)
             *                         select x).ToListAsync();*/

            return(View(new ReportsAndFiltersViewModel(reportsList, null)));
        }