Norberto Montalvo García commited on
Commit
a067a65
·
unverified ·
2 Parent(s): 1e87f0c 2a046c2

Merge pull request #35 from CascoArcilla/HU7

Browse files

Creado vista de detalles basico para sesion con PF

tecnicas/controllers/__init__.py CHANGED
@@ -22,6 +22,7 @@ from .views_controller.session_management.details_controller import DetallesCont
22
  from .views_controller.session_management.details_escala_controller import DetallesEscalasController
23
  from .views_controller.session_management.details_rata_controller import DetallesRATAController
24
  from .views_controller.session_management.details_cata_controller import DetallesCATAController
 
25
  from .views_controller.session_management.monitor_controller import MonitorController
26
  from .views_controller.session_management.monitor_escalas_controller import MonitorEscalasController
27
  from .views_controller.session_management.monitor_rata_controller import MonitorRATAController
 
22
  from .views_controller.session_management.details_escala_controller import DetallesEscalasController
23
  from .views_controller.session_management.details_rata_controller import DetallesRATAController
24
  from .views_controller.session_management.details_cata_controller import DetallesCATAController
25
+ from .views_controller.session_management.details_pf_controller import DetallesPFController
26
  from .views_controller.session_management.monitor_controller import MonitorController
27
  from .views_controller.session_management.monitor_escalas_controller import MonitorEscalasController
28
  from .views_controller.session_management.monitor_rata_controller import MonitorRATAController
tecnicas/controllers/views_controller/session_management/details_cata_controller.py CHANGED
@@ -1,8 +1,6 @@
1
- from django.http import HttpRequest
2
- from django.shortcuts import render, redirect
3
  from django.db.models import F
4
  from tecnicas.models import SesionSensorial, Calificacion, ValorBooleano
5
- from tecnicas.controllers import PalabrasController, DatoController
6
  from tecnicas.utils import defaultdict_to_dict
7
  from .details_controller import DetallesController
8
  from collections import defaultdict
 
 
 
1
  from django.db.models import F
2
  from tecnicas.models import SesionSensorial, Calificacion, ValorBooleano
3
+ from tecnicas.controllers import PalabrasController
4
  from tecnicas.utils import defaultdict_to_dict
5
  from .details_controller import DetallesController
6
  from collections import defaultdict
