public ExpendituresViewData(FirmaSession currentFirmaSession, ProjectFirmaModels.Models.Project project,
                                    ViewDataForAngularClass viewDataForAngularClass,
                                    ProposalSectionsStatus proposalSectionsStatus) : base(currentFirmaSession, project, ProjectCreateSection.ReportedExpenditures.ProjectCreateSectionDisplayName, proposalSectionsStatus)
        {
            ProjectID          = project.ProjectID;
            ViewDataForAngular = viewDataForAngularClass;
            RefreshUrl         = SitkaRoute <ProjectUpdateController> .BuildUrlFromExpression(x => x.RefreshExpenditures(project));

            DiffUrl = SitkaRoute <ProjectUpdateController> .BuildUrlFromExpression(x => x.DiffExpenditures(project));

            RequestFundingSourceUrl = SitkaRoute <HelpController> .BuildUrlFromExpression(x => x.MissingFundingSource());

            ShowCommentsSection = project.IsPendingApproval() || (project.ExpendituresComment != null &&
                                                                  project.ProjectApprovalStatus == ProjectApprovalStatus.Returned);
            CanEditComments = project.IsPendingApproval() && new ProjectEditAsAdminRegardlessOfStageFeature().HasPermission(currentFirmaSession, project).HasPermission;
        }
        public EditWqmpParcelsViewData(Person currentPerson,
                                       Models.WaterQualityManagementPlan waterQualityManagementPlan,
                                       MapInitJson mapInitJson)
            : base(currentPerson, NeptuneArea.OCStormwaterTools)
        {
            WaterQualityManagementPlan = waterQualityManagementPlan;
            EntityName = $"{FieldDefinitionType.WaterQualityManagementPlan.GetFieldDefinitionLabelPluralized()}";
            EntityUrl  = SitkaRoute <WaterQualityManagementPlanController> .BuildUrlFromExpression(c => c.Index());

            SubEntityName           = waterQualityManagementPlan.WaterQualityManagementPlanName;
            SubEntityUrl            = waterQualityManagementPlan.GetDetailUrl();
            PageTitle               = "Edit Associated Parcels";
            RecordedWQMPAreaInAcres = waterQualityManagementPlan.RecordedWQMPAreaInAcres;
            ViewDataForAngular      = new EditWqmpParcelsViewDataForAngular(mapInitJson,
                                                                            waterQualityManagementPlan.WaterQualityManagementPlanParcels.Select(x => x.Parcel).ToList());
        }
示例#3
0
        private IEnumerable <string> GenerateProjectListAsHtmlStrings(
            IReadOnlyCollection <Project> projects)
        {
            var projectsRemaining        = projects;
            var tenantCanonicalHostName  = FirmaWebConfiguration.GetCanonicalHostForBackgroundJob(TenantID);
            var projectListAsHtmlStrings = projectsRemaining.OrderBy(project => project.GetDisplayName()).Select(project =>
            {
                var projectUrl =
                    SitkaRoute <ProjectController> .BuildAbsoluteUrlHttpsFromExpression(controller =>
                                                                                        controller.Detail(project));
                projectUrl = SitkaRoute <ProjectController> .ReplaceHostNameForBackgroundJob(projectUrl, tenantCanonicalHostName);
                return($@"<div style=""font-size:smaller""><a href=""{projectUrl}"">{project.ProjectName}</a></div>");
            }).ToList();

            return(projectListAsHtmlStrings);
        }
示例#4
0
        public IndexViewData(Person currentPerson) : base(currentPerson, NeptunePage.GetNeptunePageByPageType(NeptunePageType.HRUCharacteristics))

        {
            RefreshUrl =
                SitkaRoute <HRUCharacteristicController> .BuildUrlFromExpression(x => x.RefreshHRUCharacteristics());

            HasAdminPermissions = new NeptuneAdminFeature().HasPermissionByPerson(currentPerson);
            EntityName          = "HRU Characteristics";
            PageTitle           = "Index";
            GridSpec            = new HRUCharacteristicGridSpec()
            {
                ObjectNameSingular = "HRU Characteristic", ObjectNamePlural = "HRU Characteristics", SaveFiltersInCookie = true
            };
            GridName    = "HRUCharacteristics";
            GridDataUrl = SitkaRoute <HRUCharacteristicController> .BuildUrlFromExpression(j => j.HRUCharacteristicGridJsonData());
        }
示例#5
0
        public PartialViewResult BulkRowBMPDelineation(BulkRowBMPDelineationViewModel viewModel)
        {
            var bmpDelineations = new List <Delineation>();

            if (viewModel.EntityIDList != null)
            {
                bmpDelineations = HttpRequestStorage.DatabaseEntities.Delineations
                                  .Where(x => viewModel.EntityIDList.Contains(x.DelineationID))
                                  .ToList().OrderBy(x => x.TreatmentBMP.TreatmentBMPName).ToList();
            }
            ModelState.Clear();
            var viewData = new BulkRowBMPDelineationViewData(bmpDelineations, SitkaRoute <BulkRowController> .BuildUrlFromExpression(x => x.MarkBMPDelineationAsVerifiedModal(null)), "BMP Delineation", "The BMP Delineations for the selected BMP Delineations will be marked as Verified until the delineation is updated or a Jurisdiction Manager later flags the data as provisional.");

            return(RazorPartialView <BulkRowBMPDelineation, BulkRowBMPDelineationViewData, BulkRowBMPDelineationViewModel
                                     >(viewData, viewModel));
        }
