Passed
Push — master ( c8b356...ca4867 )
by Guangyu
09:12 queued 13s
created

is_base_period_timestamp_exists()   A

Complexity

Conditions 4

Size

Total Lines 11
Code Lines 8

Duplication

Lines 11
Ratio 100 %

Importance

Changes 0
Metric Value
eloc 8
dl 11
loc 11
rs 10
c 0
b 0
f 0
cc 4
nop 1
1
import base64
2
import gettext
3
import os
4
import re
5
import uuid
6
7
import openpyxl.utils.cell as format_cell
8
from openpyxl import Workbook
9
from openpyxl.chart import LineChart, Reference
10
from openpyxl.chart.label import DataLabelList
11
from openpyxl.drawing.image import Image
12
from openpyxl.styles import PatternFill, Border, Side, Alignment, Font
13
14
15
########################################################################################################################
16
# PROCEDURES
17
# Step 1: Validate the report data
18
# Step 2: Generate excel file
19
# Step 3: Encode the excel file to Base64
20
########################################################################################################################
21
22
23 View Code Duplication
def export(report,
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
24
           name,
25
           base_period_start_datetime_local,
26
           base_period_end_datetime_local,
27
           reporting_start_datetime_local,
28
           reporting_end_datetime_local,
29
           period_type,
30
           language):
31
    ####################################################################################################################
32
    # Step 1: Validate the report data
33
    ####################################################################################################################
34
    if report is None:
35
        return None
36
37
    ####################################################################################################################
38
    # Step 2: Generate excel file from the report data
39
    ####################################################################################################################
40
    filename = generate_excel(report,
41
                              name,
42
                              base_period_start_datetime_local,
43
                              base_period_end_datetime_local,
44
                              reporting_start_datetime_local,
45
                              reporting_end_datetime_local,
46
                              period_type,
47
                              language)
48
    ####################################################################################################################
49
    # Step 3: Encode the excel file to Base64
50
    ####################################################################################################################
51
    binary_file_data = b''
52
    try:
53
        with open(filename, 'rb') as binary_file:
54
            binary_file_data = binary_file.read()
55
    except IOError as ex:
56
        print(str(ex))
57
58
    # Base64 encode the bytes
59
    base64_encoded_data = base64.b64encode(binary_file_data)
60
    # get the Base64 encoded data using human-readable characters.
61
    base64_message = base64_encoded_data.decode('utf-8')
62
    # delete the file from server
63
    try:
64
        os.remove(filename)
65
    except NotImplementedError as ex:
66
        print(str(ex))
67
    return base64_message
68
69
70
def generate_excel(report,
71
                   name,
72
                   base_period_start_datetime_local,
73
                   base_period_end_datetime_local,
74
                   reporting_start_datetime_local,
75
                   reporting_end_datetime_local,
76
                   period_type,
77
                   language):
78
    locale_path = './i18n/'
79
    if language == 'zh_CN':
80
        trans = gettext.translation('myems', locale_path, languages=['zh_CN'])
81
    elif language == 'de':
82
        trans = gettext.translation('myems', locale_path, languages=['de'])
83
    elif language == 'en':
84
        trans = gettext.translation('myems', locale_path, languages=['en'])
85
    else:
86
        trans = gettext.translation('myems', locale_path, languages=['en'])
87
    trans.install()
88
    _ = trans.gettext
89
    wb = Workbook()
90
    ws = wb.active
91
    ws.title = "EquipmentEfficiency"
92
93
    # Row height
94
    ws.row_dimensions[1].height = 102
95
    for i in range(2, 2000 + 1):
96
        ws.row_dimensions[i].height = 42
97
98
    # Col width
99
    ws.column_dimensions['A'].width = 1.5
100
101
    ws.column_dimensions['B'].width = 25.0
102
103
    for i in range(ord('C'), ord('Z')):
104
        ws.column_dimensions[chr(i)].width = 15.0
105
106
    # Font
107
    name_font = Font(name='Arial', size=15, bold=True)
108
    title_font = Font(name='Arial', size=15, bold=True)
109
110
    table_fill = PatternFill(fill_type='solid', fgColor='90ee90')
111
    f_border = Border(left=Side(border_style='medium'),
112
                      right=Side(border_style='medium'),
113
                      bottom=Side(border_style='medium'),
114
                      top=Side(border_style='medium')
115
                      )
116
    b_border = Border(bottom=Side(border_style='medium'),)
117
118
    b_c_alignment = Alignment(vertical='bottom',
119
                              horizontal='center',
120
                              text_rotation=0,
121
                              wrap_text=True,
122
                              shrink_to_fit=False,
123
                              indent=0)
124
    c_c_alignment = Alignment(vertical='center',
125
                              horizontal='center',
126
                              text_rotation=0,
127
                              wrap_text=True,
128
                              shrink_to_fit=False,
129
                              indent=0)
130
    b_r_alignment = Alignment(vertical='bottom',
131
                              horizontal='right',
132
                              text_rotation=0,
133
                              wrap_text=True,
134
                              shrink_to_fit=False,
135
                              indent=0)
136
    # Img
137
    img = Image("excelexporters/myems.png")
138
    ws.add_image(img, 'A1')
139
140
    # Title
141
    ws['B3'].alignment = b_r_alignment
142
    ws['B3'] = _('Name') + ':'
143
    ws['C3'].border = b_border
144
    ws['C3'].alignment = b_c_alignment
145
    ws['C3'] = name
146
147
    ws['D3'].alignment = b_r_alignment
148
    ws['D3'] = _('Period Type') + ':'
149
    ws['E3'].border = b_border
150
    ws['E3'].alignment = b_c_alignment
151
    ws['E3'] = period_type
152
153
    ws['B4'].alignment = b_r_alignment
154
    ws['B4'] = _('Reporting Start Datetime') + ':'
155
    ws['C4'].border = b_border
156
    ws['C4'].alignment = b_c_alignment
157
    ws['C4'] = reporting_start_datetime_local
158
159
    ws['D4'].alignment = b_r_alignment
160
    ws['D4'] = _('Reporting End Datetime') + ':'
161
    ws['E4'].border = b_border
162
    ws['E4'].alignment = b_c_alignment
163
    ws['E4'] = reporting_end_datetime_local
164
165
    is_base_period_timestamp_exists_flag = is_base_period_timestamp_exists(report['base_period_efficiency'])
166
167
    if is_base_period_timestamp_exists_flag:
168
        ws['B5'].alignment = b_r_alignment
