Browse Source

update local scopes

3.x
Andrew Wallo 1 month ago
parent
commit
8e4c18dfe9

+ 5
- 2
app/Models/Accounting/Account.php View File

@@ -13,6 +13,7 @@ use App\Observers\AccountObserver;
13 13
 use App\Utilities\Currency\CurrencyAccessor;
14 14
 use Database\Factories\Accounting\AccountFactory;
15 15
 use Illuminate\Database\Eloquent\Attributes\ObservedBy;
16
+use Illuminate\Database\Eloquent\Attributes\Scope;
16 17
 use Illuminate\Database\Eloquent\Builder;
17 18
 use Illuminate\Database\Eloquent\Casts\Attribute;
18 19
 use Illuminate\Database\Eloquent\Factories\Factory;
@@ -86,7 +87,8 @@ class Account extends Model
86 87
         return $this->hasOne(Adjustment::class, 'account_id');
87 88
     }
88 89
 
89
-    public function scopeBudgetable(Builder $query): Builder
90
+    #[Scope]
91
+    protected function budgetable(Builder $query): Builder
90 92
     {
91 93
         return $query->whereIn('category', [
92 94
             AccountCategory::Revenue,
@@ -111,7 +113,8 @@ class Account extends Model
111 113
             ->where('currency_code', CurrencyAccessor::getDefaultCurrency());
112 114
     }
113 115
 
114
-    public function scopeWithLastTransactionDate(Builder $query): Builder
116
+    #[Scope]
117
+    protected function withLastTransactionDate(Builder $query): Builder
115 118
     {
116 119
         return $query->addSelect([
117 120
             'last_transaction_date' => JournalEntry::select(DB::raw('MAX(transactions.posted_at)'))

+ 3
- 1
app/Models/Accounting/Bill.php View File

@@ -22,6 +22,7 @@ use Filament\Actions\MountableAction;
22 22
 use Filament\Actions\ReplicateAction;
23 23
 use Illuminate\Database\Eloquent\Attributes\CollectedBy;
24 24
 use Illuminate\Database\Eloquent\Attributes\ObservedBy;
25
+use Illuminate\Database\Eloquent\Attributes\Scope;
25 26
 use Illuminate\Database\Eloquent\Builder;
26 27
 use Illuminate\Database\Eloquent\Model;
27 28
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
@@ -196,7 +197,8 @@ class Bill extends Document
196 197
         return $this->initialTransaction()->exists();
197 198
     }
198 199
 
199
-    public function scopeUnpaid(Builder $query): Builder
200
+    #[Scope]
201
+    protected function unpaid(Builder $query): Builder
200 202
     {
201 203
         return $query->whereIn('status', [
202 204
             BillStatus::Open,

+ 9
- 4
app/Models/Accounting/Budget.php View File

@@ -12,6 +12,7 @@ use App\Models\User;
12 12
 use Filament\Actions\Action;
13 13
 use Filament\Actions\MountableAction;
14 14
 use Filament\Actions\ReplicateAction;
15
+use Illuminate\Database\Eloquent\Attributes\Scope;
15 16
 use Illuminate\Database\Eloquent\Builder;
16 17
 use Illuminate\Database\Eloquent\Casts\Attribute;
17 18
 use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -136,22 +137,26 @@ class Budget extends Model
136 137
         return $this->allocations()->exists();
137 138
     }
138 139
 
139
-    public function scopeDraft(Builder $query): Builder
140
+    #[Scope]
141
+    protected function draft(Builder $query): Builder
140 142
     {
141 143
         return $query->where('status', BudgetStatus::Draft);
142 144
     }
143 145
 
144
-    public function scopeActive(Builder $query): Builder
146
+    #[Scope]
147
+    protected function active(Builder $query): Builder
145 148
     {
146 149
         return $query->where('status', BudgetStatus::Active);
147 150
     }
148 151
 
149
-    public function scopeClosed(Builder $query): Builder
152
+    #[Scope]
153
+    protected function closed(Builder $query): Builder
150 154
     {
151 155
         return $query->where('status', BudgetStatus::Closed);
152 156
     }
153 157
 
154
-    public function scopeCurrentlyActive(Builder $query): Builder
158
+    #[Scope]
159
+    protected function currentlyActive(Builder $query): Builder
155 160
     {
156 161
         return $query->active()
157 162
             ->where('start_date', '<=', company_now())

+ 3
- 1
app/Models/Accounting/Estimate.php View File

@@ -21,6 +21,7 @@ use Filament\Actions\ReplicateAction;
21 21
 use Filament\Notifications\Notification;
22 22
 use Illuminate\Database\Eloquent\Attributes\CollectedBy;
23 23
 use Illuminate\Database\Eloquent\Attributes\ObservedBy;
24
+use Illuminate\Database\Eloquent\Attributes\Scope;
24 25
 use Illuminate\Database\Eloquent\Builder;
25 26
 use Illuminate\Database\Eloquent\Casts\Attribute;
26 27
 use Illuminate\Database\Eloquent\Model;
@@ -212,7 +213,8 @@ class Estimate extends Document
212 213
             && ! $this->wasConverted();
213 214
     }
214 215
 
215
-    public function scopeActive(Builder $query): Builder
216
+    #[Scope]
217
+    protected function active(Builder $query): Builder
216 218
     {
217 219
         return $query->whereIn('status', [
218 220
             EstimateStatus::Unsent,

+ 7
- 3
app/Models/Accounting/Invoice.php View File

@@ -26,6 +26,7 @@ use Filament\Notifications\Notification;
26 26
 use Filament\Support\Enums\Alignment;
27 27
 use Illuminate\Database\Eloquent\Attributes\CollectedBy;
28 28
 use Illuminate\Database\Eloquent\Attributes\ObservedBy;
29
+use Illuminate\Database\Eloquent\Attributes\Scope;
29 30
 use Illuminate\Database\Eloquent\Builder;
30 31
 use Illuminate\Database\Eloquent\Casts\Attribute;
31 32
 use Illuminate\Database\Eloquent\Model;
@@ -181,13 +182,15 @@ class Invoice extends Document
181 182
         return $this->amount_due;
182 183
     }
183 184
 
184
-    public function scopeUnpaid(Builder $query): Builder
185
+    #[Scope]
186
+    protected function unpaid(Builder $query): Builder
185 187
     {
186 188
         return $query->whereIn('status', InvoiceStatus::unpaidStatuses());
187 189
     }
188 190
 
189 191
     // TODO: Consider storing the numeric part of the invoice number separately
190
-    public function scopeByNumber(Builder $query, string $number): Builder
192
+    #[Scope]
193
+    protected function byNumber(Builder $query, string $number): Builder
191 194
     {
192 195
         $invoicePrefix = DocumentDefault::invoice()->first()->number_prefix ?? '';
193 196
 
@@ -197,7 +200,8 @@ class Invoice extends Document
197 200
         });
198 201
     }
199 202
 
200
-    public function scopeOverdue(Builder $query): Builder
203
+    #[Scope]
204
+    protected function overdue(Builder $query): Builder
201 205
     {
202 206
         return $query
203 207
             ->unpaid()

+ 11
- 5
app/Models/Setting/DocumentDefault.php View File

@@ -10,6 +10,7 @@ use App\Enums\Setting\Font;
10 10
 use App\Enums\Setting\PaymentTerms;
11 11
 use App\Enums\Setting\Template;
12 12
 use Database\Factories\Setting\DocumentDefaultFactory;
13
+use Illuminate\Database\Eloquent\Attributes\Scope;
13 14
 use Illuminate\Database\Eloquent\Builder;
14 15
 use Illuminate\Database\Eloquent\Casts\AsArrayObject;
15 16
 use Illuminate\Database\Eloquent\Casts\Attribute;
@@ -73,27 +74,32 @@ class DocumentDefault extends Model
73 74
         });
74 75
     }
75 76
 
76
-    public function scopeType(Builder $query, string | DocumentType $type): Builder
77
+    #[Scope]
78
+    protected function type(Builder $query, string | DocumentType $type): Builder
77 79
     {
78 80
         return $query->where('type', $type);
79 81
     }
80 82
 
81
-    public function scopeInvoice(Builder $query): Builder
83
+    #[Scope]
84
+    protected function invoice(Builder $query): Builder
82 85
     {
83 86
         return $query->type(DocumentType::Invoice);
84 87
     }
85 88
 
86
-    public function scopeRecurringInvoice(Builder $query): Builder
89
+    #[Scope]
90
+    protected function recurringInvoice(Builder $query): Builder
87 91
     {
88 92
         return $query->type(DocumentType::RecurringInvoice);
89 93
     }
90 94
 
91
-    public function scopeBill(Builder $query): Builder
95
+    #[Scope]
96
+    protected function bill(Builder $query): Builder
92 97
     {
93 98
         return $query->type(DocumentType::Bill);
94 99
     }
95 100
 
96
-    public function scopeEstimate(Builder $query): Builder
101
+    #[Scope]
102
+    protected function estimate(Builder $query): Builder
97 103
     {
98 104
         return $query->type(DocumentType::Estimate);
99 105
     }

Loading…
Cancel
Save