public static string GetWorkorderEmailRow(WorkOrdersGridViewModel workorder)
 {
     return(@"<tr style=""text-align:left"">
                 <td style=""border-right: 1px;""> " + workorder.DepartmentName + "&nbsp" + @" </td>
                 <td style=""border-right: 1px;""> " + workorder.Reported.ToShortDateString() + "&nbsp" + @"  </td>
                 <td style=""border-right: 1px;""> " + workorder.Details + "&nbsp" + @"  </td>
                 <td style=""border-right: 1px;""> " + workorder.Priority + "&nbsp" + @"  </td>
                  <td style=""border-right: 1px;""> " + workorder.Due.ToShortDateString() + "&nbsp" + @"  </td>
                 <td style=""border-right: 1px;""> " + workorder.DaysOverdue + "&nbsp" + @"  </td>
                 <td> " + workorder.DaysOpen + "&nbsp" + @" </td>
         </tr >");
 }
        public ActionResult Mobile()
        {
            WorkOrdersGridViewModel model = new WorkOrdersGridViewModel();

            //fill dropdowns data. required for mobile view
            model.Departments = GetMobileFilterDepartmentsSelectList();
            model.Areas       = GetMobileFilterAreasSelectList();
            model.Closers     = GetMobileFilterClosersSelectList();
            model.Priorities  = GetPrioritiesSelectList(null);

            return(View(model));
        }
        // GET: AccessDenied
        public ActionResult Index()
        {
            //read selected company from cookie
            var selectedCompany = CompanyCookie.SelectedCompany;

            var model = new WorkOrdersGridViewModel
            {
                Companies       = UserFunctions.GetCompaniesSelectList(selectedCompany),
                SelectedCompany = selectedCompany
            };

            return(View(model));
        }
        public ActionResult SelectCompany(WorkOrdersGridViewModel model)
        {
            if (model != null && ModelState.IsValid)
            {
                CompanyCookie.SelectedCompany = model.SelectedCompany;
            }

            if (Request.UrlReferrer != null)
            {
                return(Redirect(Request.UrlReferrer.ToString()));
            }
            else
            {
                return(RedirectToAction("Index"));
            }
        }
        //public JsonResult GetMobileGridData([DataSourceRequest]DataSourceRequest request, string workOrderType, string workOrderDueType)
        //{
        //    // JavaScriptSerializer class used by the Json method cannot serialize object graphs which contain circular references (refer to each other).
        //    //The best solution is to use View Model objects and avoid the serializing the properties which create the circular reference.
        //    var model = _db.Workorders.ToList()
        //                            .OrderBy(w => w.Department.AreaName)
        //                            .ThenBy(w => w.Department.Name)
        //                            .Select(m => new WorkOrdersGridViewModel
        //                            {
        //                                DepartmentAreaName = m.Department.AreaName,
        //                                DepartmentName = m.Department.Name,
        //                                Reported = m.Reported,
        //                                Details = m.Details,
        //                                Priority = m.Priority,
        //                                ConsumerName = m.Consumer != null ? m.Consumer.Name : string.Empty,
        //                                Closed = m.Closed,
        //                                Closer = m.Closer,
        //                                Id = m.Id,
        //                                Resolution = m.Resolution,
        //                                Estimate = m.Estimate,
        //                                //Approved = m.Approved ?? false
        //                                Approved=m.Approved
        //                            });

        //    //filter by workorder type
        //    if (workOrderType != null)
        //    {
        //        if (workOrderType.Equals("Closed"))
        //        {
        //            model = model.Where(x => x.Closed != null);
        //        }
        //        else if (workOrderType.Equals("Open"))
        //        {
        //            //model = model.Where(x => x.Closed == null && x.Approved == true);
        //            model = model.Where(x => x.Closed == null && x.Approved != null);
        //        }
        //        else if (workOrderType.Equals("Awaiting Approval"))
        //        {
        //            //model = model.Where(x => x.Closed == null && x.Approved == false);
        //            model = model.Where(x => x.Closed == null && x.Approved == null && x.Rejected == null);
        //        }
        //    }

        //    //filter by due (due or overdue)
        //    if (workOrderDueType != null)
        //    {
        //        if (workOrderDueType.Equals("Overdue"))
        //        {
        //            model = model.Where(x => x.Overdue);
        //        }
        //        else if (workOrderDueType.Equals("Due"))
        //        {
        //            model = model.Where(x => x.Overdue == false);
        //        }
        //    }

        //    var data = model;
        //    var requestPageSize = request.PageSize;
        //    request.PageSize = 0;

        //    //get total records
        //    var totalRecords = data.ToDataSourceResult(request).Data.AsQueryable().Count();
        //    request.PageSize = requestPageSize;

        //    return this.Json(new { Data = model.ToDataSourceResult(request), TotalRecords = totalRecords });
        //}

        public ActionResult Index()
        {
            var selectedCompany = CompanyCookie.SelectedCompany;

            //if (selectedCompany == null)
            //    selectedCompany = SelectCompany();

            WorkOrdersGridViewModel model = new WorkOrdersGridViewModel
            {
                //fill dropdowns data. required for mobile view
                Departments     = GetMobileFilterDepartmentsSelectList(),
                Areas           = GetMobileFilterAreasSelectList(),
                Closers         = GetMobileFilterClosersSelectList(),
                Priorities      = GetPrioritiesSelectList(null),
                Companies       = UserFunctions.GetCompaniesSelectList(selectedCompany),
                SelectedCompany = selectedCompany
            };

            return(View(model));
        }
        public static string GetReportEmailMessage(CompanyEnum company, string areaName, int areaId, AppDbContext _db)
        {
            var today         = System.DateTime.UtcNow.ToCentralTime();
            var yesterday     = today.AddDays(-1);
            var thisWeekStart = today.AddDays(-(int)today.DayOfWeek).Date;
            var thisWeekEnd   = thisWeekStart.AddDays(7).AddSeconds(-1);
            var lastWeekStart = thisWeekStart.AddDays(-7);
            var lastWeekEnd   = thisWeekStart.AddSeconds(-1);

            var openedWorkOrderModels = new List <WorkOrdersGridViewModel>();
            var closedWorkOrderModels = new List <WorkOrdersGridViewModel>();
            //Add Awaiting Approval workorders

            var openedWorkOrders = _db.Workorders.Where(x => x.Reported >= lastWeekStart && x.Reported <= lastWeekEnd && x.Department.AreaID == areaId).ToList();

            foreach (var workorder in openedWorkOrders)
            {
                var model = new WorkOrdersGridViewModel();
                model.DepartmentName     = workorder.Department != null ? workorder.Department.Name : null;
                model.DepartmentAreaName = workorder.Department != null ? workorder.Department.AreaName : null;
                model.Reported           = workorder.Reported;
                model.Priority           = workorder.Priority;
                model.Details            = workorder.Details;
                model.Closed             = workorder.Closed;
                model.Id = workorder.Id;
                openedWorkOrderModels.Add(model);
            }

            var message = @"<h2>" + company.ToString() + @" Weekly Maintenance Workorders Report</h2>
                                    <h2>" + areaName + @"</h2>
                                    <h5>Report created " + @DateTime.UtcNow.ToCentralTime() + @"</h5><br />
                                      <h4 ><i>Workorders Opened over the past week</i> </h4> ";

            if (openedWorkOrderModels.Any() == false)
            {
                message += "No Workorders were opened for the specified reporting period.";
            }
            else
            {
                message += @" <table style=""border:1px"">
                                       <tr style=""text-align:left"">
                                            <th style=""border-bottom:1px; border-right: 1px;"">Department</th> 
                                            <th style=""border-bottom:1px; border-right: 1px;"">Reported </th>   
                                             <th style=""border-bottom:1px; border-right: 1px;"">Details</th>
                                            <th style=""border-bottom:1px; border-right: 1px;"">Priorty</th>
                                            <th style=""border-bottom:1px; border-right: 1px;"">Due</th>
                                            <th style=""border-bottom:1px; border-right: 1px;"">Days Overdue</th>
                                           <th style=""border-bottom:1px"">Days Open </th>
                                        </tr>";

                foreach (var workorder in openedWorkOrderModels)
                {
                    message += GetWorkorderEmailRow(workorder);
                }

                message += @"</table>";
            }


            message += @"<h4><i>Workorders closed over the past week</i> </h4>";
            var closedWorkOrders = _db.Workorders.Where(x => x.Closed != null && x.Closed >= lastWeekStart && x.Closed <= lastWeekEnd && x.Department.AreaID == areaId).ToList();

            foreach (var workorder in closedWorkOrders)
            {
                var model = new WorkOrdersGridViewModel();
                model.DepartmentName     = workorder.Department != null ? workorder.Department.Name : null;
                model.DepartmentAreaName = workorder.Department != null ? workorder.Department.AreaName : null;
                model.Reported           = workorder.Reported;
                model.Priority           = workorder.Priority;
                model.Details            = workorder.Details;
                model.Closed             = workorder.Closed;
                model.Id = workorder.Id;
                closedWorkOrderModels.Add(model);
            }

            if (closedWorkOrderModels.Any() == false)
            {
                message += "No Workorders were closed during the specified reporting period.";
            }
            else
            {
                message += @" <table style=""border:1px"">
                                       <tr style=""text-align:left"">
                                            <th style=""border-bottom:1px; border-right: 1px;"">Department</th> 
                                            <th style=""border-bottom:1px; border-right: 1px;"">Reported </th>   
                                             <th style=""border-bottom:1px; border-right: 1px;"">Details</th>
                                            <th style=""border-bottom:1px; border-right: 1px;"">Priorty</th>
                                            <th style=""border-bottom:1px; border-right: 1px;"">Due</th>
                                            <th style=""border-bottom:1px; border-right: 1px;"">Days Overdue</th>
                                           <th style=""border-bottom:1px"">Days Open </th>
                                        </tr>";

                foreach (var workorder in closedWorkOrderModels)
                {
                    message += GetWorkorderEmailRow(workorder);
                }

                message += @"</table>";
            }

            return(message);
        }