Code Duplication    Length = 136-136 lines in 2 locations

myems-api/reports/combinedequipmentefficiency.py 1 location

@@ 415-550 (lines=136) @@
412
        # Step 8: calculate base period fractions
413
        ################################################################################################################
414
        base = dict()
415
        if fraction_list is not None and len(fraction_list) > 0:
416
            for fraction in fraction_list:
417
                base[fraction['id']] = dict()
418
                base[fraction['id']]['name'] = fraction['name']
419
                base[fraction['id']]['unit'] = fraction['numerator_meter_unit'] + '/' + \
420
                    fraction['denominator_meter_unit']
421
                base[fraction['id']]['numerator_timestamps'] = list()
422
                base[fraction['id']]['numerator_values'] = list()
423
                base[fraction['id']]['numerator_cumulation'] = Decimal(0.0)
424
                base[fraction['id']]['denominator_timestamps'] = list()
425
                base[fraction['id']]['denominator_values'] = list()
426
                base[fraction['id']]['denominator_cumulation'] = Decimal(0.0)
427
                base[fraction['id']]['timestamps'] = list()
428
                base[fraction['id']]['values'] = list()
429
                base[fraction['id']]['cumulation'] = Decimal(0.0)
430
                # query numerator meter output
431
                if fraction['numerator_meter_type'] == 'meter':
432
                    query = (" SELECT start_datetime_utc, actual_value "
433
                             " FROM tbl_meter_hourly "
434
                             " WHERE meter_id = %s "
435
                             " AND start_datetime_utc >= %s "
436
                             " AND start_datetime_utc < %s "
437
                             " ORDER BY start_datetime_utc ")
438
                elif fraction['numerator_meter_type'] == 'offline_meter':
439
                    query = (" SELECT start_datetime_utc, actual_value "
440
                             " FROM tbl_offline_meter_hourly "
441
                             " WHERE offline_meter_id = %s "
442
                             " AND start_datetime_utc >= %s "
443
                             " AND start_datetime_utc < %s "
444
                             " ORDER BY start_datetime_utc ")
445
                elif fraction['numerator_meter_type'] == 'virtual_meter':
446
                    query = (" SELECT start_datetime_utc, actual_value "
447
                             " FROM tbl_virtual_meter_hourly "
448
                             " WHERE virtual_meter_id = %s "
449
                             " AND start_datetime_utc >= %s "
450
                             " AND start_datetime_utc < %s "
451
                             " ORDER BY start_datetime_utc ")
452
453
                cursor_energy.execute(query, (fraction['numerator_meter_id'],
454
                                              base_start_datetime_utc,
455
                                              base_end_datetime_utc))
456
                rows_numerator_meter_hourly = cursor_energy.fetchall()
457
458
                rows_numerator_meter_periodically = \
459
                    utilities.aggregate_hourly_data_by_period(rows_numerator_meter_hourly,
460
                                                              base_start_datetime_utc,
461
                                                              base_end_datetime_utc,
462
                                                              period_type)
463
                # query denominator meter input
464
                if fraction['denominator_meter_type'] == 'meter':
465
                    query = (" SELECT start_datetime_utc, actual_value "
466
                             " FROM tbl_meter_hourly "
467
                             " WHERE meter_id = %s "
468
                             " AND start_datetime_utc >= %s "
469
                             " AND start_datetime_utc < %s "
470
                             " ORDER BY start_datetime_utc ")
471
                elif fraction['denominator_meter_type'] == 'offline_meter':
472
                    query = (" SELECT start_datetime_utc, actual_value "
473
                             " FROM tbl_offline_meter_hourly "
474
                             " WHERE offline_meter_id = %s "
475
                             " AND start_datetime_utc >= %s "
476
                             " AND start_datetime_utc < %s "
477
                             " ORDER BY start_datetime_utc ")
478
                elif fraction['denominator_meter_type'] == 'virtual_meter':
