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