Skip to main content

Overview

El sistema cuenta con tres modelos relacionados para la gestión de actividades:
  • Actividad - Modelo base para actividades generales
  • ActividadCaso - Actividades específicas para casos legales
  • ActividadConciliacion - Actividades para expedientes de conciliación
Todos los modelos utilizan Laravel Scout para búsqueda avanzada y están diseñados para integración con sistemas de calendario.

Actividad (Base Model)

Modelo base para actividades y eventos generales del sistema. Namespace: App\Models\Actividad Table: actividads Traits:
  • HasFactory - Soporte para factories de Laravel
  • Searchable - Integración con Laravel Scout

Fillable Attributes

titulo
string
required
Título de la actividad o evento
descripcion
text
Descripción detallada de la actividad
direccion
string
Dirección o ubicación donde se realizará la actividad
fecha
date
required
Fecha programada para la actividad
hora
time
required
Hora programada para la actividad

Scout Configuration

public function toSearchableArray()
{
    return [
        'titulo' => $this->titulo,
        'descripcion' => $this->descripcion,
        'fecha' => $this->fecha,
    ];
}

Complete Model Code

/home/daytona/workspace/source/app/Models/Actividad.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;

class Actividad extends Model
{
    use HasFactory, Searchable;
    
    protected $fillable = [
        'titulo',
        'descripcion',
        'direccion',
        'fecha',
        'hora',
    ];

    public function toSearchableArray()
    {
        return [
            'titulo' => $this->titulo,
            'descripcion' => $this->descripcion,
            'fecha' => $this->fecha,
        ];
    }
}

ActividadCaso

Actividades específicas vinculadas a casos legales, como audiencias, diligencias o reuniones. Namespace: App\Models\ActividadCaso Table: actividad_casos Traits:
  • HasFactory - Soporte para factories de Laravel
  • Searchable - Integración con Laravel Scout

Fillable Attributes

titulo
string
required
Título de la actividad del caso
descripcion
text
Descripción detallada de la actividad
direccion
string
Dirección donde se realizará la actividad
fecha
date
required
Fecha programada para la actividad
hora
time
required
Hora programada para la actividad
id_caso
integer
required
ID del caso asociado (foreign key)

Relationships

caso()

Relación muchos a uno con el caso legal asociado. Type: BelongsTo Returns: Illuminate\Database\Eloquent\Relations\BelongsTo
public function caso(): BelongsTo
{
    return $this->belongsTo(Casos::class, 'id_caso', 'id');
}

Scout Configuration

public function toSearchableArray()
{
    return [
        'titulo' => $this->titulo,
        'descripcion' => $this->descripcion,
        'fecha' => $this->fecha,
    ];
}

Complete Model Code

/home/daytona/workspace/source/app/Models/ActividadCaso.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Laravel\Scout\Searchable;

class ActividadCaso extends Model
{
    use HasFactory, Searchable;
    
    protected $fillable = [
        'titulo',
        'descripcion',
        'direccion',
        'fecha',
        'hora',
        'id_caso',
    ];

    public function caso(): BelongsTo
    {
        return $this->belongsTo(Casos::class, 'id_caso', 'id');
    }
    
    public function toSearchableArray()
    {
        return [
            'titulo' => $this->titulo,
            'descripcion' => $this->descripcion,
            'fecha' => $this->fecha,
        ];
    }
}

ActividadConciliacion

Actividades específicas para expedientes de conciliación, como audiencias de conciliación o sesiones informativas. Namespace: App\Models\ActividadConciliacion Table: actividad_conciliacions Traits:
  • HasFactory - Soporte para factories de Laravel
  • Searchable - Integración con Laravel Scout

Fillable Attributes

titulo
string
required
Título de la actividad de conciliación
descripcion
text
Descripción detallada de la actividad
direccion
string
Dirección del centro de conciliación o sala
fecha
date
required
Fecha programada para la actividad
hora
time
required
Hora programada para la actividad
id_expediente
integer
required
ID del expediente asociado (foreign key)

Relationships

expediente()

Relación muchos a uno con el expediente de conciliación asociado. Type: BelongsTo Returns: Illuminate\Database\Eloquent\Relations\BelongsTo
public function expediente(): BelongsTo
{
    return $this->belongsTo(Expedientes::class, 'id_expediente', 'id');
}

Scout Configuration

public function toSearchableArray()
{
    return [
        'titulo' => $this->titulo,
        'descripcion' => $this->descripcion,
        'fecha' => $this->fecha,
    ];
}

Complete Model Code

/home/daytona/workspace/source/app/Models/ActividadConciliacion.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Laravel\Scout\Searchable;

class ActividadConciliacion extends Model
{
    use HasFactory, Searchable;
    
    protected $fillable = [
        'titulo',
        'descripcion',
        'direccion',
        'fecha',
        'hora',
        'id_expediente',
    ];

    public function expediente(): BelongsTo
    {
        return $this->belongsTo(Expedientes::class, 'id_expediente', 'id');
    }

    public function toSearchableArray()
    {
        return [
            'titulo' => $this->titulo,
            'descripcion' => $this->descripcion,
            'fecha' => $this->fecha,
        ];
    }
}

Usage Examples

use App\Models\ActividadCaso;
use App\Models\Casos;

$caso = Casos::find(1);

// Crear actividad directamente
$actividad = ActividadCaso::create([
    'titulo' => 'Audiencia Preliminar',
    'descripcion' => 'Audiencia preliminar para presentación de pruebas',
    'direccion' => 'Juzgado Civil - Sala 3',
    'fecha' => '2024-03-15',
    'hora' => '09:00:00',
    'id_caso' => $caso->id
]);

// O crear desde la relación del caso
$caso->actividadCasos()->create([
    'titulo' => 'Diligencia de Notificación',
    'descripcion' => 'Notificación a la parte demandada',
    'fecha' => '2024-03-10',
    'hora' => '14:00:00'
]);

Database Schema

-- Actividades base
CREATE TABLE actividads (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    titulo VARCHAR(255) NOT NULL,
    descripcion TEXT,
    direccion VARCHAR(255),
    fecha DATE NOT NULL,
    hora TIME NOT NULL,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    
    INDEX idx_fecha (fecha),
    INDEX idx_hora (hora)
);

-- Actividades de casos
CREATE TABLE actividad_casos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    titulo VARCHAR(255) NOT NULL,
    descripcion TEXT,
    direccion VARCHAR(255),
    fecha DATE NOT NULL,
    hora TIME NOT NULL,
    id_caso BIGINT UNSIGNED NOT NULL,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    
    FOREIGN KEY (id_caso) REFERENCES casos(id) ON DELETE CASCADE,
    INDEX idx_id_caso (id_caso),
    INDEX idx_fecha (fecha),
    INDEX idx_hora (hora)
);

-- Actividades de conciliación
CREATE TABLE actividad_conciliacions (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    titulo VARCHAR(255) NOT NULL,
    descripcion TEXT,
    direccion VARCHAR(255),
    fecha DATE NOT NULL,
    hora TIME NOT NULL,
    id_expediente BIGINT UNSIGNED NOT NULL,
    created_at TIMESTAMP NULL,
    updated_at TIMESTAMP NULL,
    
    FOREIGN KEY (id_expediente) REFERENCES expedientes(id) ON DELETE CASCADE,
    INDEX idx_id_expediente (id_expediente),
    INDEX idx_fecha (fecha),
    INDEX idx_hora (hora)
);

Build docs developers (and LLMs) love