tecnicas/controllers/views_controller/session_management/details_pf_controller.py ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from tecnicas.models import SesionSensorial
2
+ from .details_controller import DetallesController
3
+
4
+
5
+ class DetallesPFController(DetallesController):
6
+ def __init__(self, session: SesionSensorial):
7
+ super().__init__(session)
8
+ self.url_template = "tecnicas/manage_sesions/details-session-pf.html"
9
+ self.url_next = "cata_system:monitor_sesion"
10
+
11
+ def getContext(self):
12
+ technique = self.session.tecnica
13
+
14
+ self.context = {
15
+ "sesion": self.session,
16
+ "use_technique": technique,
17
+ "calificaciones": [],
18
+ "existen_calificaciones": False,
19
+ "tipo_escala": technique.escala_tecnica.id_tipo_escala.nombre_escala,
20
+ "valor_max": technique.escala_tecnica.longitud
21
+ }
22
+
23
+ # Definir el estado de la sesion
24
+ rep = technique.repeticion
25
+ activate = self.session.activo
26
+
27
+ self.context["estado"] = self.getStatus(rep, activate)
28
+
29
+ return self.context
30
+
31
+ def getStatus(self, rep: int, activate: bool):
32
+ status = ""
33
+
34
+ if rep == 0 and not activate:
35
+ status = "Listo para crear listas iniciales"
36
+
37
+ elif rep == 1 and activate:
38
+ status = "En primera fase, creación de listas iniciales"
39
+ elif rep == 1 and not activate:
40
+ status = "Listo para crear listas finales"
41
+
42
+ elif rep == 2 and activate:
43
+ status = "En segunda fase, creación de listas finales"
44
+ elif rep == 2 and not activate:
45
+ status = "Listo para calificaciones"
46
+
47
+ elif rep > 2 and not activate:
48
+ status = "Listo para calificaciones"
49
+ elif rep > 2 and activate:
50
+ status = "Catadores calificando"
51
+
52
+ return status
tecnicas/templates/tecnicas/manage_sesions/details-session-pf.html ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends 'tecnicas/layouts/base.html' %}
2
+ {% load static %}
3
+
4
+ {% block title %}Detalles Sesion{% endblock %}
5
+
6
+ {% block content %}
7
+ <article class="cts-container-main">
8
+ <article class="cts-wrap-content relative max-w-4xl">
9
+ <header class="text-center flex-row max-sm:flex-col w-full flex justify-around items-center flex-wrap gap-10">
10
+ <h1 class="text-black rounded-xl font-bold text-2xl bg-surface-card shadow-lg p-4 flex-1">
11
+ Detalles de la sesión
12
+ </h1>
13
+ <a href="{% url 'cata_system:panel_sesiones' page=1 %}">
14
+ <button class="cts-btn-general cts-btn-error btn-push">
15
+ Volver a las Sesiones
16
+ </button>
17
+ </a>
18
+ </header>
19
+
20
+ {% if message %}
21
+ {% include "../components/error-message.html" with message=message %}
22
+ {% endif %}
23
+ {% if error %}
24
+ {% include "../components/error-message.html" with message=error %}
25
+ {% endif %}
26
+
27
+ <p class="text-black font-bold text-2xl border-b-2">
28
+ Información general
29
+ </p>
30
+ <article
31
+ class="text-black rounded-xl grid grid-cols-2 max-sm:grid-cols-1 gap-3 max-sm:gap-1 text-xl max-sm:text-base">
32
+ <section
33
+ class="col-span-2 max-sm:col-span-1 bg-surface-ligt flex flex-wrap items-center justify-center max-sm:justify-normal gap-x-2 p-4 rounded-2xl">
34
+ <p class="font-bold">
35
+ Código:
36
+ </p>
37
+ <p class="font-sans">
38
+ {{ sesion.codigo_sesion }}
39
+ </p>
40
+ </section>
41
+
42
+ <section
43
+ class="col-span-2 max-sm:col-span-1 bg-surface-card flex flex-wrap items-center justify-center max-sm:justify-normal gap-x-2 p-4 rounded-2xl">
44
+ <p class="font-bold">
45
+ Nombre:
46
+ </p>
47
+ <p class="antialiased">
48
+ {% if sesion.nombre_sesion %}
49
+ {{ sesion.nombre_sesion }}
50
+ {% else %}
51
+ Sin nombre
52
+ {% endif %}
53
+ </p>
54
+ </section>
55
+
56
+ <section
57
+ class="bg-surface-card flex flex-wrap items-center justify-center max-sm:justify-normal gap-x-2 p-4 rounded-2xl">
58
+ <p class="font-bold">
59
+ Fecha creación:
60
+ </p>
61
+ <p class="font-sans font-normal uppercase">
62
+ {{ sesion.fechaCreacion }}
63
+ </p>
64
+ </section>
65
+
66
+ <section
67
+ class="bg-surface-card flex flex-wrap items-center justify-center max-sm:justify-normal gap-x-2 p-4 rounded-2xl">
68
+ <p class="font-bold">
69
+ Estado:
70
+ </p>
71
+ <p class="font-sans text-lg max-sm:text-base font-normal">
72
+ {{ estado }}
73
+ </p>
74
+ </section>
75
+
76
+ <section
77
+ class="bg-surface-ligt flex flex-wrap items-center justify-center max-sm:justify-normal gap-x-2 p-4 rounded-2xl">
78
+ <p class="font-bold">
79
+ Técnica:
80
+ </p>
81
+ <p class="font-sans text-lg max-sm:text-base font-normal uppercase">
82
+ {{ sesion.tecnica.tipo_tecnica }}
83
+ </p>
84
+ </section>
85
+
86
+ <section
87
+ class="bg-surface-card flex flex-wrap items-center justify-center max-sm:justify-normal gap-x-2 p-4 rounded-2xl">
88
+ <p class="font-sans">
89
+ <b>Catadores Max.</b> {{ use_technique.limite_catadores }}
90
+ </p>
91
+ </section>
92
+
93
+ <section
94
+ class="col-span-2 max-sm:col-span-1 bg-surface-card flex flex-wrap items-center justify-center max-sm:justify-normal gap-x-2 p-4 rounded-2xl">
95
+ <p class="font-bold">
96
+ Instrucciones:
97
+ </p>
98
+ <p class="font-sans text-xl max-sm:text-base font-normal">
99
+ {{ sesion.tecnica.instrucciones }}
100
+ </p>
101
+ </section>
102
+ </article>
103
+
104
+ <p class="text-black font-bold text-2xl border-b-2">
105
+ Acciones disponibles
106
+ </p>
107
+ <article class="flex flex-wrap gap-10 max-sm:gap-2">
108
+ {% if not sesion.activo %}
109
+ <button
110
+ 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"
111
+ onclick="startRepetition()">
112
+ Iniciar fase o repetición
113
+ <figure class="w-10">
114
+ <img src="{% static 'img/giro.svg' %}" alt="flechas girando" class="invert">
115
+ </figure>
116
+ </button>
117
+ {% else %}
118
+ <a href="{% url 'cata_system:monitor_sesion' session_code=sesion.codigo_sesion %}" class="flex-1 w-fit">
119
+ <button
120
+ 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">
121
+ Monitorear repetición
122
+ <figure class="w-10">
123
+ <img src="{% static 'img/monitor.svg' %}" alt="flechas girando" class="invert">
124
+ </figure>
125
+ </button>
126
+ </a>
127
+ {% endif %}
128
+ <button
129
+ class="flex-1 uppercase text-lg cts-btn-general cts-btn-error btn-push flex flex-col justify-center items-center gap-2"
130
+ onclick="showWarningDialog('cts-warnig-dialog')">
131
+ borrar
132
+ <figure class="w-10">
133
+ <img src="{% static 'img/basura.svg' %}" alt="bote de basura" class="invert">
134
+ </figure>
135
+ </button>
136
+ </article>
137
+
138
+ <section
139
+ class="absolute w-full h-full flex justify-center items-center bg-surface-alter-card/70 top-0 left-0 p-6 rounded-xl cts-warnig-dialog hidden">
140
+ <article class="bg-surface-card p-4 space-y-6 rounded-xl">
141
+ <h2 class="text-4xl text-black text-center">
142
+ ¡¡¡Cuidado!!!
143
+ </h2>
144
+ <p class="text-2xl text-black text-center">
145
+ Esta acción no es reversible, si la continua también borrara todos los datos recopilados
146
+ relacionados a esta sesión y no podrá volver a recuperarlos
147
+ </p>
148
+ <section class="text-black font-bold text-xl space-y-4">
149
+ <p class="text-center">
150
+ ¿Estás seguro de continuar?
151
+ </p>
152
+ <div class="flex max-sm:flex-col gap-4 justify-center">
153
+ <button class="cts-btn-general cts-btn-error btn-push" onclick="deleteSession()">
154
+ Estoy seguro
155
+ </button>
156
+ <button class="cts-btn-general cts-btn-primary btn-push"
157
+ onclick="hiddenWarningDialog('cts-warnig-dialog')">
158
+ No, cancelar
159
+ </button>
160
+ </div>
161
+ </section>
162
+ </article>
163
+ </section>
164
+
165
+ <p class="text-black font-bold text-2xl border-b-2">
166
+ Datos obtenidos
167
+ </p>
168
+
169
+ <article class="bg-surface-card p-4 max-sm:px-2 text-black rounded">
170
+ <section class="text-xl space-y-4 space-x-4 mb-4">
171
+ <p class="inline italic underline font-semibold">
172
+ Se usa una escala <b>{{ tipo_escala }}</b> para calificar
173
+ </p>
174
+ <p class="inline italic underline font-semibold">
175
+ El valor máximo por calificación es <b>{{ valor_max }}</b>
176
+ </p>
177
+ </section>
178
+ {% if existen_calificaciones %}
179
+ {% include "../components/table_cata.html" with calificaciones=calificaciones palabras=palabras
180
+ sesion=sesion %}
181
+ {% else %}
182
+ {% include "../components/error-message.html" with message='Sin calificaciones que mostrar aún' %}
183
+ {% endif %}
184
+ </article>
185
+
186
+ <form action="" method="post" class="form-action-session hidden">
187
+ <input type="hidden" name="action" class="action-option">
188
+ {% csrf_token %}
189
+ </form>
190
+ </article>
191
+ </article>
192
+ {% endblock %}
193
+
194
+ {% block extra_js %}
195
+ <script src="{% static 'js/details-session.js' %}"></script>
196
+ <script src="{% static 'js/showHiddenElement.js' %}"></script>
197
+ {% endblock %}
tecnicas/views/sessions_management/session_details.py CHANGED
@@ -3,7 +3,7 @@ from django.shortcuts import redirect
3
  from django.urls import reverse
