-
Notifications
You must be signed in to change notification settings - Fork 7
/
excel_generator.py
144 lines (124 loc) · 4.5 KB
/
excel_generator.py
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
133
134
135
136
137
138
139
140
141
142
143
144
import xlsxwriter
from telegram.ext import run_async
import tariffs
_EXCEL_DOCS_FOLDER = 'docs'
@run_async
def transactions_excel(bot, user):
transfer_from = {
'Сумма': 'amount',
'Дата': 'created_at',
'От пользователя': 'from_user',
}
transfer_to = {
'Сумма': 'amount',
'Дата': 'created_at',
'Пользователю': 'to_user',
}
cols = {
'Сумма': 'amount',
'Дата': 'created_at',
}
withdrawals = user.withdrawals
top_ups = user.top_ups
deposit_transfers = user.deposit_transfers
transfers_from = user.transfers_from
transfers_to = user.transfers_to
filename = f'{_EXCEL_DOCS_FOLDER}/transactions/{user}_transactions.xlsx'
workbook = xlsxwriter.Workbook(filename)
worksheet = workbook.add_worksheet()
bold = workbook.add_format({'bold': True})
header = workbook.add_format()
header.set_font_size(15)
row = 0
worksheet.write(row, 0, 'Выводы', header)
row += 1
row = _write_models_to_excel(withdrawals, cols, worksheet, bold, row)
row += 1
worksheet.write(row, 0, 'Пополнения', header)
row += 1
row = _write_models_to_excel(top_ups, cols, worksheet, bold, row)
row += 1
worksheet.write(row, 0, 'Переводы в депозит', header)
row += 1
row = _write_models_to_excel(deposit_transfers, cols, worksheet, bold, row)
row += 1
worksheet.write(row, 0, 'Переводы другим пользователям', header)
row += 1
row = _write_models_to_excel(transfers_from, transfer_to, worksheet, bold, row)
row += 1
worksheet.write(row, 0, 'Переводы вам от других пользователей', header)
row += 1
row = _write_models_to_excel(transfers_to, transfer_from, worksheet, bold, row)
workbook.close()
bot.send_document(chat_id=user.chat_id, document=open(filename, 'rb'))
@run_async
def partners_excel(bot, user):
cols = {
'Телеграм username': 'username',
'Имя': 'first_name',
'Фамилия': 'last_name',
'Депозит': 'deposit',
'Дата регистрации': 'created_at'
}
partners_list = user.partners_per_levels
filename = f'{_EXCEL_DOCS_FOLDER}/partners/{user}_partners.xlsx'
workbook = xlsxwriter.Workbook(filename)
worksheet = workbook.add_worksheet()
bold = workbook.add_format({'bold': True})
row = 0
level_number = 0
total_partners_reward = 0
for level in partners_list:
if not row == 0:
row += 2
worksheet.write(row, 0, f'{level_number + 1} реферальный уровень', bold)
if level_number == 0:
worksheet.write(row, 2, user.first_level_partners_deposit, bold)
elif level_number == 1:
worksheet.write(row, 2, user.second_level_partners_deposit, bold)
elif level_number == 2:
worksheet.write(row, 2, user.third_level_partners_deposit, bold)
row += 1
col = 0
for field in cols.keys():
worksheet.write(row, col, field, bold)
col += 1
row += 1
col = 0
for partner in level:
for prop_name in cols.values():
if prop_name == 'created_at':
worksheet.write(row, col, partner.created_at.strftime("%d/%m/%y"))
else:
worksheet.write(row, col, getattr(partner, prop_name))
col += 1
row += 1
col = 0
level_number += 1
row += 1
col = 0
workbook.close()
bot.send_document(chat_id=user.chat_id, document=open(filename, 'rb'))
def _write_models_to_excel(models, cols, worksheet, bold, row_start_with):
row = row_start_with
col = 0
for field in cols.keys():
worksheet.write(row, col, field, bold)
col += 1
row += 1
col = 0
for model in models:
for prop_name in cols.values():
try:
if prop_name == 'created_at':
worksheet.write(row, col, model.created_at.strftime("%d/%m/%y"))
elif prop_name == 'to_user' or prop_name == 'from_user':
worksheet.write(row, col, f'@{getattr(model, prop_name).username}')
else:
worksheet.write(row, col, getattr(model, prop_name))
except AttributeError:
continue
col += 1
row += 1
col = 0
return row