Code Duplication    Length = 285-287 lines in 9 locations

myems-api/excelexporters/spaceoutput.py 1 location

@@ 283-569 (lines=287) @@
280
    ####################################################################################################################
281
    table_start_draw_flag = current_row_number + 1
282
283
    if 'values' not in reporting_period_data.keys() or \
284
            reporting_period_data['values'] is None or \
285
            len(reporting_period_data['values']) == 0 or \
286
            'timestamps' not in reporting_period_data.keys() or \
287
            reporting_period_data['timestamps'] is None or \
288
            len(reporting_period_data['timestamps']) == 0 or \
289
            len(reporting_period_data['timestamps'][0]) == 0:
290
        pass
291
    else:
292
293
        if not is_base_period_timestamp_exists_flag:
294
            reporting_period_data = report['reporting_period']
295
            times = reporting_period_data['timestamps']
296
            ca_len = len(report['reporting_period']['names'])
297
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
298
            ws['B' + str(current_row_number)].font = title_font
299
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
300
301
            current_row_number += 1
302
            # 1: Stand for blank line  2: Stand for title
303
            current_row_number += ca_len * 6 + real_timestamps_len * 6 + 1 + 2
304
            table_start_row_number = current_row_number
305
306
            time = times[0]
307
            has_data = False
308
309
            if len(time) > 0:
310
                has_data = True
311
312
            if has_data:
313
314
                ws.row_dimensions[current_row_number].height = 60
315
                current_col_number = 2
316
                col = format_cell.get_column_letter(current_col_number)
317
                ws[col + str(current_row_number)].fill = table_fill
318
                ws[col + str(current_row_number)].font = title_font
319
                ws[col + str(current_row_number)].border = f_border
320
                ws[col + str(current_row_number)].alignment = c_c_alignment
321
                ws[col + str(current_row_number)] = _('Datetime')
322
323
                for i in range(0, ca_len):
324
                    current_col_number += 1
325
                    col = format_cell.get_column_letter(current_col_number)
326
327
                    ws[col + str(current_row_number)].fill = table_fill
328
                    ws[col + str(current_row_number)].font = title_font
329
                    ws[col + str(current_row_number)].alignment = c_c_alignment
330
                    ws[col + str(current_row_number)] = reporting_period_data['names'][i] + \
331
                        " (" + reporting_period_data['units'][i] + ")"
332
                    ws[col + str(current_row_number)].border = f_border
333
334
                current_row_number += 1
335
336
                for i in range(0, len(time)):
337
                    current_col_number = 2
338
                    col = format_cell.get_column_letter(current_col_number)
339
                    ws[col + str(current_row_number)].font = title_font
340
                    ws[col + str(current_row_number)].alignment = c_c_alignment
341
                    ws[col + str(current_row_number)] = time[i]
342
                    ws[col + str(current_row_number)].border = f_border
343
344
                    for j in range(0, ca_len):
345
                        current_col_number += 1
346
                        col = format_cell.get_column_letter(current_col_number)
347
348
                        ws[col + str(current_row_number)].font = title_font
349
                        ws[col + str(current_row_number)].alignment = c_c_alignment
350
                        ws[col + str(current_row_number)] = round(reporting_period_data['values'][j][i], 2)
351
                        ws[col + str(current_row_number)].border = f_border
352
353
                    current_row_number += 1
354
355
                table_end_row_number = current_row_number - 1
356
357
                current_col_number = 2
358
                col = format_cell.get_column_letter(current_col_number)
359
                ws[col + str(current_row_number)].font = title_font
360
                ws[col + str(current_row_number)].alignment = c_c_alignment
361
                ws[col + str(current_row_number)] = _('Subtotal')
362
                ws[col + str(current_row_number)].border = f_border
363
364
                for i in range(0, ca_len):
365
                    current_col_number += 1
366
                    col = format_cell.get_column_letter(current_col_number)
367
368
                    ws[col + str(current_row_number)].font = title_font
369
                    ws[col + str(current_row_number)].alignment = c_c_alignment
370
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals'][i], 2)
371
                    ws[col + str(current_row_number)].border = f_border
372
373
                    # line
374
                    line = LineChart()
375
                    line.title = _('Reporting Period Output') + ' - ' \
376
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
377
                    labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
378
                    line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
379
                                          max_row=table_end_row_number)
380
                    line.add_data(line_data, titles_from_data=True)
381
                    line.set_categories(labels)
382
                    line_data = line.series[0]
383
                    line_data.marker.symbol = "circle"
384
                    line_data.smooth = True
385
                    line.x_axis.crosses = 'min'
386
                    line.height = 8.25
387
                    line.width = 24
388
                    line.dLbls = DataLabelList()
389
                    line.dLbls.dLblPos = 't'
390
                    line.dLbls.showVal = True
391
                    line.dLbls.showPercent = False
392
                    chart_col = 'B'
393
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
394
                    ws.add_chart(line, chart_cell)
395
396
                current_row_number += 2
397
        else:
398
            base_period_data = report['base_period']
399
            reporting_period_data = report['reporting_period']
400
            base_period_timestamps = base_period_data['timestamps']
401
            reporting_period_timestamps = reporting_period_data['timestamps']
402
            # Tip:
403
            #     base_period_data['names'] == reporting_period_data['names']
404
            #     base_period_data['units'] == reporting_period_data['units']
405
            base_period_data_ca_len = len(base_period_data['names'])
406
            reporting_period_data_ca_len = len(reporting_period_data['names'])
407
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
408
            ws['B' + str(current_row_number)].font = title_font
409
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
410
411
            current_row_number += 1
412
            # 1: Stand for blank line  2: Stand for title
413
            current_row_number += reporting_period_data_ca_len * 6 + real_timestamps_len * 6 + 1 + 2
414
            table_start_row_number = current_row_number
415
416
            has_data = False
417
418
            if len(base_period_timestamps[0]) or len(reporting_period_timestamps[0]) > 0:
419
                has_data = True
420
421
            if has_data:
422
                ws.row_dimensions[current_row_number].height = 60
423
                current_col_number = 2
424
                col = format_cell.get_column_letter(current_col_number)
425
                ws[col + str(current_row_number)].fill = table_fill
426
                ws[col + str(current_row_number)].font = title_font
427
                ws[col + str(current_row_number)].border = f_border
428
                ws[col + str(current_row_number)].alignment = c_c_alignment
429
                ws[col + str(current_row_number)] = _('Base Period') + " - " + _('Datetime')
430
431
                for i in range(0, base_period_data_ca_len):
432
                    current_col_number += 1
433
                    col = format_cell.get_column_letter(current_col_number)
434
435
                    ws[col + str(current_row_number)].fill = table_fill
436
                    ws[col + str(current_row_number)].font = title_font
437
                    ws[col + str(current_row_number)].alignment = c_c_alignment
438
                    ws[col + str(current_row_number)] = _('Base Period') + " - " + base_period_data['names'][i] + \
439
                        " (" + base_period_data['units'][i] + ")"
440
                    ws[col + str(current_row_number)].border = f_border
441
                current_col_number += 1
442
                col = format_cell.get_column_letter(current_col_number)
443
444
                ws[col + str(current_row_number)].fill = table_fill
445
                ws[col + str(current_row_number)].font = title_font
446
                ws[col + str(current_row_number)].border = f_border
447
                ws[col + str(current_row_number)].alignment = c_c_alignment
448
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " + _('Datetime')
449
450
                for i in range(0, reporting_period_data_ca_len):
451
                    current_col_number += 1
452
                    col = format_cell.get_column_letter(current_col_number)
453
                    ws[col + str(current_row_number)].fill = table_fill
454
                    ws[col + str(current_row_number)].font = title_font
455
                    ws[col + str(current_row_number)].alignment = c_c_alignment
456
                    ws[col + str(current_row_number)] = _('Reporting Period') + " - " \
457
                        + reporting_period_data['names'][i] + " (" + \
458
                        reporting_period_data['units'][i] + ")"
459
                    ws[col + str(current_row_number)].border = f_border
460
461
                current_row_number += 1
462
463
                max_timestamps_len = len(base_period_timestamps[0]) \
464
                    if len(base_period_timestamps[0]) >= len(reporting_period_timestamps[0]) \
465
                    else len(reporting_period_timestamps[0])
466
467
                for i in range(0, max_timestamps_len):
468
                    current_col_number = 2
469
                    col = format_cell.get_column_letter(current_col_number)
470
                    ws[col + str(current_row_number)].font = title_font
471
                    ws[col + str(current_row_number)].alignment = c_c_alignment
472
                    ws[col + str(current_row_number)] = base_period_timestamps[0][i] \
473
                        if i < len(base_period_timestamps[0]) else None
474
                    ws[col + str(current_row_number)].border = f_border
475
476
                    for j in range(0, base_period_data_ca_len):
477
                        current_col_number += 1
478
                        col = format_cell.get_column_letter(current_col_number)
479
480
                        ws[col + str(current_row_number)].font = title_font
481
                        ws[col + str(current_row_number)].alignment = c_c_alignment
482
                        ws[col + str(current_row_number)] = round(base_period_data['values'][j][i], 2) \
483
                            if i < len(base_period_data['values'][j]) else None
484
                        ws[col + str(current_row_number)].border = f_border
485
                    current_col_number += 1
486
                    col = format_cell.get_column_letter(current_col_number)
487
488
                    ws[col + str(current_row_number)].font = title_font
489
                    ws[col + str(current_row_number)].alignment = c_c_alignment
490
                    ws[col + str(current_row_number)] = reporting_period_timestamps[0][i] \
491
                        if i < len(reporting_period_timestamps[0]) else None
492
                    ws[col + str(current_row_number)].border = f_border
493
494
                    for j in range(0, reporting_period_data_ca_len):
495
                        current_col_number += 1
496
                        col = format_cell.get_column_letter(current_col_number)
497
498
                        ws[col + str(current_row_number)].font = title_font
499
                        ws[col + str(current_row_number)].alignment = c_c_alignment
500
                        ws[col + str(current_row_number)] = round(reporting_period_data['values'][j][i], 2) \
501
                            if i < len(reporting_period_data['values'][j]) else None
502
                        ws[col + str(current_row_number)].border = f_border
503
504
                    current_row_number += 1
505
506
                current_col_number = 2
507
                col = format_cell.get_column_letter(current_col_number)
508
                ws[col + str(current_row_number)].font = title_font
509
                ws[col + str(current_row_number)].alignment = c_c_alignment
510
                ws[col + str(current_row_number)] = _('Subtotal')
511
                ws[col + str(current_row_number)].border = f_border
512
513
                for i in range(0, base_period_data_ca_len):
514
                    current_col_number += 1
515
                    col = format_cell.get_column_letter(current_col_number)
516
                    ws[col + str(current_row_number)].font = title_font
517
                    ws[col + str(current_row_number)].alignment = c_c_alignment
518
                    ws[col + str(current_row_number)] = round(base_period_data['subtotals'][i], 2)
519
                    ws[col + str(current_row_number)].border = f_border
520
521
                current_col_number += 1
522
                col = format_cell.get_column_letter(current_col_number)
523
524
                ws[col + str(current_row_number)].font = title_font
525
                ws[col + str(current_row_number)].alignment = c_c_alignment
526
                ws[col + str(current_row_number)] = _('Subtotal')
527
                ws[col + str(current_row_number)].border = f_border
528
529
                for i in range(0, reporting_period_data_ca_len):
530
                    current_col_number += 1
531
                    col = format_cell.get_column_letter(current_col_number)
532
                    ws[col + str(current_row_number)].font = title_font
533
                    ws[col + str(current_row_number)].alignment = c_c_alignment
534
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals'][i], 2)
535
                    ws[col + str(current_row_number)].border = f_border
536
537
                for i in range(0, reporting_period_data_ca_len):
538
                    # line
539
                    line = LineChart()
540
                    line.title = _('Base Period Output') + ' / ' \
541
                        + _('Reporting Period Output') + ' - ' \
542
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
543
                    labels = Reference(ws, min_col=2 + base_period_data_ca_len + 1,
544
                                       min_row=table_start_row_number + 1,
545
                                       max_row=table_start_row_number + len(reporting_period_timestamps[0]))
546
                    base_line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
547
                                               max_row=table_start_row_number + len(reporting_period_timestamps[0]))
548
                    reporting_line_data = Reference(ws, min_col=3 + base_period_data_ca_len + 1 + i,
549
                                                    min_row=table_start_row_number,
550
                                                    max_row=table_start_row_number
551
                                                    + len(reporting_period_timestamps[0]))
552
                    line.add_data(base_line_data, titles_from_data=True)
553
                    line.add_data(reporting_line_data, titles_from_data=True)
554
                    line.set_categories(labels)
555
                    for j in range(len(line.series)):
556
                        line.series[j].marker.symbol = "circle"
557
                        line.series[j].smooth = True
558
                    line.x_axis.crosses = 'min'
559
                    line.height = 8.25
560
                    line.width = 24
561
                    line.dLbls = DataLabelList()
562
                    line.dLbls.dLblPos = 't'
563
                    line.dLbls.showVal = True
564
                    line.dLbls.showPercent = False
565
                    chart_col = 'B'
566
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
567
                    ws.add_chart(line, chart_cell)
568
569
                current_row_number += 2
570
571
    ####################################################################################################################
572
    if "child_space" not in report.keys() or "energy_category_names" not in report['child_space'].keys() or \

myems-api/excelexporters/combinedequipmentoutput.py 1 location

@@ 268-554 (lines=287) @@
265
    ####################################################################################################################
266
    table_start_draw_flag = current_row_number + 1
267
268
    if 'values' not in reporting_period_data.keys() or \
269
            reporting_period_data['values'] is None or \
270
            len(reporting_period_data['values']) == 0 or \
271
            'timestamps' not in reporting_period_data.keys() or \
272
            reporting_period_data['timestamps'] is None or \
273
            len(reporting_period_data['timestamps']) == 0 or \
274
            len(reporting_period_data['timestamps'][0]) == 0:
275
        pass
276
    else:
277
278
        if not is_base_period_timestamp_exists_flag:
279
            reporting_period_data = report['reporting_period']
280
            times = reporting_period_data['timestamps']
281
            ca_len = len(report['reporting_period']['names'])
282
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
283
            ws['B' + str(current_row_number)].font = title_font
284
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
285
286
            current_row_number += 1
287
            # 1: Stand for blank line  2: Stand for title
288
            current_row_number += ca_len * 6 + real_timestamps_len * 6 + 1 + 2
289
            table_start_row_number = current_row_number
290
291
            time = times[0]
292
            has_data = False
293
294
            if len(time) > 0:
295
                has_data = True
296
297
            if has_data:
