chartManD commited on
Commit
b417c45
·
1 Parent(s): cf8de8a

Catador vista para plasmar datos en Sesion con tecnica escalas mandada

Browse files
tecnicas/controllers/__init__.py CHANGED
@@ -7,6 +7,11 @@ from .models_controller.estilo_palabras_controller import EstiloPalabrasControll
7
  from .models_controller.palabras_controller import PalabrasController
8
  from .models_controller.sesion_controller import SesionController
9
  from .models_controller.calificacion_controller import CalificacionController
 
 
 
 
 
10
  from .views_controller.detalles_sesion_controller import DetallesSesionController
11
  from .views_controller.login_tester_controller import LoginTesterController
12
  from .views_controller.main_tester_form_controller import MainTesterFormController
 
7
  from .models_controller.palabras_controller import PalabrasController
8
  from .models_controller.sesion_controller import SesionController
9
  from .models_controller.calificacion_controller import CalificacionController
10
+ from .models_controller.catador_controller import CatadorController
11
+ from .models_controller.posicion_controller import PosicionController
12
+ from .models_controller.particiapacion_controller import ParticipacionController
13
+ from .models_controller.dato_controller import DatoController
14
+
15
  from .views_controller.detalles_sesion_controller import DetallesSesionController
16
  from .views_controller.login_tester_controller import LoginTesterController
17
  from .views_controller.main_tester_form_controller import MainTesterFormController
tecnicas/controllers/models_controller/calificacion_controller.py CHANGED
@@ -1,4 +1,6 @@
1
- from ...models import Calificacion, Tecnica
 
 
2
 
3
 
4
  class CalificacionController():
@@ -17,3 +19,83 @@ class CalificacionController():
17
  data_rating[f"repeticion_{i+1}"] = response_data
18
 
19
  return data_rating
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ...models import Calificacion, Tecnica, Posicion, Producto, Catador
2
+ from ...utils import controller_error
3
+ from collections import defaultdict
4
 
5
 
6
  class CalificacionController():
 
19
  data_rating[f"repeticion_{i+1}"] = response_data
20
 
21
  return data_rating
22
+
23
+ @staticmethod
24
+ def getRatings(
25
+ technique: Tecnica = None,
26
+ id_technique: int = None,
27
+ repetition: int = None,
28
+ product: Producto = None,
29
+ id_product: int = None,
30
+ tester: Catador = None,
31
+ id_tester: int = None,
32
+ user_tester: str = None,):
33
+ if repetition is None:
34
+ return controller_error("Es necesario especificar la repetición")
35
+
36
+ filters = {"num_repeticion": repetition}
37
+
38
+ if technique is not None:
39
+ filters["id_tecnica"] = technique
40
+ elif id_technique is not None:
41
+ filters["id_tecnica__id"] = id_technique
42
+ else:
43
+ return controller_error("Es necesario especificar la técnica")
44
+
45
+ if product is not None:
46
+ filters["id_producto"] = product
47
+ elif id_product is not None:
48
+ filters["id_producto__id"] = id_product
49
+
50
+ if tester is not None:
51
+ filters["id_catador"] = tester
52
+ elif id_tester is not None:
53
+ filters["id_catador__id"] = id_tester
54
+ elif user_tester is not None:
55
+ filters["id_catador__usuarioCatador"] = user_tester
56
+
57
+ ratings = list(Calificacion.objects.filter(**filters).select_related(
58
+ "id_producto",
59
+ "id_tecnica",
60
+ "id_catador",
61
+ ))
62
+
63
+ return ratings
64
+
65
+ @staticmethod
66
+ def checkProducsWithoutRating(
67
+ positions: list[Posicion] = None,
68
+ user_cata: str = None,
69
+ repetition: int = None,
70
+ technique: Tecnica = None,
71
+ id_technique: int = None,
72
+ num_words: int = None):
73
+ check_products = [position.id_producto for position in positions]
74
+
75
+ filters = {
76
+ "user_tester": user_cata,
77
+ "repetition": repetition
78
+ }
79
+
80
+ if technique is not None:
81
+ filters["technique"] = technique
82
+ elif id_technique is not None:
83
+ filters["id_technique"] = id_technique
84
+
85
+ ratings = CalificacionController.getRatings(**filters)
86
+
87
+ if len(ratings) == 0:
88
+ return positions
89
+
90
+ ratings_dict = defaultdict(list)
91
+
92
+ for rat in ratings:
93
+ ratings_dict[rat.id_producto.id].append(rat)
94
+
95
+ for index, product in enumerate(check_products):
96
+ rating_of_product = ratings_dict.get(product.id, [])
97
+
98
+ if rating_of_product < num_words or len(rating_of_product) == 0:
99
+ return positions[index]
100
+
101
+ return controller_error("Sin productos por calificar")
tecnicas/controllers/models_controller/catador_controller.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ from ...models import Catador
2
+ from ...utils import controller_error
3
+
4
+ class CatadorController:
5
+ def getTesterByUsername(username:str):
6
+ try:
7
+ tester = Catador.objects.get(usuarioCatador=username)
8
+ return tester
9
+ except Catador.DoesNotExist:
10
+ return controller_error("No se encontró el Catador")
tecnicas/controllers/models_controller/dato_controller.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ...models import Calificacion, Dato
2
+ from ...utils import controller_error
3
+
4
+
5
+ class DatoController():
6
+ @staticmethod
7
+ def getRerecordedData(ratings: list[Calificacion]):
8
+ if not ratings:
9
+ return []
10
+
11
+ ids_ratings = [rat.id for rat in ratings]
12
+
13
+ recoreded_data = list(Dato.objects.filter(
14
+ id_calificacion_id__in=ids_ratings))
15
+
16
+ return recoreded_data
tecnicas/controllers/models_controller/escala_controller.py CHANGED
@@ -1,4 +1,4 @@
1
- from ...models import Etiqueta, EtiquetasEscala, Escala, TipoEscala
2
  from django.db import DatabaseError
