Skip to content

Commit d575b21

Browse files
committed
Implementación del módulo de gestión de tipos de caso. Se ha creado el controlador CaseTypeController con métodos para listar, crear, editar y eliminar tipos de caso. Además, se han añadido las vistas correspondientes en React para la creación y edición de tipos de caso, así como la visualización en una tabla. Se han implementado las migraciones necesarias para la tabla de tipos de caso, mejorando la funcionalidad de gestión de tipos de caso en la aplicación.
1 parent 526a242 commit d575b21

25 files changed

+1352
-50
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Http\Controllers;
6+
7+
use App\Models\CaseType;
8+
use Illuminate\Http\Request;
9+
use Inertia\Inertia;
10+
use Illuminate\Http\RedirectResponse;
11+
use Illuminate\Support\Facades\Redirect;
12+
13+
class CaseTypeController extends Controller
14+
{
15+
/**
16+
* Display a listing of the resource.
17+
*/
18+
public function index()
19+
{
20+
$caseTypes = CaseType::orderBy('name')->get();
21+
return Inertia::render('CaseTypes/Index', [
22+
'caseTypes' => $caseTypes,
23+
]);
24+
}
25+
26+
/**
27+
* Show the form for creating a new resource.
28+
*/
29+
public function create()
30+
{
31+
return Inertia::render('CaseTypes/Create');
32+
}
33+
34+
/**
35+
* Store a newly created resource in storage.
36+
*/
37+
public function store(Request $request): RedirectResponse
38+
{
39+
$validated = $request->validate([
40+
'name' => 'required|string|max:255|unique:case_types',
41+
'description' => 'nullable|string',
42+
]);
43+
44+
CaseType::create($validated);
45+
46+
return Redirect::route('case-types.index');
47+
}
48+
49+
/**
50+
* Display the specified resource.
51+
*/
52+
public function show(string $id)
53+
{
54+
// No necesitamos un show para CaseType, podríamos redirigir o retornar 404
55+
return Redirect::route('case-types.index');
56+
}
57+
58+
/**
59+
* Show the form for editing the specified resource.
60+
*/
61+
public function edit(string $id)
62+
{
63+
$caseType = CaseType::findOrFail($id);
64+
return Inertia::render('CaseTypes/Edit', [
65+
'caseType' => $caseType,
66+
]);
67+
}
68+
69+
/**
70+
* Update the specified resource in storage.
71+
*/
72+
public function update(Request $request, string $id): RedirectResponse
73+
{
74+
$caseType = CaseType::findOrFail($id);
75+
76+
$validated = $request->validate([
77+
'name' => 'required|string|max:255|unique:case_types,name,' . $id,
78+
'description' => 'nullable|string',
79+
]);
80+
81+
$caseType->update($validated);
82+
83+
return Redirect::route('case-types.index');
84+
}
85+
86+
/**
87+
* Remove the specified resource from storage.
88+
*/
89+
public function destroy(string $id): RedirectResponse
90+
{
91+
$caseType = CaseType::findOrFail($id);
92+
$caseType->delete();
93+
94+
return Redirect::route('case-types.index');
95+
}
96+
}

app/Http/Controllers/LegalCaseController.php

Lines changed: 60 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,67 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace App\Http\Controllers;
46

7+
use App\Models\LegalCase;
8+
use App\Models\CaseType;
59
use Illuminate\Http\Request;
10+
use Inertia\Inertia;
11+
use Illuminate\Http\RedirectResponse;
12+
use Illuminate\Support\Facades\Redirect;
613
use Illuminate\Support\Facades\Log;
714

8-
class LegalCaseController extends Controller
15+
final class LegalCaseController extends Controller
916
{
1017
/**
1118
* Display a listing of the resource.
1219
*/
1320
public function index()
1421
{
15-
//
22+
$legalCases = LegalCase::with(['caseType', 'individuals', 'legalEntities'])
23+
->orderBy('created_at', 'desc')
24+
->get();
25+
26+
return Inertia::render('LegalCases/Index', [
27+
'legalCases' => $legalCases,
28+
]);
1629
}
1730

1831
/**
1932
* Show the form for creating a new resource.
2033
*/
2134
public function create()
2235
{
23-
//
36+
$caseTypes = CaseType::orderBy('name')->get();
37+
return Inertia::render('LegalCases/Create', [
38+
'caseTypes' => $caseTypes,
39+
]);
2440
}
2541

2642
/**
2743
* Store a newly created resource in storage.
2844
*/
29-
public function store(Request $request)
45+
public function store(Request $request): RedirectResponse
3046
{
31-
//
47+
$validated = $request->validate([
48+
'code' => 'required|string|max:255|unique:legal_cases',
49+
'entry_date' => 'required|date',
50+
'case_type_id' => 'required|exists:case_types,id',
51+
]);
52+
53+
LegalCase::create($validated);
54+
55+
return Redirect::route('legal-cases.index')
56+
->with('success', 'Expediente creado exitosamente.');
3257
}
3358

3459
/**
3560
* Display the specified resource.
3661
*/
3762
public function show(string $id)
3863
{
39-
$legalCase = \App\Models\LegalCase::with(['caseType', 'individuals', 'legalEntities'])->findOrFail($id);
64+
$legalCase = LegalCase::with(['caseType', 'individuals', 'legalEntities'])->findOrFail($id);
4065
$events = $legalCase->events()->with('user')->orderByDesc('date')->get();
4166

4267
// Obtener la próxima fecha importante directamente de la base de datos
@@ -63,7 +88,7 @@ public function show(string $id)
6388
];
6489
})->toArray());
6590