169
        ws['B5'] = _('Base Period Start Datetime') + ':'
170
        ws['C5'].border = b_border
171
        ws['C5'].alignment = b_c_alignment
172
        ws['C5'] = base_period_start_datetime_local
173
174
        ws['D5'].alignment = b_r_alignment
175
        ws['D5'] = _('Base Period End Datetime') + ':'
176
        ws['E5'].border = b_border
177
        ws['E5'].alignment = b_c_alignment
178
        ws['E5'] = base_period_end_datetime_local
179
180
    if "reporting_period_efficiency" not in report.keys() or \
181
            "names" not in report['reporting_period_efficiency'].keys() or len(
182
            report['reporting_period_efficiency']['names']) == 0:
183
        filename = str(uuid.uuid4()) + '.xlsx'
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable str does not seem to be defined.
Loading history...
184
        wb.save(filename)
185
186
        return filename
187
188
    ####################################################################################################################
189
190
    current_row_number = 7
191
    reporting_period_data = report['reporting_period_efficiency']
192
    if "names" not in reporting_period_data.keys() or \
193
            reporting_period_data['names'] is None or \
194
            len(reporting_period_data['names']) == 0:
195
        pass
196
    else:
197
        ws['B' + str(current_row_number)].font = title_font
198
        ws['B' + str(current_row_number)] = name + ' ' + _('Reporting Period Cumulative Efficiency')
199
200
        current_row_number += 1
201
202
        category = reporting_period_data['names']
203
        ca_len = len(category)
204
205
        ws.row_dimensions[current_row_number].height = 80
206
        ws['B' + str(current_row_number)].fill = table_fill
207
        ws['B' + str(current_row_number)].border = f_border
208
209
        col = 'C'
210
211
        for i in range(0, ca_len):
212
            ws[col + str(current_row_number)].fill = table_fill
213
            ws[col + str(current_row_number)].font = name_font
214
            ws[col + str(current_row_number)].alignment = c_c_alignment
215
            ws[col + str(current_row_number)].border = f_border
216
            ws[col + str(current_row_number)] = \
217
                reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
218
219
            col = chr(ord(col) + 1)
220
221
            ws[col + str(current_row_number)].fill = table_fill
222
            ws[col + str(current_row_number)].font = name_font
223
            ws[col + str(current_row_number)].alignment = c_c_alignment
224
            ws[col + str(current_row_number)].border = f_border
225
            ws[col + str(current_row_number)] = \
226
                reporting_period_data['numerator_names'][i] + " (" + reporting_period_data['numerator_units'][i] + ")"
227
228
            col = chr(ord(col) + 1)
229
230
            ws[col + str(current_row_number)].fill = table_fill
231
            ws[col + str(current_row_number)].font = name_font
232
            ws[col + str(current_row_number)].alignment = c_c_alignment
233
            ws[col + str(current_row_number)].border = f_border
234
            ws[col + str(current_row_number)] = \
235
                reporting_period_data['denominator_names'][i] + " (" + \
236
                reporting_period_data['denominator_units'][i] + ")"
237
238
            col = chr(ord(col) + 1)
239
240
        current_row_number += 1
241
242
        ws['B' + str(current_row_number)].font = title_font
243
        ws['B' + str(current_row_number)].alignment = c_c_alignment
244
        ws['B' + str(current_row_number)].border = f_border
245
        ws['B' + str(current_row_number)] = _('Cumulative Efficiency')
246
247
        col = 'C'
248
249
        for i in range(0, ca_len):
250
            ws[col + str(current_row_number)].font = name_font
251
            ws[col + str(current_row_number)].alignment = c_c_alignment
252
            ws[col + str(current_row_number)].border = f_border
253
            ws[col + str(current_row_number)] = round(reporting_period_data['cumulations'][i], 2)
254
255
            col = chr(ord(col) + 1)
256
257
            ws[col + str(current_row_number)].font = name_font
258
            ws[col + str(current_row_number)].alignment = c_c_alignment
259
            ws[col + str(current_row_number)].border = f_border
260
            ws[col + str(current_row_number)] = round(reporting_period_data['numerator_cumulation'][i], 2)
261
262
            col = chr(ord(col) + 1)
263
264
            ws[col + str(current_row_number)].font = name_font
265
            ws[col + str(current_row_number)].alignment = c_c_alignment
266
            ws[col + str(current_row_number)].border = f_border
267
            ws[col + str(current_row_number)] = round(reporting_period_data['denominator_cumulation'][i], 2)
268
269
            col = chr(ord(col) + 1)
270
271
        current_row_number += 1
272
273
        ws['B' + str(current_row_number)].font = title_font
274
        ws['B' + str(current_row_number)].alignment = c_c_alignment
275
        ws['B' + str(current_row_number)].border = f_border
276
        ws['B' + str(current_row_number)] = _('Increment Rate')
277
278
        col = 'C'
279
280
        for i in range(0, ca_len):
281
            ws[col + str(current_row_number)].font = name_font
282
            ws[col + str(current_row_number)].alignment = c_c_alignment
283
            ws[col + str(current_row_number)].border = f_border
284
            ws[col + str(current_row_number)] = str(
285
                round(reporting_period_data['increment_rates'][i] * 100, 2)) + '%' \
286
                if reporting_period_data['increment_rates'][i] is not None else '-'
287
288
            col = chr(ord(col) + 1)
289
290
            ws[col + str(current_row_number)].font = name_font
291
            ws[col + str(current_row_number)].alignment = c_c_alignment
292
            ws[col + str(current_row_number)].border = f_border
293
            ws[col + str(current_row_number)] = str(
294
                round(reporting_period_data['increment_rates_num'][i] * 100, 2)) + '%' \
295
                if reporting_period_data['increment_rates_num'][i] is not None else '-'
296
297
            col = chr(ord(col) + 1)
298
299
            ws[col + str(current_row_number)].font = name_font
300
            ws[col + str(current_row_number)].alignment = c_c_alignment
301
            ws[col + str(current_row_number)].border = f_border
302
            ws[col + str(current_row_number)] = str(
303
                round(reporting_period_data['increment_rates_den'][i] * 100, 2)) + '%' \
304
                if reporting_period_data['increment_rates_den'][i] is not None else '-'
305
306
            col = chr(ord(col) + 1)
307
308
        current_row_number += 2
309
310
    ####################################################################################################################
311
312
    has_parameters_names_and_timestamps_and_values_data = True
313
    current_sheet_parameters_row_number = current_row_number