479
                    query = (" SELECT start_datetime_utc, actual_value "
480
                             " FROM tbl_virtual_meter_hourly "
481
                             " WHERE virtual_meter_id = %s "
482
                             " AND start_datetime_utc >= %s "
483
                             " AND start_datetime_utc < %s "
484
                             " ORDER BY start_datetime_utc ")
485
486
                cursor_energy.execute(query, (fraction['denominator_meter_id'],
487
                                              base_start_datetime_utc,
488
                                              base_end_datetime_utc))
489
                rows_denominator_meter_hourly = cursor_energy.fetchall()
490
491
                rows_denominator_meter_periodically = \
492
                    utilities.aggregate_hourly_data_by_period(rows_denominator_meter_hourly,
493
                                                              base_start_datetime_utc,
494
                                                              base_end_datetime_utc,
495
                                                              period_type)
496
497
                for row_numerator_meter_periodically in rows_numerator_meter_periodically:
498
                    current_datetime_local = row_numerator_meter_periodically[0].replace(tzinfo=timezone.utc) + \
499
                                             timedelta(minutes=timezone_offset)
500
                    if period_type == 'hourly':
501
                        current_datetime = current_datetime_local.isoformat()[0:19]
502
                    elif period_type == 'daily':
503
                        current_datetime = current_datetime_local.isoformat()[0:10]
504
                    elif period_type == 'weekly':
505
                        current_datetime = current_datetime_local.isoformat()[0:10]
506
                    elif period_type == 'monthly':
507
                        current_datetime = current_datetime_local.isoformat()[0:7]
508
                    elif period_type == 'yearly':
509
                        current_datetime = current_datetime_local.isoformat()[0:4]
510
511
                    actual_value = Decimal(0.0) if row_numerator_meter_periodically[1] is None \
512
                        else row_numerator_meter_periodically[1]
513
514
                    base[fraction['id']]['numerator_timestamps'].append(current_datetime)
515
                    base[fraction['id']]['numerator_values'].append(actual_value)
516
                    base[fraction['id']]['numerator_cumulation'] += actual_value
517
518
                for row_denominator_meter_periodically in rows_denominator_meter_periodically:
519
                    current_datetime_local = row_denominator_meter_periodically[0].replace(tzinfo=timezone.utc) + \
520
                                             timedelta(minutes=timezone_offset)
521
                    if period_type == 'hourly':
522
                        current_datetime = current_datetime_local.isoformat()[0:19]
523
                    elif period_type == 'daily':
524
                        current_datetime = current_datetime_local.isoformat()[0:10]
525
                    elif period_type == 'weekly':
526
                        current_datetime = current_datetime_local.isoformat()[0:10]
527
                    elif period_type == 'monthly':
528
                        current_datetime = current_datetime_local.isoformat()[0:7]
529
                    elif period_type == 'yearly':
530
                        current_datetime = current_datetime_local.isoformat()[0:4]
531
532
                    actual_value = Decimal(0.0) if row_denominator_meter_periodically[1] is None \
533
                        else row_denominator_meter_periodically[1]
534
535
                    base[fraction['id']]['denominator_timestamps'].append(current_datetime)
536
                    base[fraction['id']]['denominator_values'].append(actual_value)
537
                    base[fraction['id']]['denominator_cumulation'] += actual_value
538
539
                for i in range(len(base[fraction['id']]['denominator_timestamps'])):
540
                    timestamp = base[fraction['id']]['denominator_timestamps'][i]
541
                    base[fraction['id']]['timestamps'].append(timestamp)
542
                    value = (base[fraction['id']]['numerator_values'][i] /
543
                             base[fraction['id']]['denominator_values'][i]) \
544
                        if base[fraction['id']]['denominator_values'][i] > Decimal(0.0) else Decimal(0.0)
545
                    base[fraction['id']]['values'].append(value)
546
547
                cumulation = (base[fraction['id']]['numerator_cumulation'] /
548
                              base[fraction['id']]['denominator_cumulation']) \
549
                    if base[fraction['id']]['denominator_cumulation'] > Decimal(0.0) else Decimal(0.0)
550
                base[fraction['id']]['cumulation'] = cumulation
551
552
        ################################################################################################################
