<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * @method static where(string $string, $uid) * @method static select(string $string) * @method static count() * @method static offset(mixed $start) * @method static whereLike(string[] $array, mixed $search) * @method static cursor() * @method static create(array $data) * @property false|mixed status * @property mixed name * @property mixed code */ class Currency extends Model { /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'user_id', 'code', 'format', 'status', ]; /** * @var array */ protected $casts = [ 'status' => 'boolean', ]; /** * Find item by uid. * * @param $uid * * @return object */ public static function findByUid($uid): object { return self::where('uid', $uid)->first(); } /** * Associations. * * @return BelongsTo * */ public function admin(): BelongsTo { return $this->belongsTo('App\Models\Admin'); } /** * Bootstrap any application services. */ public static function boot() { parent::boot(); // Create uid when creating list. static::creating(function ($item) { // Create new uid $uid = uniqid(); while (self::where('uid', $uid)->count() > 0) { $uid = uniqid(); } $item->uid = $uid; // uppercase for currency code $item->code = strtoupper($item->code); }); static::updating(function ($item) { // uppercase for currency code $item->code = strtoupper($item->code); }); } /** * Get all items. * * @return mixed */ public static function getAll() { return Currency::select('*'); } /** * Disable customer. * * @return boolean */ public function disable(): bool { $this->status = false; return $this->save(); } /** * Enable customer. * * @return boolean */ public function enable(): bool { $this->status = true; return $this->save(); } /** * Display currency name. * * @return string */ public function displayName(): string { return $this->name." (".$this->code.")"; } /** * get route key by uid * * @return string */ public function getRouteKeyName(): string { return 'uid'; } /** * @return string */ public function __toString(): string { return $this->name; } }