3 Commits

Author SHA1 Message Date
R
e51068b0a6 Fix Generate LOG 2023-02-22 12:30:02 +07:00
R
dba421ad0b Update Digital Card Get Member Detail 2023-02-20 15:03:05 +07:00
R
5c71b556a0 Update Linking With ASO 2023-02-17 14:29:50 +07:00
12 changed files with 224 additions and 12 deletions

View File

@@ -234,9 +234,17 @@ class CorporateMemberController extends Controller
public function generateLog($member_id)
{
$member = Member::findOrFail($member_id)
->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']);
->load([
'currentPlan',
'currentPolicy',
'currentPlan.corporateBenefits' => function ($benefit) use ($request) {
return $benefit->when($request->benefit_ids, function ($q, $ids) {
return $q->whereIn('benefit_id', $ids);
});
},
'currentPlan.corporateBenefits.benefit']);
// dd($member->currentPlan->corporateBenefits->toArray());
$dateOfAdmission = $request->date_of_admission ? Carbon::parse($request->date_of_admission) : now();
// return view('pdf.guaranted_leter', compact('member'));
$pdf = PDF::loadView('pdf.guaranted_leter', compact('member'));

View File

@@ -4,7 +4,10 @@ namespace App\Http\Controllers\Api\OLDLMS;
use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Http\Resources\OLDLMS\MemberResource;
use App\Models\Corporate;
use App\Models\Member;
use App\Rules\NikRule;
use App\Services\ClaimService;
use Illuminate\Http\Request;
@@ -169,4 +172,91 @@ class MembershipController extends Controller
return Helper::responseJson(data: $limits);
}
public function linkingRules(Request $request)
{
$corporates = Corporate::query()
->when($request->search, function ($q, $search) {
$q->where('name', 'LIKE', '%'.$search.'%');
})
->get();
return Helper::responseJson(data: $corporates);
}
public function linkingValidate(Request $request)
{
$request->validate([
'corporate_id' => 'required'
]);
$corporate = Corporate::findOrFail($request->corporate_id);
// Make Validation from Linking Rules
$linkingRulesArr = $corporate->linking_rules->toArray();
$validationRules = [];
foreach ($linkingRulesArr as $field) {
$rules = ['required']; // Default is required if in the linking_rules
if ($field == 'email') {
$rules[] = 'email';
}
if ($field == 'nric') {
$rules[] = new NikRule;
}
$validationRules[$field] = $rules;
}
$request->validate($validationRules);
$member = Member::query()
->when(in_array('nric', $linkingRulesArr), function($q) use ($request) {
$q->where('nric', $request->nric);
})
->when(in_array('member_id', $linkingRulesArr), function($q) use ($request) {
$q->where('member_id', $request->member_id);
})
->when(in_array('name', $linkingRulesArr), function($q) use ($request) {
$q->where('name', $request->name);
})
->when(in_array('dob', $linkingRulesArr), function($q) use ($request) {
$q->where('birth_date', $request->dob);
})
->when(in_array('phone', $linkingRulesArr), function($q) use ($request) {
$q->whereHas('person', function ($person) use ($request) {
$person->where('phone', $request->phone);
});
})
->when(in_array('email', $linkingRulesArr), function($q) use ($request) {
$q->where('email', $request->email);
})
->when(in_array('nik', $linkingRulesArr), function($q) use ($request) {
$q->whereHas('employeds', function ($employed) use ($request) {
$employed->where('corporate_id', $request->corporate_id)
->where('nik', $request->nik);
});
})
->with([
'memberPlans' => function ($memberPlan) {
$memberPlan->latest();
},
])
->first();
if ($member) {
return Helper::responseJson(data: MemberResource::make($member), message: 'Data Member ditemukan!');
}
return Helper::responseJson(data: [], message: 'Member Tidak ditemukan', statusCode: 404, status: 'error');
}
public function show($member_id)
{
$member = Member::where('member_id', $member_id)->firstOrFail();
$member->load(['currentPlan', 'memberPlans']);
return Helper::responseJson(data: MemberResource::make($member));
}
}

View File

@@ -14,6 +14,30 @@ class MemberResource extends JsonResource
*/
public function toArray($request)
{
return parent::toArray($request);
// $data = parent::toArray($request);
$currentMemberPlan = $this->memberPlans?->first();
$data = [
'member_id' => $this->member_id,
'birth_date' => $this->birth_date,
'email' => $this->email,
'phone' => $this->person->phone ?? null,
'full_name' => $this->full_name,
'nric' => $this->nric,
'plan' => $currentMemberPlan ? [
'code' => $currentMemberPlan->plan->code ?? null,
'start' => $currentMemberPlan->start,
'end' => $currentMemberPlan->end
] : null,
'policy_code' => $this->currentPolicy->code,
'corporate' => [
'code' => $this->currentPolicy->corporate->code,
'name' => $this->currentPolicy->corporate->name,
'welcome_message' => $this->currentPolicy->corporate->welcome_message,
'help_text' => $this->currentPolicy->corporate->help_text,
'avatar_url' => $this->currentpolicy->corporate->avatar_url
]
];
return $data;
}
}

View File

