public IActionResult SicSectionUploadCheckPost(AdminSicSectionUploadCheckViewModel viewModel)
        {
            var newRecords = JsonConvert.DeserializeObject <List <SicSection> >(viewModel.SerializedNewRecords);

            List <SicSection> sicSectionsFromDatabase = dataRepository.GetAll <SicSection>().ToList();

            viewModel.AddsEditsDeletesSet =
                new AddsEditsDeletesSet <SicSection>(
                    sicSectionsFromDatabase,
                    newRecords,
                    s => s.SicSectionId,
                    (s1, s2) => s1.Description == s2.Description
                    );

            viewModel.ParseAndValidateParameters(Request, m => m.Reason);
            if (viewModel.HasAnyErrors())
            {
                return(View("SicSectionUploadCheck", viewModel));
            }

            List <SicSection> existingRecords = dataRepository.GetAll <SicSection>().ToList();

            auditLogger.AuditGeneralAction(AuditedAction.AdminUpdatedSicSections, new
            {
                ExistingRecords = JsonConvert.SerializeObject(existingRecords.Select(GetSicSectionDetails)),
                NewRecords      = JsonConvert.SerializeObject(newRecords.Select(GetSicSectionDetails)),
                Reason          = viewModel.Reason
            }, User);

            SaveChangesToSicSections(viewModel);

            return(View("UploadConfirmation", FileUploadType.SicSection));
        }
        private void SaveChangesToSicSections(AdminSicSectionUploadCheckViewModel viewModel)
        {
            foreach (SicSection sicSectionFromUser in viewModel.AddsEditsDeletesSet.ItemsToAdd)
            {
                var sicSection = new SicSection
                {
                    SicSectionId = sicSectionFromUser.SicSectionId,
                    Description  = sicSectionFromUser.Description
                };
                dataRepository.Insert(sicSection);
            }

            foreach (OldAndNew <SicSection> oldAndNew in viewModel.AddsEditsDeletesSet.ItemsToChange)
            {
                SicSection sicSection = dataRepository.Get <SicSection>(oldAndNew.Old.SicSectionId);
                sicSection.Description = oldAndNew.New.Description;
            }

            foreach (SicSection sicSectionFromUser in viewModel.AddsEditsDeletesSet.ItemsToDelete)
            {
                SicSection sicSection = dataRepository.Get <SicSection>(sicSectionFromUser.SicSectionId);
                dataRepository.Delete(sicSection);
            }

            dataRepository.SaveChanges();
        }
        public IActionResult SicSectionUploadPost(AdminFileUploadViewModel viewModel)
        {
            if (!ReferenceDataHelper.TryParseCsvFileWithHeadings(
                    viewModel.File,
                    new[] { "SicSectionId", "Description" },
                    out List <SicSection> sicSectionsFromUploadFile,
                    out string errorMessage))
            {
                viewModel.AddErrorFor(m => m.File, errorMessage);
                return(View("SicSectionUpload", viewModel));
            }

            List <SicSection> sicSectionsFromDatabase = dataRepository.GetAll <SicSection>().ToList();

            var uploadCheckViewModel = new AdminSicSectionUploadCheckViewModel
            {
                SerializedNewRecords = JsonConvert.SerializeObject(sicSectionsFromUploadFile),
                AddsEditsDeletesSet  = new AddsEditsDeletesSet <SicSection>(
                    sicSectionsFromDatabase,
                    sicSectionsFromUploadFile,
                    s => s.SicSectionId,
                    (s1, s2) => s1.Description == s2.Description,
                    s => s.SicCodes.Count > 0)
            };

            return(View("SicSectionUploadCheck", uploadCheckViewModel));
        }