'decimal:1', 'user_limit' => 'integer', 'shares_materials_catalog' => 'boolean', ]; } public function equipment(): HasMany { return $this->hasMany(ContractorEquipment::class); } public function users(): HasMany { return $this->hasMany(\App\Models\User::class); } public function parent() { return $this->belongsTo(self::class, 'parent_id'); } public function children(): HasMany { return $this->hasMany(self::class, 'parent_id'); } public function certifications(): HasMany { return $this->hasMany(ContractorCertification::class); } public function bidInvitations(): HasMany { return $this->hasMany(BidInvitation::class); } public function invoices(): HasMany { return $this->hasMany(ContractorInvoice::class); } public function projects(): BelongsToMany { return $this->belongsToMany(Project::class, 'project_contractor') ->withPivot('role', 'contract_amount') ->withTimestamps(); } public function getActiveCertificationsCountAttribute(): int { return $this->certifications()->where('status', 'active')->count(); } public function getExpiringCertificationsCountAttribute(): int { return $this->certifications() ->where('status', 'active') ->where('expiry_date', '<=', now()->addDays(30)) ->where('expiry_date', '>', now()) ->count(); } }