Spaces:
Sleeping
Sleeping
File size: 4,047 Bytes
0a56c42 6a403bf 77d44b9 b417c45 f13624c 6a403bf 9d6dd50 6a403bf f13624c 6a403bf f13624c 6a403bf 9d6dd50 3dc7a4b 9d6dd50 f13624c 9d6dd50 3dc7a4b 9d6dd50 f13624c 9d6dd50 f13624c b417c45 f13624c b417c45 6a403bf b417c45 6a403bf b417c45 77d44b9 268cd30 df77b9b 77d44b9 0a56c42 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
from tecnicas.models import Calificacion, Dato, Palabra, ValorDecimal, ValorBooleano, Tecnica, Catador
from tecnicas.utils import controller_error, getId
from django.core.exceptions import ValidationError
from django.db.models import F
class DatoController():
def __init__(self, word: Palabra | int, rating: Calificacion | int, value_rating: int | bool):
atributes = {
"id_palabra_id": getId(word),
"id_calificacion_id": getId(rating)
}
self.data = Dato(**atributes)
self.value_rating = value_rating
def setRating(self, new_rating: Calificacion):
try:
self.data.id_calificacion = new_rating
return self.data.id_calificacion
except ValidationError as e:
return controller_error(e.message)
def validateRating(self):
try:
self.data.full_clean()
return self.data
except ValidationError as e:
return controller_error(e.message)
def saveData(self):
try:
self.data.save()
return self.data
except ValidationError as e:
return controller_error(e.message)
def setValue(self):
type_technique = self.data.id_calificacion.id_tecnica.tipo_tecnica
if type_technique == "cata":
self.value_data = ValorBooleano(valor=self.value_rating)
else:
type_scale = self.data.id_calificacion.id_tecnica.escala_tecnica.id_tipo_escala.nombre_escala
if type_scale == "continua":
decimal_value = self.value_rating/100
value_rounded = round(decimal_value)
self.value_data = ValorDecimal(valor=value_rounded)
else:
self.value_data = ValorDecimal(valor=self.value_rating)
self.value_data.id_dato = self.data
return self.value_data
def saveValue(self):
try:
self.value_data.save()
return self.value_data
except ValidationError as e:
return controller_error(e.message)
@staticmethod
def getRerecordedData(ratings: list[Calificacion]):
'''
Get Datos' registers for each Calificacion.
Datos' registers no contain the value of rating.
'''
if not ratings:
return []
ids_ratings = [rat.id for rat in ratings]
recoreded_data = list(Dato.objects.filter(
id_calificacion_id__in=ids_ratings))
return recoreded_data
@staticmethod
def getWordValuesForConvecional(technique: Tecnica, ratings: list[Calificacion]):
model = ValorBooleano if technique.tipo_tecnica == "cata" else ValorDecimal
ids_ratings = [rat.id for rat in ratings]
result = (
model.objects
.filter(id_dato__id_calificacion_id__in=ids_ratings)
.values(
nombre_palabra=F("id_dato__id_palabra__nombre_palabra"),
repeticion=F("id_dato__id_calificacion__num_repeticion"),
producto_code=F(
"id_dato__id_calificacion__id_producto__codigoProducto"),
usuario_catador=F(
"id_dato__id_calificacion__id_catador__user__username"),
dato_valor=F("valor")
)
)
return list(result)
@staticmethod
def getWordValuesPF(technique: Tecnica, ratings: list[Calificacion], tester: Catador):
ids_ratings = [rat.id for rat in ratings]
result = (
ValorDecimal.objects
.filter(id_dato__id_calificacion_id__in=ids_ratings, id_dato__id_calificacion__id_catador=tester)
.values(
nombre_palabra=F("id_dato__id_palabra__nombre_palabra"),
repeticion=F("id_dato__id_calificacion__num_repeticion"),
producto_code=F(
"id_dato__id_calificacion__id_producto__codigoProducto"),
dato_valor=F("valor")
)
)
return list(result)
|