314
315 View Code Duplication
    if 'parameters' not in report.keys() or \
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
316
            report['parameters'] is None or \
317
            'names' not in report['parameters'].keys() or \
318
            report['parameters']['names'] is None or \
319
            len(report['parameters']['names']) == 0 or \
320
            'timestamps' not in report['parameters'].keys() or \
321
            report['parameters']['timestamps'] is None or \
322
            len(report['parameters']['timestamps']) == 0 or \
323
            'values' not in report['parameters'].keys() or \
324
            report['parameters']['values'] is None or \
325
            len(report['parameters']['values']) == 0 or \
326
            timestamps_data_all_equal_0(report['parameters']['timestamps']):
327
328
        has_parameters_names_and_timestamps_and_values_data = False
329
330
    ####################################################################################################################
331
332
    has_values_data = True
333
    has_timestamps_data = True
334
335
    if 'values' not in reporting_period_data.keys() or \
336
            reporting_period_data['values'] is None or \
337
            len(reporting_period_data['values']) == 0:
338
        has_values_data = False
339
340
    if 'timestamps' not in reporting_period_data.keys() or \
341
            reporting_period_data['timestamps'] is None or \
342
            len(reporting_period_data['timestamps']) == 0 or \
343
            len(reporting_period_data['timestamps'][0]) == 0:
344
        has_timestamps_data = False
345
346
    if not is_base_period_timestamp_exists_flag:
347
        if has_values_data and has_timestamps_data:
348
            ca_len = len(reporting_period_data['names'])
349
            time = reporting_period_data['timestamps'][0]
350
351
            ws['B' + str(current_row_number)].font = title_font
352
            ws['B' + str(current_row_number)] = name + ' ' + _('Reporting Period Cumulative Efficiency')
353
354
            current_row_number += 1
355
356
            chart_start_row_number = current_row_number
357
358
            current_row_number += ca_len*3 * 6 + 1
359
360
            if has_parameters_names_and_timestamps_and_values_data:
361
                current_sheet_parameters_row_number = current_row_number
362
                real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
363
                current_row_number += 6*real_timestamps_len + 2
364
365
            ws['B' + str(current_row_number)].font = title_font
366
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
367
368
            current_row_number += 1
369
370
            table_start_row_number = current_row_number
371
372
            ws.row_dimensions[current_row_number].height = 85
373
            current_col_number = 2
374
            col = format_cell.get_column_letter(current_col_number)
375
            ws[col + str(current_row_number)].fill = table_fill
376
            ws[col + str(current_row_number)].font = title_font
377
            ws[col + str(current_row_number)].alignment = c_c_alignment
378
            ws[col + str(current_row_number)].border = f_border
379
            ws[col + str(current_row_number)] = _('Datetime')
380
381
            for i in range(0, ca_len):
382
                current_col_number += 1
383
                col = format_cell.get_column_letter(current_col_number)
384
385
                ws[col + str(current_row_number)].fill = table_fill
386
                ws[col + str(current_row_number)].font = title_font
387
                ws[col + str(current_row_number)].alignment = c_c_alignment
388
                ws[col + str(current_row_number)].border = f_border
389
                ws[col + str(current_row_number)] = \
390
                    reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
391
392
                current_col_number += 1
393
                col = format_cell.get_column_letter(current_col_number)
394
395
                ws[col + str(current_row_number)].fill = table_fill
396
                ws[col + str(current_row_number)].font = title_font
397
                ws[col + str(current_row_number)].alignment = c_c_alignment
398
                ws[col + str(current_row_number)].border = f_border
399
                ws[col + str(current_row_number)] = \
400
                    reporting_period_data['numerator_names'][i] + " (" + reporting_period_data['numerator_units'][
401
                        i] + ")"
402
403
                current_col_number += 1
404
                col = format_cell.get_column_letter(current_col_number)
405
406
                ws[col + str(current_row_number)].fill = table_fill
407
                ws[col + str(current_row_number)].font = title_font
408
                ws[col + str(current_row_number)].alignment = c_c_alignment
409
                ws[col + str(current_row_number)].border = f_border
410
                ws[col + str(current_row_number)] = \
411
                    reporting_period_data['denominator_names'][i] + " (" + reporting_period_data['denominator_units'][
412
                        i] + ")"
413
414
            current_row_number += 1
415
416
            for i in range(0, len(time)):
417
                current_col_number = 2
418
                col = format_cell.get_column_letter(current_col_number)
419
                ws[col + str(current_row_number)].font = title_font
420
                ws[col + str(current_row_number)].alignment = c_c_alignment
421
                ws[col + str(current_row_number)].border = f_border
422
                ws[col + str(current_row_number)] = time[i]
423
424
                for j in range(0, ca_len):
425
                    current_col_number += 1
426
                    col = format_cell.get_column_letter(current_col_number)
427
428
                    ws[col + str(current_row_number)].font = title_font
429
                    ws[col + str(current_row_number)].alignment = c_c_alignment
430
                    ws[col + str(current_row_number)].border = f_border
431
                    ws[col + str(current_row_number)] = round(reporting_period_data['values'][j][i], 2) \
432
                        if reporting_period_data['values'][j][i] is not None else None
433
434
                    current_col_number += 1
435
                    col = format_cell.get_column_letter(current_col_number)
436
437
                    ws[col + str(current_row_number)].font = title_font
438
                    ws[col + str(current_row_number)].alignment = c_c_alignment
439
                    ws[col + str(current_row_number)].border = f_border
440
                    ws[col + str(current_row_number)] = round(reporting_period_data['numerator_values'][j][i], 2) \
441
                        if reporting_period_data['numerator_values'][j][i] is not None else None
442
443
                    current_col_number += 1
444
                    col = format_cell.get_column_letter(current_col_number)
445
446
                    ws[col + str(current_row_number)].font = title_font
447
                    ws[col + str(current_row_number)].alignment = c_c_alignment
448
                    ws[col + str(current_row_number)].border = f_border
449
                    ws[col + str(current_row_number)] = round(reporting_period_data['denominator_values'][j][i], 2) \
450
                        if reporting_period_data['denominator_values'][j][i] is not None else None
451
452
                current_row_number += 1
453
454
            table_end_row_number = current_row_number - 1
455
456
            current_col_number = 2
457
            col = format_cell.get_column_letter(current_col_number)
458
            ws[col + str(current_row_number)].font = title_font
459
            ws[col + str(current_row_number)].alignment = c_c_alignment
460
            ws[col + str(current_row_number)].border = f_border
