Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }