Skip to content

Commit 526a242

Browse files
committed
Implementación del módulo de gestión de estatus. Se han creado los controladores StatusController y StatusListController, junto con los modelos Status y StatusList, y las migraciones correspondientes para las tablas de estatus y listas de estatus. Además, se ha añadido la lógica para manejar la creación, actualización y eliminación de estatus, mejorando la funcionalidad de gestión de estatus en la aplicación. Se ha actualizado la interfaz para incluir formularios de creación y edición, así como la visualización de estatus en tablas paginadas.
1 parent 11cbe47 commit 526a242

File tree

17 files changed

+1063
-185
lines changed

17 files changed

+1063
-185
lines changed

app/Http/Controllers/LegalCaseController.php

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -127,23 +127,8 @@ public function setStatus(Request $request, string $id)
127127
*/
128128
public function availableStatuses()
129129
{
130-
// Para demo, devolver los estatus de ejemplo. En producción, consultar tabla/configuración.
131-
$statuses = [
132-
'EN TRAMITE',
133-
'EN FASE DE SUSTANCIACIÓN',
134-
'EN FASE DE SENTENCIA DENTRO DEL LAPSO',
135-
'EN FASE DE SENTENCIA FUERA DEL LAPSO',
136-
'EN FASE DE NOTIFICACIÓN, INTERPOSICIÓN DE RECURSO',
137-
'EN FASE DE EJECUCIÓN DE SENTENCIA',
138-
'DISTRIBUIDOS SIN ACEPTAR',
139-
'DISTRIBUIDOS Y ACEPTADOS SIN AUTO DE ADMISIÓN',
140-
'EXPEDIENTES PROVENIENTES DE ARCHIVO JUDICIAL',
141-
'SUSPENDIDOS',
142-
'PARALIZADOS',
143-
'PARALIZADOS EN EJECUCIÓN DE SENTENCIA',
144-
'TERMINADOS',
145-
'TERMINADOS POR REMITIR AL ARCHIVO JUDICIAL',
146-
];
130+
// Obtener los nombres de los estatus desde la nueva tabla status_lists
131+
$statuses = \App\Models\StatusList::orderBy('name')->pluck('name');
147132
return response()->json($statuses);
148133
}
149134
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Http\Controllers;
6+
7+
use App\Models\Status;
8+
use Illuminate\Http\Request;
9+
use Inertia\Inertia;
10+
use Inertia\Response;
11+
12+
final class StatusController extends Controller
13+
{
14+
public function index(): Response
15+
{
16+
$statuses = Status::orderBy('name')->get();
17+
18+
return Inertia::render('Statuses/Index', [
19+
'statuses' => $statuses
20+
]);
21+
}
22+
23+
public function create(): Response
24+
{
25+
return Inertia::render('Statuses/Create');
26+
}
27+
28+
public function store(Request $request)
29+
{
30+
$validated = $request->validate([
31+
'name' => 'required|string|max:255|unique:statuses,name',
32+
'reason' => 'nullable|string|max:1000',
33+
]);
34+
35+
Status::create($validated);
36+
37+
return redirect()->route('statuses.index')
38+
->with('success', 'Estatus creado exitosamente.');
39+
}
40+
41+
public function edit(Status $status): Response
42+
{
43+
return Inertia::render('Statuses/Edit', [
44+
'status' => $status
45+
]);
46+
}
47+
48+
public function update(Request $request, Status $status)
49+
{
50+
$validated = $request->validate([
51+
'name' => 'required|string|max:255|unique:statuses,name,' . $status->id,
52+
'reason' => 'nullable|string|max:1000',
53+
]);
54+
55+
$status->update($validated);
56+
57+
return redirect()->route('statuses.index')
58+
->with('success', 'Estatus actualizado exitosamente.');
59+
}
60+
61+
public function destroy(Status $status)
62+
{
63+
$status->delete();
64+
65+
return redirect()->route('statuses.index')
66+
->with('success', 'Estatus eliminado exitosamente.');
67+
}
68+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Http\Controllers;
6+
7+
use App\Models\StatusList;
8+
use Illuminate\Http\Request;
9+
use Inertia\Inertia;
10+
use Inertia\Response;
11+
12+
final class StatusListController extends Controller
13+
{
14+
public function index(Request $request): Response
15+
{
16+
$query = StatusList::query();
17+
18+
$search = $request->input('search');
19+
// No aplicar búsqueda aquí, será en el frontend
20+
21+
$statuses = $query->orderBy('name')->get();
22+
23+
return Inertia::render('StatusLists/Index', [
24+
'statuses' => $statuses,
25+
'filters' => [
26+
'search' => $search,
27+
],
28+
]);
29+
}
30+
31+
public function create(): Response
32+
{
33+
return Inertia::render('StatusLists/Create');
34+
}
35+
36+
public function store(Request $request)
37+
{
38+
$validated = $request->validate([
39+
'name' => 'required|string|max:255|unique:status_lists,name',
40+
'description' => 'nullable|string|max:1000',
41+
]);
42+
StatusList::create($validated);
43+
return redirect()->route('status-lists.index')
44+
->with('success', 'Estatus creado exitosamente.');
45+
}
46+
47+
public function edit(StatusList $statusList): Response
48+
{
49+
return Inertia::render('StatusLists/Edit', [
50+
'status' => $statusList
51+
]);
52+
}
53+
54+
public function update(Request $request, StatusList $statusList)
55+
{
56+
$validated = $request->validate([
57+
'name' => 'required|string|max:255|unique:status_lists,name,' . $statusList->id,
58+
'description' => 'nullable|string|max:1000',
59+
]);
60+
$statusList->update($validated);
61+
return redirect()->route('status-lists.index')
62+
->with('success', 'Estatus actualizado exitosamente.');
63+
}
64+
65+
public function destroy(StatusList $statusList)
66+
{
67+
$statusList->delete();
68+
return redirect()->route('status-lists.index')
69+
->with('success', 'Estatus eliminado exitosamente.');
70+
}
71+
}

app/Models/Status.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Models;
6+
7+
use Illuminate\Database\Eloquent\Factories\HasFactory;
8+
use Illuminate\Database\Eloquent\Model;
9+
10+
final class Status extends Model
11+
{
12+
use HasFactory;
13+
14+
protected $fillable = [
15+
'name',
16+
'reason',
17+
];
18+
19+
protected $casts = [
20+
'created_at' => 'datetime',
21+
'updated_at' => 'datetime',
22+
];
23+
}

app/Models/StatusList.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Models;
6+
7+
use Illuminate\Database\Eloquent\Factories\HasFactory;
8+
use Illuminate\Database\Eloquent\Model;
9+
10+
final class StatusList extends Model
11+
{
12+
use HasFactory;
13+
14+
protected $table = 'status_lists';
15+
16+
protected $fillable = [
17+
'name',
18+
'description',
19+
];
20+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Illuminate\Database\Migrations\Migration;
6+
use Illuminate\Database\Schema\Blueprint;
7+
use Illuminate\Support\Facades\Schema;
8+
9+
return new class extends Migration {
10+
public function up(): void
11+
{
12+
Schema::create('status_lists', function (Blueprint $table) {
13+
$table->id();
14+
$table->string('name')->unique();
15+
$table->string('description')->nullable();
16+
$table->timestamps();
17+
});
18+
}
19+
20+
public function down(): void
21+
{
22+
Schema::dropIfExists('status_lists');
23+
}
24+
};

database/seeders/DatabaseSeeder.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,8 @@ public function run(): void
2929
// Crear un seeder para las relaciones entre expedientes, individuos y entidades legales
3030
CaseRelationsSeeder::class,
3131
CaseEventSeeder::class,
32+
// Llamar al seeder de estatus generales
33+
StatusListSeeder::class,
3234
]);
33-
34-
// Llamar al seeder de estatus
35-
\Database\Seeders\StatusSeeder::class;
3635
}
3736
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Database\Seeders;
6+
7+
use Illuminate\Database\Seeder;
8+
use App\Models\StatusList;
9+
10+
final class StatusListSeeder extends Seeder
11+
{
12+
public function run(): void
13+
{
14+
$statuses = [
15+
'EN TRAMITE',
16+
'EN FASE DE SUSTANCIACIÓN',
17+
'EN FASE DE SENTENCIA DENTRO DEL LAPSO',
18+
'EN FASE DE SENTENCIA FUERA DEL LAPSO',
19+
'EN FASE DE NOTIFICACIÓN, INTERPOSICIÓN DE RECURSO',
20+
'EN FASE DE EJECUCIÓN DE SENTENCIA',
21+
'DISTRIBUIDOS SIN ACEPTAR',
22+
'DISTRIBUIDOS Y ACEPTADOS SIN AUTO DE ADMISIÓN',
23+
'EXPEDIENTES PROVENIENTES DE ARCHIVO JUDICIAL',
24+
'SUSPENDIDOS',
25+
'PARALIZADOS',
26+
'PARALIZADOS EN EJECUCIÓN DE SENTENCIA',
27+
'TERMINADOS',
28+
'TERMINADOS POR REMITIR AL ARCHIVO JUDICIAL',
29+
];
30+
foreach ($statuses as $status) {
31+
StatusList::firstOrCreate([
32+
'name' => $status
33+
], [
34+
'description' => 'Estatus de ejemplo inicial'
35+
]);
36+
}
37+
}
38+
}

package-lock.json

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"react": "^19.0.0",
5555
"react-dom": "^19.0.0",
5656
"react-hot-toast": "^2.5.2",
57+
"sonner": "^2.0.3",
5758
"tailwind-merge": "^3.3.0",
5859
"tailwindcss": "^4.0.0",
5960
"tailwindcss-animate": "^1.0.7",

0 commit comments

Comments
 (0)