示例#6
0
        public InviteViewData(FirmaSession currentFirmaSession, ProjectFirmaModels.Models.FirmaPage psInfoPage) : base(currentFirmaSession, psInfoPage)
        {
            PageTitle  = "Invite User";
            EntityName = "Users";

            CancelUrl = SitkaRoute <UserController> .BuildUrlFromExpression(x => x.Index());

            IndexUrl = SitkaRoute <UserController> .BuildUrlFromExpression(x => x.Index());

            // ReSharper disable once ConvertClosureToMethodGroup
            var allOrganizations      = HttpRequestStorage.DatabaseEntities.Organizations.ToList().OrderBy(x => x.OrganizationName).ToList();
            var filteredOrganizations = allOrganizations.Where(o => o.KeystoneOrganizationGuid != null || o.IsUnknownOrUnspecified).ToList();

            //var filteredOrganizations = allOrganizations.ToList();
            OrganizationsSelectList = filteredOrganizations.ToSelectList(x => x.OrganizationID.ToString(), x => x.OrganizationName);
        }
        public CustomAttributesViewData(Person currentPerson,
                                        Models.ProjectUpdate projectUpdate,
                                        UpdateStatus updateStatus,
                                        ProjectAttributeValidationResult projectAttributeValidationResult,
                                        IEnumerable <Models.ProjectCustomAttributeType> projectCustomAttributeTypes)
            : base(currentPerson, projectUpdate.ProjectUpdateBatch, updateStatus, projectAttributeValidationResult.GetWarningMessages(), ProjectUpdateSection.ProjectAttributes.ProjectUpdateSectionDisplayName)
        {
            ProjectUpdate = projectUpdate;
            DiffUrl       = SitkaRoute <ProjectUpdateController> .BuildUrlFromExpression(x => x.DiffProjectAttributes(Project));

            RefreshUrl = SitkaRoute <ProjectUpdateController> .BuildUrlFromExpression(x => x.RefreshProjectAttributes(Project));

            ProjectCustomAttributeTypes = projectCustomAttributeTypes;
            SectionCommentsViewData     =
                new SectionCommentsViewData(projectUpdate.ProjectUpdateBatch.ProjectAttributesComment, projectUpdate.ProjectUpdateBatch.IsReturned);
        }
示例#8
0
        public ViewResult Index()
        {
            var externalMapLayersFirmaPage  = FirmaPageTypeEnum.ExternalMapLayers.GetFirmaPage();
            var externalMapLayerGridDataUrl = SitkaRoute <MapLayerController> .BuildUrlFromExpression(x => x.ExternalMapLayerGridJsonData());

            var internalMapLayersFirmaPage = FirmaPageTypeEnum.InternalMapLayers.GetFirmaPage();
            var externallySourcedGeospatialAreasInstructionsFirmaPage = FirmaPageTypeEnum.ExternallySourcedGeospatialAreasInstructions.GetFirmaPage();
            var geospatialAreaMapLayerGridDataUrl = SitkaRoute <MapLayerController> .BuildUrlFromExpression(x => x.GeospatialAreaMapLayerGridJsonData());

            var userCanManage = new FirmaAdminFeature().HasPermission(CurrentFirmaSession).HasPermission;

            var viewData = new IndexViewData(CurrentFirmaSession, externalMapLayersFirmaPage, externalMapLayerGridDataUrl,
                                             internalMapLayersFirmaPage, geospatialAreaMapLayerGridDataUrl, externallySourcedGeospatialAreasInstructionsFirmaPage, userCanManage);

            return(RazorView <Index, IndexViewData>(viewData));
        }
示例#9
0
        public ActionResult RequestSupport(RequestSupportViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(ViewRequestSupport(viewModel));
            }
            var supportRequestLog = SupportRequestLogModelExtensions.Create(CurrentFirmaSession);

            viewModel.UpdateModel(supportRequestLog, CurrentFirmaSession);
            HttpRequestStorage.DatabaseEntities.AllSupportRequestLogs.Add(supportRequestLog);
            SupportRequestLogModelExtensions.SendMessage(supportRequestLog, Request.UserHostAddress, Request.UserAgent, viewModel.CurrentPageUrl, supportRequestLog.SupportRequestType, HttpRequestStorage.DatabaseEntities, FirmaWebConfiguration.DefaultSupportPersonID);
            SetMessageForDisplay("Message sent. Thank you for contacting us.");
            var returnUrl = viewModel.ReturnUrl ?? SitkaRoute <HomeController> .BuildUrlFromExpression(x => x.Index());

            return(Redirect(returnUrl));
        }
