fix cleint portal employee-data, dashboard, hide notification

This commit is contained in:
Muhammad Fajar
2023-12-31 23:44:43 +07:00
parent ae884f8cd0
commit 96034d069a
26 changed files with 684 additions and 804 deletions

View File

@@ -18,7 +18,7 @@ class CorporatePolicyController extends Controller
public function index($corporate_id) public function index($corporate_id)
{ {
$currentCorporate = Auth::user()->managedCorporates() $currentCorporate = Auth::user()->managedCorporates()
->with(['currentPolicy', 'employees']) ->with(['currentPolicy'])
->find($corporate_id); ->find($corporate_id);
$data = LimitResources::make($currentCorporate); $data = LimitResources::make($currentCorporate);

View File

@@ -20,7 +20,7 @@ class TopUpController extends Controller
{ {
$data = Auth::user() $data = Auth::user()
->managedCorporates() ->managedCorporates()
->with(['currentPolicy', 'employees']) ->with(['currentPolicy'])
->withCount(['employees', 'claims' => function ($query) { ->withCount(['employees', 'claims' => function ($query) {
$query->where('claims.status', 'paid'); $query->where('claims.status', 'paid');
}]) }])
@@ -36,20 +36,20 @@ class TopUpController extends Controller
*/ */
public function store(Request $request, $corporate_id) public function store(Request $request, $corporate_id)
{ {
$data = $request->validate([ $data = $request->validate([
'topup' => 'required|numeric', 'topup' => 'required|numeric',
]); ]);
$corporatePolicy = CorporatePolicy::query()->where('corporate_id',$corporate_id)->firstOrFail(); $corporatePolicy = CorporatePolicy::query()->where('corporate_id', $corporate_id)->firstOrFail();
if (!$corporatePolicy) { 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->total_premi += $data['topup'];
$corporatePolicy -> save(); $corporatePolicy->save();
return response () -> json (['message' => 'Amount added to total_premi successfully'], 200); return response()->json(['message' => 'Amount added to total_premi successfully'], 200);
} }
/** /**

View File

@@ -1,4 +1,5 @@
<?php <?php
namespace Modules\Client\Transformers\Dashboard; namespace Modules\Client\Transformers\Dashboard;
use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\Json\JsonResource;
@@ -18,7 +19,7 @@ class MemberEmployeeDataResources extends JsonResource
'personId' => $this->person_id, 'personId' => $this->person_id,
'memberId' => $this->member_id, 'memberId' => $this->member_id,
'fullName' => $this->full_name, 'fullName' => $this->full_name,
'service' => $this->service_code, // 'service' => $this->service_code,
'start_date' => $this->start_date, 'start_date' => $this->start_date,
'end_date' => $this->end_date, 'end_date' => $this->end_date,
'status' => $this->active, 'status' => $this->active,

View File

@@ -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 'percentage' => (!empty($this->currentPlan->limit_rules ?? 0)) ? (($this->claims_sum_total_claim / $this->currentPlan->limit_rules) * 100) : 0
], ],
'status' => $this->active, 'status' => $this->active,
'service_type' => $this->currentPlans, // 'service_type' => $this->currentPlans,
]; ];
} }
} }

View File

@@ -5,7 +5,6 @@ namespace Modules\Internal\Http\Controllers\Api;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\User; use App\Models\User;
use Crypt; use Crypt;
use Error;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
@@ -91,7 +90,7 @@ class AuthController extends Controller
Event(new ForgetPassword($user)); Event(new ForgetPassword($user));
// Mail::to($user->email)->send(new SendVerifyEmail($user)); Mail::to($user->email)->send(new SendVerifyEmail($user));
return response()->json($user); return response()->json($user);
} }

View File

@@ -179,7 +179,7 @@ class MemberEnrollmentService
"ingestion_code" => "Ingestion Code", "ingestion_code" => "Ingestion Code",
"ingestion_status" => "Ingestion Status", "ingestion_status" => "Ingestion Status",
]; ];
public $result_doc_headers = [ public $result_doc_headers = [
"Record Mode", "Record Mode",
"Record Type", "Record Type",
@@ -357,7 +357,7 @@ class MemberEnrollmentService
'activation_date' => 'Activation Date', 'activation_date' => 'Activation Date',
'date_of_birth' => 'Date of Birth', 'date_of_birth' => 'Date of Birth',
'date_terminated' => 'Date Terminated', 'date_terminated' => 'Date Terminated',
]; ];
if (empty($row['record_type'])) { if (empty($row['record_type'])) {
@@ -372,6 +372,10 @@ class MemberEnrollmentService
throw new ImportRowException(__('enrollment.MEMBER_ID_REQUIRED'), 0, null, $row); 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 ($row['record_type'] == 'P') {
if (!empty($row['principal_id'])) { if (!empty($row['principal_id'])) {
throw new ImportRowException(__('enrollment.PRINCIPAL_ID_NOT_REQUIRED'), 0, null, $row); throw new ImportRowException(__('enrollment.PRINCIPAL_ID_NOT_REQUIRED'), 0, null, $row);
@@ -391,22 +395,22 @@ class MemberEnrollmentService
->first(); ->first();
if(empty($member)){ 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 { } else {
if ($member['record_type'] != 'P'){ // if ($member['record_type'] != 'P'){
throw new ImportRowException(__('enrollment.PRINCIPAL_ID_NOT_SAME_MEMBER_ID'), 0, null, $row); // throw new ImportRowException(__('enrollment.PRINCIPAL_ID_NOT_SAME_MEMBER_ID'), 0, null, $row);
} // }
} }
if (empty($row['principal_id'])) { if (empty($row['principal_id'])) {
throw new ImportRowException(__('enrollment.PRINCIPAL_ID_REQUIRED'), 0, null, $row); throw new ImportRowException(__('enrollment.PRINCIPAL_ID_REQUIRED'), 0, null, $row);
} }
if (empty($row['relationship_with_principal'])){ // if (empty($row['relationship_with_principal'])){
throw new ImportRowException(__('enrollment.RELATIONSHIP_WITH_PRICIPAL_REQUIRED'), 0, null, $row); // 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'])){ // 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); // 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); // throw new ImportRowException(__('enrollment.BRANCH_CODE_NOT_REQUIRED'), 0, null, $row);
// } // }
if (!empty($row['language']) && !in_array($row['language'], ['M', 'E', 'C', 'I', 'O'])) { // if (!empty($row['language']) && !in_array($row['language'], ['M', 'E', 'C', 'I', 'O'])) {
throw new ImportRowException(__('enrollment.INVALID_LANGUAGE'), 0, null, $row); // 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'])) { // 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); // throw new ImportRowException(__('enrollment.INVALID_TYPE_OF_WORK'), 0, null, $row);
} // }
if (!empty($row['race']) && !in_array($row['race'], ['M', 'C', 'I', 'O'])) { // if (!empty($row['race']) && !in_array($row['race'], ['M', 'C', 'I', 'O'])) {
throw new ImportRowException(__('enrollment.INVALID_RACE'), 0, null, $row); // throw new ImportRowException(__('enrollment.INVALID_RACE'), 0, null, $row);
} // }
if (empty($row['policy_number'])) { if (empty($row['policy_number'])) {
throw new ImportRowException(__('enrollment.POLICY_NUMBER_REQUIRED'), 0, null, $row); throw new ImportRowException(__('enrollment.POLICY_NUMBER_REQUIRED'), 0, null, $row);
} }
if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) { // if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) {
throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row); // throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row);
} // }
// TODO EFFECTIVE DATE VALIDATION // TODO EFFECTIVE DATE VALIDATION
if (empty($row['member_effective_date'])) { if (empty($row['member_effective_date'])) {
throw new ImportRowException(__('enrollment.MEMBER_EFFECTIVE_REQUIRED'), 0, null, $row); throw new ImportRowException(__('enrollment.MEMBER_EFFECTIVE_REQUIRED'), 0, null, $row);
@@ -458,7 +462,7 @@ class MemberEnrollmentService
// 'title' => $title['member_expiry_date'] // 'title' => $title['member_expiry_date']
// ]), 0, null, $row); // ]), 0, null, $row);
// } // }
// TODO EFFECTIVE DATE VALIDATION // TODO EFFECTIVE DATE VALIDATION
// if (empty($row['activation_date'])) { // if (empty($row['activation_date'])) {
// throw new ImportRowException(__('enrollment.ACTIVATION_DATE_REQUIRED'), 0, null, $row); // throw new ImportRowException(__('enrollment.ACTIVATION_DATE_REQUIRED'), 0, null, $row);
@@ -473,35 +477,35 @@ class MemberEnrollmentService
// TODO FKTP VALIDATION // TODO FKTP VALIDATION
// TODO FKRTL VALIDATION // TODO FKRTL VALIDATION
if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) { // if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) {
throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row); // throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row);
} // }
if (empty($row['name'])) { if (empty($row['name'])) {
throw new ImportRowException(__('enrollment.NAME_REQUIRED'), 0, null, $row); throw new ImportRowException(__('enrollment.NAME_REQUIRED'), 0, null, $row);
} }
if (!Helper::validatePhoneNumber($row['telephone_mobile'])){ // if (!Helper::validatePhoneNumber($row['telephone_mobile'])){
throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row); // throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row);
} // }
if ( // if (
!empty($row['telephone_mobile']) // !empty($row['telephone_mobile'])
&& !(substr($row['telephone_mobile'], 0, 4) == '+628' || substr($row['telephone_mobile'], 0, 3) == '628') // && !(substr($row['telephone_mobile'], 0, 4) == '+628' || substr($row['telephone_mobile'], 0, 3) == '628')
) { // ) {
throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row); // throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row);
} // }
if ( // if (
!empty($row['email']) // !empty($row['email'])
&& !filter_var($row['email'], FILTER_VALIDATE_EMAIL) // && !filter_var($row['email'], FILTER_VALIDATE_EMAIL)
) { // ) {
throw new ImportRowException(__('enrollment.EMAIL_INVALID'), 0, null, $row); // throw new ImportRowException(__('enrollment.EMAIL_INVALID'), 0, null, $row);
} // }
if (empty($row['date_of_birth'])) { // if (empty($row['date_of_birth'])) {
throw new ImportRowException(__('enrollment.DATE_OF_BIRTH_REQUIRED'), 0, null, $row); // throw new ImportRowException(__('enrollment.DATE_OF_BIRTH_REQUIRED'), 0, null, $row);
} // }
// if(!$this->validateDate($row['date_of_birth'])){ // if(!$this->validateDate($row['date_of_birth'])){
// throw new ImportRowException(__('enrollment.INVALID_DATE', [ // throw new ImportRowException(__('enrollment.INVALID_DATE', [
// 'title' => $title['date_of_birth'] // 'title' => $title['date_of_birth']
@@ -520,16 +524,16 @@ class MemberEnrollmentService
// } // }
// TODO DOB FORMAT VALIDATION // TODO DOB FORMAT VALIDATION
if (empty($row['sex'])) { // if (empty($row['sex'])) {
throw new ImportRowException(__('enrollment.SEX_REQUIRED'), 0, null, $row); // throw new ImportRowException(__('enrollment.SEX_REQUIRED'), 0, null, $row);
} // }
if (!in_array($row['sex'], ['F', 'M'])){ // if (!in_array($row['sex'], ['F', 'M'])){
throw new ImportRowException(__('enrollment.SEX_CODE_NOT_VALID'), 0, null, $row); // throw new ImportRowException(__('enrollment.SEX_CODE_NOT_VALID'), 0, null, $row);
} // }
} }
public function handleImportRow(Corporate $corporate, $row) public function handleImportRow(Corporate $corporate, $row)
{ {
try { try {
@@ -546,7 +550,7 @@ class MemberEnrollmentService
"member_id" => $row['member_id'] ?? null, "member_id" => $row['member_id'] ?? null,
"payor_id" => $row['payor_id'] ?? null, "payor_id" => $row['payor_id'] ?? null,
"nik" => $row['nik'] ?? 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']), "gender" => Helper::genderNormalization($row['sex']),
"language" => $row['language'] ?? null, "language" => $row['language'] ?? null,
"race" => $row['race'] ?? null, "race" => $row['race'] ?? null,
@@ -588,6 +592,8 @@ class MemberEnrollmentService
"telephone_res" => $row['telephone_res'] ?? null, "telephone_res" => $row['telephone_res'] ?? null,
"telephone_office" => $row['telephone_office'] ?? null, "telephone_office" => $row['telephone_office'] ?? null,
"suspended" => $row['member_suspended'] ?? null, "suspended" => $row['member_suspended'] ?? null,
"active" => $row['employment_status'] == 'INACTIVE' ? 0 : 1
]; ];
// $this->validateRow($row); // $this->validateRow($row);
if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->code != $row['policy_number']) { if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->code != $row['policy_number']) {
@@ -595,101 +601,101 @@ class MemberEnrollmentService
'policy_id' => $row['policy_number'] 'policy_id' => $row['policy_number']
]), 0, null, $row); ]), 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'])); $member_effective_date = date("Y-m-d", strtotime($row['member_effective_date']));
$date_terminated = date("Y-m-d", strtotime($row['date_terminated'])); $date_terminated = date("Y-m-d", strtotime($row['date_terminated']));
if(!empty($row['activation_date'])){ if(!empty($row['activation_date'])){
$activation_date = date("Y-m-d", strtotime($row['activation_date'])); // $activation_date = date("Y-m-d", strtotime($row['activation_date']));
if (($activation_date == $date_terminated) && ($activation_date == $member_effective_date)) { // if (($activation_date == $date_terminated) && ($activation_date == $member_effective_date)) {
throw new ImportRowException(__('enrollment.MORE_THAN', [ // throw new ImportRowException(__('enrollment.MORE_THAN', [
'date_param' => 'Activation Date', // 'date_param' => 'Activation Date',
'date' => $activation_date, // 'date' => $activation_date,
'date_param2' => 'Member Effective Date', // 'date_param2' => 'Member Effective Date',
'start' => $activation_date // 'start' => $activation_date
]), 0, null, $row); // ]), 0, null, $row);
} // }
} }
if (!empty($row['date_terminated'])){ if (!empty($row['date_terminated'])){
$date_terminated = date("Y-m-d", strtotime($row['date_terminated'])); // $date_terminated = date("Y-m-d", strtotime($row['date_terminated']));
if($date_terminated){ // if($date_terminated){
if ($date_terminated <= $member_effective_date && ($date_terminated != $member_effective_date)) { // if ($date_terminated <= $member_effective_date && ($date_terminated != $member_effective_date)) {
throw new ImportRowException(__('enrollment.MORE_THAN', [ // throw new ImportRowException(__('enrollment.MORE_THAN', [
'date_param' => 'Date Terminated Date', // 'date_param' => 'Date Terminated Date',
'date' => $date_terminated, // 'date' => $date_terminated,
'date_param2' => 'Member Effective Date', // 'date_param2' => 'Member Effective Date',
'start' => $member_effective_date // 'start' => $member_effective_date
]), 0, null, $row); // ]), 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'])); $members_expire_date = date("Y-m-d", strtotime($row['member_expiry_date']));
// validasi member expried date must less date member effective // 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']));
$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)) { // if ($member_effective_date <= $corporate->currentPolicy->start && ($member_effective_date != $corporate->currentPolicy->start)) {
throw new ImportRowException(__('enrollment.MORE_THAN', [ // throw new ImportRowException(__('enrollment.MORE_THAN', [
'date_param' => 'Member Effective Date', // 'date_param' => 'Member Effective Date',
'date' => $member_effective_date, // 'date' => $member_effective_date,
'date_param2' => 'Start Period Date', // 'date_param2' => 'Start Period Date',
'start' => $corporate->currentPolicy->start // 'start' => $corporate->currentPolicy->start
]), 0, null, $row); // ]), 0, null, $row);
} // }
if ($member_effective_date >= $corporate->currentPolicy->end && ($member_effective_date != $corporate->currentPolicy->end)) { // if ($member_effective_date >= $corporate->currentPolicy->end && ($member_effective_date != $corporate->currentPolicy->end)) {
throw new ImportRowException(__('enrollment.LESS_THAN', [ // throw new ImportRowException(__('enrollment.LESS_THAN', [
'date_param' => 'Member Effective Date', // 'date_param' => 'Member Effective Date',
'date' => $member_effective_date, // 'date' => $member_effective_date,
'date_param2' => 'End Period Date', // 'date_param2' => 'End Period Date',
'end' => $corporate->currentPolicy->end // 'end' => $corporate->currentPolicy->end
]), 0, null, $row); // ]), 0, null, $row);
} // }
if ($member_effective_date >= $corporate->currentPolicy->end && ($member_effective_date != $corporate->currentPolicy->end)) { // if ($member_effective_date >= $corporate->currentPolicy->end && ($member_effective_date != $corporate->currentPolicy->end)) {
throw new ImportRowException(__('enrollment.LESS_THAN', [ // throw new ImportRowException(__('enrollment.LESS_THAN', [
'date_param' => 'Member Effective Date', // 'date_param' => 'Member Effective Date',
'date' => $member_effective_date, // 'date' => $member_effective_date,
'date_param2' => 'End Period Date', // 'date_param2' => 'End Period Date',
'end' => $corporate->currentPolicy->end // 'end' => $corporate->currentPolicy->end
]), 0, null, $row); // ]), 0, null, $row);
} // }
if ($members_expire_date <= $corporate->currentPolicy->start && ($members_expire_date != $corporate->currentPolicy->start) ) { // if ($members_expire_date <= $corporate->currentPolicy->start && ($members_expire_date != $corporate->currentPolicy->start) ) {
throw new ImportRowException(__('enrollment.MORE_THAN', [ // throw new ImportRowException(__('enrollment.MORE_THAN', [
'date_param' => 'Member Expired Date', // 'date_param' => 'Member Expired Date',
'date' => $members_expire_date, // 'date' => $members_expire_date,
'date_param2' => 'Start Period Date', // 'date_param2' => 'Start Period Date',
'start' => $corporate->currentPolicy->start // 'start' => $corporate->currentPolicy->start
]), 0, null, $row); // ]), 0, null, $row);
} // }
if ($members_expire_date >= $corporate->currentPolicy->end && ($members_expire_date != $corporate->currentPolicy->end)) { // if ($members_expire_date >= $corporate->currentPolicy->end && ($members_expire_date != $corporate->currentPolicy->end)) {
throw new ImportRowException(__('enrollment.LESS_THAN', [ // throw new ImportRowException(__('enrollment.LESS_THAN', [
'date_param' => 'Member Expired Date', // 'date_param' => 'Member Expired Date',
'date' => $members_expire_date, // 'date' => $members_expire_date,
'date_param2' => 'END Period Date', // 'date_param2' => 'END Period Date',
'end' => $corporate->currentPolicy->end // 'end' => $corporate->currentPolicy->end
]), 0, null, $row); // ]), 0, null, $row);
} // }
if ($members_expire_date <= $member_effective_date && ($members_expire_date != $member_effective_date)) { // if ($members_expire_date <= $member_effective_date && ($members_expire_date != $member_effective_date)) {
throw new ImportRowException(__('enrollment.MORE_THAN', [ // throw new ImportRowException(__('enrollment.MORE_THAN', [
'date_param' => 'Member Expired Date', // 'date_param' => 'Member Expired Date',
'date' => $members_expire_date, // 'date' => $members_expire_date,
'date_param2' => 'Member Effective Date', // 'date_param2' => 'Member Effective Date',
'start' => $member_effective_date // 'start' => $member_effective_date
]), 0, null, $row); // ]), 0, null, $row);
} // }
if($corporate->code != $row['corporate_id']){ if($corporate->code != $row['corporate_id']){
throw new ImportRowException(__('enrollment.CORPORATE_CODE_NOT_MATCH', [ throw new ImportRowException(__('enrollment.CORPORATE_CODE_NOT_MATCH', [
'corporate_id' => $row['corporate_id'] 'corporate_id' => $row['corporate_id']
]), 0, null, $row); ]), 0, null, $row);
} }
switch ($row['record_mode']) { switch ($row['record_mode']) {
case "1": // New Member case "1": // New Member
$this->validateRow($row); $this->validateRow($row);
@@ -707,8 +713,8 @@ class MemberEnrollmentService
], ],
[ [
'name' => $row['name'] ?? null, 'name' => $row['name'] ?? null,
// 'birth_date' => $this->dateParser($row['date_of_birth']), 'birth_date' => $this->dateParser($row['date_of_birth']),
'birth_date' => $row['date_of_birth'], // 'birth_date' => $row['date_of_birth'],
'gender' => Helper::genderNormalization($row['sex']), 'gender' => Helper::genderNormalization($row['sex']),
'language' => $row['language'] ?? null, 'language' => $row['language'] ?? null,
'race' => $row['race'] ?? null, 'race' => $row['race'] ?? null,
@@ -758,22 +764,23 @@ class MemberEnrollmentService
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row); throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
} }
} }
try { try {
DB::beginTransaction(); DB::beginTransaction();
$member->fill($member_data); $member->fill($member_data);
if ($member->save()) { if ($member->save()) {
$person = Person::create([ $person = Person::create([
'name' => $row['name'], 'name' => $row['name'],
'birth_date' => $row['date_of_birth'], 'birth_date' => $this->dateParser($row['date_of_birth']) ?? null,
'gender' => Helper::genderNormalization($row['sex']), 'gender' => Helper::genderNormalization($row['sex']) ?? '-',
'language' => $row['language'] ?? null, 'language' => $row['language'] ?? null,
'race' => $row['race'] ?? null, 'race' => $row['race'] ?? null,
'phone' => $row['telephone_mobile'], 'phone' => $row['telephone_mobile'],
]); ]);
$member->person_id = $person->id; $member->person_id = $person->id;
$member->save();
$memberPolicy = new MemberPolicy(); $memberPolicy = new MemberPolicy();
$memberPolicy->fill([ $memberPolicy->fill([
'member_id' => $member->member_id, 'member_id' => $member->member_id,
@@ -782,7 +789,7 @@ class MemberEnrollmentService
'end' => $this->dateParser($row['member_expiry_date']), 'end' => $this->dateParser($row['member_expiry_date']),
'status' => 'active' 'status' => 'active'
]); ]);
$memberPolicy->save(); $memberPolicy->save();
if (!empty($row['division_name'])) { if (!empty($row['division_name'])) {
@@ -807,7 +814,7 @@ class MemberEnrollmentService
'status' => $row['employment_status'] 'status' => $row['employment_status']
]); ]);
// Bisa disini penyebab data dobel // Bisa disini penyebab data dobel
$plans = explode(",",$row['plan_id']); $plans = explode(",",$row['plan_id']);
if (count($plans) > 0) { if (count($plans) > 0) {
foreach($plans as $d){ foreach($plans as $d){
@@ -840,7 +847,7 @@ class MemberEnrollmentService
'end' => $this->dateParser($row['member_expiry_date']), 'end' => $this->dateParser($row['member_expiry_date']),
]); ]);
} }
} }
DB::commit(); DB::commit();
} catch (\Exception $e) { } catch (\Exception $e) {
@@ -849,12 +856,12 @@ class MemberEnrollmentService
} }
break; break;
case "2": // Member Information Update (Without Replacement Card) case "2": // Member Information Update (Without Replacement Card)
// $this->validateRow($row); // $this->validateRow($row);
$member = Member::query() $member = Member::query()
->where('member_id', $row['member_id']) ->where('member_id', $row['member_id'])
->first(); ->first();
// // Validate If Exist Member // // Validate If Exist Member
if (!$member) { if (!$member) {
throw new ImportRowException(__('enrollment.MEMBER_NOT_FOUND', [ throw new ImportRowException(__('enrollment.MEMBER_NOT_FOUND', [
@@ -862,7 +869,7 @@ class MemberEnrollmentService
'policy_id' => $row['policy_number'] 'policy_id' => $row['policy_number']
]), 0, null, $row); ]), 0, null, $row);
} }
$person = Person::updateOrCreate( $person = Person::updateOrCreate(
[ [
@@ -870,15 +877,14 @@ class MemberEnrollmentService
], ],
[ [
'name' => $row['name'] ?? null, 'name' => $row['name'] ?? null,
// 'birth_date' => $this->dateParser($row['date_of_birth']), 'birth_date' => $this->dateParser($row['date_of_birth']),
'birth_date' => $row['date_of_birth'],
'gender' => Helper::genderPerson($row['sex']), 'gender' => Helper::genderPerson($row['sex']),
'language' => $row['language'] ?? null, 'language' => $row['language'] ?? null,
'race' => $row['race'] ?? null, 'race' => $row['race'] ?? null,
'phone' => $row['telephone_mobile'] 'phone' => $row['telephone_mobile']
] ]
); );
$member->person_id = $person->id; $member->person_id = $person->id;
$member->save(); $member->save();
try { try {
@@ -952,7 +958,7 @@ class MemberEnrollmentService
// 'end' => $this->dateParser($row['member_expiry_date']), // 'end' => $this->dateParser($row['member_expiry_date']),
// ]); // ]);
// } // }
// end update plan // end update plan
@@ -1024,14 +1030,15 @@ class MemberEnrollmentService
'dUpdateOn' => date('Y-m-d H:i:s'), 'dUpdateOn' => date('Y-m-d H:i:s'),
] ]
); );
$userLmsDetail = UserDetail::updateOrCreate( $userLmsDetail = UserDetail::updateOrCreate(
[ [
'nIDUser' => $nIDUser 'nIDUser' => $nIDUser
], ],
[ [
'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'), 'dCreateOn' => date('Y-m-d H:i:s'),
'sMartialStatus' => $sMartialStatus != 0 ? $sMartialStatus : null, 'sMartialStatus' => $sMartialStatus != 0 ? $sMartialStatus : null,
'nIDJenisKelamin' => $nIDJenisKelamin, 'nIDJenisKelamin' => $nIDJenisKelamin,
@@ -1059,7 +1066,7 @@ class MemberEnrollmentService
if (!$memberPolicy->member->isDirty()) { if (!$memberPolicy->member->isDirty()) {
throw new ImportRowException(__('enrollment.MEMBER_NO_CHANGE'), 0, null, $row); throw new ImportRowException(__('enrollment.MEMBER_NO_CHANGE'), 0, null, $row);
} }
$memberPolicy->member->save(); $memberPolicy->member->save();
$member->save(); $member->save();
// update informasi person // update informasi person
@@ -1205,7 +1212,7 @@ class MemberEnrollmentService
// if (empty($row["option_mode"])) { // if (empty($row["option_mode"])) {
// throw new ImportRowException(__('enrollment.OPTION_MODE_INVALID_FORMAT', [ // throw new ImportRowException(__('enrollment.OPTION_MODE_INVALID_FORMAT', [
// 'member_id' => $row['member_id'], // 'member_id' => $row['member_id'],
// 'policy_id' => $row['policy_number'] // 'policy_id' => $row['policy_number']
// ]), 0, null, $row); // ]), 0, null, $row);
// } // }
@@ -1218,7 +1225,7 @@ class MemberEnrollmentService
// // Validate // // Validate
// if ( !in_array($option_mode[0], ['P', 'D']) || empty($corp_code) || empty($policy_number) || empty($member_id) ) { // 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', [ // throw new ImportRowException(__('enrollment.OPTION_MODE_INVALID_FORMAT', [
// 'member_id' => $row['member_id'], // 'member_id' => $row['member_id'],
// 'policy_id' => $row['policy_number'] // 'policy_id' => $row['policy_number']
// ]), 0, null, $row); // ]), 0, null, $row);
// } // }
@@ -1280,7 +1287,7 @@ class MemberEnrollmentService
// $memberPolicy->member->record_type == $row['record_type'] // $memberPolicy->member->record_type == $row['record_type']
// ) { // ) {
// throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_PRINCIPAL_INVALID', [ // throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_PRINCIPAL_INVALID', [
// 'member_id' => $row['member_id'], // 'member_id' => $row['member_id'],
// 'policy_id' => $row['policy_number'] // 'policy_id' => $row['policy_number']
// ]), 0, null, $row); // ]), 0, null, $row);
// } // }
@@ -1293,7 +1300,7 @@ class MemberEnrollmentService
// $memberPolicy->member->payor_id == $row['payor_id'] // $memberPolicy->member->payor_id == $row['payor_id']
// ) { // ) {
// throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_DEPENDANT_INVALID', [ // throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_DEPENDANT_INVALID', [
// 'member_id' => $row['member_id'], // 'member_id' => $row['member_id'],
// 'policy_id' => $row['policy_number'] // 'policy_id' => $row['policy_number']
// ]), 0, null, $row); // ]), 0, null, $row);
// } // }
@@ -1533,10 +1540,10 @@ class MemberEnrollmentService
$value = $row_data[$this->doc_headers_to_field_map[$header]] ?? null; $value = $row_data[$this->doc_headers_to_field_map[$header]] ?? null;
if (is_string($value)) { if (is_string($value)) {
$cells[] = WriterEntityFactory::createCell($value); $cells[] = WriterEntityFactory::createCell($value);
} }
else if ($value instanceof DateTime) { else if ($value instanceof DateTime) {
$cells[] = WriterEntityFactory::createCell(Carbon::parse($value)->format('Ymd')); $cells[] = WriterEntityFactory::createCell(Carbon::parse($value)->format('Ymd'));
} }
else { else {
$cells[] = WriterEntityFactory::createCell($value); $cells[] = WriterEntityFactory::createCell($value);
} }
@@ -1549,7 +1556,7 @@ class MemberEnrollmentService
public function validateRangePeriode($dates){ public function validateRangePeriode($dates){
$date = date("Y-m-d", strtotime($dates)); $date = date("Y-m-d", strtotime($dates));
if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->start <= $date) { if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->start <= $date) {
} }
if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->end >= $date) { if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->end >= $date) {
dd($corporate->currentPolicy->end, $dates); dd($corporate->currentPolicy->end, $dates);

View File

@@ -13,17 +13,17 @@ use App\Models\Service;
class Helper class Helper
{ {
public static function genderNormalization($anyGenderCode) public static function genderNormalization($anyGenderCode = '-')
{ {
if ($anyGenderCode == 'M') { if ($anyGenderCode == 'M') {
return 'Male'; return 'male';
} else if ($anyGenderCode == 'F') { } else if ($anyGenderCode == 'F') {
return 'Female'; return 'female';
} else if ($anyGenderCode == 'O') { } else if ($anyGenderCode == 'O') {
return 'Others'; return 'others';
} else if ($anyGenderCode == 'U') { } else if ($anyGenderCode == 'U') {
return 'Unknown'; return 'unknown';
} else { } else {
return '-'; return '-';
} }
@@ -57,7 +57,8 @@ class Helper
} }
} }
public static function memberType($code){ public static function memberType($code)
{
if ($code == 'P') { if ($code == 'P') {
return 'Principal'; return 'Principal';
} else if ($code == 'D') { } else if ($code == 'D') {
@@ -67,30 +68,29 @@ class Helper
} }
} }
public static function relationWithPrincipal($code){ public static function relationWithPrincipal($code)
{
if ($code == 'H') { if ($code == 'H') {
return 'Husbund'; return 'Husbund';
} } else if ($code == 'W') {
else if ($code == 'W') {
return 'Wife'; return 'Wife';
} } else if ($code == 'S') {
else if ($code == 'S') {
return 'Son'; return 'Son';
} } else if ($code == 'D') {
else if ($code == 'D') {
return 'Daughter'; return 'Daughter';
} } else {
else {
'-'; '-';
} }
} }
public static function principalName($code){ public static function principalName($code)
{
$principalName = Member::where('member_id', $code)->get()->first(); $principalName = Member::where('member_id', $code)->get()->first();
return $principalName->name; return $principalName->name;
} }
public static function serviceName($code){ public static function serviceName($code)
{
$serviceName = Service::where('code', $code)->get()->first(); $serviceName = Service::where('code', $code)->get()->first();
return $serviceName->name; return $serviceName->name;
} }
@@ -241,10 +241,11 @@ class Helper
], $statusCode); ], $statusCode);
} }
public static function validatePhoneNumber($phoneNumber) { public static function validatePhoneNumber($phoneNumber)
{
// Menghapus semua karakter selain angka dan + // Menghapus semua karakter selain angka dan +
$cleanedNumber = preg_replace('/[^0-9+]/', '', $phoneNumber); $cleanedNumber = preg_replace('/[^0-9+]/', '', $phoneNumber);
// Memeriksa apakah nomor telepon hanya terdiri dari angka dan + // Memeriksa apakah nomor telepon hanya terdiri dari angka dan +
if ($cleanedNumber == $phoneNumber) { if ($cleanedNumber == $phoneNumber) {
// Nomor telepon valid // 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, ',', '.'); return "Rp " . number_format($angka, 0, ',', '.');
} }
public static function sPaymentMethod($id) { public static function sPaymentMethod($id)
{
$sPaymentMethod = [ $sPaymentMethod = [
1 => 'Pribadi', 1 => 'Pribadi',
2 => 'On-Site Payment', 2 => 'On-Site Payment',
@@ -268,17 +271,19 @@ class Helper
5 => 'Voucher', 5 => 'Voucher',
6 => 'ASO' 6 => 'ASO'
]; ];
return $sPaymentMethod[$id]; 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'); $convertedDate = Carbon::createFromFormat('d-m-Y', $date)->format('Y-m-d H:i:s');
return $convertedDate; return $convertedDate;
} }
public static function formatDateOnly($date){ public static function formatDateOnly($date)
{
// Membuat objek Carbon dengan tanggal asli dan zona waktu UTC // Membuat objek Carbon dengan tanggal asli dan zona waktu UTC
$carbonDate = Carbon::createFromFormat('Y-m-d\TH:i:s.u\Z', $date, 'UTC'); $carbonDate = Carbon::createFromFormat('Y-m-d\TH:i:s.u\Z', $date, 'UTC');
@@ -289,7 +294,8 @@ class Helper
return $convertedDate; return $convertedDate;
} }
public static function formatTimeOnly($date){ public static function formatTimeOnly($date)
{
// Membuat objek Carbon dengan tanggal asli dan zona waktu UTC // Membuat objek Carbon dengan tanggal asli dan zona waktu UTC
$carbonDate = Carbon::createFromFormat('Y-m-d\TH:i:s.u\Z', $date, '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::table('notifications')->insert($data);
DB::commit(); DB::commit();
return true; return true;
} } catch (\Exception $e) {
catch (\Exception $e) {
DB::rollback(); DB::rollback();
return $e->getMessage(); return $e->getMessage();
} }
@@ -320,28 +325,27 @@ class Helper
$mail = new PHPMailer(true); $mail = new PHPMailer(true);
try { try {
// Server settings // Server settings
$mail->isSMTP(); $mail->isSMTP();
$mail->Host = 'smtp.gmail.com'; $mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true; $mail->SMTPAuth = true;
$mail->Username = env('EMAIL'); $mail->Username = env('EMAIL');
$mail->Password = env('PW_EMAIL'); $mail->Password = env('PW_EMAIL');
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 465; $mail->Port = 465;
$mail->SMTPSecure = "ssl"; $mail->SMTPSecure = "ssl";
// Penerima email // Penerima email
$mail->setFrom(env('EMAIL'), env('NAME_EMAIL')); $mail->setFrom(env('EMAIL'), env('NAME_EMAIL'));
$mail->addAddress($data['email'], $data['name']); $mail->addAddress($data['email'], $data['name']);
// Konten email // Konten email
$mail->isHTML(true); $mail->isHTML(true);
$mail->Subject = $data['subject']; $mail->Subject = $data['subject'];
$mail->Body = $data['body']; $mail->Body = $data['body'];
// Kirim email // Kirim email
$mail->send(); $mail->send();
return true; return true;
} catch (\Exception $e) { } catch (\Exception $e) {
dd($e); dd($e);
return ($mail->ErrorInfo); return ($mail->ErrorInfo);
@@ -355,21 +359,21 @@ class Helper
$mail = new PHPMailer(true); $mail = new PHPMailer(true);
try { try {
// Server settings // Server settings
$mail->isSMTP(); $mail->isSMTP();
$mail->Host = 'smtp.gmail.com'; $mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true; $mail->SMTPAuth = true;
$mail->Username = env('EMAIL'); $mail->Username = env('EMAIL');
$mail->Password = env('PW_EMAIL'); $mail->Password = env('PW_EMAIL');
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 465; $mail->Port = 465;
$mail->SMTPSecure = "ssl"; $mail->SMTPSecure = "ssl";
// Penerima email // Penerima email
$mail->setFrom(env('EMAIL'), env('NAME_EMAIL')); $mail->setFrom(env('EMAIL'), env('NAME_EMAIL'));
$mail->addAddress($data['email'], $data['name']); $mail->addAddress($data['email'], $data['name']);
// Konten email // Konten email
$mail->isHTML(true); $mail->isHTML(true);
$mail->Subject = $data['subject']; $mail->Subject = $data['subject'];
$mail->Body = $data['body']; $mail->Body = $data['body'];
$mail->addAttachment($data['attach'], 'e-card.pdf'); $mail->addAttachment($data['attach'], 'e-card.pdf');
@@ -377,12 +381,10 @@ class Helper
// Kirim email // Kirim email
$mail->send(); $mail->send();
return true; return true;
} catch (\Exception $e) { } catch (\Exception $e) {
dd($mail->ErrorInfo); dd($mail->ErrorInfo);
return ($mail->ErrorInfo); return ($mail->ErrorInfo);
return false; return false;
} }
} }
} }

View File

@@ -63,7 +63,8 @@ class Member extends Model
"policy_in_force", "policy_in_force",
"start_no_claim", "start_no_claim",
"end_no_claim", "end_no_claim",
"suspended" "suspended",
"active",
]; ];
protected $appends = [ protected $appends = [
@@ -152,14 +153,14 @@ class Member extends Model
public function currentPlans() public function currentPlans()
{ {
return $this->hasManyThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id'); return $this->hasManyThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id');
// ->latest(); // TODO Fix This // ->latest(); // TODO Fix This
} }
public function currentPlan() public function currentPlan()
{ {
return $this->hasOneThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id', ) return $this->hasOneThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id',)
->latest(); ->latest();
// ->where('plans.service_code', $this->claimRequest->service_code); // TODO Fix This // ->where('plans.service_code', $this->claimRequest->service_code); // TODO Fix This
} }
// public function currentPlan() // public function currentPlan()
@@ -230,7 +231,7 @@ class Member extends Model
$arr[] = $this->person->name_prefix; $arr[] = $this->person->name_prefix;
} }
$arr[] = $this->person->name; $arr[] = $this->person->name ?? '-';
if (!empty($this->person->name_suffix)) { if (!empty($this->person->name_suffix)) {
$arr[] = $this->person->name_suffix; $arr[] = $this->person->name_suffix;
@@ -258,19 +259,33 @@ class Member extends Model
// protected function birthDate(): Attribute // protected function birthDate(): Attribute
// { // {
// // $date = $this->person->birth_date ?? ($this->birth_date ?? null); // // $date = $this->person->birth_date ?? ($this->birth_date ?? null);
// $date = $this->birth_date ?? ($this->person->birth_date ?? null); // $date = $this->birth_date;
// return Attribute::make( // if ($date){
// get: fn () => !empty($date) ? Carbon::parse($date)->format('Y-m-d') : null // $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 protected function birthDateeCard(): Attribute
{ {
// $date = $this->person->birth_date ?? ($this->birth_date ?? null); // $date = $this->person->birth_date ?? ($this->birth_date ?? null);
$date = $this->birth_date ?? ($this->birth_date ?? this->person->birth_date); $date = $this->birth_date;
return Attribute::make( if ($date) {
get: fn () => !empty($date) ? Carbon::parse($date)->format('d / M / Y') : null $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 protected function startDate(): Attribute
@@ -291,18 +306,19 @@ class Member extends Model
); );
} }
protected function gender(): Attribute // protected function gender(): Attribute
{ // {
return Attribute::make( // return Attribute::make(
get: fn () => ucfirst($this->person->gender) ?? null // get: fn () => $this->person->gender ? ucfirst($this->person->gender) : '-'
); // // get: fn () => '-'
} // );
// }
protected function corporateLogo(): Attribute protected function corporateLogo(): Attribute
{ {
$avatar = File::where(['type' => 'avatar', 'fileable_id' => $this->currentPolicy->corporate->id])->orderBy('id', 'desc')->get()->first(); $avatar = File::where(['type' => 'avatar', 'fileable_id' => $this->currentPolicy->corporate->id])->orderBy('id', 'desc')->get()->first();
if ($avatar){ if ($avatar) {
$path = $_ENV['LMS_APP_STORAGE'] . $avatar->path ? $avatar->path :''; $path = $_ENV['LMS_APP_STORAGE'] . $avatar->path ? $avatar->path : '';
return Attribute::make( return Attribute::make(
get: fn () => $avatar ? $path : null get: fn () => $avatar ? $path : null
); );

View File

@@ -2,6 +2,7 @@
namespace App\Services; namespace App\Services;
use App\Models\CorporateEmployee;
use App\Models\Member; use App\Models\Member;
use App\Models\Encounter; use App\Models\Encounter;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
@@ -13,34 +14,42 @@ class CorporateMemberService
public function getAllMemberDashboards(int $corporateId, Request $request) public function getAllMemberDashboards(int $corporateId, Request $request)
{ {
$limit = $request->has('perPage') ? $request->input('perPage') : 10; $limit = $request->has('perPage') ? $request->input('perPage') : 10;
return Member::query() $memberIds = CorporateEmployee::where('corporate_id', $corporateId)
->joinCorporateEmployees('left') ->when($request->input('division'), function ($query, $value) {
->joinCorporateDivisions('left') $query->where('division_id', $value);
->with(['currentPlan', 'person']) })
->where('corporate_employees.corporate_id', $corporateId) ->pluck('member_id');
->when($request->input('search'), function (Builder $query, $search) { return Member::with(['person'])
$query->where(function (Builder $query) use ($search) { ->whereIn('id', $memberIds)
$query->orWhere('members.member_id', 'like', "%" . $search . "%") ->when($request->input('search'), function ($query, $search) {
->orWhere('members.name', 'like', "%" . $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) { ->when($request->has('orderBy'), function ($query) use ($request) {
$query->where('corporate_employees.division_id', $value);
})
->when($request->has('orderBy'), function (Builder $query) use ($request) {
$orderBy = match ($request->input('orderBy')) { $orderBy = match ($request->input('orderBy')) {
'memberId' => 'member_id', 'memberId' => 'member_id',
'fullName' => 'name', 'fullName' => 'name',
'status' => 'active', 'status' => 'active',
'division' => 'corporate_divisions.name', default => null,
default => ''
}; };
if ($request->order) { if ($orderBy !== null && $request->order) {
$query->getQuery()->orderBy($orderBy, $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']) ->select([
->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`") '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); ->paginate($limit);
} }
@@ -49,41 +58,48 @@ class CorporateMemberService
$limit = $request->has('per_page') ? $request->input('per_page') : 10; $limit = $request->has('per_page') ? $request->input('per_page') : 10;
$results = DB::table('claim_requests') $results = DB::table('claim_requests')
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id') ->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id') ->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id') ->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id') ->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
->where('corporate_employees.corporate_id', '=', $corporateId) ->where('corporate_employees.corporate_id', '=', $corporateId)
->when($request->input('search'), function ($query, $search) { ->when($request->input('search'), function ($query, $search) {
$query->where(function ($query) use ($search) { $query->where(function ($query) use ($search) {
$query->orWhere('claim_requests.code', 'like', "%" . $search . "%") $query->orWhere('claim_requests.code', 'like', "%" . $search . "%")
->orWhere('members.member_id', 'like', "%" . $search . "%") ->orWhere('members.member_id', 'like', "%" . $search . "%")
->orWhere('members.name', 'like', "%" . $search . "%") ->orWhere('members.name', 'like', "%" . $search . "%")
->orWhere('corporate_divisions.name', 'like', "%" . $search . "%") ->orWhere('corporate_divisions.name', 'like', "%" . $search . "%")
->orWhere('claim_requests.status', 'like', "%" . $search . "%") ->orWhere('claim_requests.status', 'like', "%" . $search . "%")
->orWhere('claim_requests.submission_date', 'like', "%" . $search . "%"); ->orWhere('claim_requests.submission_date', 'like', "%" . $search . "%");
}); });
}) })
->when($request->has('orderBy'), function ($query) use ($request) { ->when($request->has('orderBy'), function ($query) use ($request) {
$orderBy = $request->orderBy; $orderBy = $request->orderBy;
$direction = $request->order ?? 'asc'; $direction = $request->order ?? 'asc';
$query->orderBy($orderBy, $direction); $query->orderBy($orderBy, $direction);
}) })
->select('members.id', 'claim_requests.code','members.member_id', 'members.name as full_name', 'corporate_divisions.name AS division_name', ->select(
DB::raw(' 'members.id',
CASE '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 = "requested" THEN "requested"
WHEN claim_requests.status = "approved" AND claims.status = "approved" THEN "approved" 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 = "declined" THEN "declined"
WHEN claim_requests.status = "approved" AND claims.status = "disbrusmented" THEN "disbrusmented" 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 "pending"*/
WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed" WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed"
ELSE "" ELSE ""
END AS status END AS status
'), '),
'claim_requests.id AS claim_request_id', 'claim_requests.submission_date') 'claim_requests.id AS claim_request_id',
->paginate($limit); 'claim_requests.submission_date'
)
->paginate($limit);
return $results; 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', '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); ->paginate($limit);
} }
@@ -184,36 +200,32 @@ class CorporateMemberService
$limit = $request->has('perPage') ? $request->input('perPage') : 10; $limit = $request->has('perPage') ? $request->input('perPage') : 10;
return Member::query() return Member::query()
->joinCorporateEmployees('left') ->whereHas('employeds', function ($query) use ($corporateId) {
->joinMemberPlans('left') $query->where('corporate_id', $corporateId);
->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 . "%");
});
}) })
->when($request->input('division'), function (Builder $query, $value) { ->when($request->has('orderBy'), function ($query) use ($request) {
$query->where('corporate_employees.division_id', $value);
})
->when($request->has('orderBy'), function (Builder $query) use ($request) {
$orderBy = match ($request->input('orderBy')) { $orderBy = match ($request->input('orderBy')) {
'memberId' => 'member_id', 'memberId' => 'member_id',
'fullName' => 'name', 'fullName' => 'name',
'status' => 'active', 'status' => 'active',
'start_date' => 'member_plans.start', 'start_date' => 'members_effective_date',
'end_date' => 'member_plans.end', 'end_date' => 'members_expire_date',
'service' => 'plans.service_code', default => null,
default => ''
}; };
$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']) ->select([
->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`") 'id',
'person_id',
'member_id',
'name',
'members_effective_date',
'members_expire_date',
'active',
])
->paginate($limit); ->paginate($limit);
} }

View File

@@ -13,7 +13,7 @@ return new class extends Migration
*/ */
public function up() public function up()
{ {
Schema::table(' plans', function (Blueprint $table) { Schema::table('plans', function (Blueprint $table) {
$table->string('limit_telecon')->nullable(); $table->string('limit_telecon')->nullable();
}); });
} }

View File

@@ -5,5 +5,5 @@ PORT=8083
REACT_APP_HOST_API_URL="https://aso-api.linksehat.dev/api/client" 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="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"

View File

@@ -1,3 +1,3 @@
GENERATE_SOURCEMAP=false GENERATE_SOURCEMAP=false
VITE_API_URL="https://aso-api.linksehat.dev/api/client" VITE_API_URL="https://primecenter-api.linksehat.com/api/client"

View File

@@ -82,7 +82,7 @@ export type TableListProps<DataType> = {
appliedParams: {}; appliedParams: {};
setAppliedParams: Dispatch<SetStateAction<{}>>; setAppliedParams: Dispatch<SetStateAction<{}>>;
}; };
searchs: { searchs?: {
useSearchs: boolean; useSearchs: boolean;
searchText: string; searchText: string;
setSearchText: Dispatch<SetStateAction<string>>; setSearchText: Dispatch<SetStateAction<string>>;

View File

@@ -5,7 +5,6 @@ import {
Container, Container,
Grid, Grid,
Button, Button,
IconButton,
LinearProgress, LinearProgress,
linearProgressClasses, linearProgressClasses,
SelectChangeEvent, SelectChangeEvent,
@@ -25,15 +24,14 @@ import Table from '../../components/Table';
import { HeadCell, Order, PaginationTableProps } from '../../@types/table'; import { HeadCell, Order, PaginationTableProps } from '../../@types/table';
import { useSearchParams } from 'react-router-dom'; import { useSearchParams } from 'react-router-dom';
import palette from '../../theme/palette'; import palette from '../../theme/palette';
import { MoreVert as MoreVertIcon } from '@mui/icons-material';
import { fSplit } from '../../utils/formatNumber'; import { fSplit } from '../../utils/formatNumber';
const itemList = [ // 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' },
{ 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 ------------------------------ */ /* ------------------------------ default data ------------------------------ */
type DataMember = { type DataMember = {
@@ -256,12 +254,6 @@ export default function Index() {
]; ];
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* ----------------------------- handler action ----------------------------- */
const handleAction = () => {
alert('action');
};
/* -------------------------------------------------------------------------- */
useEffect(() => { useEffect(() => {
(async () => { (async () => {
setIsLoading(true); setIsLoading(true);
@@ -279,7 +271,7 @@ export default function Index() {
params: { ...parameters }, params: { ...parameters },
}); });
// console.log('member', corporateMembers); // console.log('member', corporateMembers);
const corporateTopUpLimit = await axios.get(`${corporateValue}/topup`); const corporateTopUpLimit = await axios.get(`${corporateValue}/topup`);
setSearchParams(parameters); setSearchParams(parameters);
@@ -289,58 +281,56 @@ export default function Index() {
}); });
setDivisionData(corporateDivision.data); setDivisionData(corporateDivision.data);
setMemberData( setMemberData(
corporateMembers.data.data.map((obj: any) => { corporateMembers.data.data.map((obj: any) => ({
return { ...obj,
...obj, limit: (
limit: ( <Stack>
<Stack> <BorderLinearProgress
<BorderLinearProgress variant="determinate"
variant="determinate" value={obj.limit.percentage}
value={obj.limit.percentage} sx={{ mb: 1 }}
sx={{ mb: 1 }} />
/> <Typography sx={{ typography: 'caption', color: '#637381' }}>
<Typography sx={{ typography: 'caption', color: '#637381' }}> {fSplit(obj.limit.current)} / {fSplit(obj.limit.total)}
{fSplit(obj.limit.current)} / {fSplit(obj.limit.total)} </Typography>
</Typography> </Stack>
</Stack> ),
status:
obj.status === 1 ? (
<Button
sx={{
backgroundColor: 'rgba(84, 214, 44, 0.16)',
color: palette.dark.success.dark,
paddingY: 0,
'&:hover': {
backgroundColor: 'rgba(84, 214, 44, 0.32)',
color: palette.dark.success.darker,
},
}}
>
Active
</Button>
) : (
<Button
sx={{
backgroundColor: 'rgba(255, 72, 66, 0.16)',
color: palette.dark.error.dark,
paddingY: 0,
'&:hover': {
backgroundColor: 'rgba(255, 72, 66, 0.32)',
color: palette.dark.error.darker,
},
}}
>
Inactive
</Button>
), ),
status: /* action: (
obj.status === 1 ? (
<Button
sx={{
backgroundColor: 'rgba(84, 214, 44, 0.16)',
color: palette.dark.success.dark,
paddingY: 0,
'&:hover': {
backgroundColor: 'rgba(84, 214, 44, 0.32)',
color: palette.dark.success.darker,
},
}}
>
Active
</Button>
) : (
<Button
sx={{
backgroundColor: 'rgba(255, 72, 66, 0.16)',
color: palette.dark.error.dark,
paddingY: 0,
'&:hover': {
backgroundColor: 'rgba(255, 72, 66, 0.32)',
color: palette.dark.error.darker,
},
}}
>
Inactive
</Button>
),
/* action: (
<IconButton onClick={handleAction}> <IconButton onClick={handleAction}>
<MoreVertIcon /> <MoreVertIcon />
</IconButton> </IconButton>
), */ ), */
}; }))
})
); );
setPaginationTable(corporateMembers.data); setPaginationTable(corporateMembers.data);
setRowsPerPage(corporateMembers.data.per_page); setRowsPerPage(corporateMembers.data.per_page);
@@ -357,8 +347,6 @@ export default function Index() {
})(); })();
}, [appliedParams, searchParams, order, orderBy, setSearchParams, corporateValue]); }, [appliedParams, searchParams, order, orderBy, setSearchParams, corporateValue]);
// console.log(policyData);
return ( return (
<Page title="Dashboard"> <Page title="Dashboard">
<Container maxWidth={themeStretch ? false : 'xl'}> <Container maxWidth={themeStretch ? false : 'xl'}>
@@ -370,7 +358,7 @@ export default function Index() {
<Grid container spacing={2}> <Grid container spacing={2}>
<Grid item xs={12} lg={6} md={12}> <Grid item xs={12} lg={6} md={12}>
<CardNotification data={itemList} /> <CardNotification />
</Grid> </Grid>
<Grid item xs={12} lg={6} md={12}> <Grid item xs={12} lg={6} md={12}>
<CardPolicy data={policyData} /> <CardPolicy data={policyData} />

View File

@@ -1,121 +1,26 @@
/* ---------------------------------- react --------------------------------- */
import { useState, SyntheticEvent } from 'react';
/* ---------------------------------- @mui ---------------------------------- */ /* ---------------------------------- @mui ---------------------------------- */
import { Box, Tabs, Tab, Container, Grid, Card, Stack } from '@mui/material'; import { Container, Grid } from '@mui/material';
import { styled } from '@mui/material/styles';
/* ------------------------------- components ------------------------------- */ /* ------------------------------- components ------------------------------- */
import Page from '../../components/Page'; import Page from '../../components/Page';
/* ---------------------------------- hooks --------------------------------- */ /* ---------------------------------- hooks --------------------------------- */
import useSettings from '../../hooks/useSettings'; import useSettings from '../../hooks/useSettings';
import List from './List'; import List from './List';
import ServiceMonitoring from './ServiceMonitoring';
import UserProfile from './UserProfile';
import HeaderBreadcrumbs from '../../components/HeaderBreadcrumbs'; 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 (
<div
role="tabpanel"
hidden={value !== index}
id={`simple-tabpanel-${index}`}
aria-labelledby={`simple-tab-${index}`}
{...other}
>
{value === index && <Box>{children}</Box>}
</div>
);
}
function a11yProps(index: number) {
return {
id: `simple-tab-${index}`,
'aria-controls': `simple-tabpanel-${index}`,
};
}
const StyledTabs = styled((props: StyledTabsProps) => <Tabs {...props} />)({
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) => <Tab disableRipple {...props} />)(
({ 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() { export default function Drugs() {
const { themeStretch } = useSettings(); const { themeStretch } = useSettings();
const [value, setValue] = useState(0);
const handleChange = (event: SyntheticEvent, newValue: number) => {
setValue(newValue);
};
return ( return (
<Page title="Employee Data"> <Page title="Employee Data">
<Container maxWidth={themeStretch ? false : 'xl'}> <Container maxWidth={themeStretch ? false : 'xl'}>
<HeaderBreadcrumbs <HeaderBreadcrumbs
heading={'Employee Data'} heading={'Employee Data'}
links={[ links={[{ name: 'Case Management' }, { name: 'Employee Data', href: '/employee-data' }]}
{ name: 'Case Management', href: '/employee-data' },
{ name: 'Employee Data', href: '/employee-data'}
]}
/> />
<Grid container> <Grid container>
<Grid item xs={12} lg={12} md={12}> <Grid item xs={12} lg={12} md={12}>
<TabPanel value={value} index={0}> <List />
<List />
</TabPanel>
</Grid> </Grid>
</Grid> </Grid>
</Container> </Container>

View File

@@ -1,150 +1,23 @@
/* ---------------------------------- @mui ---------------------------------- */ /* ---------------------------------- @mui ---------------------------------- */
import { import { Stack, MenuItem } from '@mui/material';
Paper,
Table,
TableBody,
TableCell,
TableContainer,
TableHead,
TableRow,
TextField,
Stack,
Button,
TableSortLabel,
Box,
MenuItem
} from '@mui/material';
import { visuallyHidden } from '@mui/utils';
/* ---------------------------------- axios --------------------------------- */ /* ---------------------------------- axios --------------------------------- */
// import axios from 'axios';
import axios from '../../utils/axios'; import axios from '../../utils/axios';
/* ---------------------------------- react --------------------------------- */ /* ---------------------------------- react --------------------------------- */
import { useContext, useEffect, useState } from 'react'; import { useContext, useEffect, useState } from 'react';
/* -------------------------------- component ------------------------------- */ /* -------------------------------- component ------------------------------- */
import Iconify from '../../components/Iconify';
import BaseTablePagination from '../../components/BaseTablePagination';
import TableComponent from '../../components/Table'; import TableComponent from '../../components/Table';
/* ---------------------------------- hooks --------------------------------- */
import useMap from '../../hooks/useMap';
/* ---------------------------------- theme --------------------------------- */ /* ---------------------------------- theme --------------------------------- */
import palette from '../../theme/palette';
import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate'; import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate';
import { HeadCell, Order, PaginationTableProps } from '../../@types/table'; import { HeadCell, Order, PaginationTableProps } from '../../@types/table';
import { useSearchParams, useNavigate, Link } from 'react-router-dom'; import { useSearchParams, useNavigate } from 'react-router-dom';
import { fDate, fDateSuffix } from '../../utils/formatTime'; import { fDateSuffix } from '../../utils/formatTime';
import { format } from 'date-fns';
import Typography from '@mui/material/Typography'; import Typography from '@mui/material/Typography';
import TableMoreMenu from '../../components/table/TableMoreMenu'; import TableMoreMenu from '../../components/table/TableMoreMenu';
import EditOutlinedIcon from '@mui/icons-material/EditOutlined';
import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined'; import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined';
import Label from '../../components/Label'; 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<unknown>, property: string) => void;
// order: Order;
// orderBy: string;
// }
// function EnhancedTableHead(props: EnhancedTableProps) {
// const { order, orderBy, onRequestSort } = props;
// const createSortHandler = (property: string) => (event: React.MouseEvent<unknown>) => {
// onRequestSort(event, property);
// };
// return (
// <TableHead>
// <TableRow>
// <TableCell align="center">No</TableCell>
// {headCells.map((headCell) => (
// <TableCell
// key={headCell.id}
// sortDirection={orderBy === headCell.id ? order : false}
// align="center"
// >
// <TableSortLabel
// active={orderBy === headCell.id}
// direction={orderBy === headCell.id ? order : 'asc'}
// onClick={createSortHandler(headCell.id)}
// >
// {headCell.label}
// {orderBy === headCell.id ? (
// <Box component="span" sx={visuallyHidden}>
// {order === 'desc' ? 'sorted descending' : 'sorted ascending'}
// </Box>
// ) : null}
// </TableSortLabel>
// </TableCell>
// ))}
// </TableRow>
// </TableHead>
// );
// }
/* -------------------------------------------------------------------------- */
export default function List() { export default function List() {
const navigate = useNavigate(); const navigate = useNavigate();
@@ -212,28 +85,6 @@ export default function List() {
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* ------------------------------ handle search ----------------------------- */
const [searchText, setSearchText] = useState('');
const handleSearchSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
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 -------------------------------- */ /* -------------------------------- headCell -------------------------------- */
const headCells: HeadCell<never>[] = [ const headCells: HeadCell<never>[] = [
{ {
@@ -248,7 +99,7 @@ export default function List() {
label: 'Name', label: 'Name',
isSort: true, isSort: true,
}, },
{ {
id: 'start_date', id: 'start_date',
align: 'center', align: 'center',
@@ -290,68 +141,44 @@ export default function List() {
const response = await axios.get(`${corporateValue}/members?type=employee-data`, { const response = await axios.get(`${corporateValue}/members?type=employee-data`, {
params: { ...parameters }, params: { ...parameters },
}); });
setSearchParams(parameters);
setData( setData(
response.data.data.map((obj: any) => { response.data.data.map((obj: any) => ({
return { ...obj,
...obj, // memberId:
// memberId: // <Button
// <Button // onClick={() => navigate ('/employee-data/user-profile/'+obj.personId)}
// onClick={() => navigate ('/employee-data/user-profile/'+obj.personId)} // >{obj.memberId}</Button>
// >{obj.memberId}</Button> // ,
// , status:
status: obj.status === 1 ? (
obj.status === 1 ? ( <Label color="success">Active</Label>
<Label color='success'> ) : (
Active <Label color="error">Inactive</Label>
</Label> ),
) : ( start_date: <Label>{obj.start_date ? fDateSuffix(obj.start_date) : ''}</Label>,
<Label color='error'> end_date: <Label>{obj.end_date ? fDateSuffix(obj.end_date) : ''}</Label>,
Inactive fullName: <Typography variant="body2">{obj.fullName}</Typography>,
</Label> memberId: <Typography variant="body2">{obj.memberId}</Typography>,
), action: (
start_date: <TableMoreMenu
<Label> actions={
{obj.start_date ? fDateSuffix(obj.start_date) : ''} <>
</Label> <MenuItem onClick={() => navigate('/employee-data/user-profile/' + obj.personId)}>
, <VisibilityOutlinedIcon />
end_date: View
<Label> </MenuItem>
{obj.end_date ? fDateSuffix(obj.end_date) : ''} </>
</Label> }
, />
fullName: ),
<Typography }))
variant="body2"
>
{obj.fullName}
</Typography>
,
memberId:
<Typography
variant="body2"
>
{obj.memberId}
</Typography>
,
action:
<TableMoreMenu actions={
<>
<MenuItem onClick={() => navigate ('/employee-data/user-profile/'+obj.personId)}>
<VisibilityOutlinedIcon />
View
</MenuItem>
</>
} />
};
})
); );
setPaginationTable(response.data); setPaginationTable(response.data);
setRowsPerPage(response.data.per_page); setRowsPerPage(response.data.per_page);
if (searchParams.get('page')) { if (searchParams.get('page')) {
//@ts-ignore //@ts-ignore
const currentPage = parseInt(searchParams.get('page')) - 1; const currentPage = parseInt(searchParams.get('page')) - 1;
@@ -373,7 +200,7 @@ export default function List() {
paginations={paginations} paginations={paginations}
loadings={loadings} loadings={loadings}
params={params} params={params}
searchs={searchs} // searchs={searchs}
// filters={filters} // filters={filters}
/> />
</Stack> </Stack>

View File

@@ -41,6 +41,7 @@ const ItemNotificationStyle = styled(Card)(({ theme }) => ({
marginTop: 2, marginTop: 2,
overflowY: 'auto', overflowY: 'auto',
maxHeight: '154px', maxHeight: '154px',
minHeight: '154px',
gap: '0.5rem', gap: '0.5rem',
})); }));
@@ -100,31 +101,37 @@ export default function CardNotification({ data }: NotificationProps) {
</Button> </Button>
</Stack> </Stack>
<ItemNotificationStyle> <ItemNotificationStyle
{data sx={{ display: data?.length === 0 || data === undefined ? 'flex' : 'block' }}
? data.map(({ info, date, time }, index) => ( >
<div key={index}> {data ? (
{index >= 1 ? <Divider sx={{ marginY: 0.5 }} /> : ''} data.map(({ info, date, time }, index) => (
<Stack direction="row" justifyContent="space-between" alignItems="center"> <div key={index}>
<Stack direction="column" justifyContent="flex-start" alignItems="flex-start"> {index >= 1 ? <Divider sx={{ marginY: 0.5 }} /> : ''}
<Typography sx={{ typography: 'caption' }}>{info}</Typography> <Stack direction="row" justifyContent="space-between" alignItems="center">
<Link <Stack direction="column" justifyContent="flex-start" alignItems="flex-start">
component="button" <Typography sx={{ typography: 'caption' }}>{info}</Typography>
variant="caption" <Link
underline="always" component="button"
onClick={() => clickHandler('infoDetail')} variant="caption"
> underline="always"
Info Detail onClick={() => clickHandler('infoDetail')}
</Link> >
</Stack> Info Detail
<Stack direction="column" justifyContent="flex-start" alignItems="flex-start"> </Link>
<Typography sx={{ typography: 'caption', color: '#656565' }}>{date}</Typography>
<Typography sx={{ typography: 'caption', color: '#656565' }}>{time}</Typography>
</Stack>
</Stack> </Stack>
</div> <Stack direction="column" justifyContent="flex-start" alignItems="flex-start">
)) <Typography sx={{ typography: 'caption', color: '#656565' }}>{date}</Typography>
: ''} <Typography sx={{ typography: 'caption', color: '#656565' }}>{time}</Typography>
</Stack>
</Stack>
</div>
))
) : (
<Stack justifyContent="center" alignItems="center" flexGrow={1}>
No Notification
</Stack>
)}
</ItemNotificationStyle> </ItemNotificationStyle>
{isDialog === 'allNotification' && ( {isDialog === 'allNotification' && (

View File

@@ -0,0 +1 @@
VITE_API_URL="https://primecenter-api.linksehat.com/api/v1/hospitalportal"

View File

@@ -0,0 +1 @@
<svg fill="none" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g fill="#637381"><path d="m16.8125 2.83333h-1.1459v-.91667c0-.50599-.4097-.91666-.9166-.91666s-.9167.41067-.9167.91666v.91667h-7.33331v-.91667c0-.50599-.40975-.91666-.91667-.91666-.50691 0-.91666.41067-.91666.91666v.91667h-1.14583c-1.39058 0-2.52083 1.13025-2.52083 2.52083v10.31244c0 1.5162 1.23383 2.75 2.74999 2.75h4.58333c.50691 0 .91666-.4106.91666-.9166s-.40975-.9167-.91666-.9167h-4.58333c-.50599 0-.91666-.4116-.91666-.9167v-7.33328h14.66667c0 .506.4097.91666.9166.91666s.9167-.41066.9167-.91666v-2.97916c0-1.39058-1.1302-2.52083-2.5208-2.52083z"/><path d="m17.0413 11.0834c-3.2853 0-5.9583 2.673-5.9583 5.9583s2.673 5.9583 5.9583 5.9583 5.9583-2.673 5.9583-5.9583-2.673-5.9583-5.9583-5.9583zm2.7555 4.9545-2.9791 3.4375c-.1669.1925-.4061.3062-.66.3163-.011 0-.022 0-.033 0-.243 0-.4758-.0963-.6481-.2686l-1.6042-1.6042c-.3584-.3584-.3584-.9377 0-1.2961.3584-.3585.9378-.3585 1.2962 0l.9084.9084 2.3338-2.6932c.3318-.3831.9112-.4226 1.2934-.0926.3823.331.4235.9103.0926 1.2925z" opacity=".48"/></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1 @@
<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><g transform="translate(2 4)"><path d="m18.38 4.57-1.23 1.85c1.2049 2.40314304 1.1222508 5.2507848-.22 7.58h-13.86c-1.76350331-3.059309-1.31261601-6.91298595 1.10947843-9.48257235s6.24242627-3.24722187 9.40052157-1.66742765l1.85-1.23c-3.8761922-2.48556317-8.94860517-2.00294347-12.28650726 1.16901179-3.3379021 3.17195526-4.07833512 8.21319061-1.79349274 12.21098821.35510459.6150891 1.00977788.9957131 1.72 1.0000158h13.85c.7173695.0028322 1.3813181-.3787474 1.74-1.0000158 1.8786438-3.25433 1.7743473-7.28712667-.27-10.44z"/><path d="m8.59 11.41c.37513651.3755541.8841815.5865733 1.415.5865733s1.0398635-.2110192 1.415-.5865733l5.66-8.49-8.49 5.66c-.37555409.37513651-.58657331.8841815-.58657331 1.415s.21101922 1.0398635.58657331 1.415z" opacity=".48"/></g></svg>

After

Width:  |  Height:  |  Size: 850 B

View File

@@ -0,0 +1,18 @@
<svg height="20" viewBox="0 0 28 20" width="28" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs><rect id="a" height="20" rx="3" width="28"/>
<mask id="b" fill="#fff">
<use fill="#fff" fill-rule="evenodd" xlink:href="#a"/>
</mask>
</defs>
<g fill="none" fill-rule="evenodd">
<use fill="#0a17a7" xlink:href="#a"/>
<path d="m29.2824692-1.91644623 1.4911811 2.21076686-9.4483006 6.37223314 6.6746503.0001129v6.66666663l-6.6746503-.0007795 9.4483006 6.3731256-1.4911811 2.2107668-11.9501195-8.0608924.0009836 7.4777795h-6.6666666l-.000317-7.4777795-11.9488189 8.0608924-1.49118107-2.2107668 9.448-6.3731256-6.67434973.0007795v-6.66666663l6.67434973-.0001129-9.448-6.37223314 1.49118107-2.21076686 11.9488189 8.06.000317-7.4768871h6.6666666l-.0009836 7.4768871z" fill="#fff" mask="url(#b)"/>
<g stroke="#db1f35" stroke-linecap="round" stroke-width=".667">
<path d="m18.668 6.332 12.665-8.332" mask="url(#b)"/>
<path d="m20.013 21.35 11.354-7.652" mask="url(#b)" transform="matrix(1 0 0 -1 0 35.048)"/>
<path d="m8.006 6.31-11.843-7.981" mask="url(#b)"/>
<path d="m9.29 22.31-13.127-8.705" mask="url(#b)" transform="matrix(1 0 0 -1 0 35.915)"/>
</g>
<path d="m0 12h12v8h4v-8h12v-4h-12v-8h-4v8h-12z" fill="#e6273e" mask="url(#b)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,9 @@
<svg height="20" viewBox="0 0 28 20" width="28" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="a" height="10" rx="0" width="28"/>
</defs>
<g fill="none" fill-rule="evenodd">
<use fill="#D82028" xlink:href="#a"/>
<use fill="#FFF" xlink:href="#a" y="10"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 335 B

View File

@@ -1,15 +1,38 @@
{ {
"greeting": "Hello", "greeting": "Hello",
"buttonText": "Click Me", "buttonText": "Click Me",
"infoLogin": "Enter the registered account", "infoLogin": "Enter the registered account",
"txtLogin1" : "Sign in to Hospital Portal", "txtLogin1": "Sign in to Hospital Portal",
"txtLogin2" : "Enter your details below", "txtLogin2": "Enter your details below",
"txtCardSearchMember1" : "Guarantee Submission", "txtCardSearchMember1": "Membership Query",
"txtCardSearchMember2" : "Find Member", "txtCardSearchMember2": "Search Member",
"txtCardSearchMember3" : "Date Birth", "txtCardSearchMember3": "Date of Birth",
"txtCardSearchMember4" : "Member ID", "txtCardSearchMember4": "Member ID",
"txtCardSearchMember5" : "Member", "txtCardSearchMember5": "Member",
"txtDialogMember1" : "Benefit Summary", "txtDialogMember1": "Services",
"txtDialogMember2" : "Request LOG", "txtDialogMember2": "Request LOG",
"txtDialogMember3" : "Member Detail" "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"
} }

View File

@@ -1,15 +1,38 @@
{ {
"greeting": "Halo", "greeting": "Halo",
"buttonText": "Klik Saya", "buttonText": "Klik Saya",
"infoLogin": "Masukan akun yang telah terdaftar", "infoLogin": "Masukan akun yang telah terdaftar",
"txtLogin1" : "Masuk ke Hospital Portal", "txtLogin1": "Masuk ke Hospital Portal",
"txtLogin2" : "Masukkan detail Anda di bawah ini", "txtLogin2": "Masukkan detail Anda di bawah ini",
"txtCardSearchMember1" : "Pengajuan Jaminan", "txtCardSearchMember1": "Pengajuan Jaminan",
"txtCardSearchMember2" : "Cari Anggota", "txtCardSearchMember2": "Cari Anggota",
"txtCardSearchMember3" : "Tanggal Lahir", "txtCardSearchMember3": "Tanggal Lahir",
"txtCardSearchMember4" : "Member ID", "txtCardSearchMember4": "Member ID",
"txtCardSearchMember5" : "Member", "txtCardSearchMember5": "Member",
"txtDialogMember1" : "Ringkasan Manfaat", "txtDialogMember1": "Layanan",
"txtDialogMember2" : "Request LOG", "txtDialogMember2": "Request LOG",
"txtDialogMember3" : "Detail Member" "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"
} }

View File

@@ -1,18 +1,20 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
{{-- <link rel="stylesheet" href="{{ asset('css/app.css') }}"> --}} {{-- <link rel="stylesheet" href="{{ asset('css/app.css') }}"> --}}
<style> <style>
/* @font-face { /* @font-face {
font-family: Public Sans; font-family: Public Sans;
src: url('{{asset('fonts/PublicSans-Medium.ttf')}}'); src: url('{{ asset('fonts/PublicSans-Medium.ttf') }}');
src: url('{{asset('fonts/PublicSans-Medium.ttf')}}') format('truetype'); src: url('{{ asset('fonts/PublicSans-Medium.ttf') }}') format('truetype');
} */ } */
html, body { html,
body {
height: 100%; height: 100%;
margin: 0; margin: 0;
padding: 0; padding: 0;
@@ -22,101 +24,116 @@
font-family: 'Public Sans'; font-family: 'Public Sans';
color: #404040; color: #404040;
font-size: 20px; font-size: 20px;
margin: 0; /* Reset default margin */ margin: 0;
padding: 0; /* Reset default padding */ /* Reset default margin */
padding: 0;
/* Reset default padding */
background-image: url("{{ public_path('images/background-vale.png') }}"); background-image: url("{{ public_path('images/background-vale.png') }}");
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: cover; /* Adjust as needed */ background-size: cover;
/* Adjust as needed */
} }
.text-sm { .text-sm {
font-size: 18px; font-size: 18px;
color: #FFFFFF color: #FFFFFF
} }
.text-md { .text-md {
font-size: 18px; font-size: 18px;
color: #159C9C color: #159C9C
} }
.text-lg { .text-lg {
font-size: 22px; font-size: 22px;
color: #117D7D; color: #117D7D;
} }
.text-gray { .text-gray {
color: #919EAB; color: #919EAB;
} }
.content { .content {
margin: 10% 0 0 0; margin: 10% 0 0 0;
} }
.image-container { .image-container {
margin-left: 75%; /* Adjust the margin as needed */ margin-left: 75%;
/* Adjust the margin as needed */
} }
.label { .label {
background-color: #117D7D; background-color: #117D7D;
color: #fff; color: #fff;
border-radius: 15px; border-radius: 15px;
padding: 8px; /* Sesuaikan dengan kebutuhan Anda */ padding: 8px;
/* Sesuaikan dengan kebutuhan Anda */
font-size: 18px; font-size: 18px;
gap: 4px; gap: 4px;
display: inline-flex; /* Untuk memastikan ikon dan teks berada dalam satu baris */ display: inline-flex;
align-items: center; /* Untuk memastikan ikon dan teks berada dalam satu baris */ /* Untuk memastikan ikon dan teks berada dalam satu baris */
align-items: center;
/* Untuk memastikan ikon dan teks berada dalam satu baris */
} }
.label svg { .label svg {
margin-right: 4px; /* Jarak antara ikon dan teks */ margin-right: 4px;
/* Jarak antara ikon dan teks */
} }
.text-sm { .text-sm {
font-size: 18px; /* Sesuaikan dengan kebutuhan Anda */ font-size: 18px;
/* Sesuaikan dengan kebutuhan Anda */
} }
</style> </style>
</head> </head>
<body> <body>
<br><br><br><br> <br><br><br><br>
<div class="content"> <div class="content">
<div class="text-container"> <div class="text-container">
<span class="text-md"> Member Name </span> <span class="text-md"> Member Name </span>
<p class="text-lg"><b>{{ $member->fullName }}</b></p> <p class="text-lg"><b>{{ $member->fullName }}</b></p>
<span class="text-md"> Member ID </span> <span class="text-md"> Member ID </span>
<p class="text-lg"><b>{{ $member->member_id }}</b></p> <p class="text-lg"><b>{{ $member->member_id }}</b></p>
<span class="text-md"> Policy Holder </span> <span class="text-md"> Policy Holder </span>
<p class="text-lg"><b>{{ $member->currentCorporate->name }}</b></p> <p class="text-lg"><b>{{ $member->currentCorporate->name }}</b></p>
<span class="text-md"> Policy Number </span> <span class="text-md"> Policy Number </span>
<p class="text-lg"><b>{{ $member->currentPolicy->code }}</b></p> <p class="text-lg"><b>{{ $member->currentPolicy->code }}</b></p>
<span class="text-md"> Date of Birth </span> <span class="text-md"> Date of Birth </span>
<p class="text-lg"><b>{{ $member->birthDateeCard }}</b></p> <p class="text-lg"><b>{{ $member->birthDateeCard }}</b></p>
<span class="text-md"> Gender </span> <span class="text-md"> Gender </span>
<p class="text-lg"><b>{{ $member->gender }}</b></p> <p class="text-lg"><b>{{ $member->gender }}</b></p>
<span class="text-md"> Start Date </span> <span class="text-md"> Start Date </span>
<p class="text-lg"><b>{{ $member->startDate }}</b></p> <p class="text-lg"><b>{{ $member->startDate }}</b></p>
<div class="image-container"> <div class="image-container">
<img src="{{ public_path('images/logo-default.png')}}" height="30px"> <img src="{{ public_path('images/logo-default.png') }}" height="30px">
</div>
<span class="label">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.00082 0.166992C9.22257 0.166992 11.8342 2.77858 11.8342 6.00033C11.8342 9.22208 9.22257 11.8337 6.00082 11.8337C4.96994 11.8353 3.9572 11.5625 3.06666 11.0432L0.169822 11.8337L0.958489 8.93566C0.438793 8.04484 0.165766 7.03166 0.167489 6.00033C0.167489 2.77858 2.77907 0.166992 6.00082 0.166992ZM4.01282 3.25866L3.89615 3.26333C3.82063 3.26793 3.74681 3.28777 3.67916 3.32166C3.61588 3.35749 3.55811 3.40229 3.50766 3.45466C3.43766 3.52058 3.39799 3.57774 3.35541 3.63316C3.13964 3.91369 3.02347 4.25809 3.02524 4.61199C3.02641 4.89783 3.10107 5.17608 3.21774 5.43624C3.45632 5.96241 3.84891 6.51949 4.36691 7.03574C4.49174 7.15999 4.61424 7.28483 4.74607 7.40091C5.38972 7.9676 6.15672 8.37627 6.98607 8.59441L7.31741 8.64516C7.42532 8.65099 7.53324 8.64283 7.64174 8.63758C7.81163 8.62881 7.97751 8.5828 8.12766 8.50283C8.20405 8.46348 8.2786 8.42065 8.35107 8.37449C8.35107 8.37449 8.37615 8.35816 8.42399 8.32199C8.50274 8.26366 8.55116 8.22224 8.61649 8.15399C8.66491 8.10383 8.7069 8.04491 8.73899 7.97783C8.78449 7.88274 8.82999 7.70132 8.84865 7.55024C8.86265 7.43474 8.85857 7.37174 8.85682 7.33266C8.85449 7.27024 8.80257 7.20549 8.74599 7.17808L8.40649 7.02583C8.40649 7.02583 7.89899 6.80474 7.58865 6.66358C7.55618 6.6494 7.52138 6.64129 7.48599 6.63966C7.44608 6.63556 7.40575 6.64005 7.36772 6.65283C7.32969 6.66561 7.29483 6.68638 7.26549 6.71374C7.26257 6.71257 7.22349 6.74583 6.80174 7.25683C6.77753 7.28935 6.74419 7.31394 6.70596 7.32744C6.66773 7.34095 6.62634 7.34276 6.58707 7.33266C6.54907 7.32247 6.51184 7.3096 6.47565 7.29416C6.40332 7.26383 6.37824 7.25216 6.32865 7.23116C5.99386 7.08506 5.68389 6.88766 5.4099 6.64608C5.3364 6.58191 5.26816 6.51191 5.19815 6.44424C4.96866 6.22446 4.76866 5.97583 4.60315 5.70458L4.56874 5.64916C4.54402 5.61192 4.52403 5.57175 4.50924 5.52958C4.48707 5.44383 4.54482 5.37499 4.54482 5.37499C4.54482 5.37499 4.68657 5.21983 4.75249 5.13583C4.81666 5.05416 4.8709 4.97483 4.9059 4.91824C4.97474 4.80741 4.99632 4.69366 4.96016 4.60558C4.79682 4.20658 4.62766 3.80933 4.45382 3.41499C4.4194 3.33683 4.31732 3.28083 4.22457 3.26974C4.19307 3.26624 4.16157 3.26274 4.13007 3.26041C4.05173 3.25652 3.97323 3.2573 3.89499 3.26274L4.01224 3.25808L4.01282 3.25866Z" fill="white"/>
</svg>
<span class="text-sm">
08114123962
</span>
</span>
<span class="text-md" style="margin-left:39%"><b> Valid until: {{ $member->endDate }}</b></span>
</div> </div>
<span class="label">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none"
xmlns="http://www.w3.org/2000/svg">
<path
d="M6.00082 0.166992C9.22257 0.166992 11.8342 2.77858 11.8342 6.00033C11.8342 9.22208 9.22257 11.8337 6.00082 11.8337C4.96994 11.8353 3.9572 11.5625 3.06666 11.0432L0.169822 11.8337L0.958489 8.93566C0.438793 8.04484 0.165766 7.03166 0.167489 6.00033C0.167489 2.77858 2.77907 0.166992 6.00082 0.166992ZM4.01282 3.25866L3.89615 3.26333C3.82063 3.26793 3.74681 3.28777 3.67916 3.32166C3.61588 3.35749 3.55811 3.40229 3.50766 3.45466C3.43766 3.52058 3.39799 3.57774 3.35541 3.63316C3.13964 3.91369 3.02347 4.25809 3.02524 4.61199C3.02641 4.89783 3.10107 5.17608 3.21774 5.43624C3.45632 5.96241 3.84891 6.51949 4.36691 7.03574C4.49174 7.15999 4.61424 7.28483 4.74607 7.40091C5.38972 7.9676 6.15672 8.37627 6.98607 8.59441L7.31741 8.64516C7.42532 8.65099 7.53324 8.64283 7.64174 8.63758C7.81163 8.62881 7.97751 8.5828 8.12766 8.50283C8.20405 8.46348 8.2786 8.42065 8.35107 8.37449C8.35107 8.37449 8.37615 8.35816 8.42399 8.32199C8.50274 8.26366 8.55116 8.22224 8.61649 8.15399C8.66491 8.10383 8.7069 8.04491 8.73899 7.97783C8.78449 7.88274 8.82999 7.70132 8.84865 7.55024C8.86265 7.43474 8.85857 7.37174 8.85682 7.33266C8.85449 7.27024 8.80257 7.20549 8.74599 7.17808L8.40649 7.02583C8.40649 7.02583 7.89899 6.80474 7.58865 6.66358C7.55618 6.6494 7.52138 6.64129 7.48599 6.63966C7.44608 6.63556 7.40575 6.64005 7.36772 6.65283C7.32969 6.66561 7.29483 6.68638 7.26549 6.71374C7.26257 6.71257 7.22349 6.74583 6.80174 7.25683C6.77753 7.28935 6.74419 7.31394 6.70596 7.32744C6.66773 7.34095 6.62634 7.34276 6.58707 7.33266C6.54907 7.32247 6.51184 7.3096 6.47565 7.29416C6.40332 7.26383 6.37824 7.25216 6.32865 7.23116C5.99386 7.08506 5.68389 6.88766 5.4099 6.64608C5.3364 6.58191 5.26816 6.51191 5.19815 6.44424C4.96866 6.22446 4.76866 5.97583 4.60315 5.70458L4.56874 5.64916C4.54402 5.61192 4.52403 5.57175 4.50924 5.52958C4.48707 5.44383 4.54482 5.37499 4.54482 5.37499C4.54482 5.37499 4.68657 5.21983 4.75249 5.13583C4.81666 5.05416 4.8709 4.97483 4.9059 4.91824C4.97474 4.80741 4.99632 4.69366 4.96016 4.60558C4.79682 4.20658 4.62766 3.80933 4.45382 3.41499C4.4194 3.33683 4.31732 3.28083 4.22457 3.26974C4.19307 3.26624 4.16157 3.26274 4.13007 3.26041C4.05173 3.25652 3.97323 3.2573 3.89499 3.26274L4.01224 3.25808L4.01282 3.25866Z"
fill="white" />
</svg>
<span class="text-sm">
08114123962
</span>
</span>
<span class="text-md" style="margin-left:27%"><b> Valid until: {{ $member->endDate }}</b></span>
</div> </div>
</div>
</body> </body>
</html>
</html>

View File

@@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -32,8 +33,10 @@
margin: 0; margin: 0;
padding: 0; padding: 0;
height: 100vh; height: 100vh;
background-color: #ffffff; /* Ganti dengan warna latar belakang yang diinginkan */ background-color: #ffffff;
/* Ganti dengan warna latar belakang yang diinginkan */
} }
.content { .content {
padding: 20px; padding: 20px;
text-align: left; text-align: left;
@@ -41,9 +44,12 @@
.content img { .content img {
width: 25%; width: 25%;
max-width: 600px; /* batasan lebar maksimum gambar */ max-width: 600px;
margin-top: 20px; /* jarak antara segitiga dan gambar */ /* batasan lebar maksimum gambar */
margin-top: 20px;
/* jarak antara segitiga dan gambar */
} }
.corner-text { .corner-text {
font-family: 'Calibri', sans-serif; font-family: 'Calibri', sans-serif;
font-size: 14px; font-size: 14px;
@@ -60,11 +66,13 @@
bottom: 10px; bottom: 10px;
right: 10px; right: 10px;
} }
.bottom-left { .bottom-left {
bottom: 10px; bottom: 10px;
left: 10px; left: 10px;
text-align: left; text-align: left;
} }
.title-container { .title-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -84,6 +92,7 @@
font-family: 'Calibri', sans-serif; font-family: 'Calibri', sans-serif;
font-size: 12px; font-size: 12px;
} }
.claim-info { .claim-info {
font-family: 'Calibri', sans-serif; font-family: 'Calibri', sans-serif;
font-size: 14px; font-size: 14px;
@@ -98,14 +107,18 @@
margin-top: 10px; margin-top: 10px;
} }
table, th, td { table,
th,
td {
/* border: 1px solid #008C8C; */ /* border: 1px solid #008C8C; */
} }
th, td { th,
td {
padding: 4px; padding: 4px;
text-align: left; text-align: left;
} }
.hot-line { .hot-line {
font-family: 'Calibri', sans-serif; font-family: 'Calibri', sans-serif;
background-color: #048B8C; background-color: #048B8C;
@@ -116,11 +129,13 @@
padding: 2px; padding: 2px;
color: #ffffff; color: #ffffff;
} }
.txt-tindakan { .txt-tindakan {
font-family: 'Calibri', sans-serif; font-family: 'Calibri', sans-serif;
margin-top: 10px; margin-top: 10px;
font-size: 14px; font-size: 14px;
} }
.txt-pernyataan { .txt-pernyataan {
font-family: 'Calibri', sans-serif; font-family: 'Calibri', sans-serif;
margin-top: 40px; margin-top: 40px;
@@ -128,6 +143,7 @@
} }
</style> </style>
</head> </head>
<body> <body>
<div class="triangle2"></div> <div class="triangle2"></div>
<div class="triangle1"></div> <div class="triangle1"></div>
@@ -135,7 +151,8 @@
<div class="corner-text top-right"> <div class="corner-text top-right">
The Future Of Healthcare At Your Fingertips The Future Of Healthcare At Your Fingertips
</div> </div>
<img src="data:image/png;base64,{{ base64_encode(file_get_contents( public_path('images/logo-default.png') )) }}"> <img
src="data:image/png;base64,{{ base64_encode(file_get_contents(public_path('images/logo-default.png'))) }}">
<div class="title-container"> <div class="title-container">
<div class="title"> <div class="title">
<b>SURAT JAMINAN</b> <b>SURAT JAMINAN</b>
@@ -148,10 +165,11 @@
<tr> <tr>
<td style="width: 20%;">No. Klaim</td> <td style="width: 20%;">No. Klaim</td>
<td style="width: 1%;">:</td> <td style="width: 1%;">:</td>
<td style="width: 29%;">{{ wordwrap($request_logs->code,15,"<br>\n")}}</td> <td style="width: 29%;">{{ wordwrap($request_logs->code, 15, "<br>\n") }}</td>
<td style="width: 20%;">Tanggal</td> <td style="width: 20%;">Tanggal</td>
<td style="width: 1%;">:</td> <td style="width: 1%;">:</td>
<td style="width: 29%;">{{ \Carbon\Carbon::parse($request_logs->submission_date)->format('d M Y') }}</td> <td style="width: 29%;">{{ \Carbon\Carbon::parse($request_logs->submission_date)->format('d M Y') }}
</td>
</tr> </tr>
<tr> <tr>
<td>Kepada</td> <td>Kepada</td>
@@ -166,7 +184,8 @@
Call Center LinkSehat : 08114123962 Call Center LinkSehat : 08114123962
</div> </div>
<div class="txt-tindakan"> <div class="txt-tindakan">
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 :
</div> </div>
<table class="claim-info"> <table class="claim-info">
<tr> <tr>
@@ -202,7 +221,8 @@
<td>{{ $dataMember->no_polis }}</td> --> <td>{{ $dataMember->no_polis }}</td> -->
<td>Tipe</td> <td>Tipe</td>
<td>:</td> <td>:</td>
<td>{{ $dataMember->limit_rules == '999999999' ? 'As Charge' : 'Max Amount, Rp '.number_format($dataMember->limit_rules, 2, ',', '.') }}</td> <td>{{ $dataMember->limit_rules == '999999999' ? 'As Charge' : 'Max Amount, Rp ' . number_format($dataMember->limit_rules, 2, ',', '.') }}
</td>
</tr> </tr>
<tr> <tr>
<td>Jenis Kelamin</td> <td>Jenis Kelamin</td>
@@ -210,7 +230,7 @@
<td>{{ $dataMember->gender == 'male' ? 'Laki-Laki' : 'Perempuan' }}</td> <td>{{ $dataMember->gender == 'male' ? 'Laki-Laki' : 'Perempuan' }}</td>
<!-- <td>Tipe</td> <!-- <td>Tipe</td>
<td>:</td> <td>:</td>
<td>{{ $dataMember->limit_rules == '999999999' ? 'As Charge' : 'Max Amount, Rp '.number_format($dataMember->limit_rules, 2, ',', '.') }}</td> --> <td>{{ $dataMember->limit_rules == '999999999' ? 'As Charge' : 'Max Amount, Rp ' . number_format($dataMember->limit_rules, 2, ',', '.') }}</td> -->
<td>Status Polis</td> <td>Status Polis</td>
<td>:</td> <td>:</td>
<td>{{ $dataMember->status_polis == 'active' ? 'Aktif' : 'Tidak Aktif' }}</td> <td>{{ $dataMember->status_polis == 'active' ? 'Aktif' : 'Tidak Aktif' }}</td>
@@ -224,7 +244,8 @@
<td>{{ $dataMember->status_polis == 'active' ? 'Aktif' : 'Tidak Aktif' }}</td> --> <td>{{ $dataMember->status_polis == 'active' ? 'Aktif' : 'Tidak Aktif' }}</td> -->
<td>Tanggal Mulai/Akhir</td> <td>Tanggal Mulai/Akhir</td>
<td>:</td> <td>:</td>
<td>{{ \Carbon\Carbon::parse($dataMember->mulai)->format('d M Y') }} - {{ \Carbon\Carbon::parse($dataMember->akhir)->format('d M Y') }}</td> <td>{{ \Carbon\Carbon::parse($dataMember->mulai)->format('d M Y') }} -
{{ \Carbon\Carbon::parse($dataMember->akhir)->format('d M Y') }}</td>
</tr> </tr>
<tr> <tr>
<td>Identitas Peserta</td> <td>Identitas Peserta</td>
@@ -262,7 +283,8 @@
</tr> --> </tr> -->
</table> </table>
<div class="txt-pernyataan"> <div class="txt-pernyataan">
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.
</div> </div>
<div class="corner-text bottom-right"> <div class="corner-text bottom-right">
The Future Of Healthcare At Your Fingertips The Future Of Healthcare At Your Fingertips
@@ -276,4 +298,5 @@
</div> </div>
</div> </div>
</body> </body>
</html>
</html>