コード例 #1
0
ファイル: BookRentalTest.cs プロジェクト: ZeusXD/BookStore
        public void Return_Unsuccessful_When_Receives_Empty()
        {
            var bookDal = new BookStoreDataMock(bookRentalMock.StoredBooks1());
            var result  = new BookRental(bookDal).RentBook(new RentBook());

            Assert.False(result.Successful);
        }
コード例 #2
0
        private void button3_Click(object sender, EventArgs e)
        {
            EmailAccountModel model = new EmailAccountModel("smtp-mail.outlook.com", "*****@*****.**", "libraryproject2019", "*********");
            int counter             = 0;

            foreach (ListViewItem item in lvItems.Items)
            {
                if (item.Checked)
                {
                    int         tmpID         = int.Parse(item.Text.ToString());
                    BookRental  borrowingData = dbDataContext.BookRentals.SingleOrDefault(x => x.ID == tmpID);
                    Users       userData      = dbDataContext.Users.SingleOrDefault(x => x.ID == borrowingData.ReaderID);
                    BookCopy    bookCopy      = dbDataContext.BookCopies.SingleOrDefault(x => x.ID == borrowingData.CopyID);
                    Books       book          = dbDataContext.Books.SingleOrDefault(x => x.ID == bookCopy.BookID);
                    string      email         = userData.Email;
                    EmailSender emailSender   = new EmailSender(model, email, "Nieoddana książka: " + book.Title +
                                                                ". Prosimy o zwrot");
                    emailSender.send();
                    counter++;
                }
            }
            if (counter == 0)
            {
                MessageBox.Show("Nie wybrano żadnej opcji z listy");
            }
            else if (counter == 1)
            {
                MessageBox.Show("Wiadomość z przypomnieniem została wysłana");
            }
            else
            {
                MessageBox.Show("Wysłano wiadomości z przypomnieniem");
            }
        }
コード例 #3
0
ファイル: BookListForm.cs プロジェクト: DoxPL/LibraryProject
 private void button3_Click(object sender, EventArgs e)
 {
     foreach (ListViewItem item in lvItems.Items)
     {
         if (item.Selected)
         {
             int        id     = int.Parse(item.SubItems[7].Text);
             Books      book   = dbDataContext.Books.Where(x => x.ID == id).First();
             BookRental rental = new BookRental();
             rental.ReaderID   = Program.loggedUser.ID;
             rental.RentDate   = DateTime.Now;
             rental.ReturnDate = DateTime.Now.AddDays(30);
             int freeCopy = getFreeCopy(book.ID);
             if (freeCopy == -1)
             {
                 MessageBox.Show("Brak wolnego egzemplarza");
                 break;
             }
             rental.CopyID = freeCopy;
             rental.status = 1;
             dbDataContext.BookRentals.InsertOnSubmit(rental);
             BookCopy bc = dbDataContext.BookCopies.Where(x => x.ID == freeCopy).First();
             bc.Free = 0;
             dbDataContext.SubmitChanges();
             item.SubItems[6].Text = (int.Parse(item.SubItems[6].Text) - 1).ToString();
             MessageBox.Show("Wypożyczono: " + book.Title);
         }
     }
 }
コード例 #4
0
 private void button3_Click(object sender, EventArgs e)
 {
     //Dodawanie egzemplarzy do tabeli wypożyczeń
     foreach (string bookTitle in listBox1.SelectedItems)
     {
         Books      book   = dbDataContext.Books.Where(x => x.Title == bookTitle).First();
         BookRental rental = new BookRental();
         rental.ReaderID   = Program.loggedUser.ID;
         rental.RentDate   = DateTime.Now;
         rental.ReturnDate = DateTime.Now.AddDays(30);
         int freeCopy = getFreeCopy(book.ID);
         if (freeCopy == -1)
         {
             MessageBox.Show("Brak wolnego egzemplarza");
             break;
         }
         rental.CopyID = freeCopy;
         rental.status = 1;
         dbDataContext.BookRentals.InsertOnSubmit(rental);
         BookCopy bc = dbDataContext.BookCopies.Where(x => x.ID == freeCopy).First();
         bc.Free = 0;
         dbDataContext.SubmitChanges();
         MessageBox.Show(book.Title);
     }
 }
