Changes 0228092025 Laptop

This commit is contained in:
2025-09-28 14:51:02 +02:00
parent 765beb78b7
commit b40ee9dcde
36 changed files with 2099 additions and 65 deletions
+91 -5
View File
@@ -10,6 +10,8 @@
use Exception;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
use App\Http\Requests\StoreContractRequest;
use App\Http\Requests\UpdateContractRequest;
use Inertia\Inertia;
class ClientCaseContoller extends Controller
@@ -93,7 +95,7 @@ public function store(Request $request)
return to_route('client.show', $client);
}
public function storeContract(ClientCase $clientCase, Request $request)
public function storeContract(ClientCase $clientCase, StoreContractRequest $request)
{
\DB::transaction(function() use ($request, $clientCase){
@@ -106,6 +108,8 @@ public function storeContract(ClientCase $clientCase, Request $request)
'description' => $request->input('description'),
]);
// Note: Contract config auto-application is handled in Contract model created hook.
// Optionally create/update related account amounts
$initial = $request->input('initial_amount');
$balance = $request->input('balance_amount');
@@ -121,7 +125,7 @@ public function storeContract(ClientCase $clientCase, Request $request)
return to_route('clientCase.show', $clientCase);
}
public function updateContract(ClientCase $clientCase, String $uuid, Request $request)
public function updateContract(ClientCase $clientCase, String $uuid, UpdateContractRequest $request)
{
$contract = Contract::where('uuid', $uuid)->firstOrFail();
@@ -209,6 +213,86 @@ public function deleteContract(ClientCase $clientCase, String $uuid, Request $re
return to_route('clientCase.show', $clientCase);
}
public function updateContractSegment(ClientCase $clientCase, string $uuid, Request $request)
{
$validated = $request->validate([
'segment_id' => ['required', 'integer', 'exists:segments,id'],
]);
$contract = $clientCase->contracts()->where('uuid', $uuid)->firstOrFail();
\DB::transaction(function () use ($contract, $validated) {
// Deactivate current active relation(s)
\DB::table('contract_segment')
->where('contract_id', $contract->id)
->where('active', true)
->update(['active' => false]);
// Attach or update the selected segment as active
$existing = \DB::table('contract_segment')
->where('contract_id', $contract->id)
->where('segment_id', $validated['segment_id'])
->first();
if ($existing) {
\DB::table('contract_segment')
->where('id', $existing->id)
->update(['active' => true, 'updated_at' => now()]);
} else {
$contract->segments()->attach($validated['segment_id'], ['active' => true, 'created_at' => now(), 'updated_at' => now()]);
}
});
return back()->with('success', 'Contract segment updated.');
}
public function attachSegment(ClientCase $clientCase, Request $request)
{
$validated = $request->validate([
'segment_id' => ['required', 'integer', 'exists:segments,id'],
'contract_uuid' => ['nullable', 'uuid'],
'make_active_for_contract' => ['sometimes', 'boolean'],
]);
\DB::transaction(function () use ($clientCase, $validated) {
// Attach segment to client case if not already attached
$attached = \DB::table('client_case_segment')
->where('client_case_id', $clientCase->id)
->where('segment_id', $validated['segment_id'])
->first();
if (!$attached) {
$clientCase->segments()->attach($validated['segment_id'], ['active' => true]);
} else if (!$attached->active) {
\DB::table('client_case_segment')
->where('id', $attached->id)
->update(['active' => true, 'updated_at' => now()]);
}
// Optionally make it active for a specific contract
if (!empty($validated['contract_uuid']) && ($validated['make_active_for_contract'] ?? false)) {
$contract = $clientCase->contracts()->where('uuid', $validated['contract_uuid'])->firstOrFail();
\DB::table('contract_segment')
->where('contract_id', $contract->id)
->where('active', true)
->update(['active' => false]);
$existing = \DB::table('contract_segment')
->where('contract_id', $contract->id)
->where('segment_id', $validated['segment_id'])
->first();
if ($existing) {
\DB::table('contract_segment')
->where('id', $existing->id)
->update(['active' => true, 'updated_at' => now()]);
} else {
$contract->segments()->attach($validated['segment_id'], ['active' => true, 'created_at' => now(), 'updated_at' => now()]);
}
}
});
return back()->with('success', 'Segment attached to case.');
}
public function storeDocument(ClientCase $clientCase, Request $request)
{
$validated = $request->validate([
@@ -336,11 +420,11 @@ public function show(ClientCase $clientCase)
'phone_types' => \App\Models\Person\PhoneType::all()
];
return Inertia::render('Cases/Show', [
return Inertia::render('Cases/Show', [
'client' => $case->client()->with('person', fn($q) => $q->with(['addresses', 'phones']))->firstOrFail(),
'client_case' => $case,
'contracts' => $case->contracts()
->with(['type', 'account', 'objects'])
->with(['type', 'account', 'objects', 'segments:id,name'])
->orderByDesc('created_at')->get(),
'activities' => $case->activities()->with(['action', 'decision', 'contract:id,uuid,reference'])
->orderByDesc('created_at')
@@ -348,7 +432,9 @@ public function show(ClientCase $clientCase)
'documents' => $case->documents()->orderByDesc('created_at')->get(),
'contract_types' => \App\Models\ContractType::whereNull('deleted_at')->get(),
'actions' => \App\Models\Action::with('decisions')->get(),
'types' => $types
'types' => $types,
'segments' => $case->segments()->wherePivot('active', true)->get(['segments.id','segments.name']),
'all_segments' => \App\Models\Segment::query()->where('active', true)->get(['id','name'])
]);
}