added maximum load to tenantbatch report

Merge branch 'develop'
pull/77/MERGE
13621160019@163.com 2021-10-13 22:00:34 +08:00
commit 5a47db9456
4 changed files with 78 additions and 25 deletions

View File

@ -1,8 +1,11 @@
import base64 import base64
import uuid import uuid
import os import os
from openpyxl.styles import PatternFill, Border, Side, Alignment, Font from openpyxl.styles import PatternFill, Border, Side, Alignment, Font
from openpyxl.drawing.image import Image from openpyxl.drawing.image import Image
from openpyxl.utils import column_index_from_string, get_column_letter
from openpyxl import Workbook from openpyxl import Workbook
@ -129,30 +132,38 @@ def generate_excel(report, space_name, reporting_start_datetime_local, reporting
ws['C5'] = reporting_end_datetime_local ws['C5'] = reporting_end_datetime_local
# Title # Title
ws['B6'].border = f_border ws['B7'].border = f_border
ws['B6'].font = name_font ws['B7'].font = name_font
ws['B6'].alignment = c_c_alignment ws['B7'].alignment = c_c_alignment
ws['B6'].fill = table_fill ws['B7'].fill = table_fill
ws['B6'] = 'Name' ws['B7'] = 'Name'
ws['C6'].border = f_border ws['C7'].border = f_border
ws['C6'].alignment = c_c_alignment ws['C7'].alignment = c_c_alignment
ws['C6'].font = name_font ws['C7'].font = name_font
ws['C6'].fill = table_fill ws['C7'].fill = table_fill
ws['C6'] = 'Space' ws['C7'] = 'Space'
ca_len = len(report['energycategories']) ca_len = len(report['energycategories'])
for i in range(0, ca_len): for i in range(0, ca_len):
col = chr(ord('D') + i) col = get_column_letter(column_index_from_string('D') + i * 2)
ws[col + '6'].fill = table_fill ws[col + '7'].fill = table_fill
ws[col + '6'].font = name_font ws[col + '7'].font = name_font
ws[col + '6'].alignment = c_c_alignment ws[col + '7'].alignment = c_c_alignment
ws[col + '6'] = report['energycategories'][i]['name'] + \ ws[col + '7'] = report['energycategories'][i]['name'] + \
" (" + report['energycategories'][i]['unit_of_measure'] + ")" " (" + report['energycategories'][i]['unit_of_measure'] + ")"
ws[col + '6'].border = f_border ws[col + '7'].border = f_border
current_row_number = 7 col = get_column_letter(column_index_from_string(col) + 1)
ws[col + '7'].fill = table_fill
ws[col + '7'].font = name_font
ws[col + '7'].alignment = c_c_alignment
ws[col + '7'] = report['energycategories'][i]['name'] + \
" Maximum Load (" + report['energycategories'][i]['unit_of_measure'] + ")"
ws[col + '7'].border = f_border
current_row_number = 8
for i in range(0, len(report['tenants'])): for i in range(0, len(report['tenants'])):
ws['B' + str(current_row_number)].font = title_font ws['B' + str(current_row_number)].font = title_font
@ -167,12 +178,17 @@ def generate_excel(report, space_name, reporting_start_datetime_local, reporting
ca_len = len(report['tenants'][i]['values']) ca_len = len(report['tenants'][i]['values'])
for j in range(0, ca_len): for j in range(0, ca_len):
col = chr(ord('D') + j) col = get_column_letter(column_index_from_string('D') + j * 2)
ws[col + str(current_row_number)].font = data_font ws[col + str(current_row_number)].font = title_font
ws[col + str(current_row_number)].border = f_border ws[col + str(current_row_number)].border = f_border
ws[col + str(current_row_number)].alignment = c_c_alignment ws[col + str(current_row_number)].alignment = c_c_alignment
ws[col + str(current_row_number)] = report['tenants'][i]['values'][j] ws[col + str(current_row_number)] = report['tenants'][i]['values'][j]
col = get_column_letter(column_index_from_string(col) + 1)
ws[col + str(current_row_number)].font = title_font
ws[col + str(current_row_number)].border = f_border
ws[col + str(current_row_number)].alignment = c_c_alignment
ws[col + str(current_row_number)] = report['tenants'][i]['maximum'][j]
current_row_number += 1 current_row_number += 1
filename = str(uuid.uuid4()) + '.xlsx' filename = str(uuid.uuid4()) + '.xlsx'

View File

@ -137,7 +137,8 @@ class Reporting:
"space_name": row['space_name'], "space_name": row['space_name'],
"cost_center_name": row['cost_center_name'], "cost_center_name": row['cost_center_name'],
"description": row['description'], "description": row['description'],
"values": list()} "values": list(),
"maximum": list()}
################################################################################################################ ################################################################################################################
# Step 4: query energy categories # Step 4: query energy categories
@ -186,8 +187,7 @@ class Reporting:
# Step 5: query reporting period energy input # Step 5: query reporting period energy input
################################################################################################################ ################################################################################################################
for tenant_id in tenant_dict: for tenant_id in tenant_dict:
cursor_energy_db.execute(" SELECT energy_category_id, SUM(actual_value), MAX(actual_value)"
cursor_energy_db.execute(" SELECT energy_category_id, SUM(actual_value) "
" FROM tbl_tenant_input_category_hourly " " FROM tbl_tenant_input_category_hourly "
" WHERE tenant_id = %s " " WHERE tenant_id = %s "
" AND start_datetime_utc >= %s " " AND start_datetime_utc >= %s "
@ -199,11 +199,14 @@ class Reporting:
rows_tenant_energy = cursor_energy_db.fetchall() rows_tenant_energy = cursor_energy_db.fetchall()
for energy_category in energy_category_list: for energy_category in energy_category_list:
subtotal = Decimal(0.0) subtotal = Decimal(0.0)
maximum = Decimal(0.0)
for row_tenant_energy in rows_tenant_energy: for row_tenant_energy in rows_tenant_energy:
if energy_category['id'] == row_tenant_energy[0]: if energy_category['id'] == row_tenant_energy[0]:
subtotal = row_tenant_energy[1] subtotal = row_tenant_energy[1]
maximum = row_tenant_energy[2] * Decimal(60 / config.minutes_to_count)
break break
tenant_dict[tenant_id]['values'].append(subtotal) tenant_dict[tenant_id]['values'].append(subtotal)
tenant_dict[tenant_id]['maximum'].append(maximum)
if cursor_system_db: if cursor_system_db:
cursor_system_db.close() cursor_system_db.close()
@ -227,6 +230,7 @@ class Reporting:
"cost_center_name": tenant['cost_center_name'], "cost_center_name": tenant['cost_center_name'],
"description": tenant['description'], "description": tenant['description'],
"values": tenant['values'], "values": tenant['values'],
"maximum": tenant['maximum'],
}) })
result = {'tenants': tenant_list, result = {'tenants': tenant_list,

25
web/README.md vendored
View File

@ -189,3 +189,28 @@ tar xzf myems-web.tar.gz
sudo rm -r /var/www/web sudo rm -r /var/www/web
sudo mv build /var/www/web sudo mv build /var/www/web
``` ```
* avoid 404 error while refreshing pages
```bash
cd /var/www/web
sudo vi .htaccess
```
Add a IfModule as below:
```bash
IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
```
Configure rewrite.load
```bash
cd /etc/apache2/mods-enabled/
sudo vi rewrite.load
```
Add content as below
```bash
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
```

View File

@ -179,7 +179,10 @@ const TenantBatch = ({ setRedirect, setRedirectUrl, t }) => {
detailed_value['space'] = currentTenant['space_name']; detailed_value['space'] = currentTenant['space_name'];
detailed_value['costcenter'] = currentTenant['cost_center_name']; detailed_value['costcenter'] = currentTenant['cost_center_name'];
currentTenant['values'].forEach((currentValue, energyCategoryIndex) => { currentTenant['values'].forEach((currentValue, energyCategoryIndex) => {
detailed_value['a' + energyCategoryIndex] = currentValue.toFixed(2); detailed_value['a' + 2 * energyCategoryIndex] = currentValue.toFixed(2);
});
currentTenant['maximum'].forEach((currentValue, energyCategoryIndex) => {
detailed_value['a' + (2 * energyCategoryIndex + 1)] = currentValue.toFixed(2);
}); });
tenants.push(detailed_value); tenants.push(detailed_value);
}); });
@ -200,13 +203,18 @@ const TenantBatch = ({ setRedirect, setRedirectUrl, t }) => {
}); });
json['energycategories'].forEach((currentValue, index) => { json['energycategories'].forEach((currentValue, index) => {
detailed_column_list.push({ detailed_column_list.push({
dataField: 'a' + index, dataField: 'a' + 2 * index,
text: currentValue['name'] + ' (' + currentValue['unit_of_measure'] + ')', text: currentValue['name'] + ' (' + currentValue['unit_of_measure'] + ')',
sort: true sort: true
},{
dataField: 'a' + (2 * index + 1),
text: currentValue['name'] + ' ' + t('Maximum Load') + ' (' + currentValue['unit_of_measure'] + ')',
sort: true
}) })
}); });
setDetailedDataTableColumns(detailed_column_list);
setDetailedDataTableColumns(detailed_column_list);
console.log(detailed_column_list);
setExcelBytesBase64(json['excel_bytes_base64']); setExcelBytesBase64(json['excel_bytes_base64']);
// enable submit button // enable submit button