summaryrefslogtreecommitdiff
path: root/web/apps/user_operation/serializer.py
blob: 1a18f325dcf482b6cacb9f15a262f6bd83298ed4 (plain)
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
from django.db.models import Count
from rest_framework import serializers

from pgperffarm.settings import DB_ENUM,AVATAR_URL
from test_records.serializer import TestRecordListSerializer
from users.serializer import AliasSerializer, UserMachineSerializer
from test_records.models import TestRecord
from users.models import UserMachine, Alias, UserProfile
import hashlib


class UserPortalInfoSerializer(serializers.ModelSerializer):
    involved = serializers.SerializerMethodField()
    reports = serializers.SerializerMethodField()
    machines = serializers.SerializerMethodField()
    avatar = serializers.SerializerMethodField()
    date_joined = serializers.SerializerMethodField()

    class Meta:
        model = UserProfile
        fields = ('email', 'involved', 'reports', 'date_joined', 'machines', 'avatar')

    def date_joined(self, obj):
        return obj.date_joined.strftime('%Y')

    def get_avatar(self, obj):
        email = obj.email
        avatar = AVATAR_URL + hashlib.md5(email).hexdigest()
        return avatar

    def get_machines(self, obj):
        '''
        machines num
        '''

        return UserMachine.objects.filter(machine_owner_id=obj.id).count()

    def get_reports(self, obj):
        '''
        reports num
        '''
        machine_dict = []
        target_machines = UserMachine.objects.filter(machine_owner_id=obj.id)
        serializer = UserMachineSerializer(target_machines, many=True)
        # print(serializer.data)
        for item in serializer.data:
            machine_dict.append(item['machine_sn'])

        reports = TestRecord.objects.filter(test_machine__machine_sn__in=machine_dict).count()

        return reports

    def get_involved(self, obj):
        '''
        reports, machines, branches
        '''
        machine_dict = []
        target_machines = UserMachine.objects.filter(machine_owner_id=obj.id)
        serializer = UserMachineSerializer(target_machines, many=True)
        # print(serializer.data)
        for item in serializer.data:
            machine_dict.append(item['machine_sn'])

        reports = TestRecord.objects.filter(test_machine__machine_sn__in=machine_dict).values_list('branch__branch_name').annotate(Count('id'))
        return reports.count()

class CreateUserMachineSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserMachine
        fields = "__all__"

class UserMachineManageSerializer(serializers.ModelSerializer):
    '''
    use UserMachineSerializer
    '''

    alias = serializers.SerializerMethodField()
    reports = serializers.SerializerMethodField()
    lastest = serializers.SerializerMethodField()
    state = serializers.SerializerMethodField()

    class Meta:
        model = UserMachine
        fields = (
        'alias', 'machine_sn', 'os_name', 'os_version', 'comp_name', 'comp_version', 'reports', 'state', 'lastest',
        'state', 'add_time')

    def get_state(self, obj):
        state_code = obj.state
        new_dict = {v: k for k, v in DB_ENUM["machine_state"].items()}
        return new_dict[state_code]

    def get_alias(self, obj):
        target_alias = Alias.objects.filter(id=obj.alias_id).first()

        serializer = AliasSerializer(target_alias)
        return serializer.data['name']

    def get_reports(self, obj):
        reports_num = TestRecord.objects.filter(test_machine_id=obj.id).count()
        return reports_num

    def get_lastest(self, obj):
        record_branch_list = TestRecord.objects.filter(test_machine_id=obj.id).values_list(
            'branch').annotate(Count('id'))
        # < QuerySet[(1, 4), (2, 5)] >
        ret = []
        for branch_item in record_branch_list:
            # branch_name = branch_item[0]

            target_record = TestRecord.objects.filter(test_machine_id=obj.id, branch=branch_item[0]).first()
            serializer = TestRecordListSerializer(target_record)

            ret.append(serializer.data)

        return ret