@@ -23,14 +23,18 @@ def create_maintenancejob( | |||
db: Session = Depends(get_db), | |||
current_user: User = Depends(get_current_user), | |||
): | |||
if current_user.Role != "Maintenance" and current_user.Role != "Admin": | |||
if current_user.Role != "Driver" and current_user.Role != "Admin": | |||
raise HTTPException( | |||
status_code=403, detail="You are not authorized to perform this action" | |||
) | |||
maintenancejob_res = create_new_maintenancejob( | |||
maintenancejob=maintenancejob, maintenanceworker=current_user.Id, db=db | |||
maintenancejob=maintenancejob, db=db | |||
) | |||
if maintenancejob_res == "nodriver": | |||
raise HTTPException( | |||
status_code=404, detail="This car has no driver" | |||
) | |||
return maintenancejob_res | |||
@@ -74,13 +78,7 @@ def get_all_maintenancejobs( | |||
def get_maintenancejob( | |||
maintenance_job_id: int, | |||
db: Session = Depends(get_db), | |||
current_user: User = Depends(get_current_user), | |||
): | |||
if current_user.Role != "Maintenance" and current_user.Role != "Admin": | |||
raise HTTPException( | |||
status_code=403, detail="You are not authorized to perform this action" | |||
) | |||
maintenancejob = get_maintenance_job(maintenance_job_id, db) | |||
print(maintenancejob) | |||
return maintenancejob | |||
@@ -93,11 +91,11 @@ def change_status( | |||
db: Session = Depends(get_db), | |||
current_user: User = Depends(get_current_user), | |||
): | |||
if current_user.Role != "Maintenance" and current_user.Role != "Admin": | |||
if current_user.Role != "Maintenance": | |||
raise HTTPException( | |||
status_code=403, detail="You are not authorized to perform this action" | |||
) | |||
result = change_maintenance_status(maintenance_job_id, status, db) | |||
result = change_maintenance_status(maintenance_job_id, status, current_user.Id, db) | |||
if result is None: | |||
raise HTTPException(status_code=404, detail="Maintenance job not found") | |||
return result |
@@ -7,10 +7,11 @@ class MaintenanceJob(Base): | |||
Id = Column(Integer, primary_key=True, index=True) | |||
# a list of weak entities of class CarPart | |||
CarParts = relationship("CarPart", back_populates="parent") | |||
CreatedBy = relationship("User", back_populates="maintenanceJobs", foreign_keys="MaintenanceJob.MaintenanceWorker") | |||
FinishedBy = relationship("User", back_populates="maintenanceJobs", foreign_keys="MaintenanceJob.MaintenanceWorker") | |||
VehicleID = Column(ForeignKey("vehicle.Id"), nullable=False) | |||
Vehicle = relationship("Vehicle", back_populates="maintenanceJobs") | |||
VehicleDriverId = Column(ForeignKey("user.Id"), nullable=False) | |||
Description = Column(String, nullable=False) | |||
Date = Column(DateTime, nullable=False) | |||
MaintenanceWorker = Column(ForeignKey("user.Id"), nullable=False) | |||
MaintenanceWorker = Column(ForeignKey("user.Id"), nullable=True) | |||
Status = Column(String, nullable=False) |
@@ -25,7 +25,7 @@ class User(Base): | |||
driveTasks = relationship("DriveTask", back_populates="CreatedBy") | |||
vehicle = relationship("Vehicle", back_populates="driver") | |||
#MaintenancePerson-specific relationships | |||
maintenanceJobs = relationship("MaintenanceJob", back_populates="CreatedBy", foreign_keys="MaintenanceJob.MaintenanceWorker") | |||
maintenanceJobs = relationship("MaintenanceJob", back_populates="FinishedBy", foreign_keys="MaintenanceJob.MaintenanceWorker") | |||
#FuelingPerson-specific relationships | |||
fuelingTasks = relationship("FuelingTask", back_populates="CreatedBy", foreign_keys="FuelingTask.CreatedById") | |||
@@ -8,14 +8,19 @@ from db.repository.user import get_car_driver | |||
def create_new_maintenancejob( | |||
maintenancejob: CreateMaintenanceJob, maintenanceworker, db: Session | |||
maintenancejob: CreateMaintenanceJob, db: Session | |||
): | |||
vehicledriver = get_car_driver(maintenancejob.VehicleID, db) | |||
if (vehicledriver != False): | |||
vehicledriver = vehicledriver.Id | |||
else: | |||
return "nodriver" | |||
maintenancejob_object = MaintenanceJob( | |||
MaintenanceWorker=maintenanceworker, | |||
Description=maintenancejob.Description, | |||
VehicleID=maintenancejob.VehicleID, | |||
Date=maintenancejob.Date, | |||
VehicleDriverId=get_car_driver(maintenancejob.VehicleID, db).Id, | |||
Status="Requested", | |||
) | |||
print("OBJECT CREATED") | |||
db.add(maintenancejob_object) | |||
@@ -78,19 +83,27 @@ def get_maintenance_job(maintenancejob_id: int, db: Session): | |||
# print(type(result.CarPartsList)) | |||
res["TotalCost"] = calculate_total_cost(maintenancejob.CarParts) | |||
# print(result.TotalCost) | |||
res["AssignedTo"] = maintenancejob.CreatedBy.__dict__ | |||
if maintenancejob.Status == "Complete": | |||
res["FinishedBy"] = maintenancejob.FinishedBy.__dict__ | |||
res["Vehicle"] = maintenancejob.Vehicle.__dict__ | |||
print("DB Access complete") | |||
return maintenancejob | |||
def change_maintenance_status(maintenancejob_id: int, status: str, db: Session): | |||
def change_maintenance_status(maintenancejob_id: int, status: str, worker_id: int, db: Session): | |||
maintenancejob = ( | |||
db.query(MaintenanceJob).filter(MaintenanceJob.Id == maintenancejob_id).first() | |||
) | |||
if maintenancejob is None: | |||
return None | |||
maintenancejob.Status = status | |||
db.commit() | |||
db.refresh(maintenancejob) | |||
return maintenancejob | |||
if (status == "Complete"): | |||
maintenancejob.MaintenanceWorker = worker_id | |||
maintenancejob.Status = status | |||
db.commit() | |||
db.refresh(maintenancejob) | |||
return maintenancejob | |||
else: | |||
return None | |||
@@ -9,7 +9,6 @@ from schemas.vehicle import OutputVehicle | |||
class CreateMaintenanceJob(BaseModel): | |||
Description: str = Field(...) | |||
VehicleID: int = Field(...) | |||
VehicleDriverId: int = Field(...) | |||
Date: datetime = Field(...) | |||
@@ -20,4 +19,5 @@ class OutputMaintenanceJob(BaseModel): | |||
CarPartsList: Optional[List[ShowCarPart]] | |||
TotalCost: int | |||
Vehicle: OutputVehicle | |||
AssignedTo: ShowUser | |||
FinishedBy: Optional[ShowUser] | |||
Status: str |