From 562f3121c574532a1f7058c541253406079d4de8 Mon Sep 17 00:00:00 2001 From: Muhammad Fajar Date: Sat, 6 Jan 2024 11:54:34 +0700 Subject: [PATCH] Fix Employee Data - Client Portal --- .../Api/CorporateMemberController.php | 54 ++---- app/Models/Member.php | 160 ++++++++++-------- 2 files changed, 100 insertions(+), 114 deletions(-) diff --git a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php index dd647bb1..384de20e 100644 --- a/Modules/Client/Http/Controllers/Api/CorporateMemberController.php +++ b/Modules/Client/Http/Controllers/Api/CorporateMemberController.php @@ -6,7 +6,6 @@ use App\Helpers\Helper; use App\Models\Member; use App\Models\Claim; use App\Models\ClaimRequest; -use App\Models\CorporateEmployee; use App\Services\CorporateMemberService; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; @@ -18,11 +17,8 @@ use Modules\Client\Transformers\Dashboard\MemberResources as ClaimSubmitMemberRe use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources; use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources; use Modules\Client\Transformers\Dashboard\MemberEmployeeDataResources as DashboardMemberEmployeeDataResources; -use Modules\Client\Transformers\DataMemberResource; -use Illuminate\Support\Facades\DB; - -use Box\Spout\Reader\Common\Creator\ReaderEntityFactory; use Box\Spout\Writer\Common\Creator\WriterEntityFactory; +use Modules\Client\Transformers\EmployeeData\UserProfile\DataMemberResource as EmployeeDataProfileMemberResource; use Modules\Internal\Services\MemberEnrollmentService; class CorporateMemberController extends Controller @@ -62,53 +58,23 @@ class CorporateMemberController extends Controller } } - public function show($corporate_id, $person_id) + public function show(int $corporate_id, int $person_id) { - $data = Member::with(['claims', 'person', 'employeds', 'currentPlan.benefits', 'person.currentAddress']) + $data = Member::query() + ->with(['person']) ->where('person_id', $person_id) - ->whereHas('employeds', function ($query) use ($corporate_id) { + ->whereHas('currentEmployeds', function ($query) use ($corporate_id) { $query->where('corporate_id', $corporate_id); }) - ->first(); + ->firstOrFail(); - - $totalClaims = $data->claims->sum('total_claim'); - $data->total_claims = $totalClaims; - - //Get Family - - $data_family = DB::table('members') - ->join('persons', 'members.person_id', '=', 'persons.id') - ->select('members.*', 'persons.phone') + // Get Families + $data->families = Member::query() + ->with(['person']) ->where('principal_id', $data->member_id) ->get(); - if ($data_family->isEmpty()) { - $principal_id = DB::table('members') - ->where('member_id', $data->member_id) - ->select('principal_id') - ->first(); - $data_family = DB::table('members') - ->join('persons', 'members.person_id', '=', 'persons.id') - ->select('members.*', 'persons.phone') - ->where('principal_id', $principal_id->principal_id) - ->where('members.member_id', '<>', $data->member_id) - ->orWhere('members.member_id', $principal_id->principal_id) - ->get(); - } - $data->family = $data_family; - - //Claim History - $data_claim_history = DB::table('claim_requests') - ->join('claims', 'claims.claim_request_id', '=', 'claim_requests.id') - ->join('claim_items', 'claim_items.claim_id', '=', 'claims.id') - ->join('benefits', 'benefits.id', '=', 'claim_items.claim_itemable_id') - ->select('claim_requests.status', 'claim_requests.submission_date', 'benefits.description') - ->where('claim_requests.member_id', $data->id) - ->get(); - $data->claim_history = $data_claim_history; - - return response()->json(DataMemberResource::make($data)); + return response()->json(EmployeeDataProfileMemberResource::make($data)); } public function generateMemberList($corporate_id) diff --git a/app/Models/Member.php b/app/Models/Member.php index 8c5c775c..f95595c2 100644 --- a/app/Models/Member.php +++ b/app/Models/Member.php @@ -57,7 +57,6 @@ class Member extends Model "endorsement_date", "members_effective_date", "members_expire_date", - "employee_status", "activation_date", "terminated_date", "remarks", @@ -94,7 +93,7 @@ class Member extends Model } /* -------------------------------------------------------------------------- */ - /* relationship */ + /* Relationship */ /* -------------------------------------------------------------------------- */ public function claims() { @@ -154,36 +153,18 @@ class Member extends Model public function currentPlans() { return $this->hasManyThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id'); - // ->latest(); // TODO Fix This } public function currentPlan() { return $this->hasOneThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id',) ->latest(); - // ->where('plans.service_code', $this->claimRequest->service_code); // TODO Fix This } - // public function currentPlan() - // { - // return $this->hasOneThrough( - // Plan::class, - // MemberPlan::class, - // 'member_id', - // 'id', - // 'id', - // 'plan_id' - // ) - // ->join('claim_requests', 'claim_requests.service_code', '=', 'plans.service_code') - // ->latest('claim_requests.created_at') // Atau sesuaikan dengan kolom timestamp yang sesuai - // ->select('plans.*'); - // } - - public function currentEmployeds() { return $this->hasOneThrough(CorporateEmployee::class, Person::class, 'nik', 'id', 'id', 'nik') - ->latest(); // TODO Fix This + ->latest(); } public function policies() @@ -196,7 +177,6 @@ class Member extends Model return $this->hasOneThrough(CorporatePolicy::class, MemberPolicy::class, 'member_id', 'code', 'member_id', 'policy_id') ->where('status', 'active') ->orderBy('end', 'DESC'); - // return $this->hasOne(MemberPolicy::class, 'member_id', 'member_id')->where('status', 'active')->latestOfMany(); } public function currentActivePolicy() @@ -228,18 +208,20 @@ class Member extends Model { $arr = []; - if (!empty($this->person->name_prefix)) { - $arr[] = $this->person->name_prefix; - } + if ($this->relationLoaded('person')) { + if (!empty($this->person->name_prefix)) { + $arr[] = $this->person->name_prefix; + } - $arr[] = $this->person->name ?? '-'; + $arr[] = $this->person->name ?? '-'; - if (!empty($this->person->name_suffix)) { - $arr[] = $this->person->name_suffix; + if (!empty($this->person->name_suffix)) { + $arr[] = $this->person->name_suffix; + } } return Attribute::make( - get: fn () => !$this->person ? null : implode(' ', $arr) + get: fn () => !empty($arr) ? ucwords(strtolower(implode(' ', $arr))) : null ); } @@ -252,46 +234,90 @@ class Member extends Model protected function name(): Attribute { + if ($this->relationLoaded('person')) { + return Attribute::make( + get: fn () => $this->person->name ?? ($this->name ?? null) + ); + } else { + return Attribute::make( + get: fn () => $this->name ?? null + ); + } + } + + protected function maritalStatus(): Attribute + { + if ($this->relationLoaded('person')) { + $marital_status = $this->person->marital_status ?? ($this->marital_status ?? null); + + if ($marital_status === 'M') { + $marital_status = 'Menikah'; + } + + return Attribute::make( + get: fn () => $marital_status + ); + } else { + $marital_status = $this->marital_status ?? null; + + if ($marital_status === 'M') { + $marital_status = 'Menikah'; + } + + return Attribute::make( + get: fn () => $marital_status + ); + } + } + + protected function relationship(): Attribute + { + $relation = null; + + if ($this->relation_with_principal === 'S') { + $relation = 'Son'; + } elseif ($this->relation_with_principal === 'H') { + $relation = 'Husband'; + } elseif ($this->relation_with_principal === 'D') { + $relation = 'Daughter'; + } elseif ($this->relation_with_principal === 'Wife') { + $relation = 'Wife'; + } + return Attribute::make( - get: fn () => $this->person->name ?? ($this->name ?? null) + get: fn () => $relation ); } - // protected function birthDate(): Attribute - // { - // // $date = $this->person->birth_date ?? ($this->birth_date ?? null); - // $date = $this->birth_date; - // if ($date){ - // $date = ($this->birth_date ?? $this->person->birth_date); - // return Attribute::make( - // get: fn () => !empty($date) ? Carbon::parse($date)->format('d / M / Y') : '-' - // ); - // } else { - // return Attribute::make( - // get: fn () => '-' - // ); - // } - // } - - protected function birthDateeCard(): Attribute + protected function status(): Attribute + { + return Attribute::make( + get: fn () => $this->active ? ($this->active == 1 ? 'Active' : 'Inactive') : null + ); + } + + protected function birthDateCard(): Attribute { - // $date = $this->person->birth_date ?? ($this->birth_date ?? null); $date = $this->birth_date; + if ($date) { - $date = ($this->birth_date ?? $this->person->birth_date); + return Attribute::make( + get: fn () => !empty($date) ? Carbon::parse($date)->format('d / M / Y') : '-' + ); + } else if ($this->relationLoaded('person')) { + $date = $this->person->birth_date; return Attribute::make( get: fn () => !empty($date) ? Carbon::parse($date)->format('d / M / Y') : '-' ); } else { return Attribute::make( - get: fn () => '-' + get: fn () => '-' ); } } protected function startDate(): Attribute { - // $date = $this->person->birth_date ?? ($this->birth_date ?? null); $date = $this->members_effective_date; return Attribute::make( get: fn () => !empty($date) ? Carbon::parse($date)->format('d / M / Y') : null @@ -300,34 +326,28 @@ class Member extends Model protected function endDate(): Attribute { - // $date = $this->person->birth_date ?? ($this->birth_date ?? null); $date = $this->members_expire_date; return Attribute::make( get: fn () => !empty($date) ? Carbon::parse($date)->format('d / M / Y') : null ); } - // protected function gender(): Attribute - // { - // return Attribute::make( - // get: fn () => $this->person->gender ? ucfirst($this->person->gender) : '-' - // // get: fn () => '-' - // ); - // } - protected function corporateLogo(): Attribute { - $avatar = File::where(['type' => 'avatar', 'fileable_id' => $this->currentPolicy->corporate->id])->orderBy('id', 'desc')->get()->first(); - if ($avatar) { - $path = $_ENV['LMS_APP_STORAGE'] . $avatar->path ? $avatar->path : ''; - return Attribute::make( - get: fn () => $avatar ? $path : null - ); - } else { - return Attribute::make( - get: fn () => null - ); + $avatar = null; + + if ($this->relationLoaded('currentPolicy')) { + $corporateId = $this->currentPolicy->corporate->id; + $avatar = File::where(['type' => 'avatar', 'fileable_id' => $corporateId]) + ->orderBy('id', 'desc') + ->first(); } + + $path = $avatar ? $_ENV['LMS_APP_STORAGE'] . $avatar->path : ''; + + return Attribute::make( + get: fn () => $path + ); } /* -------------------------------------------------------------------------- */ }