chellow 1682689432.0.0__py3-none-any.whl → 1683187792.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.

@@ -29,7 +29,6 @@ def _process_BCD(elements, headers):
29
29
  invn = elements["INVN"]
30
30
  reference = invn[0]
31
31
  headers["reference"] = reference
32
- headers["account"] = "SA" + reference[:9]
33
32
 
34
33
  btcd = elements["BTCD"]
35
34
  headers["bill_type_code"] = btcd[0]
@@ -248,6 +247,11 @@ def _process_CCD4(elements, headers):
248
247
  breakdown["standing-gbp"] += to_decimal(ctot) / Decimal("100")
249
248
 
250
249
 
250
+ def _process_CLO(elements, headers):
251
+ cloc = elements["CLOC"]
252
+ headers["account"] = cloc[1]
253
+
254
+
251
255
  def _process_MTR(elements, headers):
252
256
  if headers["message_type"] == "UTLBIL":
253
257
  if headers["mpan_core"] is None:
@@ -311,7 +315,7 @@ CODE_FUNCS = {
311
315
  "CCD4": _process_CCD4,
312
316
  "CDA": _process_NOOP,
313
317
  "CDT": _process_NOOP,
314
- "CLO": _process_NOOP,
318
+ "CLO": _process_CLO,
315
319
  "DNA": _process_NOOP,
316
320
  "END": _process_NOOP,
317
321
  "FIL": _process_NOOP,
chellow/e/tnuos.py CHANGED
@@ -1,7 +1,10 @@
1
+ from datetime import datetime as Datetime, timedelta as Timedelta
1
2
  from decimal import Decimal, InvalidOperation
3
+ from io import BytesIO
2
4
 
3
5
  from dateutil.relativedelta import relativedelta
4
6
 
7
+ from pypdf import PdfReader
5
8
 
6
9
  from sqlalchemy import null, or_, select
7
10
 
@@ -11,10 +14,12 @@ import chellow.e.computer
11
14
  import chellow.e.duos
12
15
  from chellow.models import Contract, RateScript
13
16
  from chellow.national_grid import api_get
17
+ from chellow.rate_server import download
14
18
  from chellow.utils import (
15
19
  c_months_u,
16
20
  ct_datetime,
17
21
  hh_after,
22
+ hh_format,
18
23
  hh_min,
19
24
  to_ct,
20
25
  to_utc,
@@ -514,3 +519,66 @@ def ng_import_triad(sess, log, set_progress, s):
514
519
 
515
520
  log("Finished TNUoS TRIAD Tariffs")
516
521
  sess.commit()
522
+
523
+
524
+ def _find_triad_dates(file_name, file_like):
525
+ dates = []
526
+ rate_script = {"a_file_name": file_name, "triad_dates": dates}
527
+
528
+ reader = PdfReader(file_like)
529
+ in_table = False
530
+ for page in reader.pages:
531
+ for line in page.extract_text().splitlines():
532
+ if in_table:
533
+ date_str, period_str, _ = line.split()
534
+ date = Datetime.strptime(date_str, "%d/%m/%Y")
535
+ delta = Timedelta(minutes=30) * (int(period_str) - 1)
536
+ dates.append(to_utc(to_ct(date + delta)))
537
+ if len(dates) == 3:
538
+ in_table = False
539
+ else:
540
+ if "Demand (MW)" in line:
541
+ in_table = True
542
+
543
+ return rate_script
544
+
545
+
546
+ def rate_server_import(sess, log, set_progress, s, paths):
547
+ log("Starting to check for new TNUoS triad date PDFs")
548
+
549
+ year_entries = {}
550
+ for path, url in paths:
551
+ if len(path) == 4:
552
+ year, utility, rate_type, file_name = path
553
+ if utility == "electricity" and rate_type == "tnuos":
554
+ try:
555
+ fl_entries = year_entries[year]
556
+ except KeyError:
557
+ fl_entries = year_entries[year] = {}
558
+
559
+ fl_entries[file_name] = url
560
+
561
+ for year, year_pdfs in sorted(year_entries.items()):
562
+ year_start = to_utc(ct_datetime(year, 4, 1))
563
+ contract = Contract.get_non_core_by_name(sess, "triad_dates")
564
+ if year_start < contract.start_rate_script.start_date:
565
+ continue
566
+ rs = sess.execute(
567
+ select(RateScript).where(
568
+ RateScript.contract == contract,
569
+ RateScript.start_date == year_start,
570
+ )
571
+ ).scalar_one_or_none()
572
+ if rs is None:
573
+ rs = contract.insert_rate_script(sess, year_start, {})
574
+
575
+ if len(year_pdfs) > 0:
576
+ file_name, url = sorted(year_pdfs.items())[-1]
577
+
578
+ rs_script = rs.make_script()
579
+ if rs_script.get("a_file_name") != file_name:
580
+ rs.update(_find_triad_dates(file_name, BytesIO(download(s, url))))
581
+ log(f"Updated triad dates rate script for {hh_format(year_start)}")
582
+
583
+ log("Finished TNUoS triad dates PDFs")
584
+ sess.commit()
chellow/e/views.py CHANGED
@@ -3963,56 +3963,6 @@ def supplier_batch_edit_post(batch_id):
3963
3963
  )
3964
3964
 
3965
3965
 
3966
- @e.route("/supplier_batches/<int:batch_id>/csv")
3967
- def supplier_batch_csv_get(batch_id):
3968
- batch = Batch.get_by_id(g.sess, batch_id)
3969
- si = StringIO()
3970
- cw = csv.writer(si)
3971
- cw.writerow(
3972
- [
3973
- "Supplier Contract",
3974
- "Batch Reference",
3975
- "Bill Reference",
3976
- "Account",
3977
- "Issued",
3978
- "From",
3979
- "To",
3980
- "kWh",
3981
- "Net",
3982
- "VAT",
3983
- "Gross",
3984
- "Type",
3985
- ]
3986
- )
3987
- for bill in (
3988
- g.sess.query(Bill)
3989
- .filter(Bill.batch == batch)
3990
- .order_by(Bill.reference, Bill.start_date)
3991
- .options(joinedload(Bill.bill_type))
3992
- ):
3993
- cw.writerow(
3994
- [
3995
- batch.contract.name,
3996
- batch.reference,
3997
- bill.reference,
3998
- bill.account,
3999
- hh_format(bill.issue_date),
4000
- hh_format(bill.start_date),
4001
- hh_format(bill.finish_date),
4002
- str(bill.kwh),
4003
- str(bill.net),
4004
- str(bill.vat),
4005
- str(bill.gross),
4006
- bill.bill_type.code,
4007
- ]
4008
- )
4009
-
4010
- output = make_response(si.getvalue())
4011
- output.headers["Content-Disposition"] = 'attachment; filename="batch.csv"'
4012
- output.headers["Content-type"] = "text/csv"
4013
- return output
4014
-
4015
-
4016
3966
  @e.route("/supplier_batches/<int:batch_id>", methods=["POST"])
4017
3967
  def supplier_batch_post(batch_id):
4018
3968
  try:
chellow/rate_server.py CHANGED
@@ -72,8 +72,13 @@ def run_import(sess, log, set_progress):
72
72
  paths_list = []
73
73
  for sub_entry in tree_entry["tree"]:
74
74
  path = sub_entry["path"].split("/")
75
- if path[-1] != "README.md":
76
- paths_list.append((path, sub_entry["url"]))
75
+ if path[-1] == "README.md":
76
+ continue
77
+ if len(path) == 1 and path[0] == "LICENSE":
78
+ continue
79
+
80
+ path[0] = int(path[0])
81
+ paths_list.append((tuple(path), sub_entry["url"]))
77
82
 
78
83
  paths = tuple(paths_list)
79
84
 
@@ -82,6 +87,7 @@ def run_import(sess, log, set_progress):
82
87
  "chellow.e.dno_rate_parser",
83
88
  "chellow.e.laf_import",
84
89
  "chellow.e.mdd_importer",
90
+ "chellow.e.tnuos",
85
91
  "chellow.gas.dn_rate_parser",
86
92
  ):