4
  from tecnicas.models import SesionSensorial
5
  from tecnicas.utils import noValidTechnique
6
- from tecnicas.controllers import DetallesEscalasController, DetallesCATAController
7
 
8
 
9
  def sessionDetails(req: HttpRequest, session_code: str):
@@ -22,11 +22,18 @@ def sessionDetails(req: HttpRequest, session_code: str):
22
  session=sensorial_session)
23
  response = controller_view.controllGetResponse(
24
  request=req, message=message)
 
25
  elif use_techinique == "cata":
26
  controller_view = DetallesCATAController(
27
  session=sensorial_session)
28
  response = controller_view.controllGetResponse(
29
  request=req, message=message)
 
 
 
 
 
 
30
  else:
31
  response = noValidTechnique(
32
  params={"page": 1},
@@ -36,7 +43,7 @@ def sessionDetails(req: HttpRequest, session_code: str):
36
  name_view="cata_system:panel_sesiones"
37
  )
38
  return response
39
-
40
  elif req.method == "POST":
41
  sensorial_session = SesionSensorial.objects.get(
42
  codigo_sesion=session_code)
@@ -55,6 +62,9 @@ def sessionDetails(req: HttpRequest, session_code: str):
55
  else:
56
  response = controller_view.getResponse(
57
  error="No se reconoce la acción a realizar")
 
 
 
