//Permitir Reserva de Livros se: //Se Estoque de livro for > 0 //Se livro não estiver descontinuado (inativo) //Se usuario nao estiver bloqueado //Se usuário não estiver dois empréstimos em progresso //Se data informada for menor que 30 dias //Se instituição nao estiver inativa public async Task <ReturnModel> BookReservation(BookLoanRequest request) { var(condition, errorMsg) = await CanUserLoanBook(request.UserId, request.BookId, request.LoanUntil); if (!condition) { return new ReturnModel { Errors = errorMsg } } ; var bookInventory = await _bookInventoryRepository.GetByBookId(request.BookId); bookInventory.Quantity -= 1; await _bookInventoryRepository.Update(bookInventory); var bookLoan = new BookLoan { BeginDate = DateTime.Now, EndDate = request.LoanUntil, BookId = request.BookId, UserId = request.UserId, LoanStatusId = (int)BookLoanStatus.BookReserved }; var result = await _bookLoanRepository.Insert(bookLoan); return(new ReturnModel { Data = _mapper.Map <BookLoanModel>(result) }); }
public async Task <ActionResult> LoanBookToUser(BookLoanRequest request) { var result = await _bookLoanService.CreateBookLoan(request); if (result.Errors != null) { return(BadRequest(result.Errors)); } return(Ok(result.Data)); }
public async Task <ActionResult> BookReservation(BookLoanRequest request) { var result = await _bookLoanService.BookReservation(request); if (result.Errors != null) { return(BadRequest(result.Errors)); } return(Ok(result.Data)); }
//Permitir empréstimo se: //Se Estoque de livro for > 0 //Se livro não estiver descontinuado (inativo) //Se usuario nao estiver bloqueado //Se usuário não estiver dois empréstimos em progresso //Se data informada for menor que 30 dias //Se instituição nao estiver inativa public async Task <ReturnModel> CreateBookLoan(BookLoanRequest request) { var(condition, errorMsg) = await CanUserLoanBook(request.UserId, request.BookId, request.LoanUntil); if (!condition) { return new ReturnModel { Errors = errorMsg } } ; var bookReservation = await _bookLoanRepository.GetBookReservations(request.UserId, request.BookId); //Caso o usuário já tenha feito reserva do livro, atualizar o status do emprestimo if (bookReservation != null) { bookReservation.LoanStatusId = (int)BookLoanStatus.BookLoanInProgress; var result = await _bookLoanRepository.Update(bookReservation); return(new ReturnModel { Data = _mapper.Map <BookLoanModel>(result) }); } else { var bookInventory = await _bookInventoryRepository.GetByBookId(request.BookId); bookInventory.Quantity -= 1; await _bookInventoryRepository.Update(bookInventory); var bookLoan = _mapper.Map <BookLoan>(request); bookLoan.BeginDate = DateTime.Now; bookLoan.EndDate = request.LoanUntil; bookLoan.LoanStatusId = (int)BookLoanStatus.BookLoanInProgress; var result = await _bookLoanRepository.Insert(bookLoan); return(new ReturnModel { Data = _mapper.Map <BookLoanModel>(result) }); } }