3
  from ...utils import controller_error
4
 
@@ -68,3 +68,31 @@ class EscalaController():
68
  except DatabaseError as error:
69
  self.deleteRelationshipsWithLabels()
70
  return controller_error("error guardar relacion etiqueta escala")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ...models import Etiqueta, EtiquetasEscala, Escala, TipoEscala, Tecnica
2
  from django.db import DatabaseError
3
  from ...utils import controller_error
4
 
 
68
  except DatabaseError as error:
69
  self.deleteRelationshipsWithLabels()
70
  return controller_error("error guardar relacion etiqueta escala")
71
+
72
+ @staticmethod
73
+ def getScaleByTechnique(technique: Tecnica = None, id_technique: int = None):
74
+ if technique is not None:
75
+ scale = Escala.objects.select_related("id_tipo_escala").only(
76
+ "id_tipo_escala", "longitud").get(tecnica=technique)
77
+ return scale
78
+
79
+ if id_technique is not None:
80
+ scale = Escala.objects.select_related("id_tipo_escala").only(
81
+ "id_tipo_escala", "longitud").get(tecnica_id=id_technique)
82
+ return scale
83
+
84
+ @staticmethod
85
+ def getRelatedTagsInScale(scale: Escala = None, id_scale: int = None):
86
+ if scale is not None:
87
+ scale_tags = list(EtiquetasEscala.objects.filter(
88
+ id_escala=scale).select_related("id_etiqueta"))
89
+ if len(scale_tags) == 0:
90
+ return controller_error("Imposible obtener las etiquetas")
91
+ return scale_tags
92
+
93
+ if id_scale is not None:
94
+ scale_tags = list(EtiquetasEscala.objects.filter(
95
+ id_escala_id=scale).select_related("id_etiqueta"))
96
+ if len(scale_tags) == 0:
97
+ return controller_error("Imposible obtener las etiquetas")
98
+ return scale_tags
tecnicas/controllers/models_controller/ordenes_controller.py CHANGED
@@ -74,3 +74,11 @@ class OrdenesController():
74
  return self.positions
75
  except DatabaseError as error:
76
  return controller_error("error al guardar las posiciones")
 
 
 
 
 
 
 
 
 
74
  return self.positions
75
  except DatabaseError as error:
76
  return controller_error("error al guardar las posiciones")
77
+
78
+ @staticmethod
79
+ def getOrderById(id: int):
80
+ try:
81
+ order = Orden.objects.get(id=id)
82
+ return order
83
+ except Orden.DoesNotExist:
84
+ return controller_error("No existe orden")
tecnicas/controllers/models_controller/palabras_controller.py CHANGED
@@ -1,4 +1,4 @@
1
- from ...models import Palabra, Tecnica, EsAtributo
2
  from django.db import DatabaseError
3
  from ...utils import controller_error
