Spaces:
Sleeping
Sleeping
| 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") | |
| 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 | |
| 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 | |