Пример #1
0
        public static string ImportBooks(BookShopContext context, string xmlString)
        {
            var sb   = new StringBuilder();
            var dtos = XMLCustomSerializer.Deserialize <ImportBooks[]>(xmlString, "Books");

            var validModels = new List <Book>();

            foreach (var dto in dtos)
            {
                if (!IsValid(dto))
                {
                    sb.AppendLine("Invalid data!");
                    continue;
                }

                var book = new Book
                {
                    Name        = dto.Name,
                    Genre       = (Genre)Enum.Parse(typeof(Genre), dto.Genre),
                    Price       = dto.Price,
                    Pages       = dto.Pages,
                    PublishedOn = DateTime.ParseExact(dto.PublishedOn, "MM/dd/yyyy", CultureInfo.InvariantCulture)
                };

                validModels.Add(book);
                sb.AppendLine(string.Format(SuccessfullyImportedBook, book.Name, book.Price));
            }

            context.AddRange(validModels);
            context.SaveChanges();

            return(sb.ToString().Trim());
        }
        public static string ImportBooks(BookShopContext context, string xmlString)
        {
            var books = XmlConverter.Deserializer <BooksXmlImportDTO>(xmlString, "Books");

            var bookList = new List <Book>();

            var sb = new StringBuilder();

            foreach (var book in books)
            {
                if (!IsValid(book))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                var bookToAdd = new Book
                {
                    Name        = book.Name,
                    Genre       = (Genre)Enum.Parse(typeof(Genre), book.Genre),
                    Price       = book.Price,
                    Pages       = book.Pages,
                    PublishedOn = DateTime.ParseExact(book.PublishedOn, "MM/dd/yyyy", CultureInfo.InvariantCulture)
                };
                sb.AppendLine($"Successfully imported book {book.Name} for {book.Price:f2}.");

                bookList.Add(bookToAdd);
            }

            context.AddRange(bookList);
            context.SaveChanges();


            return(sb.ToString().TrimEnd());
        }
