public void DeleteBorrowRequest(BorrowRequest request)
        {
            MediaLibContainer context = ContextHelper <MediaLibContainer> .GetCurrentContext();

            context.BorrowRequestSet.DeleteObject(request);
            context.SaveChanges();
        }
示例#2
0
        /// <summary>
        /// Submits borrow request to borrowRequsts table in database
        /// </summary>
        /// <param name="id"> Movie id </param>
        /// <returns> Task </returns>
        public async Task <IActionResult> OnPostAsync(long?id)
        {
            // Retrieve the movie user wants to borrow
            var borrowedMovie = await Context.Movie.FirstOrDefaultAsync(m => m.ID == id);

            // Check in borrowRequests table if such request already exists and that is active
            var checkDuplicates = await Context.BorrowRequest.FirstOrDefaultAsync(m => m.Title == borrowedMovie.Title &&
                                                                                  m.UserID == AuthenticatedUserInfo.ObjectIdentifier &&
                                                                                  m.RequestStatus != "Expired - Movie Returned");

            // If active request exists tell the user that their previous request is pending approva
            if (checkDuplicates != null && checkDuplicates.RequestStatus != "Declined")
            {
                return(RedirectToPage("./WarningPage"));
            }

            // Assamble borrow request
            BorrowRequest = new BorrowRequest
            {
                Title                  = borrowedMovie.Title,
                Category               = borrowedMovie.Category,
                RequestDate            = DateTime.UtcNow,
                SharedWithFirstName    = AuthenticatedUserInfo.FirstName,
                SharedWithLastName     = AuthenticatedUserInfo.LastName,
                UserID                 = AuthenticatedUserInfo.ObjectIdentifier,
                SharedwithEmailAddress = AuthenticatedUserInfo.EmailAddress,
                RequestStatus          = "Review Pending"
            };

            // Add request to Borrow Request Table
            Context.BorrowRequest.Add(BorrowRequest);
            await Context.SaveChangesAsync();

            return(RedirectToPage("./Index"));
        }
示例#3
0
        public void RequestBorrowBook(string borrower, string lender, Guid bookId)
        {
            if (borrower == null || lender == null || bookId == null || borrower == lender)
            {
                throw new Exception("Cannot make request");
            }

            using (var context = new ApplicationDbContext())
            {
                UsersBooks userbook = context.UsersBooks.FirstOrDefault(x => x.BookId == bookId && x.UserId == lender);
                if (userbook == null)
                {
                    throw new Exception("User does not own this book");
                }
                if (userbook.Borrowed || userbook.Lent)
                {
                    throw new Exception("Book is borrowed or lent, cannot make request");
                }
                BorrowRequest request = new BorrowRequest()
                {
                    BookId     = bookId,
                    BorrowerId = borrower,
                    LenderId   = lender
                };

                context.BorrowRequests.Add(request);
                context.SaveChanges();
            }
        }
示例#4
0
 public static BorrowRequestDTO ToDTO(this BorrowRequest model, BookDTO book, UserDTO user)
 {
     return(model == null ? null : new BorrowRequestDTO()
     {
         Book = book,
         Borrower = user
     });
 }
示例#5
0
文件: Mutation.cs 项目: Kcola/Library
        public async Task <Borrows> Borrowed(BorrowRequest borrowRequest)
        {
            if (!_repository.CopyAvailable(borrowRequest.Copyid))
            {
                return(new Borrows());
            }
            var borrowInfo = await _repository.BorrowTransaction(borrowRequest);

            return(borrowInfo);
        }
示例#6
0
        public ItemShare RequestBorrow(BorrowRequest request)
        {
            if (null == request)
            {
                throw new ArgumentNullException("request");
            }

            var userId = User.Identifier();

            return(this.borrow.Request(request, userId));
        }