コード例 #5
0
ファイル: Orders.cs プロジェクト: DoxPL/LibraryProject
 private void button1_Click(object sender, EventArgs e)
 {
     foreach (ListViewItem item in lvItems.Items)
     {
         if (item.Checked)
         {
             item.Remove();
             int tmpID = int.Parse(item.Text.ToString());
             try
             {
                 BookRental dbObject = dbDataContext.BookRentals.SingleOrDefault(x => x.ID == tmpID);
                 BookCopy   bc       = dbDataContext.BookCopies.Where(x => x.ID == dbObject.CopyID).First();
                 bc.Free             = 1;
                 dbObject.ReturnDate = (DateTime?)DateTime.Now;
                 dbObject.status     = 0;
                 dbDataContext.SubmitChanges();
                 int elementIndex = BookListForm.items.FindIndex(x => x.SubItems[0].Text == item.SubItems[4].Text);
                 BookListForm.items[elementIndex].SubItems[6].Text = (int.Parse(BookListForm.items[elementIndex].SubItems[6].Text) + 1).ToString();
             }
             catch (Exception exc)
             {
                 MessageBox.Show(exc.Message);
             }
         }
     }
 }
コード例 #6
0
        public ActionResult DeleteConfirmed(int Id)
        {
            if (Id == 0)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            if (ModelState.IsValid)
            {
                BookRental bookRent = db.BookRentals.Find(Id);
                //remove record from the database
                db.BookRentals.Remove(bookRent);

                //gets the book object
                var bookInDb = db.Books.Where(b => b.ID.Equals(bookRent.BookID)).FirstOrDefault();

                //if the status is rented update the availability
                if (bookRent.Status.ToString().ToLower().Equals("rented"))
                {
                    bookInDb.Availability += 1;
                }

                db.SaveChanges();
            }

            return(RedirectToAction("Index"));
        }
コード例 #7
0
        private void txtRentalID_TextChanged(object sender, EventArgs e)
        {
            if (txtRentalID.Text == "")
            {
                return;
            }
            int        id   = int.Parse(txtRentalID.Text);
            BookRental rent = BookRentalDAO.Instance.GetRentalById(id);

            if (rent.Status == "Đã trả sách")
            {
                panel2.Visible  = false;
                lbPayed.Visible = true;
            }
            else
            {
                panel2.Visible  = true;
                lbPayed.Visible = false;
            }
            DateTime ReturnDate = DateTime.Parse(dtpReturnDate.Value.ToString("yyyy-MM-dd"));
            DateTime TermDate   = DateTime.Parse(dtpTermDate.Value.ToString("yyyy-MM-dd"));
            TimeSpan t          = ReturnDate - TermDate;
            double   result     = t.TotalDays;

            if (result > 0)
            {
                double percent = result / 100;
                nmOutDatePrice.Value = decimal.Parse(rent.Price.ToString()) * decimal.Parse(percent.ToString());
            }
            else
            {
                nmOutDatePrice.Value = 0;
            }
            nmTotalPrice.Value = nmTotalPrice.Value + nmOutDatePrice.Value;
        }
コード例 #8
0
        public ActionResult PickUp(BookRentalViewModel model)
        {
            if (model.ID == 0)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            if (ModelState.IsValid)
            {
                BookRental bookRent = db.BookRentals.Find(model.ID);
                bookRent.Status    = BookRental.StatusEnum.Rented;
                bookRent.StartDate = DateTime.Now;

                if (bookRent.RentalDuration == StaticDetails.TwelveMonthCount)
                {
                    bookRent.ScheduledReturnDate = DateTime.Now.AddMonths(Convert.ToInt32(StaticDetails.TwelveMonthCount));
                }

                else
                {
                    bookRent.ScheduledReturnDate = DateTime.Now.AddMonths(Convert.ToInt32(StaticDetails.SixMonthCount));
                }

                db.SaveChanges();
            }
            return(RedirectToAction("Index"));
        }
