public async Task <ActionResult> TestGroupDetails(Guid testGroupGuid) { TestGroupRepository testGroupRepo = new TestGroupRepository(); var testGroupTask = testGroupRepo.GetByIdAsync(testGroupGuid); ApplicationUserRepository <Tester> userRepo = new ApplicationUserRepository <Tester>(); var testerTask = userRepo.GetByUserNameAsync(User.Identity.Name); TestGroupsRepository testGroupsRepo = new TestGroupsRepository(); ViewBag.Takened = testGroupsRepo.GetGroupStatus(await testGroupTask, await testerTask); ViewBag.TestsGuid = testGroupsRepo.GetByTestGroupForTester(await testerTask, await testGroupTask); return(View(await testGroupTask)); }
public async Task <ActionResult> ResolveGroup(Guid testGroupGuid) { TestGroupsRepository testGroupsRepo = new TestGroupsRepository(); var testGroups = testGroupsRepo.GetById(testGroupGuid); ApplicationUserRepository <Tester> userRepo = new ApplicationUserRepository <Tester>(); var testerTask = userRepo.GetByUserNameAsync(User.Identity.Name); TestsRepository testsRepo = new TestsRepository(); IList <DataAccess.Model.Tests.Tests> tests = new List <DataAccess.Model.Tests.Tests>(); foreach (var testCase in testGroups.TestGroup.TestCases) { DataAccess.Model.Tests.Tests testsRecord = testsRepo.GetByTestCaseForTesterByStatus(await testerTask, testCase, TestsStatus.Takened); if (testsRecord != null) { tests.Add(testsRecord); } } if (tests.Count <= 0) { testGroups.Finished = DateTime.Now; testGroups.Status = GroupStatus.Finished; testGroups.TestGroup.Rating = testGroups.TestGroup.CountRating(); testGroupsRepo.Update(testGroups); return(RedirectToAction("FinishedTestGroups")); } TestStatusRepository testStatusRepo = new TestStatusRepository(); ViewBag.TestStatus = testStatusRepo.GetAll(); ViewBag.TestGroup = testGroups.TestGroup.Name; ViewBag.TestGroupsGuid = testGroups.Id; return(View(tests.First())); }
public async Task <ActionResult> FinishedTestGroups(int?page, string searchTerm) { TestGroupsRepository testGroupsRepo = new TestGroupsRepository(); ApplicationUserRepository <Tester> userRepo = new ApplicationUserRepository <Tester>(); var testerTask = userRepo.GetByUserNameAsync(User.Identity.Name); int itemsOnPage = 8; int pg = page ?? 1; int startIndex = (pg * itemsOnPage) - itemsOnPage; ViewBag.CurrentSearch = searchTerm; IList <TestGroups> testGroups = testGroupsRepo.GetAvailableEntities(out var totalTests, await testerTask, GroupStatus.Finished, startIndex, itemsOnPage, searchTerm); ViewBag.Pages = (int)Math.Ceiling((double)totalTests / (double)itemsOnPage); ViewBag.CurrentPage = pg; if (Request.IsAjaxRequest()) { return(PartialView(testGroups)); } return(View(testGroups)); }
public async Task TakeGroup(Guid groupId) { TestGroupRepository testGroupRepo = new TestGroupRepository(); var testGroupTask = testGroupRepo.GetByIdAsync(groupId); ApplicationUserRepository <Tester> userRepo = new ApplicationUserRepository <Tester>(); var testerTask = userRepo.GetByUserNameAsync(User.Identity.Name); TestGroups testGroups = new TestGroups(); testGroups.TestGroup = await testGroupTask; testGroups.Status = GroupStatus.Takened; testGroups.Takened = DateTime.Now; testGroups.Tester = await testerTask; TestGroup testGroup = await testGroupTask; TestsRepository testsRepo = new TestsRepository(); foreach (var testCase in testGroup.TestCases) { if (!testsRepo.IsTestTakened(testCase, await testerTask)) { DataAccess.Model.Tests.Tests tests = new DataAccess.Model.Tests.Tests(); tests.Test = testCase; tests.Status = TestsStatus.Takened; tests.Takened = DateTime.Now; tests.Tester = await testerTask; testsRepo.Create(tests); } } TestGroupsRepository testGroupsRepo = new TestGroupsRepository(); testGroupsRepo.Create(testGroups); }
public async Task <ActionResult> Resolve(DataAccess.Model.Tests.Tests tests, HttpPostedFileBase[] files, Guid testGroupsGuid) { TestsRepository testsRepo = new TestsRepository(); DataAccess.Model.Tests.Tests testsRecord = testsRepo.GetById(tests.Id); TestGroupsRepository testGroupsRepo = new TestGroupsRepository(); TestGroups testGroups = testGroupsRepo.GetById(testGroupsGuid); TestStatusRepository testStatusRepo = new TestStatusRepository(); ModelState.Remove("files"); ModelState.Remove("testGroupsGuid"); ModelState.Remove(nameof(DataAccess.Model.Tests.Tests.Tester)); ModelState.Remove(nameof(DataAccess.Model.Tests.Tests.Status)); ModelState.Remove(nameof(DataAccess.Model.Tests.Tests.Test)); ModelState.Remove(nameof(DataAccess.Model.Tests.Tests.Evidences)); ModelState.Remove(nameof(DataAccess.Model.Tests.Tests.Finished)); ModelState.Remove(nameof(DataAccess.Model.Tests.Tests.Rejected)); ModelState.Remove(nameof(DataAccess.Model.Tests.Tests.Takened)); ModelState.Remove("TestStatus.Status"); if (ModelState.IsValid) { if (testsRecord.Test.Creator.Credits < (int)Math.Ceiling(testsRecord.Test.Reward * testGroups.TestGroup.RewardMultiplier)) { ViewBag.TestStatus = testStatusRepo.GetAll(); ViewBag.TestGroup = testGroups.TestGroup.Name; ViewBag.TestGroupsGuid = testGroups.Id; TempData["error"] = "Createor of tests don't have required amount of coins. Please try resolve test later, or contact our support team."; return(RedirectToAction("TakenedTestGroups")); } var testStatusTask = testStatusRepo.GetByIdAsync(tests.TestStatus.Id); IList <Evidence> evidences = new List <Evidence>(); if (files[0] != null) { var maxSizeInMb = 20; var byteSize = 1048576; var maxSizeInBytes = byteSize * maxSizeInMb; foreach (var file in files) { if (file.ContentLength > maxSizeInBytes) { TempData["error"] = "File " + file.FileName + " is too big! (max size is " + maxSizeInMb + "MB)"; ViewBag.TestStatus = testStatusRepo.GetAll(); ViewBag.TestGroup = testGroups.TestGroup.Name; ViewBag.TestGroupsGuid = testGroups.Id; return(View("ResolveGroup", testsRecord)); } } foreach (var file in files) { Evidence evidence = new Evidence(); evidence.Id = Guid.NewGuid(); evidence.Name = evidence.Id.ToString(); evidence.RealName = Path.GetFileNameWithoutExtension(file.FileName); evidence.Attached = DateTime.Now; var extension = Path.GetExtension(file.FileName); evidence.Extension = extension; var path = Path.Combine(Server.MapPath($"~/Uploads/{testsRecord.Id}"), evidence.Name + extension); Directory.CreateDirectory(Server.MapPath($"~/Uploads/{testsRecord.Id}")); file.SaveAs(path); evidences.Add(evidence); } testsRecord.Evidences = evidences; } testsRecord.TestStatus = await testStatusTask; testsRecord.Finished = DateTime.Now; testsRecord.Status = TestsStatus.Finished; testsRecord.Tester.Credits = testsRecord.Tester.Credits + (int)Math.Ceiling(testsRecord.Test.Reward * testGroups.TestGroup.RewardMultiplier); testsRecord.Test.Creator.Credits = testsRecord.Test.Creator.Credits - (int)Math.Ceiling(testsRecord.Test.Reward * testGroups.TestGroup.RewardMultiplier); EvidenceRepository evidRepo = new EvidenceRepository(); foreach (var evidence in evidences) { evidRepo.Create(evidence); } testsRepo.Update(testsRecord); return(RedirectToAction("ResolveGroup", new { testGroupGuid = testGroups.Id })); } ViewBag.TestStatus = testStatusRepo.GetAll(); ViewBag.TestGroup = testGroups.TestGroup.Name; ViewBag.TestGroupsGuid = testGroups.Id; return(View("ResolveGroup", testsRecord)); }