public IHttpActionResult PostReservation(Reservation reservation)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (!free(reservation))
            {
                return(BadRequest());
            }

            reservation.Vehicle = db.Vehicles.Get(reservation.VehicleId);

            double   pricePerHour = GetPrice(reservation.VehicleId);
            TimeSpan timeSpan     = reservation.EndDate - reservation.StartDate;

            reservation.TotalPrice = timeSpan.TotalHours * pricePerHour;


            BranchReservation reception = new BranchReservation();

            reception.BranchId  = reservation.BranchReservations.ElementAt(0).BranchId;
            reception.Branch    = db.Branches.Get(reception.BranchId);
            reception.Reception = true;

            BranchReservation returnto = new BranchReservation();

            returnto.BranchId  = reservation.BranchReservations.ElementAt(1).BranchId;
            returnto.Branch    = db.Branches.Get(returnto.BranchId);
            returnto.Reception = false;

            reservation.BranchReservations.Clear();

            db.Reservations.Add(reservation);
            db.SaveChanges();

            reception.ReservationId = reservation.Id;
            reception.Reservation   = reservation;
            returnto.ReservationId  = reservation.Id;
            returnto.Reservation    = reservation;

            db.BranchReservations.Add(reception);
            db.BranchReservations.Add(returnto);

            db.SaveChanges();

            reservation.BranchReservations.Add(db.BranchReservations.FirstOrDefault(x => x.ReservationId == reservation.Id && x.Reception == true));
            reservation.BranchReservations.Add(db.BranchReservations.FirstOrDefault(x => x.ReservationId == reservation.Id && x.Reception == false));

            return(Ok(reservation));
        }
        public IHttpActionResult DeleteReservation(int id)
        {
            Reservation reservation = db.Reservations.Get(id);
            DateTime    pomday      = reservation.StartDate;

            pomday.AddDays(1);
            if (pomday <= DateTime.Now)
            {
                return(BadRequest("24"));
            }

            if (reservation == null)
            {
                return(NotFound());
            }

            if (!db.Vehicles.FirstOrDefault(x => x.Id == reservation.VehicleId).Available)
            {
                return(BadRequest());
            }

            BranchReservation br  = db.BranchReservations.FirstOrDefault(x => x.Reception == true && x.ReservationId == reservation.Id);
            BranchReservation br2 = db.BranchReservations.FirstOrDefault(x => x.Reception == false && x.ReservationId == reservation.Id);

            db.BranchReservations.Remove(br);
            db.BranchReservations.Remove(br2);

            db.Reservations.Remove(reservation);
            try
            {
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                return(BadRequest());
            }


            return(Ok(reservation));
        }
        public IHttpActionResult PutReservation(int id, Reservation reservation)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            DateTime pomday = reservation.StartDate;

            pomday.AddDays(1);
            if (pomday <= DateTime.Now)
            {
                return(BadRequest("24"));
            }

            if (id != reservation.Id)
            {
                return(BadRequest());
            }

            if (!free(reservation, true))
            {
                return(BadRequest());
            }

            if (!db.Vehicles.FirstOrDefault(x => x.Id == reservation.VehicleId).Available)
            {
                return(BadRequest());
            }

            double   pricePerHour = GetPrice(reservation.VehicleId);
            TimeSpan timeSpan     = reservation.EndDate - reservation.StartDate;

            reservation.TotalPrice = timeSpan.TotalHours * pricePerHour;

            BranchReservation reception = new BranchReservation();

            reception.BranchId  = reservation.BranchReservations.ElementAt(0).BranchId;
            reception.Branch    = db.Branches.Get(reception.BranchId);
            reception.Reception = true;

            BranchReservation returnto = new BranchReservation();

            returnto.BranchId  = reservation.BranchReservations.ElementAt(1).BranchId;
            returnto.Branch    = db.Branches.Get(returnto.BranchId);
            returnto.Reception = false;

            reception.ReservationId = id;


            returnto.ReservationId = id;

            reservation.BranchReservations.Clear();


            if (!db.BranchReservations.Any(x => x.BranchId == reception.BranchId && x.ReservationId == reception.ReservationId && x.Reception == true))
            {
                BranchReservation pom = db.BranchReservations.FirstOrDefault(x => x.ReservationId == reception.ReservationId && x.Reception == true);
                db.BranchReservations.Remove(pom);
                db.BranchReservations.Add(reception);
                reservation.BranchReservations.Add(pom);
            }
            else
            {
                reservation.BranchReservations.Add(db.BranchReservations.FirstOrDefault(x => x.BranchId == reception.BranchId && x.ReservationId == reception.ReservationId && x.Reception == true));
            }

            if (!db.BranchReservations.Any(x => x.BranchId == returnto.BranchId && x.ReservationId == returnto.ReservationId && x.Reception == false))
            {
                BranchReservation pom = db.BranchReservations.FirstOrDefault(x => x.ReservationId == returnto.ReservationId && x.Reception == false);
                db.BranchReservations.Remove(pom);
                db.BranchReservations.Add(returnto);
                reservation.BranchReservations.Add(pom);
            }
            else
            {
                reservation.BranchReservations.Add(db.BranchReservations.FirstOrDefault(x => x.BranchId == returnto.BranchId && x.ReservationId == returnto.ReservationId && x.Reception == false));
            }


            db.Reservations.Update(reservation);
            try
            {
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                return(BadRequest("Somebody already change this"));
            }

            return(Ok(reservation));
        }