File size: 3,733 Bytes
b417c45
adaa824
cf8de8a
365183d
d21ee1b
 
365183d
b0a47bb
365183d
e49f021
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
365183d
adaa824
 
 
b0a47bb
 
e102c92
365183d
adaa824
 
365183d
b0a47bb
 
adaa824
b0a47bb
 
 
 
 
adaa824
b0a47bb
 
 
 
365183d
adaa824
b0a47bb
 
adaa824
b0a47bb
adaa824
 
b0a47bb
adaa824
 
 
b0a47bb
 
adaa824
 
 
b0a47bb
adaa824
 
b0a47bb
adaa824
 
e102c92
b417c45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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