87
93
  mod = import_module(mod_name)
@@ -0,0 +1,86 @@
1
+ import csv
2
+ import os
3
+ import threading
4
+ import traceback
5
+
6
+ from flask import g
7
+
8
+ from sqlalchemy import select
9
+ from sqlalchemy.orm import joinedload
10
+
11
+ import chellow.dloads
12
+ from chellow.models import Batch, Bill, Session, User
13
+ from chellow.utils import csv_make_val, req_int
14
+ from chellow.views import chellow_redirect
15
+
16
+
17
+ def content(user_id, batch_id):
18
+ sess = f = writer = None
19
+ try:
20
+ sess = Session()
21
+ user = User.get_by_id(sess, user_id)
22
+ running_name, finished_name = chellow.dloads.make_names(
23
+ f"bills_batch_{batch_id}.csv", user
24
+ )
25
+ f = open(running_name, mode="w", newline="")
26
+ writer = csv.writer(f, lineterminator="\n")
27
+ batch = Batch.get_by_id(sess, batch_id)
28
+ titles = [
29
+ "supplier_contract",
30
+ "batch_reference",
31
+ "bill_reference",
32
+ "imp_mpan_core",
33
+ "account",
34
+ "issued",
35
+ "from",
36
+ "to",
37
+ "kwh",
38
+ "net",
39
+ "vAT",
40
+ "gross",
41
+ "type",
42
+ ]
43
+ writer.writerow(titles)
44
+
45
+ for bill in sess.execute(
46
+ select(Bill)
47
+ .where(Bill.batch == batch)
48
+ .order_by(Bill.reference, Bill.start_date)
49
+ .options(joinedload(Bill.bill_type), joinedload(Bill.supply))
50
+ ).scalars():
51
+ era = bill.supply.find_era_at(sess, bill.start_date)
52
+ vals = [
53
+ batch.contract.name,
54
+ batch.reference,
55
+ bill.reference,
56
+ None if era is None else era.imp_mpan_core,
57
+ bill.account,
58
+ bill.issue_date,
59
+ bill.start_date,
60
+ bill.finish_date,
61
+ bill.kwh,
62
+ bill.net,
63
+ bill.vat,
64
+ bill.gross,
65
+ bill.bill_type.code,
66
+ ]
67
+ writer.writerow(csv_make_val(v) for v in vals)
68
+
69
+ except BaseException:
70
+ msg = traceback.format_exc()
71
+ print(msg)
72
+ if f is not None:
73
+ f.write(msg)
74
+ finally:
75
+ if sess is not None:
76
+ sess.close()
77
+ if f is not None:
78
+ f.close()
79
+ os.rename(running_name, finished_name)
80
+
81
+
82
+ def do_get(sess):
83
+ batch_id = req_int("batch_id")
84
+ args = g.user.id, batch_id
85
+ threading.Thread(target=content, args=args).start()
86
+ return chellow_redirect("/downloads", 303)
@@ -97,7 +97,7 @@ def content(user_id, show_ignored, report_run_id):
97
97
  )
