chellow 1767090201.0.0__tar.gz → 1767956592.0.0__tar.gz

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.
Files changed (550) hide show
  1. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/PKG-INFO +1 -1
  2. chellow-1767956592.0.0/VERSION +1 -0
  3. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/aahedc.py +8 -6
  4. chellow-1767956592.0.0/chellow/e/issues.py +31 -0
  5. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/tnuos.py +8 -6
  6. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/views.py +302 -116
  7. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/national_grid.py +28 -5
  8. chellow-1767956592.0.0/chellow/reports/report_issues.py +136 -0
  9. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/static/css/chellow.css +4 -0
  10. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_issue.html +6 -0
  11. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_issue_attach_supply.html +1 -1
  12. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_issue_edit.html +16 -3
  13. chellow-1767956592.0.0/chellow/templates/e/dc_issues.html +34 -0
  14. chellow-1767956592.0.0/chellow/templates/e/issues.html +56 -0
  15. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_contract.html +3 -0
  16. chellow-1767956592.0.0/chellow/templates/e/mop_entry_add.html +33 -0
  17. chellow-1767956592.0.0/chellow/templates/e/mop_entry_edit.html +39 -0
  18. chellow-1767956592.0.0/chellow/templates/e/mop_issue.html +90 -0
  19. chellow-1767956592.0.0/chellow/templates/e/mop_issue_add.html +26 -0
  20. chellow-1767956592.0.0/chellow/templates/e/mop_issue_attach_supply.html +26 -0
  21. chellow-1767956592.0.0/chellow/templates/e/mop_issue_edit.html +50 -0
  22. chellow-1767956592.0.0/chellow/templates/e/mop_issues.html +34 -0
  23. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_issue.html +13 -4
  24. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_issue_attach_supply.html +1 -1
  25. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_issue_edit.html +9 -0
  26. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply.html +18 -0
  27. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/home.html +1 -0
  28. chellow-1767956592.0.0/chellow/templates/reports/issues.html +117 -0
  29. chellow-1767956592.0.0/chellow/templates/user.html +32 -0
  30. chellow-1767956592.0.0/chellow/templates/user_edit.html +78 -0
  31. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/views.py +79 -25
  32. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_tnuos.py +1 -3
  33. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_views.py +0 -18
  34. chellow-1767956592.0.0/test/reports/test_report_issues.py +104 -0
  35. chellow-1767090201.0.0/VERSION +0 -1
  36. chellow-1767090201.0.0/chellow/templates/e/dc_issues.html +0 -78
  37. chellow-1767090201.0.0/chellow/templates/user.html +0 -89
  38. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/.ebextensions/chellow.config +0 -0
  39. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/.github/workflows/chellow.yml +0 -0
  40. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/.gitignore +0 -0
  41. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/README.md +0 -0
  42. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/application.py +0 -0
  43. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/bin/chellow_start.sh +0 -0
  44. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/bin/chellow_upgrader.sh +0 -0
  45. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/__init__.py +0 -0
  46. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/api.py +0 -0
  47. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/bank_holidays.py +0 -0
  48. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/dloads.py +0 -0
  49. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/__init__.py +0 -0
  50. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_importer.py +0 -0
  51. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/__init__.py +0 -0
  52. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/activity_mop_stark_xlsx.py +0 -0
  53. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/amr_dc_stark_xlsx.py +0 -0
  54. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/annual_mop_stark_xlsx.py +0 -0
  55. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/bgb_edi.py +0 -0
  56. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/csv.py +0 -0
  57. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/drax_edi.py +0 -0
  58. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/edf_export_xlsx.py +0 -0
  59. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/engie_edi.py +0 -0
  60. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/engie_export_xlsx.py +0 -0
  61. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/engie_xls.py +0 -0
  62. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/engie_xlsx.py +0 -0
  63. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/gdf_csv.py +0 -0
  64. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/haven_csv.py +0 -0
  65. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/haven_edi.py +0 -0
  66. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/haven_edi_tprs.py +0 -0
  67. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/mm.py +0 -0
  68. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/nonsettlement_dc_stark_xlsx.py +0 -0
  69. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/settlement_dc_stark_xlsx.py +0 -0
  70. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/sse_edi.py +0 -0
  71. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bill_parsers/sww_xls.py +0 -0
  72. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bmarketidx.py +0 -0
  73. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/bsuos.py +0 -0
  74. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/ccl.py +0 -0
  75. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/cfd.py +0 -0
  76. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/computer.py +0 -0
  77. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/dno_rate_parser.py +0 -0
  78. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/duos.py +0 -0
  79. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/elexon.py +0 -0
  80. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/energy_management.py +0 -0
  81. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/hh_importer.py +0 -0
  82. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/hh_parser_bg_csv.py +0 -0
  83. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/hh_parser_df2.py +0 -0
  84. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/hh_parser_edf_csv.py +0 -0
  85. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/hh_parser_schneider_csv.py +0 -0
  86. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/hh_parser_schneider_xlsx.py +0 -0
  87. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/hh_parser_simple_csv.py +0 -0
  88. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/hh_parser_vital_xlsx.py +0 -0
  89. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/isd.py +0 -0
  90. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/lafs.py +0 -0
  91. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/lcc.py +0 -0
  92. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/mdd_importer.py +0 -0
  93. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/rab.py +0 -0
  94. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/rcrc.py +0 -0
  95. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/ro.py +0 -0
  96. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/scenario.py +0 -0
  97. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/system_price.py +0 -0
  98. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/tlms.py +0 -0
  99. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/e/triad.py +0 -0
  100. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/edi_lib.py +0 -0
  101. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/fake_batch_updater.py +0 -0
  102. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/bill_import.py +0 -0
  103. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/bill_parser_bgs_xlsx.py +0 -0
  104. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/bill_parser_csv.py +0 -0
  105. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/bill_parser_engie_edi.py +0 -0
  106. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/bill_parser_total_edi.py +0 -0
  107. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/ccl.py +0 -0
  108. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/cv.py +0 -0
  109. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/dn_rate_parser.py +0 -0
  110. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/engine.py +0 -0
  111. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/transportation.py +0 -0
  112. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/gas/views.py +0 -0
  113. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/general_import.py +0 -0
  114. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/models.py +0 -0
  115. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/proxy.py +0 -0
  116. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/rate_server.py +0 -0
  117. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/__init__.py +0 -0
  118. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_109.py +0 -0
  119. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_111.py +0 -0
  120. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_169.py +0 -0
  121. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_181.py +0 -0
  122. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_183.py +0 -0
  123. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_187.py +0 -0
  124. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_219.py +0 -0
  125. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_231.py +0 -0
  126. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_241.py +0 -0
  127. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_247.py +0 -0
  128. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_29.py +0 -0
  129. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_291.py +0 -0
  130. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_33.py +0 -0
  131. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_387.py +0 -0
  132. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_41.py +0 -0
  133. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_429.py +0 -0
  134. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_59.py +0 -0
  135. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_81.py +0 -0
  136. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_87.py +0 -0
  137. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_asset_comparison.py +0 -0
  138. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_batches.py +0 -0
  139. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_bills.py +0 -0
  140. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_channel_snags.py +0 -0
  141. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_csv_llfcs.py +0 -0
  142. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_csv_site_hh_data.py +0 -0
  143. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_csv_site_snags.py +0 -0
  144. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_ecoes_comparison.py +0 -0
  145. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_g_monthly_duration.py +0 -0
  146. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_g_supplies_snapshot.py +0 -0
  147. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_g_supply_virtual_bill.py +0 -0
  148. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_g_virtual_bills.py +0 -0
  149. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_g_virtual_bills_hh.py +0 -0
  150. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_missing_bills.py +0 -0
  151. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_sscs.py +0 -0
  152. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/reports/report_supply_contacts.py +0 -0
  153. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/rrun.py +0 -0
  154. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/static/images/favicon.svg +0 -0
  155. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/static/images/favicon_test.svg +0 -0
  156. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/static/images/logo.png +0 -0
  157. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/static/js/htmx.min.js +0 -0
  158. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/403.html +0 -0
  159. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/base.html +0 -0
  160. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/bill_type.html +0 -0
  161. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/bill_types.html +0 -0
  162. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/chain.html +0 -0
  163. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/csv_sites_monthly_duration.html +0 -0
  164. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/dashboard.html +0 -0
  165. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/downloads.html +0 -0
  166. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/asset_comparison.html +0 -0
  167. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/channel.html +0 -0
  168. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/channel_add.html +0 -0
  169. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/channel_edit.html +0 -0
  170. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/channel_snag.html +0 -0
  171. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/channel_snag_edit.html +0 -0
  172. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/channel_snags.html +0 -0
  173. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/comm.html +0 -0
  174. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/comms.html +0 -0
  175. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/cop.html +0 -0
  176. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/cops.html +0 -0
  177. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/csv_bills.html +0 -0
  178. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/csv_register_reads.html +0 -0
  179. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/csv_sites_hh_data.html +0 -0
  180. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/csv_sites_triad.html +0 -0
  181. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/csv_supplies_hh_data.html +0 -0
  182. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/csv_supplies_snapshot.html +0 -0
  183. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/csv_supplies_triad.html +0 -0
  184. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_auto_importer.html +0 -0
  185. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_batch.html +0 -0
  186. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_batch_add.html +0 -0
  187. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_batch_edit.html +0 -0
  188. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_batch_file.html +0 -0
  189. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_batch_file_edit.html +0 -0
  190. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_batch_upload_file.html +0 -0
  191. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_batches.html +0 -0
  192. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_batches_edit.html +0 -0
  193. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_bill.html +0 -0
  194. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_bill_add.html +0 -0
  195. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_bill_edit.html +0 -0
  196. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_bill_import.html +0 -0
  197. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_bill_import_contract.html +0 -0
  198. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_bill_imports.html +0 -0
  199. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_contract.html +0 -0
  200. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_contract_edit.html +0 -0
  201. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_contract_hh_import.html +0 -0
  202. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_contract_hh_imports.html +0 -0
  203. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_contract_properties.html +0 -0
  204. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_contract_properties_edit.html +0 -0
  205. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_contracts.html +0 -0
  206. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_contracts_add.html +0 -0
  207. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_element.html +0 -0
  208. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_element_add.html +0 -0
  209. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_element_edit.html +0 -0
  210. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_entry_add.html +0 -0
  211. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_entry_edit.html +0 -0
  212. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_issue_add.html +0 -0
  213. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_rate_script.html +0 -0
  214. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_rate_script_add.html +0 -0
  215. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dc_rate_script_edit.html +0 -0
  216. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dno.html +0 -0
  217. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dno_rate_script.html +0 -0
  218. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dno_rate_script_add.html +0 -0
  219. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dno_rate_script_edit.html +0 -0
  220. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dnos.html +0 -0
  221. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dtc_meter_type.html +0 -0
  222. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/dtc_meter_types.html +0 -0
  223. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/duration_report.html +0 -0
  224. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/elexon.html +0 -0
  225. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/em_hh_data.html +0 -0
  226. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/em_months.html +0 -0
  227. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/em_site.html +0 -0
  228. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/em_totals.html +0 -0
  229. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/energisation_status.html +0 -0
  230. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/energisation_statuses.html +0 -0
  231. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/era_edit.html +0 -0
  232. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/era_edit_form.html +0 -0
  233. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/era_supplier_bill_add.html +0 -0
  234. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/generator_type.html +0 -0
  235. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/generator_types.html +0 -0
  236. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/gsp_group.html +0 -0
  237. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/gsp_groups.html +0 -0
  238. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/hh_datum_edit.html +0 -0
  239. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/isd.html +0 -0
  240. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/lafs.html +0 -0
  241. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/lcc.html +0 -0
  242. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/llfc.html +0 -0
  243. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/llfc_edit.html +0 -0
  244. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/llfcs.html +0 -0
  245. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/markdown_docs.html +0 -0
  246. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/market_role.html +0 -0
  247. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/market_roles.html +0 -0
  248. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/meter_payment_type.html +0 -0
  249. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/meter_payment_types.html +0 -0
  250. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/meter_type.html +0 -0
  251. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/meter_types.html +0 -0
  252. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_batch.html +0 -0
  253. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_batch_add.html +0 -0
  254. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_batch_edit.html +0 -0
  255. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_batch_file.html +0 -0
  256. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_batch_file_edit.html +0 -0
  257. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_batch_upload_file.html +0 -0
  258. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_batches.html +0 -0
  259. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_batches_edit.html +0 -0
  260. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_bill.html +0 -0
  261. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_bill_add.html +0 -0
  262. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_bill_edit.html +0 -0
  263. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_bill_import.html +0 -0
  264. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_bill_import_contract.html +0 -0
  265. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_bill_imports.html +0 -0
  266. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_contract_add.html +0 -0
  267. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_contract_edit.html +0 -0
  268. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_contracts.html +0 -0
  269. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_element.html +0 -0
  270. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_element_add.html +0 -0
  271. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_element_edit.html +0 -0
  272. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_rate_script.html +0 -0
  273. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_rate_script_add.html +0 -0
  274. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mop_rate_script_edit.html +0 -0
  275. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc.html +0 -0
  276. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc_llfc.html +0 -0
  277. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc_llfc_ssc.html +0 -0
  278. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc_llfc_ssc_pc.html +0 -0
  279. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc_llfc_ssc_pcs.html +0 -0
  280. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc_llfc_sscs.html +0 -0
  281. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc_llfcs.html +0 -0
  282. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc_participant.html +0 -0
  283. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc_participants.html +0 -0
  284. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc_ssc.html +0 -0
  285. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtc_sscs.html +0 -0
  286. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/mtcs.html +0 -0
  287. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/ods_monthly_duration.html +0 -0
  288. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/participant.html +0 -0
  289. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/participants.html +0 -0
  290. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/parties.html +0 -0
  291. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/party.html +0 -0
  292. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/pc.html +0 -0
  293. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/pcs.html +0 -0
  294. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/read_add.html +0 -0
  295. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/read_edit.html +0 -0
  296. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/read_type.html +0 -0
  297. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/read_types.html +0 -0
  298. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/scenario.html +0 -0
  299. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/scenario_add.html +0 -0
  300. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/scenario_docs.html +0 -0
  301. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/scenario_edit.html +0 -0
  302. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/scenarios.html +0 -0
  303. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/site_add_e_supply.html +0 -0
  304. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/site_add_e_supply_form.html +0 -0
  305. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/site_hh_data.html +0 -0
  306. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/site_site_snags.html +0 -0
  307. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/site_snag.html +0 -0
  308. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/site_snag_edit.html +0 -0
  309. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/site_snags.html +0 -0
  310. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/site_snags_edit.html +0 -0
  311. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/source.html +0 -0
  312. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/sources.html +0 -0
  313. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/ssc.html +0 -0
  314. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/sscs.html +0 -0
  315. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_batch.html +0 -0
  316. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_batch_add.html +0 -0
  317. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_batch_edit.html +0 -0
  318. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_batch_file.html +0 -0
  319. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_batch_file_add.html +0 -0
  320. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_batch_file_edit.html +0 -0
  321. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_batch_upload_file.html +0 -0
  322. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_batches.html +0 -0
  323. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_batches_edit.html +0 -0
  324. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_bill.html +0 -0
  325. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_bill_add.html +0 -0
  326. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_bill_edit.html +0 -0
  327. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_bill_import.html +0 -0
  328. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_bill_import_contract.html +0 -0
  329. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_contract.html +0 -0
  330. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_contract_add.html +0 -0
  331. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_contract_edit.html +0 -0
  332. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_contracts.html +0 -0
  333. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_element.html +0 -0
  334. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_element_add.html +0 -0
  335. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_element_edit.html +0 -0
  336. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_entry_add.html +0 -0
  337. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_entry_edit.html +0 -0
  338. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_issue_add.html +0 -0
  339. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_issues.html +0 -0
  340. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_rate_script.html +0 -0
  341. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_rate_script_add.html +0 -0
  342. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supplier_rate_script_edit.html +0 -0
  343. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply_edit.html +0 -0
  344. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply_eras.html +0 -0
  345. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply_hh_data.html +0 -0
  346. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply_issues.html +0 -0
  347. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply_months.html +0 -0
  348. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply_note_add.html +0 -0
  349. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply_note_edit.html +0 -0
  350. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply_notes.html +0 -0
  351. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply_post.html +0 -0
  352. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/supply_virtual_bill.html +0 -0
  353. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/tpr.html +0 -0
  354. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/e/tprs.html +0 -0
  355. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/edi_viewer.html +0 -0
  356. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/fake_batch_updater.html +0 -0
  357. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/batch.html +0 -0
  358. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/batch_add.html +0 -0
  359. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/batch_edit.html +0 -0
  360. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/batches.html +0 -0
  361. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/bill.html +0 -0
  362. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/bill_add.html +0 -0
  363. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/bill_edit.html +0 -0
  364. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/bill_import.html +0 -0
  365. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/bill_imports.html +0 -0
  366. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/dn.html +0 -0
  367. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/dns.html +0 -0
  368. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/era_edit.html +0 -0
  369. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/exit_zone.html +0 -0
  370. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/industry_auto_importer.html +0 -0
  371. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/industry_contract.html +0 -0
  372. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/industry_contract_add.html +0 -0
  373. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/industry_contract_edit.html +0 -0
  374. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/industry_contracts.html +0 -0
  375. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/industry_rate_script.html +0 -0
  376. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/industry_rate_script_add.html +0 -0
  377. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/industry_rate_script_edit.html +0 -0
  378. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/ldz.html +0 -0
  379. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/read_add.html +0 -0
  380. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/read_edit.html +0 -0
  381. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/read_type.html +0 -0
  382. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/read_types.html +0 -0
  383. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/reading_frequencies.html +0 -0
  384. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/reading_frequency.html +0 -0
  385. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/reports.html +0 -0
  386. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supplier_contract.html +0 -0
  387. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supplier_contract_add.html +0 -0
  388. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supplier_contract_edit.html +0 -0
  389. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supplier_contracts.html +0 -0
  390. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supplier_rate_script.html +0 -0
  391. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supplier_rate_script_add.html +0 -0
  392. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supplier_rate_script_edit.html +0 -0
  393. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supplies.html +0 -0
  394. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supply.html +0 -0
  395. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supply_edit.html +0 -0
  396. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supply_note_add.html +0 -0
  397. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supply_note_edit.html +0 -0
  398. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/supply_notes.html +0 -0
  399. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/unit.html +0 -0
  400. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/g/units.html +0 -0
  401. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/general_import.html +0 -0
  402. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/general_imports.html +0 -0
  403. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/input_date.html +0 -0
  404. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/local_report.html +0 -0
  405. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/local_reports.html +0 -0
  406. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/macros.html +0 -0
  407. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/national_grid.html +0 -0
  408. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/non_core_auto_importer.html +0 -0
  409. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/non_core_contract.html +0 -0
  410. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/non_core_contract_edit.html +0 -0
  411. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/non_core_contracts.html +0 -0
  412. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/non_core_rate_script.html +0 -0
  413. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/non_core_rate_script_add.html +0 -0
  414. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/non_core_rate_script_edit.html +0 -0
  415. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/object_summary.html +0 -0
  416. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/rate_server.html +0 -0
  417. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run.html +0 -0
  418. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run_asset_comparison.html +0 -0
  419. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run_bill_check.html +0 -0
  420. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run_ecoes_comparison.html +0 -0
  421. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run_g_bill_check.html +0 -0
  422. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run_missing_e_bills.html +0 -0
  423. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run_monthly_duration_org.html +0 -0
  424. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run_row.html +0 -0
  425. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run_row_bill_check.html +0 -0
  426. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run_row_g_bill_check.html +0 -0
  427. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_run_supply_contacts.html +0 -0
  428. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/report_runs.html +0 -0
  429. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/reports/channel_snags.html +0 -0
  430. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/scenario.html +0 -0
  431. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/scenario_add.html +0 -0
  432. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/scenario_docs.html +0 -0
  433. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/scenario_edit.html +0 -0
  434. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/scenarios.html +0 -0
  435. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/site.html +0 -0
  436. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/site_add.html +0 -0
  437. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/site_edit.html +0 -0
  438. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/site_gen_graph.html +0 -0
  439. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/site_months.html +0 -0
  440. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/site_used_graph.html +0 -0
  441. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/sites.html +0 -0
  442. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/supplies.html +0 -0
  443. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/system.html +0 -0
  444. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/tester.html +0 -0
  445. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/user_roles.html +0 -0
  446. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/templates/users.html +0 -0
  447. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/testing.py +0 -0
  448. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/chellow/utils.py +0 -0
  449. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/gpl.txt +0 -0
  450. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/pyproject.toml +0 -0
  451. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/requirements.txt +0 -0
  452. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/systemd/chellow.service +0 -0
  453. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/systemd/chellow_upgrader.service +0 -0
  454. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/systemd/chellow_upgrader.timer +0 -0
  455. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/conftest.py +0 -0
  456. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/__init__.py +0 -0
  457. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_activity_mop_stark_xlsx.py +0 -0
  458. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_annual_mop_stark_xlsx.py +0 -0
  459. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_amr_dc_stark_xlsx.py +0 -0
  460. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_csv.py +0 -0
  461. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_drax_edi.py +0 -0
  462. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_edf_export_xlsx.py +0 -0
  463. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_engie_edi.py +0 -0
  464. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_engie_xls.py +0 -0
  465. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_engie_xlsx.py +0 -0
  466. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_haven_csv.py +0 -0
  467. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_haven_edi.py +0 -0
  468. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_haven_edi_tprs.py +0 -0
  469. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_mm.py +0 -0
  470. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_nonsettlement_dc_stark_xlsx.py +0 -0
  471. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_settlement_dc_stark_xlsx.py +0 -0
  472. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_sse_edi.py +0 -0
  473. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/bill_parsers/test_bill_parser_sww_xls.py +0 -0
  474. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/system_price/prices.xls +0 -0
  475. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/system_price/test_system_price.py +0 -0
  476. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_aahedc.py +0 -0
  477. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_bill_importer.py +0 -0
  478. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_bsuos.py +0 -0
  479. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_ccl.py +0 -0
  480. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_cfd.py +0 -0
  481. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_computer.py +0 -0
  482. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_dno_rate_parser.py +0 -0
  483. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_duos.py +0 -0
  484. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_energy_management.py +0 -0
  485. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_hh_importer.py +0 -0
  486. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_hh_parser_df2.py +0 -0
  487. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_hh_parser_vital_xlsx.py +0 -0
  488. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_lafs.py +0 -0
  489. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_mdd_importer.py +0 -0
  490. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_rcrc_importer.py +0 -0
  491. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_ro.py +0 -0
  492. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_scenario.py +0 -0
  493. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_tlms.py +0 -0
  494. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/e/test_triad.py +0 -0
  495. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/gas/bill_parsers/test_bill_parser_bgs_xlsx.py +0 -0
  496. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/gas/bill_parsers/test_g_bill_parser_engie_edi.py +0 -0
  497. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/gas/bill_parsers/test_g_bill_parser_total_edi.py +0 -0
  498. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/gas/test_dn_rate_parser.py +0 -0
  499. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/gas/test_engine.py +0 -0
  500. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/gas/test_g_cv.py +0 -0
  501. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/gas/test_gas_views.py +0 -0
  502. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/gas/test_transportation.py +0 -0
  503. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_g_monthly_duration.py +0 -0
  504. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_g_supplies_snapshot.py +0 -0
  505. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_g_supply_virtual_bill.py +0 -0
  506. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_g_virtual_bills.py +0 -0
  507. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_g_virtual_bills_hh.py +0 -0
  508. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_109.py +0 -0
  509. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_111.py +0 -0
  510. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_169.py +0 -0
  511. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_181.py +0 -0
  512. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_183.py +0 -0
  513. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_187.py +0 -0
  514. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_219.py +0 -0
  515. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_231.py +0 -0
  516. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_241.py +0 -0
  517. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_247.py +0 -0
  518. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_29.py +0 -0
  519. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_291.py +0 -0
  520. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_33.py +0 -0
  521. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_387.py +0 -0
  522. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_41.py +0 -0
  523. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_429.py +0 -0
  524. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_59.py +0 -0
  525. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_81.py +0 -0
  526. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_87.py +0 -0
  527. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_asset_comparison.py +0 -0
  528. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_batches.py +0 -0
  529. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_bills.py +0 -0
  530. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_channel_snags.py +0 -0
  531. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_csv_llfcs.py +0 -0
  532. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_csv_site_hh_data.py +0 -0
  533. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_csv_site_snags.py +0 -0
  534. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_dno_vl_parser.py +0 -0
  535. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_ecoes_comparison.py +0 -0
  536. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_missing_e_bills.py +0 -0
  537. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_sscs.py +0 -0
  538. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/reports/test_report_supply_contacts.py +0 -0
  539. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_chellow.py +0 -0
  540. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_dloads.py +0 -0
  541. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_edi_lib.py +0 -0
  542. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_edi_viewer.py +0 -0
  543. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_fake_batch_updater.py +0 -0
  544. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_general_import.py +0 -0
  545. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_models.py +0 -0
  546. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_rate_server.py +0 -0
  547. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_testing.py +0 -0
  548. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_utils.py +0 -0
  549. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/test_views.py +0 -0
  550. {chellow-1767090201.0.0 → chellow-1767956592.0.0}/test/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chellow
