From 0326d60d8789ab6a8a55d097caae5d59bcf50807 Mon Sep 17 00:00:00 2001 From: nocode Date: Tue, 16 Jul 2024 11:45:38 +0700 Subject: [PATCH] Fix bug --- .../Http/Controllers/AgentActionApi.php | 21 ++++ Modules/Agents/Routes/api.php | 1 + Modules/Agents/Services/AgentService.php | 96 ++++++++++++++----- app/Models/AgentUser.php | 61 +++++++++++- 4 files changed, 152 insertions(+), 27 deletions(-) diff --git a/Modules/Agents/Http/Controllers/AgentActionApi.php b/Modules/Agents/Http/Controllers/AgentActionApi.php index 456e682..43061e6 100755 --- a/Modules/Agents/Http/Controllers/AgentActionApi.php +++ b/Modules/Agents/Http/Controllers/AgentActionApi.php @@ -12,6 +12,8 @@ use Modules\Agents\Services\AgentService; class AgentActionApi extends BaseController { + public $roleGeneral = "general"; + public $roleAgents = "agents"; protected $agentService; /** * Summary of __construct @@ -46,4 +48,23 @@ class AgentActionApi extends BaseController } return response()->json(['status' => $result['status'], 'msg' => $result['msg'], 'data' => $result['data']]); } + /** + * Summary of agentByGeneral + * @param \Illuminate\Http\Request $request + * @return mixed|\Illuminate\Http\JsonResponse + */ + public function agentByGeneral(Request $request){ + if (auth()->user()->user_type == $this->roleGeneral) { + $result = $this->agentService->listAgentOfGeneral($request->all()); + } + // get data agents + if (auth()->user()->user_type == $this->roleAgents) { + $result = $this->agentService->myAgentList($request->all()); + } + + if (!$result['status']) { + return response()->json(['status' => $result['status'], 'msg' => $result['msg']]); + } + return response()->json(['status' => $result['status'], 'msg' => $result['msg'], 'data' => $result['data']]); + } } diff --git a/Modules/Agents/Routes/api.php b/Modules/Agents/Routes/api.php index 71cac75..1dccab4 100755 --- a/Modules/Agents/Routes/api.php +++ b/Modules/Agents/Routes/api.php @@ -15,5 +15,6 @@ use Modules\Agents\Http\Controllers\AgentActionApi; Route::group(['prefix' => 'agent','middleware' => ['auth:api']], function() { Route::get('/get_customer', [AgentActionApi::class, 'myCustomer'])->name('agent_get_customer'); + Route::get('/agent_of_general', [AgentActionApi::class, 'agentByGeneral'])->name('agent_of_general'); }); Route::post('/agent/add_customer', [AgentActionApi::class, 'createCustomer'])->name('agent_add_customer'); diff --git a/Modules/Agents/Services/AgentService.php b/Modules/Agents/Services/AgentService.php index 298283a..7ed034b 100644 --- a/Modules/Agents/Services/AgentService.php +++ b/Modules/Agents/Services/AgentService.php @@ -57,24 +57,24 @@ class AgentService $customerAgent = $this->modelCustomer->where('agent_id', $agentId)->where('phone', $dataInput['phone'])->latest()->first(); // tìm các dữ liệu từ ngày hiện tại trừ đi không được quá 15 ngày - $customerAgentAll = $this->modelCustomer->where('phone', $dataInput['phone'])->where('agent_id', '<>',$agentId)->where('created_at', '>=', $dateNotToo)->latest()->first(); - - if(!empty($customerAgentAll)){ + $customerAgentAll = $this->modelCustomer->where('phone', $dataInput['phone'])->where('agent_id', '<>', $agentId)->where('created_at', '>=', $dateNotToo)->latest()->first(); + + if (!empty($customerAgentAll)) { // chưa quá 15 ngày thì lấy cái agent_id cũ, đang trực thuộc $dataInsert['agent_id'] = $customerAgentAll->agent_id; $result = $this->modelCustomer->insert($dataInsert); - }else{ + } else { // quá 15 ngày thì lấy agent_id check ra từ mã đại lý $dataInsert['agent_id'] = $agentId; $result = $this->modelCustomer->insert($dataInsert); // nếu agent id cũ != cái hiện tại check - $this->modelCustomer->where('phone', $dataInput['phone'])->where('agent_id', '<>',$agentId)->delete(); - + $this->modelCustomer->where('phone', $dataInput['phone'])->where('agent_id', '<>', $agentId)->delete(); + } \DB::commit(); return ['status' => true, 'msg' => $this->getMessageReturn('success_insert_customer')]; - + } catch (\Exception $e) { \DB::rollBack(); } @@ -85,37 +85,88 @@ class AgentService * @param array $input * @return array */ - public function myCustomer($input){ + public function myCustomer($input) + { $listCustomer = []; $finalAgentData = []; $myAgent = $this->modelAgentUser->where('user_id', auth()->user()->id)->latest()->first(); - if(empty($myAgent) || empty($myAgent->agent_id)){ + if (empty($myAgent) || empty($myAgent->agent_id)) { return ['status' => false, 'msg' => $this->getMessageReturn('no_data_agent')]; } $agentId = $myAgent->agent_id; $queryAgent = $this->modelCustomer->where('agent_id', $agentId); - if(!empty($input['start_date']) && !empty($input['end_date'])){ - $queryAgent->whereBetween('created_at', [$input['start_date'], $input['end_date']]); + if (!empty($input['start_date']) && !empty($input['end_date'])) { + $startDate = Carbon::createFromFormat('Y-m-d', $input['start_date']); + $endDate = Carbon::createFromFormat('Y-m-d', $input['end_date'])->addDay(); + + $queryAgent->whereBetween('created_at', [$startDate->toDateString(), $endDate->toDateString()]); } - if(!empty($input['keyword'])){ + if (!empty($input['keyword'])) { $queryAgent->where('name', 'LIKE', '%' . $input['keyword'] . '%'); } $listCustomer = $queryAgent->orderBy('name', 'asc')->get(); - if(!empty($listCustomer)){ - foreach($listCustomer as $listC){ + if (!empty($listCustomer)) { + foreach ($listCustomer as $listC) { $finalAgentData[] = [ - 'id' => $listC->id??'', - 'guest_name' => $listC->name??'', - 'phone' => $listC->phone??'', - 'email' => $listC->email??'', - 'grade' => $listC->grade??'', - 'date_receive' => $listC->created_at??'', - 'message' => $listC->msg??'' + 'id' => $listC->id ?? '', + 'guest_name' => $listC->name ?? '', + 'phone' => $listC->phone ?? '', + 'email' => $listC->email ?? '', + 'grade' => $listC->grade ?? '', + 'date_receive' => $listC->created_at ?? '', + 'message' => $listC->msg ?? '' ]; } } return ['status' => true, 'data' => $finalAgentData, 'msg' => $this->getMessageReturn('success')]; } + /** + * Summary of listAgentOfGeneral + * @param mixed $input + * @return array + */ + public function listAgentOfGeneral($input) + { + $data = []; + $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->byAgentRoot($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']); + } + + dd($myAgentDown->get()); + return ['status' => true, 'data' => $data, 'msg' => $this->getMessageReturn('success')]; + } + /** + * Summary of myAgentList + * @param mixed $input + * @return array + */ + public function myAgentList($input) + { + $data = []; + //get data general + + return ['status' => true, 'data' => $data, 'msg' => $this->getMessageReturn('success')]; + } + /** * Summary of formatCreateCustomer * @param array $data @@ -158,7 +209,8 @@ class AgentService 'no_data_agent' => 'Đại lý không tồn tại.', 'success_insert_customer' => 'Thêm khách hàng thành công.', 'failed_insert' => 'Thêm khách hàng thành công.', - 'success' => 'Load data thành công.' + 'success' => 'Load data thành công.', + 'no_agent' => 'Không tìm thấy đại lý.', ]; return $msgArr[$errorKey] ?? "Không có dữ liệu."; } diff --git a/app/Models/AgentUser.php b/app/Models/AgentUser.php index 4332f7a..17ce61b 100755 --- a/app/Models/AgentUser.php +++ b/app/Models/AgentUser.php @@ -11,12 +11,12 @@ class AgentUser extends Model protected $table = 'se_agent_user'; protected $fillable = [ - 'id', - 'user_id', - 'agent_root_id', - 'root_id', + 'id', + 'user_id', + 'agent_root_id', + 'root_id', 'code', - 'status', + 'status', 'created_by', 'updated_by', 'created_at', @@ -24,4 +24,55 @@ class AgentUser extends Model 'deleted', 'deleted_at' ]; + /** + * Summary of scopeJoinAgent + * @param mixed $query + * @return mixed + */ + public function scopeJoinAgent($query) + { + return $query->join('se_agent', 'se_agent.id', '=', 'se_agent_user.agent_id') + ->select('se_agent_user.*', 'se_agent.name as agent_name', 'se_agent.parent_path', 'se_agent.grant', 'se_agent.type'); + } + /** + * Summary of scopeBetweenDates + * @param mixed $query + * @param mixed $startDate + * @param mixed $endDate + * @return mixed + */ + public function scopeBetweenDates($query, $startDate, $endDate) + { + return $query->whereBetween($this->table . '.created_at', [$startDate, $endDate]); + } + /** + * Summary of scopeByAgentRoot + * @param mixed $query + * @param mixed $agentRootId + * @return mixed + */ + public function scopeByAgentRoot($query, $agentRootId) + { + return $query->where($this->table . '.agent_root_id', $agentRootId)->where($this->table . '.agent_id', "<>",$agentRootId); + } + /** + * Summary of scopeSearchAgentName + * @param mixed $query + * @param mixed $keyword + * @return mixed + */ + public function scopeSearchAgentName($query, $keyword) + { + return $query->where('name', 'LIKE', '%' . $keyword . '%'); + } + /** + * Summary of scopeOnlyGrant + * @param mixed $query + * @param mixed $grant + * @return mixed + */ + public function scopeOnlyGrant($query, $grant) + { + return $query->where('se_agent.grant', $grant); + } }