'Draft', 'requested' => 'Requested', 'approved' => 'Approved', 'declined' => 'Declined' ]; public static $payment_types = [ 'cashless' => 'Cashless', 'reimbursement' => 'Reimbursement' ]; public $appends = [ 'payment_type_name' ]; protected static function boot() { parent::boot(); static::creating(function ($model) { try { $model->uuid = (string) Str::orderedUuid(); // generate uuid // $model->code = self::getNextCode(); } catch (\Exception $e) { abort(500, $e->getMessage()); } }); static::created(function ($model) { // try { // if (!empty($model->status) && $model->status == 'requested') { // $model->histories()->create([ // 'title' => 'New Claim Requested', // 'description' => "Claim Requested for Member : {$model->member->member_id} - ({$model->member->full_name})", // 'type' => 'info' // ]); // } // } catch (\Exception $e) { // abort(500, $e->getMessage()); // } }); static::updated(function ($model) { if ($model->hasChanges(['status'])) { // if ($model->status == 'requested') { // $model->histories()->create([ // 'title' => 'New Claim Requested', // 'description' => "Claim Requested for Member : {$model->member->member_id} - ({$model->member->full_name})", // 'type' => 'info' // ]); // } // if ($model->status == 'received') { // ClaimReceived::dispatch($model); // } // if ($model->status == 'approved') { // ClaimApproved::dispatch($model); // } // if ($model->status == 'postpone') { // ClaimPostpone::dispatch($model); // } // if ($model->status == 'paid') { // ClaimPaid::dispatch($model); // } // if ($model->status == 'declined') { // ClaimDeclined::dispatch($model); // } } }); } // public static function getNextCode() // { // $last_number = self::withTrashed()->max('code'); // $next_number = empty($last_number) ? 1 : ((int) explode('-', $last_number)[1] + 1); // return self::makeCode($next_number); // } // public static function makeCode($next_number) // { // return (string) self::$code_prefix .'-'. str_pad($next_number, 5, 0, STR_PAD_LEFT); // } public function claim() { return $this->belongsTo(Claim::class, 'claim_id'); } public function claims() { return $this->hasMany(Claim::class, 'claim_request_id'); } public function files() { return $this->morphMany(File::class, 'fileable'); } public function claimResults() { return $this->files()->where('type', 'claim-result')->whereNull('deleted_at'); } public function claimConditions() { return $this->files()->where('type', 'claim-kondisi')->whereNull('deleted_at'); } public function claimDiagnosis() { return $this->files()->where('type', 'claim-diagnosis')->whereNull('deleted_at'); } public function generatedDocuments() { return $this->morphMany(GeneratedDocument::class, 'generated_documentable'); } public function histories() { return $this->morphMany(ClaimHistory::class, 'historiable'); } public function member() { return $this->belongsTo(Member::class, 'member_id', 'id'); } public function service() { return $this->belongsTo(Service::class, 'service_code', 'code'); } public function getPaymentTypeNameAttribute() { return self::$payment_types[$this->payment_type] ?? $this->payment_type; } public function getStatusAttribute($value) { return self::$payment_types[$value] ?? $value; } }