示例#10
0
        private PartialViewResult ViewDelete(Person personToDelete, ConfirmDialogFormViewModel viewModel)
        {
            // This CanDeletePerson extension method is important when deleting users. We want to prevent accidental data loss
            // due to unforeseen cascade deletion.
            var canDelete = personToDelete.CanDeletePerson(CurrentPerson);

            var confirmMessage = canDelete
                ? $"Are you sure you want to delete {personToDelete.GetFullNameFirstLastAndOrg()}?"
                : ConfirmDialogFormViewData.GetStandardCannotDeletePersonMessage("Person",
                                                                                 SitkaRoute <UserController> .BuildLinkFromExpression(x => x.Detail(personToDelete), "User profile page"));

            var viewData = new ConfirmDialogFormViewData(confirmMessage, canDelete);

            return(RazorPartialView <ConfirmDialogForm, ConfirmDialogFormViewData, ConfirmDialogFormViewModel>(viewData,
                                                                                                               viewModel));
        }
        private PartialViewResult ViewEditProjectLocationSummaryPoint(Project project, ProjectLocationSimpleViewModel viewModel)
        {
            var layerGeoJsons = MapInitJson.GetConfiguredGeospatialAreaMapLayers();
            var mapInitJson   = new MapInitJson($"project_{project.ProjectID}_EditMap", 10, layerGeoJsons, MapInitJson.GetExternalMapLayers(), BoundingBox.MakeNewDefaultBoundingBox(), false)
            {
                AllowFullScreen = false, DisablePopups = true
            };
            var mapPostUrl = SitkaRoute <ProjectLocationController> .BuildUrlFromExpression(c => c.EditProjectLocationSimple(project, null));

            var mapFormID           = GenerateEditProjectLocationFormID(project.ProjectID);
            var geospatialAreaTypes = HttpRequestStorage.DatabaseEntities.GeospatialAreaTypes.OrderBy(x => x.GeospatialAreaTypeName)
                                      .ToList();
            var viewData = new ProjectLocationSimpleViewData(CurrentFirmaSession, mapInitJson, geospatialAreaTypes, null, mapPostUrl, mapFormID);

            return(RazorPartialView <ProjectLocationSimple, ProjectLocationSimpleViewData, ProjectLocationSimpleViewModel>(viewData, viewModel));
        }
        public ViewResult GrantModificationDetail(GrantModificationPrimaryKey grantModificationPrimaryKey)
        {
            var grantModification = grantModificationPrimaryKey.EntityObject;
            var userHasEditGrantModificationPermissions = new GrantModificationEditAsAdminFeature().HasPermissionByPerson(CurrentPerson);


            var internalGrantModificationNotesViewData = new EntityNotesViewData(
                EntityNote.CreateFromEntityNote(new List <IEntityNote>(grantModification.GrantModificationNoteInternals)),
                SitkaRoute <GrantModificationController> .BuildUrlFromExpression(x => x.NewGrantModificationNoteInternal(grantModificationPrimaryKey)),
                grantModification.GrantModificationName,
                userHasEditGrantModificationPermissions);

            var viewData = new GrantModificationDetailViewData(CurrentPerson, grantModification, internalGrantModificationNotesViewData);

            return(RazorView <GrantModificationDetail, GrantModificationDetailViewData>(viewData));
        }
示例#13
0
        public IndexViewData(FirmaSession currentFirmaSession, ProjectFirmaModels.Models.FirmaPage firmaPage) : base(currentFirmaSession, firmaPage)
        {
            PageTitle = $"{FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabel()} Tags";

            var hasTagManagePermissions = new FirmaAdminFeature().HasPermissionByFirmaSession(currentFirmaSession);

            GridSpec = new IndexGridSpec(hasTagManagePermissions)
            {
                ObjectNameSingular = "Tag", ObjectNamePlural = "Tags", SaveFiltersInCookie = true
            };
            GridName    = "TagsGrid";
            GridDataUrl = SitkaRoute <TagController> .BuildUrlFromExpression(tc => tc.IndexGridJsonData());

            HasTagManagePermissions = hasTagManagePermissions;
            NewUrl = SitkaRoute <TagController> .BuildUrlFromExpression(t => t.New());
        }
示例#14
0
        public ProjectAttachmentIndexViewData(FirmaSession currentFirmaSession) : base(currentFirmaSession)
        {
            PageTitle = $"Manage {FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabel()} Attachments";

            var hasManagePermissions = new ProjectAttachmentEditAsAdminFeature().HasPermissionByFirmaSession(currentFirmaSession);

            ProjectAttachmentGridSpec = new ProjectAttachmentGridSpec(hasManagePermissions)
            {
                ObjectNameSingular = $"Attachment", ObjectNamePlural = $"Attachments", SaveFiltersInCookie = true
            };

            ProjectAttachmentGridName    = "projectAttachmentGrid";
            ProjectAttachmentGridDataUrl = SitkaRoute <ProjectAttachmentController> .BuildUrlFromExpression(c => c.ProjectAttachmentGridJsonData());

            HasManagePermissions = hasManagePermissions;
        }
