From 9dd104246f01d82bd68854747b51443d9bc0f0b2 Mon Sep 17 00:00:00 2001 From: nocode Date: Wed, 17 Jul 2024 11:40:03 +0700 Subject: [PATCH] NEW LIST AGENT FOR USER --- Modules/Agents/Services/AgentService.php | 99 +++++++++++++++++++++++- app/Models/AgentUser.php | 22 +++++- 2 files changed, 115 insertions(+), 6 deletions(-) diff --git a/Modules/Agents/Services/AgentService.php b/Modules/Agents/Services/AgentService.php index 804801a..b38cc57 100644 --- a/Modules/Agents/Services/AgentService.php +++ b/Modules/Agents/Services/AgentService.php @@ -171,10 +171,12 @@ class AgentService $agentParent = $listAgentById[$vByAgent->grant_parent_id]; $upGrant = $agentParent->code ?? null; } - if($agentId == $vByAgent->agent_id) continue; // skip agent root - - if(!empty($input['up_grant'])){ // if existing up_geant - if($upGrant != $input['up_grant']) continue; // skip + if ($agentId == $vByAgent->agent_id) + continue; // skip agent root + + if (!empty($input['up_grant'])) { // if existing up_geant + if ($upGrant != $input['up_grant']) + continue; // skip } $finalDataTemp[] = [ @@ -219,10 +221,99 @@ class AgentService { $data = []; //get data general + $myAgent = $this->modelAgentUser->where('user_id', auth()->user()->id)->latest()->first(); + + if (empty($myAgent) || empty($myAgent->agent_id)) { + return ['status' => false, 'msg' => $this->getMessageReturn('no_data_agent')]; + } else { + $myAgentInfo = $this->modelAgent->find($myAgent->agent_id); + if (empty($myAgentInfo)) { + return ['status' => false, 'msg' => $this->getMessageReturn('no_agent')]; + } + } + $agentId = $myAgentInfo->id; + $myAgentDown = $this->modelAgentUser->byParentPath($agentId)->joinAgent(); + if (!empty($input['start_date']) && !empty($input['end_date'])) { + $myAgentDown->betweenDates($input['start_date'], $input['end_date']); + } + if (!empty($input['keyword'])) { + $myAgentDown->searchAgentName($input['keyword']); + } + if (!empty($input['grant'])) { + $myAgentDown->onlyGrant($input['grant']); + } + $listAgentGet = $myAgentDown->get(); + $finalData = []; + if (!empty($listAgentGet)) { + $listAgentById = []; + foreach ($listAgentGet as $kAgent) { + // get parent id by path + $kAgent->grant_parent_id = $this->getParentAgent($kAgent->parent_path); + $listAgentById[$kAgent->agent_id] = $kAgent; + } + foreach ($listAgentGet as $vAgent) { + if (!empty($listAgentById[$vAgent->grant_parent_id])) { + $agentParent = $listAgentById[$vAgent->grant_parent_id]; + $upGrant = $agentParent->code ?? null; + } + if (!empty($input['up_grant'])) { // if existing up_geant + if ($upGrant != $input['up_grant']) + continue; // skip + } + // lay danh sach 2 con cua parent + $processPath = $this->processParentPath($agentId, $vAgent->parent_path); + if (!empty($processPath) && in_array($vAgent->agent_id, $processPath)) { + // $finalData[] = $vAgent; + $finalData[] = [ + 'id' => $vAgent->id ?? '', + 'name' => $vAgent->agent_name ?? '', + 'agents_code' => $vAgent->code ?? '', + 'created_date' => $vAgent->created_at ?? '', + 'phone' => $vAgent->agent_phone ?? '', + 'email' => $vAgent->agent_email ?? '', + 'grant' => $vAgent->grant ?? '', + 'up_grant' => $upGrant ?? '' + ]; + } + } + } + $data = $finalData; return ['status' => true, 'data' => $data, 'msg' => $this->getMessageReturn('success')]; } + /** + * Summary of processPath + * @param mixed $parentPath + * @param mixed $agentId + * @return array + */ + public function processParentPath($agentId, $parentPath) + { + + // find index agentId + $position = strpos($parentPath, '-' . $agentId . '-'); + + if ($position !== false) { + // cat chuoi tu vi tri ngay sau agentId + $substring = substr($parentPath, $position + strlen('-' . $agentId . '-')); + if (empty($substring)) { + return []; + } + // tach chuoi thanh cac mang phan tu + $numbers = explode('-', trim($substring, '-')); + // lay 2 mang dau tien sau agentId + $result = array_slice($numbers, 0, 2); + + // ghep lai thanh chuoi + // $final_path = '-' . implode('-', $result) . '-'; + $final_path = $result; + } else { + return []; + } + + return $final_path; + } /** * Summary of formatCreateCustomer * @param array $data diff --git a/app/Models/AgentUser.php b/app/Models/AgentUser.php index a8155f2..94ad97e 100755 --- a/app/Models/AgentUser.php +++ b/app/Models/AgentUser.php @@ -61,10 +61,19 @@ class AgentUser extends Model { return $query->where($this->table . '.agent_root_id', $agentRootId); } + /** + * Summary of scopeByAgentId + * @param mixed $query + * @param mixed $agentId + * @return mixed + */ + public function scopeByAgentId($query, $agentId){ + return $query->where($this->table . '.agent_id', $agentId); + } /** * Summary of scopeSearchAgentName * @param mixed $query - * @param mixed $keyword + * @param string $keyword * @return mixed */ public function scopeSearchAgentName($query, $keyword) @@ -74,11 +83,20 @@ class AgentUser extends Model /** * Summary of scopeOnlyGrant * @param mixed $query - * @param mixed $grant + * @param int $grant * @return mixed */ public function scopeOnlyGrant($query, $grant) { return $query->where('se_agent.grant', $grant); } + /** + * Summary of scopeByParentPath + * @param mixed $query + * @param int $agentId + * @return mixed + */ + public function scopeByParentPath($query, $agentId){ + return $query->where('se_agent.parent_path', 'LIKE', '%-'. $agentId .'-%'); + } }