298
299
                ws.row_dimensions[current_row_number].height = 60
300
                current_col_number = 2
301
                col = format_cell.get_column_letter(current_col_number)
302
                ws[col + str(current_row_number)].fill = table_fill
303
                ws[col + str(current_row_number)].font = title_font
304
                ws[col + str(current_row_number)].border = f_border
305
                ws[col + str(current_row_number)].alignment = c_c_alignment
306
                ws[col + str(current_row_number)] = _('Datetime')
307
308
                for i in range(0, ca_len):
309
                    current_col_number += 1
310
                    col = format_cell.get_column_letter(current_col_number)
311
312
                    ws[col + str(current_row_number)].fill = table_fill
313
                    ws[col + str(current_row_number)].font = title_font
314
                    ws[col + str(current_row_number)].alignment = c_c_alignment
315
                    ws[col + str(current_row_number)] = reporting_period_data['names'][i] + \
316
                        " (" + reporting_period_data['units'][i] + ")"
317
                    ws[col + str(current_row_number)].border = f_border
318
319
                current_row_number += 1
320
321
                for i in range(0, len(time)):
322
                    current_col_number = 2
323
                    col = format_cell.get_column_letter(current_col_number)
324
                    ws[col + str(current_row_number)].font = title_font
325
                    ws[col + str(current_row_number)].alignment = c_c_alignment
326
                    ws[col + str(current_row_number)] = time[i]
327
                    ws[col + str(current_row_number)].border = f_border
328
329
                    for j in range(0, ca_len):
330
                        current_col_number += 1
331
                        col = format_cell.get_column_letter(current_col_number)
332
333
                        ws[col + str(current_row_number)].font = title_font
334
                        ws[col + str(current_row_number)].alignment = c_c_alignment
335
                        ws[col + str(current_row_number)] = round(reporting_period_data['values'][j][i], 2)
336
                        ws[col + str(current_row_number)].border = f_border
337
338
                    current_row_number += 1
339
340
                table_end_row_number = current_row_number - 1
341
342
                current_col_number = 2
343
                col = format_cell.get_column_letter(current_col_number)
344
                ws[col + str(current_row_number)].font = title_font
345
                ws[col + str(current_row_number)].alignment = c_c_alignment
346
                ws[col + str(current_row_number)] = _('Subtotal')
347
                ws[col + str(current_row_number)].border = f_border
348
349
                for i in range(0, ca_len):
350
                    current_col_number += 1
351
                    col = format_cell.get_column_letter(current_col_number)
352
353
                    ws[col + str(current_row_number)].font = title_font
354
                    ws[col + str(current_row_number)].alignment = c_c_alignment
355
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals'][i], 2)
356
                    ws[col + str(current_row_number)].border = f_border
357
358
                    # line
359
                    line = LineChart()
360
                    line.title = _('Reporting Period Output') + ' - ' \
361
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
362
                    labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
363
                    line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
364
                                          max_row=table_end_row_number)
365
                    line.add_data(line_data, titles_from_data=True)
366
                    line.set_categories(labels)
367
                    line_data = line.series[0]
368
                    line_data.marker.symbol = "circle"
369
                    line_data.smooth = True
370
                    line.x_axis.crosses = 'min'
371
                    line.height = 8.25
372
                    line.width = 24
373
                    line.dLbls = DataLabelList()
374
                    line.dLbls.dLblPos = 't'
375
                    line.dLbls.showVal = True
376
                    line.dLbls.showPercent = False
377
                    chart_col = 'B'
378
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
379
                    ws.add_chart(line, chart_cell)
380
381
                current_row_number += 2
382
        else:
383
            base_period_data = report['base_period']
384
            reporting_period_data = report['reporting_period']
385
            base_period_timestamps = base_period_data['timestamps']
386
            reporting_period_timestamps = reporting_period_data['timestamps']
387
            # Tip:
388
            #     base_period_data['names'] == reporting_period_data['names']
389
            #     base_period_data['units'] == reporting_period_data['units']
390
            base_period_data_ca_len = len(base_period_data['names'])
391
            reporting_period_data_ca_len = len(reporting_period_data['names'])
392
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
393
            ws['B' + str(current_row_number)].font = title_font
394
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
395
396
            current_row_number += 1
397
            # 1: Stand for blank line  2: Stand for title
398
            current_row_number += reporting_period_data_ca_len * 6 + real_timestamps_len * 6 + 1 + 2
399
            table_start_row_number = current_row_number
400
401
            has_data = False
402
403
            if len(base_period_timestamps[0]) or len(reporting_period_timestamps[0]) > 0:
404
                has_data = True
405
406
            if has_data:
407
                ws.row_dimensions[current_row_number].height = 60
408
                current_col_number = 2
409
                col = format_cell.get_column_letter(current_col_number)
410
                ws[col + str(current_row_number)].fill = table_fill
411
                ws[col + str(current_row_number)].font = title_font
412
                ws[col + str(current_row_number)].border = f_border
413
                ws[col + str(current_row_number)].alignment = c_c_alignment
414
                ws[col + str(current_row_number)] = _('Base Period') + " - " + _('Datetime')
415
416
                for i in range(0, base_period_data_ca_len):
417
                    current_col_number += 1
418
                    col = format_cell.get_column_letter(current_col_number)
419
420
                    ws[col + str(current_row_number)].fill = table_fill
421
                    ws[col + str(current_row_number)].font = title_font
422
                    ws[col + str(current_row_number)].alignment = c_c_alignment
423
                    ws[col + str(current_row_number)] = _('Base Period') + " - " + base_period_data['names'][i] + \
424
                        " (" + base_period_data['units'][i] + ")"
425
                    ws[col + str(current_row_number)].border = f_border
426
                current_col_number += 1
427
                col = format_cell.get_column_letter(current_col_number)
428
429
                ws[col + str(current_row_number)].fill = table_fill
430
                ws[col + str(current_row_number)].font = title_font
431
                ws[col + str(current_row_number)].border = f_border
432
                ws[col + str(current_row_number)].alignment = c_c_alignment
433
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " + _('Datetime')
434
435
                for i in range(0, reporting_period_data_ca_len):
436
                    current_col_number += 1
437
                    col = format_cell.get_column_letter(current_col_number)
438
                    ws[col + str(current_row_number)].fill = table_fill
439
                    ws[col + str(current_row_number)].font = title_font
440
                    ws[col + str(current_row_number)].alignment = c_c_alignment
441
                    ws[col + str(current_row_number)] = _('Reporting Period') + " - " \
442
                        + reporting_period_data['names'][i] + " (" + \
443
                        reporting_period_data['units'][i] + ")"
444
                    ws[col + str(current_row_number)].border = f_border
445
446
                current_row_number += 1
447
448
                max_timestamps_len = len(base_period_timestamps[0]) \
449
                    if len(base_period_timestamps[0]) >= len(reporting_period_timestamps[0]) \
450
                    else len(reporting_period_timestamps[0])
451
452
                for i in range(0, max_timestamps_len):
453
                    current_col_number = 2
454
                    col = format_cell.get_column_letter(current_col_number)
455
                    ws[col + str(current_row_number)].font = title_font
456
                    ws[col + str(current_row_number)].alignment = c_c_alignment
457
                    ws[col + str(current_row_number)] = base_period_timestamps[0][i] \
458
                        if i < len(base_period_timestamps[0]) else None
459
                    ws[col + str(current_row_number)].border = f_border
460
461
                    for j in range(0, base_period_data_ca_len):
462
                        current_col_number += 1
463
                        col = format_cell.get_column_letter(current_col_number)
464
465
                        ws[col + str(current_row_number)].font = title_font
466
                        ws[col + str(current_row_number)].alignment = c_c_alignment
467
                        ws[col + str(current_row_number)] = round(base_period_data['values'][j][i], 2) \
468
                            if i < len(base_period_data['values'][j]) else None
469
                        ws[col + str(current_row_number)].border = f_border
470
                    current_col_number += 1
471
                    col = format_cell.get_column_letter(current_col_number)
472
473
                    ws[col + str(current_row_number)].font = title_font
474
                    ws[col + str(current_row_number)].alignment = c_c_alignment
475
                    ws[col + str(current_row_number)] = reporting_period_timestamps[0][i] \
476
                        if i < len(reporting_period_timestamps[0]) else None
477
                    ws[col + str(current_row_number)].border = f_border
478
479
                    for j in range(0, reporting_period_data_ca_len):
480
                        current_col_number += 1
481
                        col = format_cell.get_column_letter(current_col_number)
482
483
                        ws[col + str(current_row_number)].font = title_font
484
                        ws[col + str(current_row_number)].alignment = c_c_alignment
485
                        ws[col + str(current_row_number)] = round(reporting_period_data['values'][j][i], 2) \
486
                            if i < len(reporting_period_data['values'][j]) else None
487
                        ws[col + str(current_row_number)].border = f_border
488
489
                    current_row_number += 1
490
491
                current_col_number = 2
492
                col = format_cell.get_column_letter(current_col_number)
493
                ws[col + str(current_row_number)].font = title_font
494
                ws[col + str(current_row_number)].alignment = c_c_alignment
495
                ws[col + str(current_row_number)] = _('Subtotal')
496
                ws[col + str(current_row_number)].border = f_border
497
498
                for i in range(0, base_period_data_ca_len):
499
                    current_col_number += 1
500
                    col = format_cell.get_column_letter(current_col_number)
501
                    ws[col + str(current_row_number)].font = title_font
502
                    ws[col + str(current_row_number)].alignment = c_c_alignment
503
                    ws[col + str(current_row_number)] = round(base_period_data['subtotals'][i], 2)
504
                    ws[col + str(current_row_number)].border = f_border
505
506
                current_col_number += 1
507
                col = format_cell.get_column_letter(current_col_number)
508
509
                ws[col + str(current_row_number)].font = title_font
510
                ws[col + str(current_row_number)].alignment = c_c_alignment
511
                ws[col + str(current_row_number)] = _('Subtotal')
512
                ws[col + str(current_row_number)].border = f_border
513
514
                for i in range(0, reporting_period_data_ca_len):
515
                    current_col_number += 1
516
                    col = format_cell.get_column_letter(current_col_number)
517
                    ws[col + str(current_row_number)].font = title_font
518
                    ws[col + str(current_row_number)].alignment = c_c_alignment
519
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals'][i], 2)
520
                    ws[col + str(current_row_number)].border = f_border
521
522
                for i in range(0, reporting_period_data_ca_len):
523
                    # line
524
                    line = LineChart()
525
                    line.title = _('Base Period Output') + ' / ' \
526
                        + _('Reporting Period Output') + ' - ' \
527
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
528
                    labels = Reference(ws, min_col=2 + base_period_data_ca_len + 1,
529
                                       min_row=table_start_row_number + 1,
530
                                       max_row=table_start_row_number + len(reporting_period_timestamps[0]))
531
                    base_line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
532
                                               max_row=table_start_row_number + len(reporting_period_timestamps[0]))
533
                    reporting_line_data = Reference(ws, min_col=3 + base_period_data_ca_len + 1 + i,
534
                                                    min_row=table_start_row_number,
535
                                                    max_row=table_start_row_number
536
                                                    + len(reporting_period_timestamps[0]))
537
                    line.add_data(base_line_data, titles_from_data=True)
538
                    line.add_data(reporting_line_data, titles_from_data=True)
539
                    line.set_categories(labels)
540
                    for j in range(len(line.series)):
541
                        line.series[j].marker.symbol = "circle"
542
                        line.series[j].smooth = True
543
                    line.x_axis.crosses = 'min'
544
                    line.height = 8.25
545
                    line.width = 24
546
                    line.dLbls = DataLabelList()
547
                    line.dLbls.dLblPos = 't'
548
                    line.dLbls.showVal = True
549
                    line.dLbls.showPercent = False
550
                    chart_col = 'B'
551
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
552
                    ws.add_chart(line, chart_cell)
553
554
                current_row_number += 2
555
556
    ####################################################################################################################
557
    if "associated_equipment" not in report.keys() or \

myems-api/excelexporters/equipmentoutput.py 1 location

@@ 261-547 (lines=287) @@
258
    ####################################################################################################################
259
    table_start_draw_flag = current_row_number + 1
260
261
    if 'values' not in reporting_period_data.keys() or \
262
            reporting_period_data['values'] is None or \
263
            len(reporting_period_data['values']) == 0 or \
264
            'timestamps' not in reporting_period_data.keys() or \
265
            reporting_period_data['timestamps'] is None or \
266
            len(reporting_period_data['timestamps']) == 0 or \
267
            len(reporting_period_data['timestamps'][0]) == 0:
268
        pass
269
    else:
270
271
        if not is_base_period_timestamp_exists_flag:
272
            reporting_period_data = report['reporting_period']
273
            times = reporting_period_data['timestamps']
274
            ca_len = len(report['reporting_period']['names'])
275
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
276
            ws['B' + str(current_row_number)].font = title_font
277
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
278
279
            current_row_number += 1
280
            # 1: Stand for blank line  2: Stand for title
281
            current_row_number += ca_len * 6 + real_timestamps_len * 6 + 1 + 2
282
            table_start_row_number = current_row_number
283
284
            time = times[0]
285
            has_data = False
286
287
            if len(time) > 0:
288
                has_data = True
289
290
            if has_data:
291
292
                ws.row_dimensions[current_row_number].height = 60
293
                current_col_number = 2
294
                col = format_cell.get_column_letter(current_col_number)
295
                ws[col + str(current_row_number)].fill = table_fill
296
                ws[col + str(current_row_number)].font = title_font
297
                ws[col + str(current_row_number)].border = f_border
298
                ws[col + str(current_row_number)].alignment = c_c_alignment
299
                ws[col + str(current_row_number)] = _('Datetime')
300
301
                for i in range(0, ca_len):
302
                    current_col_number += 1
303
                    col = format_cell.get_column_letter(current_col_number)
304
305
                    ws[col + str(current_row_number)].fill = table_fill
306
                    ws[col + str(current_row_number)].font = title_font
307
                    ws[col + str(current_row_number)].alignment = c_c_alignment
308
                    ws[col + str(current_row_number)] = reporting_period_data['names'][i] + \
309
                        " (" + reporting_period_data['units'][i] + ")"
310
                    ws[col + str(current_row_number)].border = f_border
311
312
                current_row_number += 1
313
314
                for i in range(0, len(time)):
315
                    current_col_number = 2
316
                    col = format_cell.get_column_letter(current_col_number)
317
                    ws[col + str(current_row_number)].font = title_font
318
                    ws[col + str(current_row_number)].alignment = c_c_alignment
319
                    ws[col + str(current_row_number)] = time[i]
320
                    ws[col + str(current_row_number)].border = f_border
