64 lines
1.6 KiB
PHP
64 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class Patient extends Model
|
|
{
|
|
protected $fillable = [
|
|
'medical_record_number',
|
|
'user_id',
|
|
'nik',
|
|
'place_of_birth',
|
|
'date_of_birth',
|
|
'gender',
|
|
'blood_type',
|
|
'phone',
|
|
'address',
|
|
'emergency_contact_name',
|
|
'emergency_contact_phone',
|
|
'emergency_contact_relation',
|
|
'insurance_type',
|
|
'insurance_number',
|
|
];
|
|
|
|
public function user()
|
|
{
|
|
return $this->belongsTo(User::class, 'user_id', 'id');
|
|
}
|
|
|
|
public function medicalRecords()
|
|
{
|
|
return $this->hasMany(MedicalRecord::class);
|
|
}
|
|
|
|
protected static function booted()
|
|
{
|
|
static::deleting(function ($patient) {
|
|
// Hapus user yang terhubung dengan patient ini
|
|
if ($patient->user) {
|
|
$patient->user->delete();
|
|
}
|
|
});
|
|
|
|
static::creating(function ($patient) {
|
|
if (empty($patient->medical_record_number)) {
|
|
$prefix = 'RM' . now()->format('ym');
|
|
|
|
$latestNumber = static::where('medical_record_number', 'like', $prefix . '%')
|
|
->orderByDesc('medical_record_number')
|
|
->value('medical_record_number');
|
|
|
|
if ($latestNumber) {
|
|
$nextNumber = ((int) substr($latestNumber, -4)) + 1;
|
|
} else {
|
|
$nextNumber = 1;
|
|
}
|
|
|
|
$patient->medical_record_number = $prefix . str_pad($nextNumber, 4, '0', STR_PAD_LEFT);
|
|
}
|
|
});
|
|
}
|
|
}
|