private IEnumerable <DriverResult> ProperEditor(TerritoryPart part, dynamic shapeHelper) { var shapes = new List <DriverResult>(); // The territory here must exist in a hierarchy and with a selected unique record. var territoryInternals = _territoriesService .GetAvailableTerritoryInternals(part.HierarchyPart) .ToList(); var model = new TerritoryPartViewModel() { AvailableTerritoryInternalRecords = territoryInternals, Hierarchy = part.HierarchyPart, Parent = part.ParentPart, Part = part }; if (part.Record.TerritoryInternalRecord != null) { model.AvailableTerritoryInternalRecords.Add(part.Record.TerritoryInternalRecord); model.SelectedRecordId = part.Record.TerritoryInternalRecord.Id.ToString(); } shapes.Add(ContentShape("Parts_TerritoryPart_Edit", () => shapeHelper.EditorTemplate( TemplateName: "Parts/TerritoryPartEdit", Model: model, Prefix: Prefix ))); return(shapes); }
protected override DriverResult Editor(TerritoryPart part, IUpdateModel updater, dynamic shapeHelper) { var viewModel = new TerritoryPartViewModel(); if (updater.TryUpdateModel(viewModel, Prefix, null, null)) { var hierarchy = part.HierarchyPart ?? part.CreationHierarchy; if (hierarchy == null) { updater.AddModelError("Hierarchy", InvalidHierarchyErrorMessage()); } else { var avalaibleInternals = _territoriesService.GetAvailableTerritoryInternals(hierarchy); int selectedId; if (int.TryParse(viewModel.SelectedRecordId, out selectedId)) { var selectedRecord = _territoriesRepositoryService.GetTerritoryInternal(selectedId); if (selectedRecord == null) { updater.AddModelError("Territory", InvalidInternalRecordMessage); } else { if (part.Record.TerritoryInternalRecord != null && part.Record.TerritoryInternalRecord.Id == selectedId) { // nothing to do here, right? } else { var fromAvailables = avalaibleInternals.FirstOrDefault(tir => tir.Id == selectedId); if (fromAvailables == null) { updater.AddModelError("Territory", InvalidInternalRecordMessage); } else { _territoriesHierarchyService.AssignInternalRecord(part, selectedId); } } } } } } return(Editor(part, shapeHelper)); }