[WIP] Claim
This commit is contained in:
58
app/Http/Controllers/Api/MembershipController.php
Normal file
58
app/Http/Controllers/Api/MembershipController.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Member;
|
||||
use App\Services\ClaimService;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class MembershipController extends Controller
|
||||
{
|
||||
//
|
||||
public function check(Request $request)
|
||||
{
|
||||
$request->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);
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
];
|
||||
}
|
||||
|
||||
25
app/Http/Middleware/LinksehatOldAuthMiddleware.php
Normal file
25
app/Http/Middleware/LinksehatOldAuthMiddleware.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class LinksehatOldAuthMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
if ($request->header('authorization') == 'Bearer LpMbGm0NQvFC3lUBiy1Ch3NzS0CIPSmanR12FcdP') {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
return abort(401, "Unauthenticated");
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Api\AuthController;
|
||||
use App\Http\Controllers\Api\MemberController;
|
||||
use App\Http\Controllers\Api\MembershipController;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
@@ -15,3 +15,8 @@ use Illuminate\Support\Facades\Route;
|
||||
| is assigned the "api" middleware group. Enjoy building your API!
|
||||
|
|
||||
*/
|
||||
|
||||
Route::middleware('linksehat.old.auth')->group(function() {
|
||||
Route::post('check-membership', [MembershipController::class, 'check']);
|
||||
Route::post('check-limit', [MembershipController::class, 'checkLimit']);
|
||||
});
|
||||
Reference in New Issue
Block a user