Exemple #1
0
        public AccomplishmentsDashboardViewData(FirmaSession currentFirmaSession, ProjectFirmaModels.Models.FirmaPage firmaPage, TenantAttribute tenantAttribute,
                                                List <ProjectFirmaModels.Models.Organization> organizations, List <int> calendarYears, int defaultBeginYear, int defaultEndYear,
                                                List <TaxonomyTier> taxonomyTiers, TaxonomyLevel associatePerformanceMeasureTaxonomyLevel) : base(currentFirmaSession, firmaPage)
        {
            var accomplishmentsDashboardOrganizationTypeName = FieldDefinitionEnum.ProjectStewardOrganizationDisplayName
                                                               .ToType().GetFieldDefinitionLabelPluralized();

            PageTitle        = "Accomplishments Dashboard";
            TenantAttribute  = tenantAttribute;
            Organizations    = organizations;
            CalendarYears    = calendarYears;
            DefaultBeginYear = defaultBeginYear;
            DefaultEndYear   = defaultEndYear;
            TaxonomyTiers    = taxonomyTiers;
            ParticipatingOrganizationsUrl = SitkaRoute <ResultsController> .BuildUrlFromExpression(x => x.ParticipatingOrganizations(UrlTemplate.Parameter1Int));

            OrganizationDashboardSummaryUrl = SitkaRoute <ResultsController> .BuildUrlFromExpression(x => x.OrganizationDashboardSummary(UrlTemplate.Parameter1Int));

            OrganizationAccomplishmentsUrl = SitkaRoute <ResultsController> .BuildUrlFromExpression(x => x.OrganizationAccomplishments(UrlTemplate.Parameter1Int, UrlTemplate.Parameter2Int));

            OrganizationDetailUrl = SitkaRoute <OrganizationController> .BuildUrlFromExpression(x => x.Detail(UrlTemplate.Parameter1Int, null));

            SpendingByOrganizationTypeAndOrganizationUrl = SitkaRoute <ResultsController> .BuildUrlFromExpression(x => x.SpendingByOrganizationTypeByOrganization(UrlTemplate.Parameter1Int, UrlTemplate.Parameter2Int, UrlTemplate.Parameter3Int));

            AccomplishmentsDashboardOrganizationTypeName = accomplishmentsDashboardOrganizationTypeName;
            TaxonomyTierDisplayName              = associatePerformanceMeasureTaxonomyLevel.GetFieldDefinition().GetFieldDefinitionLabel();
            HasSitkaAdminPermissions             = new SitkaAdminFeature().HasPermissionByFirmaSession(currentFirmaSession);
            ConfigureAccomplishmentsDashboardUrl = SitkaRoute <ResultsController> .BuildUrlFromExpression(c => c.ConfigureAccomplishmentsDashboard());
        }
Exemple #2
0
 public DetailViewData(FirmaSession currentFirmaSession, ProjectFirmaModels.Models.Tenant tenant, TenantAttribute tenantAttribute,
                       string editBasicsUrl, string editBoundingBoxUrl, string deleteTenantStyleSheetFileResourceUrl,
                       string deleteTenantSquareLogoFileResourceUrl, string deleteTenantBannerLogoFileResourceUrl,
                       string editBoundingBoxFormID, MapInitJson mapInitJson, DetailGridSpec gridSpec, string gridName,
                       string gridDataUrl, string editClassificationSystemsUrl, string editStylesheetUrl, string editTenantLogoUrl, string costTypes)
     : base(currentFirmaSession)
 {
     PageTitle                             = "Tenant Configuration";
     Tenant                                = tenant;
     TenantAttribute                       = tenantAttribute;
     EditBasicsUrl                         = editBasicsUrl;
     EditBoundingBoxUrl                    = editBoundingBoxUrl;
     EditClassificationSystemsUrl          = editClassificationSystemsUrl;
     EditStylesheetUrl                     = editStylesheetUrl;
     EditTenantLogoUrl                     = editTenantLogoUrl;
     PrimaryContactRoute                   = tenantAttribute.PrimaryContactPerson != null ? new SitkaRoute <UserController>(c => c.Detail(tenantAttribute.PrimaryContactPersonID)) : null;
     UserHasTenantManagePermissions        = new SitkaAdminFeature().HasPermissionByFirmaSession(currentFirmaSession);
     DeleteTenantStyleSheetFileResourceUrl = deleteTenantStyleSheetFileResourceUrl;
     DeleteTenantSquareLogoFileResourceUrl = deleteTenantSquareLogoFileResourceUrl;
     DeleteTenantBannerLogoFileResourceUrl = deleteTenantBannerLogoFileResourceUrl;
     IsCurrentTenant                       = HttpRequestStorage.Tenant == tenant;
     EditBoundingBoxFormID                 = editBoundingBoxFormID;
     MapInitJson                           = mapInitJson;
     GridSpec                              = gridSpec;
     GridName                              = gridName;
     GridDataUrl                           = gridDataUrl;
     UsesCostTypes                         = tenantAttribute.BudgetTypeID == BudgetType.AnnualBudgetByCostType.BudgetTypeID;
     CostTypes                             = costTypes;
 }
