diff --git a/Modules/Client/Http/Controllers/Api/CorporatePolicyController.php b/Modules/Client/Http/Controllers/Api/CorporatePolicyController.php index 6482a8b2..372fc62c 100644 --- a/Modules/Client/Http/Controllers/Api/CorporatePolicyController.php +++ b/Modules/Client/Http/Controllers/Api/CorporatePolicyController.php @@ -18,7 +18,7 @@ class CorporatePolicyController extends Controller public function index($corporate_id) { $currentCorporate = Auth::user()->managedCorporates() - ->with(['currentPolicy', 'employees']) + ->with(['currentPolicy']) ->find($corporate_id); $data = LimitResources::make($currentCorporate); diff --git a/Modules/Client/Http/Controllers/Api/TopUpController.php b/Modules/Client/Http/Controllers/Api/TopUpController.php index d6b324fc..f2d9a41d 100644 --- a/Modules/Client/Http/Controllers/Api/TopUpController.php +++ b/Modules/Client/Http/Controllers/Api/TopUpController.php @@ -20,7 +20,7 @@ class TopUpController extends Controller { $data = Auth::user() ->managedCorporates() - ->with(['currentPolicy', 'employees']) + ->with(['currentPolicy']) ->withCount(['employees', 'claims' => function ($query) { $query->where('claims.status', 'paid'); }]) @@ -36,20 +36,20 @@ class TopUpController extends Controller */ public function store(Request $request, $corporate_id) { - + $data = $request->validate([ 'topup' => 'required|numeric', ]); - $corporatePolicy = CorporatePolicy::query()->where('corporate_id',$corporate_id)->firstOrFail(); + $corporatePolicy = CorporatePolicy::query()->where('corporate_id', $corporate_id)->firstOrFail(); if (!$corporatePolicy) { - return response() -> json (['message' => 'Corporate policy not found'],404); + return response()->json(['message' => 'Corporate policy not found'], 404); } - $corporatePolicy -> total_premi += $data ['topup']; - $corporatePolicy -> save(); + $corporatePolicy->total_premi += $data['topup']; + $corporatePolicy->save(); - return response () -> json (['message' => 'Amount added to total_premi successfully'], 200); + return response()->json(['message' => 'Amount added to total_premi successfully'], 200); } /** diff --git a/Modules/Client/Transformers/Dashboard/MemberEmployeeDataResources.php b/Modules/Client/Transformers/Dashboard/MemberEmployeeDataResources.php index 23d66c0e..3cceea96 100644 --- a/Modules/Client/Transformers/Dashboard/MemberEmployeeDataResources.php +++ b/Modules/Client/Transformers/Dashboard/MemberEmployeeDataResources.php @@ -1,4 +1,5 @@ $this->person_id, 'memberId' => $this->member_id, 'fullName' => $this->full_name, - 'service' => $this->service_code, + // 'service' => $this->service_code, 'start_date' => $this->start_date, 'end_date' => $this->end_date, 'status' => $this->active, diff --git a/Modules/Client/Transformers/Dashboard/MemberResources.php b/Modules/Client/Transformers/Dashboard/MemberResources.php index d53d88ea..5f058e67 100644 --- a/Modules/Client/Transformers/Dashboard/MemberResources.php +++ b/Modules/Client/Transformers/Dashboard/MemberResources.php @@ -26,7 +26,7 @@ class MemberResources extends JsonResource 'percentage' => (!empty($this->currentPlan->limit_rules ?? 0)) ? (($this->claims_sum_total_claim / $this->currentPlan->limit_rules) * 100) : 0 ], 'status' => $this->active, - 'service_type' => $this->currentPlans, + // 'service_type' => $this->currentPlans, ]; } } diff --git a/Modules/Internal/Http/Controllers/Api/AuthController.php b/Modules/Internal/Http/Controllers/Api/AuthController.php index db546e10..88e9ea54 100644 --- a/Modules/Internal/Http/Controllers/Api/AuthController.php +++ b/Modules/Internal/Http/Controllers/Api/AuthController.php @@ -5,7 +5,6 @@ namespace Modules\Internal\Http\Controllers\Api; use App\Http\Controllers\Controller; use App\Models\User; use Crypt; -use Error; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; @@ -91,7 +90,7 @@ class AuthController extends Controller Event(new ForgetPassword($user)); - // Mail::to($user->email)->send(new SendVerifyEmail($user)); + Mail::to($user->email)->send(new SendVerifyEmail($user)); return response()->json($user); } diff --git a/Modules/Internal/Services/MemberEnrollmentService.php b/Modules/Internal/Services/MemberEnrollmentService.php index a6a7874c..d01afcda 100644 --- a/Modules/Internal/Services/MemberEnrollmentService.php +++ b/Modules/Internal/Services/MemberEnrollmentService.php @@ -179,7 +179,7 @@ class MemberEnrollmentService "ingestion_code" => "Ingestion Code", "ingestion_status" => "Ingestion Status", ]; - + public $result_doc_headers = [ "Record Mode", "Record Type", @@ -357,7 +357,7 @@ class MemberEnrollmentService 'activation_date' => 'Activation Date', 'date_of_birth' => 'Date of Birth', 'date_terminated' => 'Date Terminated', - + ]; if (empty($row['record_type'])) { @@ -372,6 +372,10 @@ class MemberEnrollmentService throw new ImportRowException(__('enrollment.MEMBER_ID_REQUIRED'), 0, null, $row); } + if (empty($row['plan_id'])) { + throw new ImportRowException(__('Plan ID Required'), 0, null, $row); + } + if ($row['record_type'] == 'P') { if (!empty($row['principal_id'])) { throw new ImportRowException(__('enrollment.PRINCIPAL_ID_NOT_REQUIRED'), 0, null, $row); @@ -391,22 +395,22 @@ class MemberEnrollmentService ->first(); if(empty($member)){ - throw new ImportRowException(__('enrollment.PRINCIPAL_NOT_IN_MEMBER_ID'), 0, null, $row); + // throw new ImportRowException(__('enrollment.PRINCIPAL_NOT_IN_MEMBER_ID'), 0, null, $row); } else { - if ($member['record_type'] != 'P'){ - throw new ImportRowException(__('enrollment.PRINCIPAL_ID_NOT_SAME_MEMBER_ID'), 0, null, $row); - } + // if ($member['record_type'] != 'P'){ + // throw new ImportRowException(__('enrollment.PRINCIPAL_ID_NOT_SAME_MEMBER_ID'), 0, null, $row); + // } } if (empty($row['principal_id'])) { throw new ImportRowException(__('enrollment.PRINCIPAL_ID_REQUIRED'), 0, null, $row); } - if (empty($row['relationship_with_principal'])){ - throw new ImportRowException(__('enrollment.RELATIONSHIP_WITH_PRICIPAL_REQUIRED'), 0, null, $row); - } - if (!empty($row['relationship_with_principal']) && !in_array($row['relationship_with_principal'], ['H', 'W', 'D', 'S'])){ - throw new ImportRowException(__('enrollment.RELATIONSHIP_WITH_PRICIPAL_NOT_VALID'), 0, null, $row); - } - + // if (empty($row['relationship_with_principal'])){ + // throw new ImportRowException(__('enrollment.RELATIONSHIP_WITH_PRICIPAL_REQUIRED'), 0, null, $row); + // } + // if (!empty($row['relationship_with_principal']) && !in_array($row['relationship_with_principal'], ['H', 'W', 'D', 'S'])){ + // throw new ImportRowException(__('enrollment.RELATIONSHIP_WITH_PRICIPAL_NOT_VALID'), 0, null, $row); + // } + } @@ -420,26 +424,26 @@ class MemberEnrollmentService // throw new ImportRowException(__('enrollment.BRANCH_CODE_NOT_REQUIRED'), 0, null, $row); // } - if (!empty($row['language']) && !in_array($row['language'], ['M', 'E', 'C', 'I', 'O'])) { - throw new ImportRowException(__('enrollment.INVALID_LANGUAGE'), 0, null, $row); - } + // if (!empty($row['language']) && !in_array($row['language'], ['M', 'E', 'C', 'I', 'O'])) { + // throw new ImportRowException(__('enrollment.INVALID_LANGUAGE'), 0, null, $row); + // } - if (!empty($row['type_of_work']) && !in_array($row['type_of_work'], ['0', '1', '2', '3'])) { - throw new ImportRowException(__('enrollment.INVALID_TYPE_OF_WORK'), 0, null, $row); - } + // if (!empty($row['type_of_work']) && !in_array($row['type_of_work'], ['0', '1', '2', '3'])) { + // throw new ImportRowException(__('enrollment.INVALID_TYPE_OF_WORK'), 0, null, $row); + // } - if (!empty($row['race']) && !in_array($row['race'], ['M', 'C', 'I', 'O'])) { - throw new ImportRowException(__('enrollment.INVALID_RACE'), 0, null, $row); - } + // if (!empty($row['race']) && !in_array($row['race'], ['M', 'C', 'I', 'O'])) { + // throw new ImportRowException(__('enrollment.INVALID_RACE'), 0, null, $row); + // } if (empty($row['policy_number'])) { throw new ImportRowException(__('enrollment.POLICY_NUMBER_REQUIRED'), 0, null, $row); } - if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) { - throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row); - } - + // if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) { + // throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row); + // } + // TODO EFFECTIVE DATE VALIDATION if (empty($row['member_effective_date'])) { throw new ImportRowException(__('enrollment.MEMBER_EFFECTIVE_REQUIRED'), 0, null, $row); @@ -458,7 +462,7 @@ class MemberEnrollmentService // 'title' => $title['member_expiry_date'] // ]), 0, null, $row); // } - + // TODO EFFECTIVE DATE VALIDATION // if (empty($row['activation_date'])) { // throw new ImportRowException(__('enrollment.ACTIVATION_DATE_REQUIRED'), 0, null, $row); @@ -473,35 +477,35 @@ class MemberEnrollmentService // TODO FKTP VALIDATION // TODO FKRTL VALIDATION - if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) { - throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row); - } + // if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) { + // throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row); + // } if (empty($row['name'])) { throw new ImportRowException(__('enrollment.NAME_REQUIRED'), 0, null, $row); } - if (!Helper::validatePhoneNumber($row['telephone_mobile'])){ - throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row); - } + // if (!Helper::validatePhoneNumber($row['telephone_mobile'])){ + // throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row); + // } - if ( - !empty($row['telephone_mobile']) - && !(substr($row['telephone_mobile'], 0, 4) == '+628' || substr($row['telephone_mobile'], 0, 3) == '628') - ) { - throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row); - } + // if ( + // !empty($row['telephone_mobile']) + // && !(substr($row['telephone_mobile'], 0, 4) == '+628' || substr($row['telephone_mobile'], 0, 3) == '628') + // ) { + // throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row); + // } - if ( - !empty($row['email']) - && !filter_var($row['email'], FILTER_VALIDATE_EMAIL) - ) { - throw new ImportRowException(__('enrollment.EMAIL_INVALID'), 0, null, $row); - } + // if ( + // !empty($row['email']) + // && !filter_var($row['email'], FILTER_VALIDATE_EMAIL) + // ) { + // throw new ImportRowException(__('enrollment.EMAIL_INVALID'), 0, null, $row); + // } - if (empty($row['date_of_birth'])) { - throw new ImportRowException(__('enrollment.DATE_OF_BIRTH_REQUIRED'), 0, null, $row); - } + // if (empty($row['date_of_birth'])) { + // throw new ImportRowException(__('enrollment.DATE_OF_BIRTH_REQUIRED'), 0, null, $row); + // } // if(!$this->validateDate($row['date_of_birth'])){ // throw new ImportRowException(__('enrollment.INVALID_DATE', [ // 'title' => $title['date_of_birth'] @@ -520,16 +524,16 @@ class MemberEnrollmentService // } // TODO DOB FORMAT VALIDATION - if (empty($row['sex'])) { - throw new ImportRowException(__('enrollment.SEX_REQUIRED'), 0, null, $row); - } - - if (!in_array($row['sex'], ['F', 'M'])){ - throw new ImportRowException(__('enrollment.SEX_CODE_NOT_VALID'), 0, null, $row); - } + // if (empty($row['sex'])) { + // throw new ImportRowException(__('enrollment.SEX_REQUIRED'), 0, null, $row); + // } + + // if (!in_array($row['sex'], ['F', 'M'])){ + // throw new ImportRowException(__('enrollment.SEX_CODE_NOT_VALID'), 0, null, $row); + // } } - + public function handleImportRow(Corporate $corporate, $row) { try { @@ -546,7 +550,7 @@ class MemberEnrollmentService "member_id" => $row['member_id'] ?? null, "payor_id" => $row['payor_id'] ?? null, "nik" => $row['nik'] ?? null, - "birth_date" => $row['date_of_birth'], + "birth_date" => $row['date_of_birth'] ? date("Y-m-d",$row['date_of_birth']) : null, "gender" => Helper::genderNormalization($row['sex']), "language" => $row['language'] ?? null, "race" => $row['race'] ?? null, @@ -588,6 +592,8 @@ class MemberEnrollmentService "telephone_res" => $row['telephone_res'] ?? null, "telephone_office" => $row['telephone_office'] ?? null, "suspended" => $row['member_suspended'] ?? null, + + "active" => $row['employment_status'] == 'INACTIVE' ? 0 : 1 ]; // $this->validateRow($row); if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->code != $row['policy_number']) { @@ -595,101 +601,101 @@ class MemberEnrollmentService 'policy_id' => $row['policy_number'] ]), 0, null, $row); } - - // validasi member efektif date range date in periode date coroporate + + // validasi member efektif date range date in periode date coroporate $member_effective_date = date("Y-m-d", strtotime($row['member_effective_date'])); $date_terminated = date("Y-m-d", strtotime($row['date_terminated'])); if(!empty($row['activation_date'])){ - $activation_date = date("Y-m-d", strtotime($row['activation_date'])); - if (($activation_date == $date_terminated) && ($activation_date == $member_effective_date)) { - throw new ImportRowException(__('enrollment.MORE_THAN', [ - 'date_param' => 'Activation Date', - 'date' => $activation_date, - 'date_param2' => 'Member Effective Date', - 'start' => $activation_date - ]), 0, null, $row); - } + // $activation_date = date("Y-m-d", strtotime($row['activation_date'])); + // if (($activation_date == $date_terminated) && ($activation_date == $member_effective_date)) { + // throw new ImportRowException(__('enrollment.MORE_THAN', [ + // 'date_param' => 'Activation Date', + // 'date' => $activation_date, + // 'date_param2' => 'Member Effective Date', + // 'start' => $activation_date + // ]), 0, null, $row); + // } } if (!empty($row['date_terminated'])){ - $date_terminated = date("Y-m-d", strtotime($row['date_terminated'])); - if($date_terminated){ - if ($date_terminated <= $member_effective_date && ($date_terminated != $member_effective_date)) { - throw new ImportRowException(__('enrollment.MORE_THAN', [ - 'date_param' => 'Date Terminated Date', - 'date' => $date_terminated, - 'date_param2' => 'Member Effective Date', - 'start' => $member_effective_date - ]), 0, null, $row); - } - } + // $date_terminated = date("Y-m-d", strtotime($row['date_terminated'])); + // if($date_terminated){ + // if ($date_terminated <= $member_effective_date && ($date_terminated != $member_effective_date)) { + // throw new ImportRowException(__('enrollment.MORE_THAN', [ + // 'date_param' => 'Date Terminated Date', + // 'date' => $date_terminated, + // 'date_param2' => 'Member Effective Date', + // 'start' => $member_effective_date + // ]), 0, null, $row); + // } + // } } - // validasi member expried date range date in periode date coroporate + // validasi member expried date range date in periode date coroporate $members_expire_date = date("Y-m-d", strtotime($row['member_expiry_date'])); // validasi member expried date must less date member effective $members_expire_date = date("Y-m-d", strtotime($row['member_expiry_date'])); $members_expire_date = date("Y-m-d", strtotime($row['member_expiry_date'])); - if ($member_effective_date <= $corporate->currentPolicy->start && ($member_effective_date != $corporate->currentPolicy->start)) { - throw new ImportRowException(__('enrollment.MORE_THAN', [ - 'date_param' => 'Member Effective Date', - 'date' => $member_effective_date, - 'date_param2' => 'Start Period Date', - 'start' => $corporate->currentPolicy->start - ]), 0, null, $row); - } - - if ($member_effective_date >= $corporate->currentPolicy->end && ($member_effective_date != $corporate->currentPolicy->end)) { - throw new ImportRowException(__('enrollment.LESS_THAN', [ - 'date_param' => 'Member Effective Date', - 'date' => $member_effective_date, - 'date_param2' => 'End Period Date', - 'end' => $corporate->currentPolicy->end - ]), 0, null, $row); - } - - if ($member_effective_date >= $corporate->currentPolicy->end && ($member_effective_date != $corporate->currentPolicy->end)) { - throw new ImportRowException(__('enrollment.LESS_THAN', [ - 'date_param' => 'Member Effective Date', - 'date' => $member_effective_date, - 'date_param2' => 'End Period Date', - 'end' => $corporate->currentPolicy->end - ]), 0, null, $row); - } - if ($members_expire_date <= $corporate->currentPolicy->start && ($members_expire_date != $corporate->currentPolicy->start) ) { - throw new ImportRowException(__('enrollment.MORE_THAN', [ - 'date_param' => 'Member Expired Date', - 'date' => $members_expire_date, - 'date_param2' => 'Start Period Date', - 'start' => $corporate->currentPolicy->start - ]), 0, null, $row); - } - - if ($members_expire_date >= $corporate->currentPolicy->end && ($members_expire_date != $corporate->currentPolicy->end)) { - throw new ImportRowException(__('enrollment.LESS_THAN', [ - 'date_param' => 'Member Expired Date', - 'date' => $members_expire_date, - 'date_param2' => 'END Period Date', - 'end' => $corporate->currentPolicy->end - ]), 0, null, $row); - } - - - if ($members_expire_date <= $member_effective_date && ($members_expire_date != $member_effective_date)) { - throw new ImportRowException(__('enrollment.MORE_THAN', [ - 'date_param' => 'Member Expired Date', - 'date' => $members_expire_date, - 'date_param2' => 'Member Effective Date', - 'start' => $member_effective_date - ]), 0, null, $row); - } - - + // if ($member_effective_date <= $corporate->currentPolicy->start && ($member_effective_date != $corporate->currentPolicy->start)) { + // throw new ImportRowException(__('enrollment.MORE_THAN', [ + // 'date_param' => 'Member Effective Date', + // 'date' => $member_effective_date, + // 'date_param2' => 'Start Period Date', + // 'start' => $corporate->currentPolicy->start + // ]), 0, null, $row); + // } + + // if ($member_effective_date >= $corporate->currentPolicy->end && ($member_effective_date != $corporate->currentPolicy->end)) { + // throw new ImportRowException(__('enrollment.LESS_THAN', [ + // 'date_param' => 'Member Effective Date', + // 'date' => $member_effective_date, + // 'date_param2' => 'End Period Date', + // 'end' => $corporate->currentPolicy->end + // ]), 0, null, $row); + // } + + // if ($member_effective_date >= $corporate->currentPolicy->end && ($member_effective_date != $corporate->currentPolicy->end)) { + // throw new ImportRowException(__('enrollment.LESS_THAN', [ + // 'date_param' => 'Member Effective Date', + // 'date' => $member_effective_date, + // 'date_param2' => 'End Period Date', + // 'end' => $corporate->currentPolicy->end + // ]), 0, null, $row); + // } + // if ($members_expire_date <= $corporate->currentPolicy->start && ($members_expire_date != $corporate->currentPolicy->start) ) { + // throw new ImportRowException(__('enrollment.MORE_THAN', [ + // 'date_param' => 'Member Expired Date', + // 'date' => $members_expire_date, + // 'date_param2' => 'Start Period Date', + // 'start' => $corporate->currentPolicy->start + // ]), 0, null, $row); + // } + + // if ($members_expire_date >= $corporate->currentPolicy->end && ($members_expire_date != $corporate->currentPolicy->end)) { + // throw new ImportRowException(__('enrollment.LESS_THAN', [ + // 'date_param' => 'Member Expired Date', + // 'date' => $members_expire_date, + // 'date_param2' => 'END Period Date', + // 'end' => $corporate->currentPolicy->end + // ]), 0, null, $row); + // } + + + // if ($members_expire_date <= $member_effective_date && ($members_expire_date != $member_effective_date)) { + // throw new ImportRowException(__('enrollment.MORE_THAN', [ + // 'date_param' => 'Member Expired Date', + // 'date' => $members_expire_date, + // 'date_param2' => 'Member Effective Date', + // 'start' => $member_effective_date + // ]), 0, null, $row); + // } + + if($corporate->code != $row['corporate_id']){ throw new ImportRowException(__('enrollment.CORPORATE_CODE_NOT_MATCH', [ 'corporate_id' => $row['corporate_id'] ]), 0, null, $row); } - + switch ($row['record_mode']) { case "1": // New Member $this->validateRow($row); @@ -707,8 +713,8 @@ class MemberEnrollmentService ], [ 'name' => $row['name'] ?? null, - // 'birth_date' => $this->dateParser($row['date_of_birth']), - 'birth_date' => $row['date_of_birth'], + 'birth_date' => $this->dateParser($row['date_of_birth']), + // 'birth_date' => $row['date_of_birth'], 'gender' => Helper::genderNormalization($row['sex']), 'language' => $row['language'] ?? null, 'race' => $row['race'] ?? null, @@ -758,22 +764,23 @@ class MemberEnrollmentService throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row); } } - + try { DB::beginTransaction(); $member->fill($member_data); if ($member->save()) { $person = Person::create([ 'name' => $row['name'], - 'birth_date' => $row['date_of_birth'], - 'gender' => Helper::genderNormalization($row['sex']), + 'birth_date' => $this->dateParser($row['date_of_birth']) ?? null, + 'gender' => Helper::genderNormalization($row['sex']) ?? '-', 'language' => $row['language'] ?? null, 'race' => $row['race'] ?? null, 'phone' => $row['telephone_mobile'], ]); $member->person_id = $person->id; - + $member->save(); + $memberPolicy = new MemberPolicy(); $memberPolicy->fill([ 'member_id' => $member->member_id, @@ -782,7 +789,7 @@ class MemberEnrollmentService 'end' => $this->dateParser($row['member_expiry_date']), 'status' => 'active' ]); - + $memberPolicy->save(); if (!empty($row['division_name'])) { @@ -807,7 +814,7 @@ class MemberEnrollmentService 'status' => $row['employment_status'] ]); // Bisa disini penyebab data dobel - + $plans = explode(",",$row['plan_id']); if (count($plans) > 0) { foreach($plans as $d){ @@ -840,7 +847,7 @@ class MemberEnrollmentService 'end' => $this->dateParser($row['member_expiry_date']), ]); } - + } DB::commit(); } catch (\Exception $e) { @@ -849,12 +856,12 @@ class MemberEnrollmentService } break; case "2": // Member Information Update (Without Replacement Card) - + // $this->validateRow($row); $member = Member::query() ->where('member_id', $row['member_id']) ->first(); - + // // Validate If Exist Member if (!$member) { throw new ImportRowException(__('enrollment.MEMBER_NOT_FOUND', [ @@ -862,7 +869,7 @@ class MemberEnrollmentService 'policy_id' => $row['policy_number'] ]), 0, null, $row); } - + $person = Person::updateOrCreate( [ @@ -870,15 +877,14 @@ class MemberEnrollmentService ], [ 'name' => $row['name'] ?? null, - // 'birth_date' => $this->dateParser($row['date_of_birth']), - 'birth_date' => $row['date_of_birth'], + 'birth_date' => $this->dateParser($row['date_of_birth']), 'gender' => Helper::genderPerson($row['sex']), 'language' => $row['language'] ?? null, 'race' => $row['race'] ?? null, 'phone' => $row['telephone_mobile'] ] ); - + $member->person_id = $person->id; $member->save(); try { @@ -952,7 +958,7 @@ class MemberEnrollmentService // 'end' => $this->dateParser($row['member_expiry_date']), // ]); // } - + // end update plan @@ -1024,14 +1030,15 @@ class MemberEnrollmentService 'dUpdateOn' => date('Y-m-d H:i:s'), ] ); - + $userLmsDetail = UserDetail::updateOrCreate( [ 'nIDUser' => $nIDUser ], [ 'nIDUser' => $nIDUser, - 'dTanggalLahir' => $row['date_of_birth'], + // 'dTanggalLahir' => $row['date_of_birth'], + 'dTanggalLahir' => $this->dateParser($row['date_of_birth']), 'dCreateOn' => date('Y-m-d H:i:s'), 'sMartialStatus' => $sMartialStatus != 0 ? $sMartialStatus : null, 'nIDJenisKelamin' => $nIDJenisKelamin, @@ -1059,7 +1066,7 @@ class MemberEnrollmentService if (!$memberPolicy->member->isDirty()) { throw new ImportRowException(__('enrollment.MEMBER_NO_CHANGE'), 0, null, $row); } - + $memberPolicy->member->save(); $member->save(); // update informasi person @@ -1205,7 +1212,7 @@ class MemberEnrollmentService // if (empty($row["option_mode"])) { // throw new ImportRowException(__('enrollment.OPTION_MODE_INVALID_FORMAT', [ - // 'member_id' => $row['member_id'], + // 'member_id' => $row['member_id'], // 'policy_id' => $row['policy_number'] // ]), 0, null, $row); // } @@ -1218,7 +1225,7 @@ class MemberEnrollmentService // // Validate // if ( !in_array($option_mode[0], ['P', 'D']) || empty($corp_code) || empty($policy_number) || empty($member_id) ) { // throw new ImportRowException(__('enrollment.OPTION_MODE_INVALID_FORMAT', [ - // 'member_id' => $row['member_id'], + // 'member_id' => $row['member_id'], // 'policy_id' => $row['policy_number'] // ]), 0, null, $row); // } @@ -1280,7 +1287,7 @@ class MemberEnrollmentService // $memberPolicy->member->record_type == $row['record_type'] // ) { // throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_PRINCIPAL_INVALID', [ - // 'member_id' => $row['member_id'], + // 'member_id' => $row['member_id'], // 'policy_id' => $row['policy_number'] // ]), 0, null, $row); // } @@ -1293,7 +1300,7 @@ class MemberEnrollmentService // $memberPolicy->member->payor_id == $row['payor_id'] // ) { // throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_DEPENDANT_INVALID', [ - // 'member_id' => $row['member_id'], + // 'member_id' => $row['member_id'], // 'policy_id' => $row['policy_number'] // ]), 0, null, $row); // } @@ -1533,10 +1540,10 @@ class MemberEnrollmentService $value = $row_data[$this->doc_headers_to_field_map[$header]] ?? null; if (is_string($value)) { $cells[] = WriterEntityFactory::createCell($value); - } + } else if ($value instanceof DateTime) { $cells[] = WriterEntityFactory::createCell(Carbon::parse($value)->format('Ymd')); - } + } else { $cells[] = WriterEntityFactory::createCell($value); } @@ -1549,7 +1556,7 @@ class MemberEnrollmentService public function validateRangePeriode($dates){ $date = date("Y-m-d", strtotime($dates)); if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->start <= $date) { - + } if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->end >= $date) { dd($corporate->currentPolicy->end, $dates); diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index 79b956cd..39944ac8 100644 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -13,17 +13,17 @@ use App\Models\Service; class Helper { - public static function genderNormalization($anyGenderCode) + public static function genderNormalization($anyGenderCode = '-') { - + if ($anyGenderCode == 'M') { - return 'Male'; + return 'male'; } else if ($anyGenderCode == 'F') { - return 'Female'; + return 'female'; } else if ($anyGenderCode == 'O') { - return 'Others'; + return 'others'; } else if ($anyGenderCode == 'U') { - return 'Unknown'; + return 'unknown'; } else { return '-'; } @@ -57,7 +57,8 @@ class Helper } } - public static function memberType($code){ + public static function memberType($code) + { if ($code == 'P') { return 'Principal'; } else if ($code == 'D') { @@ -67,30 +68,29 @@ class Helper } } - public static function relationWithPrincipal($code){ + public static function relationWithPrincipal($code) + { if ($code == 'H') { return 'Husbund'; - } - else if ($code == 'W') { + } else if ($code == 'W') { return 'Wife'; - } - else if ($code == 'S') { + } else if ($code == 'S') { return 'Son'; - } - else if ($code == 'D') { + } else if ($code == 'D') { return 'Daughter'; - } - else { + } else { '-'; } } - public static function principalName($code){ + public static function principalName($code) + { $principalName = Member::where('member_id', $code)->get()->first(); return $principalName->name; } - public static function serviceName($code){ + public static function serviceName($code) + { $serviceName = Service::where('code', $code)->get()->first(); return $serviceName->name; } @@ -241,10 +241,11 @@ class Helper ], $statusCode); } - public static function validatePhoneNumber($phoneNumber) { + public static function validatePhoneNumber($phoneNumber) + { // Menghapus semua karakter selain angka dan + $cleanedNumber = preg_replace('/[^0-9+]/', '', $phoneNumber); - + // Memeriksa apakah nomor telepon hanya terdiri dari angka dan + if ($cleanedNumber == $phoneNumber) { // Nomor telepon valid @@ -255,11 +256,13 @@ class Helper } } - public static function formatRupiah($angka) { + public static function formatRupiah($angka) + { return "Rp " . number_format($angka, 0, ',', '.'); } - public static function sPaymentMethod($id) { + public static function sPaymentMethod($id) + { $sPaymentMethod = [ 1 => 'Pribadi', 2 => 'On-Site Payment', @@ -268,17 +271,19 @@ class Helper 5 => 'Voucher', 6 => 'ASO' ]; - + return $sPaymentMethod[$id]; } - public static function formatDateDB($date){ + public static function formatDateDB($date) + { $convertedDate = Carbon::createFromFormat('d-m-Y', $date)->format('Y-m-d H:i:s'); return $convertedDate; } - public static function formatDateOnly($date){ + public static function formatDateOnly($date) + { // Membuat objek Carbon dengan tanggal asli dan zona waktu UTC $carbonDate = Carbon::createFromFormat('Y-m-d\TH:i:s.u\Z', $date, 'UTC'); @@ -289,7 +294,8 @@ class Helper return $convertedDate; } - public static function formatTimeOnly($date){ + public static function formatTimeOnly($date) + { // Membuat objek Carbon dengan tanggal asli dan zona waktu UTC $carbonDate = Carbon::createFromFormat('Y-m-d\TH:i:s.u\Z', $date, 'UTC'); @@ -307,8 +313,7 @@ class Helper DB::table('notifications')->insert($data); DB::commit(); return true; - } - catch (\Exception $e) { + } catch (\Exception $e) { DB::rollback(); return $e->getMessage(); } @@ -320,28 +325,27 @@ class Helper $mail = new PHPMailer(true); try { // Server settings - $mail->isSMTP(); - $mail->Host = 'smtp.gmail.com'; - $mail->SMTPAuth = true; - $mail->Username = env('EMAIL'); - $mail->Password = env('PW_EMAIL'); - $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; - $mail->Port = 465; - $mail->SMTPSecure = "ssl"; + $mail->isSMTP(); + $mail->Host = 'smtp.gmail.com'; + $mail->SMTPAuth = true; + $mail->Username = env('EMAIL'); + $mail->Password = env('PW_EMAIL'); + $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; + $mail->Port = 465; + $mail->SMTPSecure = "ssl"; // Penerima email $mail->setFrom(env('EMAIL'), env('NAME_EMAIL')); $mail->addAddress($data['email'], $data['name']); // Konten email - $mail->isHTML(true); + $mail->isHTML(true); $mail->Subject = $data['subject']; $mail->Body = $data['body']; // Kirim email $mail->send(); return true; - } catch (\Exception $e) { dd($e); return ($mail->ErrorInfo); @@ -355,21 +359,21 @@ class Helper $mail = new PHPMailer(true); try { // Server settings - $mail->isSMTP(); - $mail->Host = 'smtp.gmail.com'; - $mail->SMTPAuth = true; - $mail->Username = env('EMAIL'); - $mail->Password = env('PW_EMAIL'); - $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; - $mail->Port = 465; - $mail->SMTPSecure = "ssl"; + $mail->isSMTP(); + $mail->Host = 'smtp.gmail.com'; + $mail->SMTPAuth = true; + $mail->Username = env('EMAIL'); + $mail->Password = env('PW_EMAIL'); + $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; + $mail->Port = 465; + $mail->SMTPSecure = "ssl"; // Penerima email $mail->setFrom(env('EMAIL'), env('NAME_EMAIL')); $mail->addAddress($data['email'], $data['name']); // Konten email - $mail->isHTML(true); + $mail->isHTML(true); $mail->Subject = $data['subject']; $mail->Body = $data['body']; $mail->addAttachment($data['attach'], 'e-card.pdf'); @@ -377,12 +381,10 @@ class Helper // Kirim email $mail->send(); return true; - } catch (\Exception $e) { dd($mail->ErrorInfo); return ($mail->ErrorInfo); return false; } } - } diff --git a/app/Models/Member.php b/app/Models/Member.php index ef95adb6..2d415983 100644 --- a/app/Models/Member.php +++ b/app/Models/Member.php @@ -63,7 +63,8 @@ class Member extends Model "policy_in_force", "start_no_claim", "end_no_claim", - "suspended" + "suspended", + "active", ]; protected $appends = [ @@ -152,14 +153,14 @@ class Member extends Model public function currentPlans() { return $this->hasManyThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id'); - // ->latest(); // TODO Fix This + // ->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 + 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() @@ -230,7 +231,7 @@ class Member extends Model $arr[] = $this->person->name_prefix; } - $arr[] = $this->person->name; + $arr[] = $this->person->name ?? '-'; if (!empty($this->person->name_suffix)) { $arr[] = $this->person->name_suffix; @@ -258,19 +259,33 @@ class Member extends Model // protected function birthDate(): Attribute // { // // $date = $this->person->birth_date ?? ($this->birth_date ?? null); - // $date = $this->birth_date ?? ($this->person->birth_date ?? null); - // return Attribute::make( - // get: fn () => !empty($date) ? Carbon::parse($date)->format('Y-m-d') : 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 { // $date = $this->person->birth_date ?? ($this->birth_date ?? null); - $date = $this->birth_date ?? ($this->birth_date ?? this->person->birth_date); - return Attribute::make( - get: fn () => !empty($date) ? Carbon::parse($date)->format('d / M / Y') : 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 startDate(): Attribute @@ -291,18 +306,19 @@ class Member extends Model ); } - protected function gender(): Attribute - { - return Attribute::make( - get: fn () => ucfirst($this->person->gender) ?? 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 :''; + if ($avatar) { + $path = $_ENV['LMS_APP_STORAGE'] . $avatar->path ? $avatar->path : ''; return Attribute::make( get: fn () => $avatar ? $path : null ); diff --git a/app/Services/CorporateMemberService.php b/app/Services/CorporateMemberService.php index 1a7c65c7..5b08ac9f 100644 --- a/app/Services/CorporateMemberService.php +++ b/app/Services/CorporateMemberService.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Models\CorporateEmployee; use App\Models\Member; use App\Models\Encounter; use Illuminate\Database\Eloquent\Builder; @@ -13,34 +14,42 @@ class CorporateMemberService public function getAllMemberDashboards(int $corporateId, Request $request) { $limit = $request->has('perPage') ? $request->input('perPage') : 10; - return Member::query() - ->joinCorporateEmployees('left') - ->joinCorporateDivisions('left') - ->with(['currentPlan', 'person']) - ->where('corporate_employees.corporate_id', $corporateId) - ->when($request->input('search'), function (Builder $query, $search) { - $query->where(function (Builder $query) use ($search) { - $query->orWhere('members.member_id', 'like', "%" . $search . "%") - ->orWhere('members.name', 'like', "%" . $search . "%"); + $memberIds = CorporateEmployee::where('corporate_id', $corporateId) + ->when($request->input('division'), function ($query, $value) { + $query->where('division_id', $value); + }) + ->pluck('member_id'); + return Member::with(['person']) + ->whereIn('id', $memberIds) + ->when($request->input('search'), function ($query, $search) { + $query->where(function ($query) use ($search) { + $query->orWhere('member_id', 'like', "%" . $search . "%") + ->orWhere('name', 'like', "%" . $search . "%"); }); }) - ->when($request->input('division'), function (Builder $query, $value) { - $query->where('corporate_employees.division_id', $value); - }) - ->when($request->has('orderBy'), function (Builder $query) use ($request) { + ->when($request->has('orderBy'), function ($query) use ($request) { $orderBy = match ($request->input('orderBy')) { 'memberId' => 'member_id', 'fullName' => 'name', 'status' => 'active', - 'division' => 'corporate_divisions.name', - default => '' + default => null, }; - if ($request->order) { - $query->getQuery()->orderBy($orderBy, $request->order); + if ($orderBy !== null && $request->order) { + $query->orderBy($orderBy, $request->order); } }) - ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active']) - ->selectRaw("(select sum(`claims`.`total_claim`) from `claims` where `members`.`id` = `claims`.`member_id` AND `claims`.`deleted_at` IS NULL) AS `claims_sum_total_claim`") + ->select([ + 'id', + 'person_id', + 'member_id', + 'name', + 'active', + ]) + ->withCount([ + 'claims as claims_sum_total_claim' => function ($query) { + $query->select(DB::raw('COALESCE(SUM(total_claim), 0)'))->whereNull('deleted_at'); + }, + ]) ->paginate($limit); } @@ -49,41 +58,48 @@ class CorporateMemberService $limit = $request->has('per_page') ? $request->input('per_page') : 10; $results = DB::table('claim_requests') - ->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id') - ->leftJoin('members', 'claim_requests.member_id', '=', 'members.id') - ->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id') - ->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id') - ->where('corporate_employees.corporate_id', '=', $corporateId) - ->when($request->input('search'), function ($query, $search) { - $query->where(function ($query) use ($search) { - $query->orWhere('claim_requests.code', 'like', "%" . $search . "%") - ->orWhere('members.member_id', 'like', "%" . $search . "%") - ->orWhere('members.name', 'like', "%" . $search . "%") - ->orWhere('corporate_divisions.name', 'like', "%" . $search . "%") - ->orWhere('claim_requests.status', 'like', "%" . $search . "%") - ->orWhere('claim_requests.submission_date', 'like', "%" . $search . "%"); - }); - }) - ->when($request->has('orderBy'), function ($query) use ($request) { - $orderBy = $request->orderBy; - $direction = $request->order ?? 'asc'; + ->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id') + ->leftJoin('members', 'claim_requests.member_id', '=', 'members.id') + ->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id') + ->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id') + ->where('corporate_employees.corporate_id', '=', $corporateId) + ->when($request->input('search'), function ($query, $search) { + $query->where(function ($query) use ($search) { + $query->orWhere('claim_requests.code', 'like', "%" . $search . "%") + ->orWhere('members.member_id', 'like', "%" . $search . "%") + ->orWhere('members.name', 'like', "%" . $search . "%") + ->orWhere('corporate_divisions.name', 'like', "%" . $search . "%") + ->orWhere('claim_requests.status', 'like', "%" . $search . "%") + ->orWhere('claim_requests.submission_date', 'like', "%" . $search . "%"); + }); + }) + ->when($request->has('orderBy'), function ($query) use ($request) { + $orderBy = $request->orderBy; + $direction = $request->order ?? 'asc'; - $query->orderBy($orderBy, $direction); - }) - ->select('members.id', 'claim_requests.code','members.member_id', 'members.name as full_name', 'corporate_divisions.name AS division_name', - DB::raw(' - CASE + $query->orderBy($orderBy, $direction); + }) + ->select( + 'members.id', + 'claim_requests.code', + 'members.member_id', + 'members.name as full_name', + 'corporate_divisions.name AS division_name', + DB::raw(' + CASE WHEN claim_requests.status = "requested" THEN "requested" WHEN claim_requests.status = "approved" AND claims.status = "approved" THEN "approved" WHEN claim_requests.status = "approved" AND claims.status = "declined" THEN "declined" WHEN claim_requests.status = "approved" AND claims.status = "disbrusmented" THEN "disbrusmented" /*WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "pending"*/ WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed" - ELSE "" + ELSE "" END AS status - '), - 'claim_requests.id AS claim_request_id', 'claim_requests.submission_date') - ->paginate($limit); + '), + 'claim_requests.id AS claim_request_id', + 'claim_requests.submission_date' + ) + ->paginate($limit); return $results; } @@ -125,7 +141,7 @@ class CorporateMemberService } }) // ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active', 'claim_requests.id', 'claim_requests.member_id', 'claim_requests.submission_date']) - ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active', ]) + ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active',]) ->paginate($limit); } @@ -184,36 +200,32 @@ class CorporateMemberService $limit = $request->has('perPage') ? $request->input('perPage') : 10; return Member::query() - ->joinCorporateEmployees('left') - ->joinMemberPlans('left') - ->joinPlans('left') - ->with(['currentPlan', 'person']) - ->where('corporate_employees.corporate_id', $corporateId) - ->when($request->input('search'), function (Builder $query, $search) { - $query->where(function (Builder $query) use ($search) { - $query->orWhere('members.member_id', 'like', "%" . $search . "%") - ->orWhere('members.name', 'like', "%" . $search . "%"); - }); + ->whereHas('employeds', function ($query) use ($corporateId) { + $query->where('corporate_id', $corporateId); }) - ->when($request->input('division'), function (Builder $query, $value) { - $query->where('corporate_employees.division_id', $value); - }) - ->when($request->has('orderBy'), function (Builder $query) use ($request) { + ->when($request->has('orderBy'), function ($query) use ($request) { $orderBy = match ($request->input('orderBy')) { 'memberId' => 'member_id', 'fullName' => 'name', 'status' => 'active', - 'start_date' => 'member_plans.start', - 'end_date' => 'member_plans.end', - 'service' => 'plans.service_code', - - default => '' + 'start_date' => 'members_effective_date', + 'end_date' => 'members_expire_date', + default => null, }; - $query->getQuery()->orderBy($orderBy, $request->order); + if ($orderBy !== null && $request->order) { + $query->orderBy($orderBy, $request->order); + } }) - ->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'member_plans.start AS start_date', 'member_plans.end AS end_date', 'plans.active', 'plans.service_code']) - ->selectRaw("(select sum(`claims`.`total_claim`) from `claims` where `members`.`id` = `claims`.`member_id` AND `claims`.`deleted_at` IS NULL) AS `claims_sum_total_claim`") + ->select([ + 'id', + 'person_id', + 'member_id', + 'name', + 'members_effective_date', + 'members_expire_date', + 'active', + ]) ->paginate($limit); } diff --git a/database/migrations/2023_06_13_103859_add_column_limit_telecon_to_table_plans.php b/database/migrations/2023_06_13_103859_add_column_limit_telecon_to_table_plans.php index b58063dc..e0991fa0 100644 --- a/database/migrations/2023_06_13_103859_add_column_limit_telecon_to_table_plans.php +++ b/database/migrations/2023_06_13_103859_add_column_limit_telecon_to_table_plans.php @@ -13,7 +13,7 @@ return new class extends Migration */ public function up() { - Schema::table(' plans', function (Blueprint $table) { + Schema::table('plans', function (Blueprint $table) { $table->string('limit_telecon')->nullable(); }); } diff --git a/frontend/client-portal/.env.development b/frontend/client-portal/.env.development index 1292c8a9..fd08f5b0 100644 --- a/frontend/client-portal/.env.development +++ b/frontend/client-portal/.env.development @@ -5,5 +5,5 @@ PORT=8083 REACT_APP_HOST_API_URL="https://aso-api.linksehat.dev/api/client" # VITE_API_URL="https://aso-api.linksehat.dev/api/client" -VITE_API_URL="http://localhost:8000/api/client" +VITE_API_URL="https://primecenter-api.linksehat.com/api/client" diff --git a/frontend/client-portal/.env.production b/frontend/client-portal/.env.production index 565298f4..19484cbc 100644 --- a/frontend/client-portal/.env.production +++ b/frontend/client-portal/.env.production @@ -1,3 +1,3 @@ GENERATE_SOURCEMAP=false -VITE_API_URL="https://aso-api.linksehat.dev/api/client" +VITE_API_URL="https://primecenter-api.linksehat.com/api/client" diff --git a/frontend/client-portal/src/@types/table.ts b/frontend/client-portal/src/@types/table.ts index 2e71163b..72700787 100644 --- a/frontend/client-portal/src/@types/table.ts +++ b/frontend/client-portal/src/@types/table.ts @@ -82,7 +82,7 @@ export type TableListProps = { appliedParams: {}; setAppliedParams: Dispatch>; }; - searchs: { + searchs?: { useSearchs: boolean; searchText: string; setSearchText: Dispatch>; diff --git a/frontend/client-portal/src/pages/Dashboard/Index.tsx b/frontend/client-portal/src/pages/Dashboard/Index.tsx index 355d4c97..330e73dc 100644 --- a/frontend/client-portal/src/pages/Dashboard/Index.tsx +++ b/frontend/client-portal/src/pages/Dashboard/Index.tsx @@ -5,7 +5,6 @@ import { Container, Grid, Button, - IconButton, LinearProgress, linearProgressClasses, SelectChangeEvent, @@ -25,15 +24,14 @@ import Table from '../../components/Table'; import { HeadCell, Order, PaginationTableProps } from '../../@types/table'; import { useSearchParams } from 'react-router-dom'; import palette from '../../theme/palette'; -import { MoreVert as MoreVertIcon } from '@mui/icons-material'; import { fSplit } from '../../utils/formatNumber'; -const itemList = [ - { info: 'Mohon lengkapi dokumen Alison Born', date: 'Selasa, 13 Februari 23', time: '09:43 WIB' }, - { info: 'Mohon lengkapi dokumen Alison Born', date: 'Selasa, 13 Februari 23', time: '09:43 WIB' }, - { info: 'Mohon lengkapi dokumen Alison Born', date: 'Selasa, 13 Februari 23', time: '09:43 WIB' }, - { info: 'Mohon lengkapi dokumen Alison Born', date: 'Selasa, 13 Februari 23', time: '09:43 WIB' }, -]; +// const itemList = [ +// { info: 'Mohon lengkapi dokumen Alison Born', date: 'Selasa, 13 Februari 23', time: '09:43 WIB' }, +// { info: 'Mohon lengkapi dokumen Alison Born', date: 'Selasa, 13 Februari 23', time: '09:43 WIB' }, +// { info: 'Mohon lengkapi dokumen Alison Born', date: 'Selasa, 13 Februari 23', time: '09:43 WIB' }, +// { info: 'Mohon lengkapi dokumen Alison Born', date: 'Selasa, 13 Februari 23', time: '09:43 WIB' }, +// ]; /* ------------------------------ default data ------------------------------ */ type DataMember = { @@ -256,12 +254,6 @@ export default function Index() { ]; /* -------------------------------------------------------------------------- */ - /* ----------------------------- handler action ----------------------------- */ - const handleAction = () => { - alert('action'); - }; - /* -------------------------------------------------------------------------- */ - useEffect(() => { (async () => { setIsLoading(true); @@ -279,7 +271,7 @@ export default function Index() { params: { ...parameters }, }); -// console.log('member', corporateMembers); + // console.log('member', corporateMembers); const corporateTopUpLimit = await axios.get(`${corporateValue}/topup`); setSearchParams(parameters); @@ -289,58 +281,56 @@ export default function Index() { }); setDivisionData(corporateDivision.data); setMemberData( - corporateMembers.data.data.map((obj: any) => { - return { - ...obj, - limit: ( - - - - {fSplit(obj.limit.current)} / {fSplit(obj.limit.total)} - - + corporateMembers.data.data.map((obj: any) => ({ + ...obj, + limit: ( + + + + {fSplit(obj.limit.current)} / {fSplit(obj.limit.total)} + + + ), + status: + obj.status === 1 ? ( + + ) : ( + ), - status: - obj.status === 1 ? ( - - ) : ( - - ), - /* action: ( + /* action: ( ), */ - }; - }) + })) ); setPaginationTable(corporateMembers.data); setRowsPerPage(corporateMembers.data.per_page); @@ -357,8 +347,6 @@ export default function Index() { })(); }, [appliedParams, searchParams, order, orderBy, setSearchParams, corporateValue]); -// console.log(policyData); - return ( @@ -370,7 +358,7 @@ export default function Index() { - + diff --git a/frontend/client-portal/src/pages/EmployeeData/Index.tsx b/frontend/client-portal/src/pages/EmployeeData/Index.tsx index 8f182c77..e69a3176 100644 --- a/frontend/client-portal/src/pages/EmployeeData/Index.tsx +++ b/frontend/client-portal/src/pages/EmployeeData/Index.tsx @@ -1,121 +1,26 @@ -/* ---------------------------------- react --------------------------------- */ -import { useState, SyntheticEvent } from 'react'; /* ---------------------------------- @mui ---------------------------------- */ -import { Box, Tabs, Tab, Container, Grid, Card, Stack } from '@mui/material'; -import { styled } from '@mui/material/styles'; +import { Container, Grid } from '@mui/material'; /* ------------------------------- components ------------------------------- */ import Page from '../../components/Page'; /* ---------------------------------- hooks --------------------------------- */ import useSettings from '../../hooks/useSettings'; import List from './List'; -import ServiceMonitoring from './ServiceMonitoring'; -import UserProfile from './UserProfile'; import HeaderBreadcrumbs from '../../components/HeaderBreadcrumbs'; -/* ------------------------------ tabs setting ------------------------------ */ - -/* ---------------------------------- types --------------------------------- */ - -interface TabPanelProps { - children?: React.ReactNode; - index: number; - value: number; -} - -interface StyledTabsProps { - children?: React.ReactNode; - value: number; - onChange: (event: React.SyntheticEvent, newValue: number) => void; -} - -interface StyledTabProps { - label: string; - icon?: string | React.ReactElement; -} - -/* -------------------------------- tab style ------------------------------- */ - -function TabPanel(props: TabPanelProps) { - const { children, value, index, ...other } = props; - - return ( - - ); -} - -function a11yProps(index: number) { - return { - id: `simple-tab-${index}`, - 'aria-controls': `simple-tabpanel-${index}`, - }; -} - -const StyledTabs = styled((props: StyledTabsProps) => )({ - backgroundColor: '#F4F6F8', - padding: '0 24px', - '& .MuiTabs-indicator': { - display: 'flex', - justifyContent: 'space-between', - backgroundColor: 'transparent', - }, - '& .MuiTabs-indicatorSpan': { - maxWidth: 40, - backgroundColor: '#635ee7', - }, -}); - -const StyledTab = styled((props: StyledTabProps) => )( - ({ theme }) => ({ - textTransform: 'none', - fontWeight: 600, - color: theme.palette.grey[600], - marginRight: '5rem', - '&.Mui-selected': { - color: '#212B36', - borderBottom: '2px solid ' + theme.palette.primary.main, - }, - '&:hover': { - color: '#212B36', - opacity: 1, - borderBottom: '2px solid ' + theme.palette.primary.main, - }, - }) -); - -/* -------------------------------------------------------------------------- */ - export default function Drugs() { const { themeStretch } = useSettings(); - const [value, setValue] = useState(0); - const handleChange = (event: SyntheticEvent, newValue: number) => { - setValue(newValue); - }; - return ( - - - + diff --git a/frontend/client-portal/src/pages/EmployeeData/List.tsx b/frontend/client-portal/src/pages/EmployeeData/List.tsx index 5ecd717c..52ebde3f 100644 --- a/frontend/client-portal/src/pages/EmployeeData/List.tsx +++ b/frontend/client-portal/src/pages/EmployeeData/List.tsx @@ -1,150 +1,23 @@ /* ---------------------------------- @mui ---------------------------------- */ -import { - Paper, - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, - TextField, - Stack, - Button, - TableSortLabel, - Box, - MenuItem -} from '@mui/material'; -import { visuallyHidden } from '@mui/utils'; +import { Stack, MenuItem } from '@mui/material'; /* ---------------------------------- axios --------------------------------- */ -// import axios from 'axios'; import axios from '../../utils/axios'; /* ---------------------------------- react --------------------------------- */ import { useContext, useEffect, useState } from 'react'; /* -------------------------------- component ------------------------------- */ -import Iconify from '../../components/Iconify'; -import BaseTablePagination from '../../components/BaseTablePagination'; import TableComponent from '../../components/Table'; -/* ---------------------------------- hooks --------------------------------- */ -import useMap from '../../hooks/useMap'; /* ---------------------------------- theme --------------------------------- */ -import palette from '../../theme/palette'; import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate'; import { HeadCell, Order, PaginationTableProps } from '../../@types/table'; -import { useSearchParams, useNavigate, Link } from 'react-router-dom'; -import { fDate, fDateSuffix } from '../../utils/formatTime'; -import { format } from 'date-fns'; +import { useSearchParams, useNavigate } from 'react-router-dom'; +import { fDateSuffix } from '../../utils/formatTime'; import Typography from '@mui/material/Typography'; import TableMoreMenu from '../../components/table/TableMoreMenu'; -import EditOutlinedIcon from '@mui/icons-material/EditOutlined'; import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined'; import Label from '../../components/Label'; - -/* ---------------------------------- types --------------------------------- */ - -// type PaginationTableProps = { -// current_page: number; -// from: number; -// last_page: number; -// links: []; -// path: string; -// per_page: number; -// to: number; -// total: number; -// }; - -// type DataTableProps = { -// fullName: string; -// memberId: string; -// service: string; -// start_date: string; -// end_date: string; -// status: boolean | number; -// }; - -// /* -------------------------------------------------------------------------- */ - -// /* -------------------------- enchanced table head -------------------------- */ - -// type Order = 'asc' | 'desc'; - -// interface HeadCell { -// id: string; -// label: string; -// } - -// const headCells: readonly HeadCell[] = [ -// { -// id: 'name', -// label: 'Name', -// }, -// { -// id: 'member_id', -// label: 'Member ID', -// }, -// { -// id: 'service', -// label: 'Service', -// }, -// { -// id: 'start_date', -// label: 'Start Date', -// }, -// { -// id: 'end_date', -// label: 'End Date', -// }, -// { -// id: 'status', -// label: 'Status', -// }, -// ]; - -// interface EnhancedTableProps { -// onRequestSort: (event: React.MouseEvent, property: string) => void; -// order: Order; -// orderBy: string; -// } - -// function EnhancedTableHead(props: EnhancedTableProps) { -// const { order, orderBy, onRequestSort } = props; -// const createSortHandler = (property: string) => (event: React.MouseEvent) => { -// onRequestSort(event, property); -// }; - -// return ( -// -// -// No -// {headCells.map((headCell) => ( -// -// -// {headCell.label} -// {orderBy === headCell.id ? ( -// -// {order === 'desc' ? 'sorted descending' : 'sorted ascending'} -// -// ) : null} -// -// -// ))} -// -// -// ); -// } - -/* -------------------------------------------------------------------------- */ - export default function List() { const navigate = useNavigate(); @@ -212,28 +85,6 @@ export default function List() { /* -------------------------------------------------------------------------- */ - /* ------------------------------ handle search ----------------------------- */ - const [searchText, setSearchText] = useState(''); - - const handleSearchSubmit = async (event: React.FormEvent) => { - event.preventDefault(); - - if (searchText === '') { - searchParams.delete('search'); - const params = Object.fromEntries([...searchParams.entries()]); - setAppliedParams(params); - } else { - const params = Object.fromEntries([...searchParams.entries(), ['search', searchText]]); - setAppliedParams(params); - } - }; - - const searchs = { - searchText: searchText, - setSearchText: setSearchText, - handleSearchSubmit: handleSearchSubmit, - }; - /* -------------------------------- headCell -------------------------------- */ const headCells: HeadCell[] = [ { @@ -248,7 +99,7 @@ export default function List() { label: 'Name', isSort: true, }, - + { id: 'start_date', align: 'center', @@ -290,68 +141,44 @@ export default function List() { const response = await axios.get(`${corporateValue}/members?type=employee-data`, { params: { ...parameters }, }); - + + setSearchParams(parameters); setData( - response.data.data.map((obj: any) => { - return { - ...obj, - // memberId: - // - // , - status: - obj.status === 1 ? ( - - ) : ( - - ), - start_date: - - , - end_date: - - , - fullName: - - {obj.fullName} - - , - memberId: - - {obj.memberId} - - , - action: - - navigate ('/employee-data/user-profile/'+obj.personId)}> - - View - - - } /> - }; - }) + response.data.data.map((obj: any) => ({ + ...obj, + // memberId: + // + // , + status: + obj.status === 1 ? ( + + ) : ( + + ), + start_date: , + end_date: , + fullName: {obj.fullName}, + memberId: {obj.memberId}, + action: ( + + navigate('/employee-data/user-profile/' + obj.personId)}> + + View + + + } + /> + ), + })) ); setPaginationTable(response.data); setRowsPerPage(response.data.per_page); - - if (searchParams.get('page')) { //@ts-ignore const currentPage = parseInt(searchParams.get('page')) - 1; @@ -373,7 +200,7 @@ export default function List() { paginations={paginations} loadings={loadings} params={params} - searchs={searchs} + // searchs={searchs} // filters={filters} /> diff --git a/frontend/client-portal/src/sections/dashboard/CardNotification.tsx b/frontend/client-portal/src/sections/dashboard/CardNotification.tsx index 7727e61d..481b232f 100644 --- a/frontend/client-portal/src/sections/dashboard/CardNotification.tsx +++ b/frontend/client-portal/src/sections/dashboard/CardNotification.tsx @@ -41,6 +41,7 @@ const ItemNotificationStyle = styled(Card)(({ theme }) => ({ marginTop: 2, overflowY: 'auto', maxHeight: '154px', + minHeight: '154px', gap: '0.5rem', })); @@ -100,31 +101,37 @@ export default function CardNotification({ data }: NotificationProps) { - - {data - ? data.map(({ info, date, time }, index) => ( -
- {index >= 1 ? : ''} - - - {info} - clickHandler('infoDetail')} - > - Info Detail - - - - {date} - {time} - + + {data ? ( + data.map(({ info, date, time }, index) => ( +
+ {index >= 1 ? : ''} + + + {info} + clickHandler('infoDetail')} + > + Info Detail + -
- )) - : ''} + + {date} + {time} + +
+
+ )) + ) : ( + + No Notification + + )}
{isDialog === 'allNotification' && ( diff --git a/frontend/hospital-portal/.env.production b/frontend/hospital-portal/.env.production new file mode 100644 index 00000000..d2c817f0 --- /dev/null +++ b/frontend/hospital-portal/.env.production @@ -0,0 +1 @@ +VITE_API_URL="https://primecenter-api.linksehat.com/api/v1/hospitalportal" diff --git a/public/hospital-portal/image/ic_booking.svg b/public/hospital-portal/image/ic_booking.svg new file mode 100644 index 00000000..98447069 --- /dev/null +++ b/public/hospital-portal/image/ic_booking.svg @@ -0,0 +1 @@ + diff --git a/public/hospital-portal/image/ic_dashboard.svg b/public/hospital-portal/image/ic_dashboard.svg new file mode 100644 index 00000000..b069d30f --- /dev/null +++ b/public/hospital-portal/image/ic_dashboard.svg @@ -0,0 +1 @@ + diff --git a/public/hospital-portal/image/ic_flag_en.svg b/public/hospital-portal/image/ic_flag_en.svg new file mode 100644 index 00000000..34819ecf --- /dev/null +++ b/public/hospital-portal/image/ic_flag_en.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/public/hospital-portal/image/ic_flag_id.svg b/public/hospital-portal/image/ic_flag_id.svg new file mode 100644 index 00000000..8630f734 --- /dev/null +++ b/public/hospital-portal/image/ic_flag_id.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/hospital-portal/lang/en-US.json b/public/hospital-portal/lang/en-US.json index baef7538..1ca8f253 100644 --- a/public/hospital-portal/lang/en-US.json +++ b/public/hospital-portal/lang/en-US.json @@ -1,15 +1,38 @@ { - "greeting": "Hello", - "buttonText": "Click Me", - "infoLogin": "Enter the registered account", - "txtLogin1" : "Sign in to Hospital Portal", - "txtLogin2" : "Enter your details below", - "txtCardSearchMember1" : "Guarantee Submission", - "txtCardSearchMember2" : "Find Member", - "txtCardSearchMember3" : "Date Birth", - "txtCardSearchMember4" : "Member ID", - "txtCardSearchMember5" : "Member", - "txtDialogMember1" : "Benefit Summary", - "txtDialogMember2" : "Request LOG", - "txtDialogMember3" : "Member Detail" + "greeting": "Hello", + "buttonText": "Click Me", + "infoLogin": "Enter the registered account", + "txtLogin1": "Sign in to Hospital Portal", + "txtLogin2": "Enter your details below", + "txtCardSearchMember1": "Membership Query", + "txtCardSearchMember2": "Search Member", + "txtCardSearchMember3": "Date of Birth", + "txtCardSearchMember4": "Member ID", + "txtCardSearchMember5": "Member", + "txtDialogMember1": "Services", + "txtDialogMember2": "Request LOG", + "txtDialogMember3": "Detail", + "txtDialogMember4": "Please select services", + "txtDialogMember5": "Submission Date", + "txtDateBirth": "Date of Birth", + "txtGender": "Gender", + "txtMaritalStatus": "Marital Status", + "txtLanguage": "Language", + "txtRelationship": "Relationship", + "txtRequestDate": "Request Date", + "txtMemberID": "Member ID", + "txtClaimCode": "Claim Code", + "txtRequestCode": "Request Code", + "txtName": "Name", + "txtStatus": "Status", + "txtSearch": "Search Name or Member ID...", + "txtAll": "All", + "txtSubmissionDate": "Submission Date", + "txtDataNotFound": "Data Not Found", + "txtConditionDocument": "Condition Document", + "txtDiagnosisDokument": "Diagnosis Dokument", + "txtSupportingResultDocument": "Supporting Result Document", + "txtAddResult": "Add Result", + "txtServiceType": "Service Type", + "txtAdditionalDocuments": "Additional Documents" } diff --git a/public/hospital-portal/lang/id-ID.json b/public/hospital-portal/lang/id-ID.json index 41db3e54..7abbb604 100644 --- a/public/hospital-portal/lang/id-ID.json +++ b/public/hospital-portal/lang/id-ID.json @@ -1,15 +1,38 @@ { - "greeting": "Halo", - "buttonText": "Klik Saya", - "infoLogin": "Masukan akun yang telah terdaftar", - "txtLogin1" : "Masuk ke Hospital Portal", - "txtLogin2" : "Masukkan detail Anda di bawah ini", - "txtCardSearchMember1" : "Pengajuan Jaminan", - "txtCardSearchMember2" : "Cari Anggota", - "txtCardSearchMember3" : "Tanggal Lahir", - "txtCardSearchMember4" : "Member ID", - "txtCardSearchMember5" : "Member", - "txtDialogMember1" : "Ringkasan Manfaat", - "txtDialogMember2" : "Request LOG", - "txtDialogMember3" : "Detail Member" + "greeting": "Halo", + "buttonText": "Klik Saya", + "infoLogin": "Masukan akun yang telah terdaftar", + "txtLogin1": "Masuk ke Hospital Portal", + "txtLogin2": "Masukkan detail Anda di bawah ini", + "txtCardSearchMember1": "Pengajuan Jaminan", + "txtCardSearchMember2": "Cari Anggota", + "txtCardSearchMember3": "Tanggal Lahir", + "txtCardSearchMember4": "Member ID", + "txtCardSearchMember5": "Member", + "txtDialogMember1": "Layanan", + "txtDialogMember2": "Request LOG", + "txtDialogMember3": "Detail", + "txtDialogMember4": "Mohon pilih layanan", + "txtDialogMember5": "Tanggal Pengajuan", + "txtDateBirth": "Tanggal Lahir", + "txtGender": "Jenis Kelamin", + "txtMaritalStatus": "Status Perkawinan", + "txtLanguage": "Bahasa", + "txtRelationship": "Hubungan", + "txtRequestDate": "Tanggal Permintaan", + "txtMemberID": "ID Anggota", + "txtClaimCode": "Kode Klaim", + "txtRequestCode": "Kode Pengajuan", + "txtName": "Nama", + "txtStatus": "Status", + "txtSearch": "Cari Nama atau ID Anggota...", + "txtAll": "Semua", + "txtSubmissionDate": "Tanggal Pengajuan", + "txtDataNotFound": "Data Tidak Ditemukan", + "txtConditionDocument": "Dokumen Kondisi", + "txtDiagnosisDokument": "Dokumen Diagnosa", + "txtSupportingResultDocument": "Dokumen Hasil Pendukung", + "txtAddResult": "Tambah Hasil", + "txtServiceType": "Tipe Layanan", + "txtAdditionalDocuments": "Dokumen Tambahan" } diff --git a/resources/views/pdf/ecard.blade.php b/resources/views/pdf/ecard.blade.php index 99c30f7e..0df3b388 100644 --- a/resources/views/pdf/ecard.blade.php +++ b/resources/views/pdf/ecard.blade.php @@ -1,18 +1,20 @@ + - + {{-- --}} + -



-
-
- Member Name -

{{ $member->fullName }}

+



+
+
+ Member Name +

{{ $member->fullName }}

- Member ID -

{{ $member->member_id }}

+ Member ID +

{{ $member->member_id }}

- Policy Holder -

{{ $member->currentCorporate->name }}

+ Policy Holder +

{{ $member->currentCorporate->name }}

- Policy Number -

{{ $member->currentPolicy->code }}

+ Policy Number +

{{ $member->currentPolicy->code }}

- Date of Birth -

{{ $member->birthDateeCard }}

+ Date of Birth +

{{ $member->birthDateeCard }}

- Gender -

{{ $member->gender }}

+ Gender +

{{ $member->gender }}

- Start Date -

{{ $member->startDate }}

+ Start Date +

{{ $member->startDate }}

-
- -
- - - - - - 08114123962 - - - Valid until: {{ $member->endDate }} +
+
- + + + + + + 08114123962 + + + Valid until: {{ $member->endDate }}
- +
+ + - \ No newline at end of file + + diff --git a/resources/views/pdf/req_log_page_1.blade.php b/resources/views/pdf/req_log_page_1.blade.php index dbd2ba2c..8abf7830 100644 --- a/resources/views/pdf/req_log_page_1.blade.php +++ b/resources/views/pdf/req_log_page_1.blade.php @@ -1,5 +1,6 @@ + @@ -32,8 +33,10 @@ margin: 0; padding: 0; height: 100vh; - background-color: #ffffff; /* Ganti dengan warna latar belakang yang diinginkan */ + background-color: #ffffff; + /* Ganti dengan warna latar belakang yang diinginkan */ } + .content { padding: 20px; text-align: left; @@ -41,9 +44,12 @@ .content img { width: 25%; - max-width: 600px; /* batasan lebar maksimum gambar */ - margin-top: 20px; /* jarak antara segitiga dan gambar */ + max-width: 600px; + /* batasan lebar maksimum gambar */ + margin-top: 20px; + /* jarak antara segitiga dan gambar */ } + .corner-text { font-family: 'Calibri', sans-serif; font-size: 14px; @@ -60,11 +66,13 @@ bottom: 10px; right: 10px; } + .bottom-left { bottom: 10px; left: 10px; text-align: left; } + .title-container { display: flex; flex-direction: column; @@ -84,6 +92,7 @@ font-family: 'Calibri', sans-serif; font-size: 12px; } + .claim-info { font-family: 'Calibri', sans-serif; font-size: 14px; @@ -98,14 +107,18 @@ margin-top: 10px; } - table, th, td { + table, + th, + td { /* border: 1px solid #008C8C; */ } - th, td { + th, + td { padding: 4px; text-align: left; } + .hot-line { font-family: 'Calibri', sans-serif; background-color: #048B8C; @@ -116,11 +129,13 @@ padding: 2px; color: #ffffff; } + .txt-tindakan { font-family: 'Calibri', sans-serif; margin-top: 10px; font-size: 14px; } + .txt-pernyataan { font-family: 'Calibri', sans-serif; margin-top: 40px; @@ -128,6 +143,7 @@ } +
@@ -135,7 +151,8 @@
The Future Of Healthcare At Your Fingertips
- +
SURAT JAMINAN @@ -148,10 +165,11 @@ No. Klaim : - {{ wordwrap($request_logs->code,15,"
\n")}} + {{ wordwrap($request_logs->code, 15, "
\n") }} Tanggal : - {{ \Carbon\Carbon::parse($request_logs->submission_date)->format('d M Y') }} + {{ \Carbon\Carbon::parse($request_logs->submission_date)->format('d M Y') }} + Kepada @@ -166,7 +184,8 @@ Call Center LinkSehat : 08114123962
- Link Sehat bertindak mewakili perusahaan asuransi/penanggung untuk mengeluarkan Surat Jaminan Awal untuk peserta dibawah ini : + LinkSehat bertindak mewakili perusahaan asuransi/penanggung untuk mengeluarkan Surat Jaminan Awal untuk + peserta dibawah ini :
@@ -202,7 +221,8 @@ --> - + @@ -210,7 +230,7 @@ + --> @@ -224,7 +244,8 @@ --> - + @@ -262,7 +283,8 @@ -->
{{ $dataMember->no_polis }}Tipe :{{ $dataMember->limit_rules == '999999999' ? 'As Charge' : 'Max Amount, Rp '.number_format($dataMember->limit_rules, 2, ',', '.') }}{{ $dataMember->limit_rules == '999999999' ? 'As Charge' : 'Max Amount, Rp ' . number_format($dataMember->limit_rules, 2, ',', '.') }} +
Jenis Kelamin{{ $dataMember->gender == 'male' ? 'Laki-Laki' : 'Perempuan' }} {{ $dataMember->limit_rules == '999999999' ? 'As Charge' : 'Max Amount, Rp ' . number_format($dataMember->limit_rules, 2, ',', '.') }}Status Polis : {{ $dataMember->status_polis == 'active' ? 'Aktif' : 'Tidak Aktif' }}{{ $dataMember->status_polis == 'active' ? 'Aktif' : 'Tidak Aktif' }}Tanggal Mulai/Akhir :{{ \Carbon\Carbon::parse($dataMember->mulai)->format('d M Y') }} - {{ \Carbon\Carbon::parse($dataMember->akhir)->format('d M Y') }}{{ \Carbon\Carbon::parse($dataMember->mulai)->format('d M Y') }} - + {{ \Carbon\Carbon::parse($dataMember->akhir)->format('d M Y') }}
Identitas Peserta
- Surat Jaminan ini dinyatakan berlaku apabila disertai surat jaminan akhir dengan nominal yang tertera pada akhir perawatan. + Surat Jaminan ini dinyatakan berlaku apabila disertai surat jaminan akhir dengan nominal yang tertera pada + akhir perawatan.
The Future Of Healthcare At Your Fingertips @@ -276,4 +298,5 @@
- \ No newline at end of file + +