98
98
 
99
99
  r = s.get(
100
- f"{url_prefix}NonDomesticCustomer/ExportPortfolioMPANs?fileType=csv",
100
+ f"{url_prefix}PortfolioAccess/ExportPortfolioMPANs?fileType=csv",
101
101
  proxies=proxies,
102
102
  )
103
103
 
@@ -78,7 +78,7 @@
78
78
  <td>{{ "£{:,}".format(sum_vat_gbp) }}</td>
79
79
  <td>{{ "£{:,}".format(sum_gross_gbp) }}</td>
80
80
  <td>{{ "{:,}".format(sum_kwh) }}</td>
81
- <td><a href="/e/supplier_batches/{{batch.id}}/csv" >Download</a></td>
81
+ <td><a href="/reports/bills?batch_id={{batch.id}}" >Download</a></td>
82
82
  <td>
83
83
  {% if batch_reports %}
84
84
  <ul>
@@ -19,6 +19,10 @@
19
19
  <p>
20
20
  <a href="/national_grid">Automatic Importer</a>
21
21
  </p>
22
+ {% elif contract.name == 'triad_dates' %}
23
+ <p>
24
+ <a href="/rate_server">Automatic Importer</a>
25
+ </p>
22
26
  {% endif %}
23
27
 
24
28
 