Exemple #3
0
        public IndexViewData(FirmaSession currentFirmaSession,
                             ProjectFirmaModels.Models.FirmaPage firmaPage,
                             string gridDataUrl,
                             List <SelectListItem> activeOrAllOrganizationsSelectListItems)
            : base(currentFirmaSession, firmaPage)
        {
            PageTitle = $"{FieldDefinitionEnum.Organization.ToType().GetFieldDefinitionLabelPluralized()}";

            HasOrganizationManagePermissions = new OrganizationManageFeature().HasPermissionByFirmaSession(CurrentFirmaSession);
            GridSpec = new OrganizationIndexGridSpec(currentFirmaSession, HasOrganizationManagePermissions)
            {
                ObjectNameSingular  = $"{FieldDefinitionEnum.Organization.ToType().GetFieldDefinitionLabel()}",
                ObjectNamePlural    = $"{FieldDefinitionEnum.Organization.ToType().GetFieldDefinitionLabelPluralized()}",
                SaveFiltersInCookie = true
            };

            GridName    = "organizationsGrid";
            GridDataUrl = gridDataUrl;

            PullOrganizationFromKeystoneUrl = SitkaRoute <OrganizationController> .BuildUrlFromExpression(x => x.PullOrganizationFromKeystone());

            UserIsSitkaAdmin   = new SitkaAdminFeature().HasPermissionByFirmaSession(currentFirmaSession);
            NewOrganizationUrl = SitkaRoute <OrganizationController> .BuildUrlFromExpression(t => t.New());

            ActiveOrAllOrganizationsSelectListItems = activeOrAllOrganizationsSelectListItems;
            ShowOnlyActiveOrAll = "ShowOnlyActiveOrAll";
        }
Exemple #4
0
        public IEnumerable <ValidationResult> Validate(ValidationContext validationContext)
        {
            var validationResults = new List <ValidationResult>();

            if (LogoFileResourceData != null && LogoFileResourceData.ContentLength > MaxLogoSizeInBytes)
            {
                var errorMessage = $"Logo is too large - must be less than {FileUtility.FormatBytes(MaxLogoSizeInBytes)}. Your logo was {FileUtility.FormatBytes(LogoFileResourceData.ContentLength)}.";
                validationResults.Add(new SitkaValidationResult <EditViewModel, HttpPostedFileBase>(errorMessage, x => x.LogoFileResourceData));
            }

            var isSitkaAdmin = new SitkaAdminFeature().HasPermissionByPerson(HttpRequestStorage.Person);

            if (OrganizationGuid.HasValue && isSitkaAdmin)
            {
                var organization = HttpRequestStorage.DatabaseEntities.Organizations.SingleOrDefault(x => x.OrganizationGuid == OrganizationGuid);
                if (organization != null && organization.OrganizationID != OrganizationID)
                {
                    validationResults.Add(new SitkaValidationResult <EditViewModel, Guid?>("This Guid is already associated with an Organization", x => x.OrganizationGuid));
                }
                else
                {
                    try
                    {
                        var keystoneClient       = new KeystoneDataClient();
                        var keystoneOrganization = keystoneClient.GetOrganization(OrganizationGuid.Value);
                    }
                    catch (Exception)
                    {
                        validationResults.Add(new SitkaValidationResult <EditViewModel, Guid?>("Organization Guid not found in Keystone", x => x.OrganizationGuid));
                    }
                }
            }

            return(validationResults);
        }
        public ViewResult ReleaseNotes()
        {
            var firmaPage    = FirmaPageTypeEnum.ReleaseNotes.GetFirmaPage();
            var releaseNotes = HttpRequestStorage.DatabaseEntities.ReleaseNotes.OrderByDescending(rn => rn.CreateDate).ToList();
            var userHasEditReleaseNotePermission = new SitkaAdminFeature().HasPermissionByFirmaSession(CurrentFirmaSession);
            var viewData = new ReleaseNotesViewData(CurrentFirmaSession, releaseNotes, SitkaRoute <ReleaseNoteController> .BuildUrlFromExpression(x => x.New()), "Release Notes", userHasEditReleaseNotePermission, firmaPage);

            return(RazorView <ReleaseNotes, ReleaseNotesViewData>(viewData));
        }
