File size: 3,077 Bytes
7630d83
 
 
 
 
 
 
 
 
 
5fd9ba0
7630d83
 
 
 
 
 
5fd9ba0
 
 
 
 
 
 
 
 
7630d83
5fd9ba0
 
7630d83
 
5fd9ba0
 
 
 
 
 
 
7630d83
5fd9ba0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7630d83
 
 
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
from django.http import JsonResponse, HttpRequest
from django.db import transaction
from tecnicas.models import Calificacion, Dato, ValorBooleano, Participacion, Palabra


class RatingCataController():
    def __init__(self):
        pass

    @staticmethod
    def saveRatingWords(request: HttpRequest, data_words: list[dict], data_prodct: dict):
        try:
            with transaction.atomic():
                participation = Participacion.objects.get(
                    id=request.session["id_participation"])
                if not participation:
                    raise ValueError("No está autorizado en la sesión")

                ids_words = []
                words_values = {}

                # Acoplar datos para usar
                for da_wo in data_words:
                    ids_words.append(da_wo["id"])
                    words_values[da_wo["word"]] = da_wo["is_check"]

                words_for_rating = Palabra.objects.filter(id__in=ids_words)
                if not words_for_rating:
                    raise ValueError("No se han encontrado sus palabras")

                technique = participation.tecnica

                # Creando la calificacion
                (rating, creataed) = Calificacion.objects.get_or_create(
                    num_repeticion=technique.repeticion,
                    id_producto_id=data_prodct["id"],
                    id_tecnica=technique,
                    id_catador=request.user.user_catador
                )
                if not rating:
                    raise ValueError("Problemas al crear la calificación")

                # Guardando datos
                data_for_save = []
                for word in words_for_rating:
                    data_for_save.append(Dato(
                        id_palabra=word,
                        id_calificacion=rating
                    ))

                Dato.objects.bulk_create(data_for_save)
                data_saved = Dato.objects.filter(
                    id_calificacion=rating).only("id_palabra")
                if not data_saved:
                    raise ValueError("Problemas al crear los datos")

                # Guardando valores de datos
                values_for_save = []
                for data in data_saved:
                    word_for_rating = data.id_palabra.nombre_palabra
                    values_for_save.append(
                        ValorBooleano(
                            id_dato=data,
                            valor=words_values[word_for_rating]
                        )
                    )

                ValorBooleano.objects.bulk_create(values_for_save)
                values_saves = ValorBooleano.objects.filter(
                    id_dato__id_calificacion=rating).count()
                if not values_saves:
                    raise ValueError("Error al guardar los datos")

            return JsonResponse({"message": "Valores guardados"})

        except ValueError as e:
            print(f"Error de calificacion: {e}")
            return JsonResponse({"error": e}, statusstatus=500)