示例#15
0
        public IndexViewData(Person currentPerson) : base(currentPerson, null, NeptuneArea.OCStormwaterTools)
        {
            EntityName = "Page Content";
            PageTitle  = "Manage Page Content";

            GridSpec = new NeptunePageGridSpec(new NeptunePageViewListFeature().HasPermissionByPerson(currentPerson))
            {
                ObjectNameSingular  = "Page",
                ObjectNamePlural    = "Pages",
                SaveFiltersInCookie = true
            };
            GridName    = "neptunePagesGrid";
            GridDataUrl = SitkaRoute <NeptunePageController> .BuildUrlFromExpression(tc => tc.IndexGridJsonData());

            NeptunePageUrl = SitkaRoute <NeptunePageController> .BuildUrlFromExpression(x => x.NeptunePageDetails(UrlTemplate.Parameter1Int));
        }
示例#16
0
        public IndexViewData(FirmaSession currentFirmaSession, ProjectFirmaModels.Models.FirmaPage firmaPage, string gridDataUrl, List <SelectListItem> activeOnlyOrAllUsersSelectListItems) : base(currentFirmaSession, firmaPage)
        {
            PageTitle = "Users";
            GridSpec  = new IndexGridSpec(currentFirmaSession)
            {
                ObjectNameSingular = "User", ObjectNamePlural = "Users", SaveFiltersInCookie = true
            };
            GridName      = "UserGrid";
            GridDataUrl   = gridDataUrl;
            InviteUserUrl = SitkaRoute <UserController> .BuildUrlFromExpression(x => x.Invite());

            UserIsFirmaAdmin = new FirmaAdminFeature().HasPermissionByFirmaSession(currentFirmaSession);

            ActiveOnlyOrAllUsersSelectListItems = activeOnlyOrAllUsersSelectListItems;
            ShowOnlyActiveOrAll = "ShowOnlyActiveOrAll";
        }
        public FeaturedListViewData(FirmaSession currentFirmaSession, ProjectFirmaModels.Models.FirmaPage firmaPage, List <ProjectCustomGridConfiguration> projectCustomDefaultGridConfigurations)
            : base(currentFirmaSession, firmaPage)
        {
            PageTitle = $"Featured {FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabelPluralized()}";
            var projectDetails = HttpRequestStorage.DatabaseEntities.vProjectDetails.ToDictionary(x => x.ProjectID);

            ProjectCustomDefaultGridSpec = new ProjectCustomGridSpec(currentFirmaSession, projectCustomDefaultGridConfigurations, ProjectCustomGridType.Default.ToEnum, projectDetails, currentFirmaSession.Tenant)
            {
                ObjectNameSingular = $"{FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabel()}", ObjectNamePlural = $"{FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabelPluralized()}", SaveFiltersInCookie = true
            };

            ProjectCustomDefaultGridName    = "featuredListGrid";
            ProjectCustomDefaultGridDataUrl = SitkaRoute <ProjectCustomGridController> .BuildUrlFromExpression(tc => tc.FeaturedProjectsGridJsonData());

            EditUrl = SitkaRoute <ProjectController> .BuildUrlFromExpression(tc => tc.EditFeaturedProjects());
        }
        public ViewResult ObligationRequestDetail(ObligationRequestPrimaryKey obligationRequestPrimaryKey)
        {
            var obligationRequest = obligationRequestPrimaryKey.EntityObject;

            var userCanInteractWithSubmissionNotes = new ObligationRequestSubmissionNoteFeature().HasPermissionByFirmaSession(CurrentFirmaSession);

            var obligationRequestNotesViewData = new EntityNotesViewData(
                EntityNote.CreateFromEntityNote(obligationRequest.ObligationRequestSubmissionNotes),
                SitkaRoute <ObligationRequestSubmissionNotesController> .BuildUrlFromExpression(x => x.New(obligationRequest)),
                FieldDefinitionEnum.ObligationRequest.ToType().FieldDefinitionDisplayName,
                userCanInteractWithSubmissionNotes);

            var viewData = new ObligationRequestDetailViewData(CurrentFirmaSession, obligationRequest, userCanInteractWithSubmissionNotes, obligationRequestNotesViewData);

            return(RazorView <ObligationRequestDetail, ObligationRequestDetailViewData>(viewData));
        }
示例#19
0
        /*
         * public ObligationItemBudgetGridSpec ObligationItemBudgetGridSpec { get; }
         * public string ObligationItemBudgetGridName { get; }
         * public string ObligationItemBudgetGridDataUrl { get; }
         */

        public BudgetObjectCodeDetailViewData(FirmaSession currentFirmaSession, ProjectFirmaModels.Models.BudgetObjectCode budgetObjectCode) : base(currentFirmaSession)
        {
            PageTitle  = $"Budget Object Code: {budgetObjectCode.GetDisplayName()}";
            EntityName = "Budget Object Code Detail";

            BudgetObjectCode         = budgetObjectCode;
            BudgetObjectCodeIndexUrl = SitkaRoute <BudgetObjectCodeController> .BuildUrlFromExpression(c => c.BudgetObjectCodeIndex());

            ContractualInvoiceGridName        = "budgetObjectCodeItemInvoices";
            ContractualInvoiceGridSpec        = new ContractualInvoiceGridSpec(currentFirmaSession);
            ContractualItemInvoiceGridDataUrl = SitkaRoute <BudgetObjectCodeController> .BuildUrlFromExpression(fc => fc.ContractualInvoiceGridOnBudgetObjectCodeDetailJsonData(budgetObjectCode));

            //ObligationItemBudgetGridName = "budgetObjectCodeItemBudgets";
            //ObligationItemBudgetGridSpec = new ObligationItemBudgetGridSpec(currentFirmaSession);
            //ObligationItemBudgetGridDataUrl = SitkaRoute<BudgetObjectCodeController>.BuildUrlFromExpression(fc => fc.ObligationItemBudgetGridOnBudgetObjectCodeDetailJsonData(budgetObjectCode));
        }