コード例 #9
0
        public bool RemoveBook(BookRental payload)
        {
            BookRental entity = bookRentalRepository.GetByBookAndRental(payload.BookId, payload.RentalId);

            bookRentalRepository.Delete(entity);
            return(bookRentalRepository.SaveChanges());
        }
コード例 #10
0
ファイル: BookRentalTest.cs プロジェクト: ZeusXD/BookStore
        public void Return_Successful_Return()
        {
            rentBookMock = bookRentalMock.RentReturnBook();
            var bookDal = new BookStoreDataMock(bookRentalMock.StoredBooks2());
            var result  = new BookRental(bookDal).ReturnBook(rentBookMock);

            Assert.True(result.Successful);
        }
コード例 #11
0
ファイル: BookRentalTest.cs プロジェクト: ZeusXD/BookStore
        public void Return_Unsuccessful_When_Book_Is_Not_Stored()
        {
            rentBookMock = bookRentalMock.RentReturnBook();
            var bookDal = new BookStoreDataMock(bookRentalMock.StoredBooks());
            var result  = new BookRental(bookDal).RentBook(rentBookMock);

            Assert.False(result.Successful);
        }
コード例 #12
0
        public bool AddBook(BookRental payload)
        {
            BookRental entity = new BookRental
            {
                BookId   = payload.BookId,
                RentalId = payload.RentalId
            };

            bookRentalRepository.Create(entity);
            return(bookRentalRepository.SaveChanges());
        }
コード例 #13
0
        public ActionResult TakeOutBook(int id)
        {
            UserRepository     userRepository     = new UserRepository();
            BookTypeRepository bookTypeRepository = new BookTypeRepository();
            BookRental         bookRental         = new BookRental()
            {
                User     = userRepository.GetSingleUser(Session["userName"].ToString()),
                BookType = bookTypeRepository.GetSingleBookType(id)
            };

            return(View(bookRental));
        }
コード例 #14
0
        public List <BookRental> SearchByUserName(string username)
        {
            List <BookRental> list = new List <BookRental>();
            string            sql  = "SELECT br.*, a.UserName, b.Name FROM dbo.BookRental AS br INNER JOIN dbo.Account AS a ON a.Id = br.IdAccount INNER JOIN dbo.Book AS b ON b.Id = br.IdBook WHERE a.UserName like '%" + username + "%'";
            DataTable         data = DataProvider.Instance.ExecuteQuery(sql);

            foreach (DataRow row in data.Rows)
            {
                BookRental book = new BookRental(row);
                list.Add(book);
            }
            return(list);
        }
コード例 #15
0
        //RETURN GET
        public ActionResult Return(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            BookRental bookRent = db.BookRentals.Find(id);
            var        model    = getVMFromBookRent(bookRent);

            if (model == null)
            {
                return(HttpNotFound());
            }
            return(View("Approve", model));
        }
コード例 #16
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (null == Session["BookRental"])
     {
         Response.Redirect("~/");
     }
     else
     {
         bookRental            = (Session["BookRental"] as BookRental);
         reserveNumber         = GetBookRentalIdAsString();
         reserveDate           = GetDateAsString(bookRental.RentalDate);
         reserveDueDate        = GetDateAsString(bookRental.RentalDueDate);
         Session["BookRental"] = null;
         ShowDetails();
     }
 }
コード例 #17
0
        public ActionResult Approve(BookRentalViewModel model)
        {
            if (model.ID == 0)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            if (ModelState.IsValid)
            {
                BookRental bookRent = db.BookRentals.Find(model.ID);
                bookRent.Status = BookRental.StatusEnum.Approved;
                db.SaveChanges();
            }

            return(RedirectToAction("Index"));
        }