@@ -100,7 +100,7 @@
100
100
  </td>
101
101
  </tr>
102
102
  <tr>
103
- <th>TNUoS Spreadsheet</th>
103
+ <th>TRIAD Dates PDFs</th>
104
104
  <td>
105
105
  <table>
106
106
  <thead>
@@ -110,7 +110,7 @@
110
110
  </tr>
111
111
  </thead>
112
112
  <tbody>
113
- {% for rs in tnuos_rs %}
113
+ {% for rs in triad_dates_rs %}
114
114
  {% set script = rs.make_script() %}
115
115
  <tr>
116
116
  <td>{{rs.start_date|hh_format}}</td>
chellow/views.py CHANGED
@@ -127,7 +127,7 @@ from chellow.utils import (
127
127
  utc_datetime_now,
128
128
  )
129
129
 
130
- home = Blueprint("", __name__, template_folder="templates")
130
+ home = Blueprint("home", __name__, url_prefix="", template_folder="templates")
131
131
 
132
132
 
133
133
  def chellow_redirect(path, code=None):
@@ -2176,17 +2176,6 @@ def rate_server_get():
2176
2176
  .where(MarketRole.code == "R", RateScript.start_date >= fy_start)
2177
2177
  .order_by(Contract.name, RateScript.start_date.desc())
2178
2178
  ).scalars()
2179
- tnuos_rs = g.sess.execute(
2180
- select(RateScript)
2181
- .join(RateScript.contract)
2182
- .join(MarketRole)
2183
- .where(
2184
- MarketRole.code == "Z",
2185
- RateScript.start_date >= fy_start,
2186
- Contract.name == "tnuos",
2187
- )
2188
- .order_by(RateScript.start_date.desc())
2189
- ).scalars()
2190
2179
  nts_rs = g.sess.execute(
2191
2180
  select(GRateScript)
2192
2181
  .join(GRateScript.g_contract)
@@ -2218,6 +2207,17 @@ def rate_server_get():
2218
2207
  )
2219
2208
  .order_by(RateScript.start_date.desc())
2220
2209
  ).scalars()
2210
+ triad_dates_rs = g.sess.execute(
2211
+ select(RateScript)
2212
+ .join(RateScript.contract)
2213
+ .join(MarketRole)
2214
+ .where(
2215
+ MarketRole.code == "Z",
2216
+ RateScript.start_date >= fy_start,
2217
+ Contract.name == "triad_dates",
2218
+ )
2219
+ .order_by(RateScript.start_date.desc())
2220
+ ).scalars()
2221
2221
 
2222
2222
  return render_template(
2223
2223
  "rate_server.html",
@@ -2225,10 +2225,10 @@ def rate_server_get():
2225
2225
  config_state=config.make_state(),
2226
2226
  config_properties=props.get("rate_server", {}),
2227
2227
  dno_rs=dno_rs,
2228
- tnuos_rs=tnuos_rs,
2229
2228
  nts_rs=nts_rs,
2230
2229
  dn_rs=dn_rs,
2231
2230
  bsuos_rs=bsuos_rs,
2231
+ triad_dates_rs=triad_dates_rs,
2232
2232
  )
2233
2233
 
2234
2234
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: chellow
3
- Version: 1682689432.0.0
3
+ Version: 1683187792.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)
@@ -8,7 +8,7 @@ Classifier: Operating System :: OS Independent
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Requires-Python: >=3.9
10
10
  Requires-Dist: flask-restx==1.0.3
