belongsTo(Deal::class); } public function projectStatus() { return $this->belongsTo(Requirement::class, 'project_status_id'); } public function projectManager() { return $this->belongsTo(User::class, 'project_manager_id')->select('id', 'name'); } public function qualities() { return $this->hasMany(Quality::class); } public function quality() { return $this->hasOne(Quality::class); } public function qualityFinished() { return $this->hasOne(Quality::class)->where('status', 'finish'); } public function statusType() { return $this->belongsTo(StatusType::class); } public function momClients() { return $this->hasMany(RequirementFile::class)->where('code', 2); } public function threeDimensionalImages() { return $this->hasMany(RequirementFile::class)->where('code', 3); } public function sketchImages() { return $this->hasMany(RequirementFile::class)->where('code', 12); } public function proofHandoverEvents() { return $this->hasMany(RequirementFile::class)->where('code', 6); } public function shopDrawings() { return $this->hasMany(RequirementFile::class)->where('code', 4); } public function siteInstructions() { return $this->hasMany(RequirementFile::class)->where('code', 5); } public function projectUsers() { return $this->hasMany(ProjectUser::class); } public function users() { return $this->belongsToMany(User::class, config('database.connections.mysql.database') . '.project_users')->select('users.id', 'users.name'); } public function consultants() { return $this->belongsToMany(User::class, config('database.connections.mysql.database') . '.project_consultants')->select('users.id', 'users.name'); } public function deleteBy() { return $this->belongsTo(User::class, 'delete_by'); } public function siteProject() { return $this->belongsTo(SiteProject::class); } public function cityBranch() { return $this->belongsTo(CityBranch::class); } public function serviceCategory() { return $this->belongsTo(ServiceCategory::class); } public function consultant() { return $this->belongsTo(User::class, 'consultant_id')->select('id', 'name'); } public function purchaseRequests() { return $this->hasMany(PurchaseRequest::class); } public function partnerCompany() { return $this->belongsTo(PartnerCompany::class, 'subcon_id')->select('id', 'name', 'position'); } public function supplier() { return $this->belongsTo(Supplier::class, 'subcon_id')->select('id', 'name', 'position'); } public function getProjectSubconAttribute() { $supplier = $this->supplier()->first(); $partnerCompany = $this->partnerCompany()->first(); if ($supplier) { $res = $supplier; } else { $res = $partnerCompany; } return $res ?? null; } public function expenses() { return $this->setConnection('mysql')->hasMany(Expense::class); } /** * Accessor untuk mendapatkan total amount dari expenses berdasarkan project_id * * @return int */ public function getTotalPaidInvoicesAttribute() { return $this->expenses() ->selectRaw('SUM(amount + (amount * tax_rate / 100)) as total_amount') ->value('total_amount') ?? 0; } }