コード例 #18
0
        protected void ReserveButton_Click(object sender, EventArgs e)
        {
            Button      button     = sender as Button;
            User        user       = Session["LoggedUser"] as User;
            List <Book> books      = Session["BookList"] as List <Book>;
            BookRental  bookRental = bookRentalController.ReserveBook(user, books.Find(tBook => tBook.PrimaryKey.Key == decimal.Parse(button.CommandArgument)));

            if (null == bookRental)
            {
                ShowErrorMessage(string.Format("{0}, you have a pending rental. Please, return the book(s) in your possession before renting again!", user.FirstName));
            }
            else
            {
                Session["BookRental"] = bookRental;
                Response.Redirect("~/ReserveDetails");
            }
        }
コード例 #19
0
        public async Task <IActionResult> PostRental(RentalResource resource)
        {
            var user = await _userManager.FindByIdAsync(resource.UserId);

            var rental = new Rental()
            {
                User         = user,
                DateCreated  = DateTime.Now,
                DeadlineDate = DateTime.Now.AddDays(1),
                IsFinished   = false
            };

            var booksLink = new List <BookRental>();

            foreach (var bookId in resource.BookIds)
            {
                var book = await _context.Books
                           .Include(b => b.Author)
                           .Include(b => b.RentalLinks)
                           .SingleOrDefaultAsync(b => b.Id == bookId);

                var bookRental = new BookRental()
                {
                    Book     = book,
                    BookId   = book.Id,
                    Rental   = rental,
                    RentalId = rental.Id
                };

                booksLink.Add(bookRental);

                book.RentalLinks.Add(bookRental);
            }

            rental.BooksLink = booksLink;

            user.Rentals.Add(rental);

            await _context.Rentals.AddAsync(rental);

            await _context.SaveChangesAsync();

            return(Ok(resource));
        }
コード例 #20
0
        public ActionResult Reserve(BookRentalViewModel book)
        {
            var    userid     = User.Identity.GetUserId();
            Book   bookToRent = db.Books.Find(book.BookID);
            double rentalPr   = 0;

            if (userid != null)
            {
                var chargeRate = from u in db.Users
                                 join m in db.Memberships
                                 on u.MembershipID equals m.ID
                                 where u.Id.Equals(userid)
                                 select new { m.ChargeRateSixMonth, m.ChargeRateTwelveMonth };

                if (book.RentalDuration == StaticDetails.TwelveMonthCount)
                {
                    rentalPr = Convert.ToDouble(bookToRent.Price) * Convert.ToDouble(chargeRate.ToList()[0].ChargeRateTwelveMonth) / 100;
                }
                else
                {
                    rentalPr = Convert.ToDouble(bookToRent.Price) * Convert.ToDouble(chargeRate.ToList()[0].ChargeRateSixMonth) / 100;
                }

                BookRental bookRent = new BookRental
                {
                    BookID         = bookToRent.ID,
                    UserID         = userid,
                    RentalDuration = book.RentalDuration,
                    RentalPrice    = rentalPr,
                    Status         = BookRental.StatusEnum.Requested,
                };

                db.BookRentals.Add(bookRent);
                //finds record from the database
                var bookInDb = db.Books.SingleOrDefault(c => c.ID == book.BookID);
                //update availability
                bookInDb.Availability -= 1;
                db.SaveChanges();
                return(RedirectToAction("Index", "BookRental"));
            }

            return(View());
        }
コード例 #21
0
        //GET DETAILS
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            //will find rental record from the database
            BookRental bookRent = db.BookRentals.Find(id);

            //references private function getVMFromBookRent()
            var model = getVMFromBookRent(bookRent);

            if (model == null)
            {
                return(HttpNotFound());
            }
            return(View(model));
        }
