chartManD's picture
Correccion de GET en fase 3 de PF
e49f021
from ...models import Etiqueta, EtiquetasEscala, Escala, TipoEscala, Tecnica
from django.db import DatabaseError
from ...utils import controller_error
class EscalaController():
scale: Escala
tags_relation: dict[str, EtiquetasEscala]
def __init__(self, data, use_scale: Escala = None):
if use_scale:
self.scale = use_scale
else:
self.scale = Escala(
id_tipo_escala=TipoEscala.objects.get(id=data["id_scale"]),
longitud=data["size"],
tecnica=data["technique"]
)
def setScale(self, newData, use_scale: Escala):
if use_scale:
self.scale = use_scale
else:
self.scale = Escala(
id_tipo_escala=TipoEscala.objects.get(id=data["id_scale"]),
longitud=data["size"],
tecnica=data["technique"]
)
def saveScale(self):
try:
self.scale.save()
return self.scale
except DatabaseError as error:
return controller_error("Error al guardar la escala")
def deleteScale(self):
self.scale.delete()
def addAndSaveTags(self, tags: dict):
self.tags_relation = {}
if self.scale.id_tipo_escala.nombre_escala == "cotinua":
ok_tags = self.realte_tags_type_cotinue(tags)
if ok_tags["error"]:
return ok_tags
return self.tags_relation
elif self.scale.id_tipo_escala.nombre_escala == "estructurada":
ok_tags = self.realte_tags_type_structure(tags)
if ok_tags["error"]:
return ok_tags
return self.tags_relation
def deleteRelationshipsWithLabels(self):
for name, tag in self.tags_relation.items():
tag.delete()
def realteTags(self, tags: dict):
try:
index = 1
self.tags_relation = {}
for name, id_tag in tags.items():
tag = Etiqueta.objects.get(id=id_tag)
related_tag = EtiquetasEscala.objects.create(
id_escala=self.scale,
id_etiqueta=tag,
posicion=index
)
self.tags_relation[name] = related_tag
index += 1
return self.tags_relation
except DatabaseError as error:
self.deleteRelationshipsWithLabels()
return controller_error("Error en guardar la relación etiqueta escala")
@staticmethod
def getScaleByTechnique(technique: Tecnica = None, id_technique: int = None):
if technique is not None:
scale = Escala.objects.select_related("id_tipo_escala").only(
"id_tipo_escala", "longitud").get(tecnica=technique)
return scale
if id_technique is not None:
scale = Escala.objects.select_related("id_tipo_escala").only(
"id_tipo_escala", "longitud").get(tecnica_id=id_technique)
return scale
@staticmethod
def getRelatedTagsInScale(scale: Escala = None, id_scale: int = None):
if scale is not None:
scale_tags = list(EtiquetasEscala.objects.filter(
id_escala=scale).select_related("id_etiqueta"))
if len(scale_tags) == 0:
return controller_error("Imposible obtener las etiquetas")
return scale_tags
if id_scale is not None:
scale_tags = list(EtiquetasEscala.objects.filter(
id_escala_id=scale).select_related("id_etiqueta"))
if len(scale_tags) == 0:
return controller_error("Imposible obtener las etiquetas")
return scale_tags