66-
return \Inertia\Inertia::render('LegalCases/Show', [
91+
return Inertia::render('LegalCases/Show', [
6792
'legalCase' => $legalCase,
6893
'events' => $events,
6994
'nextImportantDate' => $nextImportantDate ? [
@@ -79,31 +104,52 @@ public function show(string $id)
79104
*/
80105
public function edit(string $id)
81106
{
82-
//
107+
$legalCase = LegalCase::with(['caseType'])->findOrFail($id);
108+
$caseTypes = CaseType::orderBy('name')->get();
109+
110+
return Inertia::render('LegalCases/Edit', [
111+
'legalCase' => $legalCase,
112+
'caseTypes' => $caseTypes,
113+
]);
83114
}
84115

85116
/**
86117
* Update the specified resource in storage.
87118
*/
88-
public function update(Request $request, string $id)
119+
public function update(Request $request, string $id): RedirectResponse
89120
{
90-
//
121+
$legalCase = LegalCase::findOrFail($id);
122+
123+
$validated = $request->validate([
124+
'code' => 'required|string|max:255|unique:legal_cases,code,' . $id,
125+
'entry_date' => 'required|date',
126+
'case_type_id' => 'required|exists:case_types,id',
127+
]);
128+
129+
$legalCase->update($validated);
130+
131+
return Redirect::route('legal-cases.index')
132+
->with('success', 'Expediente actualizado exitosamente.');
91133
}
92134

93135
/**
94136
* Remove the specified resource from storage.
95137
*/
96-
public function destroy(string $id)
138+
public function destroy(string $id): RedirectResponse
97139
{
98-
//
140+
$legalCase = LegalCase::findOrFail($id);
141+
$legalCase->delete();
142+
143+
return Redirect::route('legal-cases.index')
144+
->with('success', 'Expediente eliminado exitosamente.');
99145
}
100146

101147
/**
102148
* Obtener historial de estatus del expediente.
103149
*/
104150
public function statuses(string $id)
105151
{
106-
$legalCase = \App\Models\LegalCase::findOrFail($id);
152+
$legalCase = LegalCase::findOrFail($id);
107153
$statuses = $legalCase->statuses()->orderByDesc('created_at')->get();
108154
return response()->json($statuses);
109155
}
@@ -117,7 +163,7 @@ public function setStatus(Request $request, string $id)
117163
'status' => 'required|string|max:255',
118164
'reason' => 'nullable|string|max:1000',
119165
]);
120-
$legalCase = \App\Models\LegalCase::findOrFail($id);
166+
$legalCase = LegalCase::findOrFail($id);
121167
$legalCase->setStatus($request->input('status'), $request->input('reason'));
122168
return response()->json(['success' => true]);
123169
}

app/Http/Controllers/StatusController.php

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,56 +13,58 @@ final class StatusController extends Controller
1313
{
1414
public function index(): Response
1515
{
16-
$statuses = Status::orderBy('name')->get();
17-
18-
return Inertia::render('Statuses/Index', [
19-
'statuses' => $statuses
16+
return Inertia::render('Status/Index', [
17+
'statuses' => Status::query()
18+
->orderBy('name')
19+
->get(),
2020
]);
2121
}
2222

2323
public function create(): Response
2424
{
25-
return Inertia::render('Statuses/Create');
25+
return Inertia::render('Status/Create');
2626
}
2727

2828
public function store(Request $request)
2929
{
3030
$validated = $request->validate([
31-
'name' => 'required|string|max:255|unique:statuses,name',
32-
'reason' => 'nullable|string|max:1000',
31+
'name' => ['required', 'string', 'max:255'],
32+
'color' => ['required', 'string', 'max:7'],
33+
'is_active' => ['boolean'],
3334
]);
3435

3536
Status::create($validated);
3637

3738
return redirect()->route('statuses.index')
38-
->with('success', 'Estatus creado exitosamente.');
39+
->with('success', 'Status created successfully.');
3940
}
4041

4142
public function edit(Status $status): Response
4243
{
43-
return Inertia::render('Statuses/Edit', [
44-
'status' => $status
44+
return Inertia::render('Status/Edit', [
45+
'status' => $status,
4546
]);
4647
}
4748

4849
public function update(Request $request, Status $status)
4950
{
5051
$validated = $request->validate([
51-
'name' => 'required|string|max:255|unique:statuses,name,' . $status->id,
52-
'reason' => 'nullable|string|max:1000',
52+
'name' => ['required', 'string', 'max:255'],
53+
'color' => ['required', 'string', 'max:7'],
54+
'is_active' => ['boolean'],
5355
]);
5456

5557
$status->update($validated);
5658

5759
return redirect()->route('statuses.index')
58-
->with('success', 'Estatus actualizado exitosamente.');
60+
->with('success', 'Status updated successfully.');
5961
}
6062

6163
public function destroy(Status $status)
6264
{
6365
$status->delete();
6466

6567
return redirect()->route('statuses.index')
66-
->with('success', 'Estatus eliminado exitosamente.');
68+
->with('success', 'Status deleted successfully.');
6769
}
6870
}

0 commit comments

Comments
 (0)