461
            ws[col + str(current_row_number)] = _('Subtotal')
462
463
            for i in range(0, ca_len):
464
                current_col_number += 1
465
                col = format_cell.get_column_letter(current_col_number)
466
467
                ws[col + str(current_row_number)].font = title_font
468
                ws[col + str(current_row_number)].alignment = c_c_alignment
469
                ws[col + str(current_row_number)].border = f_border
470
                ws[col + str(current_row_number)] = round(reporting_period_data['cumulations'][i], 2)\
471
                    if reporting_period_data['cumulations'][i] is not None else None
472
473
                current_col_number += 1
474
                col = format_cell.get_column_letter(current_col_number)
475
476
                ws[col + str(current_row_number)].font = title_font
477
                ws[col + str(current_row_number)].alignment = c_c_alignment
478
                ws[col + str(current_row_number)].border = f_border
479
                ws[col + str(current_row_number)] = round(reporting_period_data['numerator_cumulation'][i], 2) \
480
                    if reporting_period_data['numerator_cumulation'][i] is not None else None
481
482
                current_col_number += 1
483
                col = format_cell.get_column_letter(current_col_number)
484
485
                ws[col + str(current_row_number)].font = title_font
486
                ws[col + str(current_row_number)].alignment = c_c_alignment
487
                ws[col + str(current_row_number)].border = f_border
488
                ws[col + str(current_row_number)] = round(reporting_period_data['denominator_cumulation'][i], 2)\
489
                    if reporting_period_data['denominator_cumulation'][i] is not None else None
490
491
            current_row_number += 2
492
493
            for i in range(0, ca_len):
494
                line = LineChart()
495
                line.title = _('Reporting Period Cumulative Efficiency') + ' - ' + \
496
                    reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
497
                labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
498
                line_data = Reference(ws, min_col=3+i*3, min_row=table_start_row_number, max_row=table_end_row_number)
499
                line.add_data(line_data, titles_from_data=True)
500
                line.set_categories(labels)
501
                line_data = line.series[0]
502
                line_data.marker.symbol = "circle"
503
                line_data.smooth = True
504
                line.x_axis.crosses = 'min'
505
                line.height = 8.25
506
                line.width = 24
507
                line.dLbls = DataLabelList()
508
                line.dLbls.dLblPos = 't'
509
                line.dLbls.showVal = True
510
                line.dLbls.showPercent = False
511
                chart_col = 'B'
512
                chart_cell = chart_col + str(chart_start_row_number)
513
                chart_start_row_number += 6
514
                ws.add_chart(line, chart_cell)
515
516
                line = LineChart()
517
                line.title = _('Reporting Period Cumulative Efficiency') + ' - ' + \
518
                    reporting_period_data['numerator_names'][i] \
519
                    + " (" + reporting_period_data['numerator_units'][i] + ")"
520
                labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
521
                line_data = Reference(ws, min_col=4+i*3, min_row=table_start_row_number, max_row=table_end_row_number)
522
                line.add_data(line_data, titles_from_data=True)
523
                line.set_categories(labels)
524
                line_data = line.series[0]
525
                line_data.marker.symbol = "circle"
526
                line_data.smooth = True
527
                line.x_axis.crosses = 'min'
528
                line.height = 8.25
529
                line.width = 24
530
                line.dLbls = DataLabelList()
531
                line.dLbls.dLblPos = 't'
532
                line.dLbls.showVal = True
533
                line.dLbls.showPercent = False
534
                chart_col = 'B'
535
                chart_cell = chart_col + str(chart_start_row_number)
536
                chart_start_row_number += 6
537
                ws.add_chart(line, chart_cell)
538
539
                line = LineChart()
540
                line.title = _('Reporting Period Cumulative Efficiency') + ' - ' + \
541
                    reporting_period_data['denominator_names'][i] \
542
                    + " (" + reporting_period_data['denominator_units'][i] + ")"
543
                labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
544
                line_data = Reference(ws, min_col=5+i*3, min_row=table_start_row_number, max_row=table_end_row_number)
545
                line.add_data(line_data, titles_from_data=True)
546
                line.set_categories(labels)
547
                line_data = line.series[0]
548
                line_data.marker.symbol = "circle"
549
                line_data.smooth = True
550
                line.x_axis.crosses = 'min'
551
                line.height = 8.25
552
                line.width = 24
553
                line.dLbls = DataLabelList()
554
                line.dLbls.dLblPos = 't'
555
                line.dLbls.showVal = True
556
                line.dLbls.showPercent = False
557
                chart_col = 'B'
558
                chart_cell = chart_col + str(chart_start_row_number)
559
                chart_start_row_number += 6
560
                ws.add_chart(line, chart_cell)
561
    else:
562
        if has_values_data and has_timestamps_data:
563
            base_period_data = report['base_period_efficiency']
564
            reporting_period_data = report['reporting_period_efficiency']
565
            base_period_timestamps = base_period_data['timestamps']
566
            reporting_period_timestamps = reporting_period_data['timestamps']
567
            # Tip:
568
            #     base_period_data['names'] == reporting_period_data['names']
569
            #     base_period_data['units'] == reporting_period_data['units']
570
            reporting_period_data_ca_len = len(reporting_period_data['names'])
571
            base_period_data_ca_len = reporting_period_data_ca_len
572
            ws['B' + str(current_row_number)].font = title_font
573
            ws['B' + str(current_row_number)] = name + ' ' + _('Reporting Period Cumulative Efficiency')
574
575
            current_row_number += 1
576
577
            chart_start_row_number = current_row_number
578
579
            current_row_number += reporting_period_data_ca_len * 3 * 6 + 1
580
581
            if has_parameters_names_and_timestamps_and_values_data:
582
                current_sheet_parameters_row_number = current_row_number
583
                real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
584
                current_row_number += 6*real_timestamps_len + 2
585
586
            ws['B' + str(current_row_number)].font = title_font
587
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
588
589
            current_row_number += 1
590
591
            table_start_row_number = current_row_number
592
593
            ws.row_dimensions[current_row_number].height = 85
594
            current_col_number = 2
595
            col = format_cell.get_column_letter(current_col_number)
596
            ws[col + str(current_row_number)].fill = table_fill
597
            ws[col + str(current_row_number)].font = title_font
598
            ws[col + str(current_row_number)].alignment = c_c_alignment
599
            ws[col + str(current_row_number)].border = f_border
600
            ws[col + str(current_row_number)] = _('Base Period') + " - " + _('Datetime')
