This commit is contained in:
Simon Pocrnjič
2025-10-20 19:39:26 +02:00
parent 90bbf1942c
commit 872b76b012
9 changed files with 268 additions and 43 deletions
+11 -1
View File
@@ -118,6 +118,7 @@ public function contracts(Client $client, Request $request)
$from = $request->input('from');
$to = $request->input('to');
$search = $request->input('search');
$segmentId = $request->input('segment');
$contractsQuery = \App\Models\Contract::query()
->whereHas('clientCase', function ($q) use ($client) {
@@ -149,8 +150,16 @@ public function contracts(Client $client, Request $request)
});
});
})
->when($segmentId, function ($q) use ($segmentId) {
$q->whereHas('segments', function ($s) use ($segmentId) {
$s->where('segments.id', $segmentId)
->where('contract_segment.active', true);
});
})
->orderByDesc('start_date');
$segments = \App\Models\Segment::orderBy('name')->get(['id', 'name']);
$types = [
'address_types' => \App\Models\Person\AddressType::all(),
'phone_types' => \App\Models\Person\PhoneType::all(),
@@ -159,7 +168,8 @@ public function contracts(Client $client, Request $request)
return Inertia::render('Client/Contracts', [
'client' => $data,
'contracts' => $contractsQuery->paginate($request->integer('perPage', 20))->withQueryString(),
'filters' => $request->only(['from', 'to', 'search']),
'filters' => $request->only(['from', 'to', 'search', 'segment']),
'segments' => $segments,
'types' => $types,
]);
}
@@ -415,6 +415,15 @@ public function missingContracts(Import $import)
->where('client_cases.client_id', $import->client_id)
->where('contracts.active', 1)
->whereNull('contracts.deleted_at')
// Exclude contracts that have any ACTIVE segment marked as excluded
->whereNotExists(function ($sq) {
$sq->select(\DB::raw(1))
->from('contract_segment')
->join('segments', 'segments.id', '=', 'contract_segment.segment_id')
->whereColumn('contract_segment.contract_id', 'contracts.id')
->where('contract_segment.active', true)
->where('segments.exclude', true);
})
->when(count($present) > 0, function ($q) use ($present) {
$q->whereNotIn('contracts.reference', $present);
})
@@ -120,6 +120,7 @@ public function update(UpdateSegmentRequest $request, Segment $segment)
'name' => $data['name'],
'description' => $data['description'] ?? null,
'active' => $data['active'] ?? $segment->active,
'exclude' => $data['exclude'] ?? $segment->exclude
]);
return to_route('settings.segments')->with('success', 'Segment updated');
@@ -17,6 +17,7 @@ public function rules(): array
'name' => ['required', 'string', 'max:50'],
'description' => ['nullable', 'string', 'max:255'],
'active' => ['boolean'],
'exclude' => ['boolean']
];
}
+2
View File
@@ -15,12 +15,14 @@ class Segment extends Model
'name',
'description',
'active',
'exclude'
];
protected function casts(): array
{
return [
'active' => 'boolean',
'exclude' => 'boolean'
];
}