public void Insert(Reservation reservation)
 {
     reservation.Station = null;
     reservation.User = null;
     db.Reservations.Add(reservation);
     db.SaveChanges();
 }
        public void Update(Reservation reservation)
        {
            Reservation rReservation = GetReservationById(reservation.ID);
            if (rReservation == null)
                return;

            rReservation.CompletedDate = reservation.CompletedDate;

            db.SaveChanges();
        }
        public bool Reserve()
        {
            var batteryStorageRepo = new BatteryStorageRepository();

            var reservations = new List<Reservation>();
            var batteries = new List<Battery>();
            foreach (var station in _stations)
            {
                station.BatteryStorages = batteryStorageRepo.GetBatteryStorageByStationId(station.ID, true);
                if (station.BatteryStorages != null && (station.BatteryStorages.Available - station.BatteryStorages.Reserved) > 0)
                {
                    var batteryCollection =
                        station.BatteryStorages.BatteryCollections.FirstOrDefault(x => x.Battery.Status.Equals(1));
                    if (batteryCollection != null)
                    {
                        batteryCollection.Battery.Status = 2;
                        var reservation = new Reservation
                                              {
                                                  CreatedDate = DateTime.Now,
                                                  ExpiredDate = DateTime.Now.AddMinutes(10),
                                                  IsActive = true,
                                                  Station = station,
                                                  StationId = station.ID,
                                                  User = _user,
                                                  UserId = _user.ID
                                              };

                        batteries.Add(batteryCollection.Battery);
                        reservations.Add(reservation);
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    return false;
                }
            }

            UpdateBatteries(batteries);
            InsertReservations(reservations);
            UpdateStations(_stations);

            return true;
        }
        public bool ReserveBattery(string stationValue, string userValue)
        {
            var userRepo = new UserRepository();
            var reservationRepo = new ReservationRepository();
            var batteryRepo = new BatteryRepository();
            var station = _stationRepository.GetStationById(Convert.ToInt32(stationValue), true);
            var user = userRepo.GetUserById(Convert.ToInt32(userValue));

            if (user == null || station == null)
                return false;

            var isBatteryAvailable = station.BatteryStorages.Available > 0;
            if (isBatteryAvailable)
            {
                var batteryCollection =
                    station.BatteryStorages.BatteryCollections.FirstOrDefault(x => x.Battery.Status == 1);
                if (batteryCollection != null)
                {
                    var battery = batteryCollection.Battery;
                    battery.Status = 3;

                    var reservation = new Reservation
                    {
                        UserId = user.ID,
                        StationId = station.ID,
                        CreatedDate = DateTime.Now,
                        ExpiredDate = DateTime.Now.AddDays(1),
                        IsActive = true
                    };

                    reservationRepo.Insert(reservation);
                    batteryRepo.Update(battery);

                    return true;
                }
            }

            return false;
        }