321
322
                    for j in range(0, ca_len):
323
                        current_col_number += 1
324
                        col = format_cell.get_column_letter(current_col_number)
325
326
                        ws[col + str(current_row_number)].font = title_font
327
                        ws[col + str(current_row_number)].alignment = c_c_alignment
328
                        ws[col + str(current_row_number)] = round(reporting_period_data['values'][j][i], 2)
329
                        ws[col + str(current_row_number)].border = f_border
330
331
                    current_row_number += 1
332
333
                table_end_row_number = current_row_number - 1
334
335
                current_col_number = 2
336
                col = format_cell.get_column_letter(current_col_number)
337
                ws[col + str(current_row_number)].font = title_font
338
                ws[col + str(current_row_number)].alignment = c_c_alignment
339
                ws[col + str(current_row_number)] = _('Subtotal')
340
                ws[col + str(current_row_number)].border = f_border
341
342
                for i in range(0, ca_len):
343
                    current_col_number += 1
344
                    col = format_cell.get_column_letter(current_col_number)
345
346
                    ws[col + str(current_row_number)].font = title_font
347
                    ws[col + str(current_row_number)].alignment = c_c_alignment
348
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals'][i], 2)
349
                    ws[col + str(current_row_number)].border = f_border
350
351
                    # line
352
                    line = LineChart()
353
                    line.title = _('Reporting Period Output') + ' - ' \
354
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
355
                    labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
356
                    line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
357
                                          max_row=table_end_row_number)
358
                    line.add_data(line_data, titles_from_data=True)
359
                    line.set_categories(labels)
360
                    line_data = line.series[0]
361
                    line_data.marker.symbol = "circle"
362
                    line_data.smooth = True
363
                    line.x_axis.crosses = 'min'
364
                    line.height = 8.25
365
                    line.width = 24
366
                    line.dLbls = DataLabelList()
367
                    line.dLbls.dLblPos = 't'
368
                    line.dLbls.showVal = True
369
                    line.dLbls.showPercent = False
370
                    chart_col = 'B'
371
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
372
                    ws.add_chart(line, chart_cell)
373
374
                current_row_number += 2
375
        else:
376
            base_period_data = report['base_period']
377
            reporting_period_data = report['reporting_period']
378
            base_period_timestamps = base_period_data['timestamps']
379
            reporting_period_timestamps = reporting_period_data['timestamps']
380
            # Tip:
381
            #     base_period_data['names'] == reporting_period_data['names']
382
            #     base_period_data['units'] == reporting_period_data['units']
383
            base_period_data_ca_len = len(base_period_data['names'])
384
            reporting_period_data_ca_len = len(reporting_period_data['names'])
385
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
386
            ws['B' + str(current_row_number)].font = title_font
387
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
388
389
            current_row_number += 1
390
            # 1: Stand for blank line  2: Stand for title
391
            current_row_number += reporting_period_data_ca_len * 6 + real_timestamps_len * 6 + 1 + 2
392
            table_start_row_number = current_row_number
393
394
            has_data = False
395
396
            if len(base_period_timestamps[0]) or len(reporting_period_timestamps[0]) > 0:
397
                has_data = True
398
399
            if has_data:
400
                ws.row_dimensions[current_row_number].height = 60
401
                current_col_number = 2
402
                col = format_cell.get_column_letter(current_col_number)
403
                ws[col + str(current_row_number)].fill = table_fill
404
                ws[col + str(current_row_number)].font = title_font
405
                ws[col + str(current_row_number)].border = f_border
406
                ws[col + str(current_row_number)].alignment = c_c_alignment
407
                ws[col + str(current_row_number)] = _('Base Period') + " - " + _('Datetime')
408
409
                for i in range(0, base_period_data_ca_len):
410
                    current_col_number += 1
411
                    col = format_cell.get_column_letter(current_col_number)
412
413
                    ws[col + str(current_row_number)].fill = table_fill
414
                    ws[col + str(current_row_number)].font = title_font
415
                    ws[col + str(current_row_number)].alignment = c_c_alignment
416
                    ws[col + str(current_row_number)] = _('Base Period') + " - " + base_period_data['names'][i] + \
417
                        " (" + base_period_data['units'][i] + ")"
418
                    ws[col + str(current_row_number)].border = f_border
419
                current_col_number += 1
420
                col = format_cell.get_column_letter(current_col_number)
421
422
                ws[col + str(current_row_number)].fill = table_fill
423
                ws[col + str(current_row_number)].font = title_font
424
                ws[col + str(current_row_number)].border = f_border
425
                ws[col + str(current_row_number)].alignment = c_c_alignment
426
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " + _('Datetime')
427
428
                for i in range(0, reporting_period_data_ca_len):
429
                    current_col_number += 1
430
                    col = format_cell.get_column_letter(current_col_number)
431
                    ws[col + str(current_row_number)].fill = table_fill
432
                    ws[col + str(current_row_number)].font = title_font
433
                    ws[col + str(current_row_number)].alignment = c_c_alignment
434
                    ws[col + str(current_row_number)] = _('Reporting Period') + " - " \
435
                        + reporting_period_data['names'][i] + " (" + \
436
                        reporting_period_data['units'][i] + ")"
437
                    ws[col + str(current_row_number)].border = f_border
438
439
                current_row_number += 1
440
441
                max_timestamps_len = len(base_period_timestamps[0]) \
442
                    if len(base_period_timestamps[0]) >= len(reporting_period_timestamps[0]) \
443
                    else len(reporting_period_timestamps[0])
444
445
                for i in range(0, max_timestamps_len):
446
                    current_col_number = 2
447
                    col = format_cell.get_column_letter(current_col_number)
448
                    ws[col + str(current_row_number)].font = title_font
449
                    ws[col + str(current_row_number)].alignment = c_c_alignment
450
                    ws[col + str(current_row_number)] = base_period_timestamps[0][i] \
451
                        if i < len(base_period_timestamps[0]) else None
452
                    ws[col + str(current_row_number)].border = f_border
453
454
                    for j in range(0, base_period_data_ca_len):
455
                        current_col_number += 1
456
                        col = format_cell.get_column_letter(current_col_number)
457
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)] = round(base_period_data['values'][j][i], 2) \
461
                            if i < len(base_period_data['values'][j]) else None
462
                        ws[col + str(current_row_number)].border = f_border
463
                    current_col_number += 1
464
                    col = format_cell.get_column_letter(current_col_number)
465
466
                    ws[col + str(current_row_number)].font = title_font
467
                    ws[col + str(current_row_number)].alignment = c_c_alignment
468
                    ws[col + str(current_row_number)] = reporting_period_timestamps[0][i] \
469
                        if i < len(reporting_period_timestamps[0]) else None
470
                    ws[col + str(current_row_number)].border = f_border
471
472
                    for j in range(0, reporting_period_data_ca_len):
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)] = round(reporting_period_data['values'][j][i], 2) \
479
                            if i < len(reporting_period_data['values'][j]) else None
480
                        ws[col + str(current_row_number)].border = f_border
481
482
                    current_row_number += 1
483
484
                current_col_number = 2
485
                col = format_cell.get_column_letter(current_col_number)
486
                ws[col + str(current_row_number)].font = title_font
487
                ws[col + str(current_row_number)].alignment = c_c_alignment
488
                ws[col + str(current_row_number)] = _('Subtotal')
489
                ws[col + str(current_row_number)].border = f_border
490
491
                for i in range(0, base_period_data_ca_len):
492
                    current_col_number += 1
493
                    col = format_cell.get_column_letter(current_col_number)
494
                    ws[col + str(current_row_number)].font = title_font
495
                    ws[col + str(current_row_number)].alignment = c_c_alignment
496
                    ws[col + str(current_row_number)] = round(base_period_data['subtotals'][i], 2)
497
                    ws[col + str(current_row_number)].border = f_border
498
499
                current_col_number += 1
500
                col = format_cell.get_column_letter(current_col_number)
501
502
                ws[col + str(current_row_number)].font = title_font
503
                ws[col + str(current_row_number)].alignment = c_c_alignment
504
                ws[col + str(current_row_number)] = _('Subtotal')
505
                ws[col + str(current_row_number)].border = f_border
506
507
                for i in range(0, reporting_period_data_ca_len):
508
                    current_col_number += 1
509
                    col = format_cell.get_column_letter(current_col_number)
510
                    ws[col + str(current_row_number)].font = title_font
511
                    ws[col + str(current_row_number)].alignment = c_c_alignment
512
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals'][i], 2)
513
                    ws[col + str(current_row_number)].border = f_border
514
515
                for i in range(0, reporting_period_data_ca_len):
516
                    # line
517
                    line = LineChart()
518
                    line.title = _('Base Period Output') + ' / ' \
519
                        + _('Reporting Period Output') + ' - ' \
520
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
521
                    labels = Reference(ws, min_col=2 + base_period_data_ca_len + 1,
522
                                       min_row=table_start_row_number + 1,
523
                                       max_row=table_start_row_number + len(reporting_period_timestamps[0]))
524
                    base_line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
525
                                               max_row=table_start_row_number + len(reporting_period_timestamps[0]))
526
                    reporting_line_data = Reference(ws, min_col=3 + base_period_data_ca_len + 1 + i,
527
                                                    min_row=table_start_row_number,
528
                                                    max_row=table_start_row_number
529
                                                    + len(reporting_period_timestamps[0]))
530
                    line.add_data(base_line_data, titles_from_data=True)
531
                    line.add_data(reporting_line_data, titles_from_data=True)
532
                    line.set_categories(labels)
533
                    for j in range(len(line.series)):
534
                        line.series[j].marker.symbol = "circle"
535
                        line.series[j].smooth = True
536
                    line.x_axis.crosses = 'min'
537
                    line.height = 8.25
538
                    line.width = 24
539
                    line.dLbls = DataLabelList()
540
                    line.dLbls.dLblPos = 't'
541
                    line.dLbls.showVal = True
542
                    line.dLbls.showPercent = False
543
                    chart_col = 'B'
544
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
545
                    ws.add_chart(line, chart_cell)
546
547
                current_row_number += 2
548
549
    ####################################################################################################################
550
    current_sheet_parameters_row_number = table_start_draw_flag + len(reporting_period_data['names']) * 6 + 1

myems-api/excelexporters/shopfloorsaving.py 1 location

@@ 479-764 (lines=286) @@
476
    ####################################################################################################################
477
    table_start_draw_flag = current_row_number + 1
478
479
    if 'values_saving' not in reporting_period_data.keys() or \
480
            reporting_period_data['values_saving'] is None or \
481
            len(reporting_period_data['values_saving']) == 0 or \
482
            'timestamps' not in reporting_period_data.keys() or \
483
            reporting_period_data['timestamps'] is None or \
484
            len(reporting_period_data['timestamps']) == 0 or \
485
            len(reporting_period_data['timestamps'][0]) == 0:
486
        pass
487
    else:
488
        if not is_base_period_timestamp_exists_flag:
489
            reporting_period_data = report['reporting_period']
490
            times = reporting_period_data['timestamps']
491
            ca_len = len(report['reporting_period']['names'])
492
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
493
            ws['B' + str(current_row_number)].font = title_font
494
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
495
496
            current_row_number += 1
497
            # 1: Stand for blank line  2: Stand for title
498
            current_row_number += ca_len * 6 + real_timestamps_len * 6 + 1 + 2
499
            table_start_row_number = current_row_number
500
501
            time = times[0]
502
            has_data = False
503
504
            if len(time) > 0:
505
                has_data = True
506
507
            if has_data:
508
509
                ws.row_dimensions[current_row_number].height = 60
510
                current_col_number = 2
511
                col = format_cell.get_column_letter(current_col_number)
512
                ws[col + str(current_row_number)].fill = table_fill
513
                ws[col + str(current_row_number)].font = title_font
514
                ws[col + str(current_row_number)].border = f_border
515
                ws[col + str(current_row_number)].alignment = c_c_alignment
516
                ws[col + str(current_row_number)] = _('Datetime')
517
518
                for i in range(0, ca_len):
519
                    current_col_number += 1
520
                    col = format_cell.get_column_letter(current_col_number)
521
522
                    ws[col + str(current_row_number)].fill = table_fill
523
                    ws[col + str(current_row_number)].font = title_font
524
                    ws[col + str(current_row_number)].alignment = c_c_alignment
525
                    ws[col + str(current_row_number)] = reporting_period_data['names'][i] + \
526
                        " (" + reporting_period_data['units'][i] + ")"
527
                    ws[col + str(current_row_number)].border = f_border
528
529
                current_row_number += 1
530
531
                for i in range(0, len(time)):
532
                    current_col_number = 2
533
                    col = format_cell.get_column_letter(current_col_number)
534
                    ws[col + str(current_row_number)].font = title_font
535
                    ws[col + str(current_row_number)].alignment = c_c_alignment
536
                    ws[col + str(current_row_number)] = time[i]
537
                    ws[col + str(current_row_number)].border = f_border
538
539
                    for j in range(0, ca_len):
540
                        current_col_number += 1
541
                        col = format_cell.get_column_letter(current_col_number)
542
543
                        ws[col + str(current_row_number)].font = title_font
544
                        ws[col + str(current_row_number)].alignment = c_c_alignment
545
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2)
546
                        ws[col + str(current_row_number)].border = f_border
547
548
                    current_row_number += 1
549
550
                table_end_row_number = current_row_number - 1
551
552
                current_col_number = 2
553
                col = format_cell.get_column_letter(current_col_number)
554
                ws[col + str(current_row_number)].font = title_font
555
                ws[col + str(current_row_number)].alignment = c_c_alignment
556
                ws[col + str(current_row_number)] = _('Subtotal')
557
                ws[col + str(current_row_number)].border = f_border
558
559
                for i in range(0, ca_len):
560
                    current_col_number += 1
561
                    col = format_cell.get_column_letter(current_col_number)
562
563
                    ws[col + str(current_row_number)].font = title_font
564
                    ws[col + str(current_row_number)].alignment = c_c_alignment
565
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
566
                    ws[col + str(current_row_number)].border = f_border
567
568
                    # line
569
                    line = LineChart()
570
                    line.title = _('Reporting Period Saving') + ' - ' \
571
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
572
                    labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
573
                    line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
574
                                          max_row=table_end_row_number)
575
                    line.add_data(line_data, titles_from_data=True)
576
                    line.set_categories(labels)
577
                    line_data = line.series[0]
578
                    line_data.marker.symbol = "circle"
579
                    line_data.smooth = True
580
                    line.x_axis.crosses = 'min'
581
                    line.height = 8.25
582
                    line.width = 24
583
                    line.dLbls = DataLabelList()
584
                    line.dLbls.dLblPos = 't'
585
                    line.dLbls.showVal = True