4
 
@@ -15,17 +15,33 @@ class PalabrasController():
15
 
16
  def setWords(self):
17
  self.words = []
18
- try:
19
- searched_words = Palabra.objects.filter(id__in=self.ids_words)
20
- if not len(searched_words):
21
- return controller_error("no se han encontrado registros")
22
- self.words = searched_words
23
- return self.words
24
- except DatabaseError as error:
25
- return controller_error("error al guardar buscar palabras")
26
 
27
  @staticmethod
28
  def getWordsInTechnique(technique: Tecnica):
29
- es_atributo = EsAtributo.objects.get(id_tecnica=technique)
30
- words = es_atributo.palabras.all()
31
- return words
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ...models import Palabra, Tecnica, EsAtributo, EsVocabulario, Dato
2
  from django.db import DatabaseError
3
  from ...utils import controller_error
4
 
 
15
 
16
  def setWords(self):
17
  self.words = []
18
+ searched_words = list(Palabra.objects.filter(id__in=self.ids_words))
19
+ if not len(searched_words):
20
+ return controller_error("no se han encontrado registros")
21
+ return self.words
 
 
 
 
22
 
23
  @staticmethod
24
  def getWordsInTechnique(technique: Tecnica):
25
+ if technique.id_estilo.nombre_estilo == "atributos":
26
+ es_atribute = EsAtributo.objects.get(id_tecnica=technique)
27
+ words = list(es_atribute.palabras.all())
28
+ return words
29
+ elif technique.id_estilo.nombre_estilo == "vocabulario":
30
+ try:
31
+ palabras = Palabra.objects.filter(
32
+ vocabulario__esvocabulario__id_tecnica=technique
33
+ )
34
+ return list(palabras.distinct()) if palabras.exists() else controller_error("Técnica sin palabras con vocabulario")
35
+ except Exception as e:
36
+ return controller_error("Técnica sin palabras con vocabulario")
37
+
38
+ @staticmethod
39
+ def getWordsWithoutData(recoreded_data: list[Dato], words: list[Palabra]):
40
+ qualified_words = [data.id_palabra for data in recoreded_data]
41
+
42
+ if set(qualified_words) == set(words):
43
+ return controller_error("No hay palabras por usar")
44
+
45
+ words_without_use = list(set(words).difference(set(qualified_words)))
46
+
47
+ return words_without_use
tecnicas/controllers/models_controller/particiapacion_controller.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ...models import Participacion
2
+ from ...utils import controller_error
3
+
4
+
5
+ class ParticipacionController():
6
+ @staticmethod
7
+ def enterSession(id_participation: int):
8
+ try:
9
+ participation = Participacion.objects.get(id=id_participation)
10
+ participation.finalizado = False
11
+ participation.activo = True
12
+ participation.save()
13
+ return participation
14
+ except Participacion.DoesNotExist:
15
+ return controller_error("No se ha encontrado la participación")
16
+
17
+ @staticmethod
18
+ def finishSession(id_participation: int):
19
+ try:
20
+ participation = Participacion.objects.get(id=id_participation)
21
+ participation.finalizado = True
22
+ participation.activo = False
23
+ participation.save()
24
+ return participation
25
+ except Participacion.DoesNotExist:
26
+ return controller_error("No se ha encontrado la participación")
27
+
28
+ @staticmethod
29
+ def outSession(id_participation: int):
30
+ try:
31
+ participation = Participacion.objects.get(id=id_participation)
32
+ participation.activo = False
33
+ participation.save()
34
+ return participation
35
+ except Participacion.DoesNotExist:
36
+ return controller_error("No se ha encontrado la participación")
tecnicas/controllers/models_controller/posicion_controller.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ...utils import controller_error
2
+ from ...models import Orden, Posicion
3
+
4
+
5
+ class PosicionController():
6
+ @staticmethod
7
+ def getPostionsInOrder(order: Orden = None, id_order: id = None):
8
+ if order is not None:
9
+ positions = list(Posicion.objects.filter(id_orden=order))
10
+ if not positions:
11
+ return controller_error("No existe orden")
12
+ return positions
13
+
14
+ if id_order is not None:
15
+ positions = list(Posicion.objects.filter(id_orden_id=id_order))
16
+ if not positions:
17
+ return controller_error("No existe orden")
18
+ return positions
19
+
20
+ return controller_error("No se define búsqueda")
tecnicas/controllers/models_controller/productos_controller.py CHANGED
@@ -37,3 +37,17 @@ class ProductosController():
37
  return self.list_product
