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): 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 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.Id 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.Id 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