示例#20
0
        public DetailViewData(FirmaSession currentFirmaSession,
                              ProjectFirmaModels.Models.TaxonomyTrunk taxonomyTrunk,
                              ProjectLocationsMapInitJson projectLocationsMapInitJson,
                              ProjectLocationsMapViewData projectLocationsMapViewData, bool canHaveAssociatedPerformanceMeasures,
                              RelatedPerformanceMeasuresViewData relatedPerformanceMeasuresViewData,
                              List <PerformanceMeasureChartViewData> performanceMeasureChartViewDatas, TaxonomyLevel taxonomyLevel,
                              List <ProjectCustomGridConfiguration> projectCustomDefaultGridConfigurations) : base(currentFirmaSession)
        {
            TaxonomyTrunk                       = taxonomyTrunk;
            TaxonomyTrunkDisplayName            = FieldDefinitionEnum.TaxonomyTrunk.ToType().GetFieldDefinitionLabel();
            TaxonomyTrunkDisplayNamePluralized  = FieldDefinitionEnum.TaxonomyTrunk.ToType().GetFieldDefinitionLabelPluralized();
            TaxonomyBranchDisplayNamePluralized = FieldDefinitionEnum.TaxonomyBranch.ToType().GetFieldDefinitionLabelPluralized();
            TaxonomyLeafDisplayNamePluralized   = FieldDefinitionEnum.TaxonomyLeaf.ToType().GetFieldDefinitionLabelPluralized();

            ProjectLocationsMapInitJson = projectLocationsMapInitJson;
            ProjectLocationsMapViewData = projectLocationsMapViewData;

            ProjectMapFilteredUrl = ProjectLocationsMapInitJson.ProjectMapCustomization.GetCustomizedUrl();

            PageTitle  = taxonomyTrunk.GetDisplayName();
            EntityName = TaxonomyTrunkDisplayName;
            IndexUrl   = SitkaRoute <ProgramInfoController> .BuildUrlFromExpression(c => c.Taxonomy());

            UserHasTaxonomyTrunkManagePermissions = new TaxonomyTrunkManageFeature().HasPermissionByFirmaSession(CurrentFirmaSession);
            UserHasProjectTaxonomyTrunkExpenditureManagePermissions = new TaxonomyTrunkManageFeature().HasPermissionByFirmaSession(CurrentFirmaSession);
            EditTaxonomyTrunkUrl = SitkaRoute <TaxonomyTrunkController> .BuildUrlFromExpression(c => c.Edit(taxonomyTrunk.TaxonomyTrunkID));

            TaxonomyBranchIndexUrl = SitkaRoute <TaxonomyBranchController> .BuildUrlFromExpression(c => c.Index());

            var projectDetails = HttpRequestStorage.DatabaseEntities.vProjectDetails.ToDictionary(x => x.ProjectID);

            ProjectCustomDefaultGridSpec = new ProjectCustomGridSpec(currentFirmaSession, projectCustomDefaultGridConfigurations, ProjectCustomGridType.Default.ToEnum, projectDetails, currentFirmaSession.Tenant)
            {
                ObjectNameSingular = $"{FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabel()}", ObjectNamePlural = $"{FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabelPluralized()}", SaveFiltersInCookie = true
            };

            ProjectCustomDefaultGridName    = "taxonomyTrunkProjectListGrid";
            ProjectCustomDefaultGridDataUrl = SitkaRoute <ProjectCustomGridController> .BuildUrlFromExpression(tc => tc.TaxonomyTrunkProjectsGridJsonData(taxonomyTrunk));

            ProjectTaxonomyViewData = new ProjectTaxonomyViewData(taxonomyTrunk, taxonomyLevel);

            CanHaveAssociatedPerformanceMeasures = canHaveAssociatedPerformanceMeasures;
            PerformanceMeasureChartViewDatas     = performanceMeasureChartViewDatas;
            RelatedPerformanceMeasuresViewData   = relatedPerformanceMeasuresViewData;

            EditChildrenSortOrderUrl = SitkaRoute <TaxonomyTrunkController> .BuildUrlFromExpression(x => x.EditChildrenSortOrder(taxonomyTrunk));
        }