601
602
            for i in range(0, base_period_data_ca_len):
603
                current_col_number += 1
604
                col = format_cell.get_column_letter(current_col_number)
605
606
                ws[col + str(current_row_number)].fill = table_fill
607
                ws[col + str(current_row_number)].font = title_font
608
                ws[col + str(current_row_number)].alignment = c_c_alignment
609
                ws[col + str(current_row_number)] = _('Base Period') + " - " + reporting_period_data['names'][i] + \
610
                    " (" + reporting_period_data['units'][i] + ")"
611
                ws[col + str(current_row_number)].border = f_border
612
613
                current_col_number += 1
614
                col = format_cell.get_column_letter(current_col_number)
615
616
                ws[col + str(current_row_number)].fill = table_fill
617
                ws[col + str(current_row_number)].font = title_font
618
                ws[col + str(current_row_number)].alignment = c_c_alignment
619
                ws[col + str(current_row_number)].border = f_border
620
                ws[col + str(current_row_number)] = _('Base Period') + " - " + \
621
                    reporting_period_data['numerator_names'][i] + " (" + reporting_period_data['numerator_units'][
622
                        i] + ")"
623
624
                current_col_number += 1
625
                col = format_cell.get_column_letter(current_col_number)
626
627
                ws[col + str(current_row_number)].fill = table_fill
628
                ws[col + str(current_row_number)].font = title_font
629
                ws[col + str(current_row_number)].alignment = c_c_alignment
630
                ws[col + str(current_row_number)].border = f_border
631
                ws[col + str(current_row_number)] = _('Base Period') + " - " + \
632
                    reporting_period_data['denominator_names'][i] + " (" + reporting_period_data['denominator_units'][
633
                        i] + ")"
634
635
            current_col_number += 1
636
            col = format_cell.get_column_letter(current_col_number)
637
638
            ws[col + str(current_row_number)].fill = table_fill
639
            ws[col + str(current_row_number)].font = title_font
640
            ws[col + str(current_row_number)].border = f_border
641
            ws[col + str(current_row_number)].alignment = c_c_alignment
642
            ws[col + str(current_row_number)] = _('Reporting Period') + " - " + _('Datetime')
643
644
            for i in range(0, reporting_period_data_ca_len):
645
                current_col_number += 1
646
                col = format_cell.get_column_letter(current_col_number)
647
                ws[col + str(current_row_number)].fill = table_fill
648
                ws[col + str(current_row_number)].font = title_font
649
                ws[col + str(current_row_number)].alignment = c_c_alignment
650
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " \
651
                    + reporting_period_data['names'][i] + " (" + \
652
                    reporting_period_data['units'][i] + ")"
653
                ws[col + str(current_row_number)].border = f_border
654
655
                current_col_number += 1
656
                col = format_cell.get_column_letter(current_col_number)
657
658
                ws[col + str(current_row_number)].fill = table_fill
659
                ws[col + str(current_row_number)].font = title_font
660
                ws[col + str(current_row_number)].alignment = c_c_alignment
661
                ws[col + str(current_row_number)].border = f_border
662
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " + \
663
                    reporting_period_data['numerator_names'][i] + " (" + \
664
                    reporting_period_data['numerator_units'][i] + ")"
665
666
                current_col_number += 1
667
                col = format_cell.get_column_letter(current_col_number)
668
669
                ws[col + str(current_row_number)].fill = table_fill
670
                ws[col + str(current_row_number)].font = title_font
671
                ws[col + str(current_row_number)].alignment = c_c_alignment
672
                ws[col + str(current_row_number)].border = f_border
673
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " + \
674
                    reporting_period_data['denominator_names'][i] + " (" + \
675
                    reporting_period_data['denominator_units'][i] + ")"
676
677
            current_row_number += 1
678
679
            max_timestamps_len = len(base_period_timestamps[0]) \
680
                if len(base_period_timestamps[0]) >= len(reporting_period_timestamps[0]) \
681
                else len(reporting_period_timestamps[0])
682
683
            for i in range(0, max_timestamps_len):
684
                current_col_number = 2
685
                col = format_cell.get_column_letter(current_col_number)
686
                ws[col + str(current_row_number)].font = title_font
687
                ws[col + str(current_row_number)].alignment = c_c_alignment
688
                ws[col + str(current_row_number)] = base_period_timestamps[0][i] \
689
                    if i < len(base_period_timestamps[0]) else None
690
                ws[col + str(current_row_number)].border = f_border
691
692
                for j in range(0, base_period_data_ca_len):
693
                    current_col_number += 1
694
                    col = format_cell.get_column_letter(current_col_number)
695
696
                    ws[col + str(current_row_number)].font = title_font
697
                    ws[col + str(current_row_number)].alignment = c_c_alignment
698
                    ws[col + str(current_row_number)] = round(base_period_data['values'][j][i], 2) \
699
                        if i < len(base_period_data['values'][j]) \
700
                        and base_period_data['values'][j][i] is not None else None
701
                    ws[col + str(current_row_number)].border = f_border
702
703
                    current_col_number += 1
704
                    col = format_cell.get_column_letter(current_col_number)
705
706
                    ws[col + str(current_row_number)].font = title_font
707
                    ws[col + str(current_row_number)].alignment = c_c_alignment
708
                    ws[col + str(current_row_number)] = round(base_period_data['numerator_values'][j][i], 2) \
709
                        if i < len(base_period_data['numerator_values'][j]) \
710
                        and base_period_data['numerator_values'][j][i] is not None else None
711
                    ws[col + str(current_row_number)].border = f_border
712
713
                    current_col_number += 1
714
                    col = format_cell.get_column_letter(current_col_number)
715
716
                    ws[col + str(current_row_number)].font = title_font
717
                    ws[col + str(current_row_number)].alignment = c_c_alignment
718
                    ws[col + str(current_row_number)] = round(base_period_data['denominator_values'][j][i], 2) \
719
                        if i < len(base_period_data['denominator_values'][j]) \
720
                        and base_period_data['denominator_values'][j][i] is not None else None
721
                    ws[col + str(current_row_number)].border = f_border
722
                current_col_number += 1
723
                col = format_cell.get_column_letter(current_col_number)
724
725
                ws[col + str(current_row_number)].font = title_font
726
                ws[col + str(current_row_number)].alignment = c_c_alignment
727
                ws[col + str(current_row_number)] = reporting_period_timestamps[0][i] \
728
                    if i < len(reporting_period_timestamps[0]) else None
729
                ws[col + str(current_row_number)].border = f_border
