void Initialize() { _journalRepository = new Mock <IJournalRepository>(); _baseJournalPriceRepository = new Mock <IBaseJournalPriceRepository>(); _languageRepository = new Mock <ILanguageRepository>(); _subjectRepository = new Mock <ISubjectRepository>(); _institutionJournalRepository = new Mock <IInstitutionJournalRepository>(); _valuationJournalPriceRepository = new Mock <IValuationJournalPriceRepository>(); _valuationScoreCardRepository = new Mock <IValuationScoreCardRepository>(); _institutionRepository = new Mock <IInstitutionRepository>(); _baseScoreCardRepository = new Mock <IBaseScoreCardRepository>(); _userProfileRepository = new Mock <IUserProfileRepository>(); _authentication = new Mock <IAuthentication>(); _bulkImporter = new Mock <IBulkImporter <UniversityLicense> >(); _controller = new JournalsController(_journalRepository.Object, _baseJournalPriceRepository.Object, _valuationJournalPriceRepository.Object, _valuationScoreCardRepository.Object, _languageRepository.Object, _institutionJournalRepository.Object, _baseScoreCardRepository.Object, _userProfileRepository.Object, _authentication.Object, _institutionRepository.Object, _bulkImporter.Object, _subjectRepository.Object); _uploadFile = new Mock <HttpPostedFileBase>(); _viewModel = new InstitutionalPricesViewModel { File = _uploadFile.Object }; }
public ActionResult BulkImportInstitutionalPrices(InstitutionalPricesViewModel model) { if (!ModelState.IsValid) return View(model); try { int imported = 0, deleted = 0, updated = 0; var data = _bulkImporter.Execute(model.File.InputStream); var institutionJournals = (from u in data let institution = institutionRepository.Find(u.Domain) where institution != null from info in u.Licenses let journal = journalRepository.FindByIssn(info.ISSN) where journal != null select new InstitutionJournal { DateAdded = DateTime.Now, Link = info.Text, JournalId = journal.Id, UserProfileId = Authentication.CurrentUserId, InstitutionId = institution.Id }).ToList(); // This is gonna be quite an expensive operation... Rethink! foreach (var institutionJournal in institutionJournals.Distinct()) { var existing = institutionJournalRepository.Find(institutionJournal.JournalId, institutionJournal.InstitutionId); if (existing != null) { if (string.IsNullOrWhiteSpace(institutionJournal.Link)) { institutionJournalRepository.Delete(existing); deleted++; } else { existing.DateAdded = DateTime.Now; existing.Link = institutionJournal.Link; existing.UserProfileId = institutionJournal.UserProfileId; institutionJournalRepository.InsertOrUpdate(existing); updated++; } } else if (!string.IsNullOrWhiteSpace(institutionJournal.Link)) { institutionJournalRepository.InsertOrUpdate(institutionJournal); imported++; } } institutionJournalRepository.Save(); return RedirectToAction("BulkImportSuccessful", new { amountImported = imported, amountDeleted = deleted, amountUpdated = updated }); } catch (ArgumentException invalidFileException) { ModelState.AddModelError("generalError", invalidFileException.Message); } catch (DbEntityValidationException) { //foreach (var eve in e.EntityValidationErrors) //{ // Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",eve.Entry.Entity.GetType().Name, eve.Entry.State); // foreach (var ve in eve.ValidationErrors) // { // Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); // } //} //throw; } catch (Exception exception) { while (exception.InnerException != null) exception = exception.InnerException; ModelState.AddModelError("generalError", $"An error has ocurred: {exception.Message}"); } return View(model); }
public ActionResult BulkImportInstitutionalPrices(InstitutionalPricesViewModel model) { if (!ModelState.IsValid) { return(View(model)); } try { int imported = 0, deleted = 0, updated = 0; var data = _bulkImporter.Execute(model.File.InputStream); var institutionJournals = (from u in data let institution = institutionRepository.Find(u.Domain) where institution != null from info in u.Licenses let journal = journalRepository.FindByIssn(info.ISSN) where journal != null select new InstitutionJournal { DateAdded = DateTime.Now, Link = info.Text, JournalId = journal.Id, UserProfileId = Authentication.CurrentUserId, InstitutionId = institution.Id }).ToList(); // This is gonna be quite an expensive operation... Rethink! foreach (var institutionJournal in institutionJournals.Distinct()) { var existing = institutionJournalRepository.Find(institutionJournal.JournalId, institutionJournal.InstitutionId); if (existing != null) { if (string.IsNullOrWhiteSpace(institutionJournal.Link)) { institutionJournalRepository.Delete(existing); deleted++; } else { existing.DateAdded = DateTime.Now; existing.Link = institutionJournal.Link; existing.UserProfileId = institutionJournal.UserProfileId; institutionJournalRepository.InsertOrUpdate(existing); updated++; } } else if (!string.IsNullOrWhiteSpace(institutionJournal.Link)) { institutionJournalRepository.InsertOrUpdate(institutionJournal); imported++; } } institutionJournalRepository.Save(); return(RedirectToAction("BulkImportSuccessful", new { amountImported = imported, amountDeleted = deleted, amountUpdated = updated })); } catch (ArgumentException invalidFileException) { ModelState.AddModelError("generalError", invalidFileException.Message); } catch (DbEntityValidationException) { //foreach (var eve in e.EntityValidationErrors) //{ // Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",eve.Entry.Entity.GetType().Name, eve.Entry.State); // foreach (var ve in eve.ValidationErrors) // { // Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); // } //} //throw; } catch (Exception exception) { while (exception.InnerException != null) { exception = exception.InnerException; } ModelState.AddModelError("generalError", $"An error has ocurred: {exception.Message}"); } return(View(model)); }