| @@ 313-372 (lines=60) @@ | ||
| 310 | # Step 8: query reporting period energy input |
|
| 311 | ################################################################################################################ |
|
| 312 | reporting = dict() |
|
| 313 | if energy_item_set is not None and len(energy_item_set) > 0: |
|
| 314 | for energy_item_id in energy_item_set: |
|
| 315 | reporting[energy_item_id] = dict() |
|
| 316 | reporting[energy_item_id]['timestamps'] = list() |
|
| 317 | reporting[energy_item_id]['values'] = list() |
|
| 318 | reporting[energy_item_id]['subtotal'] = Decimal(0.0) |
|
| 319 | reporting[energy_item_id]['toppeak'] = Decimal(0.0) |
|
| 320 | reporting[energy_item_id]['onpeak'] = Decimal(0.0) |
|
| 321 | reporting[energy_item_id]['midpeak'] = Decimal(0.0) |
|
| 322 | reporting[energy_item_id]['offpeak'] = Decimal(0.0) |
|
| 323 | ||
| 324 | cursor_energy.execute(" SELECT start_datetime_utc, actual_value " |
|
| 325 | " FROM tbl_space_input_item_hourly " |
|
| 326 | " WHERE space_id = %s " |
|
| 327 | " AND energy_item_id = %s " |
|
| 328 | " AND start_datetime_utc >= %s " |
|
| 329 | " AND start_datetime_utc < %s " |
|
| 330 | " ORDER BY start_datetime_utc ", |
|
| 331 | (space['id'], |
|
| 332 | energy_item_id, |
|
| 333 | reporting_start_datetime_utc, |
|
| 334 | reporting_end_datetime_utc)) |
|
| 335 | rows_space_hourly = cursor_energy.fetchall() |
|
| 336 | ||
| 337 | rows_space_periodically = utilities.aggregate_hourly_data_by_period(rows_space_hourly, |
|
| 338 | reporting_start_datetime_utc, |
|
| 339 | reporting_end_datetime_utc, |
|
| 340 | period_type) |
|
| 341 | for row_space_periodically in rows_space_periodically: |
|
| 342 | current_datetime_local = row_space_periodically[0].replace(tzinfo=timezone.utc) + \ |
|
| 343 | timedelta(minutes=timezone_offset) |
|
| 344 | if period_type == 'hourly': |
|
| 345 | current_datetime = current_datetime_local.strftime('%Y-%m-%dT%H:%M:%S') |
|
| 346 | elif period_type == 'daily': |
|
| 347 | current_datetime = current_datetime_local.strftime('%Y-%m-%d') |
|
| 348 | elif period_type == 'monthly': |
|
| 349 | current_datetime = current_datetime_local.strftime('%Y-%m') |
|
| 350 | elif period_type == 'yearly': |
|
| 351 | current_datetime = current_datetime_local.strftime('%Y') |
|
| 352 | ||
| 353 | actual_value = Decimal(0.0) if row_space_periodically[1] is None else row_space_periodically[1] |
|
| 354 | reporting[energy_item_id]['timestamps'].append(current_datetime) |
|
| 355 | reporting[energy_item_id]['values'].append(actual_value) |
|
| 356 | reporting[energy_item_id]['subtotal'] += actual_value |
|
| 357 | ||
| 358 | energy_category_tariff_dict = \ |
|
| 359 | utilities.get_energy_category_peak_types(space['cost_center_id'], |
|
| 360 | energy_item_dict[energy_item_id]['energy_category_id'], |
|
| 361 | reporting_start_datetime_utc, |
|
| 362 | reporting_end_datetime_utc) |
|
| 363 | for row in rows_space_hourly: |
|
| 364 | peak_type = energy_category_tariff_dict.get(row[0], None) |
|
| 365 | if peak_type == 'toppeak': |
|
| 366 | reporting[energy_item_id]['toppeak'] += row[1] |
|
| 367 | elif peak_type == 'onpeak': |
|
| 368 | reporting[energy_item_id]['onpeak'] += row[1] |
|
| 369 | elif peak_type == 'midpeak': |
|
| 370 | reporting[energy_item_id]['midpeak'] += row[1] |
|
| 371 | elif peak_type == 'offpeak': |
|
| 372 | reporting[energy_item_id]['offpeak'] += row[1] |
|
| 373 | ||
| 374 | ################################################################################################################ |
|
| 375 | # Step 9: query tariff data |
|
| @@ 309-367 (lines=59) @@ | ||
| 306 | # Step 8: query reporting period energy cost |
|
| 307 | ################################################################################################################ |
|
| 308 | reporting = dict() |
|
| 309 | if energy_category_set is not None and len(energy_category_set) > 0: |
|
| 310 | for energy_category_id in energy_category_set: |
|
| 311 | reporting[energy_category_id] = dict() |
|
| 312 | reporting[energy_category_id]['timestamps'] = list() |
|
| 313 | reporting[energy_category_id]['values'] = list() |
|
| 314 | reporting[energy_category_id]['subtotal'] = Decimal(0.0) |
|
| 315 | reporting[energy_category_id]['toppeak'] = Decimal(0.0) |
|
| 316 | reporting[energy_category_id]['onpeak'] = Decimal(0.0) |
|
| 317 | reporting[energy_category_id]['midpeak'] = Decimal(0.0) |
|
| 318 | reporting[energy_category_id]['offpeak'] = Decimal(0.0) |
|
| 319 | ||
| 320 | cursor_energy.execute(" SELECT start_datetime_utc, actual_value " |
|
| 321 | " FROM tbl_space_input_category_hourly " |
|
| 322 | " WHERE space_id = %s " |
|
| 323 | " AND energy_category_id = %s " |
|
| 324 | " AND start_datetime_utc >= %s " |
|
| 325 | " AND start_datetime_utc < %s " |
|
| 326 | " ORDER BY start_datetime_utc ", |
|
| 327 | (space['id'], |
|
| 328 | energy_category_id, |
|
| 329 | reporting_start_datetime_utc, |
|
| 330 | reporting_end_datetime_utc)) |
|
| 331 | rows_space_hourly = cursor_energy.fetchall() |
|
| 332 | ||
| 333 | rows_space_periodically = utilities.aggregate_hourly_data_by_period(rows_space_hourly, |
|
| 334 | reporting_start_datetime_utc, |
|
| 335 | reporting_end_datetime_utc, |
|
| 336 | period_type) |
|
| 337 | for row_space_periodically in rows_space_periodically: |
|
| 338 | current_datetime_local = row_space_periodically[0].replace(tzinfo=timezone.utc) + \ |
|
| 339 | timedelta(minutes=timezone_offset) |
|
| 340 | if period_type == 'hourly': |
|
| 341 | current_datetime = current_datetime_local.strftime('%Y-%m-%dT%H:%M:%S') |
|
| 342 | elif period_type == 'daily': |
|
| 343 | current_datetime = current_datetime_local.strftime('%Y-%m-%d') |
|
| 344 | elif period_type == 'monthly': |
|
| 345 | current_datetime = current_datetime_local.strftime('%Y-%m') |
|
| 346 | elif period_type == 'yearly': |
|
| 347 | current_datetime = current_datetime_local.strftime('%Y') |
|
| 348 | ||
| 349 | actual_value = Decimal(0.0) if row_space_periodically[1] is None else row_space_periodically[1] |
|
| 350 | reporting[energy_category_id]['timestamps'].append(current_datetime) |
|
| 351 | reporting[energy_category_id]['values'].append(actual_value) |
|
| 352 | reporting[energy_category_id]['subtotal'] += actual_value |
|
| 353 | ||
| 354 | energy_category_tariff_dict = utilities.get_energy_category_peak_types(space['cost_center_id'], |
|
| 355 | energy_category_id, |
|
| 356 | reporting_start_datetime_utc, |
|
| 357 | reporting_end_datetime_utc) |
|
| 358 | for row in rows_space_hourly: |
|
| 359 | peak_type = energy_category_tariff_dict.get(row[0], None) |
|
| 360 | if peak_type == 'toppeak': |
|
| 361 | reporting[energy_category_id]['toppeak'] += row[1] |
|
| 362 | elif peak_type == 'onpeak': |
|
| 363 | reporting[energy_category_id]['onpeak'] += row[1] |
|
| 364 | elif peak_type == 'midpeak': |
|
| 365 | reporting[energy_category_id]['midpeak'] += row[1] |
|
| 366 | elif peak_type == 'offpeak': |
|
| 367 | reporting[energy_category_id]['offpeak'] += row[1] |
|
| 368 | ||
| 369 | ################################################################################################################ |
|
| 370 | # Step 9: query tariff data |
|
| @@ 478-537 (lines=60) @@ | ||
| 475 | # Step 10: query reporting period energy cost |
|
| 476 | ################################################################################################################ |
|
| 477 | reporting_cost = dict() |
|
| 478 | if energy_category_set is not None and len(energy_category_set) > 0: |
|
| 479 | for energy_category_id in energy_category_set: |
|
| 480 | ||
| 481 | reporting_cost[energy_category_id] = dict() |
|
| 482 | reporting_cost[energy_category_id]['timestamps'] = list() |
|
| 483 | reporting_cost[energy_category_id]['values'] = list() |
|
| 484 | reporting_cost[energy_category_id]['subtotal'] = Decimal(0.0) |
|
| 485 | reporting_cost[energy_category_id]['toppeak'] = Decimal(0.0) |
|
| 486 | reporting_cost[energy_category_id]['onpeak'] = Decimal(0.0) |
|
| 487 | reporting_cost[energy_category_id]['midpeak'] = Decimal(0.0) |
|
| 488 | reporting_cost[energy_category_id]['offpeak'] = Decimal(0.0) |
|
| 489 | ||
| 490 | cursor_billing.execute(" SELECT start_datetime_utc, actual_value " |
|
| 491 | " FROM tbl_space_input_category_hourly " |
|
| 492 | " WHERE space_id = %s " |
|
| 493 | " AND energy_category_id = %s " |
|
| 494 | " AND start_datetime_utc >= %s " |
|
| 495 | " AND start_datetime_utc < %s " |
|
| 496 | " ORDER BY start_datetime_utc ", |
|
| 497 | (space['id'], |
|
| 498 | energy_category_id, |
|
| 499 | reporting_start_datetime_utc, |
|
| 500 | reporting_end_datetime_utc)) |
|
| 501 | rows_space_hourly = cursor_billing.fetchall() |
|
| 502 | ||
| 503 | rows_space_periodically = utilities.aggregate_hourly_data_by_period(rows_space_hourly, |
|
| 504 | reporting_start_datetime_utc, |
|
| 505 | reporting_end_datetime_utc, |
|
| 506 | period_type) |
|
| 507 | for row_space_periodically in rows_space_periodically: |
|
| 508 | current_datetime_local = row_space_periodically[0].replace(tzinfo=timezone.utc) + \ |
|
| 509 | timedelta(minutes=timezone_offset) |
|
| 510 | if period_type == 'hourly': |
|
| 511 | current_datetime = current_datetime_local.strftime('%Y-%m-%dT%H:%M:%S') |
|
| 512 | elif period_type == 'daily': |
|
| 513 | current_datetime = current_datetime_local.strftime('%Y-%m-%d') |
|
| 514 | elif period_type == 'monthly': |
|
| 515 | current_datetime = current_datetime_local.strftime('%Y-%m') |
|
| 516 | elif period_type == 'yearly': |
|
| 517 | current_datetime = current_datetime_local.strftime('%Y') |
|
| 518 | ||
| 519 | actual_value = Decimal(0.0) if row_space_periodically[1] is None else row_space_periodically[1] |
|
| 520 | reporting_cost[energy_category_id]['timestamps'].append(current_datetime) |
|
| 521 | reporting_cost[energy_category_id]['values'].append(actual_value) |
|
| 522 | reporting_cost[energy_category_id]['subtotal'] += actual_value |
|
| 523 | ||
| 524 | energy_category_tariff_dict = utilities.get_energy_category_peak_types(space['cost_center_id'], |
|
| 525 | energy_category_id, |
|
| 526 | reporting_start_datetime_utc, |
|
| 527 | reporting_end_datetime_utc) |
|
| 528 | for row in rows_space_hourly: |
|
| 529 | peak_type = energy_category_tariff_dict.get(row[0], None) |
|
| 530 | if peak_type == 'toppeak': |
|
| 531 | reporting_cost[energy_category_id]['toppeak'] += row[1] |
|
| 532 | elif peak_type == 'onpeak': |
|
| 533 | reporting_cost[energy_category_id]['onpeak'] += row[1] |
|
| 534 | elif peak_type == 'midpeak': |
|
| 535 | reporting_cost[energy_category_id]['midpeak'] += row[1] |
|
| 536 | elif peak_type == 'offpeak': |
|
| 537 | reporting_cost[energy_category_id]['offpeak'] += row[1] |
|
| 538 | ################################################################################################################ |
|
| 539 | # Step 11: query tariff data |
|
| 540 | ################################################################################################################ |
|