diff --git a/Modules/Primaya/Http/Controllers/Api/MemberController.php b/Modules/Primaya/Http/Controllers/Api/MemberController.php index 2ea07dcc..e21e8ae8 100644 --- a/Modules/Primaya/Http/Controllers/Api/MemberController.php +++ b/Modules/Primaya/Http/Controllers/Api/MemberController.php @@ -3,7 +3,10 @@ namespace Modules\Primaya\Http\Controllers\Api; use App\Helpers\Helper; +use App\Models\CorporateBenefit; use App\Models\Member; +use App\Models\MemberPlan; +use App\Models\Plan; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; @@ -38,6 +41,7 @@ class MemberController extends Controller { $members = DB::table('members') ->leftJoin('member_policies', 'member_policies.member_id','=', 'members.member_id') + ->leftJoin('corporate_employees', 'corporate_employees.member_id','=', 'members.member_id') ->leftJoin('persons', 'persons.id', '=', 'members.person_id') ->where('members.member_id', '=', $request->no_polis) ->where('members.birth_date', '=', $request->birth_date) @@ -59,13 +63,24 @@ class MemberController extends Controller { $res_data['members'] = $members; + // $services = DB::table('member_plans') + // ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') + // ->leftJoin('services', 'services.code', '=', 'plans.service_code') + // ->where('member_plans.member_id', $members->id) + // ->whereNull('member_plans.deleted_at') + // ->select('plans.service_code', 'services.name') + // ->get(); + // $res_data['services'] = $services; + $benefits = DB::table('member_plans') ->leftJoin('corporate_benefits','corporate_benefits.plan_id', '=', 'member_plans.plan_id') ->leftJoin('benefits', 'benefits.id', '=', 'corporate_benefits.benefit_id') ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') ->leftJoin('services', 'services.code', '=', 'plans.service_code') ->where('member_plans.member_id', '=', $members->id) + ->where('plans.service_code','=', 'OP') ->select( + 'benefits.id', 'benefits.description', 'benefits.code', 'corporate_benefits.corporate_id', @@ -74,96 +89,108 @@ class MemberController extends Controller ->get(); $res_data['benefits'] = $benefits; - $services = DB::table('member_plans') - ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') - ->leftJoin('services', 'services.code', '=', 'plans.service_code') - ->where('member_plans.member_id', $members->id) - ->whereNull('member_plans.deleted_at') - ->select('plans.service_code', 'services.name') - ->get(); - $res_data['services'] = $services; - // Group Services - $groupServices = []; - foreach ($res_data['benefits'] as $benefit) { - $serviceCode = $benefit->service_code; - $groupServices[$serviceCode][] = [ - 'description' => $benefit->description, - 'code' => $benefit->code, - ]; - } + // $groupServices = []; + // foreach ($res_data['benefits'] as $benefit) { + // $serviceCode = $benefit->service_code; + // $groupServices[$serviceCode][] = [ + // 'description' => $benefit->description, + // 'code' => $benefit->code, + // ]; + // } - $res_data['groupServices'] = $groupServices; + // $res_data['groupServices'] = $groupServices; - $res_data['type'] = $request->type; + // $res_data['type'] = $request->type; // Provider - $providers = DB::table('organizations') - ->where('organizations.type', '=', 'hospital') - ->where('organizations.corporate_id_partner', '!=', 8) - ->orWhere('organizations.corporate_id_partner', NULL) - ->where('status', '=', 'active') - ->orderBy('organizations.name','asc') - ->select( - 'organizations.id', - 'organizations.name' - ) - ->get(); + // $providers = DB::table('organizations') + // ->where('organizations.type', '=', 'hospital') + // ->where('organizations.corporate_id_partner', '!=', 8) + // ->orWhere('organizations.corporate_id_partner', NULL) + // ->where('status', '=', 'active') + // ->orderBy('organizations.name','asc') + // ->select( + // 'organizations.id', + // 'organizations.name' + // ) + // ->get(); - $res_data['providers'] = $providers; + // $res_data['providers'] = $providers; //company - $companies = DB::table('corporates') - ->where('corporates.active', '=', 1) + // $companies = DB::table('corporates') + // ->where('corporates.active', '=', 1) + // ->select( + // 'corporates.id', + // 'corporates.name' + // ) + // ->get(); + + // $res_data['companies'] = $companies; + + $corporateEmployee = DB::table('corporate_employees') + ->leftJoin('corporates', 'corporates.id', '=', 'corporate_employees.corporate_id') + ->leftJoin('corporate_policies', 'corporate_policies.corporate_id', '=', 'corporates.id') + ->where('corporate_employees.status', 'ACTIVE') + ->where('corporates.active', 1) + ->where('corporate_policies.active', 1) + ->where('corporate_employees.member_id', $members->id) ->select( - 'corporates.id', - 'corporates.name' + 'corporate_policies.total_premi', + 'corporate_employees.corporate_id' ) - ->get(); + ->first(); - $res_data['companies'] = $companies; - - //company - $companies = DB::table('corporates') - ->where('corporates.active', '=', 1) - ->select( - 'corporates.id', - 'corporates.name' - ) - ->get(); - - $res_data['companies'] = $companies; - - $corporateEmployeePremi = DB::table('corporate_employees') - ->leftJoin('corporates', 'corporates.id', '=', 'corporate_employees.corporate_id') - ->leftJoin('corporate_policies', 'corporate_policies.corporate_id', '=', 'corporates.id') - ->where('corporate_employees.status', 'ACTIVE') - ->where('corporates.active', 1) - ->where('corporate_policies.active', 1) - ->where('corporate_employees.member_id', $members->id) - ->value('corporate_policies.total_premi'); - - $res_data['total_premi'] = $corporateEmployeePremi ?? 0; - - $limitRules = DB::table('member_plans') + $res_data['total_premi'] = $corporateEmployee->total_premi ?? 0; + $res_data['limit_rules'] = DB::table('member_plans') ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') ->where('member_plans.member_id', $members->id) ->where('member_plans.status', 'active') ->where('plans.active', 1) - ->value('plans.limit_rules'); + ->value('plans.limit_rules') ?? 0; - $res_data['limit_rules'] = $limitRules ?? 0; + $planMember = MemberPlan::where('member_id', $members->id)->get('plan_id'); + + $planId = Plan::whereIn('id', $planMember)->where('service_code', 'OP')->first(); + $benefit = CorporateBenefit::with(['benefit', 'plan'])->where('plan_id', $planId->id)->get()->toArray(); + $benefitData = []; + if (count($benefit)){ + foreach($benefit as $data){ + $data['benefit']['plan_id'] = $data['plan_id']; + $data['benefit']['limit_amount'] = $data['limit_amount']; + $data['benefit']['family_plan'] = $planId->family_plan; + $data['benefit']['max_frequency_period'] = $data['max_frequency_period']; + $data['benefit']['limit_amount_plan'] = $data['plan']['limit_rules']; + $data['benefit']['family_plan_plans'] = $data['plan']['family_plan']; + array_push($benefitData, $data['benefit']); + } + } + $memberUsage = Helper::getUsageMember($corporateEmployee->corporate_id, $members->id, $benefitData);; + + $res_data['used_limit'] = json_decode($memberUsage); + // company + $companies = DB::table('corporates') + ->where('corporates.active', 1) + ->where('corporates.id', $corporateEmployee->corporate_id ?? null) + ->select( + 'corporates.id', + 'corporates.name' + ) + ->get(); + + $res_data['companies'] = $companies; // specialities - $specialities = DB::table('specialities') - ->select( - 'specialities.id', - 'specialities.name' - ) - ->orderBy('specialities.name','asc') - ->get(); + // $specialities = DB::table('specialities') + // ->select( + // 'specialities.id', + // 'specialities.name' + // ) + // ->orderBy('specialities.name','asc') + // ->get(); - $res_data['specialities'] = $specialities; + // $res_data['specialities'] = $specialities; return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200); diff --git a/Modules/Primaya/Http/Controllers/Api/RequestLogController.php b/Modules/Primaya/Http/Controllers/Api/RequestLogController.php index 81e090e7..5056b784 100644 --- a/Modules/Primaya/Http/Controllers/Api/RequestLogController.php +++ b/Modules/Primaya/Http/Controllers/Api/RequestLogController.php @@ -109,7 +109,7 @@ class RequestLogController extends Controller 'type' => 'hospital', 'corporate_id_partner' => $request->corporate_id_partner ? implode(',', $request->corporate_id_partner) : null, 'created_at' => now(), - 'created_by' => auth()->user()->id + // 'created_by' => auth()->user()->id ]); // Insert data ke tabel addresses @@ -120,7 +120,7 @@ class RequestLogController extends Controller 'addressable_id' => $organization_id, 'type' => 'hospital', 'created_at' => now(), - 'created_by' => auth()->user()->id + // 'created_by' => auth()->user()->id ]); // Update main_address_id di tabel organizations @@ -235,7 +235,7 @@ class RequestLogController extends Controller 'amount_not_approved' => $value['amount_not_approved'], 'excess_paid' => $value['excess_paid'], 'keterangan' => $value['keterangan'] ?? '', - 'created_by' => auth()->user()->id, + // 'created_by' => auth()->user()->id, ]; RequestLogBenefit::create($data); diff --git a/app/Services/AuthService.php b/app/Services/AuthService.php index b72e7836..9dd5fe3a 100644 --- a/app/Services/AuthService.php +++ b/app/Services/AuthService.php @@ -20,7 +20,7 @@ class AuthService exec($cmd); } } - + /** * Issue JWT access token for the given client */ @@ -90,23 +90,30 @@ class AuthService { try { $parts = explode('.', $token); + + if (count($parts) !== 3) { return false; } - $payload = json_decode(base64_decode(strtr($parts[1], '-_', '+/'))); + // $payload = json_decode(base64_decode(strtr($parts[1], '-_', '+/'))); + $payloadRaw = $parts[1]; + $payloadRaw = strtr($payloadRaw, '-_', '+/'); + $padding = strlen($payloadRaw) % 4; + if ($padding) { + $payloadRaw .= str_repeat('=', 4 - $padding); + } + $payload = json_decode(base64_decode($payloadRaw)); $clientId = $payload->sub ?? null; - if (!$clientId) { return false; } $clients = config('api_clients.clients'); - $client = collect($clients)->where('api_key', $clientId)->first(); + $client = collect($clients)->where('api_key', $clientId)->first(); if (!$client || !isset($client['api_secret'])) { return false; } - return \Firebase\JWT\JWT::decode($token, new \Firebase\JWT\Key($client['api_secret'], 'HS256')); } catch (\Exception $e) { return false;