38
  except DatabaseError as error:
39
  return controller_error("error al guardar los productos")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  return self.list_product
38
  except DatabaseError as error:
39
  return controller_error("error al guardar los productos")
40
+
41
+ @staticmethod
42
+ def getProductsByTechniqe(technique: Tecnica = None, id_technique: int = None):
43
+ if technique is not None:
44
+ products = list(Producto.objects.filter(id_tecnica=technique))
45
+ if not products:
46
+ return controller_error("No existen productos en esta técnica")
47
+ return products
48
+
49
+ if id_technique is not None:
50
+ products = list(Producto.objects.filter(id_tecnica_id=id_technique))
51
+ if not products:
52
+ return controller_error("No existen productos en esta técnica")
53
+ return products
tecnicas/controllers/views_controller/login_tester_controller.py CHANGED
@@ -18,7 +18,7 @@ class LoginTesterController():
18
  self.session = SesionSensorial.objects.get(
19
  codigo_sesion=code_session)
20
 
21
- return True
22
  except (Catador.DoesNotExist, SesionSensorial.DoesNotExist):
23
  return controller_error("Credenciales inválidas")
24
 
 
18
  self.session = SesionSensorial.objects.get(
19
  codigo_sesion=code_session)
20
 
21
+ return (self.tester, self.session)
22
  except (Catador.DoesNotExist, SesionSensorial.DoesNotExist):
23
  return controller_error("Credenciales inválidas")
24
 
tecnicas/controllers/views_controller/main_tester_form_controller.py CHANGED
@@ -1,4 +1,4 @@
1
- from ...models import Catador, SesionSensorial, Orden, Participacion, Producto, EsAtributo, Calificacion, Vocabulario, EsVocabulario
2
  from ...utils import controller_error, shuffleArray
3
  from django.db import transaction
4
 
@@ -18,10 +18,10 @@ class MainTesterFormController():
18
 
19
  def assignOrder(self):
20
  with transaction.atomic():
21
- orders_without_tester = Orden.objects.select_for_update().filter(
22
- id_tecnica=self.session.tecnica, id_catador=None)
23
 
24
- if not len(orders_without_tester):
25
  return controller_error("Las ordenes se han acabado")
26
 
27
  shuffle_orders = shuffleArray(orders_without_tester)
@@ -44,24 +44,14 @@ class MainTesterFormController():
44
  except Orden.DoesNotExist:
45
  return controller_error("Catador sin orden")
46
 
47
- def endedToFalseAndActiveTester(self, id_participation: int):
48
- try:
49
- self.participation = Participacion.objects.get(id=id_participation)
50
- self.participation.finalizado = False
51
- self.participation.activo = True
52
- self.participation.save()
53
- return self.participation
54
- except Participacion.DoesNotExist:
55
- return controller_error("No se ha encontrado la participación")
56
-
57
- def isEndedSession(self, id_participation: int):
58
  if not self.order or not id_participation:
59
  return controller_error("Se requieren datos para comprobar la finalización")
60
 
61
  try:
62
- self.participation = Participacion.objects.get(id=id_participation)
63
 
64
- if self.participation.finalizado:
65
  num_products = Producto.objects.filter(
66
  id_tecnica=self.session.tecnica).count()
67
 
@@ -79,12 +69,12 @@ class MainTesterFormController():
79
  num_words = e_vocabulary.id_vocabulario.palabras.count()
80
 
81
  num_ratings_now = Calificacion.objects.filter(
82
- id_tecnica=self.session.tecnica, id_catador=self.tester).count()
83
 
84
  num_ratings_max_by_tester = num_products * num_words
85
 
86
  return not num_ratings_now <= num_ratings_max_by_tester
87
  else:
88
- return self.participation.finalizado
89
  except Participacion.DoesNotExist:
90
  return controller_error("No se ha encontrado la participación")
 
1
+ from ...models import Catador, SesionSensorial, Orden, Participacion, Producto, EsAtributo, Calificacion, EsVocabulario
2
  from ...utils import controller_error, shuffleArray
3
  from django.db import transaction
4
 
 
18
 
19
  def assignOrder(self):
20
  with transaction.atomic():
21
+ orders_without_tester = list(Orden.objects.select_for_update().filter(
22
+ id_tecnica=self.session.tecnica, id_catador=None))
23
 