示例#21
0
        public static void SendApprovalMessage(Project project)
        {
            Check.Require(project.ProjectApprovalStatus == ProjectApprovalStatus.Approved, "Need to be in Approved state to send the Approved email!");
            var submitterPerson = project.ProposingPerson;
            var subject         = $"Your {Models.FieldDefinition.Project.GetFieldDefinitionLabel()} \"{project.DisplayName.ToEllipsifiedString(80)}\" was approved!";
            var detailUrl       = SitkaRoute <ProjectController> .BuildAbsoluteUrlHttpsFromExpression(x => x.Detail(project.ProjectID));

            var projectListUrl = SitkaRoute <ProjectController> .BuildAbsoluteUrlHttpsFromExpression(x => x.Index());

            var message     = $@"
<p>Dear {submitterPerson.FullNameFirstLastAndOrg},</p>
<p>The {MultiTenantHelpers.GetToolDisplayName()} {Models.FieldDefinition.Project.GetFieldDefinitionLabel()} submitted on {project.SubmissionDate.ToStringDate()} was approved by {project.ReviewedByPerson.FullNameFirstLastAndOrg}.</p>
<p>This {Models.FieldDefinition.Project.GetFieldDefinitionLabel()} is now on the <a href=""{projectListUrl}"">{MultiTenantHelpers.GetToolDisplayName()} {Models.FieldDefinition.Project.GetFieldDefinitionLabel()} List</a> and is visible to the public via the {Models.FieldDefinition.Project.GetFieldDefinitionLabel()} detail page.</p>
<p><a href=""{detailUrl}"">View this {Models.FieldDefinition.Project.GetFieldDefinitionLabel()}</a></p>
<p>Thank you for using the {MultiTenantHelpers.GetToolDisplayName()}!</p>
<p>{$"- {MultiTenantHelpers.GetToolDisplayName()} team"}</p>
";
            var mailMessage = new MailMessage {
                Subject = subject, Body = message, IsBodyHtml = true
            };
            var emailsToSendTo = new List <string> {
                submitterPerson.Email
            };
            var emailsToReplyTo = new List <string> {
                project.ReviewedByPerson.Email
            };
            var primaryContactPerson = project.GetPrimaryContact();

            if (primaryContactPerson != null && !String.Equals(primaryContactPerson.Email, submitterPerson.Email, StringComparison.InvariantCultureIgnoreCase))
            {
                if (string.IsNullOrEmpty(primaryContactPerson.Email))
                {
                    Logger.Warn($"Primary Contact is missing email address and will not get an Approval Message. Primary Contact ID:{primaryContactPerson.PersonID} Primary Contact Name:{primaryContactPerson.FullNameFirstLast} Project ID:{project.ProjectID} ");
                }
                else
                {
                    emailsToSendTo.Add(primaryContactPerson.Email);
                }
            }

            SendMessageAndLogNotification(project,
                                          mailMessage,
                                          emailsToSendTo,
                                          emailsToReplyTo,
                                          GetProjectStewardPeople(project).Select(x => x.Email).ToList(),
                                          NotificationType.ProjectUpdateApproved);
        }
示例#22
0
        public DetailViewData(Person currentPerson,
                              Person personToView,
                              UserNotificationGridSpec userNotificationGridSpec,
                              string userNotificationGridName,
                              string userNotificationGridDataUrl,
                              string activateInactivateUrl)
            : base(currentPerson, NeptuneArea.OCStormwaterTools)
        {
            Person     = personToView;
            PageTitle  = personToView.GetFullNameFirstLast() + (!personToView.IsActive ? " (inactive)" : string.Empty);
            EntityName = "Users";
            //TODO: This gets pulled up to root
            EditPersonOrganizationPrimaryContactUrl = SitkaRoute <PersonOrganizationController> .BuildUrlFromExpression(c => c.EditPersonOrganizationPrimaryContacts(personToView));

            IndexUrl = SitkaRoute <UserController> .BuildUrlFromExpression(x => x.Index());

            JurisdictionIndexUrl = SitkaRoute <JurisdictionController> .BuildUrlFromExpression(x => x.Index());

            UserHasPersonViewPermissions       = new UserViewFeature().HasPermission(currentPerson, personToView).HasPermission;
            UserCanManageThisPersonPermissions = new UserEditRoleFeature().HasPermission(currentPerson, personToView).HasPermission;
            UserCanManagePeople = new UserEditFeature().HasPermissionByPerson(currentPerson);
            UserIsAdmin         = new NeptuneAdminFeature().HasPermissionByPerson(currentPerson);
            UserHasViewEverythingPermissions = new NeptuneAdminFeature().HasPermissionByPerson(currentPerson);

            if (UserCanManagePeople)
            {
                EntityUrl = IndexUrl;
            }

            IsViewingSelf = currentPerson != null && currentPerson.PersonID == personToView.PersonID;
            EditRolesLink = UserCanManageThisPersonPermissions
                ? ModalDialogFormHelper.MakeEditIconLink(SitkaRoute <UserController> .BuildUrlFromExpression(c => c.EditRoles(personToView)),
                                                         $"Edit Roles for User - {personToView.GetFullNameFirstLast()}",
                                                         true)
                : new HtmlString(string.Empty);

            EditJurisdictionsLink = UserCanManageThisPersonPermissions
                ? ModalDialogFormHelper.MakeEditIconLink(SitkaRoute <UserController> .BuildUrlFromExpression(c => c.EditJurisdiction(personToView)),
                                                         $"Edit Assigned Jurisdictions for User - {personToView.GetFullNameFirstLast()}",
                                                         true)
                : new HtmlString(string.Empty);

            UserNotificationGridSpec    = userNotificationGridSpec;
            UserNotificationGridName    = userNotificationGridName;
            UserNotificationGridDataUrl = userNotificationGridDataUrl;
            ActivateInactivateUrl       = activateInactivateUrl;
        }