553
        # Step 9: calculate reporting period fractions

myems-api/reports/equipmentefficiency.py 1 location

@@ 340-475 (lines=136) @@
337
        # Step 5: calculate base period fractions
338
        ################################################################################################################
339
        base = dict()
340
        if fraction_list is not None and len(fraction_list) > 0:
341
            for fraction in fraction_list:
342
                base[fraction['id']] = dict()
343
                base[fraction['id']]['name'] = fraction['name']
344
                base[fraction['id']]['unit'] = fraction['numerator_meter_unit'] + '/' + \
345
                    fraction['denominator_meter_unit']
346
                base[fraction['id']]['numerator_timestamps'] = list()
347
                base[fraction['id']]['numerator_values'] = list()
348
                base[fraction['id']]['numerator_cumulation'] = Decimal(0.0)
349
                base[fraction['id']]['denominator_timestamps'] = list()
350
                base[fraction['id']]['denominator_values'] = list()
351
                base[fraction['id']]['denominator_cumulation'] = Decimal(0.0)
352
                base[fraction['id']]['timestamps'] = list()
353
                base[fraction['id']]['values'] = list()
354
                base[fraction['id']]['cumulation'] = Decimal(0.0)
355
                # query numerator meter output
356
                if fraction['numerator_meter_type'] == 'meter':
357
                    query = (" SELECT start_datetime_utc, actual_value "
358
                             " FROM tbl_meter_hourly "
359
                             " WHERE meter_id = %s "
360
                             " AND start_datetime_utc >= %s "
361
                             " AND start_datetime_utc < %s "
362
                             " ORDER BY start_datetime_utc ")
363
                elif fraction['numerator_meter_type'] == 'offline_meter':
364
                    query = (" SELECT start_datetime_utc, actual_value "
365
                             " FROM tbl_offline_meter_hourly "
366
                             " WHERE offline_meter_id = %s "
367
                             " AND start_datetime_utc >= %s "
368
                             " AND start_datetime_utc < %s "
369
                             " ORDER BY start_datetime_utc ")
370
                elif fraction['numerator_meter_type'] == 'virtual_meter':
371
                    query = (" SELECT start_datetime_utc, actual_value "
372
                             " FROM tbl_virtual_meter_hourly "
373
                             " WHERE virtual_meter_id = %s "
374
                             " AND start_datetime_utc >= %s "
375
                             " AND start_datetime_utc < %s "
376
                             " ORDER BY start_datetime_utc ")
377
378
                cursor_energy.execute(query, (fraction['numerator_meter_id'],
379
                                              base_start_datetime_utc,
380
                                              base_end_datetime_utc))
381
                rows_numerator_meter_hourly = cursor_energy.fetchall()
382
383
                rows_numerator_meter_periodically = \
384
                    utilities.aggregate_hourly_data_by_period(rows_numerator_meter_hourly,
385
                                                              base_start_datetime_utc,
386
                                                              base_end_datetime_utc,
387
                                                              period_type)
388
                # query denominator meter input
389
                if fraction['denominator_meter_type'] == 'meter':
390
                    query = (" SELECT start_datetime_utc, actual_value "
391
                             " FROM tbl_meter_hourly "
392
                             " WHERE meter_id = %s "
393
                             " AND start_datetime_utc >= %s "
394
                             " AND start_datetime_utc < %s "
395
                             " ORDER BY start_datetime_utc ")
396
                elif fraction['denominator_meter_type'] == 'offline_meter':
397
                    query = (" SELECT start_datetime_utc, actual_value "
398
                             " FROM tbl_offline_meter_hourly "
399
                             " WHERE offline_meter_id = %s "
400
                             " AND start_datetime_utc >= %s "
401
                             " AND start_datetime_utc < %s "
402
                             " ORDER BY start_datetime_utc ")
403
                elif fraction['denominator_meter_type'] == 'virtual_meter':
404
                    query = (" SELECT start_datetime_utc, actual_value "
405
                             " FROM tbl_virtual_meter_hourly "
406
                             " WHERE virtual_meter_id = %s "
407
                             " AND start_datetime_utc >= %s "
408
                             " AND start_datetime_utc < %s "
409
                             " ORDER BY start_datetime_utc ")