24
+ if not orders_without_tester:
25
  return controller_error("Las ordenes se han acabado")
26
 
27
  shuffle_orders = shuffleArray(orders_without_tester)
 
44
  except Orden.DoesNotExist:
45
  return controller_error("Catador sin orden")
46
 
47
+ def isEndedSession(self, id_participation: int, repetition: int):
 
 
 
 
 
 
 
 
 
 
48
  if not self.order or not id_participation:
49
  return controller_error("Se requieren datos para comprobar la finalización")
50
 
51
  try:
52
+ participation = Participacion.objects.get(id=id_participation)
53
 
54
+ if participation.finalizado:
55
  num_products = Producto.objects.filter(
56
  id_tecnica=self.session.tecnica).count()
57
 
 
69
  num_words = e_vocabulary.id_vocabulario.palabras.count()
70
 
71
  num_ratings_now = Calificacion.objects.filter(
72
+ id_tecnica=self.session.tecnica, id_catador=self.tester, num_repeticion=repetition).count()
73
 
74
  num_ratings_max_by_tester = num_products * num_words
75
 
76
  return not num_ratings_now <= num_ratings_max_by_tester
77
  else:
78
+ return participation.finalizado
79
  except Participacion.DoesNotExist:
80
  return controller_error("No se ha encontrado la participación")
tecnicas/templates/tecnicas/forms_tester/convencional.html CHANGED
@@ -1,4 +1,4 @@
1
- {% extends 'tecnicas/layouts/base.html' %}
2
 
3
  {% block title %}Convencional{% endblock %}
4
 
@@ -11,11 +11,39 @@
11
  </h1>
12
  </header>
13
 
 
 
 
 
 
 
 
 
 
 
14
  <article>
15
  <p class="text-lg font-medium text-center bg-gray-200 p-4 rounded">
16
  {{ session.tecnica.instrucciones }}
17
  </p>
18
  </article>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </article>
20
  </article>
21
  {% endblock %}
 
1
+ {% extends 'tecnicas/layouts/base.html' %}
2
 
3
  {% block title %}Convencional{% endblock %}
4
 
 
11
  </h1>
12
  </header>
13
 
14
+ {% if error %}
15
+ <hr>
16
+
17
+ <article class="bg-red-600 p-4 text-white rounded-xl ct-notification-error">
18
+ <p class="block font-sans text-white text-xl antialiased font-bold uppercase tracking-wider text-center">
19
+ {{ error }}
20
+ </p>
21
+ </article>
22
+ {% endif %}
23
+
24
  <article>
25
  <p class="text-lg font-medium text-center bg-gray-200 p-4 rounded">
26
  {{ session.tecnica.instrucciones }}
27
  </p>
28
  </article>
29
+
30
+ <article>
31
+ <p class="text-lg font-medium text-center bg-gray-200 p-4 rounded">
32
+ {{ scale }}
33
+ </p>
34
+ </article>
35
+
36
+ <article>
37
+ <p class="text-lg font-medium text-center bg-gray-200 p-4 rounded">
38
+ {{ tags }}
39
+ </p>
40
+ </article>
41
+
42
+ <article>
43
+ <p class="text-lg font-medium text-center bg-gray-200 p-4 rounded">
44
+ {{ words }}
45
+ </p>
46
+ </article>
47
  </article>
48
  </article>
49
  {% endblock %}
tecnicas/views/login_tester.py CHANGED
@@ -21,6 +21,8 @@ def testerLogin(req: HttpRequest):
21
  if isinstance(existCredentials, dict):
22
  context = {"error": existCredentials["error"]}
23
  return render(req, "tecnicas/cata-login.html", context)
 
 
24
 
25
  taster_participation = login_controller.validateEntry()
26
  if isinstance(taster_participation, dict):
@@ -29,6 +31,7 @@ def testerLogin(req: HttpRequest):
29
 
30
  req.session["cata_username"] = tester_user
31
  req.session["code_session"] = session_code
 
32
  req.session["id_participation"] = taster_participation.id
33
 
34
  req.session.set_expiry(20*60)
 
21
  if isinstance(existCredentials, dict):
22
  context = {"error": existCredentials["error"]}
23
  return render(req, "tecnicas/cata-login.html", context)
24
+
25
+ session = existCredentials[1]
26
 
27
  taster_participation = login_controller.validateEntry()
28
  if isinstance(taster_participation, dict):
 
31
 
