'Draft', 'requested' => 'Requested', 'received' => 'Received', 'approved' => 'Approved', 'postpone' => 'Postpone', 'paid' => 'Paid', 'declined' => 'Declined' ]; 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 claims() { return $this->hasMany(Claim::class, 'claim_request_id'); } public function files() { return $this->morphMany(File::class, 'fileable'); } 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'); } }