'int', ]; } protected $table = 'transactions'; public function owner(): morphTo { return $this->morphTo(); } /** * @return MorphMany */ public function order(): morphMany { return $this->morphMany(Order::class, 'owner'); } /** * @return MorphMany */ public function transactions(): MorphMany { return $this->MorphMany(Transaction::class, 'owner'); } /** * @return MorphMany */ public function documents(): morphMany { return $this->morphMany(Document::class, 'owner'); } /** * @return BelongsTo */ public function currency(): BelongsTo { return $this->BelongsTo(Currency::class, 'currency_id', 'id'); } /** * @return BelongsTo */ public function original_currency(): BelongsTo { return $this->BelongsTo(Currency::class, 'original_currency_id', 'id'); } /** * @return HasMany */ public function transactionDetails(): HasMany { return $this->HasMany(TransactionDetail::class, 'transaction_id', 'id'); } /** * @return BelongsToMany */ public function groups(): BelongsToMany { return $this->BelongsToMany(Group::class, GroupTransaction::class, 'transaction_id'); } /** * @return BelongsToMany */ public function groupsWithTrashed(): BelongsToMany { return $this->BelongsToMany(Group::class, GroupTransaction::class, 'transaction_id')->withTrashed(); } public function convert_original_amount() { if ($this->booking()->first()->fix_currency_id !== 1) { $currency_rate = $this->currency()->first()->rates()->where('payment_method_type', $this->payment_method)->first(); return number_format($this->original_amount / $currency_rate->selling, 2); } return $this->original_amount; } /** * @param Builder $query * @return Builder */ public function scopePayments(Builder $query) { return $query->whereIn('type', [TransactionType::PAYMENT, TransactionType::TOP_UP]); } /** * @param Builder $query * @return Builder */ public function scopeInComplete(Builder $query) { return $query->where(function (Builder $query) { $query->where(function (Builder $query) { $query->where('status', ApprovalStatus::PENDING_SUBMISSION) ->whereDate('expires_on', '>=', Carbon::now()); })->orWhere(function (Builder $query) { $query->where('status', ApprovalStatus::PENDING_VERIFICATION); }); }); } /** * @param Builder $query * @return Builder */ public function scopeComplete(Builder $query) { return $query->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); } /** * @param Builder $query * @return Builder */ public function scopeTransferred(Builder $query) { return $query->whereIn('status', [ApprovalStatus::COMPLETED]); } /** * @return MorphMany */ public function remarks(): morphMany { return $this->morphMany(Remark::class, 'owner'); } /** * @return MorphMany */ public function attributesKVP(): MorphMany { return $this->morphMany(KeyValuePair::class, 'owner'); } }