예제 #1
0
        public async Task <ActionResult> EditDetails(GroupEditorViewModel viewModel)
        {
            var result = await new GroupEditorViewModelValidator(_groupReadService, _establishmentReadService, User, _securityService).ValidateAsync(viewModel);

            result.AddToModelState(ModelState, string.Empty);

            await PopulateSelectLists(viewModel);

            if (viewModel.CanUserEditStatus)
            {
                PopulateStatusSelectList(viewModel);
            }

            if (viewModel.GroupTypeId.HasValue)
            {
                viewModel.GroupTypeName = (await _lookup.GetNameAsync(() => viewModel.GroupTypeId));
            }

            await ValidateAsync(viewModel);

            if (ModelState.IsValid && !viewModel.WarningsToProcess.Any())
            {
                var dto     = CreateSaveDto(viewModel).Group;
                var changes = await _groupReadService.GetModelChangesAsync(dto, User);

                if (changes.Any() && viewModel.GroupTypeId.OneOfThese(GT.SingleacademyTrust, GT.MultiacademyTrust) && !viewModel.ChangesAcknowledged)
                {
                    viewModel.ChangesSummary = changes;
                    return(View("EditDetails", viewModel));
                }
                else
                {
                    var actionResult = await ProcessCreateEditGroup(viewModel);

                    if (actionResult != null)
                    {
                        return(actionResult);
                    }
                }
            }
            else
            {
                if (viewModel.GroupUId.HasValue)
                {
                    var domainModel = (await _groupReadService.GetAsync((int)viewModel.GroupUId, User)).GetResult();
                    viewModel.OriginalGroupName     = domainModel.Name;
                    viewModel.OriginalGroupTypeName = await _lookup.GetNameAsync(() => domainModel.GroupTypeId);
                }
            }

            viewModel.ListOfEstablishmentsPluralName = _nomenclatureService.GetEstablishmentsPluralName((GT)viewModel.GroupTypeId.Value);
            await SetEditPermissions(viewModel);

            return(View("EditDetails", viewModel));
        }