public bool BorrowBook(int bookId, int memberId) { var book = _bookRepository.GetById(bookId); var member = _memberRepository.GetById(memberId); if (book.AvailableCopies > 1) { book.AvailableCopies -= 1; } else { return(false); } _bookRepository.Save(book); _memberRepository.Save(member); var memberBook = new MemberBook(); memberBook.BookId = bookId; memberBook.MemberId = memberId; memberBook.DateBorrowed = DateTime.Now; _memberBookRepository.Save(memberBook); return(true); }
public async Task <IActionResult> Edit(int id, [Bind("MemberId,BookId,DeliveryDate,IsTakenBack,Id")] MemberBook memberBook) { if (id != memberBook.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(memberBook); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!MemberBookExists(memberBook.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } FillDropdowns(memberBook); return(View(memberBook)); }
public void AddMemberBook(MemberBook memberBook) { string sql = "INSERT INTO member_book (member_id, book_id) VALUES (@memberId, @bookId)"; using (MySqlConnection conn = new MySqlConnection(connectionString)) { DefaultTypeMap.MatchNamesWithUnderscores = true; conn.Execute(sql, new { memberId = memberBook.MemberId, bookId = memberBook.BookId }); } }
public ActionResult Library(string dummy) //int id { ViewBag.Error = ""; int id = int.Parse(Request.Form["bookid"]); string email = Request.Form["email"]; string action = Request.Form["action"].ToLower(); Book bk = unitOfWork.BookRepository.GetByID(id); Member mem; mem = unitOfWork.MemberRepository.DbSet.SingleOrDefault <Member>(m => m.ApplicationUser.Email == email); if (mem == null) { //ViewBag.memberExists = false; ViewBag.Error = "Member Doesn't Exist or Incorrect Email"; } else //Member was found by Email and is in the DB { //////////////////////////////Check if Member is Verified or Not///////////////////////////////////////// //Check if Member is prevented or not bool RemainPrevented = false; if (mem.IsPrevented) { List <MemberBook> mBooks; //PREVENT READ CHECK mBooks = unitOfWork.MemberBookRepository.DbSet.Where(mb => mb.Member.Id == mem.Id && mb.Borrow == false).ToList <MemberBook>(); foreach (MemberBook mBook in mBooks) { // are all return dates+7 > today and not returned in the same day and not borrowed today if (mBook.BorrowDate != DateTime.Today && mBook.ReturnDate == null || mBook.ReturnDate != null && mBook.BorrowDate != mBook.ReturnDate && ((DateTime)mBook.ReturnDate).AddDays(7) > DateTime.Today) { RemainPrevented = true; } } //PREVENT BORROW CHECK mBooks = unitOfWork.MemberBookRepository.DbSet.Where(mb => mb.Member.Id == mem.Id && mb.Borrow == true).ToList <MemberBook>(); //are all return dates+7 > today foreach (MemberBook mBook in mBooks) { if ((((DateTime)mBook.BorrowDate).AddDays(14) < DateTime.Today && mBook.ReturnDate == null) || ((DateTime)mBook.BorrowDate).AddDays(14) < mBook.ReturnDate && ((DateTime)mBook.ReturnDate).AddDays(7) > DateTime.Today) //mBook.ReturnDate != null && ((DateTime)mBook.ReturnDate).AddDays(7) > DateTime.Today) //ReturnDate!=null to prevent exception { RemainPrevented = true; } } //else set IsPrevened = false and let member borrow the book if (!RemainPrevented) { mem.IsPrevented = false; } } if (RemainPrevented) { ViewBag.Error = "This Member is Temporarily Prevented From Borrowing"; } else // Member is not Prevented { if (action == "read") { MemberBook mBook; mBook = unitOfWork.MemberBookRepository.DbSet.SingleOrDefault <MemberBook>(mb => mb.BookID == id && mb.ReturnDate == null && mb.Borrow == false); if (mBook != null) { ViewBag.Error = "Another Member is Currently Reading this Book"; } else { if (bk.NoOfAvailableCopies <= 0) //no Available Copies { ViewBag.Error = "There are Currently No Available Copies For Reading"; } else { //Check if Member Book Read is in DB or not mBook = unitOfWork.MemberBookRepository.DbSet.SingleOrDefault <MemberBook>(mb => mb.BookID == id && mb.Member.Id == mem.Id && mb.Borrow == false); if (mBook == null) //Create a new Record in DB { mBook = new MemberBook { Id = mem.Id, BookID = id, BorrowDate = DateTime.Today, ReadCount = 1, Borrow = false }; bk.NoOfBorrowedCopies++; unitOfWork.MemberBookRepository.Insert(mBook); } else // a Record was found { mBook.ReadCount++; mBook.BorrowDate = DateTime.Today; mBook.ReturnDate = null; bk.NoOfBorrowedCopies++; } unitOfWork.Save(); } } } else //Borrow { if (bk.NoOfAvailableCopies <= 1) //no Available Copies: Library must have a spare book for reading { ViewBag.Error = "There are Currently No Available Copies For Borrowing"; } else //Can Borrow Book { MemberBook mBook; mBook = unitOfWork.MemberBookRepository.DbSet.SingleOrDefault <MemberBook>(mb => mb.BookID == id && mb.Member.Id == mem.Id && mb.Borrow == true); //&& mb.ReturnDate==null); if (mBook == null) //Create a new Record in DB { mBook = new MemberBook { Id = mem.Id, BookID = id, BorrowDate = DateTime.Today, BorrowCount = 1, Borrow = true }; unitOfWork.MemberBookRepository.Insert(mBook); bk.NoOfBorrowedCopies++; unitOfWork.Save(); } else // a Record was found { if (mBook.ReturnDate == null) { ViewBag.Error = "This Member has a Copy of this body and has not returned it yet"; } else //book was borrowed and returned { mBook.BorrowCount++; mBook.BorrowDate = DateTime.Today; mBook.ReturnDate = null; bk.NoOfBorrowedCopies++; unitOfWork.Save(); } } // end of a Record was Found } // end of Can Borrow Book } //end of Read or Borrow } // end of Member is not Prevented } //end of Member was found by Email and is in the DB return(View(nameof(Library), unitOfWork.BookRepository.Get())); } // end of Action
public async Task <IActionResult> Create([Bind("MemberId,BookId,DeliveryDate,IsTakenBack")] MemberBook memberBook) { if (ModelState.IsValid) { var book = await _context.Books .Include(x => x.Author) .FirstOrDefaultAsync(b => b.Id == memberBook.BookId); if (book == null) { return(NotFound()); } var member = await _context.Members .Include(m => m.MemberBooks) .FirstOrDefaultAsync(m => m.Id == memberBook.MemberId); if (member == null) { return(NotFound()); } var nonTakenBackBookNames = await _context.MemberBooks .Include(mb => mb.Book) .Where(mb => !mb.IsTakenBack && mb.DeliveryDate < DateTime.Now.AddDays(-15)) .Select(mb => mb.Book.Name) .ToListAsync(); if (book.Quantity == 0) { ModelState.AddModelError(string.Empty, $"\"{book.Author.FullName} - {book.Name}\" adlı kitap mevcut değildir!"); } else if (nonTakenBackBookNames.Any()) { ModelState.AddModelError(string.Empty, $"\"{member.FullName}\" adlı üyenin 15 gün içerisinde teslim etmediği kitap(lar) mevcut olduğu için yeni kitap teslimi yapılamaz!{Environment.NewLine}Teslim edilmesi gereken kitap(lar):"); foreach (var bookName in nonTakenBackBookNames) { ModelState.AddModelError(string.Empty, bookName); } } else if (member.MemberBooks.Any(mb => mb.BookId == memberBook.BookId && !mb.IsTakenBack)) { ModelState.AddModelError(string.Empty, $"\"{member.FullName}\" adlı üye \"{book.Name}\" adlı kitabı daha önce teslim almıştır!"); } else if (member.MemberBooks.Count(b => !b.IsTakenBack) == 3) { ModelState.AddModelError(string.Empty, $"\"{member.FullName}\" adlı üye en fazla 3 adet kitap teslim alabilir!"); } else { book.Quantity--; _context.Update(book); _context.Add(memberBook); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } } FillDropdowns(memberBook); return(View(memberBook)); }
private void FillDropdowns(MemberBook memberBook) { ViewData["BookId"] = new SelectList(_context.Books, "Id", "Name", memberBook.BookId); ViewData["MemberId"] = new SelectList(_context.Members, "Id", "FullName", memberBook.MemberId); }
public IActionResult CheckOutBook([FromForm] MemberBook newMemberBook) { _checkOutService.AddMemberBook(newMemberBook); return(View("Index")); }