private SearchModel ValidateSearchData(SearchModel projectSearchModel, string currentProgram) { //Check completeness of Year if ((projectSearchModel.YearId.Equals(default(int)) && (!String.IsNullOrEmpty(projectSearchModel.Year)))) { //Lookup the YearID projectSearchModel.YearId = _surveyRepository.GetYearId(projectSearchModel.Year, DRCOG.Domain.Enums.TimePeriodType.Survey); } if ((!projectSearchModel.YearId.Equals(default(int)) && (String.IsNullOrEmpty(projectSearchModel.Year)))) { //Lookup the Year projectSearchModel.Year = _surveyRepository.GetYear((int)projectSearchModel.YearId); } //if(!projectSearchModel.SponsorContactId.Equals(default(int))) //{ // projectSearchModel.SponsorAgencyID = _surveyRepository.GetSpon //} //Check completeness of SponsorAgency if ((projectSearchModel.SponsorAgencyID == null) && (projectSearchModel.SponsorAgency != null)) { //Lookup the SponsorAgencyID projectSearchModel.SponsorAgencyID = _surveyRepository.GetSponsorAgencyID(projectSearchModel.SponsorAgency); } if ((projectSearchModel.SponsorAgencyID != null) && (projectSearchModel.SponsorAgency == null)) { //Lookup the SponsorAgency projectSearchModel.SponsorAgency = _surveyRepository.GetSponsorAgency(projectSearchModel.SponsorAgencyID); } string statusType = ""; switch (currentProgram) { case "Transportation Improvement Plan": statusType = "TIP Amendment Status"; break; case "Regional Transportation Plan": statusType = "RTP Amendment Status"; break; case "Transportation Improvement Survey": statusType = "Survey Amendment Status"; break; default: statusType = "Survey Amendment Status"; // If something goes wrong, assume Survey break; } //Check completeness of AmendmentStatus if ((projectSearchModel.AmendmentStatusID == null) && (projectSearchModel.AmendmentStatus != null)) { //Lookup the AmendmentStatusID projectSearchModel.AmendmentStatusID = _surveyRepository.GetStatusID(projectSearchModel.AmendmentStatus, statusType); } if ((projectSearchModel.AmendmentStatusID != null) && (projectSearchModel.AmendmentStatus == null)) { //Lookup the AmendmentStatus projectSearchModel.AmendmentStatus = _surveyRepository.GetStatus(projectSearchModel.AmendmentStatusID, statusType); } //Check completeness of ImprovementType if ((projectSearchModel.ImprovementTypeID == null) && (projectSearchModel.ImprovementType != null)) { //Lookup the ImprovementTypeID projectSearchModel.ImprovementTypeID = _surveyRepository.GetImprovementTypeID(projectSearchModel.ImprovementType); } if ((projectSearchModel.ImprovementTypeID != null) && (projectSearchModel.ImprovementType == null)) { //Lookup the ImprovementType projectSearchModel.ImprovementType = _surveyRepository.GetImprovementType(projectSearchModel.ImprovementTypeID); } //Check completeness of ProjectType if ((projectSearchModel.ProjectTypeID == null) && (projectSearchModel.ProjectType != null)) { //Lookup the ProjectTypeID projectSearchModel.ProjectTypeID = _surveyRepository.GetProjectTypeID(projectSearchModel.ProjectType); } if ((projectSearchModel.ProjectTypeID != null) && (projectSearchModel.ProjectType == null)) { //Lookup the ProjectType projectSearchModel.ProjectType = _surveyRepository.GetProjectType(projectSearchModel.ProjectTypeID); } return projectSearchModel; }
public ActionResult ProjectList(string year, string dft, string df, int? page) { LoadSessionData(); //if (String.IsNullOrEmpty(year)) //{ // year = _surveyRepository.GetCurrentRtpPlanYear(); // return RedirectToAction("Dashboard", new { @year = year }); //} //Make a ProjectViewModel object from the search criteria var projectSearchModel = new SearchModel(); Survey survey = _surveyRepository.GetSurvey(year); //If there is a 'df' dashboard filter, then the Session search criteria are reset. if (df != null) { //Reset Session search criteria CurrentSessionApplicationState.ProjectSearchModel = null; //Assign dashboard search filter criteria projectSearchModel.Year = year; //ToDo: convert 'df' we need to know what DashboardListType ('dft') it is (Sponsor = 1,ProjectType = 2,AmendmentStatus = 3) //ToDo: Assign the 'df' variable to projectSearchModel switch (dft) { case "AmendmentStatus": projectSearchModel.AmendmentStatus = df; break; case "Sponsor": projectSearchModel.SponsorAgency = df; break; case "ProjectType": projectSearchModel.ProjectType = df; break; case "ImprovementType": projectSearchModel.ImprovementType = df; break; case "MyProjects": projectSearchModel.SponsorAgency = df; projectSearchModel.SponsorContactId = CurrentSessionApplicationState.CurrentUser.profile.PersonID; break; } //Assume from dashboard that we only want active projects. //projectSearchModel.VersionStatusId = rtpSummary.IsPending ? (int)RTPVersionStatus.Pending : (int)RTPVersionStatus.Active; } else { if (dft != null) { switch (dft) { case "AmendmentStatus": projectSearchModel.AmendmentStatus = df; break; case "Sponsor": projectSearchModel.SponsorAgency = df; break; case "ProjectType": projectSearchModel.ProjectType = df; break; case "ImprovementType": projectSearchModel.ImprovementType = df; break; case "MyProjects": projectSearchModel.SponsorAgency = df; //projectSearchModel.SponsorContactId = appstate.CurrentUser.profile.PersonID; projectSearchModel.ShowMySponsorAgencies = true; projectSearchModel.ShowAllForAgency = true; projectSearchModel.Profile = CurrentSessionApplicationState.CurrentUser.profile; break; } } //Check to see if there is a projectSearchModel in Session. If not, then we have nt selected a dashboard or project search tab option. if ((CurrentSessionApplicationState.ProjectSearchModel as SearchModel) != null) { //Pull ProjectSearchModel from session and use projectSearchModel = (SearchModel)CurrentSessionApplicationState.ProjectSearchModel; } else { //Create search using RTPYear and Active Version only (default). projectSearchModel.Year = year; //projectSearchModel.VersionStatusId = rtpSummary.IsPending ? (int)RTPVersionStatus.Pending : (int)RTPVersionStatus.Active; } projectSearchModel.Year = year; projectSearchModel.ShowAllForAgency = true; } //Before passing the ProjectSearchModel, make sure it is validated projectSearchModel = this.ValidateSearchData((SearchModel)projectSearchModel, StringEnum.GetStringValue(CurrentSessionApplicationState.CurrentProgram)); //DTS NOTE: We don't fetch the model from the Repo directly because we will have to handle some complex criteria and filtering options var viewModel = new ProjectListViewModel(); viewModel.Current = survey; //viewModel.RtpSummary.RtpYear = year; viewModel.ProjectList = _surveyRepository.GetProjects(projectSearchModel); viewModel.ListCriteria = df; viewModel.ListType = dft; if (viewModel.ProjectList.Count > 1000) { int originalCount = viewModel.ProjectList.Count; viewModel.ProjectList = viewModel.ProjectList.Take(1000).ToList(); ViewData["ShowMessage"] = "Your results exceeded 1000 records. Please refine your search to narrow your results"; } //viewModel.RestorableProjectList = _surveyRepository.GetRestoreProjectList(_surveyRepository.GetYearId(year)); //Now save this projectSearchModel (for future searchs) CurrentSessionApplicationState.ProjectSearchModel = projectSearchModel; viewModel.Person = CurrentSessionApplicationState.CurrentUser; viewModel.Current.SponsorsOrganization = new SponsorOrganization() { OrganizationId = viewModel.Person.SponsorOrganizationId , OrganizationName = viewModel.Person.SponsorOrganizationName }; if (viewModel.Person.HasProjects || viewModel.Current.IsAdmin()) { if (viewModel.Current.IsAdmin()) { viewModel.Current.AgencyProjectList = viewModel.ProjectList; } else { viewModel.Current.AgencyProjectList = _surveyRepository.GetProjects(this.ValidateSearchData(new SearchModel() { ShowMySponsorAgencies = true, Year = year, ShowAllForAgency = true, Profile = CurrentSessionApplicationState.CurrentUser.profile }, StringEnum.GetStringValue(CurrentSessionApplicationState.CurrentProgram))); } int index = viewModel.Current.AgencyProjectList.FindIndex(FindIncompleteUpdateStatus); if (index >= 0) { viewModel.Current.ShowCertification = false; viewModel.Current.AgencyProjectList = null; // element exists, do what you need } else { viewModel.Current.ShowCertification = true; List<Project> projects = new List<Project>(); foreach (Project p in viewModel.Current.AgencyProjectList) { p.Funding = _surveyRepository.GetFunding(p.ProjectVersionId, p.TimePeriod); projects.Add(p); //_surveyRepository.GetSponsorContacts(projects.Add(p)); } viewModel.Current.AgencyProjectList = projects; viewModel.Current.AgencySponsorContacts = _surveyRepository.GetContact(new ContactSearch() { ShowAllForAgency = true , TimePeriodId = projectSearchModel.YearId , PersonId = CurrentSessionApplicationState.CurrentUser.profile.PersonID }); } } viewModel.Current.ProjectSponsorsModel = _surveyRepository.GetProjectSponsorsModel(default(int), year); return View(viewModel); }
public List<Project> GetProjects(SearchModel projectSearchModel) { List<Project> list = new List<Project>(); SqlCommand cmd = new SqlCommand("[Survey].[GetProjects]"); cmd.CommandType = CommandType.StoredProcedure; //I will speed up these queries by restricting the list on three items: TipYear, TipYearID or IsActive. -DBD if (!projectSearchModel.Exclude_Year) // If we are excluding a TipYear, then we must return everything (no SQL optimization) { if (!projectSearchModel.YearId.Equals(default(int))) cmd.Parameters.AddWithValue("@YEARID", projectSearchModel.YearId); } if (projectSearchModel.VersionStatusId > 0) { //if ((bool)projectSearchModel.ActiveVersion) cmd.Parameters.AddWithValue("@ISACTIVE", 1); cmd.Parameters.AddWithValue("@VersionStatusId", projectSearchModel.VersionStatusId); //else cmd.Parameters.AddWithValue("@ISACTIVE", 0); } if (!projectSearchModel.SponsorContactId.Equals(default(int))) { cmd.Parameters.AddWithValue("@SponsorContactId", projectSearchModel.SponsorContactId); } if (!projectSearchModel.SponsorAgencyID.Equals(default(int)) || projectSearchModel.SponsorAgencyID.HasValue) { cmd.Parameters.AddWithValue("@SponsorAgencyId", projectSearchModel.SponsorAgencyID); } if (projectSearchModel.ShowMySponsorAgencies) { cmd.Parameters.AddWithValue("@PersonId", projectSearchModel.Profile.PersonID); } //if (!projectSearchModel.SponsorContactId.Equals(default(int))) //{ cmd.Parameters.AddWithValue("@ShowAllForAgency", projectSearchModel.ShowAllForAgency); //} using (IDataReader rdr = this.ExecuteReader(cmd)) { while (rdr.Read()) { Project project = new Project() { ProjectVersionId = rdr["ProjectVersionId"].ToString().SmartParseDefault<int>(default(int)) , SponsorName = rdr["Sponsor"].ToString() , ProjectId = rdr["ProjectId"].ToString().SmartParseDefault<int>(default(int)) , TimePeriodId = rdr["TimePeriodId"].ToString().SmartParseDefault<int>(default(int)) , TimePeriod = rdr["TimePeriod"].ToString() , ProjectName = rdr["ProjectName"].ToString() , COGID = rdr["COGID"].ToString() , ImprovementType = rdr["ImprovementType"].ToString() , UpdateStatusId = rdr["UpdateStatusId"].ToString().SmartParseDefault<int>(default(int)) , ReportOnlyOpenDate = rdr["OpenYear"].ToString() , PreviousVersionId = rdr["PreviousProjectVersionID"].ToString().SmartParseDefault<int>(default(int)) }; list.Add(project); } } // These are processed via the SQL retrieval code optimization, so only process this one when exclude is checked. if ((projectSearchModel.Year != null) && (projectSearchModel.Exclude_Year)) { list = (from fli in list where (projectSearchModel.Year.ToWildcardRegex().IsMatch(fli.TimePeriod)) select fli).ToList<Project>(); } //if ((projectSearchModel.VersionStatusId > 0) && (projectSearchModel.Exclude_ActiveVersion)) //{ // list = (from fli in list // where (!fli.VersionStatus.Equals(projectSearchModel.VersionStatus)) // select fli).ToList<RtpSummary>(); //} // Set ToUpper to ensure results found. No case sensitive required. if (!String.IsNullOrEmpty(projectSearchModel.COGID)) { projectSearchModel.COGID = projectSearchModel.COGID.ToUpper(); } //Now that we have the base data, let's apply the rest of our parameters // Trying to list the paramters here by most restrictive first. Should make searches much quicker. -DBD if ((projectSearchModel.COGID != null) && (!projectSearchModel.COGID.Equals(""))) { list = (from fli in list where ((projectSearchModel.COGID.ToWildcardRegex().IsMatch(fli.COGID)) && (!projectSearchModel.Exclude_COGID)) || ((!projectSearchModel.COGID.ToWildcardRegex().IsMatch(fli.COGID)) && (projectSearchModel.Exclude_COGID)) select fli).ToList<Project>(); } if (projectSearchModel.SponsorAgency != null) { list = (from fli in list where ((fli.SponsorName == projectSearchModel.SponsorAgency) && (!projectSearchModel.Exclude_SponsorAgency)) || ((fli.SponsorName != projectSearchModel.SponsorAgency) && (projectSearchModel.Exclude_SponsorAgency)) select fli).ToList<Project>(); } //if (projectSearchModel.AmendmentStatus != null) //{ // list = (from fli in list // where ((fli.AmendmentStatus == projectSearchModel.AmendmentStatus) && (!projectSearchModel.Exclude_AmendmentStatus)) // || ((fli.AmendmentStatus != projectSearchModel.AmendmentStatus) && (projectSearchModel.Exclude_AmendmentStatus)) // select fli).ToList<RtpSummary>(); //} //if (projectSearchModel.ProjectType != null) //{ // list = (from fli in list // where ((fli.ProjectType == projectSearchModel.ProjectType) && (!projectSearchModel.Exclude_ProjectType)) // || ((fli.ProjectType != projectSearchModel.ProjectType) && (projectSearchModel.Exclude_ProjectType)) // select fli).ToList<RtpSummary>(); //} if ((projectSearchModel.ProjectName != null) && (!projectSearchModel.ProjectName.Equals(""))) { list = (from fli in list where ((projectSearchModel.ProjectName.ToWildcardRegex().IsMatch(fli.ProjectName)) && (!projectSearchModel.Exclude_ProjectName)) || ((!projectSearchModel.ProjectName.ToWildcardRegex().IsMatch(fli.ProjectName)) && (projectSearchModel.Exclude_ProjectName)) select fli).ToList<Project>(); } return list; }