diff --git a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php index a109ac9c..c698b5a8 100644 --- a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php @@ -9,6 +9,7 @@ use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Modules\Client\Transformers\ClaimReport\MemberResources as ClaimReportMemberResources; use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources; +use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources; class CorporateMemberController extends Controller { @@ -29,6 +30,9 @@ class CorporateMemberController extends Controller case 'claim-submit': $members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request); return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members))); + case 'alarm-center': + $members = $this->corporateMemberService->getAllMemberAlarmCenter($corporate_id, $request); + return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members))); default: $members = $this->corporateMemberService->getAllMemberDashboards($corporate_id, $request); return response()->json(Helper::paginateResources(DashboardMemberResources::collection($members))); diff --git a/Modules/Client/Transformers/Dashboard/MemberAlarmCenterResources.php b/Modules/Client/Transformers/Dashboard/MemberAlarmCenterResources.php new file mode 100644 index 00000000..6bb0587b --- /dev/null +++ b/Modules/Client/Transformers/Dashboard/MemberAlarmCenterResources.php @@ -0,0 +1,26 @@ + $this->id, + 'memberId' => $this->member_id, + 'fullName' => $this->full_name, + 'service' => $this->service_code, + 'start_date' => $this->start_date, + 'end_date' => $this->end_date, + 'status' => $this->active, + ]; + } +} diff --git a/app/Builders/MemberBuilder.php b/app/Builders/MemberBuilder.php index 78158016..1b16e396 100644 --- a/app/Builders/MemberBuilder.php +++ b/app/Builders/MemberBuilder.php @@ -46,4 +46,20 @@ class MemberBuilder extends Builder 'right' => $this->rightJoin('claim_requests', 'members.id', '=', 'claim_requests.member_id') }; } + + public function joinMemberPlans(string $value = 'join'): static + { + return match ($value) { + 'join' => $this->join('member_plans', 'members.id', '=', 'member_plans.member_id'), + 'left' => $this->leftJoin('member_plans', 'members.id', '=', 'member_plans.member_id'), + }; + } + + public function joinPlans(string $value = 'join'): static + { + return match ($value) { + 'join' => $this->join('plans', 'member_plans.plan_id', '=', 'plans.id'), + 'left' => $this->leftJoin('plans', 'member_plans.plan_id', '=', 'plans.id'), + }; + } } diff --git a/app/Services/CorporateMemberService.php b/app/Services/CorporateMemberService.php index 8a8d59eb..afcec6f6 100644 --- a/app/Services/CorporateMemberService.php +++ b/app/Services/CorporateMemberService.php @@ -82,4 +82,42 @@ class CorporateMemberService ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active', 'claim_requests.id', 'claim_requests.member_id', 'claim_requests.submission_date']) ->paginate($limit); } + + public function getAllMemberAlarmCenter(int $corporateId, Request $request) + { + $limit = $request->has('perPage') ? $request->input('perPage') : 10; + + return Member::query() + ->joinCorporateEmployees('left') + ->joinMemberPlans('left') + ->joinPlans('left') + ->with(['currentPlan', 'person']) + ->where('corporate_employees.corporate_id', $corporateId) + ->when($request->input('search'), function (Builder $query, $search) { + $query->where(function (Builder $query) use ($search) { + $query->orWhere('members.member_id', 'like', "%" . $search . "%") + ->orWhere('members.name', 'like', "%" . $search . "%"); + }); + }) + ->when($request->input('division'), function (Builder $query, $value) { + $query->where('corporate_employees.division_id', $value); + }) + ->when($request->has('orderBy'), function (Builder $query) use ($request) { + $orderBy = match ($request->input('orderBy')) { + 'memberId' => 'member_id', + 'fullName' => 'name', + 'status' => 'active', + 'start_date' => 'member_plans.start', + 'end_date' => 'member_plans.end', + 'service' => 'plans.service_code', + + default => '' + }; + + $query->getQuery()->orderBy($orderBy, $request->order); + }) + ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'member_plans.start AS start_date', 'member_plans.end AS end_date', 'plans.active', 'plans.service_code']) + ->selectRaw("(select sum(`claims`.`total_claim`) from `claims` where `members`.`id` = `claims`.`member_id` AND `claims`.`deleted_at` IS NULL) AS `claims_sum_total_claim`") + ->paginate($limit); + } }