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

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

View File

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

View File

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