public ActionResult Create(EditBidPackageViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                int userId = _security.GetUserId(User.Identity.Name);
                int companyId = _service.GetUser(userId).CompanyId;

                try
                {
                    BidPackage toCreate = new BidPackage
                            {
                                BidDateTime = viewModel.BidDateTime,
                                CreatedById = companyId,
                                Description = viewModel.Description,
                                IsMaster = false,
                                ProjectId = viewModel.ProjectId,
                                TemplateBidPackageId = viewModel.TemplateId,
                                Notes = viewModel.Notes
                            };

                    toCreate.Scopes = new List<BidPackageXScope>();

                    for (int i = 0; i < viewModel.SelectedScope.Count(); i++)
                    {
                        toCreate.Scopes.Add(new BidPackageXScope { BidPackage = toCreate, ScopeId = viewModel.SelectedScope.ElementAt(i) });
                    }

                    if (_service.Create(toCreate))
                    {
                        return RedirectToRoute("Project_default", new { controller = "BidPackage", action = "Details", id = toCreate.Id });
                    }
                    else
                    {
                        Util.MapValidationErrors(_service.ValidationDic, this.ModelState);
                        return View("Create", viewModel);
                    }
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("Exception", ex.Message);
                    return View("Create", viewModel);
                }

            }
            else
            {
                return View("Create", viewModel);
            }
        }
示例#2
0
        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);
            }
        }
示例#3
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);
        }
示例#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();
        }