@@ -3,6 +3,7 @@
namespace App\Models;
use App\Traits\Blameable;
use Illuminate\Database\Eloquent\Casts\AsArrayObject;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
@@ -23,7 +24,7 @@ class Corporate extends Model
];
protected $casts = [
'linking_rules' => 'array',
'linking_rules' => AsArrayObject::class,
];
protected $appends = [

View File

@@ -141,7 +141,8 @@ class Member extends Model
public function currentPlan()
{
return $this->hasOneThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id')->latest();
return $this->hasOneThrough(Plan::class, MemberPlan::class, 'member_id', 'id', 'id', 'plan_id')
->latest(); // TODO Fix This
}
public function policies()

View File

@@ -31,4 +31,17 @@ class MemberPlan extends Model
{
return $this->belongsTo(CorporatePlan::class, 'plan_id', 'code');
}
public function plan()
{
return $this->belongsTo(Plan::class, 'plan_id');
}
public function scopeActive($q)
{
return $q
->where('start', '<', now())
->where('end', '>', now())
->latest();
}
}

View File

@@ -2,7 +2,9 @@
namespace App\Providers;
use App\Rules\NikRule;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\ServiceProvider;
use Str;

66
app/Rules/NikRule.php Normal file
View File

@@ -0,0 +1,66 @@
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class NikRule implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
// The NIK is a 16-digit number
if (!preg_match('/^[0-9]{16}$/', $value)) {
return false;
}
// // The first 6 digits represent the person's birth date in the format of YYMMDD
// $year = substr($value, 6, 2);
// $month = substr($value, 8, 2);
// $day = substr($value, 10, 2);
// // dd($year, $month, $day);
// // dd(checkdate($month, $day, "19{$year}"));
// if (!checkdate($month, $day, "19{$year}")) {
// return false;
// }
// // The next 2 digits represent the place of birth (province/city code)
// $provinceCode = substr($value, 6, 2);
// // The next 2 digits represent the person's gender (odd for male, even for female)
// $genderCode = substr($value, 14, 1);
// // The last 4 digits represent the sequence number of the person's birth in that day
// $sequenceNumber = substr($value, 12, 4);
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return ':attribute bukan valid NIK Indonesia.';
}
}

View File

@@ -100,7 +100,7 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) {
policy_stop_service_net: currentCorporate?.current_policy?.minimal_stop_service_net || 0,
policy_start: currentCorporate?.current_policy?.start || '',
policy_end: currentCorporate?.current_policy?.end || '',
linking_rules: currentCorporate?.linking_rules || ['nrik', 'nik', 'member_id'],
linking_rules: currentCorporate?.linking_rules || ['nric', 'nik', 'member_id'],
type: currentCorporate?.type || 'corporate',
logo: currentCorporate?.logo || '',
}),
@@ -174,6 +174,8 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) {
formData.append('policy_end', data.policy_end);
formData.append('linking_rules', data.linking_rules);
console.log('MOTHERFUCKER', data.linking_rules)
if (!isEdit) {
const response = await axios.post('/corporates', formData);
} else {
@@ -269,7 +271,7 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) {
const linking_rules_checkbox_name = 'linking_rules';
const linking_tools = [
{
value: 'nrik',
value: 'nric',
label: 'No. KTP',
},
{
@@ -425,6 +427,7 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) {
Linking Rules
</Typography>
<Stack>
{JSON.stringify(getValues('linking_rules'))}
<RHFCustomMultiCheckbox name="linking_rules" options={linking_tools} />
</Stack>
</Stack>

View File

@@ -154,7 +154,7 @@ export default function FormulariumForm({ isEdit, currentFormularium }: Props) {
const linking_rules_checkbox_name = "linking_rules"
const linking_tools = [
{
"value" : "nrik",
"value" : "nric",
"label" : "No. KTP"
},
{

View File

@@ -212,10 +212,10 @@ export default function List() {
<Grid item xs={2}>Metode Pembayaran</Grid><Grid item xs="10">: {row.payment_method}</Grid>
<Grid item xs={2}>HIS RegID</Grid><Grid item xs="10">: {row.his_detail?.sRegID}</Grid>
<Grid item xs={2}>HIS Medrec</Grid><Grid item xs="10">: {row.his_detail?.Medrec}</Grid>
<Grid item xs={2}>No HP</Grid><Grid item xs="10">: {row.patient.sPhone ?? ''}</Grid>
<Grid item xs={2}>E-mail</Grid><Grid item xs="10">: {row.patient.sEmail ?? ''}</Grid>
<Grid item xs={2}>Alamat</Grid><Grid item xs="10">: {row.patient.detail.sAlamat ?? ''}</Grid>
<Grid item xs={2}>KTP</Grid><Grid item xs="10">: {row.patient.detail.sKTP ?? ''}</Grid>
<Grid item xs={2}>No HP</Grid><Grid item xs="10">: {row.patient?.sPhone ?? ''}</Grid>
<Grid item xs={2}>E-mail</Grid><Grid item xs="10">: {row.patient?.sEmail ?? ''}</Grid>
<Grid item xs={2}>Alamat</Grid><Grid item xs="10">: {row.patient?.detail?.sAlamat ?? ''}</Grid>
<Grid item xs={2}>KTP</Grid><Grid item xs="10">: {row.patient?.detail?.sKTP ?? ''}</Grid>
</Grid>
</Stack>
</Collapse>

View File

@@ -19,10 +19,14 @@ use Illuminate\Support\Facades\Route;
*/
Route::middleware('linksehat.old.auth')->group(function() {
Route::get('member/{member_id}', [MembershipController::class, 'show'])->name('member.show');
Route::post('check-membership', [MembershipController::class, 'check']);
Route::post('check-limit', [MembershipController::class, 'checkLimit']);
Route::post('check-coverage-limit', [MembershipController::class, 'checkLimit']);
Route::get('linking-rules', [MembershipController::class, 'linkingRules']);
Route::post('linking-validate', [MembershipController::class, 'linkingValidate']);
Route::post('claim-create', [ClaimController::class, 'store']);
Route::post('claim-update-diagnosis', [ClaimController::class, 'updateClaimDiagnosis']);
});