public async Task <ActionResult> ProcessMergeAsync(MergeEstablishmentsModel model) { if (model.MergeDate.IsEmpty() || model.MergeDate == null || !model.MergeDate.IsValid()) { ViewData.ModelState.AddModelError("MergeDate", "Please enter a valid establishment open date"); return(View("~/Views/Tools/Mergers/ConfirmMerger.cshtml", model)); } var urns = new List <int>(); urns.Add(model.Establishment1Urn.GetValueOrDefault()); if (model.Establishment2Urn.HasValue) { urns.Add(model.Establishment2Urn.GetValueOrDefault()); } if (model.Establishment2Urn.HasValue) { urns.Add(model.Establishment3Urn.GetValueOrDefault()); } var mergeDate = new DateTime(model.MergeDate.Year.GetValueOrDefault(), model.MergeDate.Month.GetValueOrDefault(), model.MergeDate.Day.GetValueOrDefault()); var result = await _establishmentWriteService.AmalgamateOrMergeAsync( new AmalgamateMergeRequest() { OperationType = AmalgamateMergeRequest.eOperationType.Merge, OperationTypeDescriptor = "merge", LeadEstablishmentUrn = model.LeadEstablishmentUrn, MergeOrAmalgamationDate = mergeDate, UrnsToMerge = urns.ToArray() }, User); if (!result.HasErrors) { return(View("~/Views/Tools/Mergers/MergerComplete.cshtml", model)); } foreach (var err in result.Errors) { ViewData.ModelState.AddModelError(err.Fields, err.Message); } return(View("~/Views/Tools/Mergers/ConfirmMerger.cshtml", model)); }
public async Task <ActionResult> ProcessMergeEstablishmentsAsync(MergeEstablishmentsModel model) { var viewModel = new MergeEstablishmentsModel(); var submittedUrns = new List <int>(); var leadHasErrors = ModelState.Keys.Where(k => k == "LeadEstablishmentUrn") .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.LeadEstablishmentUrn.HasValue && !leadHasErrors) { ModelState.AddModelError(nameof(model.LeadEstablishmentUrn), "Enter the lead establishment URN"); } if (!model.Establishment1Urn.HasValue && !model.Establishment2Urn.HasValue && !model.Establishment3Urn.HasValue && !estab1HasErrors) { ModelState.AddModelError(nameof(model.Establishment1Urn), "Enter the establishment 1 URN"); } // validate the establishments exist if (model.LeadEstablishmentUrn.HasValue) { var leadEstab = await _establishmentReadService.GetAsync(model.LeadEstablishmentUrn.GetValueOrDefault(), User); if (leadEstab.GetResult() == null) { ViewData.ModelState.AddModelError(nameof(model.LeadEstablishmentUrn), "The lead establishment URN is invalid"); } else { var estabTypes = await _lookupService.EstablishmentTypesGetAllAsync(); viewModel.LeadEstablishmentUrn = model.LeadEstablishmentUrn; viewModel.LeadEstablishmentName = leadEstab.GetResult().Name; viewModel.EstablishmentType = estabTypes.FirstOrDefault(t => t.Id == leadEstab.GetResult().TypeId)?.Name; submittedUrns.Add(model.LeadEstablishmentUrn.GetValueOrDefault()); } } if (model.Establishment1Urn.HasValue) { var estab1 = await _establishmentReadService.GetAsync(model.Establishment1Urn.GetValueOrDefault(), User); var hasErrors = ModelState.Keys.Where(k => k == "Establishment1Urn") .Select(k => ModelState[k].Errors).First().Select(e => e.ErrorMessage).Any(); if (estab1.GetResult() == null) { if (!hasErrors) { 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); var hasErrors = ModelState.Keys.Where(k => k == "Establishment2Urn") .Select(k => ModelState[k].Errors).First().Select(e => e.ErrorMessage).Any(); if (estab2.GetResult() == null) { if (!hasErrors) { 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); var hasErrors = ModelState.Keys.Where(k => k == "Establishment3Urn") .Select(k => ModelState[k].Errors).First().Select(e => e.ErrorMessage).Any(); if (estab3.GetResult() == null) { if (!hasErrors) { 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.LeadEstablishmentUrn.GetValueOrDefault())) { ViewData.ModelState.AddModelError("LeadEstablishmentUrn", "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/MergeEstablishments.cshtml", model)); } return(View("~/Views/Tools/Mergers/ConfirmMerger.cshtml", viewModel)); }