public ActionResult Edit(int id)
        {
            Book book = _repository.FindBook(id);

            if (book == null)
            {
                return(NotFound());
            }
            CreateEditBookViewModel model = new CreateEditBookViewModel();

            model.BookId          = book.BookId;
            model.Name            = book.Name;
            model.Pages           = book.Pages;
            model.Description     = book.Description;
            model.Year            = book.Year;
            model.ImageData       = book.ImageData;
            model.ImageMimeType   = book.ImageMimeType;
            model.LanguageId      = book.LanguageId;
            model.CategoryId      = book.CategoryId;
            model.SelectedAuthors = book.AuthorsOfBooks.Select(ab => ab.Author).Select(a => a.AuthorId).ToList();
            model.Authors         = _repository.Authors.OrderBy(x => x.LastName).Select(x => new SelectListItem {
                Value = x.AuthorId.ToString(), Text = x.LastName + " " + x.FirstName
            }).ToList();

            model.SelectedTags = book.BookTags.Select(a => a.TagId).ToList();
            model.Tags         = _repository.Tags.OrderBy(x => x.NameForLabels).Select(x => new SelectListItem {
                Value = x.TagId.ToString(), Text = x.NameForLabels
            }).ToList();

            ViewBag.Categories = new SelectList(_repository.Categories, "CategoryId", "NameForLabels", book.CategoryId);
            ViewBag.Languages  = new SelectList(_repository.Languages, "LanguageId", "NameForLabels", book.LanguageId);
            return(View(model));
        }
Ejemplo n.º 2
0
        private void PrepareDropdowns(CreateEditBookViewModel model)
        {
            if (model.BookCategories != null && model.BookCategories.Any())
            {
                var categories    = DbContext.Categories.ToList();
                var subcategories = DbContext.SubCategories.ToList();

                //  Get all categories for each book's category.
                for (int i = 0; i < model.BookCategories.Count(); i++)
                {
                    var categoriesDropDownItems = SetCategoriesDropDownItems(categories);
                    model.BookCategories[i].Categories = SetSelectedCategory(categoriesDropDownItems, model.BookCategories[i].Id);
                }

                // Get all subcategories for each  book's category.
                var modelCategories = model.BookCategories.ToList();

                foreach (var category in modelCategories)
                {
                    if (!category.IsRemoved && category.Subcategory != null)
                    {
                        var subcategoriesDropDownItems = SetSubCategoriesDropDownItems(subcategories, category.Id);
                        category.Subcategories = SetSelectedSubCategory(subcategoriesDropDownItems, category.Subcategory.Id);
                    }
                }
            }
        }
        public ActionResult Create([Bind("BookId", "Name", "LanguageId", "Pages", "Description", "CategoryId", "Year", "SelectedAuthors", "ImageData", "ImageMimeType", "SelectedTags")] CreateEditBookViewModel model, IFormFile image)
        {
            if (image?.Length > 0)
            {
                model.ImageMimeType = image.ContentType;
                model.ImageData     = new byte[image.Length];
                using (Stream stream = image.OpenReadStream())
                {
                    stream.Read(model.ImageData, 0, (int)image.Length);
                }
                ModelState.Remove("ImageData");
                ModelState.Remove("ImageMimeType");
            }

            if (ModelState.IsValid)
            {
                Book book = new Book();
                ICollection <Author> authors = _repository.Authors.Where(x => model.SelectedAuthors.Contains(x.AuthorId)).ToList();
                foreach (Author author in authors)
                {
                    book.AuthorsOfBooks.Add(new AuthorsOfBooks {
                        Book = book, Author = author
                    });
                }
                if (model.SelectedTags != null)
                {
                    ICollection <Tag> tags = _repository.Tags.Where(x => model.SelectedTags.Contains(x.TagId)).ToList();
                    foreach (Tag tag in tags)
                    {
                        book.BookTags.Add(new BookTags {
                            Tag = tag, Book = book
                        });
                    }
                }
                book.CategoryId    = model.CategoryId;
                book.Description   = model.Description;
                book.LanguageId    = model.LanguageId;
                book.Name          = model.Name;
                book.Pages         = model.Pages;
                book.Year          = model.Year;
                book.ImageMimeType = model.ImageMimeType;
                book.ImageData     = model.ImageData;
                _repository.AddBook(book);
                _repository.SaveChanges();
                return(RedirectToAction("Details", new { id = book.BookId }));
            }
            else
            {
                ViewBag.CategoryId = new SelectList(_repository.Categories, "CategoryId", "NameForLabels", model.CategoryId);
                ViewBag.LanguageId = new SelectList(_repository.Languages, "LanguageId", "NameForLabels", model.LanguageId);
                model.Authors      = _repository.Authors.OrderBy(x => x.LastName).Select(x => new SelectListItem {
                    Value = x.AuthorId.ToString(), Text = x.LastName + " " + x.FirstName
                }).ToList();
                model.Tags = _repository.Tags.OrderBy(x => x.NameForLabels).Select(x => new SelectListItem {
                    Value = x.TagId.ToString(), Text = x.NameForLabels
                }).ToList();
                return(View(model));
            }
        }
Ejemplo n.º 4
0
        public virtual async Task OnGetAsync()
        {
            var book = await _repository.GetAsync(Id);

            ViewModel = new CreateEditBookViewModel
            {
                Name   = book.Name,
                UserId = book.UserId
            };
        }
