'boolean', 'deleted_at' => 'datetime', ]; /** * Get all of the owning recurable models. */ public function recurable() { return $this->morphTo()->isRecurring(); } public function documents() { return $this->morphedByMany('App\Models\Document\Document', 'recurable'); } public function invoices() { return $this->documents()->where('type', self::INVOICE_RECURRING_TYPE); } public function bills() { return $this->documents()->where('type', self::BILL_RECURRING_TYPE); } public function scopeActive(Builder $query): Builder { return $query->where($this->qualifyColumn('status'), '=', static::ACTIVE_STATUS); } public function scopeEnded(Builder $query): Builder { return $query->where($this->qualifyColumn('status'), '=', static::END_STATUS); } public function scopeCompleted(Builder $query): Builder { return $query->where($this->qualifyColumn('status'), '=', static::COMPLETE_STATUS); } public function scopeDocument(Builder $query, $type): Builder { return $query->where($this->qualifyColumn('recurable_type'), '=', 'App\\Models\\Document\\Document') ->whereHas('recurable', function (Builder $query) use ($type) { $query->where('type', $type); }); } public function scopeInvoice(Builder $query): Builder { return $query->where($this->qualifyColumn('recurable_type'), '=', 'App\\Models\\Document\\Document') ->whereHas('recurable', function (Builder $query) { $query->where('type', self::INVOICE_RECURRING_TYPE); }); } public function scopeBill(Builder $query): Builder { return $query->where($this->qualifyColumn('recurable_type'), '=', 'App\\Models\\Document\\Document') ->whereHas('recurable', function (Builder $query) { $query->where('type', self::BILL_RECURRING_TYPE); }); } public function scopeTransaction(Builder $query): Builder { return $query->where($this->qualifyColumn('recurable_type'), '=', 'App\\Models\\Banking\\Transaction'); } public function scopeExpenseTransaction(Builder $query): Builder { return $query->where($this->qualifyColumn('recurable_type'), '=', 'App\\Models\\Banking\\Transaction') ->whereHas('recurable', function (Builder $query) { $query->where('type', self::EXPENSE_RECURRING_TYPE); }); } public function scopeIncomeTransaction(Builder $query): Builder { return $query->where($this->qualifyColumn('recurable_type'), '=', 'App\\Models\\Banking\\Transaction') ->whereHas('recurable', function (Builder $query) { $query->where('type', self::INCOME_RECURRING_TYPE); }); } }