Example #1
0
        public static RezervationModel ToModel(this Rezervation dbRezervation, ClientAccountModel clientAccountModel)
        {
            var model = dbRezervation.ToModel();

            model.ClientAccount = clientAccountModel;

            return(model);
        }
        /// <summary>
        /// Creates a booking for the client account.
        /// </summary>
        /// <param name="parameters">Rezervation creation parameters. Hold information on the client account and the rezervation.</param>
        /// <returns></returns>
        public RezervationModel CreateBooking(RezervationCreationParameters parameters)
        {
            this.ValidateBookingParameters(parameters);

            //try to get a client account first
            var clientAccount = this.dbContext.ClientAccounts.SingleOrDefault(x => x.ClientId == parameters.ClientId)?.ToModel();

            if (clientAccount == null && parameters.ClientAccount != null)
            {
                clientAccount = this.clientAccountService.Add(parameters.ClientAccount);
            }
            else if (parameters.ClientAccount == null && clientAccount == null)
            {
                throw new NotFoundException("Client account not found.");
            }

            var dbRezervation = new Rezervation()
            {
                ClientId       = clientAccount.ClientId,
                CarPlateNumber = parameters.CarPlateNumber,
                PickUpDate     = parameters.PickUpDate,
                ReturnDate     = parameters.ReturnDate,
            };

            //get the car type
            var carType = CarTypes.GetCarType(parameters.CarType);

            dbRezervation.CarType    = (int)carType.Type;
            dbRezervation.RentaltFee = carType.GetRentalFee(parameters.PickUpDate, parameters.ReturnDate);
            dbRezervation.DepositFee = carType.GetDepositFee(dbRezervation.RentaltFee);

            this.dbContext.Rezervations.Add(dbRezervation);
            this.dbContext.SaveChanges();

            return(dbRezervation.ToModel(clientAccount));
        }