示例#23
0
        private PartialViewResult ViewDeleteTaxonomyLeaf(TaxonomyLeaf taxonomyLeaf,
                                                         ConfirmDialogFormViewModel viewModel)
        {
            var canDelete = !taxonomyLeaf.HasDependentObjects() &&
                            HttpRequestStorage.DatabaseEntities.TaxonomyLeafs.Count() > 1;
            var taxonomyLeafDisplayName = FieldDefinitionEnum.TaxonomyLeaf.ToType().GetFieldDefinitionLabel();
            var confirmMessage          = canDelete
                ? string.Format("Are you sure you want to delete this {0} '{1}'?", taxonomyLeafDisplayName,
                                taxonomyLeaf.GetDisplayName())
                : ConfirmDialogFormViewData.GetStandardCannotDeleteMessage(taxonomyLeafDisplayName,
                                                                           SitkaRoute <TaxonomyLeafController> .BuildLinkFromExpression(x => x.Detail(taxonomyLeaf), "here"));

            var viewData = new ConfirmDialogFormViewData(confirmMessage, canDelete);

            return(RazorPartialView <ConfirmDialogForm, ConfirmDialogFormViewData, ConfirmDialogFormViewModel>(viewData,
                                                                                                               viewModel));
        }
示例#24
0
        public IndexViewData(FirmaSession currentFirmaSession, List <ProjectFirmaModels.Models.Organization> projectStewardOrganizations, ProjectFirmaModels.Models.FirmaPage firmaPage)
            : base(currentFirmaSession, firmaPage)
        {
            PageTitle = $"{FieldDefinitionEnum.ProjectStewardOrganizationDisplayName.ToType().GetFieldDefinitionLabelPluralized()}";

            GridSpec = new IndexGridSpec(currentFirmaSession)
            {
                ObjectNameSingular  = $"{FieldDefinitionEnum.ProjectStewardOrganizationDisplayName.ToType().GetFieldDefinitionLabel()}",
                ObjectNamePlural    = $"{FieldDefinitionEnum.ProjectStewardOrganizationDisplayName.ToType().GetFieldDefinitionLabelPluralized()}",
                SaveFiltersInCookie = true
            };

            GridName    = "organizationsGrid";
            GridDataUrl = SitkaRoute <ProjectStewardOrganizationController> .BuildUrlFromExpression(tc => tc.IndexGridJsonData());

            ProjectStewardOrganizations = projectStewardOrganizations;
        }
示例#25
0
        private PartialViewResult ViewDeleteProjectType(ProjectType projectType,
                                                        ConfirmDialogFormViewModel viewModel)
        {
            var canDelete = !projectType.HasDependentObjects() &&
                            HttpRequestStorage.DatabaseEntities.ProjectTypes.Count() > 1;
            var projectTypeDisplayName = FieldDefinition.ProjectType.GetFieldDefinitionLabel();
            var confirmMessage         = canDelete
                ? string.Format("Are you sure you want to delete this {0} '{1}'?", projectTypeDisplayName,
                                projectType.DisplayName)
                : ConfirmDialogFormViewData.GetStandardCannotDeleteMessage(projectTypeDisplayName,
                                                                           SitkaRoute <ProjectTypeController> .BuildLinkFromExpression(x => x.Detail(projectType), "here"));

            var viewData = new ConfirmDialogFormViewData(confirmMessage, canDelete);

            return(RazorPartialView <ConfirmDialogForm, ConfirmDialogFormViewData, ConfirmDialogFormViewModel>(viewData,
                                                                                                               viewModel));
        }
示例#26
0
        public IndexViewData(FirmaSession currentFirmaSession, ProjectFirmaModels.Models.FirmaPage firmaPage) : base(currentFirmaSession, firmaPage)
        {
            PageTitle = $"{FieldDefinitionEnum.ContactType.ToType().GetFieldDefinitionLabelPluralized()}";

            var hasManagePermissions = new ContactRelationshipTypeManageFeature().HasPermissionByFirmaSession(currentFirmaSession);

            ContactRelationshipTypeGridSpec = new ContactRelationshipTypeGridSpec(hasManagePermissions)
            {
                ObjectNameSingular = $"{FieldDefinitionEnum.ProjectContactRelationshipType.ToType().GetFieldDefinitionLabel()}", ObjectNamePlural = $"{ FieldDefinitionEnum.ProjectContactRelationshipType.ToType().GetFieldDefinitionLabelPluralized()}", SaveFiltersInCookie = true
            };

            ContactRelationshipTypeGridName    = "relationshipTypeGrid";
            ContactRelationshipTypeGridDataUrl = SitkaRoute <ContactRelationshipTypeController> .BuildUrlFromExpression(otc => otc.ContactRelationshipTypeGridJsonData());

            HasManagePermissions     = hasManagePermissions;
            NewProjectAssociationUrl = SitkaRoute <ContactRelationshipTypeController> .BuildUrlFromExpression(t => t.NewContactRelationshipType());
        }
