| @@ -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 | |||