Skip to main content

Overview

The CasosController manages legal cases in the Sistema de Abogados application. It handles case creation, updates, deletion, search functionality, and relationship management with processes and opposing parties. Namespace: App\Http\Controllers Extends: Controller

Dependencies

The controller uses the following models:
  • Casos - Main case model
  • Cliente - Client model
  • TipoProceso - Process type model
  • ParteContraria - Opposing party model
  • Caso_has_proceso - Case-Process pivot model
  • Caso_has_PContraria - Case-Opposing party pivot model
  • CasoDocumento - Case document model

Methods

index()

Lists all cases with pagination and search functionality. Purpose: Display a paginated list of cases with optional search filtering Parameters: None (uses request('search') for search query) Returns: View caso.caso.index with cases and clients Response Data:
casos
Collection
Paginated collection of cases (5 per page)
clientes
Collection
All clients for filtering/assignment
Code Example:
public function index()
{
    $casos = Casos::search(request('search'))->paginate(5);
    $clientes = Cliente::all();
    return view('caso.caso.index', compact('casos','clientes'));
}
Route: caso.caso.index

create()

Displays the case creation form. Purpose: Show the form for creating a new case Parameters: None Returns: View caso.caso.create with clients Response Data:
clientes
Collection
All available clients to assign to the case
Code Example:
public function create()
{
    $clientes = Cliente::all();
    return view('caso.caso.create', compact('clientes'));
}
Route: caso.caso.create

store()

Creates a new case with validation. Purpose: Store a new case in the database Request Parameters:
n_caso
string
required
Case number or identifier
fecha_inicio
date
required
Case start date
fecha_final
date
Case end date (optional)
descripcion
text
Case description (optional)
estado
string
required
Case status
id_cliente
integer
required
Client ID associated with the case
Validation Rules:
[
    'n_caso' => 'required', 
    'fecha_inicio' => 'required',
    'fecha_final' => 'nullable',
    'descripcion' => 'nullable',
    'estado' => 'required',
    'id_cliente' => 'required'
]
Returns: Redirect to caso.caso.index with success message Success Message: “Caso registrado correctamente.” Code Example:
public function store(Request $request)
{
    $validated = $request->validate([
        'n_caso' => 'required', 
        'fecha_inicio' => 'required',
        'fecha_final' => 'nullable',
        'descripcion' => 'nullable',
        'estado' => 'required',
        'id_cliente' => 'required'
    ]);
    Casos::create($validated);
    return to_route('caso.caso.index')
        ->with('message', 'Caso registrado correctamente.');
}
Route: caso.caso.store

show()

Displays detailed information for a specific case. Purpose: Show complete case details including processes, opposing parties, and documents Parameters:
caso
Casos
required
Case model instance (route model binding)
Returns: View caso.caso.caso with case data and related entities Response Data:
caso
Casos
The case instance
procesos
Collection
All available process types
cas_procesos
Collection
Process types assigned to cases
p_contrarias
Collection
All opposing parties
cas_contrarias
Collection
Opposing parties assigned to cases
cas_documentos
Collection
Documents associated with cases
Code Example:
public function show(Casos $caso)
{
    $procesos = TipoProceso::all();
    $cas_procesos = Caso_has_proceso::all();
    $p_contrarias = ParteContraria::all();
    $cas_contrarias = Caso_has_PContraria::all();
    $cas_documentos = CasoDocumento::all();
    return view('caso.caso.caso', 
        compact('caso','procesos','cas_procesos',
                'p_contrarias','cas_contrarias','cas_documentos'));
}
Route: caso.caso.show

edit()

Displays the case edit form. Purpose: Show the form for editing an existing case Parameters:
caso
Casos
required
Case model instance (route model binding)
Returns: View caso.caso.edit with case and clients Response Data:
caso
Casos
The case instance to edit
clientes
Collection
All available clients
Code Example:
public function edit(Casos $caso)
{
    $clientes = Cliente::all();
    return view('caso.caso.edit', compact('caso','clientes'));
}
Route: caso.caso.edit

update()

Updates an existing case with validation. Purpose: Update case information in the database Parameters:
caso
Casos
required
Case model instance (route model binding)
Request Parameters:
n_caso
string
required
Case number or identifier
fecha_inicio
date
required
Case start date
fecha_final
date
Case end date (optional)
descripcion
text
Case description (optional)
estado
string
required
Case status
id_cliente
integer
Client ID (optional on update)
Validation Rules:
[
    'n_caso' => 'required', 
    'fecha_inicio' => 'required',
    'fecha_final' => 'nullable',
    'descripcion' => 'nullable',
    'estado' => 'required',
    'id_cliente' => 'nullable'
]
Returns: Redirect to caso.caso.index with success message Success Message: “Caso Actualisado correctamente.” Code Example:
public function update(Request $request, Casos $caso)
{
    $validated = $request->validate([
        'n_caso' => 'required', 
        'fecha_inicio' => 'required',
        'fecha_final' => 'nullable',
        'descripcion' => 'nullable',
        'estado' => 'required',
        'id_cliente' => 'nullable'
    ]);
    $caso->update($validated);
    return to_route('caso.caso.index')
        ->with('message', 'Caso Actualisado correctamente.');
}
Route: caso.caso.update

