コード例 #1
0
        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);
        }
コード例 #2
0
        public void PostCreateDuplicateRedirectsToDuplicates()
        {
            // arrange
            DupeCheckViewModel viewModel = new DupeCheckViewModel
            {
                ArchitectId = 3,
                Number = "abc123 hello hello",
                Title = "build a house for cake"
            };
            Project found = new Project { Id = 2, ArchitectId = viewModel.ArchitectId.Value, Title = viewModel.Title, Number = viewModel.Number };
            Mock<IProjectServiceLayer> service = new Mock<IProjectServiceLayer>();
            service.Setup(s => s.FindDuplicate(viewModel.Title, viewModel.Number, viewModel.ArchitectId.Value)).Returns(new List<Project> { found }); // return empty list.  no matches found

            Mock<INotificationSender> notice = new Mock<INotificationSender>();
            Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>();
            ProjectController controller = new ProjectController(service.Object, security.Object, notice.Object);

            // act
            var result = controller.Create(viewModel);

            // assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
            Assert.AreEqual("Duplicates", ((RedirectToRouteResult)result).RouteValues["action"]);
            Assert.AreEqual("Project", ((RedirectToRouteResult)result).RouteValues["controller"]);
        }
コード例 #3
0
        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"]);
        }
コード例 #4
0
        public ActionResult Create(BCWeb.Areas.Admin.Models.Projects.ViewModel.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)
            {
                BCModel.Projects.Project toCreate = new BCModel.Projects.Project
                {
                    Address = viewModel.Address,
                    ArchitectId = viewModel.ArchitectId,
                    BidDateTime = viewModel.BidDateTime,
                    BuildingTypeId = viewModel.BuildingTypeId,
                    City = viewModel.City,
                    ConstructionTypeId = viewModel.ConstructionTypeId,
                    CreatedById = viewModel.CreatedById,
                    Description = viewModel.Description,
                    Number = viewModel.Number,
                    PostalCode = viewModel.PostalCode,
                    ProjectCategory = viewModel.ProjectCategory.Value,
                    ProjectType = viewModel.ProjectType.Value,
                    StateId = viewModel.StateId,
                    Title = viewModel.Title,
                    BidPackages = new List<BidPackage>(),
                    Scopes = new List<ProjectXScope>(),
                    WalkThruDateTime = viewModel.WalkThruDateTime,
                    WalkThruStatus = viewModel.WalkThruStatus.Value
                };

                GeoLocator locator = new GeoLocator();
                State projectState = _service.GetState(viewModel.StateId);

                if (viewModel.Address == null && viewModel.City == null && viewModel.StateId != null && viewModel.PostalCode != null)
                {
                    toCreate.GeoLocation = locator.GetFromStateZip(projectState.Abbr, viewModel.PostalCode);
                }
                else if ((viewModel.Address == null || viewModel.Address == string.Empty) && viewModel.StateId != null && viewModel.PostalCode != null)
                {
                    toCreate.GeoLocation = locator.GetFromCityStateZip(viewModel.City, projectState.Abbr, viewModel.PostalCode);
                }
                else if ((viewModel.Address != null && viewModel.Address != string.Empty) && (viewModel.City != null && viewModel.City != string.Empty) && viewModel.StateId != null && viewModel.PostalCode != null)
                {
                    toCreate.GeoLocation = locator.GetFromAddress(viewModel.Address, viewModel.City, projectState.Abbr, viewModel.PostalCode);
                }

                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>()
                };

                UserProfile createdBy = _service.GetUserProfile(viewModel.CreatedById);

                // if createdby is a GC, self-invite
                if (createdBy.Company.BusinessType == BusinessType.GeneralContractor)
                {
                    projectPackage.Invitees.Add(new Invitation
                    {
                        BidPackage = projectPackage,
                        SentToId = viewModel.CreatedById,
                        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 RedirectToAction("Index");
                }
                else
                {
                    Util.MapValidationErrors(_service.ValidationDic, this.ModelState);
                }

            }
            rePopVieModel(viewModel);
            return View();
        }