Spaces:
Sleeping
Sleeping
Se agregan opciones de modalidades para Napping
Browse files- tecnicas/admin.py +2 -15
- tecnicas/controllers/views_controller/session_management/details/details_napping_controller.py +19 -18
- tecnicas/migrations/0025_modalidad_alter_sesionsensorial_codigo_sesion_and_more.py +36 -0
- tecnicas/migrations/0026_tecnica_modalidad_and_more.py +27 -0
- tecnicas/migrations/0027_alter_sesionsensorial_codigo_sesion_and_more.py +24 -0
- tecnicas/migrations/0028_alter_sesionsensorial_codigo_sesion_and_more.py +24 -0
- tecnicas/models/__init__.py +2 -0
- tecnicas/models/modalidad.py +8 -0
- tecnicas/models/tecnica.py +4 -0
- tecnicas/static/js/details-session.js +8 -1
- tecnicas/templates/tecnicas/manage_sesions/details-session-napping.html +8 -6
tecnicas/admin.py
CHANGED
|
@@ -1,20 +1,6 @@
|
|
| 1 |
from django.contrib import admin
|
| 2 |
|
| 3 |
-
from .models import CategoriaTecnica, TipoTecnica, TipoEscala, EstiloPalabra
|
| 4 |
-
|
| 5 |
-
from .models import Catador, Presentador
|
| 6 |
-
|
| 7 |
-
from .models import Tecnica, SesionSensorial
|
| 8 |
-
|
| 9 |
-
from .models import EsAtributo, Palabra, Vocabulario
|
| 10 |
-
|
| 11 |
-
from .models import Etiqueta, Escala, EtiquetasEscala
|
| 12 |
-
|
| 13 |
-
from .models import Producto, Participacion
|
| 14 |
-
|
| 15 |
-
from .models import Orden, Posicion
|
| 16 |
-
|
| 17 |
-
from .models import Dato, ValorDecimal, ValorBooleano, Calificacion, ListaPalabras, GrupoProducto
|
| 18 |
|
| 19 |
# Register your models here.
|
| 20 |
admin.site.register(CategoriaTecnica)
|
|
@@ -48,3 +34,4 @@ admin.site.register(ValorBooleano)
|
|
| 48 |
admin.site.register(Calificacion)
|
| 49 |
admin.site.register(ListaPalabras)
|
| 50 |
admin.site.register(GrupoProducto)
|
|
|
|
|
|
| 1 |
from django.contrib import admin
|
| 2 |
|
| 3 |
+
from .models import CategoriaTecnica, TipoTecnica, TipoEscala, EstiloPalabra, Catador, Presentador, Tecnica, SesionSensorial, EsAtributo, Palabra, Vocabulario, Etiqueta, Escala, EtiquetasEscala, Producto, Participacion, Orden, Posicion, Dato, ValorDecimal, ValorBooleano, Calificacion, ListaPalabras, GrupoProducto, Modalidad
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
|
| 5 |
# Register your models here.
|
| 6 |
admin.site.register(CategoriaTecnica)
|
|
|
|
| 34 |
admin.site.register(Calificacion)
|
| 35 |
admin.site.register(ListaPalabras)
|
| 36 |
admin.site.register(GrupoProducto)
|
| 37 |
+
admin.site.register(Modalidad)
|
tecnicas/controllers/views_controller/session_management/details/details_napping_controller.py
CHANGED
|
@@ -2,7 +2,7 @@ from django.http import HttpRequest
|
|
| 2 |
from django.shortcuts import redirect
|
| 3 |
from django.urls import reverse
|
| 4 |
from .details_controller import DetallesController
|
| 5 |
-
from tecnicas.models import SesionSensorial, Presentador
|
| 6 |
from collections import defaultdict
|
| 7 |
|
| 8 |
|
|
@@ -19,6 +19,17 @@ class DetallesNappingController(DetallesController):
|
|
| 19 |
|
| 20 |
self.defineStatus()
|
| 21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
return self.context
|
| 23 |
|
| 24 |
def defineStatus(self):
|
|
@@ -34,27 +45,20 @@ class DetallesNappingController(DetallesController):
|
|
| 34 |
self.context["status"] = "En espera de la siguiente acción"
|
| 35 |
|
| 36 |
def controllPostResponse(self, request: HttpRequest, action: str):
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
|
| 41 |
elif action == "delete_session":
|
| 42 |
self.deleteSesorialSession()
|
| 43 |
response = redirect(
|
| 44 |
reverse("cata_system:panel_sesiones", kwargs={"page": 1}))
|
| 45 |
|
| 46 |
-
return response
|
| 47 |
-
|
| 48 |
-
def startRepetition(self, presenter: Presentador, request: HttpRequest):
|
| 49 |
-
creator = presenter
|
| 50 |
-
technique = self.session.tecnica
|
| 51 |
-
|
| 52 |
-
repetition = technique.repeticion
|
| 53 |
-
|
| 54 |
-
if not repetition:
|
| 55 |
-
return self.startNapping(request=request)
|
| 56 |
else:
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
| 58 |
|
| 59 |
def startNapping(self, request: HttpRequest):
|
| 60 |
if request.user.user_presentador.user.username != self.session.creadoPor.user.username:
|
|
@@ -63,10 +67,7 @@ class DetallesNappingController(DetallesController):
|
|
| 63 |
return self.controllGetResponse(error="La sesión ya está activada", request=request)
|
| 64 |
|
| 65 |
self.session.activo = True
|
| 66 |
-
self.session.tecnica.repeticion = self.session.tecnica.repeticion + 1
|
| 67 |
-
|
| 68 |
self.session.save()
|
| 69 |
-
self.session.tecnica.save()
|
| 70 |
|
| 71 |
parameters = {
|
| 72 |
"session_code": self.session.codigo_sesion
|
|
|
|
| 2 |
from django.shortcuts import redirect
|
| 3 |
from django.urls import reverse
|
| 4 |
from .details_controller import DetallesController
|
| 5 |
+
from tecnicas.models import SesionSensorial, Presentador, Modalidad
|
| 6 |
from collections import defaultdict
|
| 7 |
|
| 8 |
|
|
|
|
| 19 |
|
| 20 |
self.defineStatus()
|
| 21 |
|
| 22 |
+
modes = Modalidad.objects.all()
|
| 23 |
+
technique_modes = self.session.tecnica.modalidad.all()
|
| 24 |
+
|
| 25 |
+
if not technique_modes.exists():
|
| 26 |
+
self.context["modes"] = modes
|
| 27 |
+
else:
|
| 28 |
+
use_modes = technique_modes.values_list("id", flat=True)
|
| 29 |
+
|
| 30 |
+
self.context["modes"] = modes.exclude(
|
| 31 |
+
id__in=use_modes)
|
| 32 |
+
|
| 33 |
return self.context
|
| 34 |
|
| 35 |
def defineStatus(self):
|
|
|
|
| 45 |
self.context["status"] = "En espera de la siguiente acción"
|
| 46 |
|
| 47 |
def controllPostResponse(self, request: HttpRequest, action: str):
|
| 48 |
+
print(action)
|
| 49 |
+
if action == "start_sin_modalidad":
|
| 50 |
+
response = self.startNapping(request=request)
|
| 51 |
|
| 52 |
elif action == "delete_session":
|
| 53 |
self.deleteSesorialSession()
|
| 54 |
response = redirect(
|
| 55 |
reverse("cata_system:panel_sesiones", kwargs={"page": 1}))
|
| 56 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
else:
|
| 58 |
+
response= self.controllGetResponse(
|
| 59 |
+
error="Modalidad sin implantar", request=request)
|
| 60 |
+
|
| 61 |
+
return response
|
| 62 |
|
| 63 |
def startNapping(self, request: HttpRequest):
|
| 64 |
if request.user.user_presentador.user.username != self.session.creadoPor.user.username:
|
|
|
|
| 67 |
return self.controllGetResponse(error="La sesión ya está activada", request=request)
|
| 68 |
|
| 69 |
self.session.activo = True
|
|
|
|
|
|
|
| 70 |
self.session.save()
|
|
|
|
| 71 |
|
| 72 |
parameters = {
|
| 73 |
"session_code": self.session.codigo_sesion
|
tecnicas/migrations/0025_modalidad_alter_sesionsensorial_codigo_sesion_and_more.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Generated by Django 5.2.1 on 2025-11-28 19:09
|
| 2 |
+
|
| 3 |
+
import django.db.models.deletion
|
| 4 |
+
import shortuuid.main
|
| 5 |
+
from django.db import migrations, models
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class Migration(migrations.Migration):
|
| 9 |
+
|
| 10 |
+
dependencies = [
|
| 11 |
+
('tecnicas', '0024_alter_sesionsensorial_codigo_sesion_grupoproducto'),
|
| 12 |
+
]
|
| 13 |
+
|
| 14 |
+
operations = [
|
| 15 |
+
migrations.CreateModel(
|
| 16 |
+
name='Modalidad',
|
| 17 |
+
fields=[
|
| 18 |
+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
| 19 |
+
('nombre', models.CharField(max_length=255)),
|
| 20 |
+
],
|
| 21 |
+
),
|
| 22 |
+
migrations.AlterField(
|
| 23 |
+
model_name='sesionsensorial',
|
| 24 |
+
name='codigo_sesion',
|
| 25 |
+
field=models.CharField(default=shortuuid.main.ShortUUID.uuid, editable=False, max_length=22, primary_key=True, serialize=False),
|
| 26 |
+
),
|
| 27 |
+
migrations.CreateModel(
|
| 28 |
+
name='TecnicaModalidad',
|
| 29 |
+
fields=[
|
| 30 |
+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
| 31 |
+
('usado', models.BooleanField(default=False)),
|
| 32 |
+
('modalidad', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='modalidad_tecnica', to='tecnicas.modalidad')),
|
| 33 |
+
('tecnica', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tecnica_modalidad', to='tecnicas.tecnica')),
|
| 34 |
+
],
|
| 35 |
+
),
|
| 36 |
+
]
|
tecnicas/migrations/0026_tecnica_modalidad_and_more.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Generated by Django 5.2.1 on 2025-11-28 19:39
|
| 2 |
+
|
| 3 |
+
import shortuuid.main
|
| 4 |
+
from django.db import migrations, models
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
class Migration(migrations.Migration):
|
| 8 |
+
|
| 9 |
+
dependencies = [
|
| 10 |
+
('tecnicas', '0025_modalidad_alter_sesionsensorial_codigo_sesion_and_more'),
|
| 11 |
+
]
|
| 12 |
+
|
| 13 |
+
operations = [
|
| 14 |
+
migrations.AddField(
|
| 15 |
+
model_name='tecnica',
|
| 16 |
+
name='modalidad',
|
| 17 |
+
field=models.ManyToManyField(related_name='modalidad_tecnica', to='tecnicas.modalidad'),
|
| 18 |
+
),
|
| 19 |
+
migrations.AlterField(
|
| 20 |
+
model_name='sesionsensorial',
|
| 21 |
+
name='codigo_sesion',
|
| 22 |
+
field=models.CharField(default=shortuuid.main.ShortUUID.uuid, editable=False, max_length=22, primary_key=True, serialize=False),
|
| 23 |
+
),
|
| 24 |
+
migrations.DeleteModel(
|
| 25 |
+
name='TecnicaModalidad',
|
| 26 |
+
),
|
| 27 |
+
]
|
tecnicas/migrations/0027_alter_sesionsensorial_codigo_sesion_and_more.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Generated by Django 5.2.1 on 2025-11-28 19:59
|
| 2 |
+
|
| 3 |
+
import shortuuid.main
|
| 4 |
+
from django.db import migrations, models
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
class Migration(migrations.Migration):
|
| 8 |
+
|
| 9 |
+
dependencies = [
|
| 10 |
+
('tecnicas', '0026_tecnica_modalidad_and_more'),
|
| 11 |
+
]
|
| 12 |
+
|
| 13 |
+
operations = [
|
| 14 |
+
migrations.AlterField(
|
| 15 |
+
model_name='sesionsensorial',
|
| 16 |
+
name='codigo_sesion',
|
| 17 |
+
field=models.CharField(default=shortuuid.main.ShortUUID.uuid, editable=False, max_length=22, primary_key=True, serialize=False),
|
| 18 |
+
),
|
| 19 |
+
migrations.AlterField(
|
| 20 |
+
model_name='tecnica',
|
| 21 |
+
name='modalidad',
|
| 22 |
+
field=models.ManyToManyField(blank=True, null=True, related_name='modalidad_tecnica', to='tecnicas.modalidad'),
|
| 23 |
+
),
|
| 24 |
+
]
|
tecnicas/migrations/0028_alter_sesionsensorial_codigo_sesion_and_more.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Generated by Django 5.2.1 on 2025-11-28 20:10
|
| 2 |
+
|
| 3 |
+
import shortuuid.main
|
| 4 |
+
from django.db import migrations, models
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
class Migration(migrations.Migration):
|
| 8 |
+
|
| 9 |
+
dependencies = [
|
| 10 |
+
('tecnicas', '0027_alter_sesionsensorial_codigo_sesion_and_more'),
|
| 11 |
+
]
|
| 12 |
+
|
| 13 |
+
operations = [
|
| 14 |
+
migrations.AlterField(
|
| 15 |
+
model_name='sesionsensorial',
|
| 16 |
+
name='codigo_sesion',
|
| 17 |
+
field=models.CharField(default=shortuuid.main.ShortUUID.uuid, editable=False, max_length=22, primary_key=True, serialize=False),
|
| 18 |
+
),
|
| 19 |
+
migrations.AlterField(
|
| 20 |
+
model_name='tecnica',
|
| 21 |
+
name='modalidad',
|
| 22 |
+
field=models.ManyToManyField(blank=True, related_name='modalidad_tecnica', to='tecnicas.modalidad'),
|
| 23 |
+
),
|
| 24 |
+
]
|
tecnicas/models/__init__.py
CHANGED
|
@@ -3,6 +3,7 @@ from .etiqueta import Etiqueta
|
|
| 3 |
from .tipo_escala import TipoEscala
|
| 4 |
from .tipo_tecnica import TipoTecnica
|
| 5 |
from .estilo_palabra import EstiloPalabra
|
|
|
|
| 6 |
|
| 7 |
from .presentador import Presentador
|
| 8 |
from .catador import Catador
|
|
@@ -31,3 +32,4 @@ from .participacion import Participacion
|
|
| 31 |
|
| 32 |
from .lista_palabras import ListaPalabras
|
| 33 |
from .grupo_producto import GrupoProducto
|
|
|
|
|
|
| 3 |
from .tipo_escala import TipoEscala
|
| 4 |
from .tipo_tecnica import TipoTecnica
|
| 5 |
from .estilo_palabra import EstiloPalabra
|
| 6 |
+
from .modalidad import Modalidad
|
| 7 |
|
| 8 |
from .presentador import Presentador
|
| 9 |
from .catador import Catador
|
|
|
|
| 32 |
|
| 33 |
from .lista_palabras import ListaPalabras
|
| 34 |
from .grupo_producto import GrupoProducto
|
| 35 |
+
|
tecnicas/models/modalidad.py
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from django.db import models
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
class Modalidad(models.Model):
|
| 5 |
+
nombre = models.CharField(max_length=255)
|
| 6 |
+
|
| 7 |
+
def __str__(self):
|
| 8 |
+
return self.nombre
|
tecnicas/models/tecnica.py
CHANGED
|
@@ -2,6 +2,7 @@ from django.db import models
|
|
| 2 |
|
| 3 |
from .estilo_palabra import EstiloPalabra
|
| 4 |
from .tipo_tecnica import TipoTecnica
|
|
|
|
| 5 |
|
| 6 |
|
| 7 |
class Tecnica(models.Model):
|
|
@@ -14,6 +15,9 @@ class Tecnica(models.Model):
|
|
| 14 |
id_estilo = models.ForeignKey(
|
| 15 |
EstiloPalabra, on_delete=models.CASCADE, related_name="estilo_tecnica")
|
| 16 |
|
|
|
|
|
|
|
|
|
|
| 17 |
def __str__(self):
|
| 18 |
return f"{self.id} : {self.tipo_tecnica.nombre_tecnica} : {self.id_estilo.nombre_estilo}"
|
| 19 |
|
|
|
|
| 2 |
|
| 3 |
from .estilo_palabra import EstiloPalabra
|
| 4 |
from .tipo_tecnica import TipoTecnica
|
| 5 |
+
from .modalidad import Modalidad
|
| 6 |
|
| 7 |
|
| 8 |
class Tecnica(models.Model):
|
|
|
|
| 15 |
id_estilo = models.ForeignKey(
|
| 16 |
EstiloPalabra, on_delete=models.CASCADE, related_name="estilo_tecnica")
|
| 17 |
|
| 18 |
+
modalidad = models.ManyToManyField(
|
| 19 |
+
Modalidad, related_name="modalidad_tecnica", blank=True)
|
| 20 |
+
|
| 21 |
def __str__(self):
|
| 22 |
return f"{self.id} : {self.tipo_tecnica.nombre_tecnica} : {self.id_estilo.nombre_estilo}"
|
| 23 |
|
tecnicas/static/js/details-session.js
CHANGED
|
@@ -17,4 +17,11 @@ function deleteSession() {
|
|
| 17 |
const input = actionForm.querySelector(".action-option")
|
| 18 |
input.value = "delete_session";
|
| 19 |
actionForm.submit();
|
| 20 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
const input = actionForm.querySelector(".action-option")
|
| 18 |
input.value = "delete_session";
|
| 19 |
actionForm.submit();
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
function startSession(nameMode) {
|
| 23 |
+
const nameUnderscort = nameMode.replace(" ", "_");
|
| 24 |
+
const input = actionForm.querySelector(".action-option")
|
| 25 |
+
input.value = `start_${nameUnderscort}`;
|
| 26 |
+
actionForm.submit();
|
| 27 |
+
}
|
tecnicas/templates/tecnicas/manage_sesions/details-session-napping.html
CHANGED
|
@@ -111,22 +111,24 @@
|
|
| 111 |
</article>
|
| 112 |
|
| 113 |
<p class="text-black font-bold text-2xl border-b-2">
|
| 114 |
-
|
| 115 |
</p>
|
| 116 |
-
<article class="
|
| 117 |
{% if not session.activo %}
|
|
|
|
| 118 |
<button
|
| 119 |
-
class="
|
| 120 |
-
onclick="
|
| 121 |
-
|
| 122 |
<figure class="w-10">
|
| 123 |
<img src="{% static 'img/giro.svg' %}" alt="flechas girando" class="invert">
|
| 124 |
</figure>
|
| 125 |
</button>
|
|
|
|
| 126 |
{% else %}
|
| 127 |
<a href="{% url 'cata_system:monitor_sesion' session_code=session.codigo_sesion %}" class="flex-1 w-fit">
|
| 128 |
<button
|
| 129 |
-
class="ct-btn-start-repition
|
| 130 |
Monitorear repetición
|
| 131 |
<figure class="w-10">
|
| 132 |
<img src="{% static 'img/monitor.svg' %}" alt="flechas girando" class="invert">
|
|
|
|
| 111 |
</article>
|
| 112 |
|
| 113 |
<p class="text-black font-bold text-2xl border-b-2">
|
| 114 |
+
Modalidades disponibles
|
| 115 |
</p>
|
| 116 |
+
<article class="grid grid-cols-2 gap-4 max-sm:gap-2">
|
| 117 |
{% if not session.activo %}
|
| 118 |
+
{% for mode in modes %}
|
| 119 |
<button
|
| 120 |
+
class="cts-btn-general capitalize cts-btn-primary btn-push flex flex-col justify-center items-center gap-2"
|
| 121 |
+
data-mode="{{ mode.nombre }}" onclick="startSession('{{ mode.nombre }}')">
|
| 122 |
+
Napping {{ mode.nombre }}
|
| 123 |
<figure class="w-10">
|
| 124 |
<img src="{% static 'img/giro.svg' %}" alt="flechas girando" class="invert">
|
| 125 |
</figure>
|
| 126 |
</button>
|
| 127 |
+
{% endfor %}
|
| 128 |
{% else %}
|
| 129 |
<a href="{% url 'cata_system:monitor_sesion' session_code=session.codigo_sesion %}" class="flex-1 w-fit">
|
| 130 |
<button
|
| 131 |
+
class="ct-btn-start-repition cts-btn-general cts-btn-primary btn-push">
|
| 132 |
Monitorear repetición
|
| 133 |
<figure class="w-10">
|
| 134 |
<img src="{% static 'img/monitor.svg' %}" alt="flechas girando" class="invert">
|