3
- Version: 1767090201.0.0
3
+ Version: 1767956592.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)
@@ -0,0 +1 @@
1
+ __version__ = "1767956592.0.0"
@@ -3,7 +3,7 @@ from decimal import Decimal
3
3
  from sqlalchemy import select
4
4
 
5
5
  from chellow.models import Contract, RateScript
6
- from chellow.national_grid import api_get
6
+ from chellow.national_grid import csv_get, parse_date
7
7
  from chellow.utils import ct_datetime, to_utc
8
8
 
9
9
 
@@ -36,9 +36,11 @@ def national_grid_import(sess, log, set_progress, s):
36
36
  sess, contract_name, "", {}, to_utc(ct_datetime(1996, 4, 1)), None, {}
37
37
  )
38
38
 
39
- params = {"sql": """SELECT * FROM "ffd29cc8-3c55-4e83-aa0e-73212d4fedba" """}
40
- res_j = api_get(s, "datastore_search_sql", params=params)
41
- for record in res_j["result"]["records"]:
39
+ path = (
40
+ "dataset/43d94335-c97f-4939-a8b9-607d2cfb3734/resource/"
41
+ "ffd29cc8-3c55-4e83-aa0e-73212d4fedba/download"
42
+ )
43
+ for record in csv_get(s, path):
42
44
  # {