11
- Requires-Dist: flask==2.2.2
11
+ Requires-Dist: flask==2.3.2
12
12
  Requires-Dist: odio==0.0.22
13
13
  Requires-Dist: openpyxl==3.0.10
14
14
  Requires-Dist: pep3143daemon==0.0.6
@@ -8,10 +8,10 @@ chellow/general_import.py,sha256=Xuiwl-yeM0MCmPstzQR2E6ASs8sYE8b1GNeDLStnizY,584
8
8
  chellow/models.py,sha256=UhVekL4GM_4zs6ZGu83QFssyEMbwLHWerT1dWcby-ps,233497
9
9
  chellow/national_grid.py,sha256=0lckRMF-udVa0VWzCOlcHx36Su0628fI4Fkvk2ttUWo,4409
10
10
  chellow/proxy.py,sha256=Mzssi9nTf6s_G4RSn8k5oAHqzVYIxMsfbudj1amYucI,1387
11
- chellow/rate_server.py,sha256=iW8cIDSr_fHvxJz5506ua6UxWnJ92zb2vRBmeoP36qk,5540
11
+ chellow/rate_server.py,sha256=xVk15pdSovcD8K8BWcOmjwo_L3a8LYry7L2Gvw56OEQ,5696
12
12
  chellow/testing.py,sha256=1TvNEPjX_VRPDifJWRFJw_8gg0RCsEpYVHkspQ1diJw,3913
13
13
  chellow/utils.py,sha256=IHC4Pcd_9CRbmJXAOlDvTyAcUoaWeLSH37zgjqVYYl4,18981
14
- chellow/views.py,sha256=EB4Af5F3alq-98iPdlTUh09bJWP9a1SMNX-vhmJr2AQ,83449
14
+ chellow/views.py,sha256=luCwKmgvEk2AFaFC1deBG1nTw6YGXjSJtlwAq2yLJh8,83492
15
15
  chellow/e/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  chellow/e/aahedc.py,sha256=DUrYAlrn4jzf6y6C2wivxlFosdVIibG69BWy_KMekGM,706
17
17
  chellow/e/bill_importer.py,sha256=BHrQkcvlOh27k0KexHA8nWJGcHGGpewbkkpncmxbAc4,7183
@@ -33,8 +33,8 @@ chellow/e/ro.py,sha256=A74nFxitFCZ-oLmYzPza54e328VKcqv8L2wVGilaUjA,696
33
33
  chellow/e/scenario.py,sha256=IuyE494XaBLq3FW7NdJePD6J4cTzPogfACO6dThiY00,23239
34
34
  chellow/e/system_price.py,sha256=IPBLSRPzGA3yca4tpR8PJemwPbgqVjn1WnljOMUyWnA,8145
35
35
  chellow/e/tlms.py,sha256=gXBZTHXqGVcaTGHaYGVA5Ir5pzoBDqFC1Kl1mQ0IDqU,9549
36
- chellow/e/tnuos.py,sha256=6T44N6Qg-w3lKnfl8R1vA1cwDZxnbVpce7L1G9u9FDU,16527
37
- chellow/e/views.py,sha256=5pp-sbUHaiQ1N0RgY73XQbHlqrZP3y64HrZgPTmFxE4,180225
36
+ chellow/e/tnuos.py,sha256=gFvNgibycspsyD3I8xxBWPjvyWJfkAiDRMbLenCpEgQ,18947
37
+ chellow/e/views.py,sha256=21VRz7gS1liLxzG1ZOD5hkIbsDCTYhF8KU2wdCEKiHs,178868
38
38
  chellow/e/bill_parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  chellow/e/bill_parsers/activity_mop_stark_xlsx.py,sha256=v1s4O8phVJVn9sOs9HKrKYcECAP0ApnUgqCaa2ARYiQ,4234
40
40
  chellow/e/bill_parsers/annual_mop_stark_xlsx.py,sha256=4dAWjaxsDnnGBnRAjgFe7IZLxIcLMGiTuXh1uqNnnlQ,4382
