コード例 #1
0
        /* Helper Methods below: */


        private void PrepareCarsForViewModel(ReportStartupViewModel model)
        {
            ICollection <Car> cars = _db.Cars.Where(c => c.Active).ToList();
            ReportDAL         rDB  = new ReportDAL(_db);
            // User doesn't need to select cars if there is only one available
            int?latestOdometerStatus = null;

            if (cars.Count == 1)
            {
                Car selectedCar = cars.FirstOrDefault();
                model.SelectedCarRegistrationNumber = selectedCar.RegistrationNumber;
                model.SelectedCarId = selectedCar.Id;

                latestOdometerStatus = rDB.GetLatestOdometerStatus(selectedCar.Id);;
            }
            else
            {
                latestOdometerStatus = rDB.GetLatestOdometerStatus(cars.ToArray()[0].Id);
                model.AvailableCars  = new SelectList(cars, "Id", "RegistrationNumber");
            }

            if (latestOdometerStatus != null)
            {
                model.OdometerStart = (int)latestOdometerStatus;
            }
        }
コード例 #2
0
        public ActionResult Startup(bool reportCompleted = false, int?associatedProjectId = null)
        {
            Project associatedProject = null;

            if (reportCompleted)
            {
                ViewBag.AppMessage = new AppMessage()
                {
                    Type = AppMessage.Success, Message = AppString.ReportCompleted
                }
            }
            ;
            if (associatedProjectId != null)
            {
                associatedProject  = _db.Projects.Single(p => p.Id == associatedProjectId);
                ViewBag.AppMessage = new AppMessage()
                {
                    Type = AppMessage.Success, Message = String.Format(AppString.ProjectAssociated, associatedProject.Name)
                };
            }


            string userId = User.Identity.GetUserId();

            ErrorLogger.LogString(User.IsInRole("Admin").ToString());

            // Makes sure that users finish previous reports first.
            ReportDAL rDb = new ReportDAL(_db);

            if (rDb.UserHasIncompleteReport(userId))
            {
                return(RedirectToAction("Index"));
            }

            ReportStartupViewModel model = new ReportStartupViewModel();

            try {
                PrepareProjectsForViewModel(model, associatedProject);
            } catch (Exception e) {
                // User is not logged in properly. Maybe a threading issue? (This code is a workaround)
                ErrorLogger.LogString("Could not log in. userId = " + User.Identity.GetUserId());
                return(RedirectToAction("Index", "Report"));
            }

            // A user must have atleast one associated project to be able to report. Values are set in the PrepareProjectForStartup method call.
            if (model.AvailableProjects == null && model.SelectedProjectName == null)
            {
                return(RedirectToAction("Associate", "Project"));
            }


            PrepareCarsForViewModel(model);

            return(View(model));
        }
コード例 #3
0
        private void PrepareProjectsForViewModel(ReportStartupViewModel model, Project associatedProject)
        {
            string userId = User.Identity.GetUserId();
            List <ProjectSelectListViewModel> selectList = new List <ProjectSelectListViewModel>();
            ProjectDAL     pDb             = new ProjectDAL(_db);
            List <Project> userProjects    = pDb.GetUserProjects(userId).Where(p => p.Active).ToList();
            Project        notProjectBound = _db.Projects.Single(p => p.Name == "DefaultProject");

            // Add default project first. It should always be first in the list.
            selectList.Add(new ProjectSelectListViewModel()
            {
                Id       = notProjectBound.Id,
                FullInfo = "[ " + AppString.ProjectNotBound + " ]"
            });

            // Add the rest.
            foreach (Project p in userProjects)
            {
                selectList.Add(new ProjectSelectListViewModel()
                {
                    Id       = p.Id,
                    FullInfo = p.FullInfo
                });
            }

            if (selectList.Count == 1)
            {
                ProjectSelectListViewModel foundProject = selectList.First();

                model.SelectedProjectName = foundProject.FullInfo;
                model.SelectedProjectId   = foundProject.Id;
            }
            else
            {
                int id = -1;
                if (associatedProject != null)
                {
                    id = associatedProject.Id;
                }
                else
                {
                    id = selectList.First().Id;
                }
                model.AvailableProjects = new SelectList(selectList.ToArray(), "Id", "FullInfo", id);
            }
        }
コード例 #4
0
        public ActionResult Startup(ReportStartupViewModel model)
        {
            if (ModelState.IsValid)
            {
                ReportDAL dal = new ReportDAL(_db);


                string currUserId = User.Identity.GetUserId(); // Calling GetUserId() within a Lambda-expression causes errors

                int?lastOdometerStatus = dal.GetLatestOdometerStatus(model.SelectedCarId);
                if (lastOdometerStatus != null && model.OdometerStart < lastOdometerStatus)
                {
                    ViewBag.OdometerError = String.Format(AppString.ErrorOdometerStart, lastOdometerStatus - 1);
                    PrepareCarsForViewModel(model);
                    PrepareProjectsForViewModel(model, null);
                    return(View(model));
                }

                Report report = new Report()
                {
                    Date              = DateTime.Now,
                    OdometerStart     = model.OdometerStart,
                    AssociatedCar     = _db.Cars.Single(c => c.Id == model.SelectedCarId),
                    AssociatedProject = _db.Projects.Single(p => p.Id == model.SelectedProjectId),
                    AssociatedUser    = _db.Users.Single(u => u.Id == currUserId),
                    FromLocation      = model.FromLocation
                };

                // TODO: Perform checks on the received data to make sure that there isn't any user shenanigans going on. For example if a project id was passed that the user isn't associated with.

                _db.Reports.Add(report);
                _db.SaveChanges();

                return(RedirectToAction("Complete", "Report", new { reportStarted = true }));
            }

            return(View(model));
        }