chellow 1724751676.0.0__py3-none-any.whl → 1724868336.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of chellow might be problematic. Click here for more details.
- chellow/gas/views.py +13 -4
- chellow/reports/report_59.py +56 -114
- chellow/reports/report_ecoes_comparison.py +8 -12
- chellow/templates/e/supply_eras.html +75 -75
- chellow/templates/g/batches.html +15 -4
- chellow/templates/site.html +0 -2
- {chellow-1724751676.0.0.dist-info → chellow-1724868336.0.0.dist-info}/METADATA +1 -1
- {chellow-1724751676.0.0.dist-info → chellow-1724868336.0.0.dist-info}/RECORD +9 -9
- {chellow-1724751676.0.0.dist-info → chellow-1724868336.0.0.dist-info}/WHEEL +0 -0
chellow/gas/views.py
CHANGED
|
@@ -17,7 +17,7 @@ from flask import (
|
|
|
17
17
|
request,
|
|
18
18
|
)
|
|
19
19
|
|
|
20
|
-
from sqlalchemy import false, select, text, true
|
|
20
|
+
from sqlalchemy import false, func, select, text, true
|
|
21
21
|
from sqlalchemy.orm import joinedload
|
|
22
22
|
|
|
23
23
|
|
|
@@ -352,9 +352,18 @@ def supply_edit_post(g_supply_id):
|
|
|
352
352
|
def batches_get():
|
|
353
353
|
g_contract_id = req_int("g_contract_id")
|
|
354
354
|
g_contract = GContract.get_by_id(g.sess, g_contract_id)
|
|
355
|
-
g_batches = (
|
|
356
|
-
|
|
357
|
-
|
|
355
|
+
g_batches = g.sess.execute(
|
|
356
|
+
select(
|
|
357
|
+
GBatch,
|
|
358
|
+
func.count(GBill.id),
|
|
359
|
+
func.coalesce(func.sum(GBill.net), 0),
|
|
360
|
+
func.coalesce(func.sum(GBill.vat), 0),
|
|
361
|
+
func.coalesce(func.sum(GBill.gross), 0),
|
|
362
|
+
func.coalesce(func.sum(GBill.kwh), 0),
|
|
363
|
+
)
|
|
364
|
+
.join(GBill, isouter=True)
|
|
365
|
+
.where(GBatch.g_contract == g_contract)
|
|
366
|
+
.group_by(GBatch.id)
|
|
358
367
|
.order_by(GBatch.reference.desc())
|
|
359
368
|
)
|
|
360
369
|
return render_template("batches.html", g_contract=g_contract, g_batches=g_batches)
|
chellow/reports/report_59.py
CHANGED
|
@@ -57,17 +57,7 @@ from chellow.views import chellow_redirect
|
|
|
57
57
|
CATEGORY_ORDER = {None: 0, "unmetered": 1, "nhh": 2, "amr": 3, "hh": 4}
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
def write_spreadsheet(
|
|
61
|
-
fl,
|
|
62
|
-
compressed,
|
|
63
|
-
site_rows,
|
|
64
|
-
supply_rows,
|
|
65
|
-
era_rows,
|
|
66
|
-
read_rows,
|
|
67
|
-
bill_check_site_rows,
|
|
68
|
-
bill_check_era_rows,
|
|
69
|
-
is_bill_check,
|
|
70
|
-
):
|
|
60
|
+
def write_spreadsheet(fl, compressed, site_rows, supply_rows, era_rows, read_rows):
|
|
71
61
|
fl.seek(0)
|
|
72
62
|
fl.truncate()
|
|
73
63
|
with odio.create_spreadsheet(fl, "1.2", compressed=compressed) as f:
|
|
@@ -75,9 +65,6 @@ def write_spreadsheet(
|
|
|
75
65
|
f.append_table("Supply Level", supply_rows)
|
|
76
66
|
f.append_table("Era Level", era_rows)
|
|
77
67
|
f.append_table("Normal Reads", read_rows)
|
|
78
|
-
if is_bill_check:
|
|
79
|
-
f.append_table("Bill Check Site", bill_check_site_rows)
|
|
80
|
-
f.append_table("Bill Check Era", bill_check_era_rows)
|
|
81
68
|
|
|
82
69
|
|
|
83
70
|
def make_bill_row(titles, bill):
|
|
@@ -627,8 +614,41 @@ def _process_site(
|
|
|
627
614
|
.scalars()
|
|
628
615
|
.all()
|
|
629
616
|
)
|
|
617
|
+
imp_supplier_contract = first_era.imp_supplier_contract
|
|
618
|
+
exp_supplier_contract = first_era.exp_supplier_contract
|
|
630
619
|
if len(bills) > 0:
|
|
631
|
-
|
|
620
|
+
era_vals = {
|
|
621
|
+
"creation-date": now,
|
|
622
|
+
"start-date": start_date,
|
|
623
|
+
"finish-date": finish_date,
|
|
624
|
+
"imp-mpan-core": last_era.imp_mpan_core,
|
|
625
|
+
"exp-mpan-core": last_era.exp_mpan_core,
|
|
626
|
+
"site-code": site.code,
|
|
627
|
+
"site-name": site.name,
|
|
628
|
+
"associated-site-codes": None,
|
|
629
|
+
"era-start-date": None,
|
|
630
|
+
"era-finish-date": None,
|
|
631
|
+
"imp-supplier-contract": (
|
|
632
|
+
None
|
|
633
|
+
if imp_supplier_contract is None
|
|
634
|
+
else imp_supplier_contract.name
|
|
635
|
+
),
|
|
636
|
+
"imp-non-actual-hhs": None,
|
|
637
|
+
"imp-non-actual-kwh": None,
|
|
638
|
+
"exp-supplier-contract": (
|
|
639
|
+
None
|
|
640
|
+
if exp_supplier_contract is None
|
|
641
|
+
else exp_supplier_contract.name
|
|
642
|
+
),
|
|
643
|
+
"exp-non-actual-hhs": None,
|
|
644
|
+
"exp-non-actual-kwh": None,
|
|
645
|
+
"metering-type": last_era.meter_category,
|
|
646
|
+
"source": last_era.supply.source.code,
|
|
647
|
+
"generator-type": None,
|
|
648
|
+
"supply-name": last_era.supply.name,
|
|
649
|
+
"msn": last_era.msn,
|
|
650
|
+
"pc": last_era.pc.code,
|
|
651
|
+
}
|
|
632
652
|
for name in (
|
|
633
653
|
"import-grid",
|
|
634
654
|
"export-grid",
|
|
@@ -641,48 +661,18 @@ def _process_site(
|
|
|
641
661
|
"used-3rd-party",
|
|
642
662
|
):
|
|
643
663
|
for sname in ("kwh", "net-gbp"):
|
|
644
|
-
|
|
664
|
+
era_vals[f"{name}-{sname}"] = 0
|
|
645
665
|
for suf in ("kwh", "net-gbp", "vat-gbp", "gross-gbp"):
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
_add_bills(
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
exp_supplier_contract = first_era.exp_supplier_contract
|
|
655
|
-
out = [
|
|
656
|
-
now,
|
|
657
|
-
last_era.imp_mpan_core,
|
|
658
|
-
(
|
|
659
|
-
None
|
|
660
|
-
if imp_supplier_contract is None
|
|
661
|
-
else imp_supplier_contract.name
|
|
662
|
-
),
|
|
663
|
-
last_era.exp_mpan_core,
|
|
664
|
-
(
|
|
665
|
-
None
|
|
666
|
-
if exp_supplier_contract is None
|
|
667
|
-
else exp_supplier_contract.name
|
|
668
|
-
),
|
|
669
|
-
None,
|
|
670
|
-
last_era.meter_category,
|
|
671
|
-
last_era.supply.source.code,
|
|
672
|
-
None,
|
|
673
|
-
last_era.supply.name,
|
|
674
|
-
last_era.msn,
|
|
675
|
-
last_era.pc.code,
|
|
676
|
-
site.code,
|
|
677
|
-
site.name,
|
|
678
|
-
None,
|
|
679
|
-
start_date,
|
|
680
|
-
finish_date,
|
|
681
|
-
] + [month_data[t] for t in summary_titles]
|
|
682
|
-
|
|
683
|
-
era_rows.append([make_val(v) for v in out])
|
|
666
|
+
era_vals[f"billed-import-{suf}"] = 0
|
|
667
|
+
era_vals[f"billed-import-supplier-{suf}"] = 0
|
|
668
|
+
era_vals[f"billed-import-dc-{suf}"] = 0
|
|
669
|
+
era_vals[f"billed-import-mop-{suf}"] = 0
|
|
670
|
+
|
|
671
|
+
_add_bills(era_vals, bills, chunk_start, chunk_finish)
|
|
672
|
+
|
|
673
|
+
era_rows.append([make_val(vals.get(t)) for t in era_titles])
|
|
684
674
|
for t in summary_titles:
|
|
685
|
-
v =
|
|
675
|
+
v = era_vals.get(t)
|
|
686
676
|
if v is not None:
|
|
687
677
|
site_data[t] += v
|
|
688
678
|
|
|
@@ -746,9 +736,6 @@ def content(
|
|
|
746
736
|
supply_rows = []
|
|
747
737
|
era_rows = []
|
|
748
738
|
normal_read_rows = []
|
|
749
|
-
bill_check_site_rows = []
|
|
750
|
-
bill_check_supply_rows = []
|
|
751
|
-
bill_check_era_rows = []
|
|
752
739
|
|
|
753
740
|
try:
|
|
754
741
|
with RSession() as rsess:
|
|
@@ -850,6 +837,7 @@ def content(
|
|
|
850
837
|
)
|
|
851
838
|
|
|
852
839
|
by_hh = scenario_props.get("by_hh", False)
|
|
840
|
+
is_bill_check = scenario_props.get("is_bill_check", False)
|
|
853
841
|
|
|
854
842
|
era_header_titles = [
|
|
855
843
|
"creation-date",
|
|
@@ -1009,14 +997,15 @@ def content(
|
|
|
1009
997
|
supply_titles = supply_header_titles + summary_titles
|
|
1010
998
|
supply_rows.append(supply_titles)
|
|
1011
999
|
era_rows.append(era_titles)
|
|
1012
|
-
bill_check_site_rows.append(site_header_titles + summary_titles)
|
|
1013
|
-
bill_check_era_rows.append(era_titles)
|
|
1014
1000
|
|
|
1015
1001
|
normal_reads = set()
|
|
1016
1002
|
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1003
|
+
if is_bill_check:
|
|
1004
|
+
data_source_bill = Object()
|
|
1005
|
+
data_source_bill.start_date = start_date
|
|
1006
|
+
data_source_bill.finish_date = finish_date
|
|
1007
|
+
else:
|
|
1008
|
+
data_source_bill = None
|
|
1020
1009
|
|
|
1021
1010
|
for site in rsess.scalars(sites):
|
|
1022
1011
|
if by_hh:
|
|
@@ -1046,28 +1035,8 @@ def content(
|
|
|
1046
1035
|
supply_titles,
|
|
1047
1036
|
supply_rows,
|
|
1048
1037
|
site_rows,
|
|
1049
|
-
|
|
1038
|
+
data_source_bill,
|
|
1050
1039
|
)
|
|
1051
|
-
if is_bill_check:
|
|
1052
|
-
_process_site(
|
|
1053
|
-
rsess,
|
|
1054
|
-
report_context,
|
|
1055
|
-
forecast_from,
|
|
1056
|
-
start,
|
|
1057
|
-
finish,
|
|
1058
|
-
site,
|
|
1059
|
-
scenario_props,
|
|
1060
|
-
supply_ids,
|
|
1061
|
-
now,
|
|
1062
|
-
summary_titles,
|
|
1063
|
-
title_dict,
|
|
1064
|
-
era_titles,
|
|
1065
|
-
bill_check_era_rows,
|
|
1066
|
-
supply_titles,
|
|
1067
|
-
bill_check_supply_rows,
|
|
1068
|
-
bill_check_site_rows,
|
|
1069
|
-
data_source_bill,
|
|
1070
|
-
)
|
|
1071
1040
|
except BadRequest as e:
|
|
1072
1041
|
raise BadRequest(f"Site Code {site.code}: {e.description}")
|
|
1073
1042
|
|
|
@@ -1078,31 +1047,14 @@ def content(
|
|
|
1078
1047
|
|
|
1079
1048
|
rsess.rollback() # Evict from cache
|
|
1080
1049
|
write_spreadsheet(
|
|
1081
|
-
rf,
|
|
1082
|
-
compression,
|
|
1083
|
-
site_rows,
|
|
1084
|
-
supply_rows,
|
|
1085
|
-
era_rows,
|
|
1086
|
-
normal_read_rows,
|
|
1087
|
-
bill_check_site_rows,
|
|
1088
|
-
bill_check_era_rows,
|
|
1089
|
-
is_bill_check,
|
|
1050
|
+
rf, compression, site_rows, supply_rows, era_rows, normal_read_rows
|
|
1090
1051
|
)
|
|
1091
1052
|
except BadRequest as e:
|
|
1092
1053
|
msg = e.description + traceback.format_exc()
|
|
1093
1054
|
sys.stderr.write(msg + "\n")
|
|
1094
1055
|
site_rows.append(["Problem " + msg])
|
|
1095
1056
|
write_spreadsheet(
|
|
1096
|
-
rf,
|
|
1097
|
-
compression,
|
|
1098
|
-
site_rows,
|
|
1099
|
-
supply_rows,
|
|
1100
|
-
era_rows,
|
|
1101
|
-
normal_read_rows,
|
|
1102
|
-
bill_check_site_rows,
|
|
1103
|
-
bill_check_supply_rows,
|
|
1104
|
-
bill_check_era_rows,
|
|
1105
|
-
is_bill_check,
|
|
1057
|
+
rf, compression, site_rows, supply_rows, era_rows, normal_read_rows
|
|
1106
1058
|
)
|
|
1107
1059
|
except BaseException:
|
|
1108
1060
|
msg = traceback.format_exc()
|
|
@@ -1114,17 +1066,7 @@ def content(
|
|
|
1114
1066
|
ef.write(msg + "\n")
|
|
1115
1067
|
ef.close()
|
|
1116
1068
|
else:
|
|
1117
|
-
write_spreadsheet(
|
|
1118
|
-
rf,
|
|
1119
|
-
compression,
|
|
1120
|
-
site_rows,
|
|
1121
|
-
era_rows,
|
|
1122
|
-
normal_read_rows,
|
|
1123
|
-
bill_check_site_rows,
|
|
1124
|
-
bill_check_supply_rows,
|
|
1125
|
-
bill_check_era_rows,
|
|
1126
|
-
is_bill_check,
|
|
1127
|
-
)
|
|
1069
|
+
write_spreadsheet(rf, compression, site_rows, era_rows, normal_read_rows)
|
|
1128
1070
|
finally:
|
|
1129
1071
|
if rf is not None:
|
|
1130
1072
|
rf.close()
|
|
@@ -225,9 +225,12 @@ def _process(
|
|
|
225
225
|
ecoes_row["mpan_spaces"] = mpan_spaces
|
|
226
226
|
if mpan_spaces in ecoes_mpans:
|
|
227
227
|
prev_row = ecoes_mpans[mpan_spaces]
|
|
228
|
-
|
|
228
|
+
msn = ecoes_row["msn"]
|
|
229
|
+
if len(msn) > 0:
|
|
230
|
+
prev_msns = prev_row["msn"].split(",")
|
|
231
|
+
prev_msns.append(msn)
|
|
232
|
+
prev_row["msn"] = ", ".join(prev_msns)
|
|
229
233
|
else:
|
|
230
|
-
ecoes_row["meter_count"] = 1
|
|
231
234
|
ecoes_mpans[mpan_spaces] = ecoes_row
|
|
232
235
|
|
|
233
236
|
titles = (
|
|
@@ -295,15 +298,6 @@ def _process(
|
|
|
295
298
|
ecoes_disconnected = ecoes_es == ""
|
|
296
299
|
current_chell = mpan_spaces in mpans
|
|
297
300
|
|
|
298
|
-
if ecoes["meter_count"] > 1:
|
|
299
|
-
problem += (
|
|
300
|
-
f"There are {ecoes['meter_count']} meters associated with this MPAN "
|
|
301
|
-
f"core in ECOES, but Chellow only supports one meter per supply at the "
|
|
302
|
-
f"moment. If there really should be multiple meters for this supply, "
|
|
303
|
-
f"let me know and I'll add support for it in Chellow."
|
|
304
|
-
)
|
|
305
|
-
ignore = False
|
|
306
|
-
|
|
307
301
|
if ecoes_disconnected and current_chell:
|
|
308
302
|
problem += "Disconnected in ECOES, but current in Chellow. "
|
|
309
303
|
ignore = False
|
|
@@ -471,7 +465,9 @@ def _process(
|
|
|
471
465
|
|
|
472
466
|
chellow_msn = era.msn
|
|
473
467
|
|
|
474
|
-
if chellow_msn.split(",")
|
|
468
|
+
if set([m.strip() for m in chellow_msn.split(",")]) != set(
|
|
469
|
+
[m.strip() for m in ecoes["msn"].split(",")]
|
|
470
|
+
):
|
|
475
471
|
problem += "The meter serial numbers don't match. "
|
|
476
472
|
diffs.append("msn")
|
|
477
473
|
if mpan_spaces not in ignore_mpan_cores_msn:
|
|
@@ -243,114 +243,114 @@
|
|
|
243
243
|
{% set bill = bill_dict['bill'] %}
|
|
244
244
|
{% set rows_high = bill_dict['rows_high'] %}
|
|
245
245
|
{% if bill_dict.first_collapsible %}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
246
|
+
<tr style="background-color: silver; cursor: pointer;">
|
|
247
|
+
<td style="text-decoration: none; padding-top: 0px; padding-bottom: 0px; font-size: x-small;"
|
|
248
|
+
colspan="{{9 + imp_bills['inner_headers']|length * 4 + imp_bills['num_outer_cols'] * 5}}"
|
|
249
|
+
class="expander_{{bill_dict.collapse_id}}"
|
|
250
|
+
onClick="expandBills({{bill_dict.collapse_id}})">
|
|
251
|
+
+
|
|
252
|
+
</td>
|
|
253
|
+
<td style="text-decoration: none; display: none; padding-top: 0px; padding-bottom: 0px; font-size: x-small;"
|
|
254
|
+
colspan="{{9 + imp_bills['inner_headers']|length * 4 + imp_bills['num_outer_cols'] * 5}}"
|
|
255
|
+
class="collapser_{{bill_dict.collapse_id}}"
|
|
256
|
+
onClick="collapseBills({{bill_dict.collapse_id}})">
|
|
257
|
+
-
|
|
258
|
+
</td>
|
|
259
|
+
</tr>
|
|
260
260
|
{% endif %}
|
|
261
261
|
|
|
262
262
|
<tr {% if bill_dict.collapsible %}
|
|
263
263
|
class="collapsible_{{bill_dict.collapse_id}}"
|
|
264
264
|
style="display: none; background-color: silver;"
|
|
265
265
|
{% endif %}>
|
|
266
|
-
|
|
266
|
+
<td rowspan="{{ rows_high }}">
|
|
267
267
|
<a href="/e/supplier_bills/{{bill.id}}">View</a>
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
268
|
+
</td>
|
|
269
|
+
<td rowspan="{{ rows_high }}">
|
|
270
|
+
<label title="{{bill.start_date|hh_format}}">{{bill.start_date|hh_format('date')}}</label>
|
|
271
|
+
</td>
|
|
272
|
+
<td rowspan="{{ rows_high }}">
|
|
273
|
+
<label title="{{ bill.finish_date|hh_format }}">{{ bill.finish_date|hh_format('date') }}</label>
|
|
274
|
+
</td>
|
|
275
|
+
<td rowspan="{{ rows_high }}">
|
|
276
|
+
<a href="/e/supplier_batches/{{bill.batch.id}}">{{bill.batch.reference}}</a>
|
|
277
|
+
</td>
|
|
278
|
+
<td rowspan="{{ rows_high }}">{{ bill.reference }}</td>
|
|
279
|
+
<td rowspan="{{ rows_high }}">{{ bill.kwh }}</td>
|
|
280
|
+
<td rowspan="{{ rows_high }}">{{ bill.net }}</td>
|
|
281
|
+
<td rowspan="{{ rows_high }}">{{ bill.vat }}</td>
|
|
282
|
+
<td rowspan="{{ rows_high }}">
|
|
283
|
+
<a href="/bill_types/{{bill.bill_type.id}}"
|
|
284
284
|
title="{{bill.bill_type.description}}">{{bill.bill_type.code}}</a>
|
|
285
|
-
|
|
286
|
-
|
|
285
|
+
</td>
|
|
286
|
+
{% for read_row in read_rows %}
|
|
287
287
|
{% if not loop.first %}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
288
|
+
<tr {% if bill_dict.collapsible %}
|
|
289
|
+
class="collapsible_{{bill_dict.collapse_id}}"
|
|
290
|
+
style="display: none; background-color: silver;"
|
|
291
|
+
{% endif %}>
|
|
292
292
|
{% endif %}
|
|
293
293
|
{% for read in read_row['inner_reads'] %}
|
|
294
|
-
|
|
294
|
+
<td style="border-right: none;">
|
|
295
295
|
{% if read %}
|
|
296
|
-
|
|
296
|
+
<label title="{{ read.previous_date|hh_format }} {{ read.msn }}">{{ read.previous_value }}</label>
|
|
297
297
|
{% endif %}
|
|
298
|
-
|
|
299
|
-
|
|
298
|
+
</td>
|
|
299
|
+
<td style="border-left: none; text-align: right;">
|
|
300
300
|
{% if read %}
|
|
301
|
-
|
|
301
|
+
<a href="/e/read_types/{{read.previous_type.id}}" title="{{read.previous_type.description}}">{{ read.previous_type.code }}</a>
|
|
302
302
|
{% endif %}
|
|
303
|
-
|
|
304
|
-
|
|
303
|
+
</td>
|
|
304
|
+
<td style="border-right: none;">
|
|
305
305
|
{% if read %}
|
|
306
|
-
|
|
306
|
+
<label title="{{ read.present_date|hh_format }} {{ read.msn }}">{{ read.present_value }}</label>
|
|
307
307
|
{% endif %}
|
|
308
|
-
|
|
309
|
-
|
|
308
|
+
</td>
|
|
309
|
+
<td style="border-left: none; text-align: right;">
|
|
310
310
|
{% if read %}
|
|
311
|
-
|
|
311
|
+
<a href="/e/read_types/{{read.present_type.id}}" title="{{read.present_type.description}}">{{ read.present_type.code }}</a>
|
|
312
312
|
{% endif %}
|
|
313
|
-
|
|
313
|
+
</td>
|
|
314
314
|
{% endfor %}
|
|
315
315
|
{% for read in read_row['outer_reads'] %}
|
|
316
|
-
|
|
316
|
+
<td>
|
|
317
317
|
{% if read %}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
318
|
+
{% if read.tpr %}
|
|
319
|
+
<a href="/e/tprs/{{read.tpr.id}}">{{read.tpr.code}}</a>
|
|
320
|
+
{% else %}
|
|
321
|
+
MD
|
|
322
|
+
{% endif %}
|
|
323
323
|
{% endif %}
|
|
324
|
-
|
|
325
|
-
|
|
324
|
+
</td>
|
|
325
|
+
<td style="border-right: none;">
|
|
326
326
|
{% if read %}
|
|
327
|
-
|
|
327
|
+
<label title="{{read.previous_date|hh_format}} {{read.msn}}">{{read.previous_value}}</label>
|
|
328
328
|
{% endif %}
|
|
329
|
-
|
|
330
|
-
|
|
329
|
+
</td>
|
|
330
|
+
<td style="border-left: none; text-align: right;">
|
|
331
331
|
{% if read %}
|
|
332
|
-
{{read.previous_type.code}}
|
|
332
|
+
<a href="/e/read_types/{{read.previous_type.id}}" title="{{read.previous_type.description}}">{{read.previous_type.code}}</a>
|
|
333
333
|
{% endif %}
|
|
334
|
-
|
|
335
|
-
|
|
334
|
+
</td>
|
|
335
|
+
<td style="border-right: none;">
|
|
336
336
|
{% if read %}
|
|
337
|
-
|
|
337
|
+
<label title="{{read.present_date|hh_format}} {{read.msn}}">{{read.present_value}}</label>
|
|
338
338
|
{% endif %}
|
|
339
|
-
|
|
340
|
-
|
|
339
|
+
</td>
|
|
340
|
+
<td style="border-left: none; text-align: right;">
|
|
341
341
|
{% if read %}
|
|
342
|
-
{{read.present_type.code}}
|
|
342
|
+
<a href="/e/read_types/{{read.present_type.id}}" title="{{read.present_type.description}}">{{read.present_type.code}}</a>
|
|
343
343
|
{% endif %}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
344
|
+
</td>
|
|
345
|
+
{% if not loop.first %}
|
|
346
|
+
</tr>
|
|
347
|
+
{% endif %}
|
|
348
|
+
{% endfor %}
|
|
349
|
+
{% endfor %}
|
|
350
350
|
</tr>
|
|
351
|
-
|
|
351
|
+
{% endfor %}
|
|
352
352
|
</tbody>
|
|
353
|
-
|
|
353
|
+
</table>
|
|
354
354
|
|
|
355
355
|
<table>
|
|
356
356
|
{% set exp_bills = era_bundle['exp_bills'] %}
|
chellow/templates/g/batches.html
CHANGED
|
@@ -14,17 +14,28 @@
|
|
|
14
14
|
<table>
|
|
15
15
|
<thead>
|
|
16
16
|
<tr>
|
|
17
|
+
<th>View</th>
|
|
17
18
|
<th>Reference</th>
|
|
18
19
|
<th>Description</th>
|
|
20
|
+
<th>Number Of Bills</th>
|
|
21
|
+
<th>Net GBP</th>
|
|
22
|
+
<th>VAT GBP</th>
|
|
23
|
+
<th>Gross GBP</th>
|
|
24
|
+
<th>kWh</th>
|
|
19
25
|
</tr>
|
|
20
26
|
</thead>
|
|
21
27
|
<tbody>
|
|
22
|
-
{% for
|
|
28
|
+
{% for row in g_batches %}
|
|
29
|
+
{% set g_batch = row[0] %}
|
|
23
30
|
<tr>
|
|
24
|
-
<td>
|
|
25
|
-
|
|
26
|
-
</td>
|
|
31
|
+
<td><a href="/g/batches/{{g_batch.id}}">View</a></td>
|
|
32
|
+
<td>{{g_batch.reference}}</td>
|
|
27
33
|
<td>{{g_batch.description}}</td>
|
|
34
|
+
<td>{{ "{:,}".format(row[1]) }}</td>
|
|
35
|
+
<td>{{ "£{:,}".format(row[2]) }}</td>
|
|
36
|
+
<td>{{ "£{:,}".format(row[3]) }}</td>
|
|
37
|
+
<td>{{ "£{:,}".format(row[4]) }}</td>
|
|
38
|
+
<td>{{ "{:,}".format(row[5]) }}</td>
|
|
28
39
|
</tr>
|
|
29
40
|
{% endfor %}
|
|
30
41
|
</tbody>
|
chellow/templates/site.html
CHANGED
|
@@ -181,8 +181,6 @@ Table of site level monthly kWh, MD kWh etc.</a>
|
|
|
181
181
|
{{ input_number('months', initial='1', size='2', maxlength='2', required=True) }}
|
|
182
182
|
<label>Final Month</label>
|
|
183
183
|
{{ input_date('finish', last_month_finish, resolution='month') }}
|
|
184
|
-
<label>Include bill check tabs?</label>
|
|
185
|
-
{{input_checkbox('is_bill_check')}}
|
|
186
184
|
<input type="submit" value="Download">
|
|
187
185
|
</fieldset>
|
|
188
186
|
</form>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: chellow
|
|
3
|
-
Version:
|
|
3
|
+
Version: 1724868336.0.0
|
|
4
4
|
Summary: Web Application for checking UK energy bills.
|
|
5
5
|
Project-URL: Homepage, https://github.com/WessexWater/chellow
|
|
6
6
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
@@ -66,7 +66,7 @@ chellow/gas/cv.py,sha256=4cdYYQ8Qak6NeYdBCB4YaQ0jX8-UkaydIIdibCQuXxM,7344
|
|
|
66
66
|
chellow/gas/dn_rate_parser.py,sha256=Mq8rAcUEUxIQOks59bsCKl8GrefvoHbrTCHqon9N0z0,11340
|
|
67
67
|
chellow/gas/engine.py,sha256=jT7m6vddi5GnWd51wCYEVhBS-LZEn1T9ggZX7Y9HGK0,25263
|
|
68
68
|
chellow/gas/transportation.py,sha256=Bkg8TWOs-v0ES-4qqwbleiOhqbE_t2KauUx9JYMZELM,5300
|
|
69
|
-
chellow/gas/views.py,sha256=
|
|
69
|
+
chellow/gas/views.py,sha256=zOlJnL6eVq7Tag-0NMabzCPQk5AoTrclEz-923pbwAE,57851
|
|
70
70
|
chellow/reports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
71
71
|
chellow/reports/report_109.py,sha256=FmRWG8wQC97cj0nqQH7mrfbYesRIKWXQLh6ERHvtHrU,11212
|
|
72
72
|
chellow/reports/report_111.py,sha256=AlYjvCDpGNe1qBuzW52EONWDsFaIVElug0Vpe9qm1PY,28169
|
|
@@ -85,7 +85,7 @@ chellow/reports/report_33.py,sha256=laVz-itDbJTdvC6LxLEeuY0eKpYx43Un4adiExPTEEE,
|
|
|
85
85
|
chellow/reports/report_387.py,sha256=kmBZopb0AOivcowO2nPjRj6LnV0_QjCDXLwqPL7IGVE,5672
|
|
86
86
|
chellow/reports/report_41.py,sha256=QQeTshA1Og7N3wPaoZ8ynJzwsvZ1mgSFc7DDkVqIZoM,7447
|
|
87
87
|
chellow/reports/report_429.py,sha256=8WlLqyfMyvIF5Kc6CE0MKwcT5xwmR_Ao99Ef72yAOVc,12668
|
|
88
|
-
chellow/reports/report_59.py,sha256=
|
|
88
|
+
chellow/reports/report_59.py,sha256=X3zWhc18AukwzhCZEj9ZnGA73I3nPBISWoms6Fc2s80,44630
|
|
89
89
|
chellow/reports/report_81.py,sha256=NkT6dZeMo7Z0AkJemD_Xv8Ut5PIZ9vn8Ia1Q_DS9v54,5611
|
|
90
90
|
chellow/reports/report_87.py,sha256=j2gdBOapaVY1ZnlNlw14RPx58_k8eUkc3oRSnKuCsNA,7057
|
|
91
91
|
chellow/reports/report_asset_comparison.py,sha256=UN298MHuzyUDUiiZr7F_Ua6SrdVOlFLjgKjnIbrA-14,6118
|
|
@@ -94,7 +94,7 @@ chellow/reports/report_bills.py,sha256=AHW6tiZAOE0gXDfencPvemE4zqK6eTqfN8_bWQ4RT
|
|
|
94
94
|
chellow/reports/report_csv_llfcs.py,sha256=OHSbP64lQ6dlAMcQYgvdANlA4lQyF0iBlwk7V9c9nuo,1944
|
|
95
95
|
chellow/reports/report_csv_site_hh_data.py,sha256=yWhEoGGyg_ctM8T55raksTPRJ5ycVO6lVfUx5tRBzTQ,4372
|
|
96
96
|
chellow/reports/report_csv_site_snags.py,sha256=gG2sYQrLoIBwCoMUC8rhmAL7Kffh_rvNb9UOX7cYDko,2668
|
|
97
|
-
chellow/reports/report_ecoes_comparison.py,sha256=
|
|
97
|
+
chellow/reports/report_ecoes_comparison.py,sha256=CaeMCpLifP-kh2O9MZPs0EYf4UqksL-xFjwki41DTRA,21444
|
|
98
98
|
chellow/reports/report_g_monthly_duration.py,sha256=FMMFIWFfGW2Bd9Excpf4LLXXqQ-fbnZZ_KfNa1VaPqA,13034
|
|
99
99
|
chellow/reports/report_g_supplies_snapshot.py,sha256=0M0x_0o0985Hu45gUJJJwzfx0DDOAuXBJ1UVUDbQ36g,4718
|
|
100
100
|
chellow/reports/report_g_supply_virtual_bill.py,sha256=x_KtQ02dwgmXvAEUXJ1poK0BRwqxa-GcbJ5pddEina0,3694
|
|
@@ -140,7 +140,7 @@ chellow/templates/report_run_row.html,sha256=bmtcdqJaS1CXpL0i8PuqvmeF98jKNYX5-mn
|
|
|
140
140
|
chellow/templates/report_run_row_bill_check.html,sha256=aC2LMu_6NvmTN3ZdxHJPPPczyxPN6hg0F-PPcqIWUws,4683
|
|
141
141
|
chellow/templates/report_run_supply_contacts.html,sha256=JNzwz9M6qbLRDMkCzFCxxANapUer5klxo7t5a48nAzg,2117
|
|
142
142
|
chellow/templates/report_runs.html,sha256=Xef2nilmHHSnyRNKUQJrU2qWsQfslFL_wWD5rR92SOo,667
|
|
143
|
-
chellow/templates/site.html,sha256=
|
|
143
|
+
chellow/templates/site.html,sha256=dj0VgcmjaKJHuTOZDESO2E2MOyluYJtx4YaSOaWOkwU,10024
|
|
144
144
|
chellow/templates/site_add.html,sha256=NxYmOIZQH6X8EBOuJUbhUJ8IYB3t0BukjR1yVRhnJhM,422
|
|
145
145
|
chellow/templates/site_edit.html,sha256=TJ_ZDDkodj-uDB3GPP9Cel3FGZY2oP42KCzHOydPWVc,2909
|
|
146
146
|
chellow/templates/site_gen_graph.html,sha256=LXkD4n_aC_sFm9JJTCmBRrczpyTn2UUEgBToFiM5RPo,3468
|
|
@@ -311,7 +311,7 @@ chellow/templates/e/supplier_rate_script_add.html,sha256=Yf2LZEIHbL7qT6oxBCtPf0Z
|
|
|
311
311
|
chellow/templates/e/supplier_rate_script_edit.html,sha256=VaYJt8nxHdnuP-zEAuBJC-ibEpjDU1b80hXtdBQH1dg,1968
|
|
312
312
|
chellow/templates/e/supply.html,sha256=No26xivLm4hA8kRufVvPjrEOE3of7pmZaW_jgTcKSY0,8511
|
|
313
313
|
chellow/templates/e/supply_edit.html,sha256=Ef4ivmSvj9NAb1Uy43S3TCwheCffV457bdpaoD8XZ_s,2723
|
|
314
|
-
chellow/templates/e/supply_eras.html,sha256=
|
|
314
|
+
chellow/templates/e/supply_eras.html,sha256=5lB7_oC-sTWRQoASuPgBWj5XSZa9ajR0s6V6xKHvf6E,19996
|
|
315
315
|
chellow/templates/e/supply_hh_data.html,sha256=d9ho4Tq3ZkR5GmxSZr_zHGwCU68PH3aSc4OwFG9i9zE,3587
|
|
316
316
|
chellow/templates/e/supply_months.html,sha256=2EUF_SWCcjG9GiAw86gco8xR6LXaqCPXfQE5A33TqqI,1927
|
|
317
317
|
chellow/templates/e/supply_note_add.html,sha256=wsrG7P38h8fj63zVAZXfLogdYxIKnn8qxEJFr3Fna4k,553
|
|
@@ -324,7 +324,7 @@ chellow/templates/e/tprs.html,sha256=jk1jm8CTcO3zYOOZFu9XOOLSG_ZFAgblReh-Di-bkug
|
|
|
324
324
|
chellow/templates/g/batch.html,sha256=jOr_6OmS4sgFFV4y4NG1KZMM7r7w25qtMuApN_jTyBI,3909
|
|
325
325
|
chellow/templates/g/batch_add.html,sha256=WEK6NAvxsRd0gmJOqYSBS5ehZKVahbX49uiHAoyCwhg,1035
|
|
326
326
|
chellow/templates/g/batch_edit.html,sha256=hA0eowzmwaA5vwt4L23DZNKtT_PD8FLCBuSo5IktWmI,1428
|
|
327
|
-
chellow/templates/g/batches.html,sha256=
|
|
327
|
+
chellow/templates/g/batches.html,sha256=T6_2ndBfIYyzHrZzwaELYGCcvdFvsLFmn3zSQENnCNE,1108
|
|
328
328
|
chellow/templates/g/bill.html,sha256=S8moZ06CDl4_nQQgqyy4mdkyhfvgoQJGZS8ppsluT_E,3455
|
|
329
329
|
chellow/templates/g/bill_add.html,sha256=sDSpUgEbdalDsea1Ma5lgVRgtbFf0bZ042jUdOFeDDk,1674
|
|
330
330
|
chellow/templates/g/bill_edit.html,sha256=ynfUR_lZXLgTK3T0x9GjzAHahuR823ykMpjCWrY8ot8,2754
|
|
@@ -365,6 +365,6 @@ chellow/templates/g/supply_note_edit.html,sha256=b8mB6_ucBwoljp03iy6AgVaZUhGw3-1
|
|
|
365
365
|
chellow/templates/g/supply_notes.html,sha256=6epNmZ3NKdXZz27fvmRUGeffg_oc1kmwuBeyRzQe3Rg,854
|
|
366
366
|
chellow/templates/g/unit.html,sha256=KouNVU0-i84afANkLQ_heJ0uDfJ9H5A05PuLqb8iCN8,438
|
|
367
367
|
chellow/templates/g/units.html,sha256=p5Nd-lAIboKPEOO6N451hx1bcKxMg4BDODnZ-43MmJc,441
|
|
368
|
-
chellow-
|
|
369
|
-
chellow-
|
|
370
|
-
chellow-
|
|
368
|
+
chellow-1724868336.0.0.dist-info/METADATA,sha256=tSIH1BFEVhIB3kTzEPeIrYlTSVM5bdKcwDmURrsSKH4,12241
|
|
369
|
+
chellow-1724868336.0.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
370
|
+
chellow-1724868336.0.0.dist-info/RECORD,,
|
|
File without changes
|