730
731
                for j in range(0, reporting_period_data_ca_len):
732
                    current_col_number += 1
733
                    col = format_cell.get_column_letter(current_col_number)
734
735
                    ws[col + str(current_row_number)].font = title_font
736
                    ws[col + str(current_row_number)].alignment = c_c_alignment
737
                    ws[col + str(current_row_number)] = round(reporting_period_data['values'][j][i], 2) \
738
                        if i < len(reporting_period_data['values'][j]) \
739
                        and reporting_period_data['values'][j][i] is not None else None
740
                    ws[col + str(current_row_number)].border = f_border
741
742
                    current_col_number += 1
743
                    col = format_cell.get_column_letter(current_col_number)
744
745
                    ws[col + str(current_row_number)].font = title_font
746
                    ws[col + str(current_row_number)].alignment = c_c_alignment
747
                    ws[col + str(current_row_number)] = round(reporting_period_data['numerator_values'][j][i], 2) \
748
                        if i < len(reporting_period_data['numerator_values'][j]) \
749
                        and reporting_period_data['numerator_values'][j][i] is not None else None
750
                    ws[col + str(current_row_number)].border = f_border
751
752
                    current_col_number += 1
753
                    col = format_cell.get_column_letter(current_col_number)
754
755
                    ws[col + str(current_row_number)].font = title_font
756
                    ws[col + str(current_row_number)].alignment = c_c_alignment
757
                    ws[col + str(current_row_number)] = round(reporting_period_data['denominator_values'][j][i], 2) \
758
                        if i < len(reporting_period_data['denominator_values'][j]) \
759
                        and reporting_period_data['denominator_values'][j][i] is not None else None
760
                    ws[col + str(current_row_number)].border = f_border
761
762
                current_row_number += 1
763
764
            current_col_number = 2
765
            col = format_cell.get_column_letter(current_col_number)
766
767
            ws[col + str(current_row_number)].font = title_font
768
            ws[col + str(current_row_number)].alignment = c_c_alignment
769
            ws[col + str(current_row_number)] = _('Subtotal')
770
            ws[col + str(current_row_number)].border = f_border
771
772
            for i in range(0, base_period_data_ca_len):
773
                current_col_number += 1
774
                col = format_cell.get_column_letter(current_col_number)
775
                ws[col + str(current_row_number)].font = title_font
776
                ws[col + str(current_row_number)].alignment = c_c_alignment
777
                ws[col + str(current_row_number)] = round(base_period_data['cumulations'][i], 2) \
778
                    if base_period_data['cumulations'][i] is not None else None
779
                ws[col + str(current_row_number)].border = f_border
780
781
                current_col_number += 1
782
                col = format_cell.get_column_letter(current_col_number)
783
                ws[col + str(current_row_number)].font = title_font
784
                ws[col + str(current_row_number)].alignment = c_c_alignment
785
                ws[col + str(current_row_number)] = round(base_period_data['numerator_cumulation'][i], 2) \
786
                    if base_period_data['numerator_cumulation'][i] is not None else None
787
                ws[col + str(current_row_number)].border = f_border
788
789
                current_col_number += 1
790
                col = format_cell.get_column_letter(current_col_number)
791
                ws[col + str(current_row_number)].font = title_font
792
                ws[col + str(current_row_number)].alignment = c_c_alignment
793
                ws[col + str(current_row_number)] = round(base_period_data['denominator_cumulation'][i], 2) \
794
                    if base_period_data['denominator_cumulation'][i] is not None else None
795
                ws[col + str(current_row_number)].border = f_border
796
797
            current_col_number += 1
798
            col = format_cell.get_column_letter(current_col_number)
799
800
            ws[col + str(current_row_number)].font = title_font
801
            ws[col + str(current_row_number)].alignment = c_c_alignment
802
            ws[col + str(current_row_number)] = _('Subtotal')
803
            ws[col + str(current_row_number)].border = f_border
804
805
            for i in range(0, reporting_period_data_ca_len):
806
                current_col_number += 1
807
                col = format_cell.get_column_letter(current_col_number)
808
                ws[col + str(current_row_number)].font = title_font
809
                ws[col + str(current_row_number)].alignment = c_c_alignment
810
                ws[col + str(current_row_number)] = round(reporting_period_data['cumulations'][i], 2) \
811
                    if reporting_period_data['cumulations'][i] is not None else None
812
                ws[col + str(current_row_number)].border = f_border
813
814
                current_col_number += 1
815
                col = format_cell.get_column_letter(current_col_number)
816
                ws[col + str(current_row_number)].font = title_font
817
                ws[col + str(current_row_number)].alignment = c_c_alignment
818
                ws[col + str(current_row_number)] = round(reporting_period_data['numerator_cumulation'][i], 2) \
819
                    if reporting_period_data['numerator_cumulation'][i] is not None else None
820
                ws[col + str(current_row_number)].border = f_border
821
822
                current_col_number += 1
823
                col = format_cell.get_column_letter(current_col_number)
824
                ws[col + str(current_row_number)].font = title_font
825
                ws[col + str(current_row_number)].alignment = c_c_alignment
826
                ws[col + str(current_row_number)] = round(reporting_period_data['denominator_cumulation'][i], 2) \
827
                    if reporting_period_data['denominator_cumulation'][i] is not None else None
828
                ws[col + str(current_row_number)].border = f_border
829
830
            current_row_number += 2
831
832
            for i in range(0, reporting_period_data_ca_len):
833
                line = LineChart()
834
                line.title = _('Base Period Cumulative Efficiency') + ' / ' \
835
                    + _('Reporting Period Cumulative Efficiency') + ' - '  \
836
                    + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
837
                labels = Reference(ws, min_col=2 + base_period_data_ca_len*3 + 1,
838
                                   min_row=table_start_row_number + 1,
839
                                   max_row=table_start_row_number + len(reporting_period_timestamps[0]))
840
                base_line_data = Reference(ws, min_col=3 + i*3,
841
                                           min_row=table_start_row_number,
842
                                           max_row=table_start_row_number + len(reporting_period_timestamps[0]))
843
                reporting_line_data = Reference(ws, min_col=3 + base_period_data_ca_len*3 + 1 + i*3,
844
                                                min_row=table_start_row_number,
845
                                                max_row=table_start_row_number + len(reporting_period_timestamps[0]))
846
                line.add_data(base_line_data, titles_from_data=True)
847
                line.add_data(reporting_line_data, titles_from_data=True)
848
                line.set_categories(labels)
