<?php namespace App\Models; use App\Library\Tool; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\Translation\Translator; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * @method static whereLike(string[] $array, $search) * @method static where(string $string, string $uid) * @method static select(string $string) * @method static count() * @method static offset(mixed $start) * @method static cursor() * @method static create(array $number) * @property mixed name */ class PhoneNumbers extends Model { /** * The attributes for assign table * * @var string */ protected $table = 'phone_numbers'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'user_id', 'number', 'status', 'capabilities', 'price', 'billing_cycle', 'frequency_amount', 'frequency_unit', 'validity_date', 'currency_id', 'transaction_id', ]; /** * 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; }); } /** * @var string[] */ protected $casts = [ 'capabilities' => 'object', 'validity_date' => 'date', ]; /** * get user * * @return BelongsTo * */ public function user(): BelongsTo { return $this->belongsTo(User::class); } /** * Currency * * @return BelongsTo * */ public function currency(): BelongsTo { return $this->belongsTo(Currency::class); } /** * Find item by uid. * * @param $uid * * @return object */ public static function findByUid($uid): object { return self::where('uid', $uid)->first(); } /** * get all plans * * @return mixed */ public static function getAll() { return self::select('*'); } /** * get numbers capabilities * * @return string */ public function getCapabilities(): string { $return_data = ''; $capabilities = json_decode($this->capabilities, true); foreach ($capabilities as $capability) { if ($capability == 'sms') { $return_data .= '<span class="badge bg-primary text-uppercase me-1"><i data-feather="message-square" class="me-25"></i><span>'.__('locale.labels.sms').'</span></span>'; } if ($capability == 'voice') { $return_data .= '<span class="badge bg-success text-uppercase me-1"><i data-feather="phone-call" class="me-25"></i><span>'.__('locale.labels.voice').'</span></span>'; } if ($capability == 'mms') { $return_data .= '<span class="badge bg-info text-uppercase me-1"><i data-feather="image" class="me-25"></i><span>'.__('locale.labels.mms').'</span></span>'; } if ($capability == 'whatsapp') { $return_data .= '<span class="badge bg-warning text-uppercase"><i data-feather="message-circle" class="me-25"></i><span>'.__('locale.labels.whatsapp').'</span></span>'; } } return $return_data; } /** * Frequency time unit options. * * @return array */ public static function timeUnitOptions(): array { return [ ['value' => 'day', 'text' => 'day'], ['value' => 'week', 'text' => 'week'], ['value' => 'month', 'text' => 'month'], ['value' => 'year', 'text' => 'year'], ]; } /** * Check if phone number validity time is unlimited. * * @return bool */ public function isTimeUnlimited(): bool { return $this->frequency_unit == 'unlimited'; } /** * Get billing recurs available values. * * @return array */ public static function billingCycleValues(): array { return [ 'daily' => [ 'frequency_amount' => 1, 'frequency_unit' => 'day', ], 'monthly' => [ 'frequency_amount' => 1, 'frequency_unit' => 'month', ], 'yearly' => [ 'frequency_amount' => 1, 'frequency_unit' => 'year', ], ]; } /** * Display frequency time * * @return array|Application|Translator|string|null */ public function displayFrequencyTime() { // unlimited if ($this->isTimeUnlimited()) { return __('locale.labels.unlimited'); } return $this->frequency_amount.' '.Tool::getPluralParse($this->frequency_unit, $this->frequency_amount); } /** * get route key by uid * * @return string */ public function getRouteKeyName(): string { return 'uid'; } /** * @return string */ public function __toString(): string { return $this->name; } }