File size: 4,504 Bytes
b0a47bb
c27a5ae
6bd93b2
 
 
b0a47bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e102c92
b0a47bb
e102c92
b0a47bb
 
 
 
 
 
 
 
 
 
 
 
 
e102c92
b0a47bb
 
 
 
 
e102c92
c27a5ae
 
 
cb53e82
c27a5ae
 
4f8a4a6
c27a5ae
d9a3269
c27a5ae
9987ed0
 
 
 
c27a5ae
 
68f34db
9987ed0
 
c27a5ae
 
 
9987ed0
c27a5ae
 
 
9987ed0
 
c27a5ae
9987ed0
 
 
c27a5ae
9987ed0
 
d9a3269
 
 
 
 
 
 
c27a5ae
68f34db
 
 
 
 
 
 
 
 
 
fbcc0ff
68f34db
 
 
 
 
 
 
 
6bd93b2
fda68cd
 
 
 
 
 
 
c27a5ae
 
 
 
4f8a4a6
c27a5ae
68f34db
 
c27a5ae
68f34db
 
e102c92
6bd93b2
 
c6381c2
 
 
6bd93b2
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
120
121
122
123
124
125
126
127
128
129
130
131
132
from django.db import DatabaseError
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from tecnicas.models import Tecnica, Presentador, SesionSensorial
from tecnicas.utils import controller_error
from ..models_controller.particiapacion_controller import ParticipacionController


class SesionController():
    def __init__(self, name_session: str, technique: Tecnica, creator: Presentador):
        self.name_session = name_session or None
        self.technique = technique or None
        self.presenter = creator or None

    def setData(self, name_session: str, technique: Tecnica, creator: Presentador):
        self.name_session = name_session
        self.technique = technique
        self.presenter = creator

    def setSession(self):
        if not self.presenter:
            return controller_error("Se requiere presentador para crear sesión")
        elif not self.technique:
            return controller_error("Se requiere técnica para crear sesión")

        self.sensorial_session = SesionSensorial(
            tecnica=self.technique,
            creadoPor=self.presenter,
        )

        if self.name_session != "":
            self.sensorial_session.nombre_sesion = self.name_session

        return self.sensorial_session

    def saveSession(self):
        if not self.sensorial_session:
            return controller_error("No se ha definido la sesión a guardar")

        try:
            self.sensorial_session.save()
            return self.sensorial_session
        except DatabaseError as error:
            return controller_error("Error al crear la sesión sensorial")

    @staticmethod
    def getSessionsSavesByCretor(user_name: str, page: int):
        elements_by_page = 6

        try:
            creator = Presentador.objects.get(user__username=user_name)
        except Presentador.DoesNotExist:
            return controller_error("Presentador invalido")

        queryset = (
            SesionSensorial.objects
            .filter(creadoPor=creator)
            .select_related(
                "tecnica",
                "tecnica__tipo_tecnica",
                "tecnica__id_estilo"
            )
            .only(
                "codigo_sesion",
                "nombre_sesion",
                "fechaCreacion",
                "activo",
                "tecnica__tipo_tecnica__nombre_tecnica",
                "tecnica__id_estilo__nombre_estilo"
            )
            .order_by("-fechaCreacion")
        )

        paginator = Paginator(queryset, elements_by_page)
        try:
            sessions_in_page = paginator.page(page)
        except PageNotAnInteger:
            return controller_error("índice inválido")

        if not sessions_in_page.object_list:
            return controller_error("Sin registros de sesiones")

        current_page = sessions_in_page.number
        is_last_page = not current_page < paginator.num_pages

        return (sessions_in_page, is_last_page, current_page)

    @staticmethod
    def getSessionByCodePanelTester(code: str):
        try:
            session = SesionSensorial.objects.select_related(
                "tecnica",
                "tecnica__tipo_tecnica",
                "tecnica__id_estilo"
            ).only(
                "codigo_sesion",
                "nombre_sesion",
                "tecnica__repeticion",
                "tecnica__instrucciones",
                "tecnica__tipo_tecnica__nombre_tecnica",
                "tecnica__id_estilo__nombre_estilo"
            ).get(codigo_sesion=code)

            return session
        except SesionSensorial.DoesNotExist:
            return controller_error("La sesión ya no existe")

    @staticmethod
    def getSessionByCode(code: str):
        try:
            session = SesionSensorial.objects.get(codigo_sesion=code)
            return session
        except SesionSensorial.DoesNotExist:
            return controller_error("La sesión ya no existe")

    @staticmethod
    def getNumberSessionsByCreator(user_name: str):
        try:
            creator = Presentador.objects.get(user__username=user_name)

            number_sessions = SesionSensorial.objects.filter(
                creadoPor=creator).count()

            return number_sessions/9
        except Presentador.DoesNotExist:
            return controller_error("Presentador invalido")

    @staticmethod
    def finishRepetion(session: SesionSensorial):
        session.activo = False
        session.save()
        return session