Módulo Actividades
El módulo de Actividades ( activities ) es el componente encargado de gestionar el registro y administración de las actividades municipales del Sistema de Gestión de Resultados.
Creación del módulo Activities¶
Este módulo se creó mediante el comando startapp de Django:
(.venv) python manage.py startapp activities
Este comando genera la estructura inicial de una aplicación Django lista para trabajar:
activities
├── migrations #(1)!
│ └── __init__.py
├── templates #(2)!
│ └── activities
├── __init__.py
├── admin.py #(3)!
├── apps.py #(4)!
├── forms.py #(5)!
├── models.py #(6)!
├── tests.py #(7)!
├── urls.py #(8)!
└── views.py #(9)!
- Se generarán las migraciones necesarias para aplicar los cambios del modelo
Activityen la base de datos. - Se crearán las interfaces HTML utilizadas para listar, registrar y gestionar las actividades.
- Se configurará la administración del modelo
Activitymediante Django Admin. - Se definirá la configuración y los metadatos de la aplicación
activities. - Se implementarán los formularios para registrar y validar los datos de las actividades.
- Se definirá el modelo
Activityy sus relaciones con usuarios y delegaciones. - Se implementarán pruebas para comprobar el funcionamiento del módulo.
- Se definirán las rutas para acceder a las funcionalidades de
activities. - Se implementarán las vistas encargadas de gestionar el listado, registro y administración de actividades.
Esta estructura permite separar los modelos de datos, formularios, vistas, rutas y elementos administrativos del módulo.
Modelo de datos¶
El modelo de datos del módulo se compone de las entidades Activity y Contact. La actividad mantiene relaciones con los usuarios responsables y las delegaciones definidas en el módulo accounts.
Contacto¶
El modelo Contact permite almacenar los datos de una persona representante en una actividad.
class Contact(models.Model):
name = models.CharField("Nombre", max_length=200)
phone = models.CharField("Teléfono", max_length=20)
email = models.EmailField("Correo", blank=True)
observations = models.TextField("Observaciones", blank=True)
El contacto registra nombre, teléfono, correo electrónico y observaciones.
Ejemplo de contacto
contact = Contact.objects.create(
name="Carlos González",
phone="+56987654321",
email="carlos.gonzalez@example.com",
observations="Presidente de la Junta de Vecinos Villa El Sol.",
)
- Nombre: Carlos González
- Teléfono: +56987654321
- Correo: carlos.gonzalez@example.com
- Observaciones: Presidente de la Junta de Vecinos Villa El Sol.
Actividad¶
El modelo Activity permite almacenar y gestionar la información asociada a las actividades municipales registradas en el sistema.
class Activity(models.Model):
class Status(models.TextChoices):
INGRESADO = "INGRESADO", "Ingresado"
PENDIENTE = "PENDIENTE", "Pendiente"
EN_PROCESO = "EN_PROCESO", "En proceso"
REALIZADO = "REALIZADO", "Realizado"
name = models.CharField("Actividad", max_length=200)
description = models.TextField("Solicitud / problema", blank=True)
action = models.TextField("Acción", blank=True)
item = models.CharField("Ítem", max_length=200, blank=True)
contact = models.ForeignKey(
Contact,
on_delete=models.PROTECT,
related_name="activities",
verbose_name="Contacto",
null=True,
)
delegation = models.ForeignKey(
Delegacion,
on_delete=models.PROTECT,
related_name="activities",
verbose_name="Delegación",
)
responsible = models.ForeignKey(
User,
on_delete=models.PROTECT,
related_name="responsible_activities",
verbose_name="Responsable",
)
start_date = models.DateField("Fecha")
end_date = models.DateField(
"Fecha de término",
null=True,
blank=True,
)
status = models.CharField(
"Estado",
max_length=20,
choices=Status.choices,
default=Status.INGRESADO,
)
Actividad¶
El modelo Activity representa el registro principal del módulo.
classDiagram
class Activity {
+name
+description
+action
+item
+contact
+delegation
+responsible
+start_date
+end_date
+status
}
class Contact {
+name
+phone
+email
+observations
}
class User
class Delegacion
Activity --> Contact : contacto
Activity --> User : responsable
Activity --> Delegacion : delegación
La actividad almacena la información de la solicitud, la acción realizada, el ítem asociado, el contacto, la delegación responsable, el usuario encargado, las fechas y el estado del registro.
Estados¶
El modelo utiliza TextChoices para definir los estados permitidos:
class Status(models.TextChoices):
INGRESADO = "INGRESADO", "Ingresado"
PENDIENTE = "PENDIENTE", "Pendiente"
EN_PROCESO = "EN_PROCESO", "En proceso"
REALIZADO = "REALIZADO", "Realizado"
Esto permite mantener un conjunto controlado de estados para representar el avance de cada actividad.
flowchart LR
A[Ingresado] --> B[Pendiente]
B --> C[En proceso]
C --> D[Realizado]
El estado inicial de una actividad es Ingresado y puede avanzar posteriormente según el proceso de gestión.
Relaciones¶
Las relaciones utilizan ForeignKey con on_delete=models.PROTECT, evitando que un contacto, usuario o delegación pueda eliminarse mientras existan actividades asociadas.
erDiagram
CONTACT ||--o{ ACTIVITY : "asocia"
USER ||--o{ ACTIVITY : "responsable"
DELEGACION ||--o{ ACTIVITY : "gestiona"
ACTIVITY {
string name
text description
text action
string item
date start_date
date end_date
string status
}
CONTACT {
string name
string phone
string email
text observations
}
La actividad almacena su nombre, descripción, delegación asociada, usuario responsable, fechas de inicio y término y su estado de activación.
Registro de actividades¶
El registro se realiza mediante un formulario Django. Para mantener las reglas de negocio, algunos datos son determinados automáticamente a partir del usuario autenticado.
flowchart TD
A[Usuario autenticado] --> B[Formulario de actividad]
B --> C[Validación]
C -->|Válido| D[Asignar usuario y delegación]
D --> E[Guardar actividad]
C -->|Inválido| B
E --> F[Actividad registrada]
La delegación y el responsable no son seleccionados libremente por el usuario cuando corresponden a información determinada por su sesión.
Permisos¶
El módulo incorpora permisos específicos para controlar las operaciones disponibles.
manage_activities
validate_activities
Estos permisos permiten diferenciar las acciones de gestión y validación de actividades según el cargo y los permisos asignados al usuario.
URLs¶
Las rutas del módulo se encuentran definidas en urls.py y utilizan el espacio de nombres activities.
app_name = "activities"
Esto permite utilizar las rutas mediante nombres, por ejemplo:
{% url "activities:list" %}
Administración¶
El modelo Activity se encuentra integrado con Django Admin, permitiendo administrar los registros desde el panel de administración del sistema.
La configuración del módulo mantiene separadas las funciones administrativas de las operaciones disponibles para los usuarios finales.
Flujo general¶
flowchart LR
U[Usuario] --> L[Listado]
L --> C[Crear actividad]
C --> V[Validar datos]
V --> G[Guardar]
G --> L
El módulo constituye la base para las funcionalidades de seguimiento, validación y control de las actividades del SGR.
Para el index queda resumido, y este artículo ya entra directamente en la implementación del módulo activities.