32
  req.session["cata_username"] = tester_user
33
  req.session["code_session"] = session_code
34
+ req.session["id_techniqe"] = session.tecnica.id
35
  req.session["id_participation"] = taster_participation.id
36
 
37
  req.session.set_expiry(20*60)
tecnicas/views/tester_forms/convencional_scales.py CHANGED
@@ -1,17 +1,101 @@
1
- from django.http import HttpRequest, JsonResponse
2
  from django.shortcuts import redirect, render
3
  from django.urls import reverse
4
- from ...controllers import SesionController
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
6
 
7
  def convencionalScales(req: HttpRequest):
8
  if not "id_order" in req.session:
9
- return redirect(reverse("cata_system:panel_configuracion_words"))
10
 
11
  session = SesionController.getSessionByCode(req.session["code_session"])
 
12
 
13
  context = {
14
  "session": session
15
  }
16
 
17
- return render(req, "tecnicas/forms_tester/convencional.html", context)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from django.http import HttpRequest
2
  from django.shortcuts import redirect, render
3
  from django.urls import reverse
4
+ from ...controllers import SesionController, PosicionController, CalificacionController, ParticipacionController, PalabrasController, EscalaController, DatoController
5
+
6
+ '''
7
+ **** Esta vista para sesion con tecnica convencional de escalas, al entrar debe:
8
+ **** ****
9
+ * Obtner los productos que se evaluan en la tecnica
10
+ * Ordenar los productos segun la Poscion en que se encuentre en el Orden ya establecidos
11
+ * Obtner las palabras para evaluar
12
+ - Revisar que estilo usan
13
+ - Obtner las palabras si el estilo es atributos
14
+ - Obtner las palabras si el estilo es Vocabulario
15
+ - El Catador plasma sus resultados para las palabras sin importar el estilo
16
+ * Comprobar que productos se han calificado
17
+ - Revisar el numero de palabras
18
+ - Comenzar con el primer producto e ir revisando uno a uno
19
+ - Revisar el numero de calificaciones del producto
20
+ - Numero de calificaciones del producto == 0
21
+ - Continuar con la evaluacion o comezar con este producto
22
+ - Numero de calificaciones del producto < numero de palabras
23
+ - Continuar con la evaluacion
24
+ - Numero de calificacion == numero de palabras
25
+ - Pasar con el siguiente producto
26
+ * Si no quedan mas productos por revisar
27
+ - Participacion.finalizado = True
28
+ - Participacion.activo = False
29
+ - Redirigir a "catador_main"
30
+ * Optner la siguiente palabra sin calificar
31
+ - Obtener las calificaiones de producto
32
+ - Obtener los datos de las calificaciones
33
+ - Comprobar que palabras no estan tienen dato
34
+ - Mandar palabras para el usuario
35
+ * Obtener informacion de la escala para mandar
36
+ '''
37
 
38
 
39
  def convencionalScales(req: HttpRequest):
40
  if not "id_order" in req.session:
41
+ return redirect(reverse("cata_system:catador_main"))
42
 
43
  session = SesionController.getSessionByCode(req.session["code_session"])
44
+ technique = session.tecnica
45
 
46
  context = {
47
  "session": session
48
  }
49
 
50
+ if req.method == "GET":
51
+ positions = PosicionController.getPostionsInOrder(
52
+ id_order=req.session["id_order"])
53
+
54
+ sorted_positions = sorted(positions, key=lambda posi: posi.posicion)
55
+
56
+ words = PalabrasController.getWordsInTechnique(technique=technique)
57
+
58
+ next_position = CalificacionController.checkProducsWithoutRating(
59
+ positions=sorted_positions,
60
+ user_cata=req.session["cata_username"],
61
+ id_technique=req.session["id_techniqe"],
62
+ repetition=session.tecnica.repecion,
63
+ technique=technique,
64
+ num_words=len(words)
65
+ )
66
+
67
+ if isinstance(next_position, dict):
68
+ updated_participation = ParticipacionController.finishSession(
69
+ req.session["id_participation"])
70
+ return redirect(reverse("cata_system:catador_main"))
71
+
72
+ if isinstance(next_position, list):
73
+ next_position = next_position[0]
74
+
75
+ ratings_product = CalificacionController.getRatings(
76
+ technique=technique,
77
+ product=next_position.id_producto,
78
+ repetition=technique.repecion,
79
+ user_tester=req.session["cata_username"]
80
+ )
81
+
82
+ if isinstance(ratings_product, dict):
83
+ context["error"] = ratings_product["error"]
84
+ return render(req, "tecnicas/forms_tester/convencional.html", context)
85
+ elif not ratings_product:
86
+ context["words"] = words
87
+ else:
88
+ recoreded_data = DatoController.getRerecordedData(ratings=ratings_product)
89
+ if not recoreded_data:
90
+ context["words"] = words
91
+
92
+ words_to_use = PalabrasController.getWordsWithoutData(recoreded_data=recoreded_data, words=words)
93
+ context["words"] = words_to_use
94
+
95
+ scale = EscalaController.getScaleByTechnique(technique=technique)
96
+ context["scale"] = scale
97
+
98
+ use_tags = EscalaController.getRelatedTagsInScale(scale=scale)
99
+ context["tags"] = use_tags
100
+
101
+ return render(req, "tecnicas/forms_tester/convencional.html", context)
tecnicas/views/tester_forms/main_tester_form.py CHANGED
@@ -1,7 +1,7 @@
1
  from django.http import HttpRequest, JsonResponse
