<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
/**
* @property mixed subscription_id
* @property mixed|string status
* @method static where(string $string, string $uid)
* @method static insert(array[] $subscriptionTransaction)
*/
class SubscriptionTransaction extends Model
{
const STATUS_SUCCESS = 'success';
const STATUS_FAILED = 'failed';
const STATUS_PENDING = 'pending';
const TYPE_SUBSCRIBE = 'subscribe';
const TYPE_RENEW = 'renew';
const TYPE_PLAN_CHANGE = 'plan_change';
const TYPE_AUTO_CHARGE = 'auto_charge';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'title',
'type',
'status',
'amount',
];
/**
* 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;
});
}
/**
* subscriptions associations
*
* @return BelongsTo
*/
public function subscription(): BelongsTo
{
return $this->belongsTo(Subscription::class);
}
/**
* Change status to success.
*
* @var void
*/
public function setSuccess()
{
$this->status = SubscriptionTransaction::STATUS_SUCCESS;
$this->save();
}
/**
* Change status to failed.
*
* @var void
*/
public function setFailed()
{
$this->status = SubscriptionTransaction::STATUS_FAILED;
$this->save();
}
/**
* change status to pending
*
* @return bool
*/
public function isPending(): bool
{
return $this->status == subscriptionTransaction::STATUS_PENDING;
}
/**
* Check if transaction is failed.
*
* @return bool
*/
public function isFailed(): bool
{
return $this->status == subscriptionTransaction::STATUS_FAILED;
}
}