chartManD commited on
Commit
19b9959
·
1 Parent(s): 270f8c2

Se agregan opciones de modalidades para Napping

Browse files
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
- if action == "start_session":
38
- response = self.startRepetition(
39
- presenter=request.user.user_presentador, request=request)
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
- return self.controllGetResponse(error="Implementación de modalidades en espera", request=request)
 
 
 
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
- Acciones disponibles
115
  </p>
116
- <article class="flex flex-wrap gap-10 max-sm:gap-2">
117
  {% if not session.activo %}
 
118
  <button
119
- class="ct-btn-start-repition flex-1 uppercase text-lg max-sm:text-base tracking-wider p-4 border-b-2 active:border-b-0 active:border-t-2 active:border-green-500 border-green-800 transition-all rounded-xl bg-green-600 text-white font-bold disabled:bg-amber-600 flex flex-col justify-center items-center gap-2"
120
- onclick="startRepetition()">
121
- Iniciar fase o repetición
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 w-full uppercase text-lg max-sm:text-base tracking-wider p-4 border-b-2 active:border-b-0 active:border-t-2 active:border-orange-500 border-orange-800 transition-all rounded-xl bg-orange-600 text-white font-bold disabled:bg-amber-600 flex flex-col justify-center items-center gap-2">
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">