diff --git a/app/Http/Controllers/Api/MembershipController.php b/app/Http/Controllers/Api/MembershipController.php new file mode 100644 index 00000000..98a424d2 --- /dev/null +++ b/app/Http/Controllers/Api/MembershipController.php @@ -0,0 +1,58 @@ +validate([ + 'member_id' => 'required', + 'birth_date' => 'required', + ]); + + $member = Member::where('member_id', $request->member_id)->first(); + + if (!$member) { + return Helper::responseJson(statusCode: 404, message: 'Member not found.'); + } + + if (!$member->active) { + return Helper::responseJson(statusCode: 406, message: 'The Member '.$request->member_id.' is Inactive.'); + } + + + return Helper::responseJson(data: $member, message: 'Member Found'); + } + + public function checkLimit(Request $request) + { + $request->validate([ + 'member_id' => 'required', + 'type' => 'required|in:consultation-gp,consultation-specialist,medicine' + ]); + + if ($request->type == 'consultation-gp') { + $benefitCode = 'OPCONS1'; + } + if ($request->type == 'consultation-specialist') { + $benefitCode = 'OPCONS2'; + } + if ($request->type == 'medicine') { + $benefitCode = 'OPMEDI1'; + } + + $member = Member::where('member_id', $request->member_id)->with(['currentCorporate', 'currentPolicy', 'currentPlan'])->first(); + + $limits = ClaimService::showMemberBenefitLimit($member, $benefitCode); + + return Helper::responseJson(data: $limits); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index bf500999..20b3f86e 100755 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -64,5 +64,6 @@ class Kernel extends HttpKernel 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'linksehat.old.auth' => \App\Http\Middleware\LinksehatOldAuthMiddleware::class, ]; } diff --git a/app/Http/Middleware/LinksehatOldAuthMiddleware.php b/app/Http/Middleware/LinksehatOldAuthMiddleware.php new file mode 100644 index 00000000..03b8f3d7 --- /dev/null +++ b/app/Http/Middleware/LinksehatOldAuthMiddleware.php @@ -0,0 +1,25 @@ +header('authorization') == 'Bearer LpMbGm0NQvFC3lUBiy1Ch3NzS0CIPSmanR12FcdP') { + return $next($request); + } + + return abort(401, "Unauthenticated"); + } +} diff --git a/app/Models/Benefit.php b/app/Models/Benefit.php index 9c789ff9..9e8d80d0 100755 --- a/app/Models/Benefit.php +++ b/app/Models/Benefit.php @@ -132,6 +132,21 @@ class Benefit extends Model "Show Benefit Value" => 'show_benefit_value', ]; + public static $max_frequency_periods = [ + 0 => 'Policy Period', + 1 => 'Daily Visit', + 2 => 'Weekly', + 3 => 'Monthly', + 4 => 'Yearly', + 5 => 'Disability', + 6 => 'Visit', + ]; + + protected $appends = [ + 'max_frequency_period_name', + 'max_frequency' + ]; + public function setAreaLimitAttribute($value) { $this->attributes['area_limit'] = empty($value) ? null : $value; @@ -168,4 +183,42 @@ class Benefit extends Model { return $this->belongsTo(Plan::class, 'plan_code', 'code'); } + + public function getMaxFrequencyPeriodNameAttribute() + { + return self::$max_frequency_periods[$this->max_frequency_period] ?? null; + } + + public function getMaxFrequencyAttribute() + { + switch ($this->max_frequency_period) { + // case(0) : + // // TODO Fix This + // return null; + // break; + case(1) : + return empty($this->daily_frequency) ? 1 : $this->daily_frequency; + break; + case(2) : + return empty($this->weekly_frequency) ? 1 : $this->weekly_frequency; + break; + case(3) : + return empty($this->monthly_frequency) ? 1 : $this->monthly_frequency; + break; + case(4) : + return empty($this->yearly_frequency) ? 1 : $this->yearly_frequency; + break; + case(5) : + // TODO Fix This + return empty($this->max_period_for_disability) ? 1 : $this->max_period_for_disability; + break; + case(6) : + // TODO Fix This + return 1; + break; + default : + return null; + break; + } + } } diff --git a/app/Models/Member.php b/app/Models/Member.php index 78f4a323..791541f0 100755 --- a/app/Models/Member.php +++ b/app/Models/Member.php @@ -99,17 +99,24 @@ class Member extends Model public function currentCorporate() { - return $this->belongsToMany(Corporate::class, 'corporate_employees', 'corporate_id', 'member_id') - // ->withPivot([ - // 'branch_code', - // 'divison_id', - // 'nik', - // 'status', - // 'start', - // 'end' - // ]) - ->where('start', '<', now()) - ->where('end', '>', now()); + // return $this->belongsToMany(Corporate::class, 'corporate_employees', 'corporate_id', 'member_id') + // // ->withPivot([ + // // 'branch_code', + // // 'divison_id', + // // 'nik', + // // 'status', + // // 'start', + // // 'end' + // // ]) + // ->where('start', '<', now()) + // ->where('end', '>', now()); + + + return $this->hasOneThrough(Corporate::class, CorporateEmployee::class, 'member_id', 'id', 'id', 'corporate_id'); + // ->where('corporate_policies.start', '<', now()) + // ->where('corporate_policies.end', '>', now()) + // ->where('member_policies.start', '<', now()) + // ->where('member_policies.end', '>', now()); } public function memberPlans() diff --git a/app/Services/ClaimService.php b/app/Services/ClaimService.php index 82820a75..76858959 100644 --- a/app/Services/ClaimService.php +++ b/app/Services/ClaimService.php @@ -10,23 +10,6 @@ use Str; class ClaimService{ - public function storeClaim($member, $icd, $benefit, $totalClaim) - { - $claim = Claim::create([ - 'code' => Str::random('16'), - 'member_id' => $member->id, - 'diagnosis_id' => $icd, - 'total_claim' => $totalClaim, - 'currency' => 'IDR', - 'plan_id' => $member->currentPlan->id, - 'benefit_id' => $benefit->id, - ]); - - $corporate = $member->asd; - - return $claim;asldkmalskdmalksmdalksmd - } - public static function getMemberTotalUsage(Member $member, $startDate = null, $endDate = null) { $startDate = empty($startDate) ? Carbon::now()->startOfMonth() : $startDate; @@ -116,6 +99,62 @@ class ClaimService{ ]; } + public static function getMemberUsageByBenefitLimit($member, $benefit) + { + + } + + public static function showMemberBenefitLimit($member, $benefit_code) + { + // $plan = $member->currentPlan; + // $policy = $member->currentPolicy; + // $corporate = $member->currentCorporate; + $benefit = $member->currentPlan->benefits()->where('code', $benefit_code)->first(); + + // dd($benefit->toArray()); + // dd(compact(['plan', 'policy', 'corporate', 'benefit'])); + $limits = [ + 'total_limit' => $benefit->limit_amount, + 'frequency_limit_name' => $benefit->max_frequency_period_name, + 'frequency_limit' => $benefit->max_frequency, + 'total_claim' => 0, + 'remaining_limit' => $benefit->limit_amount, + 'usage_daily' => null, + 'usage_weekly' => null, + 'usage_monthly' => null, + 'usage_yearly' => null + ]; + + switch ($benefit->max_frequency_period) { + case(0) : + $limits['usage_yearly'] = $member->claims()->used(Carbon::now()->firstOfYear(), now())->count(); + $limits['total_claim'] = $member->claims()->used(Carbon::now()->firstOfYear(), now())->sum('total_claim'); + break; + case(1) : + $limits['usage_daily'] = $member->claims()->used(now()->format('Y-m-d'), now()->addDay(1)->format('Y-m-d'))->count(); + $limits['total_claim'] = $member->claims()->used(now()->format('Y-m-d'), now()->addDay(1)->format('Y-m-d'))->sum('total_claim'); + break; + case(2) : + $limits['usage_weekly'] = $member->claims()->used(Carbon::parse('Previous Sunday'), now())->count(); + $limits['total_claim'] = $member->claims()->used(Carbon::parse('Previous Sunday'), now())->sum('total_claim'); + break; + case(3) : + $limits['usage_monthly'] = $member->claims()->used(Carbon::now()->firstOfMonth(), now())->count(); + $limits['total_claim'] = $member->claims()->used(Carbon::now()->firstOfMonth(), now())->sum('total_claim'); + break; + case(4) : + $limits['usage_yearly'] = $member->claims()->used(Carbon::now()->firstOfYear(), now())->count(); + $limits['total_claim'] = $member->claims()->used(Carbon::now()->firstOfYear(), now())->sum('total_claim'); + break; + default : + // return null; + break; + } + $limits['remaining_limit'] = $benefit->limit_amount - $limits['total_claim']; + + return $limits; + } + public static function storeClaim($member, $diagnosis, $totalClaim, $benefit, $status) { try { diff --git a/routes/api.php b/routes/api.php index cf3dbc81..c33577fd 100755 --- a/routes/api.php +++ b/routes/api.php @@ -1,7 +1,7 @@ group(function() { + Route::post('check-membership', [MembershipController::class, 'check']); + Route::post('check-limit', [MembershipController::class, 'checkLimit']); +}); \ No newline at end of file