コード例 #1
0
        public async Task <ActionResult> CreateForUnregistered(CreateReservationForNonRegisteredUserViewModel model)
        {
            _logger.Info("Creating Reservation! Params: " + model.ToJson());

            if (!ModelState.IsValid)
            {
                _logger.Error("Creating Reservation Form Invalid! Errors:" + ModelState.ToJson());
                return(Json(ModelState.ToDictionary()));
            }

            try
            {
                CreateReservationDTO reservation = Mapper.Map <CreateReservationForNonRegisteredUserViewModel, CreateReservationDTO>(model);
                await ReservationsManager.CreateReservation(reservation);

                _logger.Info("Creating Reservation Successfully!");

                return(Json("STATUS_OK"));
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Creating Reservation Failed!");
                throw;
            }
        }
コード例 #2
0
 public IActionResult Create(CreateReservationDTO createDto)
 {
     try
     {
         createDto.Id    = 0;
         createDto.State = true;
         var         UserId      = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
         Reservation reservation = _reservationAppService.CreateReservation(UserId, createDto);
         if (reservation != null)
         {
             _generalAppService.CommitTransaction();
             return(Created("created", reservation.Id));
         }
         else
         {
             _generalAppService.RollbackTransaction();
             return(BadRequest("no exists recesation to this day"));
         }
     }
     catch (Exception ex)
     {
         _generalAppService.RollbackTransaction();
         return(BadRequest(ex.Message));
     }
 }
コード例 #3
0
        public async Task <ActionResult> Create(CreateReservationViewModel model)
        {
            _logger.Info("Creating Reservation! Params: " + model.ToJson());

            if (!ModelState.IsValid)
            {
                _logger.Error("Creating Reservation Form Invalid! Errors:" + ModelState.ToJson());
                return(Json(ModelState.ToDictionary()));
            }

            //if (await UserManager.IsPhoneNumberConfirmedAsync(User.Identity.GetUserId())
            //    && await UserManager.HasPhoneNumberAsync(User.Identity.GetUserId()))
            //{
            //    return Json("Въведете и потвърдете телефонен номер тогава опитайте отново!");
            //}

            try
            {
                CreateReservationDTO reservation = Mapper.Map <CreateReservationViewModel, CreateReservationDTO>(model, o => o.Items["UserId"] = User.Identity.GetUserId());
                await ReservationsManager.CreateReservation(reservation);

                _logger.Info("Creating Reservation Successfully!");

                return(Json("STATUS_OK"));
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Creating Reservation Failed!");
                throw;
            }
        }
コード例 #4
0
        public CreateReservationDTO GetToShowInContinuePage(int id)
        {
            Reservation          reserve        = TheUnitOfWork.ReservationRepo.GetById(id);
            CreateReservationDTO reservationDTO = Mapper.Map <CreateReservationDTO>(reserve);

            return(reservationDTO);
        }
コード例 #5
0
        public void updateReservation(CreateReservationDTO createDto)
        {
            createDto.Date = createDto.Date.Date;
            Reservation reservation = Mapper.Map <Reservation>(createDto);

            TheUnitOfWork.ReservationRepo.Update(reservation);
            TheUnitOfWork.SaveChanges();
        }
コード例 #6
0
 public IActionResult update(CreateReservationDTO createDto)
 {
     try
     {
         _reservationAppService.updateReservation(createDto);
         _generalAppService.CommitTransaction();
         return(Ok(new Response {
             Message = "Updated"
         }));
     }
     catch (Exception ex)
     {
         _generalAppService.RollbackTransaction();
         return(BadRequest(ex.Message));
     }
 }
