public async Task <ActionResult> ProcessAmalgamationAsync(AmalgamateEstablishmentsModel model) { if (model.MergeDate.IsEmpty() || model.MergeDate == null || !model.MergeDate.IsValid()) { ViewData.ModelState.AddModelError("MergeDate", "Please enter a valid establishment open date"); } if (string.IsNullOrEmpty(model.NewEstablishmentName)) { ViewData.ModelState.AddModelError("NewEstablishmentName", "Please enter the establishment name"); } if (string.IsNullOrEmpty(model.EstablishmentType)) { ViewData.ModelState.AddModelError("EstablishmentType", "Please select the establishment type"); } if (string.IsNullOrEmpty(model.EstablishmentPhase.GetValueOrDefault().ToString())) { ViewData.ModelState.AddModelError("EstablishmentPhase", "Please select the establishment phase"); } if (string.IsNullOrEmpty(model.LocalAuthorityId)) { ViewData.ModelState.AddModelError("LocalAuthorityId", "Please select a local authority"); } model.EstablishmentPhases = (await _lookupService.EducationPhasesGetAllAsync()).ToSelectList(); model.EstablishmentTypes = (await _lookupService.EstablishmentTypesGetAllAsync()).ToSelectList(); model.LocalAuthorities = (await _lookupService.LocalAuthorityGetAllAsync()).ToSelectList(); if (!ModelState.IsValid) { return(View("~/Views/Tools/Mergers/ConfirmAmalgamation.cshtml", model)); } var urns = new List <int>(); urns.Add(model.Establishment0Urn.GetValueOrDefault()); urns.Add(model.Establishment1Urn.GetValueOrDefault()); if (model.Establishment2Urn.HasValue) { urns.Add(model.Establishment2Urn.GetValueOrDefault()); } if (model.Establishment3Urn.HasValue) { urns.Add(model.Establishment3Urn.GetValueOrDefault()); } var mergeDate = new DateTime(model.MergeDate.Year.GetValueOrDefault(), model.MergeDate.Month.GetValueOrDefault(), model.MergeDate.Day.GetValueOrDefault()); var establishmentTypeId = int.TryParse(model.EstablishmentType, out var i) ? i : (int?)null; var localAuthorityId = int.TryParse(model.LocalAuthorityId, out var j) ? j : (int?)null; var result = await _establishmentWriteService.AmalgamateOrMergeAsync( new AmalgamateMergeRequest() { OperationType = AmalgamateMergeRequest.eOperationType.Amalgamate, OperationTypeDescriptor = "amalgamate", MergeOrAmalgamationDate = mergeDate, UrnsToMerge = urns.ToArray(), NewEstablishmentPhaseId = model.EstablishmentPhase, NewEstablishmentTypeId = establishmentTypeId, NewEstablishmentName = model.NewEstablishmentName, NewEstablishmentLocalAuthorityId = localAuthorityId, }, User); if (!result.HasErrors) { model.NewEstablishmentUrn = result.Response.AmalgamateNewEstablishmentUrn.GetValueOrDefault(); model.LocalAuthorityName = model.LocalAuthorities.FirstOrDefault(x => x.Value == model.LocalAuthorityId)?.Text; model.EstablishmentType = model.EstablishmentTypes .FirstOrDefault(x => x.Value == model.EstablishmentType)?.Text; return(View("~/Views/Tools/Mergers/AmalgamationComplete.cshtml", model)); } foreach (var err in result.Errors) { if (err.Fields != null) { ViewData.ModelState.AddModelError(err.Fields, err.Message); } } return(View("~/Views/Tools/Mergers/ConfirmAmalgamation.cshtml", model)); }
public async Task <ActionResult> ProcessAmalgamationEstablishmentsAsync(AmalgamateEstablishmentsModel model) { var viewModel = new AmalgamateEstablishmentsModel(); var submittedUrns = new List <int>(); var estab0HasErrors = ModelState.Keys.Where(k => k == "Establishment0Urn") .Select(k => ModelState[k].Errors).First().Select(e => e.ErrorMessage).Any(); var estab1HasErrors = ModelState.Keys.Where(k => k == "Establishment1Urn") .Select(k => ModelState[k].Errors).First().Select(e => e.ErrorMessage).Any(); if (!model.Establishment0Urn.HasValue && !estab0HasErrors) { ModelState.AddModelError(nameof(model.Establishment0Urn), "Enter the establishment 1 URN"); } if (!model.Establishment1Urn.HasValue && !model.Establishment2Urn.HasValue && !model.Establishment3Urn.HasValue) { if (!estab1HasErrors) { ModelState.AddModelError(nameof(model.Establishment1Urn), "Enter the establishment 2 URN"); } } if (model.Establishment0Urn.HasValue) { var estab = await _establishmentReadService.GetAsync(model.Establishment0Urn.GetValueOrDefault(), User); if (estab.GetResult() == null && !estab1HasErrors) { ViewData.ModelState.AddModelError(nameof(model.Establishment0Urn), "The establishment 1 URN is invalid"); } else { viewModel.Establishment0Urn = model.Establishment0Urn; viewModel.Establishment0Name = estab.GetResult().Name; submittedUrns.Add(model.Establishment0Urn.GetValueOrDefault()); } } if (model.Establishment1Urn.HasValue) { var estab1 = await _establishmentReadService.GetAsync(model.Establishment1Urn.GetValueOrDefault(), User); if (estab1.GetResult() == null) { ViewData.ModelState.AddModelError(nameof(model.Establishment1Urn), "The establishment 1 URN is invalid"); } else { viewModel.Establishment1Urn = model.Establishment1Urn; viewModel.Establishment1Name = estab1.GetResult().Name; submittedUrns.Add(model.Establishment1Urn.GetValueOrDefault()); } } if (model.Establishment2Urn.HasValue) { var estab2 = await _establishmentReadService.GetAsync(model.Establishment2Urn.GetValueOrDefault(), User); if (estab2.GetResult() == null) { ViewData.ModelState.AddModelError(nameof(model.Establishment2Urn), "The establishment 2 URN is invalid"); } else { viewModel.Establishment2Urn = model.Establishment2Urn; viewModel.Establishment2Name = estab2.GetResult().Name; submittedUrns.Add(model.Establishment2Urn.GetValueOrDefault()); } } if (model.Establishment3Urn.HasValue) { var estab3 = await _establishmentReadService.GetAsync(model.Establishment3Urn.GetValueOrDefault(), User); if (estab3.GetResult() == null) { ViewData.ModelState.AddModelError(nameof(model.Establishment3Urn), "The establishment 3 URN is invalid"); } else { viewModel.Establishment3Urn = model.Establishment3Urn; viewModel.Establishment3Name = estab3.GetResult().Name; submittedUrns.Add(model.Establishment3Urn.GetValueOrDefault()); } } var duplicates = submittedUrns.GroupBy(x => x) .Where(g => g.Count() > 1) .ToDictionary(x => x.Key, x => x.Count()); if (duplicates.ContainsKey(model.Establishment0Urn.GetValueOrDefault())) { ViewData.ModelState.AddModelError("Establishment0Urn", "Duplicate URN. Please correct the URN."); } if (duplicates.ContainsKey(model.Establishment1Urn.GetValueOrDefault())) { ViewData.ModelState.AddModelError("Establishment1Urn", "Duplicate URN. Please correct the URN."); } if (duplicates.ContainsKey(model.Establishment2Urn.GetValueOrDefault())) { ViewData.ModelState.AddModelError("Establishment2Urn", "Duplicate URN. Please correct the URN."); } if (duplicates.ContainsKey(model.Establishment3Urn.GetValueOrDefault())) { ViewData.ModelState.AddModelError("Establishment3Urn", "Duplicate URN. Please correct the URN."); } if (!ModelState.IsValid) { return(View("~/Views/Tools/Mergers/AmalgamateEstablishments.cshtml", model)); } viewModel.EstablishmentPhases = (await _lookupService.EducationPhasesGetAllAsync()).ToSelectList(); viewModel.EstablishmentTypes = (await _lookupService.EstablishmentTypesGetAllAsync()).ToSelectList(); viewModel.LocalAuthorities = (await _lookupService.LocalAuthorityGetAllAsync()).ToSelectList(); return(View("~/Views/Tools/Mergers/ConfirmAmalgamation.cshtml", viewModel)); }