コード例 #22
0
        //converts bookrent object into a BookRentalViewModel object
        private BookRentalViewModel getVMFromBookRent(BookRental bookRent)
        {
            //retrieves book from the database
            Book bookSelected = db.Books.Where(b => b.ID == bookRent.BookID).FirstOrDefault();

            var userDetails = from u in db.Users
                              where u.Id.Equals(bookRent.UserID)
                              select new { u.Id, u.FirstName, u.LastName, u.BirthDate, u.Email };

            BookRentalViewModel model = new BookRentalViewModel
            {
                ID                  = bookRent.ID,
                BookID              = bookSelected.ID,
                RentalPrice         = bookRent.RentalPrice,
                Price               = bookSelected.Price,
                Pages               = bookSelected.Pages,
                FirstName           = userDetails.ToList()[0].FirstName,
                LastName            = userDetails.ToList()[0].LastName,
                BirthDate           = userDetails.ToList()[0].BirthDate,
                ScheduledReturnDate = bookRent.ScheduledReturnDate,
                Author              = bookSelected.Author,
                StartDate           = bookRent.StartDate,
                Availability        = bookSelected.Availability,
                AdditionalCharge    = bookRent.AdditionalCharge,
                DateAdded           = bookSelected.DateAdded,
                Description         = bookSelected.Description,
                Email               = userDetails.ToList()[0].Email,
                GenreID             = bookSelected.GenreID,
                Genre               = db.Genres.FirstOrDefault(g => g.ID.Equals(bookSelected.GenreID)),
                ISBN                = bookSelected.ISBN,
                ImageUrl            = bookSelected.ImageUrl,
                PublicationDate     = bookSelected.PublicationDate,
                Publisher           = bookSelected.Publisher,
                RentalDuration      = bookRent.RentalDuration,
                Status              = bookRent.Status.ToString(),
                Title               = bookSelected.Title,
                UserID              = userDetails.ToList()[0].Id
            };

            return(model);
        }
コード例 #23
0
        public ActionResult Decline(BookRentalViewModel model)
        {
            if (model.ID == 0)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            if (ModelState.IsValid)
            {
                BookRental bookRent = db.BookRentals.Find(model.ID);
                bookRent.Status = BookRental.StatusEnum.Rejected;

                //find book from database
                Book bookInDb = db.Books.Find(bookRent.BookID);
                //update the availability
                bookInDb.Availability += 1;
                db.SaveChanges();
            }

            return(RedirectToAction("Index"));
        }
コード例 #24
0
        public ActionResult Rent()
        {
            //wyciagnac id usera
            //pojechac po petli z carta
            //stworzyc nowe BookRental
            //dodac do bazy
            var cart = (List <int>)Session["Cart"];

            if (cart == null || !cart.Any())
            {
                return(View("EmptyCart"));
            }
            string ADusername = User.Identity.Name.ToString();
            string guid       = User.Identity.GetUserId();

            var books      = db.Books.AsQueryable();
            var libUser    = db.Users.AsQueryable().FirstOrDefault(x => x.Guid == guid);
            var dateRental = DateTime.Now;
            var dateReturn = dateRental.AddMonths(3);

            foreach (var cartBook in cart)
            {
                var copy       = books.Where(x => x.Id == cartBook).Select(book => book.BookCopies.FirstOrDefault(bookCopy => !bookCopy.BookRentals.Any(r => r.IsFinished))).FirstOrDefault();
                var bookRental = new BookRental
                {
                    BookCopyId = copy.Id,

                    UserId     = libUser.Id,
                    DateRental = dateRental,
                    DateReturn = dateReturn,
                    EmployeeId = 1,
                    IsFinished = true,
                };
            }

            return(RedirectToAction(nameof(this.Index)));
        }
コード例 #25
0
        public ActionResult Return(BookRentalViewModel model)
        {
            if (model.ID == 0)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            if (ModelState.IsValid)
            {
                BookRental bookRent = db.BookRentals.Find(model.ID);
                bookRent.Status = BookRental.StatusEnum.Closed;
                //allows admin to add additional charge
                bookRent.AdditionalCharge = model.AdditionalCharge;


                Book bookInDb = db.Books.Find(bookRent.BookID);
                //update book availability
                bookInDb.Availability += 1;

                db.SaveChanges();
            }

            return(RedirectToAction("Index"));
        }