849
                for j in range(len(line.series)):
850
                    line.series[j].marker.symbol = "circle"
851
                    line.series[j].smooth = True
852
                line.x_axis.crosses = 'min'
853
                line.height = 8.25
854
                line.width = 24
855
                line.dLbls = DataLabelList()
856
                line.dLbls.dLblPos = 't'
857
                line.dLbls.showVal = True
858
                line.dLbls.showPercent = False
859
                chart_col = 'B'
860
                chart_cell = chart_col + str(chart_start_row_number)
861
                chart_start_row_number += 6
862
                ws.add_chart(line, chart_cell)
863
864
                line = LineChart()
865
                line.title = _('Base Period Cumulative Efficiency') + ' / ' \
866
                    + _('Reporting Period Cumulative Efficiency') + ' - ' \
867
                    + reporting_period_data['numerator_names'][i] \
868
                    + " (" + reporting_period_data['numerator_units'][i] + ")"
869
                labels = Reference(ws, min_col=2 + base_period_data_ca_len*3 + 1,
870
                                   min_row=table_start_row_number + 1,
871
                                   max_row=table_start_row_number + len(reporting_period_timestamps[0]))
872
                base_line_data = Reference(ws, min_col=4 + i*3,
873
                                           min_row=table_start_row_number,
874
                                           max_row=table_start_row_number + len(reporting_period_timestamps[0]))
875
                reporting_line_data = Reference(ws, min_col=4 + base_period_data_ca_len*3 + 1 + i*3,
876
                                                min_row=table_start_row_number,
877
                                                max_row=table_start_row_number + len(reporting_period_timestamps[0]))
878
                line.add_data(base_line_data, titles_from_data=True)
879
                line.add_data(reporting_line_data, titles_from_data=True)
880
                line.set_categories(labels)
881
                for j in range(len(line.series)):
882
                    line.series[j].marker.symbol = "circle"
883
                    line.series[j].smooth = True
884
                line.x_axis.crosses = 'min'
885
                line.height = 8.25
886
                line.width = 24
887
                line.dLbls = DataLabelList()
888
                line.dLbls.dLblPos = 't'
889
                line.dLbls.showVal = True
890
                line.dLbls.showPercent = False
891
                chart_col = 'B'
892
                chart_cell = chart_col + str(chart_start_row_number)
893
                chart_start_row_number += 6
894
                ws.add_chart(line, chart_cell)
895
896
                line = LineChart()
897
                line.title = _('Base Period Cumulative Efficiency') + ' / ' \
898
                    + _('Reporting Period Cumulative Efficiency') + ' - ' \
899
                    + reporting_period_data['denominator_names'][i] \
900
                    + " (" + reporting_period_data['denominator_units'][i] + ")"
901
                labels = Reference(ws, min_col=2 + base_period_data_ca_len*3 + 1,
902
                                   min_row=table_start_row_number + 1,
903
                                   max_row=table_start_row_number + len(reporting_period_timestamps[0]))
904
                base_line_data = Reference(ws, min_col=5 + i*3,
905
                                           min_row=table_start_row_number,
906
                                           max_row=table_start_row_number + len(reporting_period_timestamps[0]))
907
                reporting_line_data = Reference(ws, min_col=5 + base_period_data_ca_len*3 + 1 + i*3,
908
                                                min_row=table_start_row_number,
909
                                                max_row=table_start_row_number + len(reporting_period_timestamps[0]))
910
                line.add_data(base_line_data, titles_from_data=True)
911
                line.add_data(reporting_line_data, titles_from_data=True)
912
                line.set_categories(labels)
913
                for j in range(len(line.series)):
914
                    line.series[j].marker.symbol = "circle"
915
                    line.series[j].smooth = True
916
                line.x_axis.crosses = 'min'
917
                line.height = 8.25
918
                line.width = 24
919
                line.dLbls = DataLabelList()
920
                line.dLbls.dLblPos = 't'
921
                line.dLbls.showVal = True
922
                line.dLbls.showPercent = False
923
                chart_col = 'B'
924
                chart_cell = chart_col + str(chart_start_row_number)
925
                chart_start_row_number += 6
926
                ws.add_chart(line, chart_cell)
927
928
    ####################################################################################################################
929
930 View Code Duplication
    if has_parameters_names_and_timestamps_and_values_data:
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
931
932
        ################################################################################################################
933
        # new worksheet
934
        ################################################################################################################
935
936
        parameters_data = report['parameters']
937
        parameters_names_len = len(parameters_data['names'])
938
939
        file_name = (re.sub(r'[^A-Z]', '', ws.title))+'_'
940
        parameters_ws = wb.create_sheet(file_name + _('Parameters'))
941
942
        parameters_timestamps_data_max_len = \
943
            get_parameters_timestamps_lists_max_len(list(parameters_data['timestamps']))
944
945
        # Row height
946
        parameters_ws.row_dimensions[1].height = 102
947
        for i in range(2, 7 + 1):
948
            parameters_ws.row_dimensions[i].height = 42
949
950
        for i in range(8, parameters_timestamps_data_max_len + 10):
951
            parameters_ws.row_dimensions[i].height = 60
952
953
        # Col width
954
        parameters_ws.column_dimensions['A'].width = 1.5
955
956
        parameters_ws.column_dimensions['B'].width = 25.0
957
958
        for i in range(3, 12+parameters_names_len*3):
959
            parameters_ws.column_dimensions[format_cell.get_column_letter(i)].width = 15.0
960
961
        # Img
962
        img = Image("excelexporters/myems.png")
963
        parameters_ws.add_image(img, 'A1')
964
965
        # Title
966
967
        parameters_ws['B3'].alignment = b_r_alignment
968
        parameters_ws['B3'] = _('Name') + ':'
969
        parameters_ws['C3'].border = b_border
970
        parameters_ws['C3'].alignment = b_c_alignment
971
        parameters_ws['C3'] = name
972
973
        parameters_ws['D3'].alignment = b_r_alignment
974
        parameters_ws['D3'] = _('Period Type') + ':'
975
        parameters_ws['E3'].border = b_border
976
        parameters_ws['E3'].alignment = b_c_alignment
977
        parameters_ws['E3'] = period_type
978
979
        parameters_ws['B4'].alignment = b_r_alignment
980
        parameters_ws['B4'] = _('Reporting Start Datetime') + ':'
981
        parameters_ws['C4'].border = b_border
982
        parameters_ws['C4'].alignment = b_c_alignment
983
        parameters_ws['C4'] = reporting_start_datetime_local
