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));
        }
Esempio n. 3
0
        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);
 }
Esempio n. 7
0
        public IActionResult CheckOutBook([FromForm] MemberBook newMemberBook)

        {
            _checkOutService.AddMemberBook(newMemberBook);
            return(View("Index"));
        }