@@ -45,7 +45,7 @@ chellow/e/bill_parsers/engie_xls.py,sha256=tk5EAZjv5cKuB1R7OVAcLUVvCZTWAs8IsoyGb
45
45
  chellow/e/bill_parsers/gdf_csv.py,sha256=ZfK3Oc6oP28p_P9DIevLNB_zW2WLcEJ3Lvb1gL310YU,7382
46
46
  chellow/e/bill_parsers/haven_csv.py,sha256=Ft81mqHTbCQl6dMLkLin777vAX2T999Q_4fkNwl-naM,13606
47
47
  chellow/e/bill_parsers/haven_edi.py,sha256=eN40WL--JkX7TNIefgZohYv0BQ8vOm6AqkWlJSW5Mmk,16188
48
- chellow/e/bill_parsers/haven_edi_tprs.py,sha256=2hxOFv7neoh3Q_Q12dp5KpnsnE2NY1imZQk1va6AKAo,10648
48
+ chellow/e/bill_parsers/haven_edi_tprs.py,sha256=e1zVw5sWyGPEO5Ua-vmyUvUO-STn2DSNOxp1s5F914I,10701
49
49
  chellow/e/bill_parsers/mm.py,sha256=P4CdkskDrjmFMSDp0ehE_ichTBHGywbT_dckMxuAqQQ,1929
50
50
  chellow/e/bill_parsers/nonsettlement_dc_stark_xlsx.py,sha256=MF74mh6gdBb0lqvPyPZIv_7vsqNu_zNXWpIzlNFtl1g,4576
51
51
  chellow/e/bill_parsers/settlement_dc_stark_xlsx.py,sha256=4Dfq4N0ZOgD_x3ZJ9CnGzsLbwhS1-7aTJqFx00GCnU0,6007
@@ -63,7 +63,6 @@ chellow/gas/views.py,sha256=5xfNrKDi-lK7alkREu0P_3z7qgWz-fKW1zZ78NrBZh8,54937
63
63
  chellow/reports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  chellow/reports/report_109.py,sha256=oeoxRX8r8_XjFRCfBb4qN2OAwA_hI6SSRk8V6hKXQhA,10182
65
65
  chellow/reports/report_111.py,sha256=ySqF9gYHVVI-CXjfSz6Kfelh7ncmvcUS4WsFE4XvTLk,28029
66
- chellow/reports/report_155.py,sha256=ZXYEx8wi2FtA5ysjhX2rbMG8CQFjZQV4CrUz6pBBs0o,305
67
66
  chellow/reports/report_169.py,sha256=-zSgfrX6NjgMQGwbKaUPvcPqPHbDQ8_pL3EL33u40yA,8331
68
67
  chellow/reports/report_177.py,sha256=8-hfejbuwAohwFSbZC_VBtUUazi3hkdgA0oHvqA1St0,11499
69
68
  chellow/reports/report_181.py,sha256=oehWcNMTcCUoSRq3eEGMwVraPgB5wucll6WlVj53xHM,5027
@@ -86,10 +85,11 @@ chellow/reports/report_81.py,sha256=xULQ6NDG8yvF7qnUXDgqv4Rv-XikAzJQnBgwpqyFFTc,
86
85
  chellow/reports/report_87.py,sha256=0LIGY4gImnHOt7Dno7j4g933yid9NMW8l7WrCl5vR74,5768
87
86
  chellow/reports/report_asset_comparison.py,sha256=ictRSzmpH9Z0i67s46SyMhALEg4bYvjr4WNMRaNCQnk,6111
88
87
  chellow/reports/report_batches.py,sha256=PTLsWYZI4yJjTqUeZe0ovSDpzTOEU3zG54fkmvutm6Y,4571
88
+ chellow/reports/report_bills.py,sha256=UeKZMK2T-4s9Lj5Ef6M2P3eD4oHmXCjf2LGStYF5saA,2429
89
89
  chellow/reports/report_csv_llfcs.py,sha256=d3CWJB7bVinkn6ytu9AvPbB9TMHGg2E7LLjabu3QS3E,1852
