// GET: Administrator
        public ActionResult Index(myFilteredIncidentRequestViewModel model)
        {
            if (model == null)
            {
                model = new myFilteredIncidentRequestViewModel();
            }
            List <Request> requestsList = db.Requests.ToList();
            string         company      = Request.Cookies["companyCookie"].Value;
            List <User>    companyUsers = db.Users.Where(m => m.company == company).ToList();

            requestsList = db.Requests.Where(m => db.Users.Any(l => m.createdBy == l.userId && l.company == company)).ToList();



            //List<myIncidentRequestViewModel> myIncidentRequestViewModel = new List<myIncidentRequestViewModel>();
            try
            {
            }
            catch
            {
                return(View());
            }
            string statusString;

            if (model.orderVal == "1")
            {
                requestsList.Reverse();
            }
            foreach (var req in requestsList)
            {
                List <RequestHistory> s = new List <RequestHistory>();
                s = db.RequestHistories.Where(m => m.requestId == req.requestId).ToList();
                //var lasts = s.Last().status;
                statusString = s.Last().status;
                //switch (s.Last().status)
                //{
                //    case 1:
                //        statusString=
                //};
                //de refacut intr o zi


                if (model.fm.isCheckedType[0] == false && req.type == false)
                {
                    continue;
                }
                if (model.fm.isCheckedType[1] == false && req.type == true)
                {
                    continue;
                }
                if (model.fm.isCheckedStatus[0] == false && statusString == "Pending")
                {
                    continue;
                }
                if (model.fm.isCheckedStatus[1] == false && statusString == "In Progress")
                {
                    continue;
                }
                if (model.fm.isCheckedStatus[2] == false && statusString == "Waiting for approval")
                {
                    continue;
                }
                if (model.fm.isCheckedStatus[3] == false && statusString == "Done")
                {
                    continue;
                }
                if (model.fm.isCheckedCategory[0] == false && req.departmentAssigned == "Hardware")
                {
                    continue;
                }
                if (model.fm.isCheckedCategory[1] == false && req.departmentAssigned == "Software")
                {
                    continue;
                }
                if (model.fm.isCheckedCategory[2] == false && req.departmentAssigned == "Finances")
                {
                    continue;
                }


                model.myIncidents.Add(new myIncidentRequestViewModel
                {
                    Id = req.requestId,
                    IncidentRequest    = req.type == false ? "Incident" : "Request",
                    Title              = req.title,
                    CreatedBy          = db.Users.Where(m => m.userId == req.createdBy).FirstOrDefault().username,
                    DepartmentAssigned = req.departmentAssigned,
                    Priority           = req.priority == 0 ? "Low" : req.priority == 1 ? "Medium" : "High",
                    Status             = statusString
                });
            }
            int count;

            count = model.myIncidents.Count(x => x.IncidentRequest == "Incident");
            model.incidentrequestCount.Add("Incident", count);
            count = model.myIncidents.Count(x => x.IncidentRequest == "Request");
            model.incidentrequestCount.Add("Request", count);

            count = model.myIncidents.Count(x => x.Status == "Pending");
            model.statusCount.Add("Pending", count);
            count = model.myIncidents.Count(x => x.Status == "In Progress");
            model.statusCount.Add("In Progress", count);
            count = model.myIncidents.Count(x => x.Status == "Waiting for approval");
            model.statusCount.Add("Waiting for approval", count);
            count = model.myIncidents.Count(x => x.Status == "Done");
            model.statusCount.Add("Done", count);

            count = model.myIncidents.Count(x => x.DepartmentAssigned == "Hardware");
            model.depassignedCount.Add("Hardware", count);
            count = model.myIncidents.Count(x => x.DepartmentAssigned == "Software");
            model.depassignedCount.Add("Software", count);
            count = model.myIncidents.Count(x => x.DepartmentAssigned == "Finances");
            model.depassignedCount.Add("Finances", count);
            // var users=db.Requests.Where(m=>m.createdBy==companyUsers)
            //var requests = db.Requests.Where()
            // return View(await requests.ToListAsync());
            return(View(model));
        }
        public ActionResult DownloadRaport(myFilteredIncidentRequestViewModel model)
        {
            List <Request> requestsList = db.Requests.ToList();
            string         company      = Request.Cookies["companyCookie"].Value;
            List <User>    companyUsers = db.Users.Where(m => m.company == company).ToList();

            requestsList       = db.Requests.Where(m => db.Users.Any(l => m.createdBy == l.userId && l.company == company)).ToList();
            int[,] statusArray = new int[8, 3];
            try
            {
            }
            catch
            {
                return(View());
            }
            string statusString;

            if (model.orderVal == "1")
            {
                requestsList.Reverse();
            }
            foreach (var req in requestsList)
            {
                List <RequestHistory> s = new List <RequestHistory>();
                s            = db.RequestHistories.Where(m => m.requestId == req.requestId).ToList();
                statusString = s.Last().status;

                bool type = db.Requests.Where(m => m.requestId == req.requestId).FirstOrDefault().type;
                if (type == false)
                {
                    if (statusString == "Pending")
                    {
                        if (req.departmentAssigned == "Hardware")
                        {
                            statusArray[0, 0]++;
                        }
                        else if (req.departmentAssigned == "Software")
                        {
                            statusArray[0, 1]++;
                        }
                        else if (req.departmentAssigned == "Finances")
                        {
                            statusArray[0, 2]++;
                        }
                    }
                    if (statusString == "In Progress")
                    {
                        if (req.departmentAssigned == "Hardware")
                        {
                            statusArray[1, 0]++;
                        }
                        else if (req.departmentAssigned == "Software")
                        {
                            statusArray[1, 1]++;
                        }
                        else if (req.departmentAssigned == "Finances")
                        {
                            statusArray[1, 2]++;
                        }
                    }
                    if (statusString == "Waiting for approval")
                    {
                        if (req.departmentAssigned == "Hardware")
                        {
                            statusArray[2, 0]++;
                        }
                        else if (req.departmentAssigned == "Software")
                        {
                            statusArray[2, 1]++;
                        }
                        else if (req.departmentAssigned == "Finances")
                        {
                            statusArray[2, 2]++;
                        }
                    }
                    if (statusString == "Done")
                    {
                        if (req.departmentAssigned == "Hardware")
                        {
                            statusArray[3, 0]++;
                        }
                        else if (req.departmentAssigned == "Software")
                        {
                            statusArray[3, 1]++;
                        }
                        else if (req.departmentAssigned == "Finances")
                        {
                            statusArray[3, 2]++;
                        }
                    }
                }
                else
                {
                    if (statusString == "Pending")
                    {
                        if (req.departmentAssigned == "Hardware")
                        {
                            statusArray[4, 0]++;
                        }
                        else if (req.departmentAssigned == "Software")
                        {
                            statusArray[4, 1]++;
                        }
                        else if (req.departmentAssigned == "Finances")
                        {
                            statusArray[4, 2]++;
                        }
                    }
                    if (statusString == "In Progress")
                    {
                        if (req.departmentAssigned == "Hardware")
                        {
                            statusArray[5, 0]++;
                        }
                        else if (req.departmentAssigned == "Software")
                        {
                            statusArray[5, 1]++;
                        }
                        else if (req.departmentAssigned == "Finances")
                        {
                            statusArray[5, 2]++;
                        }
                    }
                    if (statusString == "Waiting for approval")
                    {
                        if (req.departmentAssigned == "Hardware")
                        {
                            statusArray[6, 0]++;
                        }
                        else if (req.departmentAssigned == "Software")
                        {
                            statusArray[6, 1]++;
                        }
                        else if (req.departmentAssigned == "Finances")
                        {
                            statusArray[6, 2]++;
                        }
                    }
                    if (statusString == "Done")
                    {
                        if (req.departmentAssigned == "Hardware")
                        {
                            statusArray[7, 0]++;
                        }
                        else if (req.departmentAssigned == "Software")
                        {
                            statusArray[7, 1]++;
                        }
                        else if (req.departmentAssigned == "Finances")
                        {
                            statusArray[7, 2]++;
                        }
                    }
                }


                if (!model.fm.isCheckedType[0] && !req.type)
                {
                    continue;
                }
                if (!model.fm.isCheckedType[1] && req.type)
                {
                    continue;
                }
                if (!model.fm.isCheckedStatus[0] && statusString == "Pending")
                {
                    continue;
                }
                if (model.fm.isCheckedStatus[1] == false && statusString == "In Progress")
                {
                    continue;
                }
                if (model.fm.isCheckedStatus[2] == false && statusString == "Waiting for approval")
                {
                    continue;
                }
                if (model.fm.isCheckedStatus[3] == false && statusString == "Done")
                {
                    continue;
                }
                if (model.fm.isCheckedCategory[0] == false && req.departmentAssigned == "Hardware")
                {
                    continue;
                }
                if (model.fm.isCheckedCategory[1] == false && req.departmentAssigned == "Software")
                {
                    continue;
                }
                if (model.fm.isCheckedCategory[2] == false && req.departmentAssigned == "Finances")
                {
                    continue;
                }


                model.myIncidents.Add(new myIncidentRequestViewModel
                {
                    Id = req.requestId,
                    IncidentRequest    = !req.type ? "Incident" : "Request",
                    Title              = req.title,
                    CreatedBy          = db.Users.Where(m => m.userId == req.createdBy).FirstOrDefault().username,
                    DepartmentAssigned = req.departmentAssigned,
                    Priority           = req.priority == 0 ? "Low" : req.priority == 1 ? "Medium" : "High",
                    Status             = statusString
                });
            }



            int count = model.myIncidents.Count(x => x.IncidentRequest == "Incident");

            model.incidentrequestCount.Add("Incident", count);
            count = model.myIncidents.Count(x => x.IncidentRequest == "Request");
            model.incidentrequestCount.Add("Request", count);


            var products = new System.Data.DataTable("Raport");

            products.Columns.Add("/", typeof(string));
            products.Columns.Add("Incident", typeof(string));
            products.Columns.Add("Request", typeof(string));// typeof(string));
            products.Columns.Add("|", typeof(string));
            products.Columns.Add("Hardware", typeof(string));
            products.Columns.Add("Software", typeof(string));
            products.Columns.Add("Finances", typeof(string));
            products.Rows.Add("Pending", statusArray[0, 0] + statusArray[0, 1] + statusArray[0, 2], statusArray[4, 0] + statusArray[4, 1] + statusArray[4, 2], "|", statusArray[0, 0] + statusArray[4, 0], statusArray[0, 1] + statusArray[4, 1], statusArray[0, 2] + statusArray[4, 2]);
            products.Rows.Add("In Progress", statusArray[1, 0] + statusArray[1, 1] + statusArray[1, 2], statusArray[5, 0] + statusArray[5, 1] + statusArray[5, 2], "|", statusArray[1, 0] + statusArray[5, 0], statusArray[1, 1] + statusArray[5, 1], statusArray[1, 2] + statusArray[5, 2]);
            products.Rows.Add("Waiting for approval", statusArray[2, 0] + statusArray[2, 1] + statusArray[2, 2], statusArray[6, 0] + statusArray[6, 1] + statusArray[6, 2], "|", statusArray[2, 0] + statusArray[6, 0], statusArray[2, 1] + statusArray[6, 1], statusArray[2, 2] + statusArray[6, 2]);
            products.Rows.Add("Done", statusArray[3, 0] + statusArray[3, 1] + statusArray[3, 2], statusArray[7, 0] + statusArray[7, 1] + statusArray[7, 2], "|", statusArray[3, 0] + statusArray[7, 0], statusArray[3, 1] + statusArray[7, 1], statusArray[3, 2] + statusArray[7, 2]);
            products.Rows.Add("Total", model.incidentrequestCount["Incident"], model.incidentrequestCount["Request"], "|");
            //products.Rows.Add(model.incidentrequestCount["Incident"].ToString());
            //products.Rows.Add(model.incidentrequestCount["Request"].ToString());



            var grid = new GridView();

            grid.DataSource = products;
            grid.DataBind();

            var date = DateTime.Now;

            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment; filename=raport" + date.ToString() + ".xls");
            Response.ContentType = "application/ms-excel";

            Response.Charset = "";
            StringWriter   sw  = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);

            grid.RenderControl(htw);

            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();

            return(RedirectToAction("Raport", model));
        }