Passed
Push — master ( 8b8a94...a99553 )
by Yohann
03:39
created

work_list.WorkList.regenerate()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 2
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
import json
2
import time
3
import discord
4
5
from app.classes.abc.message_manager import MessageManager
6
from app.exceptions import EmployeeFound, EmployeeNotFound
7
from app.utils import get_int, get_last_q_hour
8
9
10
class WorkList(MessageManager):
11
12
    def __init__(self, message):
13
        self.work_list_message = message
14
        self.regen_channel = message.channel
15
16
        fields = message.embeds[0].fields
17
18
        self.paye_amount = 100
19
20
        self.work_list = parse_from_message(
21
            fields[0].value, 'Aucun employés actifs', ' || '
22
        )
23
24
        self.payees = parse_from_message(
25
            fields[1].value, 'Pas de salaires enregistré', '$'
26
        )
27
28
    async def regenerate(self, update_embed):
29
        self.work_list_message = await self.regen_channel.send(
30
            embed=update_embed
31
        )
32
33
    async def update(self):
34
        update_embed = discord.Embed(
35
            title="Travail",
36
            description=get_embed_description()
37
        ).add_field(
38
            name="Actifs",
39
            value='\n'.join(
40
                f'- <@{employee_name}> || {start_time} ||'
41
                for employee_name, start_time in self.work_list.items()
42
            ) or 'Aucun employés actifs'
43
        ).add_field(
44
            name="Payes",
45
            value='\n'.join(
46
                f'- <@{employee_name}> `${payee:,}`'
47
                for employee_name, payee in self.payees.items()
48
            ) or 'Pas de salaires enregistré',
49
            inline=False
50
        ).add_field(
51
            name='Tarif (15min)',
52
            value=f'> `${self.paye_amount:,}`'
53
        )
54
55
        try:
56
            await self.work_list_message.edit(
57
                content='',
58
                embed=update_embed
59
            )
60
        except discord.errors.NotFound:
61
            await self.regenerate(update_embed)
62
63
        print("generating backup...", end='')
64
        with open(f"bak/{time.time():.0f}", 'w+') as f:
65
            json.dump(update_embed.to_dict(), f, indent=4)
66
67
            print('[OK]')
68
69
    async def update_salaries(self):
70
        for employee_name in list(self.work_list.keys()):
71
            if self.payees.get(employee_name) is None:
72
                self.payees[employee_name] = 0
73
74
            self.payees[employee_name] += self.paye_amount
75
76
        await self.update()
77
78
    async def add(self, worker, t=0):
79
        if worker in self.work_list:
80
            raise EmployeeFound(worker)
81
82
        self.work_list[worker] = t or get_last_q_hour()
83
        await self.update()
84
85
    async def remove(self, worker):
86
        if worker not in self.work_list:
87
            raise EmployeeNotFound(worker)
88
89
        self.work_list.pop(worker)
90
        await self.update()
91
92
    async def wipe(self):
93
        self.payees = {}
94
        await self.update()
95
96
97
def get_embed_description() -> str:
98
    with open('assets/worklist_description.txt', encoding='utf-8') as f:
99
        return f.read()
100
101
102
def parse_from_message(content, empty, delim):
103
    if content == empty:
104
        return {}
105
106
    parsed = {}
107
    for line in content.splitlines():
108
        left, right = line.split(delim)
109
        parsed[get_int(left)] = get_int(right)
110
111
    return parsed
112