Merge remote-tracking branch 'origin/staging' into origin/production

This commit is contained in:
Linksehat Staging Server
2024-06-20 16:10:13 +07:00
309 changed files with 1622 additions and 1651 deletions

View File

@@ -9,6 +9,7 @@ use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\View;
class AuthController extends Controller
{
@@ -31,17 +32,21 @@ class AuthController extends Controller
return Helper::responseJson(statusCode: Response::HTTP_NOT_FOUND, message: $message);
}
$token = rand(1000, 9999); // Menghasilkan angka acak antara 100000 dan 999999
if($request->phoneOrEmail == 'manager+one@gmail.com' || $request->phoneOrEmail == 'manager+two@gmail.com')
{
$token = 4444;
}
if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
User::query()->find($user->id)->update([
'email' => $request->phoneOrEmail,
'otp' => 4444, //rand(1000, 9999),
'otp' => $token,
'otp_created_at' => now()
]);
} else {
User::query()->find($user->id)->update([
'phone' => $request->phoneOrEmail,
'otp' => 4444,//rand(1000, 9999),
'otp' => $token,
'otp_created_at' => now()
]);
}
@@ -49,6 +54,18 @@ class AuthController extends Controller
// TODO Send the OTP
if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
// Send Email
//send to alarm
if($request->phoneOrEmail != 'manager+one@gmail.com' && $request->phoneOrEmail != 'manager+two@gmail.com')
{
$nameTo = 'User';
$dataEmail = [
'email' => $request->phoneOrEmail,
'name' => $nameTo,
'subject' => 'OTP Login Client Portal Tanggal '. date('Y-m-d H:i:s'),
'body' => View::make('email/forgot_password', ['token' => $token])->render(),
];
Helper::sendEmail($dataEmail);
}
} else {
// Send Whatsapp
}

View File

@@ -21,6 +21,7 @@ use Modules\Client\Transformers\Dashboard\MemberEmployeeDataResources as Dashboa
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Modules\Client\Transformers\EmployeeData\UserProfile\DataMemberResource as EmployeeDataProfileMemberResource;
use Modules\Internal\Services\MemberEnrollmentService;
use Illuminate\Support\Facades\DB;
class CorporateMemberController extends Controller
{
@@ -255,4 +256,84 @@ class CorporateMemberController extends Controller
return Helper::responseJson(DataServiceMonitoring::make($data));
}
public function getDeposit($corporate_id)
{
$deposit = DB::table('corporate_policies')
->select('total_premi')
->where('corporate_id','=', $corporate_id)
->first();
$usage = DB::table('corporate_employees')
->join('request_logs', 'request_logs.member_id', '=', 'corporate_employees.member_id')
->join('request_log_benefits', 'request_log_benefits.request_log_id', '=', 'request_logs.id')
->where('corporate_employees.corporate_id', '=', $corporate_id)
->sum('request_log_benefits.amount_approved');
// Ganti dengan logika Anda untuk mendapatkan data deposit
$deposit = [
'deposit' => $deposit->total_premi,
'limit' => $deposit->total_premi - $usage,
'usage' => $usage
];
return response()->json($deposit);
}
public function getLimits($corporate_id, $member_id)
{
$deposit = DB::table('corporate_policies')
->select('total_premi')
->where('corporate_id','=', $corporate_id)
->first();
$usage = DB::table('corporate_employees')
->join('request_logs', 'request_logs.member_id', '=', 'corporate_employees.member_id')
->join('request_log_benefits', 'request_log_benefits.request_log_id', '=', 'request_logs.id')
->where('corporate_employees.corporate_id', '=', $corporate_id)
->where('request_logs.member_id', '=', $member_id)
->sum('request_log_benefits.amount_approved');
$services = DB::table('member_plans')
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
->leftJoin('services', 'services.code', '=', 'plans.service_code')
->where('member_plans.member_id', '=', $member_id)
->whereNull('member_plans.deleted_at')
->select(
'plans.service_code',
'services.name as title',
'plans.limit_rules as total',
DB::raw("
(
IFNULL((SELECT SUM(request_log_benefits.amount_approved)
FROM request_logs
INNER JOIN request_log_benefits
ON request_log_benefits.request_log_id = request_logs.id
WHERE request_logs.member_id = $member_id
AND request_logs.service_code = plans.service_code),0)
) as current
")
)
->get();
$total_premi = 0;
foreach ($services as $value)
{
if($value->total > 0 && $value->total != 999999999)
{
$total_premi += $value->total;
}
else if($value->total == 999999999)
{
$total_premi = 999999999;
}
}
// Ganti dengan logika Anda untuk mendapatkan data deposit
$deposit = [
'deposit' => $total_premi,
'usage' => $usage,
'services' => $services
];
return response()->json($deposit);
}
}

