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));
        }