90
90
  chellow/reports/report_csv_site_hh_data.py,sha256=u8c4n4YFdljsCF0wh_SAnkbTIVVEDhPnccJyCpCVfm8,4067
91
91
  chellow/reports/report_csv_site_snags.py,sha256=U_zg4ppg9DRetKAuaxOnirkcwtMhz2iCE3Fbq-o7AVM,2591
92
- chellow/reports/report_ecoes_comparison.py,sha256=sWQWAVZ_qv4xhAfr5zNzrs0N4m8LFih_sh4VMPaBm2Q,21201
92
+ chellow/reports/report_ecoes_comparison.py,sha256=_8HisTy77misa2beYrlaC51Mp5kI6WaabPQaVjpGkbk,21197
93
93
  chellow/reports/report_g_monthly_duration.py,sha256=lS12t4vAZIj-pD22aWPoO-n8EQBCIzzY2Qnx9SawhaQ,12217
94
94
  chellow/reports/report_g_supplies_snapshot.py,sha256=wmXsi8EduWyAw4QtpAFH5ZWkcYggKNWO3pEoG63D0LU,4571
95
95
  chellow/reports/report_g_supply_virtual_bill.py,sha256=6oRFV2ffryePM-jcabiXO5vo4fLt_wQZ2ejvlwIPa0g,3617
@@ -117,14 +117,14 @@ chellow/templates/local_report.html,sha256=pV7_0QwyQ-D3OS9LXrly5pq3qprZnwTCoq6vC
117
117
  chellow/templates/local_reports.html,sha256=4wbfVkY4wUfSSfWjxqIsvCpIsa9k7H_dGAjznrG5jNM,701
118
118
  chellow/templates/national_grid.html,sha256=8W92tsjlqPSB0J--nyFIi-wzFae9CyDr6fODXLZp8ic,991
119
119
  chellow/templates/non_core_auto_importer.html,sha256=s9SluRN1bHTHjd8GP6uFhk6LrZYG8dqBG3y94zUKe5Q,944
120
- chellow/templates/non_core_contract.html,sha256=KXvAeOAmdHQ2bmtxX6UKEZ6yZEj29HmrvzCzBBQk2d8,1275
120
+ chellow/templates/non_core_contract.html,sha256=BDld-pGs7OnBqc99i9H7WsPc5iBuyXY2AbIM3oUwxRE,1380
121
121
  chellow/templates/non_core_contract_edit.html,sha256=_EWwJdrez2uI2mA58Jf5WIYs7UfBw1xWV-Bpgliyurw,3005
122
122
  chellow/templates/non_core_contracts.html,sha256=vIrVdn4NUj58Uy17REs_fy2JBQzPkjcg63bg7q6kELg,661
123
123
  chellow/templates/non_core_rate_script.html,sha256=CqGnuWdzhk_o_2xNFcF8rgk0p7SNh0B0c3k1JzOtn98,1283
124
124
  chellow/templates/non_core_rate_script_add.html,sha256=Qx8_cYFRQZrXSyR3uf_8OxUAUz3PqyYc4V11lTU18sE,690
125
125
  chellow/templates/non_core_rate_script_edit.html,sha256=14jFqalqmFg9_2LUlEy7Q4yUx4pVGTHc9fbYnpm-3Y8,1868
126
126
  chellow/templates/object_summary.html,sha256=VGCAAYcWTzgNfL0mxEef2Fa8dP3FcBhzj0fmF82_S4I,244
127
- chellow/templates/rate_server.html,sha256=ISul3S3C5_TYtMXJeHMqpcsPEa5Ky7uoRw0DPcR65Wc,4455
127
+ chellow/templates/rate_server.html,sha256=4f6V8PRW-bn2BQxX-BZqNQZf1w6GJPD-L4AxpSGQWZE,4460
128
128
  chellow/templates/report_run.html,sha256=O_wjIu43S-mKVyZyku3dJJdvyck3rAgEdhw59TsCcK0,4040