Ejemplo n.º 5
0
        public ActionResult CreateEdit(int id)
        {
            // Get all data needed for this action.
            var subcategories = DbContext.SubCategories.ToList();
            var categories    = DbContext.Categories.ToList();
            var book          = _bookService.GetBook(id);

            CreateEditBookViewModel model = new CreateEditBookViewModel();

            // If book != null is edit else is create.
            if (book != null)
            {
                model = new CreateEditBookViewModel()
                {
                    Id          = book.Id,
                    Title       = book.Title,
                    ISBN        = book.ISBN,
                    Description = book.Description,
                    PublishDate = book.PublishDate,
                    BookCover   = new FrontCoverViewModel
                    {
                        FrontCover = book.FrontCover ?? string.Empty
                    },

                    BookCopies = book.BookCopies.Select(bc => new BookCopyViewModel
                    {
                        Id            = bc.Id,
                        BookCondition = bc.Condition,
                        IsLost        = bc.IsLost
                    }).ToList(),

                    Authors = book.Authors.Select(a => new BookAuthorViewModel
                    {
                        Id         = a.Id,
                        AuthorName = new AuthorNameViewModel
                        {
                            FirstName  = a.FirstName,
                            MiddleName = a.MiddleName,
                            LastName   = a.LastName
                        }
                    }).ToList(),
                    // Get book categories and subcategories for this book.
                    BookCategories = book.SubCategories.Select(sc => new CategoryViewModel
                    {
                        Id          = sc.CategoryId,
                        Name        = sc.Category.Name,
                        Subcategory = new SubCategoryViewModel
                        {
                            Id   = sc.Id,
                            Name = sc.Name
                        }
                    }).ToList()
                };

                PrepareDropdowns(model);
            }
            // If, is initializing some data for view.
            else
            {
                model.BookCover      = new FrontCoverViewModel();
                model.BookCategories = new List <CategoryViewModel>()
                {
                    new CategoryViewModel
                    {
                        Categories = SetCategoriesDropDownItems(categories)
                    }
                };
            }

            model.AllBookConditions = _bookService.PopulateWithBookConditions();

            return(View(model));
        }
Ejemplo n.º 6
0
        public ActionResult CreateEdit(CreateEditBookViewModel model)
        {
            if (model.Authors != null && model.Authors.Any())
            {
                // Remove ModelState Errors for each author marked as removed.
                for (int i = 0; i < model.Authors.Count; i++)
                {
                    if (model.Authors[i].IsRemoved)
                    {
                        if (ModelState.ContainsKey(string.Concat("Authors[", i, "].IsRemoved")))
                        {
                            var keysToRemove = ModelState
                                               .Where(ms => ms.Key.StartsWith(string.Concat("Authors[", i)))
                                               .Select(ms => ms.Key)
                                               .ToList();

                            foreach (var key in keysToRemove)
                            {
                                ModelState[key].Errors.Clear();
                            }
                        }
                    }
                }
            }

            if (model.BookCategories != null)
            {
                // Remove ModelState Error for each book category marked as removed.
                for (int i = 0; i < model.BookCategories.Count(); i++)
                {
                    if (model.BookCategories[i].IsRemoved)
                    {
                        if (ModelState.ContainsKey(string.Concat("BookCategories[", i, "].IsRemoved")))
                        {
                            var keysToRemove = ModelState
                                               .Where(ms => ms.Key.StartsWith(string.Concat("BookCategories[", i)))
                                               .Select(ms => ms.Key)
                                               .ToList();

                            foreach (var key in keysToRemove)
                            {
                                ModelState[key].Errors.Clear();
                            }
                        }
                    }
                }
            }

            var serviceModel = Mapper.Map <CreateEditBookServiceModel>(model);
            var modelErrors  = new Dictionary <string, string>();

            model.AllBookConditions = _bookService.PopulateWithBookConditions();
            PrepareDropdowns(model);

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            _bookService.CreateEditPreparations(serviceModel, out modelErrors);

            // Update model State and return the view if it's not valid.
            foreach (var error in modelErrors)
            {
                ModelState.AddModelError(error.Key, error.Value);
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            // Remove the needed data from database.
            _bookService.RemoveDataFromDatabase(serviceModel, modelErrors);

            // Update model State and return the view if it's not valid.
            foreach (var error in modelErrors)
            {
                ModelState.AddModelError(error.Key, error.Value);
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            // Call Create / Edit service method.
            string absolutePathToImages = Server.MapPath(
                ConfigurationManager.AppSettings["BookCoverRelativePath"]);

            _bookService.CreateEdit(serviceModel, absolutePathToImages);

            var bookCover = model.BookCover;

            model = Mapper.Map <CreateEditBookServiceModel, CreateEditBookViewModel>(serviceModel);

            model.BookCover = bookCover;

            model.AllBookConditions = _bookService.PopulateWithBookConditions();
            PrepareDropdowns(model);

            // On successful book create return to the list page.
            if (model.Id <= 0)
            {
                return(RedirectToAction("Index", "BooksManagement"));
            }

            return(View(model));
        }
Ejemplo n.º 7
0
        public virtual async Task OnGetAsync()
        {
            var dto = await _service.GetAsync(Id);

            ViewModel = ObjectMapper.Map <BookDto, CreateEditBookViewModel>(dto);
        }
 public IViewComponentResult Invoke(CreateEditBookViewModel viewModel)
 {
     return(View("_CreateEditBook", viewModel));
 }