diff --git a/app/Models/Common/Recurring.php b/app/Models/Common/Recurring.php index 98cbe9441..41b851edd 100644 --- a/app/Models/Common/Recurring.php +++ b/app/Models/Common/Recurring.php @@ -13,6 +13,10 @@ class Recurring extends Model public const ACTIVE_STATUS = 'active'; public const END_STATUS = 'ended'; public const COMPLETE_STATUS = 'completed'; + public const INVOICE_RECURRING_TYPE = 'invoice-recurring'; + public const BILL_RECURRING_TYPE = 'bill-recurring'; + public const INCOME_RECURRING_TYPE = 'income-recurring'; + public const EXPENSE_RECURRING_TYPE = 'expense-recurring'; protected $table = 'recurring'; @@ -55,6 +59,21 @@ class Recurring extends Model 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); @@ -69,4 +88,49 @@ class Recurring extends Model { 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); + }); + } }