586
                    line.dLbls.showPercent = False
587
                    chart_col = 'B'
588
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
589
                    ws.add_chart(line, chart_cell)
590
591
                current_row_number += 2
592
        else:
593
            base_period_data = report['base_period']
594
            reporting_period_data = report['reporting_period']
595
            base_period_timestamps = base_period_data['timestamps']
596
            reporting_period_timestamps = reporting_period_data['timestamps']
597
            # Tip:
598
            #     base_period_data['names'] == reporting_period_data['names']
599
            #     base_period_data['units'] == reporting_period_data['units']
600
            base_period_data_ca_len = len(base_period_data['names'])
601
            reporting_period_data_ca_len = len(reporting_period_data['names'])
602
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
603
            ws['B' + str(current_row_number)].font = title_font
604
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
605
606
            current_row_number += 1
607
            # 1: Stand for blank line  2: Stand for title
608
            current_row_number += reporting_period_data_ca_len * 6 + real_timestamps_len * 6 + 1 + 2
609
            table_start_row_number = current_row_number
610
611
            has_data = False
612
613
            if len(base_period_timestamps[0]) or len(reporting_period_timestamps[0]) > 0:
614
                has_data = True
615
616
            if has_data:
617
                ws.row_dimensions[current_row_number].height = 60
618
                current_col_number = 2
619
                col = format_cell.get_column_letter(current_col_number)
620
                ws[col + str(current_row_number)].fill = table_fill
621
                ws[col + str(current_row_number)].font = title_font
622
                ws[col + str(current_row_number)].border = f_border
623
                ws[col + str(current_row_number)].alignment = c_c_alignment
624
                ws[col + str(current_row_number)] = _('Base Period') + " - " + _('Datetime')
625
626
                for i in range(0, base_period_data_ca_len):
627
                    current_col_number += 1
628
                    col = format_cell.get_column_letter(current_col_number)
629
630
                    ws[col + str(current_row_number)].fill = table_fill
631
                    ws[col + str(current_row_number)].font = title_font
632
                    ws[col + str(current_row_number)].alignment = c_c_alignment
633
                    ws[col + str(current_row_number)] = _('Base Period') + " - " + base_period_data['names'][i] + \
634
                        " (" + base_period_data['units'][i] + ")"
635
                    ws[col + str(current_row_number)].border = f_border
636
                current_col_number += 1
637
                col = format_cell.get_column_letter(current_col_number)
638
639
                ws[col + str(current_row_number)].fill = table_fill
640
                ws[col + str(current_row_number)].font = title_font
641
                ws[col + str(current_row_number)].border = f_border
642
                ws[col + str(current_row_number)].alignment = c_c_alignment
643
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " + _('Datetime')
644
645
                for i in range(0, reporting_period_data_ca_len):
646
                    current_col_number += 1
647
                    col = format_cell.get_column_letter(current_col_number)
648
                    ws[col + str(current_row_number)].fill = table_fill
649
                    ws[col + str(current_row_number)].font = title_font
650
                    ws[col + str(current_row_number)].alignment = c_c_alignment
651
                    ws[col + str(current_row_number)] = _('Reporting Period') + " - " \
652
                        + reporting_period_data['names'][i] + " (" + \
653
                        reporting_period_data['units'][i] + ")"
654
                    ws[col + str(current_row_number)].border = f_border
655
656
                current_row_number += 1
657
658
                max_timestamps_len = len(base_period_timestamps[0]) \
659
                    if len(base_period_timestamps[0]) >= len(reporting_period_timestamps[0]) \
660
                    else len(reporting_period_timestamps[0])
661
662
                for i in range(0, max_timestamps_len):
663
                    current_col_number = 2
664
                    col = format_cell.get_column_letter(current_col_number)
665
                    ws[col + str(current_row_number)].font = title_font
666
                    ws[col + str(current_row_number)].alignment = c_c_alignment
667
                    ws[col + str(current_row_number)] = base_period_timestamps[0][i] \
668
                        if i < len(base_period_timestamps[0]) else None
669
                    ws[col + str(current_row_number)].border = f_border
670
671
                    for j in range(0, base_period_data_ca_len):
672
                        current_col_number += 1
673
                        col = format_cell.get_column_letter(current_col_number)
674
675
                        ws[col + str(current_row_number)].font = title_font
676
                        ws[col + str(current_row_number)].alignment = c_c_alignment
677
                        ws[col + str(current_row_number)] = round(base_period_data['values_saving'][j][i], 2) \
678
                            if i < len(base_period_data['values_saving'][j]) else None
679
                        ws[col + str(current_row_number)].border = f_border
680
                    current_col_number += 1
681
                    col = format_cell.get_column_letter(current_col_number)
682
683
                    ws[col + str(current_row_number)].font = title_font
684
                    ws[col + str(current_row_number)].alignment = c_c_alignment
685
                    ws[col + str(current_row_number)] = reporting_period_timestamps[0][i] \
686
                        if i < len(reporting_period_timestamps[0]) else None
687
                    ws[col + str(current_row_number)].border = f_border
688
689
                    for j in range(0, reporting_period_data_ca_len):
690
                        current_col_number += 1
691
                        col = format_cell.get_column_letter(current_col_number)
692
693
                        ws[col + str(current_row_number)].font = title_font
694
                        ws[col + str(current_row_number)].alignment = c_c_alignment
695
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2) \
696
                            if i < len(reporting_period_data['values_saving'][j]) else None
697
                        ws[col + str(current_row_number)].border = f_border
698
699
                    current_row_number += 1
700
701
                current_col_number = 2
702
                col = format_cell.get_column_letter(current_col_number)
703
                ws[col + str(current_row_number)].font = title_font
704
                ws[col + str(current_row_number)].alignment = c_c_alignment
705
                ws[col + str(current_row_number)] = _('Subtotal')
706
                ws[col + str(current_row_number)].border = f_border
707
708
                for i in range(0, base_period_data_ca_len):
709
                    current_col_number += 1
710
                    col = format_cell.get_column_letter(current_col_number)
711
                    ws[col + str(current_row_number)].font = title_font
712
                    ws[col + str(current_row_number)].alignment = c_c_alignment
713
                    ws[col + str(current_row_number)] = round(base_period_data['subtotals_saving'][i], 2)
714
                    ws[col + str(current_row_number)].border = f_border
715
716
                current_col_number += 1
717
                col = format_cell.get_column_letter(current_col_number)
718
719
                ws[col + str(current_row_number)].font = title_font
720
                ws[col + str(current_row_number)].alignment = c_c_alignment
721
                ws[col + str(current_row_number)] = _('Subtotal')
722
                ws[col + str(current_row_number)].border = f_border
723
724
                for i in range(0, reporting_period_data_ca_len):
725
                    current_col_number += 1
726
                    col = format_cell.get_column_letter(current_col_number)
727
                    ws[col + str(current_row_number)].font = title_font
728
                    ws[col + str(current_row_number)].alignment = c_c_alignment
729
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
730
                    ws[col + str(current_row_number)].border = f_border
731
732
                for i in range(0, reporting_period_data_ca_len):
733
                    # line
734
                    line = LineChart()
735
                    line.title = _('Base Period Saving') + ' / ' \
736
                        + _('Reporting Period Saving') + ' - ' \
737
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
738
                    labels = Reference(ws, min_col=2 + base_period_data_ca_len + 1,
739
                                       min_row=table_start_row_number + 1,
740
                                       max_row=table_start_row_number + len(reporting_period_timestamps[0]))
741
                    base_line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
742
                                               max_row=table_start_row_number + len(reporting_period_timestamps[0]))
743
                    reporting_line_data = Reference(ws, min_col=3 + base_period_data_ca_len + 1 + i,
744
                                                    min_row=table_start_row_number,
745
                                                    max_row=table_start_row_number
746
                                                    + len(reporting_period_timestamps[0]))
747
                    line.add_data(base_line_data, titles_from_data=True)
748
                    line.add_data(reporting_line_data, titles_from_data=True)
749
                    line.set_categories(labels)
750
                    for j in range(len(line.series)):
751
                        line.series[j].marker.symbol = "circle"
752
                        line.series[j].smooth = True
753
                    line.x_axis.crosses = 'min'
754
                    line.height = 8.25
755
                    line.width = 24
756
                    line.dLbls = DataLabelList()
757
                    line.dLbls.dLblPos = 't'
758
                    line.dLbls.showVal = True
759
                    line.dLbls.showPercent = False
760
                    chart_col = 'B'
761
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
762
                    ws.add_chart(line, chart_cell)
763
764
                current_row_number += 2
765
766
    ####################################################################################################################
767
    current_sheet_parameters_row_number = table_start_draw_flag + len(reporting_period_data['names']) * 6 + 1

myems-api/excelexporters/storesaving.py 1 location

@@ 478-763 (lines=286) @@
475
    ####################################################################################################################
476
    table_start_draw_flag = current_row_number + 1
477
478
    if 'values_saving' not in reporting_period_data.keys() or \
479
            reporting_period_data['values_saving'] is None or \
480
            len(reporting_period_data['values_saving']) == 0 or \
481
            'timestamps' not in reporting_period_data.keys() or \
482
            reporting_period_data['timestamps'] is None or \
483
            len(reporting_period_data['timestamps']) == 0 or \
484
            len(reporting_period_data['timestamps'][0]) == 0:
485
        pass
486
    else:
487
        if not is_base_period_timestamp_exists_flag:
488
            reporting_period_data = report['reporting_period']
489
            times = reporting_period_data['timestamps']
490
            ca_len = len(report['reporting_period']['names'])
491
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
492
            ws['B' + str(current_row_number)].font = title_font
493
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
494
495
            current_row_number += 1
496
            # 1: Stand for blank line  2: Stand for title
497
            current_row_number += ca_len * 6 + real_timestamps_len * 6 + 1 + 2
498
            table_start_row_number = current_row_number
499
500
            time = times[0]
501
            has_data = False
502
503
            if len(time) > 0:
504
                has_data = True
505
506
            if has_data:
507
508
                ws.row_dimensions[current_row_number].height = 60
509
                current_col_number = 2
510
                col = format_cell.get_column_letter(current_col_number)
511
                ws[col + str(current_row_number)].fill = table_fill
512
                ws[col + str(current_row_number)].font = title_font
513
                ws[col + str(current_row_number)].border = f_border
514
                ws[col + str(current_row_number)].alignment = c_c_alignment
515
                ws[col + str(current_row_number)] = _('Datetime')
516
517
                for i in range(0, ca_len):
518
                    current_col_number += 1
519
                    col = format_cell.get_column_letter(current_col_number)
520
521
                    ws[col + str(current_row_number)].fill = table_fill
522
                    ws[col + str(current_row_number)].font = title_font
523
                    ws[col + str(current_row_number)].alignment = c_c_alignment
524
                    ws[col + str(current_row_number)] = reporting_period_data['names'][i] + \
525
                        " (" + reporting_period_data['units'][i] + ")"
526
                    ws[col + str(current_row_number)].border = f_border
527
528
                current_row_number += 1
529
530
                for i in range(0, len(time)):
531
                    current_col_number = 2
532
                    col = format_cell.get_column_letter(current_col_number)
533
                    ws[col + str(current_row_number)].font = title_font
534
                    ws[col + str(current_row_number)].alignment = c_c_alignment
535
                    ws[col + str(current_row_number)] = time[i]
536
                    ws[col + str(current_row_number)].border = f_border
537
538
                    for j in range(0, ca_len):
539
                        current_col_number += 1
540
                        col = format_cell.get_column_letter(current_col_number)
541
542
                        ws[col + str(current_row_number)].font = title_font
543
                        ws[col + str(current_row_number)].alignment = c_c_alignment
544
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2)
545
                        ws[col + str(current_row_number)].border = f_border
546
547
                    current_row_number += 1
548
549
                table_end_row_number = current_row_number - 1
550
551
                current_col_number = 2
552
                col = format_cell.get_column_letter(current_col_number)
553
                ws[col + str(current_row_number)].font = title_font
554
                ws[col + str(current_row_number)].alignment = c_c_alignment
555
                ws[col + str(current_row_number)] = _('Subtotal')
556
                ws[col + str(current_row_number)].border = f_border
557
558
                for i in range(0, ca_len):
559
                    current_col_number += 1
560
                    col = format_cell.get_column_letter(current_col_number)
561
562
                    ws[col + str(current_row_number)].font = title_font
563
                    ws[col + str(current_row_number)].alignment = c_c_alignment
564
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
565
                    ws[col + str(current_row_number)].border = f_border
566
567
                    # line
568
                    line = LineChart()
569
                    line.title = _('Reporting Period Saving') + ' - ' \
570
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
571
                    labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
572
                    line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
573
                                          max_row=table_end_row_number)
574
                    line.add_data(line_data, titles_from_data=True)
575
                    line.set_categories(labels)
576
                    line_data = line.series[0]
577
                    line_data.marker.symbol = "circle"
578
                    line_data.smooth = True
579
                    line.x_axis.crosses = 'min'
580
                    line.height = 8.25
581
                    line.width = 24
582
                    line.dLbls = DataLabelList()
583
                    line.dLbls.dLblPos = 't'
584
                    line.dLbls.showVal = True
585
                    line.dLbls.showPercent = False
586
                    chart_col = 'B'
587
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
588
                    ws.add_chart(line, chart_cell)
589
590
                current_row_number += 2
591
        else:
592
            base_period_data = report['base_period']
593
            reporting_period_data = report['reporting_period']
594
            base_period_timestamps = base_period_data['timestamps']
595
            reporting_period_timestamps = reporting_period_data['timestamps']
596
            # Tip:
597
            #     base_period_data['names'] == reporting_period_data['names']
598
            #     base_period_data['units'] == reporting_period_data['units']
599
            base_period_data_ca_len = len(base_period_data['names'])
600
            reporting_period_data_ca_len = len(reporting_period_data['names'])
601
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
602
            ws['B' + str(current_row_number)].font = title_font
603
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
604
605
            current_row_number += 1
606
            # 1: Stand for blank line  2: Stand for title
607
            current_row_number += reporting_period_data_ca_len * 6 + real_timestamps_len * 6 + 1 + 2
608
            table_start_row_number = current_row_number
609
610
            has_data = False
611
612
            if len(base_period_timestamps[0]) or len(reporting_period_timestamps[0]) > 0:
613
                has_data = True
614
615
            if has_data:
616
                ws.row_dimensions[current_row_number].height = 60
617
                current_col_number = 2
618
                col = format_cell.get_column_letter(current_col_number)
619
                ws[col + str(current_row_number)].fill = table_fill
620
                ws[col + str(current_row_number)].font = title_font
621
                ws[col + str(current_row_number)].border = f_border
