build( Project::whereHas('deal.budgetPlan.order', function ($q) use ($customerId) { $q->where('customer_id', $customerId); })->with('deal', 'projectStatus'), $paginateBuilderAttr, new PaginateSchemaProject ); } public function select2Paginate(?string $search, $siteProjectId): PaginateCollectionAttr { $is_purchase_order = request()->is_purchase_order ?? null; //mempermudah pembayaran yg memiliki ref proj $is_external = request()->for == 'external' ?? null; //kondisi untuk select yg memiliki subcon $project = Project::with('deal.budgetPlan.order', 'deal.budgetPlan.unitPrices', 'consultant') ->selectRaw('id, deal_id, project_manager_id, start_date, end_date, site_project_id, consultant_id, subcon_id, rap_value') ->whereHas('deal.budgetPlan.order') ->when($is_purchase_order, function ($query) { $query->has('purchaseRequests'); }); if (request()->has_qc) { $project = $project->whereHas('qualities'); } if ($siteProjectId) { $project->where('site_project_id', $siteProjectId); } if (request()->has_pr || request()->has_builder) { if (getAuthRoleId()) { $project; } else { $authUserId = getCurrentUser()->id ?? null; $project = $project->whereHas('projectUsers', function ($query) use ($authUserId) { $query->where('user_id', $authUserId); })->with(['projectUsers' => function ($query) use ($authUserId) { $query->selectRaw('id, project_id, user_id'); $query->where('user_id', $authUserId); }]); } } $builder = (new PaginateCollectionAttrBuilder) ->build( $project, (new PaginateBuilderAttr)->setSearchKeyword($search), new PaginateSchemaProject ); $newCollections = $builder->getCollections()->map(function ($project) { $skkNumber = $project->deal->skk_number; $customerName = $project->deal->customer_name; $customerPhone = $project->deal->budgetPlan->order->customer_phone ?? null; $array = []; foreach ($project->deal->budgetPlan->order->orderServices as $orderService) { $array[] = $orderService->service->title; } $serviceName = join(", ", $array); $project['text'] = $skkNumber . ' | ' . $customerName . ' | ' . $customerPhone . ' | ' . $serviceName; return $project; }); return $builder->setCollections($newCollections); } public function findById($id) { return Project::find($id); } }