示例#27
0
        private void AddMandatoryFieldsBefore(bool userHasTagManagePermissions, bool userHasReportDownloadPermissions,
                                              bool userHasDeletePermissions, ProjectCustomGridTypeEnum projectCustomGridTypeEnum)
        {
            switch (projectCustomGridTypeEnum)
            {
            case ProjectCustomGridTypeEnum.Default:
            case ProjectCustomGridTypeEnum.Full:
                if (userHasTagManagePermissions)
                {
                    BulkTagModalDialogForm = new BulkTagModalDialogForm(
                        SitkaRoute <TagController> .BuildUrlFromExpression(x => x.BulkTagProjects(null)),
                        $"Tag Checked {FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabelPluralized()}",
                        $"Tag {FieldDefinitionEnum.Project.ToType().GetFieldDefinitionLabelPluralized()}");
                }
                if (userHasTagManagePermissions)
                {
                    AddCheckBoxColumn();
                    Add("ProjectID", x => x.ProjectID, 0);
                }
                if (userHasDeletePermissions)
                {
                    Add(string.Empty, x => DhtmlxGridHtmlHelpers.MakeDeleteIconAndLinkBootstrap(x.GetDeleteUrl(), true), 30,
                        DhtmlxGridColumnFilterType.None);
                }
                Add(string.Empty,
                    x => UrlTemplate.MakeHrefString(x.GetFactSheetUrl(),
                                                    FirmaDhtmlxGridHtmlHelpers.FactSheetIcon.ToString() +
                                                    $"<span class=\"sr-only\">Download the Fact Sheet for {x.ProjectName}</span>"), 30,
                    DhtmlxGridColumnFilterType.None);
                break;

            case ProjectCustomGridTypeEnum.Reports:
                if (userHasReportDownloadPermissions)
                {
                    GenerateReportModalDialogForm = new SelectProjectsModalDialogForm(
                        SitkaRoute <ReportsController> .BuildUrlFromExpression(x =>
                                                                               x.SelectReportToGenerateFromSelectedProjects()), $"Generate Reports", $"Confirm Report Generation");
                }
                AddCheckBoxColumn();
                Add("ProjectID", x => x.ProjectID, 0);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(projectCustomGridTypeEnum), projectCustomGridTypeEnum, null);
            }
        }
        public ActionResult EditLocation(OnlandVisualTrashAssessmentAreaPrimaryKey onlandVisualTrashAssessmentAreaPrimaryKey, EditLocationViewModel viewModel)
        {
            var onlandVisualTrashAssessmentArea = onlandVisualTrashAssessmentAreaPrimaryKey.EntityObject;

            if (!ModelState.IsValid)
            {
                return(ViewEditLocation(onlandVisualTrashAssessmentArea, viewModel));
            }

            viewModel.UpdateModel(onlandVisualTrashAssessmentArea);

            SetMessageForDisplay("Successfully updated OVTA Area location");

            return(Redirect(
                       SitkaRoute <OnlandVisualTrashAssessmentAreaController> .BuildUrlFromExpression(x =>
                                                                                                      x.Detail(onlandVisualTrashAssessmentAreaPrimaryKey))));
        }
        public static HtmlString MakeImpersonateSinglePageHtmlLink(Person personToImpersonate)
        {
            if (personToImpersonate == null)
            {
                return(new HtmlString(String.Empty));
            }

            string theLinkUrl = ImpersonateUserSinglePageUrlTemplate.ParameterReplace(personToImpersonate.PersonID);

            string linkHtmlTemplate = "<span class=\"glyphicon glyphicon-{0}\" aria-hidden=\"true\" title=\"Impersonate {1}\"></span>";
            // I wish Bootstrap offered a "domino" or mask icon, but this is all I could come up with quickly. Feel free to change these! -- SLG
            string linkHtml = String.Format(linkHtmlTemplate, "user", personToImpersonate.GetFullNameFirstLast());
            // Controller is actually irrelevant here
            string theHref = SitkaRoute <UserController> .BuildLinkFromUrl(theLinkUrl, linkHtml, $"impersonate user {personToImpersonate.GetFullNameFirstLast()}");

            return(new HtmlString(theHref));
        }
示例#30
0
 public FieldDefinitionGridSpec(bool hasManagePermissions)
 {
     if (hasManagePermissions)
     {
         Add(string.Empty,
             a =>
             UrlTemplate.MakeHrefString(SitkaRoute <FieldDefinitionController> .BuildUrlFromExpression(t => t.Edit(a)),
                                        DhtmlxGridHtmlHelpers.EditIconBootstrap.ToString(),
                                        new Dictionary <string, string> {
             { "target", "_blank" }
         }),
             30);
     }
     Add("Label", a => a.FieldDefinitionTypeDisplayName, 200);
     Add("Has Custom Field Definition?", a => a.HasCustomFieldDefinition().ToYesNo(), 100, DhtmlxGridColumnFilterType.SelectFilterStrict);
     Add("Custom Definition", a => a.HasCustomFieldDefinition() ? a.GetFieldDefinitionData().FieldDefinitionValueHtmlString.ToString() : string.Empty, 0);
 }