|
@@ -18,6 +18,7 @@ use Filament\Forms\Components\TextInput;
|
18
|
18
|
use Filament\Forms\Get;
|
19
|
19
|
use Filament\Support\Enums\MaxWidth;
|
20
|
20
|
use Illuminate\Database\Eloquent\Builder;
|
|
21
|
+use Illuminate\Database\Eloquent\Model;
|
21
|
22
|
use Illuminate\Support\Facades\DB;
|
22
|
23
|
|
23
|
24
|
class CreateAdjustmentSelect extends Select
|
|
@@ -28,6 +29,8 @@ class CreateAdjustmentSelect extends Select
|
28
|
29
|
|
29
|
30
|
protected bool $includeInactive = false;
|
30
|
31
|
|
|
32
|
+ protected string $adjustmentsRelationship = 'adjustments';
|
|
33
|
+
|
31
|
34
|
public function category(AdjustmentCategory $category): static
|
32
|
35
|
{
|
33
|
36
|
$this->category = $category;
|
|
@@ -49,6 +52,13 @@ class CreateAdjustmentSelect extends Select
|
49
|
52
|
return $this;
|
50
|
53
|
}
|
51
|
54
|
|
|
55
|
+ public function adjustmentsRelationship(string $relationship): static
|
|
56
|
+ {
|
|
57
|
+ $this->adjustmentsRelationship = $relationship;
|
|
58
|
+
|
|
59
|
+ return $this;
|
|
60
|
+ }
|
|
61
|
+
|
52
|
62
|
public function getCategory(): ?AdjustmentCategory
|
53
|
63
|
{
|
54
|
64
|
return $this->category;
|
|
@@ -64,6 +74,11 @@ class CreateAdjustmentSelect extends Select
|
64
|
74
|
return $this->includeInactive;
|
65
|
75
|
}
|
66
|
76
|
|
|
77
|
+ public function getAdjustmentsRelationship(): string
|
|
78
|
+ {
|
|
79
|
+ return $this->adjustmentsRelationship;
|
|
80
|
+ }
|
|
81
|
+
|
67
|
82
|
protected function setUp(): void
|
68
|
83
|
{
|
69
|
84
|
parent::setUp();
|
|
@@ -75,9 +90,9 @@ class CreateAdjustmentSelect extends Select
|
75
|
90
|
->createOptionAction(fn (Action $action) => $this->createAdjustmentAction($action));
|
76
|
91
|
|
77
|
92
|
$this->relationship(
|
78
|
|
- name: 'adjustments',
|
|
93
|
+ name: $this->getAdjustmentsRelationship(),
|
79
|
94
|
titleAttribute: 'name',
|
80
|
|
- modifyQueryUsing: function (Builder $query) {
|
|
95
|
+ modifyQueryUsing: function (Builder $query, ?Model $record) {
|
81
|
96
|
if ($this->getCategory()) {
|
82
|
97
|
$query->where('category', $this->getCategory());
|
83
|
98
|
}
|
|
@@ -87,7 +102,14 @@ class CreateAdjustmentSelect extends Select
|
87
|
102
|
}
|
88
|
103
|
|
89
|
104
|
if (! $this->includesInactive()) {
|
90
|
|
- $query->where('status', AdjustmentStatus::Active);
|
|
105
|
+ $existingAdjustmentIds = $record?->{$this->getAdjustmentsRelationship()}()
|
|
106
|
+ ->pluck('adjustments.id')
|
|
107
|
+ ->toArray() ?? [];
|
|
108
|
+
|
|
109
|
+ $query->where(function ($query) use ($existingAdjustmentIds) {
|
|
110
|
+ $query->where('status', AdjustmentStatus::Active)
|
|
111
|
+ ->orWhereIn('adjustments.id', $existingAdjustmentIds);
|
|
112
|
+ });
|
91
|
113
|
}
|
92
|
114
|
|
93
|
115
|
return $query->orderBy('name');
|