This commit is contained in:
ivan-sim
2026-02-27 15:39:31 +07:00
parent 77c8d7200d
commit e889eaadbf
3 changed files with 113 additions and 79 deletions

View File

@@ -3,7 +3,10 @@
namespace Modules\Primaya\Http\Controllers\Api; namespace Modules\Primaya\Http\Controllers\Api;
use App\Helpers\Helper; use App\Helpers\Helper;
use App\Models\CorporateBenefit;
use App\Models\Member; use App\Models\Member;
use App\Models\MemberPlan;
use App\Models\Plan;
use Illuminate\Contracts\Support\Renderable; use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Routing\Controller; use Illuminate\Routing\Controller;
@@ -38,6 +41,7 @@ class MemberController extends Controller
{ {
$members = DB::table('members') $members = DB::table('members')
->leftJoin('member_policies', 'member_policies.member_id','=', 'members.member_id') ->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') ->leftJoin('persons', 'persons.id', '=', 'members.person_id')
->where('members.member_id', '=', $request->no_polis) ->where('members.member_id', '=', $request->no_polis)
->where('members.birth_date', '=', $request->birth_date) ->where('members.birth_date', '=', $request->birth_date)
@@ -59,13 +63,24 @@ class MemberController extends Controller
{ {
$res_data['members'] = $members; $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') $benefits = DB::table('member_plans')
->leftJoin('corporate_benefits','corporate_benefits.plan_id', '=', 'member_plans.plan_id') ->leftJoin('corporate_benefits','corporate_benefits.plan_id', '=', 'member_plans.plan_id')
->leftJoin('benefits', 'benefits.id', '=', 'corporate_benefits.benefit_id') ->leftJoin('benefits', 'benefits.id', '=', 'corporate_benefits.benefit_id')
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
->leftJoin('services', 'services.code', '=', 'plans.service_code') ->leftJoin('services', 'services.code', '=', 'plans.service_code')
->where('member_plans.member_id', '=', $members->id) ->where('member_plans.member_id', '=', $members->id)
->where('plans.service_code','=', 'OP')
->select( ->select(
'benefits.id',
'benefits.description', 'benefits.description',
'benefits.code', 'benefits.code',
'corporate_benefits.corporate_id', 'corporate_benefits.corporate_id',
@@ -74,96 +89,108 @@ class MemberController extends Controller
->get(); ->get();
$res_data['benefits'] = $benefits; $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 // Group Services
$groupServices = []; // $groupServices = [];
foreach ($res_data['benefits'] as $benefit) { // foreach ($res_data['benefits'] as $benefit) {
$serviceCode = $benefit->service_code; // $serviceCode = $benefit->service_code;
$groupServices[$serviceCode][] = [ // $groupServices[$serviceCode][] = [
'description' => $benefit->description, // 'description' => $benefit->description,
'code' => $benefit->code, // 'code' => $benefit->code,
]; // ];
} // }
$res_data['groupServices'] = $groupServices; // $res_data['groupServices'] = $groupServices;
$res_data['type'] = $request->type; // $res_data['type'] = $request->type;
// Provider // Provider
$providers = DB::table('organizations') // $providers = DB::table('organizations')
->where('organizations.type', '=', 'hospital') // ->where('organizations.type', '=', 'hospital')
->where('organizations.corporate_id_partner', '!=', 8) // ->where('organizations.corporate_id_partner', '!=', 8)
->orWhere('organizations.corporate_id_partner', NULL) // ->orWhere('organizations.corporate_id_partner', NULL)
->where('status', '=', 'active') // ->where('status', '=', 'active')
->orderBy('organizations.name','asc') // ->orderBy('organizations.name','asc')
->select( // ->select(
'organizations.id', // 'organizations.id',
'organizations.name' // 'organizations.name'
) // )
->get(); // ->get();
$res_data['providers'] = $providers; // $res_data['providers'] = $providers;
//company //company
$companies = DB::table('corporates') // $companies = DB::table('corporates')
->where('corporates.active', '=', 1) // ->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( ->select(
'corporates.id', 'corporate_policies.total_premi',
'corporates.name' 'corporate_employees.corporate_id'
) )
->get(); ->first();
$res_data['companies'] = $companies; $res_data['total_premi'] = $corporateEmployee->total_premi ?? 0;
$res_data['limit_rules'] = DB::table('member_plans')
//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')
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
->where('member_plans.member_id', $members->id) ->where('member_plans.member_id', $members->id)
->where('member_plans.status', 'active') ->where('member_plans.status', 'active')
->where('plans.active', 1) ->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
$specialities = DB::table('specialities') // $specialities = DB::table('specialities')
->select( // ->select(
'specialities.id', // 'specialities.id',
'specialities.name' // 'specialities.name'
) // )
->orderBy('specialities.name','asc') // ->orderBy('specialities.name','asc')
->get(); // ->get();
$res_data['specialities'] = $specialities; // $res_data['specialities'] = $specialities;
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200); return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);

View File

@@ -109,7 +109,7 @@ class RequestLogController extends Controller
'type' => 'hospital', 'type' => 'hospital',
'corporate_id_partner' => $request->corporate_id_partner ? implode(',', $request->corporate_id_partner) : null, 'corporate_id_partner' => $request->corporate_id_partner ? implode(',', $request->corporate_id_partner) : null,
'created_at' => now(), 'created_at' => now(),
'created_by' => auth()->user()->id // 'created_by' => auth()->user()->id
]); ]);
// Insert data ke tabel addresses // Insert data ke tabel addresses
@@ -120,7 +120,7 @@ class RequestLogController extends Controller
'addressable_id' => $organization_id, 'addressable_id' => $organization_id,
'type' => 'hospital', 'type' => 'hospital',
'created_at' => now(), 'created_at' => now(),
'created_by' => auth()->user()->id // 'created_by' => auth()->user()->id
]); ]);
// Update main_address_id di tabel organizations // Update main_address_id di tabel organizations
@@ -235,7 +235,7 @@ class RequestLogController extends Controller
'amount_not_approved' => $value['amount_not_approved'], 'amount_not_approved' => $value['amount_not_approved'],
'excess_paid' => $value['excess_paid'], 'excess_paid' => $value['excess_paid'],
'keterangan' => $value['keterangan'] ?? '', 'keterangan' => $value['keterangan'] ?? '',
'created_by' => auth()->user()->id, // 'created_by' => auth()->user()->id,
]; ];
RequestLogBenefit::create($data); RequestLogBenefit::create($data);

View File

@@ -90,23 +90,30 @@ class AuthService
{ {
try { try {
$parts = explode('.', $token); $parts = explode('.', $token);
if (count($parts) !== 3) { if (count($parts) !== 3) {
return false; 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; $clientId = $payload->sub ?? null;
if (!$clientId) { if (!$clientId) {
return false; return false;
} }
$clients = config('api_clients.clients'); $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'])) { if (!$client || !isset($client['api_secret'])) {
return false; return false;
} }
return \Firebase\JWT\JWT::decode($token, new \Firebase\JWT\Key($client['api_secret'], 'HS256')); return \Firebase\JWT\JWT::decode($token, new \Firebase\JWT\Key($client['api_secret'], 'HS256'));
} catch (\Exception $e) { } catch (\Exception $e) {
return false; return false;