Exemple #6
0
        private PartialViewResult ViewEdit(EditViewModel viewModel)
        {
            var focusAreaStatusAsSelectListItems =
                FocusAreaStatus.All.ToSelectListWithEmptyFirstRow(k => k.FocusAreaStatusID.ToString(), v => v.FocusAreaStatusDisplayName);
            var regions =
                HttpRequestStorage.DatabaseEntities.DNRUplandRegions.ToList().OrderBy(x => x.DisplayName).ToSelectListWithEmptyFirstRow(k => k.DNRUplandRegionID.ToString(),
                                                                                                                                        v => v.DNRUplandRegionName);
            var isSitkaAdmin = new SitkaAdminFeature().HasPermissionByPerson(CurrentPerson);
            var viewData     = new EditViewData(focusAreaStatusAsSelectListItems, regions, isSitkaAdmin);

            return(RazorPartialView <Edit, EditViewData, EditViewModel>(viewData, viewModel));
        }
Exemple #7
0
        private PartialViewResult ViewEdit(EditViewModel viewModel, bool isInKeystone, Person currentPrimaryContactPerson)
        {
            var organizationTypesAsSelectListItems = HttpRequestStorage.DatabaseEntities.OrganizationTypes
                                                     .OrderBy(x => x.OrganizationTypeName)
                                                     .ToSelectListWithEmptyFirstRow(x => x.OrganizationTypeID.ToString(CultureInfo.InvariantCulture),
                                                                                    x => x.OrganizationTypeName);
            var activePeople = HttpRequestStorage.DatabaseEntities.People.GetActivePeople().Where(x => x.IsFullUser()).ToList();

            if (currentPrimaryContactPerson != null && !activePeople.Contains(currentPrimaryContactPerson))
            {
                activePeople.Add(currentPrimaryContactPerson);
            }
            var people = activePeople.OrderBy(x => x.FullNameLastFirst).ToSelectListWithEmptyFirstRow(x => x.PersonID.ToString(CultureInfo.InvariantCulture),
                                                                                                      x => x.FullNameFirstLastAndOrg);
            bool isSitkaAdmin = new SitkaAdminFeature().HasPermissionByPerson(CurrentPerson);
            var  viewData     = new EditViewData(organizationTypesAsSelectListItems, people, isInKeystone, isSitkaAdmin);

            return(RazorPartialView <Edit, EditViewData, EditViewModel>(viewData, viewModel));
        }
Exemple #8
0
        public void UpdateModel(Models.Organization organization, Person currentPerson)
        {
            organization.OrganizationName      = OrganizationName;
            organization.OrganizationShortName = OrganizationShortName;
            organization.OrganizationTypeID    = OrganizationTypeID.Value;
            organization.IsActive = IsActive;
            organization.PrimaryContactPersonID = PrimaryContactPersonID;
            organization.OrganizationUrl        = OrganizationUrl;
            if (LogoFileResourceData != null)
            {
                organization.LogoFileResource = FileResource.CreateNewFromHttpPostedFileAndSave(LogoFileResourceData, currentPerson);
            }

            var isSitkaAdmin = new SitkaAdminFeature().HasPermissionByPerson(currentPerson);

            if (isSitkaAdmin)
            {
                organization.OrganizationGuid = OrganizationGuid;
            }
        }