43
45
  # "_full_text": "'-07':4 '-15':5 '0.012247':7 '0.028 '2026':2 'final':1",
44
46
  # "Published Date": "2025-07-15",
@@ -71,11 +73,11 @@ def national_grid_import(sess, log, set_progress, s):
71
73
  except KeyError:
72
74
  rs_record = rs_script["record"] = {}
73
75
 
74
- record_published_date = record["Published Date"]
76
+ record_published_date = parse_date(record["Published Date"])
75
77
 
76
78
  if (
77
79
  "Published Date" not in rs_record
78
- or rs_record["Published Date"] < record_published_date
80
+ or parse_date(rs_record["Published Date"]) < record_published_date
79
81
  ):
80
82
  rs_script["record"] = record
81
83
  rs_script["aahedc_gbp_per_gsp_kwh"] = Decimal(
@@ -0,0 +1,31 @@
1
+ from sqlalchemy import select
2
+
3
+ from chellow.models import Supply, User
4
+
5
+
6
+ def make_issue_bundles(sess, issues):
7
+ return [make_issue_bundle(sess, issue) for issue in issues]
8
+
9
+
10
+ def make_issue_bundle(sess, issue):
11
+ props = issue.properties
12
+ supply_bundles = []
13
+ if "owner_id" in props:
14
+ owner = User.get_by_id(sess, props["owner_id"])
15
+ else:
16
+ owner = None
17
+ bundle = {
18
+ "issue": issue,
19
+ "latest_entry": None if len(issue.entries) == 0 else issue.entries[-1],
20
+ "supplies": supply_bundles,
21
+ "owner": owner,
22
+ }
23
+ for supply in sess.scalars(
24
+ select(Supply)
25
+ .where(Supply.id.in_(props.get("supply_ids", [])))
26
+ .order_by(Supply.id)
27
+ ).all():
28
+ era = supply.eras[0]
29
+ site = era.get_physical_site(sess)
30
+ supply_bundles.append({"supply": supply, "era": supply.eras[0], "site": site})
31
+ return bundle
@@ -2,7 +2,7 @@ from sqlalchemy import select
2
2
 
3
3
 
4
4
  from chellow.models import Contract, RateScript
5
- from chellow.national_grid import api_get
5
+ from chellow.national_grid import csv_get, parse_date
6
6
  from chellow.utils import (
7
7
  ct_datetime,
8
8
  to_utc,
@@ -101,9 +101,11 @@ def national_grid_import(sess, log, set_progress, s):
101
101
  )
102
102
  sess.commit()
103
103
 
104
- params = {"sql": """SELECT * FROM "dcca94fd-343e-4d4e-8c5d-66009dec4ad3" """}
105
- res_j = api_get(s, "datastore_search_sql", params=params)
106
- for record in res_j["result"]["records"]:
104
+ path = (
105
+ "dataset/eaef4708-1100-4ad9-98d5-d892f3c9a56c/resource/"
106
+ "dcca94fd-343e-4d4e-8c5d-66009dec4ad3/download"
107
+ )
108
+ for record in csv_get(s, path):
107
109
  # {
108
110
  # "_id": 1,
109
111
  # "Publication": "Final",
@@ -134,10 +136,10 @@ def national_grid_import(sess, log, set_progress, s):
134
136
  bands = rs_script["bands"] = {}
135
137
 
136
138
  record_key = record["TDR Band"]
137
- record_published_date = record["Published_Date"]
139
+ record_published_date = parse_date(record["Published_Date"])
138
140
 
139
141
  band = bands.get(record_key)
140
- if band is None or band["Published_Date"] < record_published_date:
142
+ if band is None or parse_date(band["Published_Date"]) < record_published_date:
141
143
  if "TDR Tariff" not in record:
142
144
  tdr_tariff = [
143
145
  v for k, v in record.items() if k.startswith("TDR Tariff")
@@ -23,6 +23,7 @@ from flask import (
23
23
 
24
24
  from sqlalchemy import (
25
25
  Float,
26
+ Integer,
26
27
  case,
27
28
  cast,
28
29
  delete,
@@ -46,6 +47,7 @@ import chellow.e.dno_rate_parser
46
47
  import chellow.e.lcc
47
48
  from chellow.e.computer import SupplySource, contract_func, forecast_date
48
49
  from chellow.e.energy_management import totals_runner
50
+ from chellow.e.issues import make_issue_bundle, make_issue_bundles
49
51
  from chellow.models import (
50
52
  Batch,
51
53
  BatchFile,
@@ -92,6 +94,8 @@ from chellow.models import (
92
94
  Ssc,
93
95
  Supply,
94
96
  Tpr,
97
+ User,
98
+ UserRole,
95
99
  VoltageLevel,
96
100
  )
97
101
  from chellow.utils import (
@@ -1312,98 +1316,14 @@ def dc_contracts_hh_import_get(contract_id, import_id):
1312
1316
  @e.route("/dc_contracts/<int:contract_id>/issues")
1313
1317
  def dc_issues_get(contract_id):
1314
1318
  contract = Contract.get_dc_by_id(g.sess, contract_id)
1315
- bundles = []
1316
- for issue in g.sess.scalars(
1319
+ issues = g.sess.scalars(
1317
1320
  select(Issue)
1318
1321
  .where(Issue.contract == contract)
1319
1322
  .order_by(Issue.is_open.desc(), Issue.date_created)
1320
- ):
1321
- supply_bundles = []
1322
- bundle = {
1323
- "issue": issue,
1324
- "latest_entry": None if len(issue.entries) == 0 else issue.entries[-1],
1325
- "supplies": supply_bundles,
1326
- }
1327
- for supply in g.sess.scalars(
1328
- select(Supply)
1329
- .where(Supply.id.in_(issue.properties.get("supply_ids", [])))
1330
- .order_by(Supply.id)
1331
- ).all():
1332
- era = supply.eras[0]
1333
- site = era.get_physical_site(g.sess)
1334
- supply_bundles.append(
1335
- {"supply": supply, "era": supply.eras[0], "site": site}
1336
- )
1337
- bundles.append(bundle)
1338
-
1339
- return render_template(
1340
- "dc_issues.html",
1341
- contract=contract,
1342
- issue_bundles=bundles,
1343
1323
  )
1324
+ bundles = make_issue_bundles(g.sess, issues)
1344
1325
 
1345
-
1346
- @e.route("/dc_contracts/<int:contract_id>/issues/download")
1347
- def dc_issues_download_get(contract_id):
1348
- contract = Contract.get_dc_by_id(g.sess, contract_id)
1349
- titles = (
1350
- "issue_id",
1351
- "contract_name",
1352
- "date_created",
1353
- "status",
1354
- "subject",
1355
- "imp_mpan_core",
1356
- "exp_mpan_core",
1357
- "site_code",
1358
- "site_name",
1359
- "latest_entry_timestamp",
1360
- "latest_entry_markdown",
1361
- )
1362
- rows = []
1363
- for issue in g.sess.scalars(
1364
- select(Issue)
1365
- .where(Issue.contract == contract)
1366
- .order_by(Issue.is_open.desc(), Issue.date_created)
1367
- ):
1368
- props = issue.properties
1369
- values = {
1370
- "contract_name": contract.name,
1371
- "issue_id": issue.id,
1372
- "date_created": issue.date_created,
1373
- "status": "open" if issue.is_open else "closed",
1374
- "subject": props.get("subject"),
1375
- "imp_mpan_core": None,
1376
- "exp_mpan_core": None,
1377
- "site_code": None,
1378
- "site_name": None,
1379
- }
1380
- if len(issue.entries) == 0:
1381
- values["latest_entry_timestamp"] = None
1382
- values["latest_entry_markdown"] = None
1383
- else:
1384
- entry = issue.entries[-1]
1385
- values["latest_entry_timestamp"] = entry.timestamp
1386
- values["latest_entry_markdown"] = entry.markdown
1387
-
1388
- supply_ids = props.get("supply_ids", [])
1389
- if len(supply_ids) == 0:
1390
- rows.append([csv_make_val(values[title]) for title in titles])
1391
- else:
1392
- for supply in g.sess.scalars(
1393
- select(Supply)
1394
- .where(Supply.id.in_(issue.properties.get("supply_ids", [])))
1395
- .order_by(Supply.id)
1396
- ).all():
1397
- values = values.copy()
1398
- era = supply.eras[0]
1399
- site = era.get_physical_site(g.sess)
1400
- values["imp_mpan_core"] = era.imp_mpan_core
1401
- values["exp_mpan_core"] = era.exp_mpan_core
1402
- values["site_code"] = site.code
1403
- values["site_name"] = site.name
1404
- rows.append([csv_make_val(values[title]) for title in titles])
1405
-
1406
- return _csv_response("dc_issues.csv", titles, rows)
1326
+ return render_template("dc_issues.html", contract=contract, issue_bundles=bundles)
1407
1327
 
1408
1328
 
1409
1329
  @e.route("/dc_contracts/<int:contract_id>/add_issue")
@@ -1420,7 +1340,8 @@ def dc_issue_add_post(contract_id):
1420
1340
  subject = req_str("subject")
1421
1341
 
1422
1342
  now = utc_datetime_now()
1423
- issue = contract.insert_issue(g.sess, now, {"subject": subject})
1343
+ properties = {"subject": subject, "owner_id": g.user.id}
1344
+ issue = contract.insert_issue(g.sess, now, properties)
1424
1345
  g.sess.commit()
1425
1346
  return chellow_redirect(f"/dc_issues/{issue.id}", 303)
1426
1347
  except BadRequest as e:
@@ -1433,22 +1354,35 @@ def dc_issue_add_post(contract_id):
1433
1354
  @e.route("/dc_issues/<int:issue_id>")
1434
1355
  def dc_issue_get(issue_id):
1435
1356
  issue = Issue.get_by_id(g.sess, issue_id)
1357
+ props = issue.properties
1436
1358
  supply_bundles = []
1437
1359
  for supply in g.sess.scalars(
1438
1360
  select(Supply)
1439
- .where(Supply.id.in_(issue.properties.get("supply_ids", [])))
1361
+ .where(Supply.id.in_(props.get("supply_ids", [])))
1440
1362
  .order_by(Supply.id)
1441
1363
  ).all():
1442
1364
  era = supply.eras[0]
1443
1365
  site = era.get_physical_site(g.sess)
1444
1366
  supply_bundles.append({"supply": supply, "era": supply.eras[0], "site": site})
1445
- return render_template("dc_issue.html", issue=issue, supply_bundles=supply_bundles)
1367
+ if "owner_id" in props:
1368
+ owner = User.get_by_id(g.sess, props["owner_id"])
1369
+ else:
1370
+ owner = None
1371
+ return render_template(
1372
+ "dc_issue.html", issue=issue, supply_bundles=supply_bundles, owner=owner
1373
+ )
1446
1374
 
1447
1375
 
1448
1376
  @e.route("/dc_issues/<int:issue_id>/edit")
1449
1377
  def dc_issue_edit_get(issue_id):
1450
1378
  issue = Issue.get_by_id(g.sess, issue_id)
1451
- return render_template("dc_issue_edit.html", issue=issue)
1379
+ users = g.sess.scalars(
1380
+ select(User)
1381
+ .join(UserRole)
1382
+ .where(UserRole.code == "editor")
1383
+ .order_by(User.email_address)
1384
+ )
1385
+ return render_template("dc_issue_edit.html", issue=issue, users=users)
1452
1386
 
1453
1387
 
1454
1388
  @e.route("/dc_issues/<int:issue_id>/edit", methods=["POST"])
@@ -1457,13 +1391,23 @@ def dc_issue_edit_post(issue_id):
1457
1391
  issue = Issue.get_by_id(g.sess, issue_id)
1458
1392
  date_created = req_date("date_created")
1459
1393
  is_open = req_checkbox("is_open")
1460
- properties = req_json("properties")
1394
+ owner_id = req_int("owner_id")
1395
+ properties = issue.properties
1396
+ properties["owner_id"] = owner_id
1461
1397
  issue.update(date_created, is_open, properties)
1462
1398
  g.sess.commit()
1463
1399
  return chellow_redirect(f"/dc_issues/{issue.id}", 303)
1464
1400
  except BadRequest as e:
1465
1401
  flash(e.description)
1466
- return make_response(render_template("dc_issue_edit.html", issue=issue), 400)
1402
+ users = g.sess.scalars(
1403
+ select(User)
1404
+ .join(UserRole)
1405
+ .where(UserRole.code == "editor")
1406
+ .order_by(User.email_address)
1407
+ )
1408
+ return make_response(
1409
+ render_template("dc_issue_edit.html", issue=issue, users=users), 400
1410
+ )
1467
1411
 
1468
1412
 
1469
1413
  @e.route("/dc_issues/<int:issue_id>/edit", methods=["DELETE"])
@@ -2724,6 +2668,52 @@ def isd_post():
2724
2668
  return chellow_redirect("/isd", 303)
2725
2669
 
2726
2670
 
2671
+ @e.route("/issues")
2672
+ def issues_get():
2673
+ issues = g.sess.scalars(
2674
+ select(Issue).order_by(Issue.is_open.desc(), Issue.date_created)
2675
+ )
2676
+ mop_contracts = g.sess.scalars(
2677
+ select(Contract)
2678
+ .join(Issue)
2679
+ .join(MarketRole)
2680
+ .where(MarketRole.code == "M")
2681
+ .distinct()
2682
+ .order_by(Contract.name)
2683
+ ).all()
2684
+ dc_contracts = g.sess.scalars(
2685
+ select(Contract)
2686
+ .join(Issue)
2687
+ .join(MarketRole)
2688
+ .where(MarketRole.code == "C")
2689
+ .distinct()
2690
+ .order_by(Contract.name)
2691
+ ).all()
2692
+ supplier_contracts = g.sess.scalars(
2693
+ select(Contract)
2694
+ .join(Issue)
2695
+ .join(MarketRole)
2696
+ .where(MarketRole.code == "X")
2697
+ .distinct()
2698
+ .order_by(Contract.name)
2699
+ ).all()
2700
+ owners = g.sess.scalars(
2701
+ select(User)
2702
+ .join(Issue, User.id == cast(Issue.properties["owner_id"], Integer))
2703
+ .distinct()
2704
+ .order_by(User.email_address)
2705
+ ).all()
2706
+ bundles = make_issue_bundles(g.sess, issues)
2707
+ return render_template(
2708
+ "issues.html",
2709
+ issue_bundles=bundles,
2710
+ mop_contracts=mop_contracts,
2711
+ dc_contracts=dc_contracts,
2712
+ supplier_contracts=supplier_contracts,
2713
+ owners=owners,
2714
+ )
2715
+
2716
+
2727
2717
  @e.route("/lafs")
2728
2718
  def lafs_get():
2729
2719
  llfc_id = req_int("llfc_id")
@@ -3518,6 +3508,198 @@ def mop_element_edit_delete(element_id):
3518
3508
  )
3519
3509
 
3520
3510
 
3511
+ @e.route("/mop_contracts/<int:contract_id>/issues")
3512
+ def mop_issues_get(contract_id):
3513
+ contract = Contract.get_mop_by_id(g.sess, contract_id)
3514
+ issues = g.sess.scalars(
3515
+ select(Issue)
3516
+ .where(Issue.contract == contract)
3517
+ .order_by(Issue.is_open.desc(), Issue.date_created)
3518
+ )
3519
+ bundles = make_issue_bundles(g.sess, issues)
3520
+
3521
+ return render_template("mop_issues.html", contract=contract, issue_bundles=bundles)
3522
+
3523
+
3524
+ @e.route("/mop_contracts/<int:contract_id>/add_issue")
3525
+ def mop_issue_add_get(contract_id):
3526
+ contract = Contract.get_mop_by_id(g.sess, contract_id)
3527
+
3528
+ return render_template("mop_issue_add.html", contract=contract)
3529
+
3530
+
3531
+ @e.route("/mop_contracts/<int:contract_id>/add_issue", methods=["POST"])
3532
+ def mop_issue_add_post(contract_id):
3533
+ contract = Contract.get_mop_by_id(g.sess, contract_id)
3534
+ try:
3535
+ subject = req_str("subject")
3536
+
3537
+ now = utc_datetime_now()
3538
+ properties = {"subject": subject, "owner_id": g.user.id}
3539
+ issue = contract.insert_issue(g.sess, now, properties)
3540
+ g.sess.commit()
3541
+ return chellow_redirect(f"/mop_issues/{issue.id}", 303)
3542
+ except BadRequest as e:
3543
+ flash(e.description)
3544
+ return make_response(
3545
+ render_template("mop_issue_add.html", contract=contract), 400
3546
+ )
3547
+
3548
+
3549
+ @e.route("/mop_issues/<int:issue_id>")
3550
+ def mop_issue_get(issue_id):
3551
+ issue = Issue.get_by_id(g.sess, issue_id)
3552
+ props = issue.properties
3553
+ supply_bundles = []
3554
+ for supply in g.sess.scalars(
3555
+ select(Supply)
3556
+ .where(Supply.id.in_(props.get("supply_ids", [])))
3557
+ .order_by(Supply.id)
3558
+ ).all():
3559
+ era = supply.eras[0]
3560
+ site = era.get_physical_site(g.sess)
3561
+ supply_bundles.append({"supply": supply, "era": supply.eras[0], "site": site})
3562
+ if "owner_id" in props:
3563
+ owner = User.get_by_id(g.sess, props["owner_id"])
3564
+ else:
3565
+ owner = None
3566
+ return render_template(
3567
+ "mop_issue.html", issue=issue, supply_bundles=supply_bundles, owner=owner
3568
+ )
3569
+
3570
+
3571
+ @e.route("/mop_issues/<int:issue_id>/edit")
3572
+ def mop_issue_edit_get(issue_id):
3573
+ issue = Issue.get_by_id(g.sess, issue_id)
3574
+ users = g.sess.scalars(
3575
+ select(User)
3576
+ .join(UserRole)
3577
+ .where(UserRole.code == "editor")
3578
+ .order_by(User.email_address)
3579
+ )
3580
+ return render_template("mop_issue_edit.html", issue=issue, users=users)
3581
+
3582
+
3583
+ @e.route("/mop_issues/<int:issue_id>/edit", methods=["POST"])
3584
+ def mop_issue_edit_post(issue_id):
3585
+ try:
3586
+ issue = Issue.get_by_id(g.sess, issue_id)
3587
+ date_created = req_date("date_created")
3588
+ is_open = req_checkbox("is_open")
3589
+ owner_id = req_int("owner_id")
3590
+ properties = issue.properties
3591
+ properties["owner_id"] = owner_id
3592
+ issue.update(date_created, is_open, properties)
3593
+ g.sess.commit()
3594
+ return chellow_redirect(f"/mop_issues/{issue.id}", 303)
3595
+ except BadRequest as e:
3596
+ flash(e.description)
3597
+ users = g.sess.scalars(
3598
+ select(User)
3599
+ .join(UserRole)
3600
+ .where(UserRole.code == "editor")
3601
+ .order_by(User.email_address)
3602
+ )
3603
+ return make_response(
3604
+ render_template("mop_issue_edit.html", issue=issue, users=users), 400
3605
+ )
3606
+
3607
+
3608
+ @e.route("/mop_issues/<int:issue_id>/edit", methods=["DELETE"])
3609
+ def mop_issue_edit_delete(issue_id):
3610
+ try:
3611
+ issue = Issue.get_by_id(g.sess, issue_id)
3612
+ contract = issue.contract
3613
+ issue.delete(g.sess)
3614
+ g.sess.commit()
3615
+ return hx_redirect(f"/mop_contracts/{contract.id}/issues", 303)
3616
+ except BadRequest as e:
3617
+ flash(e.description)
3618
+ return make_response(render_template("mop_issue_edit.html", issue=issue), 400)
3619
+
3620
+
3621
+ @e.route("/mop_issues/<int:issue_id>/attach_supply")
3622
+ def mop_issue_attach_supply_get(issue_id):
3623
+ issue = Issue.get_by_id(g.sess, issue_id)
3624
+ return render_template("mop_issue_attach_supply.html", issue=issue)
3625
+
3626
+
3627
+ @e.route("/mop_issues/<int:issue_id>/attach_supply", methods=["POST"])
3628
+ def mop_issue_attach_supply_post(issue_id):
3629
+ issue = Issue.get_by_id(g.sess, issue_id)
3630
+ try:
3631
+ mpan_core_str = req_str("mpan_core")
3632
+ mpan_core = parse_mpan_core(mpan_core_str)
3633
+ supply = Supply.get_by_mpan_core(g.sess, mpan_core)
3634
+
3635
+ props = issue.properties
3636
+ supply_ids = props.get("supply_ids", [])
3637
+ supply_ids.append(supply.id)
3638
+ props["supply_ids"] = supply_ids
3639
+ issue.update_properties(props)
3640
+ g.sess.commit()
3641
+ return chellow_redirect(f"/mop_issues/{issue.id}", 303)
3642
+ except BadRequest as e:
3643
+ flash(e.description)
3644
+ return make_response(
3645
+ render_template("mop_issue_attach_supply.html", issue=issue), 400
3646
+ )
3647
+
3648
+
3649
+ @e.route("/mop_issues/<int:issue_id>/add_entry")
3650
+ def mop_entry_add_get(issue_id):
3651
+ issue = Issue.get_by_id(g.sess, issue_id)
3652
+ return render_template("mop_entry_add.html", issue=issue)
3653
+
3654
+
3655
+ @e.route("/mop_issues/<int:issue_id>/add_entry", methods=["POST"])
3656
+ def mop_entry_add_post(issue_id):
3657
+ issue = Issue.get_by_id(g.sess, issue_id)
3658
+ try:
3659
+ markdown = req_markdown("markdown")
3660
+
3661
+ issue.add_entry(g.sess, markdown)
3662
+ g.sess.commit()
3663
+ return chellow_redirect(f"/mop_issues/{issue.id}", 303)
3664
+ except BadRequest as e:
3665
+ flash(e.description)
3666
+ return make_response(render_template("mop_entry_add.html", issue=issue), 400)
3667
+
3668
+
3669
+ @e.route("/mop_entries/<int:entry_id>/edit")
3670
+ def mop_entry_edit_get(entry_id):
3671
+ entry = IssueEntry.get_by_id(g.sess, entry_id)
3672
+ return render_template("mop_entry_edit.html", entry=entry)
3673
+
3674
+
3675
+ @e.route("/mop_entries/<int:entry_id>/edit", methods=["POST"])
3676
+ def mop_entry_edit_post(entry_id):
3677
+ entry = IssueEntry.get_by_id(g.sess, entry_id)
3678
+ try:
3679
+ markdown = req_markdown("markdown")
3680
+ timestamp = req_date("timestamp")
3681
+
3682
+ entry.update(timestamp, markdown)
3683
+ g.sess.commit()
3684
+ return chellow_redirect(f"/mop_issues/{entry.issue.id}", 303)
3685
+ except BadRequest as e:
3686
+ flash(e.description)
3687
+ return make_response(render_template("mop_entry_edit.html", entry=entry), 400)
3688
+
3689
+
3690
+ @e.route("/mop_entries/<int:entry_id>/edit", methods=["DELETE"])
3691
+ def mop_entry_edit_delete(entry_id):
3692
+ try:
3693
+ entry = IssueEntry.get_by_id(g.sess, entry_id)
3694
+ issue = entry.issue
3695
+ entry.delete(g.sess)
3696
+ g.sess.commit()
3697
+ return hx_redirect(f"/mop_issues/{issue.id}", 303)
3698
+ except BadRequest as e:
3699
+ flash(e.description)
3700
+ return make_response(render_template("mop_entry_edit.html", entry=entry), 400)
3701
+
3702
+
3521
3703
  @e.route("/mop_rate_scripts/<int:rate_script_id>")
3522
3704
  def mop_rate_script_get(rate_script_id):
3523
3705
  rate_script = RateScript.get_mop_by_id(g.sess, rate_script_id)
@@ -6057,25 +6239,14 @@ def supplier_element_edit_delete(element_id):
6057
6239
  @e.route("/supplier_contracts/<int:contract_id>/issues")
6058
6240
  def supplier_issues_get(contract_id):
6059
6241
  contract = Contract.get_supplier_by_id(g.sess, contract_id)
6060
- bundles = []
6061
- for issue in g.sess.scalars(
6242
+ issues = g.sess.scalars(
6062
6243
  select(Issue)
6063
6244
  .where(Issue.contract == contract)
6064
6245
  .order_by(Issue.is_open.desc(), Issue.date_created)
6065
- ):
6066
- bundle = {}
6067
- bundle["issue"] = issue
6068
- bundle["supplies"] = g.sess.scalars(
6069
- select(Supply)
6070
- .where(Supply.id.in_(issue.properties.get("supply_ids", [])))
6071
- .order_by(Supply.id)
6072
- ).all()
6073
- bundles.append(bundle)
6074
-
6246
+ )
6247
+ bundles = make_issue_bundles(g.sess, issues)
6075
6248
  return render_template(
6076
- "supplier_issues.html",
6077
- contract=contract,
6078
- issue_bundles=bundles,
6249
+ "supplier_issues.html", contract=contract, issue_bundles=bundles
6079
6250
  )
6080
6251
 
6081
6252
 
@@ -6093,7 +6264,8 @@ def supplier_issue_add_post(contract_id):
6093
6264
  subject = req_str("subject")
6094
6265
 
6095
6266
  now = utc_datetime_now()
6096
- issue = contract.insert_issue(g.sess, now, {"subject": subject})
6267
+ properties = {"subject": subject, "owner_id": g.user.id}
6268
+ issue = contract.insert_issue(g.sess, now, properties)
6097
6269
  g.sess.commit()
6098
6270
  return chellow_redirect(f"/supplier_issues/{issue.id}", 303)
6099
6271
  except BadRequest as e:
@@ -6106,18 +6278,20 @@ def supplier_issue_add_post(contract_id):
6106
6278
  @e.route("/supplier_issues/<int:issue_id>")
6107
6279
  def supplier_issue_get(issue_id):
6108
6280
  issue = Issue.get_by_id(g.sess, issue_id)
6109
- supplies = g.sess.scalars(
6110
- select(Supply)
6111
- .where(Supply.id.in_(issue.properties.get("supply_ids", [])))
6112
- .order_by(Supply.id)
6113
- )
6114
- return render_template("supplier_issue.html", issue=issue, supplies=supplies)
6281
+ issue_bundle = make_issue_bundle(g.sess, issue)
6282
+ return render_template("supplier_issue.html", issue_bundle=issue_bundle)
6115
6283
 
6116
6284
 
6117
6285
  @e.route("/supplier_issues/<int:issue_id>/edit")
6118
6286
  def supplier_issue_edit_get(issue_id):
6119
6287
  issue = Issue.get_by_id(g.sess, issue_id)
6120
- return render_template("supplier_issue_edit.html", issue=issue)
6288
+ users = g.sess.scalars(
6289
+ select(User)
6290
+ .join(UserRole)
6291
+ .where(UserRole.code == "editor")
6292
+ .order_by(User.email_address)
6293
+ )
6294
+ return render_template("supplier_issue_edit.html", issue=issue, users=users)
6121
6295
 
6122
6296
 
6123
6297
  @e.route("/supplier_issues/<int:issue_id>/edit", methods=["POST"])
@@ -6127,6 +6301,9 @@ def supplier_issue_edit_post(issue_id):
6127
6301
  date_created = req_date("date_created")
6128
6302
  is_open = req_checkbox("is_open")
6129
6303
  properties = req_json("properties")
6304
+ owner_id = req_int("owner_id")
6305
+ properties = issue.properties
6306
+ properties["owner_id"] = owner_id
6130
6307
  issue.update(date_created, is_open, properties)
6131
6308
  g.sess.commit()
6132
6309
  return chellow_redirect(f"/supplier_issues/{issue.id}", 303)
@@ -6580,6 +6757,14 @@ def supply_get(supply_id):
6580
6757
  line0 = lines[0]
6581
6758
  if len(lines) > 1 or len(line0) > 50:
6582
6759
  truncated_line = line0[:50]
6760
+ issues = g.sess.scalars(
6761
+ select(Issue)
6762
+ .where(
6763
+ Issue.is_open == true(),
6764
+ Issue.properties["supply_ids"].op("@>")(cast([supply_id], JSONB)),
6765
+ )
6766
+ .order_by(Issue.date_created)
6767
+ ).all()
6583
6768
 
6584
6769
  return render_template(
6585
6770
  "supply.html",
@@ -6594,6 +6779,7 @@ def supply_get(supply_id):
6594
6779
  this_month_start=this_month_start,
6595
6780
  batch_reports=batch_reports,
6596
6781
  era_bundles=era_bundles,
6782
+ issues=issues,
6597
6783
  )
6598
6784
 
6599
6785