'Vehicle Received', self::STATUS_INSPECTED => 'Initial Inspection Complete', self::STATUS_ASSIGNED_FOR_DIAGNOSIS => 'Assigned for Diagnosis', self::STATUS_IN_DIAGNOSIS => 'Diagnosis In Progress', self::STATUS_ESTIMATE_SENT => 'Estimate Sent to Customer', self::STATUS_APPROVED => 'Estimate Approved', self::STATUS_PARTS_PROCUREMENT => 'Parts Procurement', self::STATUS_IN_PROGRESS => 'Work in Progress', self::STATUS_QUALITY_REVIEW_REQUIRED => 'Quality Review Required', self::STATUS_COMPLETED => 'Work Completed', self::STATUS_DELIVERED => 'Vehicle Delivered', ]; } protected $casts = [ 'arrival_datetime' => 'datetime', 'expected_completion_date' => 'datetime', 'completion_datetime' => 'datetime', 'archived_at' => 'datetime', 'personal_items_removed' => 'boolean', 'photos_taken' => 'boolean', 'mileage_in' => 'integer', 'mileage_out' => 'integer', 'customer_satisfaction_rating' => 'integer', 'incoming_inspection_data' => 'array', 'outgoing_inspection_data' => 'array', ]; protected static function boot() { parent::boot(); static::creating(function ($jobCard) { if (empty($jobCard->job_card_number)) { $branchCode = $jobCard->branch_code ?? config('app.default_branch_code', 'ACC'); $nextNumber = static::where('branch_code', $branchCode) ->whereYear('created_at', now()->year) ->count() + 1; $jobCard->job_card_number = $branchCode . '/' . str_pad($nextNumber, 5, '0', STR_PAD_LEFT); } }); } public function customer(): BelongsTo { return $this->belongsTo(Customer::class); } public function vehicle(): BelongsTo { return $this->belongsTo(Vehicle::class); } public function serviceAdvisor(): BelongsTo { return $this->belongsTo(User::class, 'service_advisor_id'); } public function incomingInspection(): HasOne { return $this->hasOne(VehicleInspection::class)->incoming(); } public function outgoingInspection(): HasOne { return $this->hasOne(VehicleInspection::class)->outgoing(); } public function diagnosis(): HasOne { return $this->hasOne(Diagnosis::class); } public function workOrders(): HasMany { return $this->hasMany(WorkOrder::class); } public function timesheets(): HasMany { return $this->hasMany(Timesheet::class); } public function estimates(): HasMany { return $this->hasMany(Estimate::class); } public function scopeByBranch($query, $branchCode) { return $query->where('branch_code', $branchCode); } public function scopeByStatus($query, $status) { return $query->where('status', $status); } }