622
                ws[col + str(current_row_number)].alignment = c_c_alignment
623
                ws[col + str(current_row_number)] = _('Base Period') + " - " + _('Datetime')
624
625
                for i in range(0, base_period_data_ca_len):
626
                    current_col_number += 1
627
                    col = format_cell.get_column_letter(current_col_number)
628
629
                    ws[col + str(current_row_number)].fill = table_fill
630
                    ws[col + str(current_row_number)].font = title_font
631
                    ws[col + str(current_row_number)].alignment = c_c_alignment
632
                    ws[col + str(current_row_number)] = _('Base Period') + " - " + base_period_data['names'][i] + \
633
                        " (" + base_period_data['units'][i] + ")"
634
                    ws[col + str(current_row_number)].border = f_border
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_row_number += 1
656
657
                max_timestamps_len = len(base_period_timestamps[0]) \
658
                    if len(base_period_timestamps[0]) >= len(reporting_period_timestamps[0]) \
659
                    else len(reporting_period_timestamps[0])
660
661
                for i in range(0, max_timestamps_len):
662
                    current_col_number = 2
663
                    col = format_cell.get_column_letter(current_col_number)
664
                    ws[col + str(current_row_number)].font = title_font
665
                    ws[col + str(current_row_number)].alignment = c_c_alignment
666
                    ws[col + str(current_row_number)] = base_period_timestamps[0][i] \
667
                        if i < len(base_period_timestamps[0]) else None
668
                    ws[col + str(current_row_number)].border = f_border
669
670
                    for j in range(0, base_period_data_ca_len):
671
                        current_col_number += 1
672
                        col = format_cell.get_column_letter(current_col_number)
673
674
                        ws[col + str(current_row_number)].font = title_font
675
                        ws[col + str(current_row_number)].alignment = c_c_alignment
676
                        ws[col + str(current_row_number)] = round(base_period_data['values_saving'][j][i], 2) \
677
                            if i < len(base_period_data['values_saving'][j]) else None
678
                        ws[col + str(current_row_number)].border = f_border
679
                    current_col_number += 1
680
                    col = format_cell.get_column_letter(current_col_number)
681
682
                    ws[col + str(current_row_number)].font = title_font
683
                    ws[col + str(current_row_number)].alignment = c_c_alignment
684
                    ws[col + str(current_row_number)] = reporting_period_timestamps[0][i] \
685
                        if i < len(reporting_period_timestamps[0]) else None
686
                    ws[col + str(current_row_number)].border = f_border
687
688
                    for j in range(0, reporting_period_data_ca_len):
689
                        current_col_number += 1
690
                        col = format_cell.get_column_letter(current_col_number)
691
692
                        ws[col + str(current_row_number)].font = title_font
693
                        ws[col + str(current_row_number)].alignment = c_c_alignment
694
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2) \
695
                            if i < len(reporting_period_data['values_saving'][j]) else None
696
                        ws[col + str(current_row_number)].border = f_border
697
698
                    current_row_number += 1
699
700
                current_col_number = 2
701
                col = format_cell.get_column_letter(current_col_number)
702
                ws[col + str(current_row_number)].font = title_font
703
                ws[col + str(current_row_number)].alignment = c_c_alignment
704
                ws[col + str(current_row_number)] = _('Subtotal')
705
                ws[col + str(current_row_number)].border = f_border
706
707
                for i in range(0, base_period_data_ca_len):
708
                    current_col_number += 1
709
                    col = format_cell.get_column_letter(current_col_number)
710
                    ws[col + str(current_row_number)].font = title_font
711
                    ws[col + str(current_row_number)].alignment = c_c_alignment
712
                    ws[col + str(current_row_number)] = round(base_period_data['subtotals_saving'][i], 2)
713
                    ws[col + str(current_row_number)].border = f_border
714
715
                current_col_number += 1
716
                col = format_cell.get_column_letter(current_col_number)
717
718
                ws[col + str(current_row_number)].font = title_font
719
                ws[col + str(current_row_number)].alignment = c_c_alignment
720
                ws[col + str(current_row_number)] = _('Subtotal')
721
                ws[col + str(current_row_number)].border = f_border
722
723
                for i in range(0, reporting_period_data_ca_len):
724
                    current_col_number += 1
725
                    col = format_cell.get_column_letter(current_col_number)
726
                    ws[col + str(current_row_number)].font = title_font
727
                    ws[col + str(current_row_number)].alignment = c_c_alignment
728
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
729
                    ws[col + str(current_row_number)].border = f_border
730
731
                for i in range(0, reporting_period_data_ca_len):
732
                    # line
733
                    line = LineChart()
734
                    line.title = _('Base Period Saving') + ' / ' \
735
                        + _('Reporting Period Saving') + ' - ' \
736
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
737
                    labels = Reference(ws, min_col=2 + base_period_data_ca_len + 1,
738
                                       min_row=table_start_row_number + 1,
739
                                       max_row=table_start_row_number + len(reporting_period_timestamps[0]))
740
                    base_line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
741
                                               max_row=table_start_row_number + len(reporting_period_timestamps[0]))
742
                    reporting_line_data = Reference(ws, min_col=3 + base_period_data_ca_len + 1 + i,
743
                                                    min_row=table_start_row_number,
744
                                                    max_row=table_start_row_number
745
                                                    + len(reporting_period_timestamps[0]))
746
                    line.add_data(base_line_data, titles_from_data=True)
747
                    line.add_data(reporting_line_data, titles_from_data=True)
748
                    line.set_categories(labels)
749
                    for j in range(len(line.series)):
750
                        line.series[j].marker.symbol = "circle"
751
                        line.series[j].smooth = True
752
                    line.x_axis.crosses = 'min'
753
                    line.height = 8.25
754
                    line.width = 24
755
                    line.dLbls = DataLabelList()
756
                    line.dLbls.dLblPos = 't'
757
                    line.dLbls.showVal = True
758
                    line.dLbls.showPercent = False
759
                    chart_col = 'B'
760
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
761
                    ws.add_chart(line, chart_cell)
762
763
                current_row_number += 2
764
765
    ####################################################################################################################
766
    current_sheet_parameters_row_number = table_start_draw_flag + len(reporting_period_data['names']) * 6 + 1

myems-api/excelexporters/equipmentsaving.py 1 location

@@ 451-736 (lines=286) @@
448
449
    table_start_draw_flag = current_row_number + 1
450
451
    if 'values_saving' not in reporting_period_data.keys() or \
452
            reporting_period_data['values_saving'] is None or \
453
            len(reporting_period_data['values_saving']) == 0 or \
454
            'timestamps' not in reporting_period_data.keys() or \
455
            reporting_period_data['timestamps'] is None or \
456
            len(reporting_period_data['timestamps']) == 0 or \
457
            len(reporting_period_data['timestamps'][0]) == 0:
458
        pass
459
    else:
460
        if not is_base_period_timestamp_exists_flag:
461
            reporting_period_data = report['reporting_period']
462
            times = reporting_period_data['timestamps']
463
            ca_len = len(report['reporting_period']['names'])
464
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
465
            ws['B' + str(current_row_number)].font = title_font
466
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
467
468
            current_row_number += 1
469
            # 1: Stand for blank line  2: Stand for title
470
            current_row_number += ca_len * 6 + real_timestamps_len * 6 + 1 + 2
471
            table_start_row_number = current_row_number
472
473
            time = times[0]
474
            has_data = False
475
476
            if len(time) > 0:
477
                has_data = True
478
479
            if has_data:
480
481
                ws.row_dimensions[current_row_number].height = 60
482
                current_col_number = 2
483
                col = format_cell.get_column_letter(current_col_number)
484
                ws[col + str(current_row_number)].fill = table_fill
485
                ws[col + str(current_row_number)].font = title_font
486
                ws[col + str(current_row_number)].border = f_border
487
                ws[col + str(current_row_number)].alignment = c_c_alignment
488
                ws[col + str(current_row_number)] = _('Datetime')
489
490
                for i in range(0, ca_len):
491
                    current_col_number += 1
492
                    col = format_cell.get_column_letter(current_col_number)
493
494
                    ws[col + str(current_row_number)].fill = table_fill
495
                    ws[col + str(current_row_number)].font = title_font
496
                    ws[col + str(current_row_number)].alignment = c_c_alignment
497
                    ws[col + str(current_row_number)] = reporting_period_data['names'][i] + \
498
                        " (" + reporting_period_data['units'][i] + ")"
499
                    ws[col + str(current_row_number)].border = f_border
500
501
                current_row_number += 1
502
503
                for i in range(0, len(time)):
504
                    current_col_number = 2
505
                    col = format_cell.get_column_letter(current_col_number)
506
                    ws[col + str(current_row_number)].font = title_font
507
                    ws[col + str(current_row_number)].alignment = c_c_alignment
508
                    ws[col + str(current_row_number)] = time[i]
509
                    ws[col + str(current_row_number)].border = f_border
510
511
                    for j in range(0, ca_len):
512
                        current_col_number += 1
513
                        col = format_cell.get_column_letter(current_col_number)
514
515
                        ws[col + str(current_row_number)].font = title_font
516
                        ws[col + str(current_row_number)].alignment = c_c_alignment
517
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2)
518
                        ws[col + str(current_row_number)].border = f_border
519
520
                    current_row_number += 1
521
522
                table_end_row_number = current_row_number - 1
523
524
                current_col_number = 2
525
                col = format_cell.get_column_letter(current_col_number)
526
                ws[col + str(current_row_number)].font = title_font
527
                ws[col + str(current_row_number)].alignment = c_c_alignment
528
                ws[col + str(current_row_number)] = _('Subtotal')
529
                ws[col + str(current_row_number)].border = f_border
530
531
                for i in range(0, ca_len):
532
                    current_col_number += 1
533
                    col = format_cell.get_column_letter(current_col_number)
534
535
                    ws[col + str(current_row_number)].font = title_font
536
                    ws[col + str(current_row_number)].alignment = c_c_alignment
537
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
538
                    ws[col + str(current_row_number)].border = f_border
539
540
                    # line
541
                    line = LineChart()
542
                    line.title = _('Reporting Period Saving') + ' - ' \
543
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
544
                    labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
545
                    line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
546
                                          max_row=table_end_row_number)
547
                    line.add_data(line_data, titles_from_data=True)
548
                    line.set_categories(labels)
549
                    line_data = line.series[0]
550
                    line_data.marker.symbol = "circle"
551
                    line_data.smooth = True
552
                    line.x_axis.crosses = 'min'
553
                    line.height = 8.25
554
                    line.width = 24
555
                    line.dLbls = DataLabelList()
556
                    line.dLbls.dLblPos = 't'
557
                    line.dLbls.showVal = True
558
                    line.dLbls.showPercent = False
559
                    chart_col = 'B'
560
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
561
                    ws.add_chart(line, chart_cell)
562
563
                current_row_number += 2
564
        else:
565
            base_period_data = report['base_period']
566
            reporting_period_data = report['reporting_period']
567
            base_period_timestamps = base_period_data['timestamps']
568
            reporting_period_timestamps = reporting_period_data['timestamps']
569
            # Tip:
570
            #     base_period_data['names'] == reporting_period_data['names']
571
            #     base_period_data['units'] == reporting_period_data['units']
572
            base_period_data_ca_len = len(base_period_data['names'])
573
            reporting_period_data_ca_len = len(reporting_period_data['names'])
574
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
575
            ws['B' + str(current_row_number)].font = title_font
576
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
577
578
            current_row_number += 1
579
            # 1: Stand for blank line  2: Stand for title
580
            current_row_number += reporting_period_data_ca_len * 6 + real_timestamps_len * 6 + 1 + 2
581
            table_start_row_number = current_row_number
582
583
            has_data = False
584
585
            if len(base_period_timestamps[0]) or len(reporting_period_timestamps[0]) > 0:
586
                has_data = True
587
588
            if has_data:
589
                ws.row_dimensions[current_row_number].height = 60
590
                current_col_number = 2
591
                col = format_cell.get_column_letter(current_col_number)
592
                ws[col + str(current_row_number)].fill = table_fill
593
                ws[col + str(current_row_number)].font = title_font
594
                ws[col + str(current_row_number)].border = f_border
595
                ws[col + str(current_row_number)].alignment = c_c_alignment
596
                ws[col + str(current_row_number)] = _('Base Period') + " - " + _('Datetime')
597
598
                for i in range(0, base_period_data_ca_len):
599
                    current_col_number += 1
600
                    col = format_cell.get_column_letter(current_col_number)
601
602
                    ws[col + str(current_row_number)].fill = table_fill
603
                    ws[col + str(current_row_number)].font = title_font
604
                    ws[col + str(current_row_number)].alignment = c_c_alignment
605
                    ws[col + str(current_row_number)] = _('Base Period') + " - " + base_period_data['names'][i] + \
606
                        " (" + base_period_data['units'][i] + ")"
607
                    ws[col + str(current_row_number)].border = f_border
608
                current_col_number += 1
609
                col = format_cell.get_column_letter(current_col_number)
610
611
                ws[col + str(current_row_number)].fill = table_fill
612
                ws[col + str(current_row_number)].font = title_font
613
                ws[col + str(current_row_number)].border = f_border
614
                ws[col + str(current_row_number)].alignment = c_c_alignment
615
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " + _('Datetime')
616
617
                for i in range(0, reporting_period_data_ca_len):
618
                    current_col_number += 1
619
                    col = format_cell.get_column_letter(current_col_number)
620
                    ws[col + str(current_row_number)].fill = table_fill
621
                    ws[col + str(current_row_number)].font = title_font
622
                    ws[col + str(current_row_number)].alignment = c_c_alignment
623
                    ws[col + str(current_row_number)] = _('Reporting Period') + " - " \
624
                        + reporting_period_data['names'][i] + " (" + \
625
                        reporting_period_data['units'][i] + ")"
626
                    ws[col + str(current_row_number)].border = f_border
627
628
                current_row_number += 1
629
630
                max_timestamps_len = len(base_period_timestamps[0]) \
631
                    if len(base_period_timestamps[0]) >= len(reporting_period_timestamps[0]) \
632
                    else len(reporting_period_timestamps[0])
633
634
                for i in range(0, max_timestamps_len):
635
                    current_col_number = 2
636
                    col = format_cell.get_column_letter(current_col_number)
637
                    ws[col + str(current_row_number)].font = title_font
638
                    ws[col + str(current_row_number)].alignment = c_c_alignment
639
                    ws[col + str(current_row_number)] = base_period_timestamps[0][i] \
640
                        if i < len(base_period_timestamps[0]) else None
641
                    ws[col + str(current_row_number)].border = f_border
642
643
                    for j in range(0, base_period_data_ca_len):