destroy()

Deletes a case from the database. Purpose: Remove a case with foreign key constraint handling Parameters:
caso
Casos
required
Case model instance (route model binding)
Returns:
  • Success: Redirect to caso.caso.index with success message
  • Error: Back with alert message if constraints exist
Success Message: “Caso eliminado correctamente.” Error Message: “No puede eliminar! Antes elimine sus conexiones.” Code Example:
public function destroy(Casos $caso)
{
    try{
        $caso->delete();
        return to_route('caso.caso.index')
            ->with('messagedestroy', 'Caso eliminado correctamente.');
    }catch(\Exception $e){
        return back()->with('messageAlert', 
            'No puede eliminar! Antes elimine sus conexiones.');
    }
}
Route: caso.caso.destroy Notes:
  • Uses try-catch to handle foreign key constraint violations
  • Related entities must be removed before deleting the case

assignProceso()

Assigns a process type to a case. Purpose: Create a relationship between a case and a process type Parameters:
caso
Casos
required
Case model instance (route model binding)
Request Parameters:
id_tipo_proceso
integer
required
Process type ID to assign
Returns: Back to previous page with success message Success Message: “Proceso asignado.” Code Example:
public function assignProceso(Request $request, Casos $caso)
{
    $validated = $request->input();
    $validated['id_caso'] = $caso->id;
    Caso_has_proceso::create($validated);
    return back()->with('message', 'Proceso asignado.');
}
Route: Custom route for assigning process Notes:
  • Automatically sets id_caso from the route parameter
  • Creates a pivot table entry

removeProceso()

Removes a process type assignment from a case. Purpose: Delete the relationship between a case and a process type Parameters:
cas_proceso
Caso_has_proceso
required
Case-process pivot model instance (route model binding)
Returns: Back to previous page with success message Success Message: “Proceso Removido.” Code Example:
public function removeProceso(Caso_has_proceso $cas_proceso)
{
    $cas_proceso->delete();
    return back()->with('messagedestroy', 'Proceso Removido.');
}
Route: Custom route for removing process

assignPContraria()

Assigns an opposing party to a case. Purpose: Create a relationship between a case and an opposing party Parameters:
caso
Casos
required
Case model instance (route model binding)
Request Parameters:
id_p_contraria
integer
required
Opposing party ID to assign
Returns: Back to previous page with success message Success Message: “Parte contraria asignada.” Code Example:
public function assignPContraria(Request $request, Casos $caso)
{
    $validated = $request->input();
    $validated['id_caso'] = $caso->id;
    Caso_has_PContraria::create($validated);
    return back()->with('message', 'Parte contraria asignada.');
}
Route: Custom route for assigning opposing party Notes:
  • Automatically sets id_caso from the route parameter
  • Creates a pivot table entry

removePContraria()

Removes an opposing party assignment from a case. Purpose: Delete the relationship between a case and an opposing party Parameters:
cas_contraria
Caso_has_PContraria
required
Case-opposing party pivot model instance (route model binding)
Returns: Back to previous page with success message Success Message: “Parte contraria Removido.” Code Example:
public function removePContraria(Caso_has_PContraria $cas_contraria)
{
    $cas_contraria->delete();
    return back()->with('messagedestroy', 'Parte contraria Removido.');
}
Route: Custom route for removing opposing party

Usage Examples

Creating a New Case

// POST /casos
$data = [
    'n_caso' => 'CASO-2026-001',
    'fecha_inicio' => '2026-03-10',
    'fecha_final' => null,
    'descripcion' => 'Demanda por incumplimiento de contrato',
    'estado' => 'Activo',
    'id_cliente' => 5
];

Updating a Case

// PUT /casos/{caso}
$data = [
    'n_caso' => 'CASO-2026-001',
    'fecha_inicio' => '2026-03-10',
    'fecha_final' => '2026-12-31',
    'descripcion' => 'Demanda por incumplimiento de contrato - En proceso',
    'estado' => 'En Proceso',
    'id_cliente' => 5
];

Assigning a Process Type

// POST /casos/{caso}/assign-proceso
$data = [
    'id_tipo_proceso' => 3
];

Searching Cases

// GET /casos?search=CASO-2026
// The search parameter is automatically handled by the Casos model

Error Handling

Deletion Constraints

When attempting to delete a case with related records:
// If foreign key constraints exist
return back()->with('messageAlert', 
    'No puede eliminar! Antes elimine sus conexiones.');

Validation Errors

Laravel’s validation will automatically return error messages for:
  • Missing required fields
  • Invalid data formats
  • Type mismatches
  • Casos - Main case model at /home/daytona/workspace/source/app/Models/Casos.php
  • Cliente - Client model
  • TipoProceso - Process types for case categorization
  • ParteContraria - Opposing parties in cases
  • CasoDocumento - Documents attached to cases

Build docs developers (and LLMs) love