コード例 #7
0
        /// <summary>
        /// Create Reservation only for dayly available properties
        /// </summary>
        /// <param name="model"></param>
        public async Task CreateReservation(CreateReservationDTO model)
        {
            var property = await unitOfWork.PropertiesBaseRepository
                           .Where(r => r.Id == model.PropertyId)
                           .FirstOrDefaultAsync() ?? throw new ContentNotFoundException("Не е намерен имота, който искате да резервирате!");

            if (!property.RentalHirePeriodType.IsTimePeriodSearchable)
            {
                throw new InvalidReservationException("Само имоти с дневни наемни цени могат да се резервират!");
            }

            if (property.RentalPrice == null)
            {
                throw new InvalidReservationException("Имотът, който искате да резервирате няма наемна цена !");
            }

            if (string.IsNullOrEmpty(model.UserId) && model.NonRegisteredUser == null)
            {
                throw new ArgumentException("Не е попълнен потребителя правещ резервацията!");
            }

            //Todal day of the reservation, floored, converted to decimal and multiplied by the rental price (ex. 7,1 days -> 7 * RentalPrice)
            decimal totalReservationPrice = (decimal)property.RentalPrice * Convert.ToDecimal(Math.Floor((model.To - model.From).TotalDays));

            Reservations reservation = new Reservations
            {
                From = model.From,
                To   = model.To,
                AdditionalDescription = model.AdditionalDescription,
                PropertyId            = model.PropertyId,
                ApproveStatus         = ApproveStatus.Pending,
                ClientUserId          = model.UserId,
                NonRegisteredUser     = model.NonRegisteredUser == null ? null : new NonRegisteredReservationUsers
                {
                    ClientName        = model.NonRegisteredUser.ClientName,
                    ClientEmail       = model.NonRegisteredUser.ClientEmail,
                    ClientPhoneNumber = model.NonRegisteredUser.ClientPhoneNumber
                },
                PaymentStatus = PaymentStatus.Pending,
                CaparoPrice   = totalReservationPrice / 10,
                FullPrice     = totalReservationPrice,
            };

            unitOfWork.ReservationsRepository.Add(reservation);
            await unitOfWork.SaveAsync();
        }
コード例 #8
0
        public Reservation CreateReservation(string userId, CreateReservationDTO createDto)
        {
            DayShift dayShift = TheUnitOfWork.DayShiftRepo.GetById(createDto.dayShiftId);

            createDto.Date = createDto.Date.Date;
            Reservation reservation = Mapper.Map <Reservation>(createDto);

            reservation.IsRated = false;
            reservation.userId  = userId;

            if (CountOfReversationInDate(createDto.dayShiftId, createDto.Date) < dayShift.MaxNumOfReservation)
            {
                var reseve = TheUnitOfWork.ReservationRepo.Insert(reservation);
                TheUnitOfWork.SaveChanges();
                return(reseve);
            }
            return(null);
        }
        public async Task <ActionResult <CreateReservationDTO> > PostReservation(CreateReservationDTO reservationDTO)
        {
            if (reservationDTO == null)
            {
                return(BadRequest(new { Message = "No reservation input" }));
            }
            //TODO: check if reservation with flightId and userId exists. if it does do put, else continu post.

            try
            {
                Flight flight = await flightRepo.GetAsyncByGuid(reservationDTO.FlightId);

                if (flight != null)
                {
                    Reservation reservation = mapper.Map <Reservation>(reservationDTO);
                    foreach (ReservedSeat reservedSeat in reservation.ReservedSeats)
                    {
                        PriceClass price = await genericPriceRepo.GetAsyncByGuid(reservedSeat.PriceId);

                        if (price != null)
                        {
                            Seat seat = await genericSeatRepo.GetAsyncByGuid(reservedSeat.SeatId);

                            seat.Reserved = true;
                            await genericSeatRepo.Update(seat, seat.Id);

                            reservedSeat.TicketPrice = price.Value != 0 && flight.DistanceInKm != 0 ? price.Value * (flight.DistanceInKm / 1000) : 0;
                            reservedSeat.PersonId    = reservedSeat.Person.Id;
                            reservation.TotalPrice  += reservedSeat.TicketPrice;
                            reservation.TotalSeats  += 1;
                            flight.Airplane          = await airplaneRepo.GetAsyncByGuid(flight.AirplaneId.Value);

                            flight.Airplane.ReservedSeats += 1;
                            if (flight.Airplane.ReservedSeats == flight.Airplane.TotalSeats)
                            {
                                //TODO: realtime message to admin
                                Console.WriteLine("Airplane is fully booked.");
                                MessageObject message = new MessageObject()
                                {
                                    Message = $"Airplane {flight.Airplane.Name} on flight with Id {flight.Id} is fully booked. Please add an extra plane."
                                };
                                await sender.Send(message);
                            }
                        }
                        else
                        {
                            return(RedirectToAction("HandleErrorCode", "Error", new
                            {
                                statusCode = 404,
                                errorMessage = $"Could not find price. "
                            }));
                        }
                    }

                    var createdReservation = await reservationRepo.Create(reservation);

                    if (createdReservation == null)
                    {
                        return(BadRequest(new { Message = $"Reservation could not be saved" }));
                    }
                    return(Created("/api/reservations", reservationDTO));
                }
                else
                {
                    return(RedirectToAction("HandleErrorCode", "Error", new
                    {
                        statusCode = 404,
                        errorMessage = $"Could not find flight. "
                    }));
                }
            }
            catch (Exception ex)
            {
                return(RedirectToAction("HandleErrorCode", "Error", new
                {
                    statusCode = 400,
                    errorMessage = $"Creating reservation failed {ex}"
                }));
            }
        }