644
                        current_col_number += 1
645
                        col = format_cell.get_column_letter(current_col_number)
646
647
                        ws[col + str(current_row_number)].font = title_font
648
                        ws[col + str(current_row_number)].alignment = c_c_alignment
649
                        ws[col + str(current_row_number)] = round(base_period_data['values_saving'][j][i], 2) \
650
                            if i < len(base_period_data['values_saving'][j]) else None
651
                        ws[col + str(current_row_number)].border = f_border
652
                    current_col_number += 1
653
                    col = format_cell.get_column_letter(current_col_number)
654
655
                    ws[col + str(current_row_number)].font = title_font
656
                    ws[col + str(current_row_number)].alignment = c_c_alignment
657
                    ws[col + str(current_row_number)] = reporting_period_timestamps[0][i] \
658
                        if i < len(reporting_period_timestamps[0]) else None
659
                    ws[col + str(current_row_number)].border = f_border
660
661
                    for j in range(0, reporting_period_data_ca_len):
662
                        current_col_number += 1
663
                        col = format_cell.get_column_letter(current_col_number)
664
665
                        ws[col + str(current_row_number)].font = title_font
666
                        ws[col + str(current_row_number)].alignment = c_c_alignment
667
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2) \
668
                            if i < len(reporting_period_data['values_saving'][j]) else None
669
                        ws[col + str(current_row_number)].border = f_border
670
671
                    current_row_number += 1
672
673
                current_col_number = 2
674
                col = format_cell.get_column_letter(current_col_number)
675
                ws[col + str(current_row_number)].font = title_font
676
                ws[col + str(current_row_number)].alignment = c_c_alignment
677
                ws[col + str(current_row_number)] = _('Subtotal')
678
                ws[col + str(current_row_number)].border = f_border
679
680
                for i in range(0, base_period_data_ca_len):
681
                    current_col_number += 1
682
                    col = format_cell.get_column_letter(current_col_number)
683
                    ws[col + str(current_row_number)].font = title_font
684
                    ws[col + str(current_row_number)].alignment = c_c_alignment
685
                    ws[col + str(current_row_number)] = round(base_period_data['subtotals_saving'][i], 2)
686
                    ws[col + str(current_row_number)].border = f_border
687
688
                current_col_number += 1
689
                col = format_cell.get_column_letter(current_col_number)
690
691
                ws[col + str(current_row_number)].font = title_font
692
                ws[col + str(current_row_number)].alignment = c_c_alignment
693
                ws[col + str(current_row_number)] = _('Subtotal')
694
                ws[col + str(current_row_number)].border = f_border
695
696
                for i in range(0, reporting_period_data_ca_len):
697
                    current_col_number += 1
698
                    col = format_cell.get_column_letter(current_col_number)
699
                    ws[col + str(current_row_number)].font = title_font
700
                    ws[col + str(current_row_number)].alignment = c_c_alignment
701
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
702
                    ws[col + str(current_row_number)].border = f_border
703
704
                for i in range(0, reporting_period_data_ca_len):
705
                    # line
706
                    line = LineChart()
707
                    line.title = _('Base Period Saving') + ' / ' \
708
                        + _('Reporting Period Saving') + ' - ' \
709
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
710
                    labels = Reference(ws, min_col=2 + base_period_data_ca_len + 1,
711
                                       min_row=table_start_row_number + 1,
712
                                       max_row=table_start_row_number + len(reporting_period_timestamps[0]))
713
                    base_line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
714
                                               max_row=table_start_row_number + len(reporting_period_timestamps[0]))
715
                    reporting_line_data = Reference(ws, min_col=3 + base_period_data_ca_len + 1 + i,
716
                                                    min_row=table_start_row_number,
717
                                                    max_row=table_start_row_number
718
                                                    + len(reporting_period_timestamps[0]))
719
                    line.add_data(base_line_data, titles_from_data=True)
720
                    line.add_data(reporting_line_data, titles_from_data=True)
721
                    line.set_categories(labels)
722
                    for j in range(len(line.series)):
723
                        line.series[j].marker.symbol = "circle"
724
                        line.series[j].smooth = True
725
                    line.x_axis.crosses = 'min'
726
                    line.height = 8.25
727
                    line.width = 24
728
                    line.dLbls = DataLabelList()
729
                    line.dLbls.dLblPos = 't'
730
                    line.dLbls.showVal = True
731
                    line.dLbls.showPercent = False
732
                    chart_col = 'B'
733
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
734
                    ws.add_chart(line, chart_cell)
735
736
                current_row_number += 2
737
738
    ####################################################################################################################
739
    current_sheet_parameters_row_number = table_start_draw_flag + len(reporting_period_data['names']) * 6 + 1

myems-api/excelexporters/combinedequipmentsaving.py 1 location

@@ 451-736 (lines=286) @@
448
449
    table_start_draw_flag = current_row_number + 1
450
451
    if 'values_saving' not in reporting_period_data.keys() or \
452
            reporting_period_data['values_saving'] is None or \
453
            len(reporting_period_data['values_saving']) == 0 or \
454
            'timestamps' not in reporting_period_data.keys() or \
455
            reporting_period_data['timestamps'] is None or \
456
            len(reporting_period_data['timestamps']) == 0 or \
457
            len(reporting_period_data['timestamps'][0]) == 0:
458
        pass
459
    else:
460
        if not is_base_period_timestamp_exists_flag:
461
            reporting_period_data = report['reporting_period']
462
            times = reporting_period_data['timestamps']
463
            ca_len = len(report['reporting_period']['names'])
464
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
465
            ws['B' + str(current_row_number)].font = title_font
466
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
467
468
            current_row_number += 1
469
            # 1: Stand for blank line  2: Stand for title
470
            current_row_number += ca_len * 6 + real_timestamps_len * 6 + 1 + 2
471
            table_start_row_number = current_row_number
472
473
            time = times[0]
474
            has_data = False
475
476
            if len(time) > 0:
477
                has_data = True
478
479
            if has_data:
480
481
                ws.row_dimensions[current_row_number].height = 60
482
                current_col_number = 2
483
                col = format_cell.get_column_letter(current_col_number)
484
                ws[col + str(current_row_number)].fill = table_fill
485
                ws[col + str(current_row_number)].font = title_font
486
                ws[col + str(current_row_number)].border = f_border
487
                ws[col + str(current_row_number)].alignment = c_c_alignment
488
                ws[col + str(current_row_number)] = _('Datetime')
489
490
                for i in range(0, ca_len):
491
                    current_col_number += 1
492
                    col = format_cell.get_column_letter(current_col_number)
493
494
                    ws[col + str(current_row_number)].fill = table_fill
495
                    ws[col + str(current_row_number)].font = title_font
496
                    ws[col + str(current_row_number)].alignment = c_c_alignment
497
                    ws[col + str(current_row_number)] = reporting_period_data['names'][i] + \
498
                        " (" + reporting_period_data['units'][i] + ")"
499
                    ws[col + str(current_row_number)].border = f_border
500
501
                current_row_number += 1
502
503
                for i in range(0, len(time)):
504
                    current_col_number = 2
505
                    col = format_cell.get_column_letter(current_col_number)
506
                    ws[col + str(current_row_number)].font = title_font
507
                    ws[col + str(current_row_number)].alignment = c_c_alignment
508
                    ws[col + str(current_row_number)] = time[i]
509
                    ws[col + str(current_row_number)].border = f_border
510
511
                    for j in range(0, ca_len):
512
                        current_col_number += 1
513
                        col = format_cell.get_column_letter(current_col_number)
514
515
                        ws[col + str(current_row_number)].font = title_font
516
                        ws[col + str(current_row_number)].alignment = c_c_alignment
517
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2)
518
                        ws[col + str(current_row_number)].border = f_border
519
520
                    current_row_number += 1
521
522
                table_end_row_number = current_row_number - 1
523
524
                current_col_number = 2
525
                col = format_cell.get_column_letter(current_col_number)
526
                ws[col + str(current_row_number)].font = title_font
527
                ws[col + str(current_row_number)].alignment = c_c_alignment
528
                ws[col + str(current_row_number)] = _('Subtotal')
529
                ws[col + str(current_row_number)].border = f_border
530
531
                for i in range(0, ca_len):
532
                    current_col_number += 1
533
                    col = format_cell.get_column_letter(current_col_number)
534
535
                    ws[col + str(current_row_number)].font = title_font
536
                    ws[col + str(current_row_number)].alignment = c_c_alignment
537
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
538
                    ws[col + str(current_row_number)].border = f_border
539
540
                    # line
541
                    line = LineChart()
542
                    line.title = _('Reporting Period Saving') + ' - ' \
543
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
544
                    labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
545
                    line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
546
                                          max_row=table_end_row_number)
547
                    line.add_data(line_data, titles_from_data=True)
548
                    line.set_categories(labels)
549
                    line_data = line.series[0]
550
                    line_data.marker.symbol = "circle"
551
                    line_data.smooth = True
552
                    line.x_axis.crosses = 'min'
553
                    line.height = 8.25
554
                    line.width = 24
555
                    line.dLbls = DataLabelList()
556
                    line.dLbls.dLblPos = 't'
557
                    line.dLbls.showVal = True
558
                    line.dLbls.showPercent = False
559
                    chart_col = 'B'
560
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
561
                    ws.add_chart(line, chart_cell)
562
563
                current_row_number += 2
564
        else:
565
            base_period_data = report['base_period']
566
            reporting_period_data = report['reporting_period']
567
            base_period_timestamps = base_period_data['timestamps']
568
            reporting_period_timestamps = reporting_period_data['timestamps']
569
            # Tip:
570
            #     base_period_data['names'] == reporting_period_data['names']
571
            #     base_period_data['units'] == reporting_period_data['units']
572
            base_period_data_ca_len = len(base_period_data['names'])
573
            reporting_period_data_ca_len = len(reporting_period_data['names'])
574
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
575
            ws['B' + str(current_row_number)].font = title_font
576
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
577
578
            current_row_number += 1
579
            # 1: Stand for blank line  2: Stand for title
580
            current_row_number += reporting_period_data_ca_len * 6 + real_timestamps_len * 6 + 1 + 2
581
            table_start_row_number = current_row_number
582
583
            has_data = False
584
585
            if len(base_period_timestamps[0]) or len(reporting_period_timestamps[0]) > 0:
586
                has_data = True
587
588
            if has_data:
589
                ws.row_dimensions[current_row_number].height = 60
590
                current_col_number = 2
591
                col = format_cell.get_column_letter(current_col_number)
592
                ws[col + str(current_row_number)].fill = table_fill
593
                ws[col + str(current_row_number)].font = title_font
594
                ws[col + str(current_row_number)].border = f_border
595
                ws[col + str(current_row_number)].alignment = c_c_alignment
596
                ws[col + str(current_row_number)] = _('Base Period') + " - " + _('Datetime')
597
598
                for i in range(0, base_period_data_ca_len):
599
                    current_col_number += 1
600
                    col = format_cell.get_column_letter(current_col_number)
601
602
                    ws[col + str(current_row_number)].fill = table_fill
603
                    ws[col + str(current_row_number)].font = title_font
604
                    ws[col + str(current_row_number)].alignment = c_c_alignment
605
                    ws[col + str(current_row_number)] = _('Base Period') + " - " + base_period_data['names'][i] + \
606
                        " (" + base_period_data['units'][i] + ")"
607
                    ws[col + str(current_row_number)].border = f_border
608
                current_col_number += 1
609
                col = format_cell.get_column_letter(current_col_number)
610
611
                ws[col + str(current_row_number)].fill = table_fill
612
                ws[col + str(current_row_number)].font = title_font
613
                ws[col + str(current_row_number)].border = f_border
614
                ws[col + str(current_row_number)].alignment = c_c_alignment
615
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " + _('Datetime')
616
617
                for i in range(0, reporting_period_data_ca_len):
618
                    current_col_number += 1
619
                    col = format_cell.get_column_letter(current_col_number)
620
                    ws[col + str(current_row_number)].fill = table_fill
621
                    ws[col + str(current_row_number)].font = title_font
622
                    ws[col + str(current_row_number)].alignment = c_c_alignment
623
                    ws[col + str(current_row_number)] = _('Reporting Period') + " - " \
624
                        + reporting_period_data['names'][i] + " (" + \
625
                        reporting_period_data['units'][i] + ")"
626
                    ws[col + str(current_row_number)].border = f_border
627
628
                current_row_number += 1
629
630
                max_timestamps_len = len(base_period_timestamps[0]) \
631
                    if len(base_period_timestamps[0]) >= len(reporting_period_timestamps[0]) \
632
                    else len(reporting_period_timestamps[0])
633
634
                for i in range(0, max_timestamps_len):
635
                    current_col_number = 2
636
                    col = format_cell.get_column_letter(current_col_number)
637
                    ws[col + str(current_row_number)].font = title_font
638
                    ws[col + str(current_row_number)].alignment = c_c_alignment
639
                    ws[col + str(current_row_number)] = base_period_timestamps[0][i] \
640
                        if i < len(base_period_timestamps[0]) else None
641
                    ws[col + str(current_row_number)].border = f_border
642
643
                    for j in range(0, base_period_data_ca_len):
644
                        current_col_number += 1
645
                        col = format_cell.get_column_letter(current_col_number)
646
647
                        ws[col + str(current_row_number)].font = title_font
648
                        ws[col + str(current_row_number)].alignment = c_c_alignment
649
                        ws[col + str(current_row_number)] = round(base_period_data['values_saving'][j][i], 2) \
650
                            if i < len(base_period_data['values_saving'][j]) else None
651
                        ws[col + str(current_row_number)].border = f_border
652
                    current_col_number += 1
653
                    col = format_cell.get_column_letter(current_col_number)
654
655
                    ws[col + str(current_row_number)].font = title_font
656
                    ws[col + str(current_row_number)].alignment = c_c_alignment
657
                    ws[col + str(current_row_number)] = reporting_period_timestamps[0][i] \
658
                        if i < len(reporting_period_timestamps[0]) else None
659
                    ws[col + str(current_row_number)].border = f_border
660
661
                    for j in range(0, reporting_period_data_ca_len):
662
                        current_col_number += 1
663
                        col = format_cell.get_column_letter(current_col_number)
664
665
                        ws[col + str(current_row_number)].font = title_font
666
                        ws[col + str(current_row_number)].alignment = c_c_alignment
667
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2) \
668
                            if i < len(reporting_period_data['values_saving'][j]) else None
669
                        ws[col + str(current_row_number)].border = f_border
670
671
                    current_row_number += 1
672
673
                current_col_number = 2
674
                col = format_cell.get_column_letter(current_col_number)
675
                ws[col + str(current_row_number)].font = title_font