View File

@@ -18,6 +18,7 @@ use Modules\Internal\Http\Controllers\Api\FormulariumController;
use Modules\Internal\Http\Controllers\Api\FormulariumTemplateController;
use Modules\Internal\Http\Controllers\Api\AuditTrailController;
use Modules\Internal\Http\Controllers\Api\CorporateController;
use Modules\Internal\Http\Controllers\Api\NavigationController;
/*
|--------------------------------------------------------------------------
@@ -70,6 +71,9 @@ Route::prefix('client')->group(function () {
Route::get('corporate', [CorporateCurrentController::class, 'index']);
Route::put('corporate-update', [CorporateCurrentController::class, 'update']);
Route::get('get-deposits', [CorporateMemberController::class, 'getDeposit']);
Route::get('get-limits/{member_id}', [CorporateMemberController::class, 'getLimits']);
});
Route::get('claims/{id}', [ClaimController::class, 'show']);
@@ -90,5 +94,8 @@ Route::prefix('client')->group(function () {
Route::get('audittrail/{corporate_id}', [AuditTrailController::class, 'index']);
Route::get('corporates/import-document-example/{document_type}', [CorporateController::class, 'importDocumentExample']);
// Navigation
Route::get('navigations', [NavigationController::class, 'index']);
});
});

View File

@@ -86,6 +86,7 @@ class DataServiceMonitoring extends JsonResource
return [
'companyName' => $this->member->currentCorporate->name ?? null,
'serviceCode' => $this->service_code ?? null,
'member_id' => $this->member->id ?? null,
'memberId' => $this->member->member_id ?? null,
'fullName' => $this->member->full_name ?? null,
'dateOfBirth' => $this->member->birth_date ?? null,

View File

@@ -28,7 +28,17 @@ class UserManagementController extends Controller
public function permission_list(Request $request)
{
$permissions = Permission::all();
// Ambil nilai guard_name dari query string
$guardName = $request->query('guard_name');
// Jika guard_name ada dalam query, filter berdasarkan guard_name
if ($guardName) {
$permissions = Permission::where('guard_name', $guardName)->orderBy('name','asc')->get();
} else {
// Jika guard_name tidak ada, ambil semua permissions
$permissions = Permission::all();
}
return response()->json($permissions);
}
@@ -73,7 +83,7 @@ class UserManagementController extends Controller
]);
if (isset($validated['permission_check'])) {
$permissions = Permission::whereIn('id', $validated['permission_check'])
->where('guard_name', $validated['guard_name'])
->get();
@@ -145,7 +155,7 @@ class UserManagementController extends Controller
if ($request->password){
$userAccess->password = Hash::make($request->password);
}
}
$person = Person::updateOrCreate(
[

View File

@@ -387,4 +387,5 @@ Route::prefix('internal')->group(function () {
Route::get('options', [OptionController::class, 'index']);
Route::get('final-log/{id}', [ClaimController::class, 'downloadFinalLog'])->name('claim.download-final-log');
Route::get('hospitals', [RequestLogController::class, 'hospitals']);
});

View File

@@ -23,6 +23,8 @@ use Box\Spout\Common\Entity\Row;
use Carbon\Carbon;
use DateTime;
use DB;
use Ramsey\Uuid\Uuid;
use Str;
class MemberEnrollmentService
{
@@ -336,15 +338,16 @@ class MemberEnrollmentService
$this->member = $member;
}
public function dateParser($date_from_row) {
public function dateParser($date_from_row)
{
if ($date_from_row instanceof DateTime) {
return $date_from_row->format('Y-m-d');
} else if ($date_from_row != null) {
if (strtotime($date_from_row)){
if (strtotime($date_from_row)) {
return date('Y-m-d', strtotime($date_from_row));
} else {
// throw new ImportRowException(__('Format Date Invalid'), 0, null, $date_from_row);
// throw new ImportRowException(__('Format Date Invalid'), 0, null, $date_from_row);
return null;
}
} else {
@@ -353,18 +356,19 @@ class MemberEnrollmentService
}
}
public function validateDate($dateString, $dateFormat = 'Ymd'){
public function validateDate($dateString, $dateFormat = 'Ymd')
{
$date = DateTime::createFromFormat($dateFormat, $dateString);
if ($date && ($date->format($dateFormat) == $dateString)) {
return true;
return true;
} else {
return false;
return false;
}
}
protected function validateRow($row)
{
$title =[
$title = [
'member_effective_date' => 'Member Effective Date',
'member_expiry_date' => 'Member Expired Date',
'activation_date' => 'Activation Date',
@@ -401,13 +405,13 @@ class MemberEnrollmentService
if ($row['record_type'] == 'D') {
$member = Member::query()
->where('member_id', $row['principal_id'])
// ->whereHas('employeds', function ($query) use ($corporate) {
// $query->where('corporate_id', $corporate->id);
// })
->first();
->where('member_id', $row['principal_id'])
// ->whereHas('employeds', function ($query) use ($corporate) {
// $query->where('corporate_id', $corporate->id);
// })
->first();
if(empty($member)){
if (empty($member)) {
// throw new ImportRowException(__('enrollment.PRINCIPAL_NOT_IN_MEMBER_ID'), 0, null, $row);
} else {
// if ($member['record_type'] != 'P'){
@@ -551,11 +555,11 @@ class MemberEnrollmentService
{
try {
$activation_date = NULL;
if (!empty($row['activation_date'])){
if (!empty($row['activation_date'])) {
$activation_date = $row['activation_date'];
}
$date_terminated = NULL;
if(!empty($row['date_terminated'])){
if (!empty($row['date_terminated'])) {
$date_terminated = $row['date_terminated'];
}
@@ -627,7 +631,7 @@ class MemberEnrollmentService
$date_terminated = $this->dateParser($row['date_terminated']);
if(!empty($row['activation_date'])){
if (!empty($row['activation_date'])) {
// $activation_date = date("Y-m-d", strtotime($row['activation_date']));
// if (($activation_date == $date_terminated) && ($activation_date == $member_effective_date)) {
// throw new ImportRowException(__('enrollment.MORE_THAN', [
@@ -638,7 +642,7 @@ class MemberEnrollmentService
// ]), 0, null, $row);
// }
}
if (!empty($row['date_terminated'])){
if (!empty($row['date_terminated'])) {
// $date_terminated = date("Y-m-d", strtotime($row['date_terminated']));
// if($date_terminated){
// if ($date_terminated <= $member_effective_date && ($date_terminated != $member_effective_date)) {
@@ -712,7 +716,7 @@ class MemberEnrollmentService
// }
if($corporate->code != $row['corporate_id']){
if ($corporate->code != $row['corporate_id']) {
throw new ImportRowException(__('enrollment.CORPORATE_CODE_NOT_MATCH', [
'corporate_id' => $row['corporate_id']
]), 0, null, $row);
@@ -744,6 +748,7 @@ class MemberEnrollmentService
);
$member->person_id = $person->id;
$member->save();
throw new ImportRowException(__('enrollment.MEMBER_UNIQUE', [
'member_id' => $row['member_id'],
'policy_id' => $row['policy_number']
@@ -752,6 +757,77 @@ class MemberEnrollmentService
$member = new Member();
}
if ($row['relationship_with_principal'] == 'H') {
$sMartialStatus = 6;
$nIDHubunganKeluarga = 3;
} else if ($row['relationship_with_principal'] == 'W') {
$sMartialStatus = 7;
$nIDHubunganKeluarga = 4;
} else if ($row['relationship_with_principal'] == 'S') {
$sMartialStatus = 4;
$nIDHubunganKeluarga = 5;
} else if ($row['relationship_with_principal'] == 'D') {
$sMartialStatus = 5;
$nIDHubunganKeluarga = 5;
} else {
$sMartialStatus = 0;
$nIDHubunganKeluarga = 0;
}
if ($row['sex'] == 'M') {
$nIDJenisKelamin = 1;
} else {
$nIDJenisKelamin = 2;
};
$name = explode(" ", $row['name']);
// First name
$first_name = isset($name[0]) ? $name[0] : '';
// Middle name
$middle_name = isset($name[1]) ? $name[1] : '';
// Last name
$last_name = '';
if (count($name) > 2) {
$last_name = implode(" ", array_slice($name, 2));
}
$userLms = User::create(
[
'sFirstName' => $first_name,
'sLastName' => $middle_name . ' ' . $last_name, // Ubah ini dengan variabel yang sesuai dengan nama belakang (last name)
'sPhone' => $row['telephone_mobile'],
'sEmail' => str_replace(' ', '', $row['email']),
'nIDHubunganKeluarga' => $nIDHubunganKeluarga !== 0 ? $nIDHubunganKeluarga : null,
'dUpdateOn' => date('Y-m-d H:i:s'),
]
);
$nIDUser = $userLms->nID;
$userLmsDetail = UserDetail::create(
[
'nIDUser' => $nIDUser,
// 'dTanggalLahir' => $row['date_of_birth'],
'dTanggalLahir' => $this->dateParser($row['date_of_birth']),
'dCreateOn' => date('Y-m-d H:i:s'),
'sMartialStatus' => $sMartialStatus != 0 ? $sMartialStatus : null,
'nIDJenisKelamin' => $nIDJenisKelamin,
'sCreateBy' => $nIDUser,
'sKTP' => $row['nric'] ?? null,
]
);
UserInsurance::updateOrCreate(
['nIDUser' => $nIDUser],
[
'nIDInsurance' => 106,
'sNamaPeserta' => $row['name'],
'dStartDate' => $row['member_effective_date'],
'dExpireDate' => $row['member_expiry_date'],
'dTanggalLahir' => $row['date_of_birth'] ? $this->dateParser($row['date_of_birth']) : null,
'sNoPolis' => $row['member_id'],
'sVerificationCode' => (string) Uuid::uuid5(Uuid::NAMESPACE_DNS, $row['member_id'])
]
);
$memberPolicy = $member->policies()
->where('policy_id', $row['policy_number'])
->first();
@@ -765,13 +841,13 @@ class MemberEnrollmentService
// Validate If Plan Exist
// TODO validate corporate plan
$plans = explode(",",$row['plan_id']);
$plans = explode(",", $row['plan_id']);
if (count($plans) > 0) {
foreach($plans as $d){
foreach ($plans as $d) {
$plan = Plan::query()
->where('code', $d)
->where('corporate_id', $corporate->id)
->first();
->where('code', $d)
->where('corporate_id', $corporate->id)
->first();
if (!$plan) {
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
}
@@ -836,13 +912,13 @@ class MemberEnrollmentService
]);
// Bisa disini penyebab data dobel
$plans = explode(",",$row['plan_id']);
$plans = explode(",", $row['plan_id']);
if (count($plans) > 0) {
foreach($plans as $d){
foreach ($plans as $d) {
$plan = Plan::query()
->where('code', $d)
->where('corporate_id', $corporate->id)
->first();
->where('code', $d)
->where('corporate_id', $corporate->id)
->first();
if (!$plan) {
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
}
@@ -868,7 +944,6 @@ class MemberEnrollmentService
'end' => $this->dateParser($row['member_expiry_date']),
]);
}
}
DB::commit();
} catch (\Exception $e) {
@@ -967,7 +1042,7 @@ class MemberEnrollmentService
// Bisa disini penyebab data dobel
$member->employeds()->updateOrCreate([
'member_id' => $member->id
'division_id' => $division_id
],[
'corporate_id' => $corporate->id,
'branch_code' => $row['branch_code'],
@@ -979,26 +1054,28 @@ class MemberEnrollmentService
}
$plans = explode(",",$row['plan_id']);
$plans = explode(",", $row['plan_id']);
if (count($plans) > 0) {
foreach($plans as $d){
foreach ($plans as $d) {
$plan = Plan::query()
->where('code', $d)
->where('corporate_id', $corporate->id)
->first();
->where('code', $d)
->where('corporate_id', $corporate->id)
->first();
if (!$plan) {
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
}
$member->memberPlans()->updateOrCreate([
'member_id' => $member->id,
'plan_id' => $plan->id,
],
[
'plan_id' => $plan->id,
'status' => 'active',
'start' => $this->dateParser($row['member_effective_date']),
'end' => $this->dateParser($row['member_expiry_date']),
]);
$member->memberPlans()->updateOrCreate(
[
'member_id' => $member->id,
'plan_id' => $plan->id,
],
[
'plan_id' => $plan->id,
'status' => 'active',
'start' => $this->dateParser($row['member_effective_date']),
'end' => $this->dateParser($row['member_expiry_date']),
]
);
}
} else {
$plan = Plan::query()
@@ -1008,16 +1085,18 @@ class MemberEnrollmentService
if (!$plan) {
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
}
$member->memberPlans()->updateOrCreate([
'member_id' => $member->id,
'plan_id' => $plan->id,
],
[
'plan_id' => $plan->id,
'status' => 'active',
'start' => $this->dateParser($row['member_effective_date']),
'end' => $this->dateParser($row['member_expiry_date']),
]);
$member->memberPlans()->updateOrCreate(
[
'member_id' => $member->id,
'plan_id' => $plan->id,
],
[
'plan_id' => $plan->id,
'status' => 'active',
'start' => $this->dateParser($row['member_effective_date']),
'end' => $this->dateParser($row['member_expiry_date']),
]
);
}
// end update plan
@@ -1025,7 +1104,7 @@ class MemberEnrollmentService
$userInsuranceLms = UserInsurance::query()
->where('sNoPolis', $row['member_id'])
->first();
if ($userInsuranceLms){
if ($userInsuranceLms) {
$userInsuranceLms->sNamaPeserta = $row['name'];
$userInsuranceLms->dStartDate = $row['member_effective_date'];
$userInsuranceLms->dExpireDate = $row['member_expiry_date'];
@@ -1034,24 +1113,26 @@ class MemberEnrollmentService
UserInsurance::updateOrCreate(
['nIDUser' => $nIDUser],
[
'nIDInsurance' => 106,
'sNamaPeserta' => $row['name'],
'dStartDate' => $row['member_effective_date'],
'dExpireDate' => $row['member_expiry_date'],
'dTanggalLahir' => $row['date_of_birth'] ? $this->dateParser($row['date_of_birth']) : null,
// 'nNoKTP' => $row['nric'] ?? ,
'sNoPolis' => $row['member_id'],
'sVerificationCode' => (string) Uuid::uuid5(Uuid::NAMESPACE_DNS, $row['member_id'])
]
);
/* Lihat ID Marital status di table tm_status_pernikahan Linksehat */
if ($row['relationship_with_principal'] == 'H'){
$sMartialStatus= 6;
if ($row['relationship_with_principal'] == 'H') {
$sMartialStatus = 6;
$nIDHubunganKeluarga = 3;
} else if ($row['relationship_with_principal'] == 'W'){
} else if ($row['relationship_with_principal'] == 'W') {
$sMartialStatus = 7;
$nIDHubunganKeluarga = 4;
} else if ($row['relationship_with_principal'] == 'S'){
} else if ($row['relationship_with_principal'] == 'S') {
$sMartialStatus = 4;
$nIDHubunganKeluarga = 5;
} else if ($row['relationship_with_principal'] == 'D'){
} else if ($row['relationship_with_principal'] == 'D') {
$sMartialStatus = 5;
$nIDHubunganKeluarga = 5;
} else {
@@ -1060,7 +1141,7 @@ class MemberEnrollmentService
}
if($row['sex'] == 'M'){
if ($row['sex'] == 'M') {
$nIDJenisKelamin = 1;
} else {
$nIDJenisKelamin = 2;
@@ -1082,7 +1163,7 @@ class MemberEnrollmentService
],
[
'sFirstName' => $first_name,
'sLastName' => $middle_name . ' ' .$last_name, // Ubah ini dengan variabel yang sesuai dengan nama belakang (last name)
'sLastName' => $middle_name . ' ' . $last_name, // Ubah ini dengan variabel yang sesuai dengan nama belakang (last name)
'sPhone' => $row['telephone_mobile'],
'sEmail' => str_replace(' ', '', $row['email']),
'nIDHubunganKeluarga' => $nIDHubunganKeluarga !== 0 ? $nIDHubunganKeluarga : null,
@@ -1105,7 +1186,6 @@ class MemberEnrollmentService
'sKTP' => $row['nric'] ?? null,
]
);
}
if (!$memberPolicy) {
@@ -1600,11 +1680,9 @@ class MemberEnrollmentService
$value = $row_data[$this->doc_headers_to_field_map[$header]] ?? null;
if (is_string($value)) {
$cells[] = WriterEntityFactory::createCell($value);
}
else if ($value instanceof DateTime) {
} else if ($value instanceof DateTime) {
$cells[] = WriterEntityFactory::createCell(Carbon::parse($value)->format('Ymd'));
}
else {
} else {
$cells[] = WriterEntityFactory::createCell($value);
}
}
@@ -1613,13 +1691,13 @@ class MemberEnrollmentService
}
// This validation for range date in period corporate // validasi untuk range tanggal dalam period corporate yang ditentukan
public function validateRangePeriode($dates){
public function validateRangePeriode($dates)
{
$date = date("Y-m-d", strtotime($dates));
if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->start <= $date) {
}
if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->end >= $date) {
dd($corporate->currentPolicy->end, $dates);
dd($corporate->currentPolicy->end, $dates);
}
}

View File

@@ -86,6 +86,9 @@ class ChatController extends Controller
foreach($dataChannel as $d){
$user = User::with('detail')->where('nID', $d['member_id'])->first();
$lastMessage = Message::where('channel_id', $d['id'])
->where('type', '!=', 'summary')
->where('type', '!=', 'trigger')
->latest('created_at')
->first();
$urlAvatarDefault = $user->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
@@ -262,9 +265,9 @@ class ChatController extends Controller
}
$prescription = Prescription::where('livechat_id', $livechat->id)->first();
$prescriptionItems = PrescriptionItem::with('drug')->where('prescription_id',$prescription->id)->get();
$prescriptions = [];
if ($prescriptionItems){
if ($prescription){
$prescriptionItems = PrescriptionItem::with('drug')->where('prescription_id',$prescription->id)->get();
foreach($prescriptionItems as $item){
$row['medicine'] = $item->drug->name;
$row['direction'] = $item->direction;