public ActionResult Create() { // check user role // if architect, go right to step two // if GC, go through dupe check process if (User.IsInRole("architect")) { var user = _service.GetUserProfile(_security.GetUserId(User.Identity.Name)); ProjectEditModel viewModel = new ProjectEditModel(); viewModel.ArchitectId = user.CompanyId; viewModel.Architect = user.Company.CompanyName; viewModel.BidDateTime = DateTime.Now; rePopViewModel(viewModel); return View("CreateStepTwo", viewModel); } else { return View("Create"); } }
public ActionResult CreateStepTwo(int architectId, string title, string number) { string archName = _service.GetCompanyProfile(architectId).CompanyName; ProjectEditModel viewModel = new ProjectEditModel(); viewModel.ArchitectId = architectId; viewModel.Architect = archName; viewModel.Title = title; viewModel.Number = number; viewModel.BidDateTime = DateTime.Now; rePopViewModel(viewModel); return View("CreateStepTwo", viewModel); }
private void rePopViewModel(ProjectEditModel viewModel) { viewModel.ProjectTypes = Util.CreateSelectListFromEnum(typeof(ProjectType), viewModel.ProjectType.ToString()); viewModel.ProjectCategories = Util.CreateSelectListFromEnum(typeof(ProjectCategory), viewModel.ProjectCategory.ToString()); viewModel.ConstructionTypes = _service.GetConstructionTypes().OrderBy(c => c.Name).Select(c => new SelectListItem { Text = c.Name, Value = c.Id.ToString(), Selected = c.Id == viewModel.ConstructionTypeId }); viewModel.States = _service.GetStates().OrderBy(s => s.Abbr).Select(s => new SelectListItem { Text = s.Abbr, Value = s.Id.ToString(), Selected = s.Id == viewModel.StateId }); viewModel.BuildingTypes = _service.GetBuildingTypes(); }
public ActionResult Edit(ProjectEditModel viewModel) { if (!viewModel.ProjectCategory.HasValue) ModelState.AddModelError("ProjectCategory", "Project Category is required"); if (!viewModel.ProjectType.HasValue) ModelState.AddModelError("ProjectType", "Project Type is required"); if (ModelState.IsValid) { try { int userId = _security.GetUserId(User.Identity.Name); int companyId = _service.GetUserProfile(userId).CompanyId; // get project Project toUpdate = _service.Get(viewModel.Id); // update project attributes toUpdate.Title = viewModel.Title; toUpdate.Description = viewModel.Description; toUpdate.Address = viewModel.Address; toUpdate.BidDateTime = viewModel.BidDateTime; toUpdate.WalkThruDateTime = viewModel.WalkThruDateTime; toUpdate.WalkThruStatus = viewModel.WalkThruStatus.Value; toUpdate.BuildingTypeId = viewModel.BuildingTypeId; toUpdate.City = viewModel.City; toUpdate.ConstructionTypeId = viewModel.ConstructionTypeId; toUpdate.PostalCode = viewModel.PostalCode; toUpdate.ProjectType = viewModel.ProjectType.Value; toUpdate.ProjectCategory = viewModel.ProjectCategory.Value; toUpdate.StateId = viewModel.StateId; toUpdate.Number = viewModel.Number; toUpdate.InvitationOnly = viewModel.InvitationOnly; toUpdate.HiddenFromSearch = viewModel.HiddenFromSearch; // update primary bid package var ProjectPackage = toUpdate.BidPackages.Where(b => b.IsMaster).FirstOrDefault(); // if it doesn't exist for some reason, create it if (ProjectPackage == null) { ProjectPackage = new BidPackage { BidDateTime = toUpdate.BidDateTime, CreatedById = toUpdate.ArchitectId, IsMaster = true, ProjectId = toUpdate.Id }; toUpdate.BidPackages = new List<BidPackage>(); toUpdate.BidPackages.Add(ProjectPackage); } // update scopes List<ProjectXScope> prjScopes = toUpdate.Scopes.ToList(); List<BidPackageXScope> bpScopes; // error correction if (ProjectPackage.Scopes == null || ProjectPackage.Scopes.Count() == 0) { var temp = new List<BidPackageXScope>(); for (int i = 0; i < prjScopes.Count(); i++) { temp.Add(new BidPackageXScope { BidPackage = ProjectPackage, BidPackageId = ProjectPackage.Id, ScopeId = prjScopes[i].ScopeId }); } ProjectPackage.Scopes = temp; bpScopes = temp; } else { bpScopes = ProjectPackage.Scopes.ToList(); } // get scopes from new selection that are not in existing selection var scopesToAdd = viewModel.SelectedScope.Where(x => !prjScopes.Select(s => s.ScopeId).Contains(x)).ToArray(); // get scopes in existing selection that are not in new selection var prjScopesToRemove = prjScopes.Where(x => !viewModel.SelectedScope.Contains(x.ScopeId)).ToArray(); var bpScopesToRemove = bpScopes.Where(x => !viewModel.SelectedScope.Contains(x.ScopeId)).ToArray(); // add new selections for (int i = 0; i < scopesToAdd.Count(); i++) { toUpdate.Scopes.Add(new ProjectXScope { Project = toUpdate, ProjectId = toUpdate.Id, ScopeId = scopesToAdd[i] }); ProjectPackage.Scopes.Add(new BidPackageXScope { BidPackageId = ProjectPackage.Id, ScopeId = scopesToAdd[i] }); } // remove scopes from project for (int i = 0; i < prjScopesToRemove.Count(); i++) { toUpdate.Scopes.Remove(prjScopesToRemove[i]); } // remove scope from master bid package for (int i = 0; i < bpScopesToRemove.Count(); i++) { ProjectPackage.Scopes.Remove(bpScopesToRemove[i]); } // add project to system if (_service.Update(toUpdate)) { // send notifications to invited members int[] invitees = _notice.GetInvitationsNotDeclined(toUpdate.Id, companyId).Select(s => s.SentToId).ToArray(); for (int i = 0; i < invitees.Length; i++) { _notice.SendNotification(invitees[i], RecipientType.company, NotificationType.ProjectChange, toUpdate.Id, EntityType.Project); } return RedirectToRoute("Default", new { controller = "Project", action = "Details", id = toUpdate.Id }); } else { Util.MapValidationErrors(_service.ValidationDic, this.ModelState); rePopViewModel(viewModel); return View("Edit", viewModel); } } catch (Exception ex) { ModelState.AddModelError("Exception", ex.Message); rePopViewModel(viewModel); return View("Edit", viewModel); } } else { rePopViewModel(viewModel); return View("Edit", viewModel); } }
// GET: /Projects/Edit/3 public ActionResult Edit(int id) { var raw = _service.Get(id); ProjectEditModel viewModel = new ProjectEditModel { Architect = raw.Architect.CompanyName, ArchitectId = raw.ArchitectId, Address = raw.Address, BidDateTime = raw.BidDateTime, BuildingTypeId = raw.BuildingTypeId, City = raw.City, ConstructionTypeId = raw.ConstructionTypeId, Description = raw.Description, Id = raw.Id, PostalCode = raw.PostalCode, StateId = raw.StateId, Title = raw.Title, WalkThruDateTime = raw.WalkThruDateTime, WalkThruStatus = raw.WalkThruStatus, Number = raw.Number, ProjectCategory = raw.ProjectCategory, ProjectType = raw.ProjectType, HiddenFromSearch = raw.HiddenFromSearch, InvitationOnly = raw.InvitationOnly }; rePopViewModel(viewModel); return View("Edit", viewModel); }
public ActionResult CreateStepTwo(ProjectEditModel viewModel) { if (!viewModel.ProjectCategory.HasValue) ModelState.AddModelError("ProjectCategory", "Project Category is required"); if (!viewModel.ProjectType.HasValue) ModelState.AddModelError("ProjectType", "Project Type is required"); if (ModelState.IsValid) { try { int userId = _security.GetUserId(User.Identity.Name); int companyId = _service.GetUserProfile(userId).CompanyId; // create project BCModel.Projects.Project toCreate = new BCModel.Projects.Project { Number = viewModel.Number, ArchitectId = viewModel.ArchitectId, Address = viewModel.Address, BidDateTime = viewModel.BidDateTime, BuildingTypeId = viewModel.BuildingTypeId, City = viewModel.City, ConstructionTypeId = viewModel.ConstructionTypeId, CreatedById = userId, Description = viewModel.Description, PostalCode = viewModel.PostalCode, ProjectType = viewModel.ProjectType.Value, ProjectCategory = viewModel.ProjectCategory.Value, StateId = viewModel.StateId, Title = viewModel.Title, Scopes = new List<ProjectXScope>(), BidPackages = new List<BidPackage>(), WalkThruDateTime = viewModel.WalkThruDateTime, WalkThruStatus = viewModel.WalkThruStatus.Value, HiddenFromSearch = viewModel.HiddenFromSearch, InvitationOnly = viewModel.InvitationOnly }; GeoLocator locator = new GeoLocator(); string state = _service.GetStates().Where(x => x.Id == viewModel.StateId).FirstOrDefault().Abbr; if (viewModel.Address == null || viewModel.Address == string.Empty) { toCreate.GeoLocation = locator.GetFromCityStateZip(viewModel.City, state, viewModel.PostalCode); } else { toCreate.GeoLocation = locator.GetFromAddress(viewModel.Address, viewModel.City, state, viewModel.PostalCode); } // create master bid package BidPackage projectPackage = new BidPackage { IsMaster = true, BidDateTime = toCreate.BidDateTime, Description = "Master Bid Package", CreatedById = viewModel.ArchitectId, Project = toCreate, Scopes = new List<BidPackageXScope>(), Invitees = new List<Invitation>() }; // if user is a GC, self-invite if (_security.IsUserInRole("general_contractor")) { projectPackage.Invitees.Add(new Invitation { BidPackage = projectPackage, SentToId = companyId, SentDate = DateTime.Now, AcceptedDate = DateTime.Now, InvitationType = InvitationType.SentFromCreatedBy }); } // add bp to project toCreate.BidPackages.Add(projectPackage); // set selected scopes for bp and project for (int i = 0; i < viewModel.SelectedScope.Count(); i++) { toCreate.Scopes.Add(new ProjectXScope { Project = toCreate, ScopeId = viewModel.SelectedScope.ElementAt(i) }); projectPackage.Scopes.Add(new BidPackageXScope { BidPackage = projectPackage, ScopeId = viewModel.SelectedScope.ElementAt(i) }); } // add project to system if (_service.Create(toCreate)) { return RedirectToRoute("Default", new { controller = "Project", action = "Details", id = toCreate.Id }); } else { Util.MapValidationErrors(_service.ValidationDic, this.ModelState); rePopViewModel(viewModel); return View("CreateStepTwo", viewModel); } } catch (Exception ex) { ModelState.AddModelError("Exception", ex.Message); rePopViewModel(viewModel); return View("CreateStepTwo", viewModel); } } // modelstate is not valid rePopViewModel(viewModel); return View("CreateStepTwo", viewModel); }
public void Post_CreateStepTwo_ValidProject_RedirectsTo_Details() { // arrange ProjectEditModel viewModel = new ProjectEditModel(); viewModel.SelectedScope = new int[0]; Mock<IProjectServiceLayer> service = new Mock<IProjectServiceLayer>(); service.Setup(s => s.Create(It.IsAny<BCModel.Projects.Project>())).Returns(true); service.Setup(s => s.GetUserProfile(It.IsAny<int>())).Returns(new BCModel.UserProfile { CompanyId = 1, UserId = 1 }); Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>(); security.Setup(s => s.GetUserId(It.IsAny<string>())).Returns(1); Mock<INotificationSender> notice = new Mock<INotificationSender>(); ProjectController controller = new ProjectController(service.Object, security.Object, notice.Object); Mock<IPrincipal> principal = new Mock<IPrincipal>(); principal.Setup(p => p.Identity.Name).Returns("*****@*****.**"); Mock<ControllerContext> context = new Mock<ControllerContext>(); context.SetupGet(c => c.HttpContext.User.Identity.Name).Returns("*****@*****.**"); context.SetupGet(c => c.HttpContext.Request.IsAuthenticated).Returns(true); controller.ControllerContext = context.Object; // act var result = controller.CreateStepTwo(viewModel); // assert Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult)); Assert.AreEqual("Details", ((RedirectToRouteResult)result).RouteValues["action"]); }
public void PostEditValidProjectRedirectsToDetails() { // arrange ProjectEditModel viewModel = new ProjectEditModel { Id = 1, PostalCode = "98008" }; viewModel.SelectedScope = new int[0]; Project aProject = new Project { Id = 1, ArchitectId = 1, Scopes = new List<ProjectXScope>(), BidPackages = new List<BidPackage>(), Title = "foo" }; aProject.BidPackages.Add(new BidPackage { Id = 1, IsMaster = true, Project = aProject, ProjectId = aProject.Id, Scopes = new List<BidPackageXScope>(), CreatedById = 1 }); Mock<IProjectServiceLayer> service = new Mock<IProjectServiceLayer>(); service.Setup(s => s.Update(It.IsAny<BCModel.Projects.Project>())).Returns(true); service.Setup(s => s.GetUserProfile(It.IsAny<int>())).Returns(new BCModel.UserProfile { CompanyId = 1, UserId = 1 }); service.Setup(s => s.Get(It.IsAny<int>())).Returns(aProject); Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>(); security.Setup(s => s.GetUserId(It.IsAny<string>())).Returns(1); Mock<INotificationSender> notice = new Mock<INotificationSender>(); ProjectController controller = new ProjectController(service.Object, security.Object, notice.Object); Mock<IPrincipal> principal = new Mock<IPrincipal>(); principal.Setup(p => p.Identity.Name).Returns("*****@*****.**"); Mock<ControllerContext> context = new Mock<ControllerContext>(); context.SetupGet(c => c.HttpContext.User.Identity.Name).Returns("*****@*****.**"); context.SetupGet(c => c.HttpContext.Request.IsAuthenticated).Returns(true); controller.ControllerContext = context.Object; // act var result = controller.Edit(viewModel); // assert Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult)); Assert.AreEqual("Details", ((RedirectToRouteResult)result).RouteValues["action"]); }
public void PostCreateStepTwoProjectValidationFailReturnsModelStateErrors() { // arrange ProjectEditModel viewModel = new ProjectEditModel(); viewModel.SelectedScope = new int[0]; Mock<IProjectServiceLayer> service = new Mock<IProjectServiceLayer>(); service.Setup(s => s.Create(It.IsAny<BCModel.Projects.Project>())).Returns(false); service.Setup(s => s.GetUserProfile(It.IsAny<int>())).Returns(new BCModel.UserProfile { CompanyId = 1, UserId = 1 }); service.SetupGet(s => s.ValidationDic).Returns(new Dictionary<string, string> { { "Duplicate", "Title already exists" } }); Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>(); security.Setup(s => s.GetUserId(It.IsAny<string>())).Returns(1); Mock<INotificationSender> notice = new Mock<INotificationSender>(); ProjectController controller = new ProjectController(service.Object, security.Object, notice.Object); Mock<IPrincipal> principal = new Mock<IPrincipal>(); principal.Setup(p => p.Identity.Name).Returns("*****@*****.**"); Mock<ControllerContext> context = new Mock<ControllerContext>(); context.SetupGet(c => c.HttpContext.User.Identity.Name).Returns("*****@*****.**"); context.SetupGet(c => c.HttpContext.Request.IsAuthenticated).Returns(true); controller.ControllerContext = context.Object; // act var result = controller.CreateStepTwo(viewModel); // assert Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(ViewResult)); Assert.AreEqual("CreateStepTwo", ((ViewResult)result).ViewName); Assert.IsTrue(((ViewResult)result).ViewData.ModelState.ContainsKey("Duplicate")); Assert.AreEqual("Title already exists", ((ViewResult)result).ViewData.ModelState["Duplicate"].Errors[0].ErrorMessage.ToString()); }