Exemple #9
0
        public void UpdateModel(ProjectFirmaModels.Models.Organization organization, FirmaSession currentFirmaSession, DatabaseEntities databaseEntities)
        {
            organization.OrganizationName      = OrganizationName;
            organization.OrganizationShortName = OrganizationShortName;
            organization.OrganizationTypeID    = OrganizationTypeID.Value;
            organization.IsActive = IsActive;
            organization.PrimaryContactPersonID = PrimaryContactPersonID;
            organization.OrganizationUrl        = OrganizationUrl;
            if (LogoFileResourceData != null)
            {
                var oldLogoFileResourceInfo = organization.LogoFileResourceInfo;
                organization.LogoFileResourceInfo = FileResourceModelExtensions.CreateNewFromHttpPostedFileAndSave(LogoFileResourceData, currentFirmaSession);
                oldLogoFileResourceInfo?.FileResourceData.Delete(databaseEntities);
                oldLogoFileResourceInfo?.Delete(databaseEntities);
            }

            var isSitkaAdmin = new SitkaAdminFeature().HasPermissionByFirmaSession(currentFirmaSession);

            if (isSitkaAdmin)
            {
                organization.KeystoneOrganizationGuid = KeystoneOrganizationGuid;
            }
        }
Exemple #10
0
        public IEnumerable <ValidationResult> Validate(ValidationContext validationContext)
        {
            var validationResults = new List <ValidationResult>();

            bool isNewOrganization = this.OrganizationID <= 0;

            // If New organization, make sure Org name not already taken by existing Org
            if (isNewOrganization)
            {
                var existingOrg = HttpRequestStorage.DatabaseEntities.Organizations.SingleOrDefault(o => o.OrganizationName.ToLower() == this.OrganizationName.ToLower());
                if (existingOrg != null)
                {
                    validationResults.Add(new SitkaValidationResult <EditViewModel, string>($"There is already an Organization named {this.OrganizationName}.", x => x.OrganizationName));
                }
            }
            else
            // If Existing Organization being edited, and name is being changed, make sure Org name not already taken by other Org
            {
                var existingOrgWithCurrentID = HttpRequestStorage.DatabaseEntities.Organizations.SingleOrDefault(o => o.OrganizationID == this.OrganizationID);
                Check.EnsureNotNull(existingOrgWithCurrentID, $"Was expecting to find existing record for Organization with OrganizationID {this.OrganizationID}; please contact Sitka support");
                bool organizationNameIsBeingChanged = existingOrgWithCurrentID.OrganizationName.ToLower() != this.OrganizationName.ToLower();
                if (organizationNameIsBeingChanged)
                {
                    var existingOrgWithNewName = HttpRequestStorage.DatabaseEntities.Organizations.SingleOrDefault(o => o.OrganizationName.ToLower() == this.OrganizationName.ToLower());
                    if (existingOrgWithNewName != null)
                    {
                        validationResults.Add(new SitkaValidationResult <EditViewModel, string>($"There is already another Organization named {this.OrganizationName}.", x => x.OrganizationName));
                    }
                }
            }

            if (string.IsNullOrEmpty(OrganizationShortName))
            {
                validationResults.Add(new SitkaValidationResult <EditViewModel, string>("The Short Name field is required.", x => x.OrganizationShortName));
            }

            if (LogoFileResourceData != null && LogoFileResourceData.ContentLength > MaxLogoSizeInBytes)
            {
                var errorMessage = $"Logo is too large - must be less than {FileUtility.FormatBytes(MaxLogoSizeInBytes)}. Your logo was {FileUtility.FormatBytes(LogoFileResourceData.ContentLength)}.";
                validationResults.Add(new SitkaValidationResult <EditViewModel, HttpPostedFileBase>(errorMessage, x => x.LogoFileResourceData));
            }

            var isSitkaAdmin = new SitkaAdminFeature().HasPermissionByFirmaSession(HttpRequestStorage.FirmaSession);

            if (KeystoneOrganizationGuid.HasValue && isSitkaAdmin)
            {
                var organization = HttpRequestStorage.DatabaseEntities.Organizations.SingleOrDefault(x => x.KeystoneOrganizationGuid == KeystoneOrganizationGuid);
                if (organization != null && organization.OrganizationID != OrganizationID)
                {
                    validationResults.Add(new SitkaValidationResult <EditViewModel, Guid?>("This Guid is already associated with an Organization", x => x.KeystoneOrganizationGuid));
                }
                else
                {
                    try
                    {
                        var keystoneClient       = new KeystoneDataClient();
                        var keystoneOrganization = keystoneClient.GetOrganization(KeystoneOrganizationGuid.Value);
                    }
                    catch (Exception)
                    {
                        validationResults.Add(new SitkaValidationResult <EditViewModel, Guid?>("Organization Guid not found in Keystone", x => x.KeystoneOrganizationGuid));
                    }
                }
            }

            return(validationResults);
        }