Exemplo n.º 1
0
        public async Task <IActionResult> SetStatus(long id, [FromBody] SetReservationStatusDTO reservationStatus)
        {
            // check if requester is allowed to set reservation status
            if (!await _permissionService.CanSetReservationStatus(id, HttpContext.GetUserIdFromToken()))
            {
                return(Forbid());
            }

            return(Ok(await _reservationService.SetReservationStatus(id, reservationStatus)));
        }
Exemplo n.º 2
0
        /*
         * public async Task<ServiceResponse<GetItemDTO>> UpdateItem(long reservationId, UpdateItemDTO updatedItem)
         * {
         *  ServiceResponse<GetItemDTO> serviceResponse = new ServiceResponse<GetItemDTO>();
         *  try
         *  {
         *      Item item = await _context.Items.FirstOrDefaultAsync(x => x.Id == updatedItem.Id);
         *      if (item != null)
         *      {
         *          if (item.ReservationId == reservationId)
         *          {
         *              item.Name = updatedItem.Name;
         *              item.Amount = updatedItem.Amount;
         *              item.Unit = updatedItem.Unit;
         *
         *              _context.Items.Update(item);
         *              await _context.SaveChangesAsync();
         *              serviceResponse.Data = _mapper.Map<GetItemDTO>(item);
         *          }
         *          else
         *          {
         *              serviceResponse.Success = false;
         *              serviceResponse.Message = $"Item with id '{updatedItem.Id}' is not part of reservation with id '{reservationId}'";
         *          }
         *      }
         *      else
         *      {
         *          serviceResponse.Success = false;
         *          serviceResponse.Message = $"Could not found item with id '{updatedItem.Id}'";
         *      }
         *  }
         *  catch (Exception ex)
         *  {
         *      serviceResponse.Success = false;
         *      serviceResponse.Exception = ex.Message;
         *  }
         *  return serviceResponse;
         * }
         */

        public async Task <ServiceResponse <GetReservationDTO> > SetReservationStatus(long id, SetReservationStatusDTO reservationStatus)
        {
            ServiceResponse <GetReservationDTO> serviceResponse = new ServiceResponse <GetReservationDTO>();

            try
            {
                Reservation reservation = await _context.Reservations
                                          .Include(x => x.User)
                                          .Include(x => x.Items)
                                          .Include(x => x.MarketSeller.Market)
                                          .Include(x => x.MarketSeller.Seller)
                                          .FirstOrDefaultAsync(x => x.Id == id);

                if (reservation != null)
                {
                    // before changing data in db -> check if accepted was changed (or just packed)
                    var acceptedChanged = (reservation.Accepted != reservationStatus.Accepted);

                    reservation.Accepted      = reservationStatus.Accepted;
                    reservation.Price         = reservationStatus.Price;
                    reservation.Packed        = reservationStatus.Packed;
                    reservation.SellerComment = reservationStatus.SellerComment;

                    _context.Reservations.Update(reservation);
                    await _context.SaveChangesAsync();

                    var placeholders = CreatePlaceholders(reservation, reservation.MarketSeller.Market, reservation.MarketSeller.Seller);
                    // send user mail(s)
                    // TODO: refactor to only have one SendMail Method
                    if (acceptedChanged)
                    {
                        if (reservation.Accepted.Value)
                        {
                            await _mailService.SendReservationAccepted(reservation.User.Mail, placeholders);
                        }
                        else
                        {
                            await _mailService.SendReservationDeclined(reservation.User.Mail, placeholders);
                        }
                    }
                    //if (reservation.Packed)
                    //    await _mailService.SendReservationPacked(reservation.User.Mail, placeholders);

                    serviceResponse.Data = _mapper.Map <GetReservationDTO>(reservation);
                }
                else
                {
                    serviceResponse.Success = false;
                    serviceResponse.Message = $"Could not found reservation with id '{id}'";
                }
            }
            catch (Exception ex)
            {
                serviceResponse.Success   = false;
                serviceResponse.Exception = ex.Message;
            }
            return(serviceResponse);
        }