676
                ws[col + str(current_row_number)].alignment = c_c_alignment
677
                ws[col + str(current_row_number)] = _('Subtotal')
678
                ws[col + str(current_row_number)].border = f_border
679
680
                for i in range(0, base_period_data_ca_len):
681
                    current_col_number += 1
682
                    col = format_cell.get_column_letter(current_col_number)
683
                    ws[col + str(current_row_number)].font = title_font
684
                    ws[col + str(current_row_number)].alignment = c_c_alignment
685
                    ws[col + str(current_row_number)] = round(base_period_data['subtotals_saving'][i], 2)
686
                    ws[col + str(current_row_number)].border = f_border
687
688
                current_col_number += 1
689
                col = format_cell.get_column_letter(current_col_number)
690
691
                ws[col + str(current_row_number)].font = title_font
692
                ws[col + str(current_row_number)].alignment = c_c_alignment
693
                ws[col + str(current_row_number)] = _('Subtotal')
694
                ws[col + str(current_row_number)].border = f_border
695
696
                for i in range(0, reporting_period_data_ca_len):
697
                    current_col_number += 1
698
                    col = format_cell.get_column_letter(current_col_number)
699
                    ws[col + str(current_row_number)].font = title_font
700
                    ws[col + str(current_row_number)].alignment = c_c_alignment
701
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
702
                    ws[col + str(current_row_number)].border = f_border
703
704
                for i in range(0, reporting_period_data_ca_len):
705
                    # line
706
                    line = LineChart()
707
                    line.title = _('Base Period Saving') + ' / ' \
708
                        + _('Reporting Period Saving') + ' - ' \
709
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
710
                    labels = Reference(ws, min_col=2 + base_period_data_ca_len + 1,
711
                                       min_row=table_start_row_number + 1,
712
                                       max_row=table_start_row_number + len(reporting_period_timestamps[0]))
713
                    base_line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
714
                                               max_row=table_start_row_number + len(reporting_period_timestamps[0]))
715
                    reporting_line_data = Reference(ws, min_col=3 + base_period_data_ca_len + 1 + i,
716
                                                    min_row=table_start_row_number,
717
                                                    max_row=table_start_row_number
718
                                                    + len(reporting_period_timestamps[0]))
719
                    line.add_data(base_line_data, titles_from_data=True)
720
                    line.add_data(reporting_line_data, titles_from_data=True)
721
                    line.set_categories(labels)
722
                    for j in range(len(line.series)):
723
                        line.series[j].marker.symbol = "circle"
724
                        line.series[j].smooth = True
725
                    line.x_axis.crosses = 'min'
726
                    line.height = 8.25
727
                    line.width = 24
728
                    line.dLbls = DataLabelList()
729
                    line.dLbls.dLblPos = 't'
730
                    line.dLbls.showVal = True
731
                    line.dLbls.showPercent = False
732
                    chart_col = 'B'
733
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
734
                    ws.add_chart(line, chart_cell)
735
736
                current_row_number += 2
737
738
    ####################################################################################################################
739
    if "associated_equipment" not in report.keys() or \

myems-api/excelexporters/tenantsaving.py 1 location

@@ 487-771 (lines=285) @@
484
    ####################################################################################################################
485
    table_start_draw_flag = current_row_number + 1
486
487
    if 'values_saving' not in reporting_period_data.keys() or \
488
            reporting_period_data['values_saving'] is None or \
489
            len(reporting_period_data['values_saving']) == 0 or \
490
            'timestamps' not in reporting_period_data.keys() or \
491
            reporting_period_data['timestamps'] is None or \
492
            len(reporting_period_data['timestamps']) == 0 or \
493
            len(reporting_period_data['timestamps'][0]) == 0:
494
        pass
495
    else:
496
        if not is_base_period_timestamp_exists_flag:
497
            reporting_period_data = report['reporting_period']
498
            times = reporting_period_data['timestamps']
499
            ca_len = len(report['reporting_period']['names'])
500
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
501
            ws['B' + str(current_row_number)].font = title_font
502
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
503
504
            current_row_number += 1
505
            # 1: Stand for blank line  2: Stand for title
506
            current_row_number += ca_len * 6 + real_timestamps_len * 6 + 1 + 2
507
            table_start_row_number = current_row_number
508
509
            time = times[0]
510
            has_data = False
511
512
            if len(time) > 0:
513
                has_data = True
514
515
            if has_data:
516
517
                ws.row_dimensions[current_row_number].height = 60
518
                current_col_number = 2
519
                col = format_cell.get_column_letter(current_col_number)
520
                ws[col + str(current_row_number)].fill = table_fill
521
                ws[col + str(current_row_number)].font = title_font
522
                ws[col + str(current_row_number)].border = f_border
523
                ws[col + str(current_row_number)].alignment = c_c_alignment
524
                ws[col + str(current_row_number)] = _('Datetime')
525
526
                for i in range(0, ca_len):
527
                    current_col_number += 1
528
                    col = format_cell.get_column_letter(current_col_number)
529
530
                    ws[col + str(current_row_number)].fill = table_fill
531
                    ws[col + str(current_row_number)].font = title_font
532
                    ws[col + str(current_row_number)].alignment = c_c_alignment
533
                    ws[col + str(current_row_number)] = reporting_period_data['names'][i] + \
534
                        " (" + reporting_period_data['units'][i] + ")"
535
                    ws[col + str(current_row_number)].border = f_border
536
537
                current_row_number += 1
538
539
                for i in range(0, len(time)):
540
                    current_col_number = 2
541
                    col = format_cell.get_column_letter(current_col_number)
542
                    ws[col + str(current_row_number)].font = title_font
543
                    ws[col + str(current_row_number)].alignment = c_c_alignment
544
                    ws[col + str(current_row_number)] = time[i]
545
                    ws[col + str(current_row_number)].border = f_border
546
547
                    for j in range(0, ca_len):
548
                        current_col_number += 1
549
                        col = format_cell.get_column_letter(current_col_number)
550
551
                        ws[col + str(current_row_number)].font = title_font
552
                        ws[col + str(current_row_number)].alignment = c_c_alignment
553
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2)
554
                        ws[col + str(current_row_number)].border = f_border
555
556
                    current_row_number += 1
557
558
                table_end_row_number = current_row_number - 1
559
560
                current_col_number = 2
561
                col = format_cell.get_column_letter(current_col_number)
562
                ws[col + str(current_row_number)].font = title_font
563
                ws[col + str(current_row_number)].alignment = c_c_alignment
564
                ws[col + str(current_row_number)] = _('Subtotal')
565
                ws[col + str(current_row_number)].border = f_border
566
567
                for i in range(0, ca_len):
568
                    current_col_number += 1
569
                    col = format_cell.get_column_letter(current_col_number)
570
571
                    ws[col + str(current_row_number)].font = title_font
572
                    ws[col + str(current_row_number)].alignment = c_c_alignment
573
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
574
                    ws[col + str(current_row_number)].border = f_border
575
576
                    # line
577
                    line = LineChart()
578
                    line.title = _('Reporting Period Saving') + ' - ' \
579
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
580
                    labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
581
                    line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
582
                                          max_row=table_end_row_number)
583
                    line.add_data(line_data, titles_from_data=True)
584
                    line.set_categories(labels)
585
                    line_data = line.series[0]
586
                    line_data.marker.symbol = "circle"
587
                    line_data.smooth = True
588
                    line.x_axis.crosses = 'min'
589
                    line.height = 8.25
590
                    line.width = 24
591
                    line.dLbls = DataLabelList()
592
                    line.dLbls.dLblPos = 't'
593
                    line.dLbls.showVal = True
594
                    line.dLbls.showPercent = False
595
                    chart_col = 'B'
596
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
597
                    ws.add_chart(line, chart_cell)
598
599
                current_row_number += 2
600
        else:
601
            base_period_data = report['base_period']
602
            reporting_period_data = report['reporting_period']
603
            base_period_timestamps = base_period_data['timestamps']
604
            reporting_period_timestamps = reporting_period_data['timestamps']
605
            # Tip:
606
            #     base_period_data['names'] == reporting_period_data['names']
607
            #     base_period_data['units'] == reporting_period_data['units']
608
            base_period_data_ca_len = len(base_period_data['names'])
609
            reporting_period_data_ca_len = len(reporting_period_data['names'])
610
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
611
            ws['B' + str(current_row_number)].font = title_font
612
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
613
614
            current_row_number += 1
615
            # 1: Stand for blank line  2: Stand for title
616
            current_row_number += reporting_period_data_ca_len * 6 + real_timestamps_len * 6 + 1 + 2
617
            table_start_row_number = current_row_number
618
619
            has_data = False
620
621
            if len(base_period_timestamps[0]) or len(reporting_period_timestamps[0]) > 0:
622
                has_data = True
623
624
            if has_data:
625
                ws.row_dimensions[current_row_number].height = 60
626
                current_col_number = 2
627
                col = format_cell.get_column_letter(current_col_number)
628
                ws[col + str(current_row_number)].fill = table_fill
629
                ws[col + str(current_row_number)].font = title_font
630
                ws[col + str(current_row_number)].border = f_border
631
                ws[col + str(current_row_number)].alignment = c_c_alignment
632
                ws[col + str(current_row_number)] = _('Base Period') + " - " + _('Datetime')
633
634
                for i in range(0, base_period_data_ca_len):
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)].alignment = c_c_alignment
641
                    ws[col + str(current_row_number)] = _('Base Period') + " - " + base_period_data['names'][i] + \
642
                        " (" + base_period_data['units'][i] + ")"
643
                    ws[col + str(current_row_number)].border = f_border
644
                current_col_number += 1
645
                col = format_cell.get_column_letter(current_col_number)
646
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)].border = f_border
650
                ws[col + str(current_row_number)].alignment = c_c_alignment
651
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " + _('Datetime')
652
653
                for i in range(0, reporting_period_data_ca_len):
654
                    current_col_number += 1
655
                    col = format_cell.get_column_letter(current_col_number)
656
                    ws[col + str(current_row_number)].fill = table_fill
657
                    ws[col + str(current_row_number)].font = title_font
658
                    ws[col + str(current_row_number)].alignment = c_c_alignment
659
                    ws[col + str(current_row_number)] = _('Reporting Period') + " - " \
660
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
661
                    ws[col + str(current_row_number)].border = f_border
662
663
                current_row_number += 1
664
665
                max_timestamps_len = len(base_period_timestamps[0]) \
666
                    if len(base_period_timestamps[0]) >= len(reporting_period_timestamps[0]) \
667
                    else len(reporting_period_timestamps[0])
668
669
                for i in range(0, max_timestamps_len):
670
                    current_col_number = 2
671
                    col = format_cell.get_column_letter(current_col_number)
672
                    ws[col + str(current_row_number)].font = title_font
673
                    ws[col + str(current_row_number)].alignment = c_c_alignment
674
                    ws[col + str(current_row_number)] = base_period_timestamps[0][i] \
675
                        if i < len(base_period_timestamps[0]) else None
676
                    ws[col + str(current_row_number)].border = f_border
677
678
                    for j in range(0, base_period_data_ca_len):
679
                        current_col_number += 1
680
                        col = format_cell.get_column_letter(current_col_number)
681
682
                        ws[col + str(current_row_number)].font = title_font
683
                        ws[col + str(current_row_number)].alignment = c_c_alignment
684
                        ws[col + str(current_row_number)] = round(base_period_data['values_saving'][j][i], 2) \
685
                            if i < len(base_period_data['values_saving'][j]) else None
686
                        ws[col + str(current_row_number)].border = f_border
687
                    current_col_number += 1
688
                    col = format_cell.get_column_letter(current_col_number)
689
690
                    ws[col + str(current_row_number)].font = title_font
691
                    ws[col + str(current_row_number)].alignment = c_c_alignment
692
                    ws[col + str(current_row_number)] = reporting_period_timestamps[0][i] \
693
                        if i < len(reporting_period_timestamps[0]) else None
694
                    ws[col + str(current_row_number)].border = f_border
695
696
                    for j in range(0, reporting_period_data_ca_len):
697
                        current_col_number += 1
698
                        col = format_cell.get_column_letter(current_col_number)
699
700
                        ws[col + str(current_row_number)].font = title_font
701
                        ws[col + str(current_row_number)].alignment = c_c_alignment
702
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2) \
703
                            if i < len(reporting_period_data['values_saving'][j]) else None
704
                        ws[col + str(current_row_number)].border = f_border
705
706
                    current_row_number += 1
707
708
                current_col_number = 2
709
                col = format_cell.get_column_letter(current_col_number)
710
                ws[col + str(current_row_number)].font = title_font
711
                ws[col + str(current_row_number)].alignment = c_c_alignment
712
                ws[col + str(current_row_number)] = _('Subtotal')
713
                ws[col + str(current_row_number)].border = f_border
714
715
                for i in range(0, base_period_data_ca_len):
716
                    current_col_number += 1
717
                    col = format_cell.get_column_letter(current_col_number)
718
                    ws[col + str(current_row_number)].font = title_font
719
                    ws[col + str(current_row_number)].alignment = c_c_alignment
720
                    ws[col + str(current_row_number)] = round(base_period_data['subtotals_saving'][i], 2)
721
                    ws[col + str(current_row_number)].border = f_border
722
723
                current_col_number += 1
724
                col = format_cell.get_column_letter(current_col_number)
725
726
                ws[col + str(current_row_number)].font = title_font
727
                ws[col + str(current_row_number)].alignment = c_c_alignment
728
                ws[col + str(current_row_number)] = _('Subtotal')
729
                ws[col + str(current_row_number)].border = f_border
730
731
                for i in range(0, reporting_period_data_ca_len):
732
                    current_col_number += 1
733
                    col = format_cell.get_column_letter(current_col_number)
734
                    ws[col + str(current_row_number)].font = title_font
735
                    ws[col + str(current_row_number)].alignment = c_c_alignment
736
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
737
                    ws[col + str(current_row_number)].border = f_border
738
739
                for i in range(0, reporting_period_data_ca_len):
740
                    # line
741
                    line = LineChart()
742
                    line.title = _('Base Period Saving') + ' / ' \
743
                        + _('Reporting Period Saving') + ' - ' \
744
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
745
                    labels = Reference(ws, min_col=2 + base_period_data_ca_len + 1,
746
                                       min_row=table_start_row_number + 1,
747
                                       max_row=table_start_row_number + len(reporting_period_timestamps[0]))
748
                    base_line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
749
                                               max_row=table_start_row_number + len(reporting_period_timestamps[0]))
750
                    reporting_line_data = Reference(ws, min_col=3 + base_period_data_ca_len + 1 + i,
751
                                                    min_row=table_start_row_number,
752
                                                    max_row=table_start_row_number
753
                                                    + len(reporting_period_timestamps[0]))