Пример #3
0
        public static string ImportAuthors(BookShopContext context, string jsonString)
        {
            StringBuilder sb = new StringBuilder();

            var authors = new List <Author>();

            var authorsDTO = JsonConvert.DeserializeObject <ImportAuthorDTO[]>(jsonString);

            foreach (var aDto in authorsDTO)
            {
                if (!IsValid(aDto))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                if (authors.Any(x => x.Email == aDto.Email))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                Author author = new Author()
                {
                    FirstName = aDto.FirstName,
                    LastName  = aDto.LastName,
                    Email     = aDto.Email,
                    Phone     = aDto.Phone
                };

                foreach (var book in aDto.Books)
                {
                    if (context.Books.Any(b => b.Id == book.Id))
                    {
                        author.AuthorsBooks.Add(new AuthorBook()
                        {
                            Author = author, BookId = (int)book.Id
                        });
                    }
                }

                if (author.AuthorsBooks.Count == 0)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                sb.AppendLine(String.Format(SuccessfullyImportedAuthor, (author.FirstName + ' ' + author.LastName),
                                            author.AuthorsBooks.Count));

                authors.Add(author);
            }

            context.AddRange(authors);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
        public static string ImportBooks(BookShopContext context, string xmlString)
        {
            var sb = new StringBuilder();

            var serializer = new XmlSerializer(typeof(ImportBooksDTO[]), new XmlRootAttribute("Books"));

            using (StringReader stringReader = new StringReader(xmlString))
            {
                var booksDto = (ImportBooksDTO[])serializer.Deserialize(stringReader);

                var validBooks = new List <Book>();

                foreach (var book in booksDto)
                {
                    if (!IsValid(book))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime publishedOn;
                    var      isValidDate = DateTime.TryParseExact(book.PublishedOn, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out publishedOn);

                    if (!isValidDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var bookToImport = new Book()
                    {
                        Name        = book.Name,
                        Genre       = (Genre)book.Genre,
                        Pages       = book.Pages,
                        Price       = book.Price,
                        PublishedOn = publishedOn,
                    };

                    validBooks.Add(bookToImport);

                    sb.AppendLine(string.Format(SuccessfullyImportedBook, book.Name, book.Price));
                }
                context.AddRange(validBooks);
                context.SaveChanges();

                return(sb.ToString().TrimEnd());
            }
        }
Пример #5
0
        public static string ImportAuthors(BookShopContext context, string jsonString)
        {
            var sb   = new StringBuilder();
            var dtos = JsonConvert.DeserializeObject <IEnumerable <ImportAuthorsDTO> >(jsonString, JsonSetting.DefaultSettingJSON());

            var validModels = new List <Author>();

            foreach (var dto in dtos)
            {
                if (!IsValid(dto) || context.Authors.Any(a => a.Email == dto.Email) || !dto.Books.Any())
                {
                    sb.AppendLine("Invalid data!");
                    continue;
                }

                var author = new Author
                {
                    FirstName    = dto.FirstName,
                    LastName     = dto.LastName,
                    Phone        = dto.Phone,
                    Email        = dto.Email,
                    AuthorsBooks = dto.Books
                                   .Where(b => context.Books.Any(x => x.Id == b.Id))
                                   .Select(b => new AuthorBook {
                        BookId = b.Id
                    })
                                   .ToList()
                };

                if (!author.AuthorsBooks.Any() || validModels.Any(m => m.Email == dto.Email))
                {
                    sb.AppendLine("Invalid data!");
                    continue;
                }
                validModels.Add(author);
                sb.AppendLine(string.Format(SuccessfullyImportedAuthor, author.FirstName + " " + author.LastName, author.AuthorsBooks.Count));
            }

            context.AddRange(validModels);
            context.SaveChanges();

            return(sb.ToString().Trim());
        }
Пример #6
0
        public static string ImportBooks(BookShopContext context, string xmlString)
        {
            var rootAttribute = new XmlRootAttribute("Books");
            var xmlSerializer = new XmlSerializer(typeof(ImportBooksDto[]), rootAttribute);

            var booksDtos = (ImportBooksDto[])xmlSerializer.Deserialize(new StringReader(xmlString));

            var validBooks = new List <Book>();

            StringBuilder sb = new StringBuilder();

            foreach (var bookDto in booksDtos)
            {
                if (!IsValid(bookDto))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                var book = new Book
                {
                    Name        = bookDto.Name,
                    Genre       = Enum.Parse <Genre>(bookDto.Genre),
                    Price       = bookDto.Price,
                    Pages       = bookDto.Pages,
                    PublishedOn = DateTime.ParseExact(bookDto.PublishedOn, "MM/dd/yyyy", CultureInfo.InvariantCulture),
                };

                sb.AppendLine(string.Format(SuccessfullyImportedBook, book.Name, book.Price));

                validBooks.Add(book);
            }

            context.AddRange(validBooks);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
        public async Task <IActionResult> Edit(BooksCreateEditViewModel ViewModel)
        {
            ViewBag.LanguageID  = new SelectList(_context.Languages, "LanguageID", "LanguageName");
            ViewBag.PublisherID = new SelectList(_context.Publishers, "PublisherID", "PublisherName");
            ViewBag.AuthorID    = new SelectList(_context.Authors.Select(t => new AuthorList {
                AuthorID = t.AuthorID, NameFamily = t.FirstName + " " + t.LastName
            }), "AuthorID", "NameFamily");
            ViewBag.TranslatorID = new SelectList(_context.Translator.Select(t => new TranslatorList {
                TranslatorID = t.TranslatorID, NameFamily = t.Name + " " + t.Family
            }), "TranslatorID", "NameFamily");
            ViewModel.SubCategoriesVM = new BooksSubCategoriesViewModel(_repository.GetAllCategories(), ViewModel.CategoryID);

            if (ModelState.IsValid)
            {
                try
                {
                    DateTime?PublishDate;
                    if (ViewModel.IsPublish == true && ViewModel.RecentIsPublish == false)
                    {
                        PublishDate = DateTime.Now;
                    }
                    else if (ViewModel.RecentIsPublish == true && ViewModel.IsPublish == false)
                    {
                        PublishDate = null;
                    }

                    else
                    {
                        PublishDate = ViewModel.PublishDate;
                    }

                    Book book = new Book()
                    {
                        BookID      = ViewModel.BookID,
                        Title       = ViewModel.Title,
                        ISBN        = ViewModel.ISBN,
                        NumOfPages  = ViewModel.NumOfPages,
                        Price       = ViewModel.Price,
                        Stock       = ViewModel.Stock,
                        IsPublish   = ViewModel.IsPublish,
                        LanguageID  = ViewModel.LanguageID,
                        PublisherID = ViewModel.PublisherID,
                        PublishYear = ViewModel.PublishYear,
                        Summary     = ViewModel.Summary,
                        Weight      = ViewModel.Weight,
                        PublishDate = PublishDate,
                        Delete      = false,
                    };

                    _context.Update(book);

                    var RecentAuthors = (from a in _context.Author_Books
                                         where (a.BookID == ViewModel.BookID)
                                         select a.AuthorID).ToArray();

                    var RecentTranslators = (from a in _context.Book_Translators
                                             where (a.BookID == ViewModel.BookID)
                                             select a.TranslatorID).ToArray();

                    var RecentCategories = (from c in _context.Book_Categories
                                            where (c.BookID == ViewModel.BookID)
                                            select c.CategoryID).ToArray();

                    var DeletedAuthors     = RecentAuthors.Except(ViewModel.AuthorID);
                    var DeletedTranslators = RecentTranslators.Except(ViewModel.TranslatorID);
                    var DeletedCategories  = RecentCategories.Except(ViewModel.CategoryID);

                    var AddedAuthors     = ViewModel.AuthorID.Except(RecentAuthors);
                    var AddedTranslators = ViewModel.TranslatorID.Except(RecentTranslators);
                    var AddedCategories  = ViewModel.CategoryID.Except(RecentCategories);

                    if (DeletedAuthors.Count() != 0)
                    {
                        _context.RemoveRange(DeletedAuthors.Select(a => new Author_Book {
                            AuthorID = a, BookID = ViewModel.BookID
                        }).ToList());
                    }

                    if (DeletedTranslators.Count() != 0)
                    {
                        _context.RemoveRange(DeletedTranslators.Select(a => new Book_Translator {
                            TranslatorID = a, BookID = ViewModel.BookID
                        }).ToList());
                    }

                    if (DeletedCategories.Count() != 0)
                    {
                        _context.RemoveRange(DeletedCategories.Select(a => new Book_Category {
                            CategoryID = a, BookID = ViewModel.BookID
                        }).ToList());
                    }

                    if (AddedAuthors.Count() != 0)
                    {
                        _context.AddRange(AddedAuthors.Select(a => new Author_Book {
                            AuthorID = a, BookID = ViewModel.BookID
                        }).ToList());
                    }

                    if (AddedTranslators.Count() != 0)
                    {
                        _context.AddRange(AddedTranslators.Select(a => new Book_Translator {
                            TranslatorID = a, BookID = ViewModel.BookID
                        }).ToList());
                    }

                    if (AddedCategories.Count() != 0)
                    {
                        _context.AddRange(AddedCategories.Select(a => new Book_Category {
                            CategoryID = a, BookID = ViewModel.BookID
                        }).ToList());
                    }

                    await _context.SaveChangesAsync();

                    ViewBag.MsgSuccess = "ذخیره تغییرات با موفقیت انجام شد.";
                    return(View(ViewModel));
                }

                catch
                {
                    ViewBag.MsgFailed = "در ذخیره تغییرات خطایی رخ داده است.";
                    return(View(ViewModel));
                }
            }

            else
            {
                ViewBag.MsgFailed = "اطلاعات فرم نامعتبر است.";
                return(View(ViewModel));
            }
        }
Пример #8
0
        public async Task <IActionResult> Edit(BooksCreateEditViewModel ViewModel)
        {
            ViewBag.LanguageID  = new SelectList(_context.Languages, "LanguageID", "LanguageName");
            ViewBag.PublisherID = new SelectList(_context.Publishers, "PublisherID", "PublisherName");

            if (ModelState.IsValid)
            {
                try
                {
                    DateTime?PublishDate;
                    if (ViewModel.IsPublish == true && ViewModel.RecentIsPublish == false)
                    {
                        PublishDate = DateTime.Now;
                    }
                    else if (ViewModel.RecentIsPublish == true && ViewModel.IsPublish == false)
                    {
                        PublishDate = null;
                    }

                    else
                    {
                        PublishDate = ViewModel.PublishDate;
                    }

                    Book book = new Book()
                    {
                        BookID      = ViewModel.BookID,
                        LanguageID  = ViewModel.LanguageID,
                        PublisherID = ViewModel.PublisherID,
                        PublishYear = ViewModel.PublishYear,
                    };

                    _context.Update(book);

                    var RecentCategories = (from c in _context.Book_Categories
                                            where (c.BookID == ViewModel.BookID)
                                            select c.CategoryID).ToArray();

                    var DeletedCategories = RecentCategories.Except(ViewModel.CategoryID);

                    var AddedCategories = ViewModel.CategoryID.Except(RecentCategories);

                    if (DeletedCategories.Count() != 0)
                    {
                        _context.RemoveRange(DeletedCategories.Select(a => new Book_Category {
                            CategoryID = a, BookID = ViewModel.BookID
                        }).ToList());
                    }

                    if (AddedCategories.Count() != 0)
                    {
                        _context.AddRange(AddedCategories.Select(a => new Book_Category {
                            CategoryID = a, BookID = ViewModel.BookID
                        }).ToList());
                    }

                    await _context.SaveChangesAsync();

                    ViewBag.MsgSuccess = "ذخیره تغییرات با موفقیت انجام شد.";
                    return(View(ViewModel));
                }

                catch
                {
                    ViewBag.MsgFailed = "در ذخیره تغییرات خطایی رخ داده است.";
                    return(View(ViewModel));
                }
            }

            else
            {
                ViewBag.MsgFailed = "اطلاعات فرم نامعتبر است.";
                return(View(ViewModel));
            }
        }
Пример #9
0
        public static string ImportAuthors(BookShopContext context, string jsonString)
        {
            var authorDtos = JsonConvert.DeserializeObject <ImportAuthorDto[]>(jsonString);

            var validAuthors = new List <Author>();
            var sb           = new StringBuilder();

            foreach (var authorDto in authorDtos)
            {
                var emails      = context.Authors.Select(a => a.Email).ToArray();
                var emailExists = emails.Any(e => e == authorDto.Email);

                if (!IsValid(authorDto) || emailExists)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                var author = new Author
                {
                    FirstName = authorDto.FirstName,
                    LastName  = authorDto.LastName,
                    Phone     = authorDto.Phone,
                    Email     = authorDto.Email
                };

                var validAuthorBooks = new List <AuthorBook>();

                foreach (var book in authorDto.Books)
                {
                    var bookExists = context.Books.Find(book);

                    if (bookExists == null)
                    {
                        continue;
                    }

                    if (!IsValid(book))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var newBook = new AuthorBook
                    {
                        BookId   = book.Id,
                        AuthorId = author.Id
                    };

                    validAuthorBooks.Add(newBook);
                }

                if (!validAuthorBooks.Any())
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                author.AuthorsBooks = validAuthorBooks;
                validAuthors.Add(author);

                sb.AppendLine(string
                              .Format(SuccessfullyImportedAuthor, author.FirstName + " " + author.LastName, author.AuthorsBooks.Count));
            }

            context.AddRange(validAuthors);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }