Andrew Wallo 10 meses atrás
pai
commit
3c0c236824

+ 9
- 49
app/Filament/Company/Resources/Accounting/DocumentResource.php Ver arquivo

@@ -339,66 +339,26 @@ class DocumentResource extends Resource
339 339
     {
340 340
         return $table
341 341
             ->columns([
342
-                Tables\Columns\TextColumn::make('client.name')
343
-                    ->numeric()
344
-                    ->sortable(),
345
-                Tables\Columns\TextColumn::make('vendor.name')
346
-                    ->numeric()
347
-                    ->sortable(),
348
-                Tables\Columns\TextColumn::make('type')
349
-                    ->searchable(),
350
-                Tables\Columns\TextColumn::make('logo')
351
-                    ->searchable(),
352
-                Tables\Columns\TextColumn::make('header')
353
-                    ->searchable(),
354
-                Tables\Columns\TextColumn::make('subheader')
355
-                    ->searchable(),
356
-                Tables\Columns\TextColumn::make('document_number')
357
-                    ->searchable(),
358
-                Tables\Columns\TextColumn::make('order_number')
342
+                Tables\Columns\TextColumn::make('status')
359 343
                     ->searchable(),
360
-                Tables\Columns\TextColumn::make('date')
344
+                Tables\Columns\TextColumn::make('due_date')
361 345
                     ->date()
362 346
                     ->sortable(),
363
-                Tables\Columns\TextColumn::make('due_date')
347
+                Tables\Columns\TextColumn::make('date')
364 348
                     ->date()
365 349
                     ->sortable(),
366
-                Tables\Columns\TextColumn::make('status')
367
-                    ->searchable(),
368
-                Tables\Columns\TextColumn::make('currency_code')
350
+                Tables\Columns\TextColumn::make('document_number')
351
+                    ->label('Number')
369 352
                     ->searchable(),
370
-                Tables\Columns\TextColumn::make('subtotal')
371
-                    ->numeric()
372
-                    ->sortable(),
373
-                Tables\Columns\TextColumn::make('tax_total')
374
-                    ->numeric()
375
-                    ->sortable(),
376
-                Tables\Columns\TextColumn::make('discount_total')
353
+                Tables\Columns\TextColumn::make('client.name')
377 354
                     ->numeric()
378 355
                     ->sortable(),
379 356
                 Tables\Columns\TextColumn::make('total')
380
-                    ->numeric()
381
-                    ->sortable(),
357
+                    ->money(),
382 358
                 Tables\Columns\TextColumn::make('amount_paid')
383
-                    ->numeric()
384
-                    ->sortable(),
359
+                    ->money(),
385 360
                 Tables\Columns\TextColumn::make('amount_due')
386
-                    ->numeric()
387
-                    ->sortable(),
388
-                Tables\Columns\TextColumn::make('created_by')
389
-                    ->numeric()
390
-                    ->sortable(),
391
-                Tables\Columns\TextColumn::make('updated_by')
392
-                    ->numeric()
393
-                    ->sortable(),
394
-                Tables\Columns\TextColumn::make('created_at')
395
-                    ->dateTime()
396
-                    ->sortable()
397
-                    ->toggleable(isToggledHiddenByDefault: true),
398
-                Tables\Columns\TextColumn::make('updated_at')
399
-                    ->dateTime()
400
-                    ->sortable()
401
-                    ->toggleable(isToggledHiddenByDefault: true),
361
+                    ->money(),
402 362
             ])
403 363
             ->filters([
404 364
                 //

+ 4
- 0
app/Models/Accounting/Document.php Ver arquivo

@@ -9,11 +9,14 @@ use App\Enums\Accounting\DocumentType;
9 9
 use App\Models\Banking\Payment;
10 10
 use App\Models\Common\Client;
11 11
 use App\Models\Common\Vendor;
12
+use App\Observers\DocumentObserver;
13
+use Illuminate\Database\Eloquent\Attributes\ObservedBy;
12 14
 use Illuminate\Database\Eloquent\Factories\HasFactory;
13 15
 use Illuminate\Database\Eloquent\Model;
14 16
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
15 17
 use Illuminate\Database\Eloquent\Relations\HasMany;
16 18
 
19
+#[ObservedBy(DocumentObserver::class)]
17 20
 class Document extends Model
18 21
 {
19 22
     use Blamable;
@@ -56,6 +59,7 @@ class Document extends Model
56 59
         'discount_total' => MoneyCast::class,
57 60
         'total' => MoneyCast::class,
58 61
         'amount_paid' => MoneyCast::class,
62
+        'amount_due' => MoneyCast::class,
59 63
     ];
60 64
 
61 65
     public function client(): BelongsTo

+ 3
- 0
app/Models/Accounting/DocumentLineItem.php Ver arquivo

@@ -8,11 +8,14 @@ use App\Concerns\CompanyOwned;
8 8
 use App\Enums\Accounting\AdjustmentCategory;
9 9
 use App\Enums\Accounting\AdjustmentType;
10 10
 use App\Models\Common\Offering;
11
+use App\Observers\DocumentLineItemObserver;
12
+use Illuminate\Database\Eloquent\Attributes\ObservedBy;
11 13
 use Illuminate\Database\Eloquent\Factories\HasFactory;
12 14
 use Illuminate\Database\Eloquent\Model;
13 15
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
14 16
 use Illuminate\Database\Eloquent\Relations\MorphToMany;
15 17
 
18
+#[ObservedBy(DocumentLineItemObserver::class)]
16 19
 class DocumentLineItem extends Model
17 20
 {
18 21
     use Blamable;

+ 60
- 0
app/Observers/DocumentLineItemObserver.php Ver arquivo

@@ -0,0 +1,60 @@
1
+<?php
2
+
3
+namespace App\Observers;
4
+
5
+use App\Models\Accounting\DocumentLineItem;
6
+
7
+class DocumentLineItemObserver
8
+{
9
+    /**
10
+     * Handle the DocumentLineItem "created" event.
11
+     */
12
+    public function created(DocumentLineItem $documentLineItem): void
13
+    {
14
+        //
15
+    }
16
+
17
+    /**
18
+     * Handle the DocumentLineItem "updated" event.
19
+     */
20
+    public function updated(DocumentLineItem $documentLineItem): void
21
+    {
22
+        //
23
+    }
24
+
25
+    public function saving(DocumentLineItem $lineItem): void
26
+    {
27
+        // Calculate the base total (quantity * unit price)
28
+        $lineItem->total = $lineItem->quantity * $lineItem->unit_price;
29
+
30
+        // Calculate tax total (if applicable)
31
+        $lineItem->tax_total = $lineItem->taxes->sum(fn ($tax) => $lineItem->total * ($tax->rate / 100));
32
+
33
+        // Calculate discount total (if applicable)
34
+        $lineItem->discount_total = $lineItem->discounts->sum(fn ($discount) => $lineItem->total * ($discount->rate / 100));
35
+    }
36
+
37
+    /**
38
+     * Handle the DocumentLineItem "deleted" event.
39
+     */
40
+    public function deleted(DocumentLineItem $documentLineItem): void
41
+    {
42
+        //
43
+    }
44
+
45
+    /**
46
+     * Handle the DocumentLineItem "restored" event.
47
+     */
48
+    public function restored(DocumentLineItem $documentLineItem): void
49
+    {
50
+        //
51
+    }
52
+
53
+    /**
54
+     * Handle the DocumentLineItem "force deleted" event.
55
+     */
56
+    public function forceDeleted(DocumentLineItem $documentLineItem): void
57
+    {
58
+        //
59
+    }
60
+}

+ 78
- 0
app/Observers/DocumentObserver.php Ver arquivo

@@ -0,0 +1,78 @@
1
+<?php
2
+
3
+namespace App\Observers;
4
+
5
+use App\Models\Accounting\Document;
6
+
7
+class DocumentObserver
8
+{
9
+    /**
10
+     * Handle the Document "created" event.
11
+     */
12
+    public function created(Document $document): void
13
+    {
14
+        //
15
+    }
16
+
17
+    /**
18
+     * Handle the Document "deleted" event.
19
+     */
20
+    public function deleted(Document $document): void
21
+    {
22
+        //
23
+    }
24
+
25
+    /**
26
+     * Handle the Document "restored" event.
27
+     */
28
+    public function restored(Document $document): void
29
+    {
30
+        //
31
+    }
32
+
33
+    public function updated(Document $document): void
34
+    {
35
+        $this->recalculateTotals($document);
36
+    }
37
+
38
+    public function saved(Document $document): void
39
+    {
40
+        $this->recalculateTotals($document);
41
+    }
42
+
43
+    protected function recalculateTotals(Document $document): void
44
+    {
45
+        // Sum up totals in cents
46
+        $subtotalCents = $document->lineItems()->sum('total');
47
+        $taxTotalCents = $document->lineItems()->sum('tax_total');
48
+        $discountTotalCents = $document->lineItems()->sum('discount_total');
49
+        $grandTotalCents = $subtotalCents + $taxTotalCents - $discountTotalCents;
50
+
51
+        $subtotal = $subtotalCents / 100; // Convert to dollars
52
+        $taxTotal = $taxTotalCents / 100;
53
+        $discountTotal = $discountTotalCents / 100;
54
+        $grandTotal = $grandTotalCents / 100;
55
+
56
+        ray([
57
+            'subtotal' => $subtotal,
58
+            'tax_total' => $taxTotal,
59
+            'discount_total' => $discountTotal,
60
+            'grand_total' => $grandTotal,
61
+        ]);
62
+
63
+        $document->updateQuietly([
64
+            'subtotal' => $subtotal,
65
+            'tax_total' => $taxTotal,
66
+            'discount_total' => $discountTotal,
67
+            'total' => $grandTotal,
68
+        ]);
69
+    }
70
+
71
+    /**
72
+     * Handle the Document "force deleted" event.
73
+     */
74
+    public function forceDeleted(Document $document): void
75
+    {
76
+        //
77
+    }
78
+}

Carregando…
Cancelar
Salvar