754
                    line.add_data(base_line_data, titles_from_data=True)
755
                    line.add_data(reporting_line_data, titles_from_data=True)
756
                    line.set_categories(labels)
757
                    for j in range(len(line.series)):
758
                        line.series[j].marker.symbol = "circle"
759
                        line.series[j].smooth = True
760
                    line.x_axis.crosses = 'min'
761
                    line.height = 8.25
762
                    line.width = 24
763
                    line.dLbls = DataLabelList()
764
                    line.dLbls.dLblPos = 't'
765
                    line.dLbls.showVal = True
766
                    line.dLbls.showPercent = False
767
                    chart_col = 'B'
768
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
769
                    ws.add_chart(line, chart_cell)
770
771
                current_row_number += 2
772
773
    ####################################################################################################################
774
    current_sheet_parameters_row_number = table_start_draw_flag + len(reporting_period_data['names']) * 6 + 1

myems-api/excelexporters/spacesaving.py 1 location

@@ 481-765 (lines=285) @@
478
    ####################################################################################################################
479
    table_start_draw_flag = current_row_number + 1
480
481
    if 'values_saving' not in reporting_period_data.keys() or \
482
            reporting_period_data['values_saving'] is None or \
483
            len(reporting_period_data['values_saving']) == 0 or \
484
            'timestamps' not in reporting_period_data.keys() or \
485
            reporting_period_data['timestamps'] is None or \
486
            len(reporting_period_data['timestamps']) == 0 or \
487
            len(reporting_period_data['timestamps'][0]) == 0:
488
        pass
489
    else:
490
        if not is_base_period_timestamp_exists_flag:
491
            reporting_period_data = report['reporting_period']
492
            times = reporting_period_data['timestamps']
493
            ca_len = len(report['reporting_period']['names'])
494
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
495
            ws['B' + str(current_row_number)].font = title_font
496
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
497
498
            current_row_number += 1
499
            # 1: Stand for blank line  2: Stand for title
500
            current_row_number += ca_len * 6 + real_timestamps_len * 6 + 1 + 2
501
            table_start_row_number = current_row_number
502
503
            time = times[0]
504
            has_data = False
505
506
            if len(time) > 0:
507
                has_data = True
508
509
            if has_data:
510
511
                ws.row_dimensions[current_row_number].height = 60
512
                current_col_number = 2
513
                col = format_cell.get_column_letter(current_col_number)
514
                ws[col + str(current_row_number)].fill = table_fill
515
                ws[col + str(current_row_number)].font = title_font
516
                ws[col + str(current_row_number)].border = f_border
517
                ws[col + str(current_row_number)].alignment = c_c_alignment
518
                ws[col + str(current_row_number)] = _('Datetime')
519
520
                for i in range(0, ca_len):
521
                    current_col_number += 1
522
                    col = format_cell.get_column_letter(current_col_number)
523
524
                    ws[col + str(current_row_number)].fill = table_fill
525
                    ws[col + str(current_row_number)].font = title_font
526
                    ws[col + str(current_row_number)].alignment = c_c_alignment
527
                    ws[col + str(current_row_number)] = reporting_period_data['names'][i] + \
528
                        " (" + reporting_period_data['units'][i] + ")"
529
                    ws[col + str(current_row_number)].border = f_border
530
531
                current_row_number += 1
532
533
                for i in range(0, len(time)):
534
                    current_col_number = 2
535
                    col = format_cell.get_column_letter(current_col_number)
536
                    ws[col + str(current_row_number)].font = title_font
537
                    ws[col + str(current_row_number)].alignment = c_c_alignment
538
                    ws[col + str(current_row_number)] = time[i]
539
                    ws[col + str(current_row_number)].border = f_border
540
541
                    for j in range(0, ca_len):
542
                        current_col_number += 1
543
                        col = format_cell.get_column_letter(current_col_number)
544
545
                        ws[col + str(current_row_number)].font = title_font
546
                        ws[col + str(current_row_number)].alignment = c_c_alignment
547
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2)
548
                        ws[col + str(current_row_number)].border = f_border
549
550
                    current_row_number += 1
551
552
                table_end_row_number = current_row_number - 1
553
554
                current_col_number = 2
555
                col = format_cell.get_column_letter(current_col_number)
556
                ws[col + str(current_row_number)].font = title_font
557
                ws[col + str(current_row_number)].alignment = c_c_alignment
558
                ws[col + str(current_row_number)] = _('Subtotal')
559
                ws[col + str(current_row_number)].border = f_border
560
561
                for i in range(0, ca_len):
562
                    current_col_number += 1
563
                    col = format_cell.get_column_letter(current_col_number)
564
565
                    ws[col + str(current_row_number)].font = title_font
566
                    ws[col + str(current_row_number)].alignment = c_c_alignment
567
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
568
                    ws[col + str(current_row_number)].border = f_border
569
570
                    # line
571
                    line = LineChart()
572
                    line.title = _('Reporting Period Saving') + ' - ' \
573
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
574
                    labels = Reference(ws, min_col=2, min_row=table_start_row_number + 1, max_row=table_end_row_number)
575
                    line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
576
                                          max_row=table_end_row_number)
577
                    line.add_data(line_data, titles_from_data=True)
578
                    line.set_categories(labels)
579
                    line_data = line.series[0]
580
                    line_data.marker.symbol = "circle"
581
                    line_data.smooth = True
582
                    line.x_axis.crosses = 'min'
583
                    line.height = 8.25
584
                    line.width = 24
585
                    line.dLbls = DataLabelList()
586
                    line.dLbls.dLblPos = 't'
587
                    line.dLbls.showVal = True
588
                    line.dLbls.showPercent = False
589
                    chart_col = 'B'
590
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
591
                    ws.add_chart(line, chart_cell)
592
593
                current_row_number += 2
594
        else:
595
            base_period_data = report['base_period']
596
            reporting_period_data = report['reporting_period']
597
            base_period_timestamps = base_period_data['timestamps']
598
            reporting_period_timestamps = reporting_period_data['timestamps']
599
            # Tip:
600
            #     base_period_data['names'] == reporting_period_data['names']
601
            #     base_period_data['units'] == reporting_period_data['units']
602
            base_period_data_ca_len = len(base_period_data['names'])
603
            reporting_period_data_ca_len = len(reporting_period_data['names'])
604
            real_timestamps_len = timestamps_data_not_equal_0(report['parameters']['timestamps'])
605
            ws['B' + str(current_row_number)].font = title_font
606
            ws['B' + str(current_row_number)] = name + ' ' + _('Detailed Data')
607
608
            current_row_number += 1
609
            # 1: Stand for blank line  2: Stand for title
610
            current_row_number += reporting_period_data_ca_len * 6 + real_timestamps_len * 6 + 1 + 2
611
            table_start_row_number = current_row_number
612
613
            has_data = False
614
615
            if len(base_period_timestamps[0]) or len(reporting_period_timestamps[0]) > 0:
616
                has_data = True
617
618
            if has_data:
619
                ws.row_dimensions[current_row_number].height = 60
620
                current_col_number = 2
621
                col = format_cell.get_column_letter(current_col_number)
622
                ws[col + str(current_row_number)].fill = table_fill
623
                ws[col + str(current_row_number)].font = title_font
624
                ws[col + str(current_row_number)].border = f_border
625
                ws[col + str(current_row_number)].alignment = c_c_alignment
626
                ws[col + str(current_row_number)] = _('Base Period') + " - " + _('Datetime')
627
628
                for i in range(0, base_period_data_ca_len):
629
                    current_col_number += 1
630
                    col = format_cell.get_column_letter(current_col_number)
631
632
                    ws[col + str(current_row_number)].fill = table_fill
633
                    ws[col + str(current_row_number)].font = title_font
634
                    ws[col + str(current_row_number)].alignment = c_c_alignment
635
                    ws[col + str(current_row_number)] = _('Base Period') + " - " + base_period_data['names'][i] + \
636
                        " (" + base_period_data['units'][i] + ")"
637
                    ws[col + str(current_row_number)].border = f_border
638
                current_col_number += 1
639
                col = format_cell.get_column_letter(current_col_number)
640
641
                ws[col + str(current_row_number)].fill = table_fill
642
                ws[col + str(current_row_number)].font = title_font
643
                ws[col + str(current_row_number)].border = f_border
644
                ws[col + str(current_row_number)].alignment = c_c_alignment
645
                ws[col + str(current_row_number)] = _('Reporting Period') + " - " + _('Datetime')
646
647
                for i in range(0, reporting_period_data_ca_len):
648
                    current_col_number += 1
649
                    col = format_cell.get_column_letter(current_col_number)
650
                    ws[col + str(current_row_number)].fill = table_fill
651
                    ws[col + str(current_row_number)].font = title_font
652
                    ws[col + str(current_row_number)].alignment = c_c_alignment
653
                    ws[col + str(current_row_number)] = _('Reporting Period') + " - " \
654
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
655
                    ws[col + str(current_row_number)].border = f_border
656
657
                current_row_number += 1
658
659
                max_timestamps_len = len(base_period_timestamps[0]) \
660
                    if len(base_period_timestamps[0]) >= len(reporting_period_timestamps[0]) \
661
                    else len(reporting_period_timestamps[0])
662
663
                for i in range(0, max_timestamps_len):
664
                    current_col_number = 2
665
                    col = format_cell.get_column_letter(current_col_number)
666
                    ws[col + str(current_row_number)].font = title_font
667
                    ws[col + str(current_row_number)].alignment = c_c_alignment
668
                    ws[col + str(current_row_number)] = base_period_timestamps[0][i] \
669
                        if i < len(base_period_timestamps[0]) else None
670
                    ws[col + str(current_row_number)].border = f_border
671
672
                    for j in range(0, base_period_data_ca_len):
673
                        current_col_number += 1
674
                        col = format_cell.get_column_letter(current_col_number)
675
676
                        ws[col + str(current_row_number)].font = title_font
677
                        ws[col + str(current_row_number)].alignment = c_c_alignment
678
                        ws[col + str(current_row_number)] = round(base_period_data['values_saving'][j][i], 2) \
679
                            if i < len(base_period_data['values_saving'][j]) else None
680
                        ws[col + str(current_row_number)].border = f_border
681
                    current_col_number += 1
682
                    col = format_cell.get_column_letter(current_col_number)
683
684
                    ws[col + str(current_row_number)].font = title_font
685
                    ws[col + str(current_row_number)].alignment = c_c_alignment
686
                    ws[col + str(current_row_number)] = reporting_period_timestamps[0][i] \
687
                        if i < len(reporting_period_timestamps[0]) else None
688
                    ws[col + str(current_row_number)].border = f_border
689
690
                    for j in range(0, reporting_period_data_ca_len):
691
                        current_col_number += 1
692
                        col = format_cell.get_column_letter(current_col_number)
693
694
                        ws[col + str(current_row_number)].font = title_font
695
                        ws[col + str(current_row_number)].alignment = c_c_alignment
696
                        ws[col + str(current_row_number)] = round(reporting_period_data['values_saving'][j][i], 2) \
697
                            if i < len(reporting_period_data['values_saving'][j]) else None
698
                        ws[col + str(current_row_number)].border = f_border
699
700
                    current_row_number += 1
701
702
                current_col_number = 2
703
                col = format_cell.get_column_letter(current_col_number)
704
                ws[col + str(current_row_number)].font = title_font
705
                ws[col + str(current_row_number)].alignment = c_c_alignment
706
                ws[col + str(current_row_number)] = _('Subtotal')
707
                ws[col + str(current_row_number)].border = f_border
708
709
                for i in range(0, base_period_data_ca_len):
710
                    current_col_number += 1
711
                    col = format_cell.get_column_letter(current_col_number)
712
                    ws[col + str(current_row_number)].font = title_font
713
                    ws[col + str(current_row_number)].alignment = c_c_alignment
714
                    ws[col + str(current_row_number)] = round(base_period_data['subtotals_saving'][i], 2)
715
                    ws[col + str(current_row_number)].border = f_border
716
717
                current_col_number += 1
718
                col = format_cell.get_column_letter(current_col_number)
719
720
                ws[col + str(current_row_number)].font = title_font
721
                ws[col + str(current_row_number)].alignment = c_c_alignment
722
                ws[col + str(current_row_number)] = _('Subtotal')
723
                ws[col + str(current_row_number)].border = f_border
724
725
                for i in range(0, reporting_period_data_ca_len):
726
                    current_col_number += 1
727
                    col = format_cell.get_column_letter(current_col_number)
728
                    ws[col + str(current_row_number)].font = title_font
729
                    ws[col + str(current_row_number)].alignment = c_c_alignment
730
                    ws[col + str(current_row_number)] = round(reporting_period_data['subtotals_saving'][i], 2)
731
                    ws[col + str(current_row_number)].border = f_border
732
733
                for i in range(0, reporting_period_data_ca_len):
734
                    # line
735
                    line = LineChart()
736
                    line.title = _('Base Period Saving') + ' / ' \
737
                        + _('Reporting Period Saving') + ' - ' \
738
                        + reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
739
                    labels = Reference(ws, min_col=2 + base_period_data_ca_len + 1,
740
                                       min_row=table_start_row_number + 1,
741
                                       max_row=table_start_row_number + len(reporting_period_timestamps[0]))
742
                    base_line_data = Reference(ws, min_col=3 + i, min_row=table_start_row_number,
743
                                               max_row=table_start_row_number + len(reporting_period_timestamps[0]))
744
                    reporting_line_data = Reference(ws, min_col=3 + base_period_data_ca_len + 1 + i,
745
                                                    min_row=table_start_row_number,
746
                                                    max_row=table_start_row_number
747
                                                    + len(reporting_period_timestamps[0]))
748
                    line.add_data(base_line_data, titles_from_data=True)
749
                    line.add_data(reporting_line_data, titles_from_data=True)
750
                    line.set_categories(labels)
751
                    for j in range(len(line.series)):
752
                        line.series[j].marker.symbol = "circle"
753
                        line.series[j].smooth = True
754
                    line.x_axis.crosses = 'min'
755
                    line.height = 8.25
756
                    line.width = 24
757
                    line.dLbls = DataLabelList()
758
                    line.dLbls.dLblPos = 't'
759
                    line.dLbls.showVal = True
760
                    line.dLbls.showPercent = False
761
                    chart_col = 'B'
762
                    chart_cell = chart_col + str(table_start_draw_flag + 6 * i)
763
                    ws.add_chart(line, chart_cell)
764
765
                current_row_number += 2
766
767
    ####################################################################################################################
768
    if "child_space" not in report.keys() or "energy_category_names" not in report['child_space'].keys() or \