morphMany(Address::class, 'owner'); } /** * @return HasMany */ public function companyModules(): hasMany { return $this->hasMany(CompanyModule::class); } /** * @return hasManyThrough */ public function employees(): hasManyThrough { return $this->hasManyThrough(User::class, CompanyModule::class, 'company_id', 'company_module_id'); } public function orders() { return $this->companyModules()->where('type', '=', BusinessType::IMPORTER)->first()->orders->sortByDesc('id'); $orders = []; $this->CompanyModules->each(function ($companyModule) { $orders[] = $companyModule->orders->sortByDesc('id'); }); return collect($orders); } /** * Has Confirmed orders * @return bool */ public function hasConfirmedOrder(): bool { $importerModule = $this->companyModules()->where('type', BusinessType::IMPORTER)->first(); if (!$importerModule) { return false; // Return false if no relation found } $hasConfirmedOrder = $importerModule->orders() ->where('status', '!=', 0) ->exists(); return (bool)$hasConfirmedOrder; } /** * @return MorphMany */ public function documents(): morphMany { return $this->morphMany(Document::class, 'owner'); } /** * @return MorphMany */ public function contacts(): morphMany { return $this->morphMany(Contact::class, 'owner'); } /** * @return HasMany */ public function banks(): HasMany { return $this->HasMany(BankAccount::class, 'company_id'); } /** * @return hasManyDeep */ public function parcels(): hasManyDeep { return $this->hasManyDeep(Package::class, [CompanyModule::class, Order::class, PackingList::class], ['company_id', 'company_module_id', ['owner_type', 'owner_id'], 'packing_list_id'], ['id', 'id', null, 'id']); } }