from sqlalchemy.orm import Session from schemas.vehicle import CreateVehicle, UpdateVehicle, VehicleLocation from db.models.vehicle import Vehicle from db.base import User from db.repository.user import get_car_driver def create_new_vehicle(vehicle: CreateVehicle, db: Session): vehicle_object = Vehicle( **vehicle.model_dump(), Fuel=0, Status="Inactive", CurrentLocation=[] ) db.add(vehicle_object) db.commit() db.refresh(vehicle_object) return vehicle_object def update_vehicle_geoloc(vehicle_id: int, location: VehicleLocation, db: Session): vehicle_db = db.query(Vehicle).filter(Vehicle.Id == vehicle_id) vehicle_object = vehicle_db.first() if not vehicle_object: return "vehiclenotfound" print("Location: " + str(location.CurrentLocation)) vehicle_object.CurrentLocation = location.CurrentLocation db.add(vehicle_object) db.commit() db.refresh(vehicle_object) return vehicle_object def assign_vehicle_driver(vehicle_id: int, driver_id: int, db: Session): if driver_id != None: driver = ( db.query(User) .filter((User.Id == driver_id) & (User.Role == "Driver")) .first() ) print(driver) vehicle = db.query(Vehicle).filter(Vehicle.Id == vehicle_id).first() if not vehicle: return "novehicle" if not driver: return "nodriver" driver.AssignedVehicle = vehicle_id else: vehicle = db.query(Vehicle).filter(Vehicle.Id == vehicle_id).first() if not vehicle: return "novehicle" if vehicle.Status == "Active": return "alreadyassigned" driver = get_car_driver(vehicle_id, db) if driver: driver.AssignedVehicle = None else: return "nodriver" db.add(driver) db.commit() return vehicle def list_vehicles(db: Session): vehicles = db.query(Vehicle).all() # assign AssignedDriver to all vehicles based on their drivers for vehicle in vehicles: driver = get_car_driver(vehicle.Id, db) if driver: vehicle.AssignedDriver = driver.__dict__ else: vehicle.AssignedDriver = None return vehicles def get_vehicle_by_id(vehicle_id: int, db: Session): vehicle = db.query(Vehicle).filter(Vehicle.Id == vehicle_id).first() if not vehicle: return None driver = get_car_driver(vehicle.Id, db) if driver: vehicle.AssignedDriver = driver.__dict__ else: vehicle.AssignedDriver = None return vehicle def replace_vehicle_data(id: int, vehicle: UpdateVehicle, db: Session): vehicle_db = db.query(Vehicle).filter(Vehicle.Id == id) vehicle_object = vehicle_db.first() if not vehicle_object: return "vehiclenotfound" #vehicle_object.CurrentLocation = vehicle.CurrentLocation #vehicle_object.Fuel = vehicle.Fuel #vehicle_object.LicensePlate = vehicle.LicensePlate #vehicle_object.DriverHistory = vehicle.DriverHistory #vehicle_object.Type = vehicle.Type vehicle_object.Mileage = vehicle.Mileage #vehicle_object.Model = vehicle.Model vehicle_object.Status = vehicle.Status #res = assign_vehicle_driver(id, vehicle.AssignedDriver, db) #if res == "nodriver": # return "driverNotFound" #vehicle_object.Capacity = vehicle.Capacity #vehicle_object.Year = vehicle.Year print(vehicle_object) db.add(vehicle_object) db.commit() #vehicle_object.AssignedDriver = vehicle.AssignedDriver return vehicle_object def delete_vehicle_data(id: int, db: Session): vehicle_db = db.query(Vehicle).filter(Vehicle.Id == id) vehicle_object = vehicle_db.first() if not vehicle_object: return "vehiclenotfound" db.delete(vehicle_object) db.commit() return vehicle_object