Пример #1
0
        /// <summary>
        /// Start a review.
        /// </summary>
        /// <param name="parcelId"></param>
        /// <returns></returns>
        public IActionResult ReviewStart(long parcelId)
        {
            // Create the review for the user if it does not exist
            string username = User.Identity.Name;

            FoodParcel foodParcel = this.ReviewService.GetFoodParcel(parcelId);

            if (foodParcel != null)
            {
                TestResult test = this.ReviewService.GetTestResult(parcelId, User.Identity.Name);

                if (test == null)
                {
                    test = this.ReviewService.CreateTest(foodParcel, User.Identity.Name);
                }

                ReviewStartViewModel review = new ReviewStartViewModel()
                {
                    TestId = test.Id, TestName = test.Name, FoodParcel = foodParcel
                };

                return(View(review));
            }
            else
            {
                return(RedirectToAction("Index", "Review"));
            }
        }
        /// <summary>
        /// Get the list of all completed tests in a food parcel.
        /// </summary>
        /// <param name="foodParcel"></param>
        /// <returns></returns>
        public List <TestResultItem> CompletedTests(FoodParcel foodParcel)
        {
            List <TestResultItem> result = new List <TestResultItem>();

            if (foodParcel.TestResults != null)
            {
                foreach (TestResult item in foodParcel.TestResults)
                {
                    result.AddRange(from TestResultItem t in item.TestResultItems where t.Result > 0 select t);
                }
            }

            return(result.OrderBy(f => f.FoodItem.Description).ToList());
        }
Пример #3
0
        /// <summary>
        /// Create test records for a user and food parcel.
        /// </summary>
        /// <param name="foodParcel"></param>
        /// <param name="username"></param>
        /// <returns></returns>
        public TestResult CreateTest(FoodParcel foodParcel, string username)
        {
            List <TestItemCategory> measurementCategories = (from TestItemCategory l in this.TestItemResultCategoryRepository.GetAll
                                                             select l).OrderBy(o => o.Value).ToList();

            List <FoodItem> selectedFoodItems = foodParcel.FoodItems;

            TestResult test = new TestResult()
            {
                FoodParcelId = foodParcel.Id,
                TestDate     = DateTime.Now,
                Name         = foodParcel.Name + " Review",
                UserName     = username
            };

            this.TestResultRepository.Create(test);
            this.TestResultRepository.Save();

            // Add the food items to the test
            foreach (FoodItem item in selectedFoodItems)
            {
                foreach (TestItemCategory category in measurementCategories)
                {
                    TestResultItem testResultItem = new TestResultItem()
                    {
                        CategoryId   = category.Id,
                        FoodItemId   = item.Id,
                        Result       = 0,
                        TestResultId = test.Id
                    };
                    this.TestResultItemRepository.Create(testResultItem);
                }
            }
            this.TestResultItemRepository.Save();

            test = this.GetTestResult(foodParcel.Id, username); // Check the new item has been saved properly

            return(test);
        }
Пример #4
0
        /// <summary>
        /// Create a reviewprocessviewmodel using a reviewstart model.
        /// </summary>
        /// <param name="model"></param>
        /// <param name="username"></param>
        /// <returns></returns>
        public ReviewProcessViewModel AssembleReviewProcessViewModel(ReviewStartResultViewModel model, string username)
        {
            ReviewProcessViewModel result = new ReviewProcessViewModel()
            {
                FoodParcelId       = model.FoodParcelId,
                SelectedFoodItemId = model.SelectedFoodItemId,
                TestId             = model.TestId
            };

            FoodParcel foodParcel = this.FoodParcelRepository.Get(result.FoodParcelId);

            result.FoodParcelName = foodParcel.Name;

            FoodItem foodItem = this.FoodItemRepository.Get(result.SelectedFoodItemId);

            result.FoodItemName = foodItem.Description;

            TestResult testResult = this.TestResultRepository.Get(result.TestId);

            result.TestName = testResult.Name;

            // Get the test items using PLINQ - it may run a bit faster when there are lots of test submissions
            List <TestResultItem> testResultItems = (from TestResultItem t in this.TestResultItemRepository.GetAll.AsParallel().WithDegreeOfParallelism(2)
                                                     where t.FoodItemId == result.SelectedFoodItemId &&
                                                     t.TestResultId == result.TestId &&
                                                     t.TestResult.UserName == username
                                                     select t).ToList();

            // The disadvantage of using hard-coded values is that it is difficult to change and add new things later
            // without changing code, recompiling, testing and deploying.
            result.PresentationValue = (from TestResultItem t in testResultItems where t.Category.Value == "Presentation" select t.Result).FirstOrDefault();
            result.TextureValue      = (from TestResultItem t in testResultItems where t.Category.Value == "Texture" select t.Result).FirstOrDefault();
            result.AromaValue        = (from TestResultItem t in testResultItems where t.Category.Value == "Aroma" select t.Result).FirstOrDefault();
            result.FlavourValue      = (from TestResultItem t in testResultItems where t.Category.Value == "Flavour" select t.Result).FirstOrDefault();

            return(result);
        }