410
411
                cursor_energy.execute(query, (fraction['denominator_meter_id'],
412
                                              base_start_datetime_utc,
413
                                              base_end_datetime_utc))
414
                rows_denominator_meter_hourly = cursor_energy.fetchall()
415
416
                rows_denominator_meter_periodically = \
417
                    utilities.aggregate_hourly_data_by_period(rows_denominator_meter_hourly,
418
                                                              base_start_datetime_utc,
419
                                                              base_end_datetime_utc,
420
                                                              period_type)
421
422
                for row_numerator_meter_periodically in rows_numerator_meter_periodically:
423
                    current_datetime_local = row_numerator_meter_periodically[0].replace(tzinfo=timezone.utc) + \
424
                                             timedelta(minutes=timezone_offset)
425
                    if period_type == 'hourly':
426
                        current_datetime = current_datetime_local.isoformat()[0:19]
427
                    elif period_type == 'daily':
428
                        current_datetime = current_datetime_local.isoformat()[0:10]
429
                    elif period_type == 'weekly':
430
                        current_datetime = current_datetime_local.isoformat()[0:10]
431
                    elif period_type == 'monthly':
432
                        current_datetime = current_datetime_local.isoformat()[0:7]
433
                    elif period_type == 'yearly':
434
                        current_datetime = current_datetime_local.isoformat()[0:4]
435
436
                    actual_value = Decimal(0.0) if row_numerator_meter_periodically[1] is None \
437
                        else row_numerator_meter_periodically[1]
438
439
                    base[fraction['id']]['numerator_timestamps'].append(current_datetime)
440
                    base[fraction['id']]['numerator_values'].append(actual_value)
441
                    base[fraction['id']]['numerator_cumulation'] += actual_value
442
443
                for row_denominator_meter_periodically in rows_denominator_meter_periodically:
444
                    current_datetime_local = row_denominator_meter_periodically[0].replace(tzinfo=timezone.utc) + \
445
                                             timedelta(minutes=timezone_offset)
446
                    if period_type == 'hourly':
447
                        current_datetime = current_datetime_local.isoformat()[0:19]
448
                    elif period_type == 'daily':
449
                        current_datetime = current_datetime_local.isoformat()[0:10]
450
                    elif period_type == 'weekly':
451
                        current_datetime = current_datetime_local.isoformat()[0:10]
452
                    elif period_type == 'monthly':
453
                        current_datetime = current_datetime_local.isoformat()[0:7]
454
                    elif period_type == 'yearly':
455
                        current_datetime = current_datetime_local.isoformat()[0:4]
456
457
                    actual_value = Decimal(0.0) if row_denominator_meter_periodically[1] is None \
458
                        else row_denominator_meter_periodically[1]
459
460
                    base[fraction['id']]['denominator_timestamps'].append(current_datetime)
461
                    base[fraction['id']]['denominator_values'].append(actual_value)
462
                    base[fraction['id']]['denominator_cumulation'] += actual_value
463
464
                for i in range(len(base[fraction['id']]['denominator_timestamps'])):
465
                    timestamp = base[fraction['id']]['denominator_timestamps'][i]
466
                    base[fraction['id']]['timestamps'].append(timestamp)
467
                    value = (base[fraction['id']]['numerator_values'][i] /
468
                             base[fraction['id']]['denominator_values'][i]) \
469
                        if base[fraction['id']]['denominator_values'][i] > Decimal(0.0) else Decimal(0.0)
470
                    base[fraction['id']]['values'].append(value)
471
472
                cumulation = (base[fraction['id']]['numerator_cumulation'] /
473
                              base[fraction['id']]['denominator_cumulation']) \
474
                    if base[fraction['id']]['denominator_cumulation'] > Decimal(0.0) else Decimal(0.0)
475
                base[fraction['id']]['cumulation'] = cumulation
476
477
        ################################################################################################################
478
        # Step 6: calculate reporting period fractions