コード例 #26
0
        public ActionResult Create(BookRentalViewModel bookRent)
        {
            if (ModelState.IsValid)
            {
                //retrieve email
                var email = bookRent.Email;

                //retrieve details
                var userDetails = from u in db.Users
                                  where u.Email.Equals(email)
                                  select new { u.Id, u.FirstName, u.LastName, u.BirthDate };

                //store isbn in variable
                var  ISBN           = bookRent.ISBN;
                Book bookSelected   = db.Books.Where(b => b.ISBN == ISBN).FirstOrDefault();
                var  rentalDuration = bookRent.RentalDuration;

                var chargeRate = from u in db.Users
                                 join m in db.Memberships
                                 on u.MembershipID equals m.ID
                                 where u.Email.Equals(email)
                                 select new { m.ChargeRateSixMonth, m.ChargeRateTwelveMonth };

                var sixMonthRental    = Convert.ToDouble(bookSelected.Price) * Convert.ToDouble(chargeRate.ToList()[0].ChargeRateSixMonth) / 100;
                var twelveMonthRental = Convert.ToDouble(bookSelected.Price) * Convert.ToDouble(chargeRate.ToList()[0].ChargeRateTwelveMonth) / 100;

                double rentalPr = 0;

                if (bookRent.RentalDuration == StaticDetails.TwelveMonthCount)
                {
                    rentalPr = twelveMonthRental;
                }
                else
                {
                    rentalPr = sixMonthRental;
                }

                BookRentalViewModel model = new BookRentalViewModel
                {
                    BookID              = bookSelected.ID,
                    RentalPrice         = rentalPr,
                    Price               = bookSelected.Price,
                    Pages               = bookSelected.Pages,
                    FirstName           = userDetails.ToList()[0].FirstName,
                    LastName            = userDetails.ToList()[0].LastName,
                    BirthDate           = userDetails.ToList()[0].BirthDate,
                    ScheduledReturnDate = bookRent.ScheduledReturnDate,
                    Author              = bookSelected.Author,
                    Availability        = bookSelected.Availability,
                    DateAdded           = bookSelected.DateAdded,
                    Description         = bookSelected.Description,
                    Email               = email,
                    GenreID             = bookRent.GenreID,
                    Genre               = db.Genres.Where(g => g.ID.Equals(bookSelected.GenreID)).First(),
                    ISBN                   = bookSelected.ISBN,
                    ImageUrl               = bookSelected.ImageUrl,
                    PublicationDate        = bookSelected.PublicationDate,
                    Publisher              = bookSelected.Publisher,
                    RentalDuration         = bookRent.RentalDuration,
                    Status                 = BookRental.StatusEnum.Requested.ToString(),
                    Title                  = bookSelected.Title,
                    UserID                 = userDetails.ToList()[0].Id,
                    RentalPriceSixMonth    = sixMonthRental,
                    RentalPriceTwelveMonth = twelveMonthRental
                };

                BookRental modelToAddToDb = new BookRental
                {
                    BookID              = bookSelected.ID,
                    RentalPrice         = rentalPr,
                    ScheduledReturnDate = bookRent.ScheduledReturnDate,
                    RentalDuration      = bookRent.RentalDuration,
                    Status              = BookRental.StatusEnum.Approved,
                    UserID              = userDetails.ToList()[0].Id
                };

                //decreases availability when user requests a book
                bookSelected.Availability -= 1;
                db.BookRentals.Add(modelToAddToDb);
                db.SaveChanges();

                return(RedirectToAction("Index"));
            }

            return(View());
        }
コード例 #27
0
 public IActionResult AddBook(BookRental payload)
 {
     return(Ok(service.AddBook(payload)));
 }