58
  else:
59
  response = noValidTechnique()
60
 
 
3
  from django.urls import reverse
4
  from tecnicas.models import SesionSensorial
5
  from tecnicas.utils import noValidTechnique
6
+ from tecnicas.controllers import DetallesEscalasController, DetallesCATAController, DetallesPFController
7
 
8
 
9
  def sessionDetails(req: HttpRequest, session_code: str):
 
22
  session=sensorial_session)
23
  response = controller_view.controllGetResponse(
24
  request=req, message=message)
25
+
26
  elif use_techinique == "cata":
27
  controller_view = DetallesCATAController(
28
  session=sensorial_session)
29
  response = controller_view.controllGetResponse(
30
  request=req, message=message)
31
+
32
+ elif use_techinique == "perfil flash":
33
+ controller_view = DetallesPFController(session=sensorial_session)
34
+ response = controller_view.controllGetResponse(
35
+ request=req, message=message)
36
+
37
  else:
38
  response = noValidTechnique(
39
  params={"page": 1},
 
43
  name_view="cata_system:panel_sesiones"
44
  )
45
  return response
46
+
47
  elif req.method == "POST":
48
  sensorial_session = SesionSensorial.objects.get(
49
  codigo_sesion=session_code)
 
62
  else:
63
  response = controller_view.getResponse(
64
  error="No se reconoce la acción a realizar")
65
+ elif use_techinique == "perfil flash":
66
+ response = JsonResponse(
67
+ {"message": "Estoy trabajando en la funcionalidad que eligio"})
68
  else:
69
  response = noValidTechnique()
70