984
985
        parameters_ws['D4'].alignment = b_r_alignment
986
        parameters_ws['D4'] = _('Reporting End Datetime') + ':'
987
        parameters_ws['E4'].border = b_border
988
        parameters_ws['E4'].alignment = b_c_alignment
989
        parameters_ws['E4'] = reporting_end_datetime_local
990
991
        parameters_ws_current_row_number = 6
992
993
        parameters_ws['B' + str(parameters_ws_current_row_number)].font = title_font
994
        parameters_ws['B' + str(parameters_ws_current_row_number)] = name + ' ' + _('Parameters')
995
996
        parameters_ws_current_row_number += 1
997
998
        parameters_table_start_row_number = parameters_ws_current_row_number
999
1000
        parameters_ws.row_dimensions[parameters_ws_current_row_number].height = 80
1001
1002
        parameters_ws_current_row_number += 1
1003
1004
        table_current_col_number = 2
1005
1006
        for i in range(0, parameters_names_len):
1007
1008
            if len(parameters_data['timestamps'][i]) == 0:
1009
                continue
1010
1011
            col = format_cell.get_column_letter(table_current_col_number)
1012
1013
            parameters_ws[col + str(parameters_ws_current_row_number - 1)].fill = table_fill
1014
            parameters_ws[col + str(parameters_ws_current_row_number - 1)].border = f_border
1015
1016
            col = format_cell.get_column_letter(table_current_col_number + 1)
1017
1018
            parameters_ws[col + str(parameters_ws_current_row_number - 1)].fill = table_fill
1019
            parameters_ws[col + str(parameters_ws_current_row_number - 1)].border = f_border
1020
            parameters_ws[col + str(parameters_ws_current_row_number - 1)].font = name_font
1021
            parameters_ws[col + str(parameters_ws_current_row_number - 1)].alignment = c_c_alignment
1022
            parameters_ws[col + str(parameters_ws_current_row_number - 1)] = parameters_data['names'][i]
1023
1024
            table_current_row_number = parameters_ws_current_row_number
1025
1026
            for j, value in enumerate(list(parameters_data['timestamps'][i])):
1027
                col = format_cell.get_column_letter(table_current_col_number)
1028
1029
                parameters_ws[col + str(table_current_row_number)].border = f_border
1030
                parameters_ws[col + str(table_current_row_number)].font = title_font
1031
                parameters_ws[col + str(table_current_row_number)].alignment = c_c_alignment
1032
                parameters_ws[col + str(table_current_row_number)] = value
1033
1034
                col = format_cell.get_column_letter(table_current_col_number + 1)
1035
1036
                parameters_ws[col + str(table_current_row_number)].border = f_border
1037
                parameters_ws[col + str(table_current_row_number)].font = title_font
1038
                parameters_ws[col + str(table_current_row_number)].alignment = c_c_alignment
1039
                parameters_ws[col + str(table_current_row_number)] = round(parameters_data['values'][i][j], 2)
1040
1041
                table_current_row_number += 1
1042
1043
            table_current_col_number = table_current_col_number + 3
1044
1045
        ################################################################################################################
1046
        # parameters chart and parameters table
1047
        ################################################################################################################
1048
1049
        ws['B' + str(current_sheet_parameters_row_number)].font = title_font
1050
        ws['B' + str(current_sheet_parameters_row_number)] = name + ' ' + _('Parameters')
1051
1052
        current_sheet_parameters_row_number += 1
1053
1054
        chart_start_row_number = current_sheet_parameters_row_number
1055
1056
        col_index = 0
1057
1058
        for i in range(0, parameters_names_len):
1059
1060
            if len(parameters_data['timestamps'][i]) == 0:
1061
                continue
1062
1063
            line = LineChart()
1064
            data_col = 3+col_index*3
1065
            labels_col = 2+col_index*3
1066
            col_index += 1
1067
            line.title = _('Parameters') + ' - ' + \
1068
                parameters_ws.cell(row=parameters_table_start_row_number, column=data_col).value
1069
            labels = Reference(parameters_ws, min_col=labels_col, min_row=parameters_table_start_row_number + 1,
1070
                               max_row=(len(parameters_data['timestamps'][i])+parameters_table_start_row_number))
1071
            line_data = Reference(parameters_ws, min_col=data_col, min_row=parameters_table_start_row_number,
1072
                                  max_row=(len(parameters_data['timestamps'][i])+parameters_table_start_row_number))
1073
            line.add_data(line_data, titles_from_data=True)
1074
            line.set_categories(labels)
1075
            line_data = line.series[0]
1076
            line_data.marker.symbol = "circle"
1077
            line_data.smooth = True
1078
            line.x_axis.crosses = 'min'
1079
            line.height = 8.25
1080
            line.width = 24
1081
            line.dLbls = DataLabelList()
1082
            line.dLbls.dLblPos = 't'
1083
            line.dLbls.showVal = False
1084
            line.dLbls.showPercent = False
1085
            chart_col = 'B'
1086
            chart_cell = chart_col + str(chart_start_row_number)
1087
            chart_start_row_number += 6
1088
            ws.add_chart(line, chart_cell)
1089
1090
        current_sheet_parameters_row_number = chart_start_row_number
1091
1092
        current_sheet_parameters_row_number += 1
1093
1094
    filename = str(uuid.uuid4()) + '.xlsx'
1095
    wb.save(filename)
1096
1097
    return filename
1098
1099
1100
def get_parameters_timestamps_lists_max_len(parameters_timestamps_lists):
1101
    max_len = 0
1102
    for i, value in enumerate(list(parameters_timestamps_lists)):
1103
        if len(value) > max_len:
1104
            max_len = len(value)
1105
1106
    return max_len
1107
1108
1109
def timestamps_data_all_equal_0(lists):
1110
    for i, value in enumerate(list(lists)):
1111
        if len(value) > 0:
1112
            return False
1113
1114
    return True
1115
1116
1117
def timestamps_data_not_equal_0(lists):
1118
    number = 0
1119
    for i, value in enumerate(list(lists)):
1120
        if len(value) > 0:
1121
            number += 1
1122
    return number
1123
1124
1125 View Code Duplication
def is_base_period_timestamp_exists(base_period_data):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
1126
    timestamps = base_period_data['timestamps']
1127
1128
    if len(timestamps) == 0:
1129
        return False
1130
1131
    for timestamp in timestamps:
1132
        if len(timestamp) > 0:
1133
            return True
1134
1135
    return False
1136