public ActionResult EditBasics(EditBasicsViewModel viewModel) { if (!ModelState.IsValid) { return(ViewEditBasics(viewModel)); } var tenantAttribute = HttpRequestStorage.DatabaseEntities.AllTenantAttributes.Single(a => a.TenantID == viewModel.TenantID); var oldTenantAttributeTaxonomyLevel = tenantAttribute.TaxonomyLevel; var oldTenantAttributeAssociatePerformanceMeasureTaxonomyLevelID = tenantAttribute.AssociatePerfomanceMeasureTaxonomyLevelID; viewModel.UpdateModel(tenantAttribute, CurrentFirmaSession); if (viewModel.BudgetTypeID == BudgetType.AnnualBudgetByCostType.BudgetTypeID) { var existingCostTypes = HttpRequestStorage.DatabaseEntities.CostTypes.ToList(); var allCostTypes = HttpRequestStorage.DatabaseEntities.AllCostTypes.Local; viewModel.UpdateCostTypes(existingCostTypes, allCostTypes); } var clearOutTaxonomyLeafPerformanceMeasures = oldTenantAttributeTaxonomyLevel.TaxonomyLevelID != tenantAttribute.TaxonomyLevelID || oldTenantAttributeAssociatePerformanceMeasureTaxonomyLevelID != tenantAttribute.AssociatePerfomanceMeasureTaxonomyLevelID; if (clearOutTaxonomyLeafPerformanceMeasures) { var taxonomyLeafPerformanceMeasures = HttpRequestStorage.DatabaseEntities.TaxonomyLeafPerformanceMeasures.ToList(); foreach (var taxonomyLeafPerformanceMeasure in taxonomyLeafPerformanceMeasures) { taxonomyLeafPerformanceMeasure.DeleteFull(HttpRequestStorage.DatabaseEntities); } } // if we are shrinking the number of tiers, we need to collapse child records to hidden parent record(s) named "Default" if (oldTenantAttributeTaxonomyLevel.TaxonomyLevelID > tenantAttribute.TaxonomyLevelID) { var newTaxonomyLevel = TaxonomyLevel.ToType(tenantAttribute.TaxonomyLevelID); const string defaultTrunkOrBranchName = "Default"; if (newTaxonomyLevel == TaxonomyLevel.Branch) { // create a new "Default" trunk to move all branches to // ensure that name does not already exist var newTaxonomyTrunkDefault = HttpRequestStorage.DatabaseEntities.TaxonomyTrunks.SingleOrDefault(x => x.TaxonomyTrunkName == defaultTrunkOrBranchName) ?? new TaxonomyTrunk(defaultTrunkOrBranchName); var taxonomyBranches = HttpRequestStorage.DatabaseEntities.TaxonomyBranches.ToList(); foreach (var taxonomyBranch in taxonomyBranches) { taxonomyBranch.TaxonomyTrunk = newTaxonomyTrunkDefault; } HttpRequestStorage.DatabaseEntities.SaveChanges(); var taxonomyTrunks = HttpRequestStorage.DatabaseEntities.TaxonomyTrunks.Where(x => x.TaxonomyTrunkID != newTaxonomyTrunkDefault.TaxonomyTrunkID).ToList(); foreach (var taxonomyTrunk in taxonomyTrunks) { taxonomyTrunk.DeleteFull(HttpRequestStorage.DatabaseEntities); } } else if (newTaxonomyLevel == TaxonomyLevel.Leaf) { var newTaxonomyTrunkDefault = HttpRequestStorage.DatabaseEntities.TaxonomyTrunks.SingleOrDefault(x => x.TaxonomyTrunkName == defaultTrunkOrBranchName) ?? new TaxonomyTrunk(defaultTrunkOrBranchName); var newTaxonomyBranchDefault = HttpRequestStorage.DatabaseEntities.TaxonomyBranches.SingleOrDefault(x => x.TaxonomyBranchName == defaultTrunkOrBranchName) ?? new TaxonomyBranch(newTaxonomyTrunkDefault, defaultTrunkOrBranchName); var taxonomyLeaves = HttpRequestStorage.DatabaseEntities.TaxonomyLeafs.ToList(); foreach (var taxonomyLeaf in taxonomyLeaves) { taxonomyLeaf.TaxonomyBranch = newTaxonomyBranchDefault; } HttpRequestStorage.DatabaseEntities.SaveChanges(); var taxonomyBranches = HttpRequestStorage.DatabaseEntities.TaxonomyBranches.Where(x => x.TaxonomyBranchID != newTaxonomyBranchDefault.TaxonomyBranchID).ToList(); foreach (var taxonomyBranch in taxonomyBranches) { taxonomyBranch.DeleteFull(HttpRequestStorage.DatabaseEntities); } var taxonomyTrunks = HttpRequestStorage.DatabaseEntities.TaxonomyTrunks.Where(x => x.TaxonomyTrunkID != newTaxonomyTrunkDefault.TaxonomyTrunkID).ToList(); foreach (var taxonomyTrunk in taxonomyTrunks) { taxonomyTrunk.DeleteFull(HttpRequestStorage.DatabaseEntities); } } } MultiTenantHelpers.ClearTenantAttributeCacheForAllTenants(); return(new ModalDialogFormJsonResult(new SitkaRoute <TenantController>(c => c.Detail()).BuildUrlFromExpression())); }