<?php
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
/**
* @method static where(string $string, string $uid)
* @method static create(array $array)
* @method static select(string $string, string $string1, string $string2, string $string3, string $string4, string $string5)
* @method static whereIn(string $string, mixed $ids)
* @method static cursor()
* @method static currentMonth()
* @method static count()
* @method static offset(mixed $start)
* @method static whereLike(string[] $array, mixed $search)
* @method static insert(array $data)
*/
class Reports extends Model
{
protected $fillable = [
'user_id',
'campaign_id',
'from',
'to',
'message',
'media_url',
'sms_type',
'status',
'send_by',
'cost',
'api_key',
'sending_server_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;
});
}
/**
* get user
*
* @return BelongsTo
*
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
/**
* get sending server
*
* @return BelongsTo
*
*/
public function sendingServer(): BelongsTo
{
return $this->belongsTo(SendingServer::class);
}
/**
* get campaign
*
* @return HasMany
*
*/
public function campaign(): HasMany
{
return $this->hasMany(Campaigns::class);
}
public function scopeCurrentMonth($query){
return $query->where('created_at', ">=", Carbon::now()->firstOfMonth());
}
/**
* get sms type
*
* @return string
*/
public function getSMSType(): string
{
$sms_type = $this->sms_type;
if ($sms_type == 'plain') {
return '<span class="badge badge-light-primary text-uppercase mr-1 mb-1">'.__('locale.labels.plain').'</span>';
}
if ($sms_type == 'unicode') {
return '<span class="badge badge-light-primary text-uppercase mr-1 mb-1">'.__('locale.labels.unicode').'</span>';
}
if ($sms_type == 'voice') {
return '<span class="badge badge-light-success text-uppercase mr-1 mb-1">'.__('locale.labels.voice').'</span>';
}
if ($sms_type == 'mms') {
return '<span class="badge badge-light-info text-uppercase mr-1 mb-1">'.__('locale.labels.mms').'</span>';
}
if ($sms_type == 'whatsapp') {
return '<span class="badge badge-light-warning text-uppercase mb-1">'.__('locale.labels.whatsapp').'</span>';
}
return '<span class="badge badge-light-danger text-uppercase mb-1">'.__('locale.labels.invalid').'</span>';
}
/**
* get sms direction
*
* @return string
*/
public function getSendBy(): string
{
$sms_type = $this->send_by;
if ($sms_type == 'from') {
return '<span class="badge badge-light-primary text-uppercase mr-1 mb-1">'.__('locale.labels.outgoing').'</span>';
}
if ($sms_type == 'to') {
return '<span class="badge badge-light-success text-uppercase mr-1 mb-1">'.__('locale.labels.incoming').'</span>';
}
if ($sms_type == 'api') {
return '<span class="badge badge-light-info text-uppercase mr-1 mb-1">'.__('locale.labels.api').'</span>';
}
return '<span class="badge badge-light-danger text-uppercase mb-1">'.__('locale.labels.invalid').'</span>';
}
/**
* get route key by uid
*
* @return string
*/
public function getRouteKeyName(): string
{
return 'uid';
}
}