chellow 1750675713.0.0__py3-none-any.whl → 1751459327.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/e/bill_parsers/drax_edi.py +210 -225
- chellow/e/bill_parsers/drax_element_edi.py +459 -0
- chellow/e/views.py +72 -51
- chellow/gas/bill_parser_bgs_xlsx.py +41 -56
- chellow/general_import.py +72 -0
- chellow/templates/g/bill_import.html +4 -4
- chellow/templates/general_imports.html +18 -0
- chellow/views.py +3 -1
- {chellow-1750675713.0.0.dist-info → chellow-1751459327.0.0.dist-info}/METADATA +2 -2
- {chellow-1750675713.0.0.dist-info → chellow-1751459327.0.0.dist-info}/RECORD +11 -10
- {chellow-1750675713.0.0.dist-info → chellow-1751459327.0.0.dist-info}/WHEEL +0 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import csv
|
|
2
|
+
from collections import defaultdict
|
|
2
3
|
from datetime import datetime as Datetime
|
|
3
4
|
from decimal import Decimal, InvalidOperation
|
|
4
5
|
from enum import Enum, auto
|
|
5
6
|
from io import BytesIO
|
|
6
7
|
|
|
7
|
-
from dateutil.relativedelta import relativedelta
|
|
8
8
|
|
|
9
9
|
from openpyxl import load_workbook
|
|
10
10
|
|
|
11
11
|
from werkzeug.exceptions import BadRequest
|
|
12
12
|
|
|
13
|
-
from chellow.utils import to_ct, to_utc
|
|
13
|
+
from chellow.utils import c_months_u, to_ct, to_utc
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class Title(Enum):
|
|
@@ -35,17 +35,14 @@ class Title(Enum):
|
|
|
35
35
|
|
|
36
36
|
COLUMNS = {
|
|
37
37
|
Title.CUSTOMER: ["Customer"],
|
|
38
|
-
Title.PRODUCT: ["Product"],
|
|
39
|
-
Title.BROKER_NAME: ["Broker Name"],
|
|
40
38
|
Title.ACCOUNT: ["Account"],
|
|
41
39
|
Title.MPRN: ["MPRN"],
|
|
42
40
|
Title.BILL: ["Bill"],
|
|
43
|
-
Title.
|
|
44
|
-
Title.
|
|
45
|
-
Title.
|
|
46
|
-
Title.
|
|
47
|
-
Title.
|
|
48
|
-
Title.CHARGE_PERIOD_END: ["Charge Period End"],
|
|
41
|
+
Title.BILL_DATE: ["Bill Date", "BillDate"],
|
|
42
|
+
Title.BILLING_PERIOD: ["Billing Period", "BillingPeriod"],
|
|
43
|
+
Title.CHARGE_TYPE: ["Charge Type", "ChargeType"],
|
|
44
|
+
Title.CHARGE_PERIOD_FROM: ["Charge Period From", "ChargePeriodFrom"],
|
|
45
|
+
Title.CHARGE_PERIOD_END: ["Charge Period End", "ChargePeriodEnd"],
|
|
49
46
|
Title.QUANTITY: ["Quantity"],
|
|
50
47
|
Title.QUNIT: ["QUnit"],
|
|
51
48
|
Title.CHARGE: ["Charge"],
|
|
@@ -127,34 +124,21 @@ def get_int(sheet, row, col):
|
|
|
127
124
|
)
|
|
128
125
|
|
|
129
126
|
|
|
130
|
-
"""
|
|
131
|
-
def _bd_add(bd, el_name, val):
|
|
132
|
-
if el_name.split("-")[-1] in ("rate", "kva"):
|
|
133
|
-
if el_name not in bd:
|
|
134
|
-
bd[el_name] = set()
|
|
135
|
-
bd[el_name].add(val)
|
|
136
|
-
else:
|
|
137
|
-
if el_name not in bd:
|
|
138
|
-
bd[el_name] = 0
|
|
139
|
-
try:
|
|
140
|
-
bd[el_name] += val
|
|
141
|
-
except TypeError as e:
|
|
142
|
-
raise BadRequest(
|
|
143
|
-
f"Problem with element name {el_name} and value '{val}': {e}"
|
|
144
|
-
)
|
|
145
|
-
"""
|
|
146
|
-
|
|
147
127
|
ELEMENT_LOOKUP = {
|
|
128
|
+
"CCL": "ccl",
|
|
129
|
+
"Fixed Management Fee": "admin_fixed",
|
|
130
|
+
"Gas": "admin_variable",
|
|
148
131
|
"Management Fee": "admin_variable",
|
|
132
|
+
"Metering and Data": "metering",
|
|
149
133
|
"LDZ Customer Capacity": "dn_customer_capacity_fixed",
|
|
134
|
+
"LDZ Customer Fixed": "dn_customer_fixed",
|
|
150
135
|
"LDZ System Capacity": "dn_system_capacity_fixed",
|
|
151
|
-
"LDZ System Commodity": "
|
|
152
|
-
"Metering Charges": "metering",
|
|
136
|
+
"LDZ System Commodity": "dn_system_commodity",
|
|
153
137
|
"NTS Exit Capacity (ECN)": "dn_ecn_fixed",
|
|
154
138
|
"NTS SO Exit": "so_exit_commodity",
|
|
155
139
|
"NTS TO Exit": "to_exit_commodity",
|
|
156
140
|
"Unidentified Gas": "ug",
|
|
157
|
-
"WAP": "
|
|
141
|
+
"WAP": "commodity",
|
|
158
142
|
}
|
|
159
143
|
|
|
160
144
|
QUNIT_LOOKUP = {
|
|
@@ -165,15 +149,15 @@ QUNIT_LOOKUP = {
|
|
|
165
149
|
|
|
166
150
|
def _parse_row(bills, sheet, row, title_row):
|
|
167
151
|
column_map = make_column_map(title_row)
|
|
168
|
-
|
|
152
|
+
mprn_raw = get_value(sheet, row, column_map[Title.MPRN])
|
|
153
|
+
mprn = str(mprn_raw)
|
|
169
154
|
reference = get_value(sheet, row, column_map[Title.BILL])
|
|
170
155
|
account = get_value(sheet, row, column_map[Title.ACCOUNT])
|
|
171
156
|
issue_date = get_date(sheet, row, column_map[Title.BILL_DATE])
|
|
172
|
-
|
|
173
|
-
finish_date =
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
)
|
|
157
|
+
period_naive = get_date_naive(sheet, row, column_map[Title.BILLING_PERIOD])
|
|
158
|
+
start_date, finish_date = list(
|
|
159
|
+
c_months_u(start_year=period_naive.year, start_month=period_naive.month)
|
|
160
|
+
)[0]
|
|
177
161
|
|
|
178
162
|
try:
|
|
179
163
|
mprn_values = bills[mprn]
|
|
@@ -181,14 +165,9 @@ def _parse_row(bills, sheet, row, title_row):
|
|
|
181
165
|
mprn_values = bills[mprn] = {}
|
|
182
166
|
|
|
183
167
|
try:
|
|
184
|
-
|
|
185
|
-
except KeyError:
|
|
186
|
-
start_date_values = mprn_values[start_date] = {}
|
|
187
|
-
|
|
188
|
-
try:
|
|
189
|
-
bill = start_date_values[finish_date]
|
|
168
|
+
bill = mprn_values[period_naive]
|
|
190
169
|
except KeyError:
|
|
191
|
-
bill =
|
|
170
|
+
bill = mprn_values[period_naive] = {
|
|
192
171
|
"bill_type_code": "N",
|
|
193
172
|
"mprn": mprn,
|
|
194
173
|
"reference": reference,
|
|
@@ -197,10 +176,12 @@ def _parse_row(bills, sheet, row, title_row):
|
|
|
197
176
|
"start_date": start_date,
|
|
198
177
|
"finish_date": finish_date,
|
|
199
178
|
"kwh": Decimal("0"),
|
|
179
|
+
"breakdown": defaultdict(int, {}),
|
|
200
180
|
"net_gbp": Decimal("0.00"),
|
|
201
181
|
"vat_gbp": Decimal("0.00"),
|
|
202
182
|
"gross_gbp": Decimal("0.00"),
|
|
203
|
-
"
|
|
183
|
+
"raw_lines": str([(c.value) for c in sheet[row]]),
|
|
184
|
+
"reads": [],
|
|
204
185
|
}
|
|
205
186
|
|
|
206
187
|
bd = bill["breakdown"]
|
|
@@ -209,38 +190,42 @@ def _parse_row(bills, sheet, row, title_row):
|
|
|
209
190
|
qunit = get_value(sheet, row, column_map[Title.QUNIT])
|
|
210
191
|
charge = get_dec(sheet, row, column_map[Title.CHARGE]) / Decimal("100")
|
|
211
192
|
total = get_dec(sheet, row, column_map[Title.TOTAL])
|
|
212
|
-
if element_desc
|
|
193
|
+
if element_desc == "VAT":
|
|
213
194
|
bill["net_gbp"] += quantity
|
|
214
195
|
bill["vat_gbp"] += total
|
|
215
196
|
bill["gross_gbp"] += quantity + total
|
|
197
|
+
if "vat_rate" not in bd:
|
|
198
|
+
bd["vat_rate"] = set()
|
|
199
|
+
bd["vat_rate"].add(charge)
|
|
216
200
|
else:
|
|
217
201
|
element_name = ELEMENT_LOOKUP[element_desc]
|
|
218
|
-
if element_name == "
|
|
202
|
+
if element_name == "commodity":
|
|
219
203
|
bill["kwh"] += quantity
|
|
220
|
-
bd[f"{element_name}_gbp"]
|
|
204
|
+
bd[f"{element_name}_gbp"] += total
|
|
221
205
|
element_qunit = QUNIT_LOOKUP[qunit]
|
|
222
|
-
bd[f"{element_name}_{element_qunit}"]
|
|
223
|
-
|
|
206
|
+
bd[f"{element_name}_{element_qunit}"] += quantity
|
|
207
|
+
rate_name = f"{element_name}_rate"
|
|
208
|
+
if rate_name not in bd:
|
|
209
|
+
bd[rate_name] = set()
|
|
210
|
+
bd[rate_name].add(charge)
|
|
224
211
|
|
|
225
212
|
|
|
226
213
|
def _make_raw_bills(sheet):
|
|
227
214
|
bills = {}
|
|
228
215
|
rows = tuple(sheet.rows)
|
|
229
|
-
title_row = rows[
|
|
230
|
-
for row_index, row in enumerate(rows[
|
|
216
|
+
title_row = rows[0]
|
|
217
|
+
for row_index, row in enumerate(rows[1:], start=2):
|
|
231
218
|
val = row[0].value
|
|
232
219
|
if val not in (None, ""):
|
|
233
220
|
try:
|
|
234
221
|
_parse_row(bills, sheet, row_index, title_row)
|
|
235
222
|
except BadRequest as e:
|
|
236
|
-
raise BadRequest(f"On row {row_index
|
|
237
|
-
print("bills", bills)
|
|
223
|
+
raise BadRequest(f"On row {row_index}: {e.description}")
|
|
238
224
|
|
|
239
225
|
raw_bills = []
|
|
240
226
|
for mprn, mprn_values in bills.items():
|
|
241
|
-
for
|
|
242
|
-
|
|
243
|
-
raw_bills.append(bill)
|
|
227
|
+
for period, raw_bill in mprn_values.items():
|
|
228
|
+
raw_bills.append(raw_bill)
|
|
244
229
|
|
|
245
230
|
return raw_bills
|
|
246
231
|
|
chellow/general_import.py
CHANGED
|
@@ -21,6 +21,7 @@ from chellow.models import (
|
|
|
21
21
|
DtcMeterType,
|
|
22
22
|
EnergisationStatus,
|
|
23
23
|
Era,
|
|
24
|
+
GBill,
|
|
24
25
|
GContract,
|
|
25
26
|
GEra,
|
|
26
27
|
GExitZone,
|
|
@@ -1151,6 +1152,77 @@ def general_import_g_bill(sess, action, vals, args):
|
|
|
1151
1152
|
)
|
|
1152
1153
|
|
|
1153
1154
|
|
|
1155
|
+
def general_import_g_register_read(sess, action, vals, args):
|
|
1156
|
+
if action == "insert":
|
|
1157
|
+
contract_name = add_arg(args, "Supplier Contract Name", vals, 0)
|
|
1158
|
+
|
|
1159
|
+
g_contract = GContract.get_supplier_by_name(sess, contract_name)
|
|
1160
|
+
|
|
1161
|
+
batch_reference = add_arg(args, "Batch Reference", vals, 1)
|
|
1162
|
+
|
|
1163
|
+
g_batch = g_contract.get_g_batch_by_reference(sess, batch_reference)
|
|
1164
|
+
|
|
1165
|
+
mprn = add_arg(args, "MPRN", vals, 2)
|
|
1166
|
+
g_supply = GSupply.get_by_mprn(sess, mprn)
|
|
1167
|
+
|
|
1168
|
+
bill_start_date_str = add_arg(args, "Bill Start Date", vals, 3)
|
|
1169
|
+
bill_start_date = parse_hh_start(bill_start_date_str)
|
|
1170
|
+
|
|
1171
|
+
g_bill = sess.scalars(
|
|
1172
|
+
select(GBill).where(
|
|
1173
|
+
GBill.g_batch == g_batch,
|
|
1174
|
+
GBill.g_supply == g_supply,
|
|
1175
|
+
GBill.start_date == bill_start_date,
|
|
1176
|
+
)
|
|
1177
|
+
).first()
|
|
1178
|
+
|
|
1179
|
+
if g_bill is None:
|
|
1180
|
+
raise BadRequest(
|
|
1181
|
+
f"Can't find a bill in batch {batch_reference} in contract "
|
|
1182
|
+
f"{contract_name} with MPRN {mprn} starting at "
|
|
1183
|
+
f"{hh_format(bill_start_date)}"
|
|
1184
|
+
)
|
|
1185
|
+
|
|
1186
|
+
for i in range(4, len(vals), 10):
|
|
1187
|
+
msn = add_arg(args, "Meter Serial Number", vals, i)
|
|
1188
|
+
g_unit_code = add_arg(args, "Unit", vals, i + 1)
|
|
1189
|
+
g_unit = GUnit.get_by_code(sess, g_unit_code)
|
|
1190
|
+
correction_factor_str = add_arg(args, "Correction Factor", vals, i + 2)
|
|
1191
|
+
correction_factor = Decimal(correction_factor_str)
|
|
1192
|
+
calorific_value_str = add_arg(args, "Calorific Value", vals, i + 3)
|
|
1193
|
+
calorific_value = Decimal(calorific_value_str)
|
|
1194
|
+
|
|
1195
|
+
prev_date_str = add_arg(args, "Previous Date", vals, i + 4)
|
|
1196
|
+
prev_date = parse_hh_start(prev_date_str)
|
|
1197
|
+
prev_value_str = add_arg(args, "Previous Value", vals, i + 5)
|
|
1198
|
+
prev_value = Decimal(prev_value_str)
|
|
1199
|
+
|
|
1200
|
+
prev_type_str = add_arg(args, "Previous Type", vals, i + 6)
|
|
1201
|
+
prev_type = GReadType.get_by_code(sess, prev_type_str)
|
|
1202
|
+
|
|
1203
|
+
pres_date_str = add_arg(args, "Present Date", vals, i + 7)
|
|
1204
|
+
pres_date = parse_hh_start(pres_date_str)
|
|
1205
|
+
pres_value_str = add_arg(args, "Present Value", vals, i + 8)
|
|
1206
|
+
pres_value = Decimal(pres_value_str)
|
|
1207
|
+
|
|
1208
|
+
pres_type_str = add_arg(args, "Present Type", vals, i + 9)
|
|
1209
|
+
pres_type = GReadType.get_by_code(sess, pres_type_str)
|
|
1210
|
+
|
|
1211
|
+
g_bill.insert_g_read(
|
|
1212
|
+
sess,
|
|
1213
|
+
msn,
|
|
1214
|
+
g_unit,
|
|
1215
|
+
correction_factor,
|
|
1216
|
+
calorific_value,
|
|
1217
|
+
prev_value,
|
|
1218
|
+
prev_date,
|
|
1219
|
+
prev_type,
|
|
1220
|
+
pres_value,
|
|
1221
|
+
pres_date,
|
|
1222
|
+
pres_type,
|
|
1223
|
+
)
|
|
1224
|
+
|
|
1225
|
+
|
|
1154
1226
|
def general_import_register_read(sess, action, vals, args):
|
|
1155
1227
|
if action == "insert":
|
|
1156
1228
|
pass
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
</ul>
|
|
34
34
|
|
|
35
35
|
{% if failed_bills|length > 0 %}
|
|
36
|
-
<table>
|
|
36
|
+
<table class="sticky">
|
|
37
37
|
<caption>Failed Bills</caption>
|
|
38
38
|
<thead>
|
|
39
39
|
<tr>
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
<td>{{bill.net_gbp}}</td>
|
|
78
78
|
<td>{{bill.vat_gbp}}</td>
|
|
79
79
|
<td>{{bill.gross_gbp}}</td>
|
|
80
|
-
<td>{{bill.breakdown|dumps}}</td>
|
|
80
|
+
<td><pre>{{bill.breakdown|dumps}}</pre></td>
|
|
81
81
|
{% for read in bill.reads %}
|
|
82
82
|
<td>{{read.calorific_value}}</td>
|
|
83
83
|
<td>{{read.correction_factor}}</td>
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
{% endif %}
|
|
98
98
|
|
|
99
99
|
{% if successful_bills|length > 0 %}
|
|
100
|
-
<table>
|
|
100
|
+
<table class="sticky">
|
|
101
101
|
<caption>Successful Bills</caption>
|
|
102
102
|
<thead>
|
|
103
103
|
<tr>
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
<td>{{bill.net_gbp}}</td>
|
|
142
142
|
<td>{{bill.vat_gbp}}</td>
|
|
143
143
|
<td>{{bill.gross_gbp}}</td>
|
|
144
|
-
<td>{{bill.breakdown|dumps}}</td>
|
|
144
|
+
<td><pre>{{bill.breakdown|dumps}}</pre></td>
|
|
145
145
|
{% for g_read in bill.reads %}
|
|
146
146
|
<td>{{g_read.msn}}</td>
|
|
147
147
|
<td>{{g_read.prev_date|hh_format}}</td>
|
|
@@ -511,6 +511,24 @@
|
|
|
511
511
|
<td>Present Value</td>
|
|
512
512
|
<td>Present Type)*</td>
|
|
513
513
|
</td>
|
|
514
|
+
<tr>
|
|
515
|
+
<td><em>insert</em></td>
|
|
516
|
+
<td><em>g_register_read</em></td>
|
|
517
|
+
<td>Contract Name</td>
|
|
518
|
+
<td>Batch Reference</td>
|
|
519
|
+
<td>MPRN</td>
|
|
520
|
+
<td>Bill Start Date (YYYY-MM-dd hh:mm)</td>
|
|
521
|
+
<td>(Meter Serial Number</td>
|
|
522
|
+
<td>Unit</td>
|
|
523
|
+
<td>Correction Factor</td>
|
|
524
|
+
<td>Calorific Value</td>
|
|
525
|
+
<td>Previous Date (YYYY-MM-dd hh:mm)</td>
|
|
526
|
+
<td>Previous Value</td>
|
|
527
|
+
<td>Previous Type</td>
|
|
528
|
+
<td>Present Date (YYYY-MM-dd hh:mm)</td>
|
|
529
|
+
<td>Present Value</td>
|
|
530
|
+
<td>Present Type)*</td>
|
|
531
|
+
</td>
|
|
514
532
|
<tr>
|
|
515
533
|
<td><em>insert</em></td>
|
|
516
534
|
<td><em>valid_mtc_llfc_ssc_pc</em></td>
|
chellow/views.py
CHANGED
|
@@ -1696,7 +1696,8 @@ def report_run_row_get(row_id):
|
|
|
1696
1696
|
toks = t.split("_")
|
|
1697
1697
|
if toks[0] in ("covered", "virtual", "difference"):
|
|
1698
1698
|
tail = "_".join(toks[1:])
|
|
1699
|
-
for element in elements.keys():
|
|
1699
|
+
for element in sorted(elements.keys(), key=len, reverse=True):
|
|
1700
|
+
|
|
1700
1701
|
table = elements[element]
|
|
1701
1702
|
elstr = f"{element}_"
|
|
1702
1703
|
if tail.startswith(elstr):
|
|
@@ -1705,6 +1706,7 @@ def report_run_row_get(row_id):
|
|
|
1705
1706
|
table["parts"].add(part)
|
|
1706
1707
|
if t.startswith("difference_") and t.endswith("_gbp"):
|
|
1707
1708
|
table["order"] = abs(values[t])
|
|
1709
|
+
break
|
|
1708
1710
|
|
|
1709
1711
|
tables.sort(key=lambda t: t["order"], reverse=True)
|
|
1710
1712
|
return render_template(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chellow
|
|
3
|
-
Version:
|
|
3
|
+
Version: 1751459327.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)
|
|
@@ -25,7 +25,7 @@ Requires-Dist: requests==2.32.4
|
|
|
25
25
|
Requires-Dist: sqlalchemy==2.0.30
|
|
26
26
|
Requires-Dist: waitress==3.0.1
|
|
27
27
|
Requires-Dist: xlrd==2.0.1
|
|
28
|
-
Requires-Dist: zish==0.1.
|
|
28
|
+
Requires-Dist: zish==0.1.12
|
|
29
29
|
Description-Content-Type: text/markdown
|
|
30
30
|
|
|
31
31
|
# Chellow
|
|
@@ -5,7 +5,7 @@ chellow/commands.py,sha256=ESBe9ZWj1c3vdZgqMZ9gFvYAB3hRag2R1PzOwuw9yFo,1302
|
|
|
5
5
|
chellow/dloads.py,sha256=dixp-O0MF2_mlwrnKx3D9DH09Qu05BjTo0rZfigTjR4,5534
|
|
6
6
|
chellow/edi_lib.py,sha256=alu20x9ZX06iPfnNI9dEJzuP6RIf4We3Y_M_bl7RrcY,51789
|
|
7
7
|
chellow/fake_batch_updater.py,sha256=khAmvSUn9qN04w8C92kRg1UeyQvfLztE7QXv9tUz6nE,11611
|
|
8
|
-
chellow/general_import.py,sha256=
|
|
8
|
+
chellow/general_import.py,sha256=bm8FoaC9xUajGvJYShuS5GEwPwcL5eCF9D9g6o_AkB0,68089
|
|
9
9
|
chellow/models.py,sha256=XD5wl3Pa8vZFGA0aB1Pu-xJs3iBoBoeX44E8Myho_68,244648
|
|
10
10
|
chellow/national_grid.py,sha256=-c_vqNRtpNIQOcm0F1NDhS3_QUiOaLgEJYWzysSNc5Y,4369
|
|
11
11
|
chellow/proxy.py,sha256=cVXIktPlX3tQ1BYcwxq0nJXKE6r3DtFTtfFHPq55HaM,1351
|
|
@@ -13,7 +13,7 @@ chellow/rate_server.py,sha256=fg-Pf_9Hk3bXmC9riPQNGQxBvLvBa_WtNYdwDCjnCSg,5678
|
|
|
13
13
|
chellow/rrun.py,sha256=1Kt2q_K9UoDG_nsZz-Q6XJiMNKroWqlqFdxn2M6Q8CA,2088
|
|
14
14
|
chellow/testing.py,sha256=Dj2c1NX8lVlygueOrh2eyYawLW6qKEHxNhXVVUaNRO0,3637
|
|
15
15
|
chellow/utils.py,sha256=i3GQK9MIcweosZk2gi-nX_IFq2DxURAJDyNoLBg6YwM,19421
|
|
16
|
-
chellow/views.py,sha256=
|
|
16
|
+
chellow/views.py,sha256=7nk7kZALoSGeyMSVU-_DzYSLt7ypPFQ6zBpx8--AER4,85354
|
|
17
17
|
chellow/e/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
18
|
chellow/e/aahedc.py,sha256=d2usudp7KYWpU6Pk3fal5EQ47EbvkvKeaFGylnb3NWw,606
|
|
19
19
|
chellow/e/bill_importer.py,sha256=7UcnqNlKbJc2GhW9gy8sDp9GuqambJVpZLvbafOZztA,7411
|
|
@@ -44,13 +44,14 @@ chellow/e/system_price.py,sha256=6w5J7bzwFAZubE2zdOFRiS8IIrVP8hkoIOaG2yCt-Ic,623
|
|
|
44
44
|
chellow/e/tlms.py,sha256=Wb9ZuxscMzxXs0FT06Iu5YXeccmO6ai_mUjnJGJwTM4,9045
|
|
45
45
|
chellow/e/tnuos.py,sha256=NBmc-f3oezrl4gviAKobljHfICTpBKxxxEGBGJi_lRk,4927
|
|
46
46
|
chellow/e/triad.py,sha256=lIQj7EdUrcFwEqleuHZXYU_bfzIwNOqUVVxB3NPQt4A,13710
|
|
47
|
-
chellow/e/views.py,sha256=
|
|
47
|
+
chellow/e/views.py,sha256=e5rMZFT2fNO3P14_0nCyOEwNWnMiayx2wqo4PJmBwRM,220111
|
|
48
48
|
chellow/e/bill_parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
49
|
chellow/e/bill_parsers/activity_mop_stark_xlsx.py,sha256=UgWXDPzQkQghyj_lfgBqoSJpHB-t-qOdSaB8qY6GLog,4071
|
|
50
50
|
chellow/e/bill_parsers/annual_mop_stark_xlsx.py,sha256=-HMoIfa_utXYKA44RuC0Xqv3vd2HLeQU_4P0iBUd3WA,4219
|
|
51
51
|
chellow/e/bill_parsers/bgb_edi.py,sha256=GuwHeYbAGk7BVg5n19FcTANFDyKI-y0z3f9niQaPSSw,4828
|
|
52
52
|
chellow/e/bill_parsers/csv.py,sha256=U5zcIaZ6B5QTTpFDAcBnk4G2r8B3j5kJhDPL4AJNkEk,5640
|
|
53
|
-
chellow/e/bill_parsers/drax_edi.py,sha256=
|
|
53
|
+
chellow/e/bill_parsers/drax_edi.py,sha256=syHvC-q1DK3fuSfI1IgMejNlVa7zEnrr4H9zU2mxqlA,15081
|
|
54
|
+
chellow/e/bill_parsers/drax_element_edi.py,sha256=kxjg1KA4UheMa8doGp9skXtQYrNK8Eisy9ksafR5TQo,13661
|
|
54
55
|
chellow/e/bill_parsers/edf_export_xlsx.py,sha256=J4lY8epiSTIePZ6D1SGD76TXRoev35KrUC2sjHkNqlE,6632
|
|
55
56
|
chellow/e/bill_parsers/engie_edi.py,sha256=PDMDI0aqUM1lalgzxih1YmMho11n1rMqE0vyL-aEIs8,15840
|
|
56
57
|
chellow/e/bill_parsers/engie_export_xlsx.py,sha256=oZO0qHdDlOxjJ6J5Ate82CkAoX4bxed1EJyUKHxBcpk,4690
|
|
@@ -66,7 +67,7 @@ chellow/e/bill_parsers/settlement_dc_stark_xlsx.py,sha256=osCpUYUdLcPtlo7ngXWGw0
|
|
|
66
67
|
chellow/e/bill_parsers/sse_edi.py,sha256=L85DOfNkqexeEIEr8pCBn_2sHJI-zEaw6cogpE3YyYM,15204
|
|
67
68
|
chellow/e/bill_parsers/sww_xls.py,sha256=QEjiuvwvr5FuWCfqqVw8LaA_vZyAKsvRAS5fw3xtFhM,7533
|
|
68
69
|
chellow/gas/bill_import.py,sha256=w0lPgK_Drzh8rtnEBQe3qFuxrgzZ6qQSgpaGrrGznMU,6549
|
|
69
|
-
chellow/gas/bill_parser_bgs_xlsx.py,sha256=
|
|
70
|
+
chellow/gas/bill_parser_bgs_xlsx.py,sha256=ySYAa6fq990DW01bQMk8Ix_sziWfm_5d2Il7IrYz9Ys,7522
|
|
70
71
|
chellow/gas/bill_parser_csv.py,sha256=Ecdy-apFT-mWAxddAsM4k1s-9-FpIaOfjP0oFc0rdQg,5557
|
|
71
72
|
chellow/gas/bill_parser_engie_edi.py,sha256=Ko0vZP-QdVQ1uuhS_5cdrii60_cM4b_LFJMoY0pZqnk,8950
|
|
72
73
|
chellow/gas/bill_parser_total_edi.py,sha256=8HZH5Le24bVNFDc7vaKbauMaYR-n9P6u0ZG7gDdqbIA,11325
|
|
@@ -127,7 +128,7 @@ chellow/templates/downloads.html,sha256=R9QPcFz-PLJOX7rDlmquIk-Hp9Iq-thzWCTfOexS
|
|
|
127
128
|
chellow/templates/edi_viewer.html,sha256=szUthgHOdph6Of-7f_1LeC_zYlNJaMeS5ctn6xTAeiM,1437
|
|
128
129
|
chellow/templates/fake_batch_updater.html,sha256=aRQbxtNUlIzxwgSUy2pr-Km5NbhZkse4WSBtlqFIJMg,1885
|
|
129
130
|
chellow/templates/general_import.html,sha256=9ezzieDjaPBZ0nUJkMkzoDxWVzYtr4D-Dr2UCA5xV8U,1370
|
|
130
|
-
chellow/templates/general_imports.html,sha256
|
|
131
|
+
chellow/templates/general_imports.html,sha256=-uQRJBtpwZHODcWM1JuECJ_H_AHsu8frtwEFQ6s_7Sk,13690
|
|
131
132
|
chellow/templates/home.html,sha256=EZbvIvNw0RiuIlaUTOojYSZMTd3VMbTkulABgTB_lAc,5732
|
|
132
133
|
chellow/templates/input_date.html,sha256=rpgB5n0LfN8Y5djN_ZiuSxqdskxzCoKrEqI7hyJkVQo,1248
|
|
133
134
|
chellow/templates/local_report.html,sha256=pV7_0QwyQ-D3OS9LXrly5pq3qprZnwTCoq6vCnMTkS4,1332
|
|
@@ -347,7 +348,7 @@ chellow/templates/g/batches.html,sha256=T6_2ndBfIYyzHrZzwaELYGCcvdFvsLFmn3zSQENn
|
|
|
347
348
|
chellow/templates/g/bill.html,sha256=S8moZ06CDl4_nQQgqyy4mdkyhfvgoQJGZS8ppsluT_E,3455
|
|
348
349
|
chellow/templates/g/bill_add.html,sha256=sDSpUgEbdalDsea1Ma5lgVRgtbFf0bZ042jUdOFeDDk,1674
|
|
349
350
|
chellow/templates/g/bill_edit.html,sha256=ynfUR_lZXLgTK3T0x9GjzAHahuR823ykMpjCWrY8ot8,2754
|
|
350
|
-
chellow/templates/g/bill_import.html,sha256=
|
|
351
|
+
chellow/templates/g/bill_import.html,sha256=IhzABz_cb4r_pnYhfhDThQUpv-06oxsNC3Ov_n3Brl0,4682
|
|
351
352
|
chellow/templates/g/bill_imports.html,sha256=AHC0l0Wkr1RZ9fdGWTqihOEcn8lTZ63Uh9BHqPxfRCU,3157
|
|
352
353
|
chellow/templates/g/dn.html,sha256=ttEdvFANFUCBV8e9tVrZy35-tzsC9dU-biZhAPxE2Bw,481
|
|
353
354
|
chellow/templates/g/dns.html,sha256=RuxXvQ9eHs6B7nVGHtTbW8pdmSAaMbQw2f_BwiLZptM,403
|
|
@@ -384,6 +385,6 @@ chellow/templates/g/supply_note_edit.html,sha256=b8mB6_ucBwoljp03iy6AgVaZUhGw3-1
|
|
|
384
385
|
chellow/templates/g/supply_notes.html,sha256=6epNmZ3NKdXZz27fvmRUGeffg_oc1kmwuBeyRzQe3Rg,854
|
|
385
386
|
chellow/templates/g/unit.html,sha256=KouNVU0-i84afANkLQ_heJ0uDfJ9H5A05PuLqb8iCN8,438
|
|
386
387
|
chellow/templates/g/units.html,sha256=p5Nd-lAIboKPEOO6N451hx1bcKxMg4BDODnZ-43MmJc,441
|
|
387
|
-
chellow-
|
|
388
|
-
chellow-
|
|
389
|
-
chellow-
|
|
388
|
+
chellow-1751459327.0.0.dist-info/METADATA,sha256=fopRwgRi6DGCByKJbQGkgotPRbkltoUm4wxJGpk8VpY,12238
|
|
389
|
+
chellow-1751459327.0.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
390
|
+
chellow-1751459327.0.0.dist-info/RECORD,,
|
|
File without changes
|