示例#7
0
 public bool ApproveRequest(BorrowRequest request)
 {
     if (request.GetNumberOfDays() <= Supervisor.GetMaxDayCanAprove())
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
        public void BorrowRequestUserMedia(string usernameTo, T media)
        {
            BorrowRequest request = new BorrowRequest();

            request.User      = media.User;
            request.UserMedia = media;
            request.UserTo    = usernameTo;

            media.User.BorrowRequest.Add(request);
            Save();
        }
        public async Task <ActionResult <BorrowRequest> > PostBorrowRequests(BorrowRequest borrowRequest)
        {
            if (_context.BorrowDetails.Count() > 5)
            {
                return(BadRequest("Khong the lay tren 5 quyen"));
            }

            _context.BorrowRequests.Add(borrowRequest);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetBorrowRequests", new { id = borrowRequest.BorrowRequestId }, borrowRequest));
        }
示例#10
0
        public BorrowRequest CreateBorrowRequest(BorrowRequestDTO borrowRequestDTO)
        {
            var entity = new BorrowRequest
            {
                UserId      = borrowRequestDTO.UserId,
                Status      = "Waiting",
                CreatedDate = DateTime.Now
            };

            _repository.Insert(entity);
            return(entity);
        }
        public async Task <ActionResult <BorrowRequestResponse> > PostBorrowRequest(BorrowRequest borrowRequest)
        {
            try
            {
                await _repository.Create(borrowRequest);
            }
            catch (ArgumentException e)
            {
                return(BadRequest(e.Message));
            }

            return(CreatedAtAction("GetBorrowRequest", new { id = borrowRequest.Id }, borrowRequest));
        }
示例#12
0
        /// <summary>
        /// Shows details of borrowRequest
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <IActionResult> OnGetAsync(long?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            BorrowRequest = await _context.BorrowRequest.FirstOrDefaultAsync(m => m.ID == id);

            if (BorrowRequest == null)
            {
                return(NotFound());
            }
            return(Page());
        }
示例#13
0
        /// <summary>
        /// Deletes borrow Request
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <IActionResult> OnPostAsync(long?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            BorrowRequest = await _context.BorrowRequest.FindAsync(id);

            if (BorrowRequest != null)
            {
                _context.BorrowRequest.Remove(BorrowRequest);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./Index"));
        }
示例#14
0
        public IActionResult CreateBorrowRequest([FromBody] BorrowRequestDTO borrowRequestDTO)
        {
            try
            {
                if (borrowRequestDTO == null)
                {
                    _logger.LogError("BorrowingRequest object sent from client is null.");
                    return(BadRequest("BorrowingRequest object is null"));
                }

                else if (!ModelState.IsValid)
                {
                    _logger.LogError("Invalid BorrowingRequest object sent from client.");
                    return(ValidationProblem("Invalid model object"));
                }

                else
                {
                    // int[] arrayBookIds = _services.arrayBookIds(borrowRequestDTO);
                    bool isBRValid         = _services.IsBRInABRValid(borrowRequestDTO);
                    bool isBRInAMonthValid = _services.IsNumberOfTimesBRInMonthValid(borrowRequestDTO);

                    if (isBRValid == false)
                    {
                        return(ValidationProblem("One borrowing request more than 1 book(maximum is 5 books)"));
                    }

                    if (isBRInAMonthValid == false)
                    {
                        return(ValidationProblem("You can't create 3 borrow requests in a month"));
                    }

                    BorrowRequest entity = _services.CreateBorrowRequest(borrowRequestDTO);

                    _services.CreateBorrowRequestDetails(entity.Id, borrowRequestDTO);

                    return(CreatedAtRoute("BorrowingRequestById", new { id = entity.Id }, entity));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Something went wrong inside Create Borrow Request action: {ex.Message}");
                return(StatusCode(500, "Internal server error"));
            }
        }
        public IActionResult Insert(BorrowRequest borrowRequest, int userId)
        {
            var checkBorrowInMonth = _brRepository.GetAll().Count(br => br.UserId == userId && br.BorrowDate.Month == DateTime.Now.Month);

            if (checkBorrowInMonth < 3)
            {
                if (borrowRequest.BorrowRequestDetails.Count <= 5)
                {
                    borrowRequest.BorrowDate = DateTime.Now;
                    borrowRequest.Status     = (Status)0;
                    borrowRequest.UserId     = userId;
                    _brRepository.Insert(borrowRequest);
                    return(Ok(borrowRequest));
                }
                return(BadRequest("Ban ko the muon 5 cuon sach 1 luc"));
            }
            return(BadRequest("Ban ko the muon qua 3 lan trong 1 thang"));
        }
示例#16
0
        public override bool BorrowBook(int days)
        {
            if (User.CurrentChoose.Count == 0)
            {
                Console.WriteLine("You need to choose some books first");
            }

            DateTime date = DateTime.Now.AddDays(days);

            foreach (var book in User.CurrentChoose)
            {
                BorrowRequest borrowRequest = new BorrowRequest(DateTime.Now, date, book);
                User.ApplyRequest(borrowRequest);
            }

            Menu.SetMenuState(Menu.BorrowBookState);
            return(true);
        }
示例#17
0
        public ActionResult UpdateBorrowRequest(int id, [FromBody] BorrowRequest newBorrowingRequest)
        {
            try
            {
                var oldBorrowingRequest = _repository.GetBorrowRequestById(id);

                if (newBorrowingRequest == null)
                {
                    _logger.LogError("BorrowingRequest object sent from client is null.");
                    return(BadRequest("BorrowingRequest object is null"));
                }
                else if (!ModelState.IsValid)
                {
                    _logger.LogError("Invalid BorrowingRequest object sent from client.");
                    return(ValidationProblem("Invalid model object"));
                }
                else if (oldBorrowingRequest == null)
                {
                    _logger.LogError($"BorrowingRequest with id: {id}, hasn't been found in db.");
                    return(NotFound());
                }
                else
                {
                    var borrowingRequestEntity = new BorrowRequest
                    {
                        Id           = id,
                        UserId       = newBorrowingRequest.UserId,
                        Status       = newBorrowingRequest.Status,
                        CreatedDate  = oldBorrowingRequest.CreatedDate,
                        ModifiedDate = DateTime.Now
                    };

                    _repository.Update(borrowingRequestEntity);

                    return(NoContent());
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Something went wrong inside Update BorrowingRequest action: {ex.Message}");
                return(StatusCode(500, "Internal server error"));
            }
        }
示例#18
0
 public void ApplyRequest(BorrowRequest request)
 {
     if (ApproveRequest(request))
     {
         Console.WriteLine(request.RequestNumber + " approved by " + Supervisor.ToString() + " for " + request.GetNumberOfDays() + "days");
         BorrowedBooks.Add(new KeyValuePair <DateTime, Book> (request.EndDay, request.BorrowedBook));
     }
     else
     {
         this.Supervisor = Supervisor.Supervisor;
         if (Supervisor == null)
         {
             Console.WriteLine("You cannot borrow a book for more than 60 days");
         }
         else
         {
             ApplyRequest(request);
         }
     }
 }
        private async Task <bool> Validate(BorrowRequest request, Book book)
        {
            if (book == null)
            {
                Errors.Add($"The requested book with id '{request.BookId}' not found!");
            }
            else if (book.AvailableCopies == 0)
            {
                Errors.Add($"There are no copies available '{book.Title}', please try latter!");
            }
            else
            {
                var borrowedBooks = await _userBookRepository.GetByUserIdAsync(request.UserId);

                if (borrowedBooks.Count >= 2)
                {
                    Errors.Add($"Not allowed to have more than two books borrowed!");
                }
            }
            return(Errors.Count == 0);
        }
示例#20
0
        public async Task <ActionResult> BorrowBook([FromBody] BorrowRequest borrowRequest)
        {
            var currentPerson = personService.GetPersonJwtUsername();

            var book = await bookService.FindBookById(borrowRequest.BookId);

            var person = await personService.FindPersonByUsername(currentPerson);

            if (book is null || !book.IsAvailable)
            {
                return(BadRequest(new ErrorResponse(ErrorTypes.NotFound.EnumDescription())));
            }

            var borrow = new BorrowInfo(person, book);
            await personService.BorrowBook(borrow);

            await bookService.UpdateBookOwner(book, person);

            var borrowMapper = mapper.Map <BorrowResponse>(borrow);

            return(Ok(borrowMapper));
        }
        public async Task <MessageResponse <BorrowResponse> > Handle(BorrowRequest request, CancellationToken cancellationToken)
        {
            try
            {
                var book = await _bookRepository.GetById(request.BookId);

                if (!await Validate(request, book))
                {
                    return(new MessageResponse <BorrowResponse>(MessageType.Validation, new MessageResponseError("Validate", Errors.First())));
                }

                book.AvailableCopies--;
                await _bookRepository.Update(book);

                await _userBookRepository.AddAsync(new UserBook(request.UserId, request.BookId));

                return(new MessageResponse <BorrowResponse>(new BorrowResponse()));
            }
            catch (Exception e)
            {
                return(new MessageResponse <BorrowResponse>(MessageType.Error, e));
            }
        }
示例#22
0
        /// <summary>
        /// Returns movie
        /// </summary>
        /// <param name="id">Movie ID</param>
        /// <returns></returns>
        public async Task <IActionResult> OnPostAsync(long?id)
        {
            // Retrieve movie by its ID and remove ownership fields
            Movie = await Context.Movie.FirstOrDefaultAsync(m => m.ID == id);

            Movie.IsShareable            = true;
            Movie.SharedWithFirstName    = "";
            Movie.SharedWithLastName     = "";
            Movie.SharedwithEmailAddress = "";
            Movie.UserID  = "";
            Movie.Request = "";

            // If the user (other than the owner) is returning the movie, retrieve borrowRequest and change its status to "Expired - Returned"
            if (AuthenticatedUserInfo.ObjectIdentifier != "c17f0d89-9862-45ca-beca-5b0c5ca2ae7e")
            {
                this.BorrowRequest = await Context.BorrowRequest.FirstOrDefaultAsync(m => m.Title == Movie.Title &&
                                                                                     m.UserID == AuthenticatedUserInfo.ObjectIdentifier &&
                                                                                     m.RequestStatus != "Expired - Movie Returned");
            }

            // Same function but for the owner
            else
            {
                this.BorrowRequest = await Context.BorrowRequest.FirstOrDefaultAsync(m => m.Title == Movie.Title &&
                                                                                     m.RequestStatus != "Expired - Movie Returned");
            }

            BorrowRequest.RequestStatus = "Expired - Movie Returned";

            // Update entities in the database
            Context.Attach(BorrowRequest).State = EntityState.Modified;
            Context.Attach(Movie).State         = EntityState.Modified;

            await Context.SaveChangesAsync();

            return(RedirectToPage("./Index"));
        }
示例#23
0
        public async Task <Borrows> BorrowTransaction(BorrowRequest borrowRequest)
        {
            var borrowTransaction = new Borrows()
            {
                Readerid = borrowRequest.Readerid,
                Docid    = borrowRequest.Docid,
                Libid    = borrowRequest.Libid,
                Copyid   = borrowRequest.Copyid,
                Duedate  = borrowRequest.Duedate,
                Btime    = borrowRequest.Btime,
                Position = borrowRequest.Position
            };
            await _library.Borrows.AddAsync(borrowTransaction);

            var copy = _library.Copy.FirstOrDefault(x => x.Copyid == borrowTransaction.Copyid);

            if (copy != null)
            {
                copy.Available = false;
            }
            await _library.SaveChangesAsync();

            return(borrowTransaction);
        }
示例#24
0
        public ItemShare Request(BorrowRequest borrow, Guid userIdentifier)
        {
            if (null == borrow)
            {
                throw new ArgumentNullException("borrow");
            }

            if (Guid.Empty == userIdentifier)
            {
                throw new ArgumentException("user identifier");
            }

            if (Guid.Empty == borrow.ItemIdentifier)
            {
                throw new ArgumentException("item identifier");
            }

            var sproc = new GoodsBorrow()
            {
                ItemIdentifier = borrow.ItemIdentifier,
                UserIdentifier = userIdentifier,
                On             = borrow.On,
                Until          = borrow.Until,
                Comment        = borrow.Comment,
            };

            var data = sproc.CallObject <ItemShare>();

            if (null != data)
            {
                this.email.BorrowRequest(data);
                this.activity.RequestBorrow(data);
            }

            return(data);
        }
        public async Task <IActionResult> PutBorrowRequest(int id, BorrowRequest borrowRequest)
        {
            try
            {
                await _repository.Update(id, borrowRequest);
            }
            catch (ArgumentException e)
            {
                if (e.InnerException == null)
                {
                    return(BadRequest(e.Message));
                }
                else
                {
                    return(NotFound(e.Message));
                }
            }
            catch (DbUpdateConcurrencyException)
            {
                throw;
            }

            return(NoContent());
        }
示例#26
0
        public void AcceptBorrowBookRequest(string requester, string borrowFromId, Guid bookId)
        {
            if (requester == borrowFromId)
            {
                throw new Exception("Cannot borrow from self.");
            }
            using (var context = new ApplicationDbContext())
            {
                UsersBooks userBook = context.UsersBooks.FirstOrDefault(x => x.BookId == bookId && x.UserId == borrowFromId);
                if (userBook == null)
                {
                    //LOG
                    throw new Exception("Cannot find UserBook");
                }


                var book = context.Books.FirstOrDefault(x => x.Id == bookId);

                ApplicationUser borrower = context.Users.FirstOrDefault(x => x.Id == requester);
                if (borrower == null)
                {
                    throw new Exception("Borrower does not exist");
                }

                userBook.Lent     = true;
                userBook.LentToId = borrower.Id;
                userBook.LentTo   = borrower;


                ApplicationUser borrowFrom = context.Users.FirstOrDefault(x => x.Id == borrowFromId);
                if (borrowFrom == null)
                {
                    throw new Exception("BorrowFrom does not exist");
                }
                var newUserBook = new UsersBooks()
                {
                    BookId         = bookId,
                    UserId         = borrower.Id,
                    Public         = true,
                    Borrowed       = true,
                    BorrowedFrom   = borrowFrom,
                    BorrowedFromId = borrowFromId,
                    Lent           = false,
                    Book           = book
                };
                context.UsersBooks.Add(newUserBook);

                BorrowRequest request = context.BorrowRequests.FirstOrDefault(x => x.BookId == bookId && x.BorrowerId == requester && x.LenderId == borrowFromId);
                context.BorrowRequests.Remove(request);


                Activity activity = new Activity()
                {
                    Id           = Guid.NewGuid(),
                    BookId       = book.Id,
                    OwnerId      = requester,
                    TimeStampUTC = DateTime.Now.ToUniversalTime(),
                    Type         = ActivityType.BorrowedBook
                };
                context.Activities.Add(activity);
                context.SaveChanges();
            }
        }