2
  from django.shortcuts import render, redirect
3
  from django.urls import reverse
4
- from ...controllers import SesionController, MainTesterFormController
5
 
6
 
7
  def mainTesterForm(req: HttpRequest):
@@ -20,7 +20,7 @@ def mainTesterForm(req: HttpRequest):
20
 
21
  if not isinstance(order, dict):
22
  req.session["id_order"] = order.id
23
- if view_controller.isEndedSession(req.session["id_participation"]):
24
  context["message"] = "El catador ha terminado de realizar su evaluación, espere instrucciones del presentador"
25
  context["has_ended"] = True
26
 
@@ -28,19 +28,21 @@ def mainTesterForm(req: HttpRequest):
28
  elif req.method == "POST":
29
  if req.POST["action"] == "start_posting":
30
  if "id_order" in req.session:
31
- update_participation = view_controller.endedToFalseAndActiveTester(req.session["id_participation"])
 
32
  if isinstance(update_participation, dict):
33
  context["error"] = update_participation["error"]
34
  return render(req, "tecnicas/forms_tester/main_tester.html", context)
35
-
36
  return redirect(reverse("cata_system:session_convencional"))
37
 
38
  order = view_controller.assignOrder()
39
  if isinstance(order, dict):
40
  context["error"] = order["error"]
41
  return render(req, "tecnicas/forms_tester/main_tester.html", context)
42
-
43
- update_participation = view_controller.endedToFalseAndActiveTester(req.session["id_participation"])
 
44
  if isinstance(update_participation, dict):
45
  context["error"] = update_participation["error"]
46
  return render(req, "tecnicas/forms_tester/main_tester.html", context)
 
1
  from django.http import HttpRequest, JsonResponse
2
  from django.shortcuts import render, redirect
3
  from django.urls import reverse
4
+ from ...controllers import SesionController, MainTesterFormController, ParticipacionController
5
 
6
 
7
  def mainTesterForm(req: HttpRequest):
 
20
 
21
  if not isinstance(order, dict):
22
  req.session["id_order"] = order.id
23
+ if view_controller.isEndedSession(id_participation=req.session["id_participation"], repetition=session.tecnica.repecion):
24
  context["message"] = "El catador ha terminado de realizar su evaluación, espere instrucciones del presentador"
25
  context["has_ended"] = True
26
 
 
28
  elif req.method == "POST":
29
  if req.POST["action"] == "start_posting":
30
  if "id_order" in req.session:
31
+ update_participation = ParticipacionController.enterSession(
32
+ id_participation=req.session["id_participation"])
33
  if isinstance(update_participation, dict):
34
  context["error"] = update_participation["error"]
35
  return render(req, "tecnicas/forms_tester/main_tester.html", context)
36
+
37
  return redirect(reverse("cata_system:session_convencional"))
38
 
39
  order = view_controller.assignOrder()
40
  if isinstance(order, dict):
41
  context["error"] = order["error"]
42
  return render(req, "tecnicas/forms_tester/main_tester.html", context)
43
+
44
+ update_participation = ParticipacionController.enterSession(
45
+ id_participation=req.session["id_participation"])
46
  if isinstance(update_participation, dict):
47
  context["error"] = update_participation["error"]
48
  return render(req, "tecnicas/forms_tester/main_tester.html", context)