129
129
  chellow/templates/report_run_asset_comparison.html,sha256=VYCCUmIC7Mfe7uuaAHb6ihiK6zsqeTlQbzgtzLqR3zg,2305
130
130
  chellow/templates/report_run_bill_check.html,sha256=yAVFBi0zdamnlRpO2VqKY3UAmAJchSjwSmrmaITLmEA,5055
@@ -275,7 +275,7 @@ chellow/templates/e/source.html,sha256=6cLjZWKS2w9Zy1C4hzi1lTKXAdKKFQ8wSxbwAjhP3
275
275
  chellow/templates/e/sources.html,sha256=AW_ysj5ZzArTLz0-FWappMsUEU1AO9gw7D4XSHbINu4,453
276
276
  chellow/templates/e/ssc.html,sha256=NiTbn9yLYYG_DV4j9S73rnIVmzTAzTbyaXomverHNnI,811
277
277
  chellow/templates/e/sscs.html,sha256=Ul0rW5Wa3romdSCV3JL54u3iSxY1J-8RE8yMxANiQAU,918
278
- chellow/templates/e/supplier_batch.html,sha256=c1S-wdKuf1Q1__6yqpXa7J_iTfres9HBQHsH-AyjqLI,5647
278
+ chellow/templates/e/supplier_batch.html,sha256=jKJR8dKYCy6rA47GI02Sv4c1cuKytvma9_IRU4BtT7U,5647
279
279
  chellow/templates/e/supplier_batch_add.html,sha256=RabJ20yLpsF_npSLL5aeLlPDa2tL99fENaIzDYZJy1w,1240
280
280
  chellow/templates/e/supplier_batch_edit.html,sha256=imgRWTg4W0Db8BwqYnN8ZYno5SBZxRTj2Mkhi113HQg,1420
281
281
  chellow/templates/e/supplier_batch_file.html,sha256=fohdthY3ibO9a_2BJsYWyJhZL369F0gaUV7McFzWhMQ,1226
@@ -350,6 +350,6 @@ chellow/templates/g/supply_note_edit.html,sha256=6UQf_qbhFDys3cVsTp-c7ABWZpggW9R
350
350
  chellow/templates/g/supply_notes.html,sha256=WR3YwGh_qqTklSJ7JqWX6BKBc9rk_jMff4RiWZiF2CM,936
351
351
  chellow/templates/g/unit.html,sha256=KouNVU0-i84afANkLQ_heJ0uDfJ9H5A05PuLqb8iCN8,438
352
352
  chellow/templates/g/units.html,sha256=p5Nd-lAIboKPEOO6N451hx1bcKxMg4BDODnZ-43MmJc,441
353
- chellow-1682689432.0.0.dist-info/METADATA,sha256=0geMd95rEXV3TRUMqtqJKO7sbtaeaOvE8JmQK90raKg,12160
354
- chellow-1682689432.0.0.dist-info/WHEEL,sha256=9MIigYJ7D5sOqAPqr0-o6tSMY_nQ7c6kvtvyeUB99YQ,87
355
- chellow-1682689432.0.0.dist-info/RECORD,,
353
+ chellow-1683187792.0.0.dist-info/METADATA,sha256=i5MmNce3-lf5Na81v5kkUbwEtH8V1cDKKUbX7vQr1Ig,12160
354
+ chellow-1683187792.0.0.dist-info/WHEEL,sha256=9MIigYJ7D5sOqAPqr0-o6tSMY_nQ7c6kvtvyeUB99YQ,87
355
+ chellow-1683187792.0.0.dist-info/RECORD,,
@@ -1,11 +0,0 @@
1
- from datetime import datetime as Datetime
2
-
3
- from dateutil.relativedelta import relativedelta
4
-
5
- from flask import render_template
6
-
7
-
8
- def do_get(sess):
9
- init = Datetime.utcnow()
10
- init = Datetime(init.year, init.month, 1) - relativedelta(months=1)
11
- return render_template("report_155.html", init=init)