コード例 #1
0
        //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)
            });
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        //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)
                });
            }
        }