-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPaymentParser.py
More file actions
134 lines (121 loc) · 5.09 KB
/
PaymentParser.py
File metadata and controls
134 lines (121 loc) · 5.09 KB
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
import xml.dom.minidom as minidom
import logging
import time
import sys
try:
from xlsxwriter.workbook import Workbook
from dateutil import parser
except ImportError as err:
print(err)
time.sleep(20)
PATH_ = 'C:\\PythonProgs\\ForReports\\Payments\\'
def dt_convert(dt):
return parser.parse(dt).strftime("%d.%m.%Y")
def get_all_text(node) -> str:
if node.nodeType == node.TEXT_NODE:
value = node.data
else:
value = ''.join(get_all_text(child_node) for child_node in node.childNodes)
return value
def convert_items(lst):
try:
for item in lst:
if "MSK" not in item[0]:
log.info("Wrong date format")
raise Exception("Wrong date format")
elif "MSK" not in item[1]:
log.info("Wrong date format")
raise Exception("Wrong date format")
else:
item[0] = dt_convert(item[0])
item[1] = dt_convert(item[1])
except (TypeError, parser.ParserError):
log.error("Exception occurred", exc_info=True)
time.sleep(20)
def transform_data(workbook_, data, sheet_name):
try:
worksheet = workbook_.add_worksheet(name=sheet_name)
for row_num, row_data in enumerate(data):
for col_num, col_data in enumerate(row_data):
worksheet.set_column(col_num, 5, 20)
worksheet.write(row_num+1, col_num, col_data)
except (Exception, TypeError, AttributeError):
log.error("Exception occurred", exc_info=True)
time.sleep(20)
def parsingxml(xml):
try:
with minidom.parse(xml) as doc:
xml_tuple = (
"col_date_of_payment", "col_actual_payment_date", "col_account_id",
"col_full_name", "col_volume", "col_comment", "col_payment_method"
)
y = []
for row_el in doc.getElementsByTagName("row"):
row = []
for tag_name in xml_tuple:
child_el = row_el.getElementsByTagName(tag_name)[0]
child_text = get_all_text(child_el) or "No data"
row.append(child_text)
y.append(row)
except (Exception, TypeError, AttributeError):
log.error("Exception occurred", exc_info=True)
time.sleep(20)
else:
log.info("Считаем количество платежей")
yield tuple(y)
def check_type(xml):
try:
data = next(parsingxml(xml))
log.info(f"Суммарно: {len(data)}")
x = [
list(item[:-1]) for item in data \
if item[6] == "Перерасчет (103)"\
and item[2] != "Суммарно"
]
y = [
list(item[:-1]) for item in data \
if item[6] == "Перенос денежных средств (106)"\
and item[2] != "Суммарно"
]
z = [
list(item[:-1]) for item in data \
if item[6] == "Оплата наличными (возврат средств) (109)"\
and item[2] != "Суммарно"
]
convert_items(x)
convert_items(y)
convert_items(z)
log.info(f"Количество перерасчетов за Июнь: {len(x)}")
log.info(f"Количество переносов за Июнь: {len(y)}")
log.info(f"Количество возвратов за Июнь: {len(z)}")
except (Exception, TypeError, AttributeError):
log.error("Exception occurred", exc_info=True)
time.sleep(20)
else:
try:
with Workbook('C:\\PythonProgs\\ForReports\\Payments\\Платежи.xlsx',\
{'strings_to_numbers': True, 'default_date_format': '%d.%m.%Y'}) as workbook:
transform_data(workbook, x, sheet_name="Перерасчеты")
transform_data(workbook, y, sheet_name="Переносы")
transform_data(workbook, z, sheet_name="Возвраты")
except (Exception, TypeError, AttributeError):
log.error("Exception occurred", exc_info=True)
time.sleep(20)
else:
log.info("Экспортировано в xlsx успешно")
input("Нажмите Enter для выхода.")
if __name__ == "__main__":
try:
log = logging.getLogger(__name__)
log.setLevel(logging.INFO)
f_format = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.INFO)
handler.setFormatter(f_format)
log.addHandler(handler)
except Exception as exc:
print(exc)
time.sleep(20)
else:
document = ''.join([PATH_, sys.argv[1]])
check_type(document)