aa-ledger 1.0.3__py3-none-any.whl → 2.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.
Files changed (280) hide show
  1. {aa_ledger-1.0.3.dist-info → aa_ledger-2.0.0.dist-info}/METADATA +6 -6
  2. aa_ledger-2.0.0.dist-info/RECORD +267 -0
  3. {aa_ledger-1.0.3.dist-info → aa_ledger-2.0.0.dist-info}/WHEEL +1 -1
  4. ledger/__init__.py +2 -2
  5. ledger/admin.py +23 -18
  6. ledger/api/__init__.py +23 -7
  7. ledger/api/{ledger/admin.py → admin.py} +25 -31
  8. ledger/api/alliance.py +755 -0
  9. ledger/api/character.py +786 -0
  10. ledger/api/corporation.py +1141 -0
  11. ledger/api/{helpers.py → helpers/core.py} +33 -33
  12. ledger/api/helpers/icons.py +372 -0
  13. ledger/api/helpers/planetary_helper.py +354 -0
  14. ledger/api/planetary.py +354 -0
  15. ledger/api/schema.py +240 -15
  16. ledger/app_settings.py +18 -26
  17. ledger/auth_hooks.py +2 -2
  18. ledger/constants.py +50 -177
  19. ledger/decorators.py +2 -46
  20. ledger/forms.py +133 -39
  21. ledger/helpers/billboard.py +194 -144
  22. ledger/helpers/cache.py +105 -0
  23. ledger/helpers/discord.py +2 -4
  24. ledger/helpers/eveonline.py +160 -0
  25. ledger/helpers/ledger_data.py +23 -0
  26. ledger/helpers/ref_type.py +53 -78
  27. ledger/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  28. ledger/locale/cs_CZ/LC_MESSAGES/django.po +349 -193
  29. ledger/locale/de/LC_MESSAGES/django.mo +0 -0
  30. ledger/locale/de/LC_MESSAGES/django.po +528 -379
  31. ledger/locale/django.pot +717 -553
  32. ledger/locale/es/LC_MESSAGES/django.mo +0 -0
  33. ledger/locale/es/LC_MESSAGES/django.po +349 -194
  34. ledger/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  35. ledger/locale/fr_FR/LC_MESSAGES/django.po +349 -193
  36. ledger/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  37. ledger/locale/it_IT/LC_MESSAGES/django.po +349 -193
  38. ledger/locale/ja/LC_MESSAGES/django.mo +0 -0
  39. ledger/locale/ja/LC_MESSAGES/django.po +348 -193
  40. ledger/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
  41. ledger/locale/ko_KR/LC_MESSAGES/django.po +349 -193
  42. ledger/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
  43. ledger/locale/nl_NL/LC_MESSAGES/django.po +349 -193
  44. ledger/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  45. ledger/locale/pl_PL/LC_MESSAGES/django.po +350 -193
  46. ledger/locale/ru/LC_MESSAGES/django.mo +0 -0
  47. ledger/locale/ru/LC_MESSAGES/django.po +348 -193
  48. ledger/locale/sk/LC_MESSAGES/django.mo +0 -0
  49. ledger/locale/sk/LC_MESSAGES/django.po +348 -193
  50. ledger/locale/uk/LC_MESSAGES/django.mo +0 -0
  51. ledger/locale/uk/LC_MESSAGES/django.po +348 -193
  52. ledger/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  53. ledger/locale/zh_Hans/LC_MESSAGES/django.po +348 -193
  54. ledger/managers/character_audit_manager.py +28 -20
  55. ledger/managers/character_journal_manager.py +187 -358
  56. ledger/managers/character_mining_manager.py +64 -30
  57. ledger/managers/character_planetary_manager.py +185 -138
  58. ledger/managers/corporation_audit_manager.py +36 -27
  59. ledger/managers/corporation_journal_manager.py +94 -57
  60. ledger/managers/general_manager.py +12 -8
  61. ledger/migrations/0018_remove_characterplanet_ledger_char_planet__58a5b6_idx_and_more.py +44 -0
  62. ledger/migrations/0019_rename_characteraudit_characterowner_and_more.py +48 -0
  63. ledger/models/__init__.py +5 -11
  64. ledger/models/characteraudit.py +101 -109
  65. ledger/models/corporationaudit.py +94 -49
  66. ledger/models/general.py +105 -211
  67. ledger/models/helpers/update_manager.py +302 -0
  68. ledger/models/planetary.py +60 -205
  69. ledger/providers.py +101 -0
  70. ledger/static/ledger/css/{ledger.css → aa-ledger.css} +54 -28
  71. ledger/static/ledger/js/aa-ledger.js +124 -0
  72. ledger/static/ledger/js/charts.js +25 -1
  73. ledger/static/ledger/js/view-alliance-ledger.js +383 -0
  74. ledger/static/ledger/js/view-character-ledger.js +388 -0
  75. ledger/static/ledger/js/view-corporation-ledger.js +402 -0
  76. ledger/static/ledger/js/view-planetary.js +492 -0
  77. ledger/static/ledger/libs/amCharts/5.14.4/js/flow.js +2 -0
  78. ledger/static/ledger/libs/amCharts/5.14.4/js/index.js +2 -0
  79. ledger/static/ledger/libs/amCharts/5.14.4/js/percent.js +2 -0
  80. ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Animated.js +2 -0
  81. ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Dark.js +2 -0
  82. ledger/static/ledger/libs/amCharts/5.14.4/js/xy.js +2 -0
  83. ledger/static/ledger/libs/datatables/2.3.5/css/dataTables.bootstrap5.css +610 -0
  84. ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.bootstrap5.js +122 -0
  85. ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.js +14127 -0
  86. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.css +516 -0
  87. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.dataTables.css +529 -0
  88. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.js +73 -0
  89. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.js +3090 -0
  90. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.css +20 -0
  91. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.js +1203 -0
  92. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.js +59 -0
  93. ledger/tasks.py +157 -146
  94. ledger/templates/ledger/base.html +59 -21
  95. ledger/templates/ledger/bundles/aa-ledger-css.html +3 -0
  96. ledger/templates/ledger/bundles/aa-ledger-js.html +3 -0
  97. ledger/templates/ledger/bundles/view-alliance-ledger-js.html +14 -0
  98. ledger/templates/ledger/bundles/view-character-ledger-js.html +15 -0
  99. ledger/templates/ledger/bundles/view-character-planetary-css.html +3 -0
  100. ledger/templates/ledger/bundles/view-character-planetary-js.html +4 -0
  101. ledger/templates/ledger/bundles/view-corporation-ledger-js.html +15 -0
  102. ledger/templates/ledger/partials/modal/confirm.html +0 -1
  103. ledger/templates/ledger/partials/modal/request-accept-delete-alliance.html +38 -0
  104. ledger/templates/ledger/partials/modal/request-accept-delete-character.html +38 -0
  105. ledger/templates/ledger/partials/modal/request-accept-delete-corporation.html +38 -0
  106. ledger/templates/ledger/partials/modal/request-accept-switch-notification.html +38 -0
  107. ledger/templates/ledger/partials/modal/request-view-alliance-details.html +26 -0
  108. ledger/templates/ledger/partials/modal/request-view-character-details.html +26 -0
  109. ledger/templates/ledger/partials/modal/request-view-corporation-details.html +26 -0
  110. ledger/templates/ledger/partials/modal/request-view-extractor.html +32 -0
  111. ledger/templates/ledger/partials/modal/request-view-factory.html +31 -0
  112. ledger/templates/ledger/partials/{menu → navigation}/administration.html +8 -0
  113. ledger/templates/ledger/partials/{menu → navigation}/navigation.html +2 -2
  114. ledger/templates/ledger/partials/{administration → view-alliance-administration}/alliance_corporations.html +3 -3
  115. ledger/templates/ledger/partials/view-alliance-administration/dashboard.html +81 -0
  116. ledger/templates/ledger/partials/view-alliance-ledger/alliance-billboard.html +25 -0
  117. ledger/templates/ledger/partials/view-alliance-ledger/alliance-ledger-details.html +21 -0
  118. ledger/templates/ledger/partials/view-alliance-ledger/alliance-table.html +24 -0
  119. ledger/templates/ledger/partials/view-alliance-ledger/information/daily.html +18 -0
  120. ledger/templates/ledger/partials/view-alliance-ledger/information/hourly.html +18 -0
  121. ledger/templates/ledger/partials/view-alliance-ledger/information/summary.html +19 -0
  122. ledger/templates/ledger/partials/{administration → view-character-administration}/character.html +1 -9
  123. ledger/templates/ledger/partials/{administration → view-character-administration}/dashboard.html +0 -34
  124. ledger/templates/ledger/partials/view-character-ledger/character-billboard.html +25 -0
  125. ledger/templates/ledger/partials/view-character-ledger/character-ledger-details.html +21 -0
  126. ledger/templates/ledger/partials/view-character-ledger/character-table.html +25 -0
  127. ledger/templates/ledger/partials/view-character-ledger/information/daily.html +18 -0
  128. ledger/templates/ledger/partials/view-character-ledger/information/hourly.html +18 -0
  129. ledger/templates/ledger/partials/view-character-ledger/information/summary.html +19 -0
  130. ledger/templates/ledger/partials/view-character-planetary/extractor-table.html +24 -0
  131. ledger/templates/ledger/partials/view-character-planetary/factory-table.html +24 -0
  132. ledger/templates/ledger/partials/view-character-planetary/planetary-table.html +22 -0
  133. ledger/templates/ledger/partials/view-character-planetary/storage-table.html +23 -0
  134. ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation.html +5 -13
  135. ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation_characters.html +1 -1
  136. ledger/templates/ledger/partials/view-corporation-administration/dashboard.html +81 -0
  137. ledger/templates/ledger/partials/view-corporation-ledger/corporation-billboard.html +25 -0
  138. ledger/templates/ledger/partials/view-corporation-ledger/corporation-ledger-details.html +21 -0
  139. ledger/templates/ledger/partials/view-corporation-ledger/corporation-table.html +26 -0
  140. ledger/templates/ledger/partials/view-corporation-ledger/information/daily.html +18 -0
  141. ledger/templates/ledger/partials/view-corporation-ledger/information/hourly.html +18 -0
  142. ledger/templates/ledger/partials/view-corporation-ledger/information/summary.html +19 -0
  143. ledger/templates/ledger/view-administration.html +62 -0
  144. ledger/templates/ledger/view-alliance-administration.html +49 -0
  145. ledger/templates/ledger/view-alliance-ledger.html +72 -0
  146. ledger/templates/ledger/view-alliance-overview.html +131 -0
  147. ledger/templates/ledger/view-character-administration.html +42 -0
  148. ledger/templates/ledger/view-character-ledger.html +73 -0
  149. ledger/templates/ledger/view-character-overview.html +135 -0
  150. ledger/templates/ledger/view-character-planetary-overview.html +135 -0
  151. ledger/templates/ledger/view-character-planetary.html +73 -0
  152. ledger/templates/ledger/view-corporation-administration.html +42 -0
  153. ledger/templates/ledger/view-corporation-ledger.html +73 -0
  154. ledger/templates/ledger/view-corporation-overview.html +131 -0
  155. ledger/templatetags/ledger.py +3 -5
  156. ledger/tests/__init__.py +187 -0
  157. ledger/tests/test_admin.py +164 -68
  158. ledger/tests/test_auth_hook.py +31 -13
  159. ledger/tests/test_decarators.py +14 -79
  160. ledger/tests/test_discord_installed.py +0 -1
  161. ledger/tests/test_helpers/test_ledger_data.py +19 -0
  162. ledger/tests/test_managers/test_character_audit_manager.py +111 -69
  163. ledger/tests/test_managers/test_character_journal_manager.py +48 -208
  164. ledger/tests/test_managers/test_character_mining_manager.py +37 -16
  165. ledger/tests/test_managers/test_corporation_division_manager.py +66 -28
  166. ledger/tests/test_managers/test_corporation_journal_manager.py +39 -42
  167. ledger/tests/test_managers/test_general_manager.py +78 -18
  168. ledger/tests/test_managers/test_planetary_manager.py +73 -32
  169. ledger/tests/test_models/test_characteraudit.py +58 -74
  170. ledger/tests/test_models/test_characterminingledger.py +20 -26
  171. ledger/tests/test_models/test_characterwalletjournal.py +10 -33
  172. ledger/tests/test_models/test_corporationaudit.py +41 -35
  173. ledger/tests/test_models/test_corporationwalletjournal.py +35 -32
  174. ledger/tests/test_models/test_general.py +44 -11
  175. ledger/tests/test_models/test_planetary.py +14 -80
  176. ledger/tests/test_templatetags.py +2 -7
  177. ledger/tests/test_views/corporation/test_add_corp.py +16 -35
  178. ledger/tests/test_views/corporation/test_delete_corporation.py +66 -42
  179. ledger/tests/test_views/test_access.py +512 -545
  180. ledger/tests/test_views/test_add_ally.py +57 -46
  181. ledger/tests/test_views/test_add_char.py +21 -33
  182. ledger/tests/test_views/test_delete_character.py +24 -21
  183. ledger/tests/testdata/README_ESI_STUB.md +430 -0
  184. ledger/tests/testdata/esi_stub_openapi.py +511 -0
  185. ledger/tests/testdata/integrations/__init__.py +0 -0
  186. ledger/tests/testdata/{load_eveuniverse.py → integrations/eveuniverse.py} +0 -1
  187. ledger/tests/testdata/integrations/planetary.py +13 -0
  188. ledger/tests/testdata/json/factory.json +281 -0
  189. ledger/tests/testdata/json/inactive.json +281 -0
  190. ledger/tests/testdata/json/pins.json +175 -272
  191. ledger/tests/testdata/json/route.json +95 -528
  192. ledger/tests/testdata/test_esi_stub.py +468 -0
  193. ledger/tests/testdata/utils.py +601 -0
  194. ledger/thirdparty/charlink_hook.py +60 -30
  195. ledger/urls.py +0 -135
  196. ledger/views/alliance/add_ally.py +2 -4
  197. ledger/views/alliance/alliance_ledger.py +64 -147
  198. ledger/views/character/add_char.py +8 -10
  199. ledger/views/character/character_ledger.py +60 -126
  200. ledger/views/character/planetary.py +5 -98
  201. ledger/views/corporation/add_corp.py +10 -12
  202. ledger/views/corporation/corporation_ledger.py +65 -327
  203. ledger/views/index.py +92 -30
  204. aa_ledger-1.0.3.dist-info/RECORD +0 -236
  205. ledger/api/api_helper/planetary_helper.py +0 -107
  206. ledger/api/ledger/__init__.py +0 -7
  207. ledger/api/ledger/planetary.py +0 -231
  208. ledger/helpers/alliance.py +0 -317
  209. ledger/helpers/character.py +0 -251
  210. ledger/helpers/core.py +0 -665
  211. ledger/helpers/corporation.py +0 -427
  212. ledger/helpers/data_exporter.py +0 -452
  213. ledger/static/ledger/js/planetary-confirm.js +0 -66
  214. ledger/static/ledger/js/planetary.js +0 -143
  215. ledger/templates/ledger/admin.html +0 -43
  216. ledger/templates/ledger/allyledger/admin/alliance_administration.html +0 -46
  217. ledger/templates/ledger/allyledger/admin/alliance_overview.html +0 -108
  218. ledger/templates/ledger/allyledger/alliance_ledger.html +0 -86
  219. ledger/templates/ledger/bundles/character-ledger-bundles.html +0 -66
  220. ledger/templates/ledger/bundles/corporation-ledger-bundles.html +0 -75
  221. ledger/templates/ledger/bundles/ledger-bundles.html +0 -23
  222. ledger/templates/ledger/bundles/ledger-css.html +0 -3
  223. ledger/templates/ledger/bundles/planetary-bundles.html +0 -50
  224. ledger/templates/ledger/bundles/table-css.html +0 -3
  225. ledger/templates/ledger/charledger/admin/character_administration.html +0 -39
  226. ledger/templates/ledger/charledger/admin/character_overview.html +0 -106
  227. ledger/templates/ledger/charledger/character_ledger.html +0 -94
  228. ledger/templates/ledger/charledger/planetary/admin/planetary_overview.html +0 -123
  229. ledger/templates/ledger/charledger/planetary/planetary_ledger.html +0 -54
  230. ledger/templates/ledger/corpledger/admin/corporation_administration.html +0 -39
  231. ledger/templates/ledger/corpledger/admin/corporation_overview.html +0 -108
  232. ledger/templates/ledger/corpledger/corporation_ledger.html +0 -129
  233. ledger/templates/ledger/data-export.html +0 -78
  234. ledger/templates/ledger/error.html +0 -31
  235. ledger/templates/ledger/partials/form/error-message.html +0 -1
  236. ledger/templates/ledger/partials/information/daily.html +0 -56
  237. ledger/templates/ledger/partials/information/day.html +0 -48
  238. ledger/templates/ledger/partials/information/error.html +0 -8
  239. ledger/templates/ledger/partials/information/hourly.html +0 -53
  240. ledger/templates/ledger/partials/information/summary.html +0 -88
  241. ledger/templates/ledger/partials/information/view_character_content.html +0 -35
  242. ledger/templates/ledger/partials/modal/switchalarm_confirm.html +0 -39
  243. ledger/templates/ledger/partials/modal/view_extractor.html +0 -48
  244. ledger/templates/ledger/partials/modal/view_factory.html +0 -123
  245. ledger/templates/ledger/partials/table/char-ledger.html +0 -85
  246. ledger/templates/ledger/partials/table/corp-ledger.html +0 -66
  247. ledger/templates/ledger/partials/table/planetary.html +0 -18
  248. ledger/templates/ledger/partials/thirdparty/billboard.html +0 -22
  249. ledger/templates/ledger/partials/view/card.html +0 -160
  250. ledger/templates/ledger/permission.html +0 -2
  251. ledger/tests/test_helpers/test_billboard.py +0 -11
  252. ledger/tests/test_helpers/test_data_exporter.py +0 -207
  253. ledger/tests/test_tasks.py +0 -282
  254. ledger/tests/test_view_helpers/test_core.py +0 -47
  255. ledger/tests/test_views/corporation/test_corporation.py +0 -267
  256. ledger/tests/test_views/test_planetary.py +0 -137
  257. ledger/tests/testdata/esi_stub.py +0 -109
  258. ledger/tests/testdata/esi_stub_migration.py +0 -80
  259. ledger/tests/testdata/generate_characteraudit.py +0 -106
  260. ledger/tests/testdata/generate_corporationaudit.py +0 -74
  261. ledger/tests/testdata/generate_events.py +0 -31
  262. ledger/tests/testdata/generate_miningledger.py +0 -13
  263. ledger/tests/testdata/generate_planets.py +0 -48
  264. ledger/tests/testdata/generate_walletjournal.py +0 -42
  265. ledger/tests/testdata/json/czarno-pins.json +0 -240
  266. ledger/tests/testdata/json/czarno-routes.json +0 -165
  267. ledger/tests/testdata/json/pins2.json +0 -538
  268. {aa_ledger-1.0.3.dist-info → aa_ledger-2.0.0.dist-info}/licenses/LICENSE +0 -0
  269. /ledger/{tests/test_view_helpers → api/helpers}/__init__.py +0 -0
  270. /ledger/templates/ledger/bundles/{ally-administration-bundles.html → view-alliance-administration-js.html} +0 -0
  271. /ledger/templates/ledger/bundles/{char-administration-bundles.html → view-character-administration-js.html} +0 -0
  272. /ledger/templates/ledger/bundles/{corp-administration-bundles.html → view-corporation-administration-js.html} +0 -0
  273. /ledger/templates/ledger/partials/{administration → view-alliance-administration}/alliance.html +0 -0
  274. /ledger/tests/testdata/{esi.json → esi_test_data.json} +0 -0
  275. /ledger/tests/testdata/{allianceauth.json → integrations/allianceauth.json} +0 -0
  276. /ledger/tests/testdata/{load_allianceauth.py → integrations/allianceauth.py} +0 -0
  277. /ledger/tests/testdata/{eveentity.json → integrations/eveentity.json} +0 -0
  278. /ledger/tests/testdata/{load_eveentity.py → integrations/eveentity.py} +0 -0
  279. /ledger/tests/testdata/{eveuniverse.json → integrations/eveuniverse.json} +0 -0
  280. /ledger/tests/testdata/{planetary.json → integrations/planetary.json} +0 -0
@@ -0,0 +1,135 @@
1
+ {% extends 'ledger/base.html' %}
2
+ {% load i18n %}
3
+
4
+ {% block page_template_title %}
5
+ {{ title }}
6
+ {% endblock page_template_title %}
7
+
8
+ {% block page_topic %}
9
+ <h1 class="page-header text-center">
10
+ {{ title }}
11
+ </h1>
12
+ {% endblock page_topic %}
13
+
14
+ {% block aaledger_header %}
15
+ <div class="card">
16
+ <div class="card-header bg-primary rounded d-flex align-items-center">
17
+ <h3 class="text-white">{% translate "Planetary Overview" %}</h3>
18
+ </div>
19
+ </div>
20
+ {% endblock %}
21
+
22
+ {% block ledger_block %}
23
+ <div class="card card-body mt-2 rounded">
24
+ <div class="table-responsive">
25
+ <table class="table table-striped table-hover w-100" id="overview-table">
26
+ <thead>
27
+ <th class="col-portrait" style="width: 10%;"></th>
28
+ <th class="col-user" style="width: 20%;">Character</th>
29
+ <th class="col-group" style="width: 20%;">Corporation</th>
30
+ <th class="col-actions" style="width: 10%;">{% trans "Actions" %}</th>
31
+ </thead>
32
+ <tbody></tbody>
33
+ </table>
34
+ </div>
35
+ </div>
36
+ {% endblock %}
37
+
38
+
39
+ {% block extra_css %}
40
+ {% include 'bundles/datatables-2-css-bs5.html' %}
41
+ {% include 'bundles/datatables-2-columncontrol-css-bs5.html' %}
42
+ {% include 'ledger/bundles/aa-ledger-css.html' %}
43
+ {% endblock %}
44
+
45
+ {% block extra_javascript %}
46
+ {% include 'ledger/bundles/aa-ledger-js.html' %}
47
+ {% include 'bundles/datatables-2-js-bs5.html' %}
48
+ {% include 'bundles/datatables-2-columncontrol-js-bs5.html' %}
49
+ <script type="application/javascript">
50
+ /* global aaLedgerSettings, aaLedgerSettingsOverride, _bootstrapTooltip, fetchGet, bootstrap, DataTable*/
51
+ $(document).ready(() => {
52
+ /**
53
+ * Overview :: Urls
54
+ */
55
+ const AdminUrl = "{% url 'ledger:api:get_planetary_overview' %}"
56
+ const PlanetaryOverviewUrl = "{% url 'ledger:planetary_ledger' character_id=1337 %}"
57
+
58
+ /**
59
+ * Table :: IDs
60
+ */
61
+ const overviewTable = $('#overview-table');
62
+
63
+ fetchGet({
64
+ url: AdminUrl,
65
+ })
66
+ .then((data) => {
67
+ if (data) {
68
+ /**
69
+ * DataTable for Corporation Overview Table
70
+ * @type {*|jQuery}
71
+ */
72
+ const overviewDataTable = new DataTable(overviewTable, {
73
+ data: Object.values(data[0].character),
74
+ language: aaLedgerSettings.dataTables.language,
75
+ layout: aaLedgerSettings.dataTables.layout,
76
+ ordering: aaLedgerSettings.dataTables.ordering,
77
+ columnControl: aaLedgerSettings.dataTables.columnControl,
78
+ order: [[1, 'asc']],
79
+ columns: [
80
+ {
81
+ data: 'character_id'
82
+ },
83
+ {
84
+ data: 'character_name'
85
+ },
86
+ {
87
+ data: 'corporation_name'
88
+ },
89
+ ],
90
+ columnDefs: [
91
+ {
92
+ targets: 0,
93
+ render: function (data, type, row) {
94
+ return '<img src="https://images.evetech.net/characters/' + row.character_id + '/portrait?size=32" class="rounded-circle" title="' + row.character_name + '" height="30" data-tooltip-toggle="char-tooltip" data-bs-placement="top">';
95
+ },
96
+ columnControl: [
97
+ {target: 0, content: []},
98
+ {target: 1, content: []}
99
+ ]
100
+ },
101
+ {
102
+ targets: 3,
103
+ columnControl: [
104
+ {target: 0, content: []},
105
+ {target: 1, content: []}
106
+ ],
107
+ render: function (data, type, row) {
108
+ var OverviewUrl = PlanetaryOverviewUrl.replace('1337', row.character_id);
109
+ return `<a href="${OverviewUrl}">
110
+ <button class="btn btn-primary btn-sm"
111
+ title="{% trans "Show" %}"
112
+ data-bs-tooltip="aa-ledger"
113
+ data-bs-placement="left"
114
+ >
115
+ <i class="fa-solid fa-eye"></i>
116
+ </button>
117
+ </a>`;
118
+ },
119
+ }
120
+ ],
121
+ initComplete: function() {
122
+ _bootstrapTooltip({selector: '#overview-table'});
123
+ },
124
+ drawCallback: function() {
125
+ _bootstrapTooltip({selector: '#overview-table'});
126
+ }
127
+ })
128
+ }
129
+ })
130
+ .catch((error) => {
131
+ console.error('Error fetching Character Ledger data:', error);
132
+ });
133
+ });
134
+ </script>
135
+ {% endblock %}
@@ -0,0 +1,73 @@
1
+ {% extends 'ledger/base.html' %}
2
+ {% load i18n %}
3
+ {% load sri %}
4
+
5
+ {% block page_template_title %}
6
+ {{ title }}
7
+ {% endblock page_template_title %}
8
+
9
+ {% block page_topic %}
10
+ <h1 class="page-header text-center">
11
+ {{ title }}
12
+ </h1>
13
+ {% endblock page_topic %}
14
+
15
+ {% block aaledger_header %}
16
+ <div class="card">
17
+ <div class="card-header bg-primary rounded d-flex align-items-center">
18
+ <h3>{% translate "Planetary Details" %} </h3>
19
+ <div class="ms-auto">
20
+ <a class="nav-link py-0" href="{% url 'ledger:planetary_overview' %}">
21
+ <span class="btn btn-secondary">{% translate 'Planetary Overview' %}</span>
22
+ </a>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ {% endblock %}
27
+
28
+ {% block ledger_block %}
29
+ {% include 'ledger/partials/view-character-planetary/planetary-table.html' %}
30
+ {% endblock %}
31
+
32
+ {% block extra_css %}
33
+ {% include 'bundles/datatables-2-css-bs5.html' %}
34
+ {% include 'bundles/datatables-2-columncontrol-css-bs5.html' %}
35
+ {% include 'ledger/bundles/aa-ledger-css.html' %}
36
+ {% include 'ledger/bundles/view-character-planetary-css.html' %}
37
+ {% endblock %}
38
+
39
+ {% block extra_javascript %}
40
+ <script>
41
+ const urlParams = new URLSearchParams(window.location.search);
42
+ const singleViewParms = urlParams.get('single');
43
+
44
+ /**
45
+ * Override settings for aaLedger
46
+ */
47
+ const aaLedgerSettingsOverride = {
48
+ characterPk: '{{ character_id }}',
49
+ updateInterval: '{{ update_interval }}',
50
+ url: {
51
+ Planetary: '{% url "ledger:api:get_planetarydetails" character_id=character_id planet_id=0 %}',
52
+ },
53
+ translations: {
54
+ confirmSwitchAlarm: '{% translate "Are you sure to Switch Notification" %}',
55
+ buttonSwitchAlarm: '{% translate "Switch Notification" %}',
56
+ notificationActivated: '{% translate "Notification Activated" %}',
57
+ notificationDeactivated: '{% translate "Notification Deactivated" %}',
58
+ }
59
+ };
60
+
61
+ // Construct the planetaryUrl with the 'main' parameter
62
+ if (singleViewParms) {
63
+ aaLedgerSettings.url.Planetary += '?single=' + singleViewParms;
64
+ }
65
+ </script>
66
+ {% include 'ledger/partials/modal/request-accept-switch-notification.html' %}
67
+ {% include 'ledger/partials/modal/request-view-factory.html' %}
68
+ {% include 'ledger/partials/modal/request-view-extractor.html' %}
69
+ {% include 'ledger/bundles/aa-ledger-js.html' %}
70
+ {% include 'bundles/datatables-2-js-bs5.html' %}
71
+ {% include 'bundles/datatables-2-columncontrol-js-bs5.html' %}
72
+ {% include 'ledger/bundles/view-character-planetary-js.html' %}
73
+ {% endblock %}
@@ -0,0 +1,42 @@
1
+ {% extends 'ledger/base.html' %}
2
+ {% load i18n %}
3
+
4
+ {% block page_template_title %}
5
+ {{ title }}
6
+ {% endblock page_template_title %}
7
+
8
+ {% block page_topic %}
9
+ <h1 class="page-header text-center">
10
+ {{ title }}
11
+ </h1>
12
+ {% endblock page_topic %}
13
+
14
+ {% block aaledger_header %}
15
+ <div class="card">
16
+ <div class="card-header bg-primary rounded d-flex align-items-center">
17
+ <h3 class="me-3">{% translate "Administration" %}</h3>
18
+ </div>
19
+ </div>
20
+ {% endblock %}
21
+
22
+ {% block ledger_block %}
23
+ <!-- Corporation Administration -->
24
+ <div class="card card-corporation-administration mt-2 rounded">
25
+ <div class="card-body">
26
+ <div class="row">
27
+ <div class="col-lg-6 col-md-12">
28
+ {% include 'ledger/partials/view-corporation-administration/dashboard.html' %}
29
+ </div>
30
+ <div class="col-lg-6 col-md-12">
31
+ {% include 'ledger/partials/view-corporation-administration/corporation.html' %}
32
+ </div>
33
+ </div>
34
+ {% include 'ledger/partials/view-corporation-administration/corporation_characters.html' %}
35
+ </div>
36
+ </div>
37
+ {% endblock %}
38
+
39
+ {% block extra_javascript %}
40
+ {% include 'bundles/datatables-js-bs5.html' %}
41
+ {% include 'ledger/bundles/view-corporation-administration-js.html' %}
42
+ {% endblock %}
@@ -0,0 +1,73 @@
1
+ {% extends 'ledger/base.html' %}
2
+ {% load i18n %}
3
+
4
+ {% block page_template_title %}
5
+ {{ title }}
6
+ {% endblock page_template_title %}
7
+
8
+ {% block page_topic %}
9
+ <h1 class="page-header text-center">
10
+ {{ title }}
11
+ </h1>
12
+ {% endblock page_topic %}
13
+
14
+ {% block aaledger_header %}
15
+ <div class="card">
16
+ <div class="card-header bg-primary rounded d-flex align-items-center">
17
+ <h3 class="me-3">{% translate "Corporation Ledger" %}</h3>
18
+ <div id="dropdown corporation-ledger-dropdown-buttons me-2" class="d-flex">
19
+ {% if forms.corporation_dropdown %}
20
+ <div class="me-2">
21
+ <form id="corporation-ledger-dropdown-form" method="post" href="{% url 'ledger:corporation_ledger' corporation_id=corporation_id %}" class="d-flex">
22
+ {% csrf_token %}
23
+ {{ forms.corporation_dropdown.division }}
24
+ {{ forms.corporation_dropdown.year }}
25
+ {{ forms.corporation_dropdown.month }}
26
+ {{ forms.corporation_dropdown.day }}
27
+ <button id="corporation-ledger-submit" type="submit" class="btn btn-success">{% translate "Submit" %}</button>
28
+ </form>
29
+ </div>
30
+ {% endif %}
31
+ </div>
32
+ <div class="ms-auto">
33
+ <a class="btn btn-secondary me-2 administration" href="{% url 'ledger:corporation_administration' corporation_id=corporation_id %}" class="administration">{% translate 'Administration' %}{% if issues %} <span class="badge bg-warning">{{ issues }}</span>{% endif %}</a>
34
+ <a href="{% url 'ledger:corporation_overview' %}" class="overview"><button class="btn btn-secondary overview">{% translate 'Account Overview' %}</button></a>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ {% endblock %}
39
+
40
+ {% block ledger_block %}
41
+ {% include 'ledger/partials/view-corporation-ledger/corporation-table.html' %}
42
+ {% include 'ledger/partials/view-corporation-ledger/corporation-billboard.html' %}
43
+ {% endblock %}
44
+
45
+ {% block extra_css %}
46
+ {% include 'bundles/datatables-2-css-bs5.html' %}
47
+ {% include 'bundles/datatables-2-columncontrol-css-bs5.html' %}
48
+ {% include 'ledger/bundles/aa-ledger-css.html' %}
49
+ {% endblock %}
50
+
51
+ {% block extra_javascript %}
52
+ <script>
53
+ /**
54
+ * Override settings for aaLedger
55
+ */
56
+ const aaLedgerSettingsOverride = {
57
+ corporationPk: '{{ corporation_id }}',
58
+ url: {
59
+ CorporationLedger: "{{ ledger_url }}",
60
+ },
61
+ translations: {
62
+ ledgerTable: {
63
+ summary: "{% translate 'Summary' %}"
64
+ }
65
+ }
66
+ };
67
+ </script>
68
+ {% include 'ledger/partials/modal/request-view-corporation-details.html' %}
69
+ {% include 'ledger/bundles/aa-ledger-js.html' %}
70
+ {% include 'bundles/datatables-2-js-bs5.html' %}
71
+ {% include 'bundles/datatables-2-columncontrol-js-bs5.html' %}
72
+ {% include 'ledger/bundles/view-corporation-ledger-js.html' %}
73
+ {% endblock extra_javascript %}
@@ -0,0 +1,131 @@
1
+ {% extends 'ledger/base.html' %}
2
+ {% load i18n %}
3
+
4
+ {% block page_template_title %}
5
+ {{ title }}
6
+ {% endblock page_template_title %}
7
+
8
+ {% block page_topic %}
9
+ <h1 class="page-header text-center">
10
+ {{ title }}
11
+ </h1>
12
+ {% endblock page_topic %}
13
+
14
+ {% block aaledger_header %}
15
+ <div class="card">
16
+ <div class="card-header bg-primary rounded d-flex align-items-center">
17
+ <h3 class="text-white">{% translate "Corporation Overview" %}</h3>
18
+ </div>
19
+ </div>
20
+ {% endblock %}
21
+
22
+ {% block ledger_block %}
23
+ <div class="card card-body mt-2 rounded">
24
+ <div class="table-responsive">
25
+ <table class="table table-striped table-hover w-100" id="overview-table">
26
+ <thead>
27
+ <th class="w-auto"></th>
28
+ <th class="w-auto">{% translate "Corporation" %}</th>
29
+ <th class="w-auto">{% translate "Actions" %}</th>
30
+ </thead>
31
+ <tbody></tbody>
32
+ </table>
33
+ </div>
34
+ </div>
35
+ {% endblock %}
36
+
37
+ {% block extra_css %}
38
+ {% include 'bundles/datatables-2-css-bs5.html' %}
39
+ {% include 'bundles/datatables-2-columncontrol-css-bs5.html' %}
40
+ {% include 'ledger/bundles/aa-ledger-css.html' %}
41
+ {% endblock %}
42
+
43
+ {% block extra_javascript %}
44
+ {% include 'ledger/bundles/aa-ledger-js.html' %}
45
+ {% include 'bundles/datatables-2-js-bs5.html' %}
46
+ {% include 'bundles/datatables-2-columncontrol-js-bs5.html' %}
47
+ <script type="application/javascript">
48
+ /* global aaLedgerSettings, aaLedgerSettingsOverride, _bootstrapTooltip, fetchGet, bootstrap, DataTable*/
49
+ $(document).ready(() => {
50
+ /**
51
+ * Overview :: Urls
52
+ */
53
+ const AdminUrl = "{% url 'ledger:api:get_corporation_overview' %}"
54
+ const CorporationOverviewUrl = "{% url 'ledger:corporation_ledger' corporation_id=1337 year=year month=month %}"
55
+
56
+ /**
57
+ * Table :: IDs
58
+ */
59
+ const overviewTable = $('#overview-table');
60
+
61
+ fetchGet({
62
+ url: AdminUrl,
63
+ })
64
+ .then((data) => {
65
+ if (data) {
66
+ /**
67
+ * DataTable for Corporation Overview Table
68
+ * @type {*|jQuery}
69
+ */
70
+ const overviewDataTable = new DataTable(overviewTable, {
71
+ data: Object.values(data[0].corporation),
72
+ language: aaLedgerSettings.dataTables.language,
73
+ layout: aaLedgerSettings.dataTables.layout,
74
+ ordering: aaLedgerSettings.dataTables.ordering,
75
+ columnControl: aaLedgerSettings.dataTables.columnControl,
76
+ order: [[1, 'asc']],
77
+ columns: [
78
+ {
79
+ data: 'corporation_id'
80
+ },
81
+ {
82
+ data: 'corporation_name'
83
+ }
84
+ ],
85
+ columnDefs: [
86
+ {
87
+ targets: 0,
88
+ render: function (data, type, row) {
89
+ return '<img src="https://images.evetech.net/corporations/' + row.corporation_id + '/logo?size=32" class="rounded-circle" title="' + row.corporation_name + '" height="30" data-tooltip-toggle="corp-tooltip" data-bs-placement="top">';
90
+ },
91
+ columnControl: [
92
+ {target: 0, content: []},
93
+ {target: 1, content: []}
94
+ ]
95
+ },
96
+ {
97
+ targets: 2,
98
+ className: 'text-end',
99
+ columnControl: [
100
+ {target: 0, content: []},
101
+ {target: 1, content: []}
102
+ ],
103
+ render: function (data, type, row) {
104
+ var OverviewUrl = CorporationOverviewUrl.replace('1337', row.corporation_id);
105
+ return `<a href="${OverviewUrl}">
106
+ <button class="btn btn-primary btn-sm"
107
+ title="{% trans "Show" %}"
108
+ data-bs-tooltip="aa-ledger"
109
+ data-bs-placement="left"
110
+ >
111
+ <i class="fa-solid fa-eye"></i>
112
+ </button>
113
+ </a>`;
114
+ },
115
+ }
116
+ ],
117
+ initComplete: function() {
118
+ _bootstrapTooltip({selector: '#overview-table'});
119
+ },
120
+ drawCallback: function() {
121
+ _bootstrapTooltip({selector: '#overview-table'});
122
+ }
123
+ })
124
+ }
125
+ })
126
+ .catch((error) => {
127
+ console.error('Error fetching Character Ledger data:', error);
128
+ });
129
+ });
130
+ </script>
131
+ {% endblock %}
@@ -4,18 +4,16 @@ import calendar
4
4
  # Django
5
5
  from django.template.defaultfilters import register
6
6
  from django.utils import timezone
7
- from django.utils.translation import gettext as _
7
+ from django.utils.translation import gettext_lazy as _
8
8
 
9
9
  # Alliance Auth
10
10
  from allianceauth.services.hooks import get_extension_logger
11
11
 
12
- # Alliance Auth (External Libs)
13
- from app_utils.logging import LoggerAddTag
14
-
15
12
  # AA Ledger
16
13
  from ledger import __title__, __version__
14
+ from ledger.providers import AppLogger
17
15
 
18
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
16
+ logger = AppLogger(get_extension_logger(__name__), __title__)
19
17
 
20
18
 
21
19
  @register.filter
ledger/tests/__init__.py CHANGED
@@ -0,0 +1,187 @@
1
+ # Standard Library
2
+ import socket
3
+ from unittest.mock import Mock
4
+
5
+ # Django
6
+ from django.contrib.messages.middleware import MessageMiddleware
7
+ from django.contrib.sessions.middleware import SessionMiddleware
8
+ from django.core.handlers.wsgi import WSGIRequest
9
+ from django.test import RequestFactory, TestCase
10
+ from django.urls import reverse
11
+
12
+ # AA Ledger
13
+ from ledger.tests.testdata.integrations.allianceauth import load_allianceauth
14
+ from ledger.tests.testdata.integrations.eveentity import load_eveentity
15
+ from ledger.tests.testdata.integrations.eveuniverse import load_eveuniverse
16
+ from ledger.tests.testdata.utils import create_user_from_evecharacter
17
+ from ledger.views.alliance.add_ally import add_ally
18
+ from ledger.views.character.add_char import add_char
19
+ from ledger.views.corporation.add_corp import add_corp
20
+
21
+
22
+ class SocketAccessError(Exception):
23
+ """Error raised when a test script accesses the network"""
24
+
25
+
26
+ class NoSocketsTestCase(TestCase):
27
+ """Variation of Django's TestCase class that prevents any network use.
28
+
29
+ Example:
30
+
31
+ .. code-block:: python
32
+
33
+ class TestMyStuff(BaseTestCase):
34
+ def test_should_do_what_i_need(self): ...
35
+
36
+ """
37
+
38
+ @classmethod
39
+ def setUpClass(cls):
40
+ cls.socket_original = socket.socket
41
+ socket.socket = cls.guard
42
+ return super().setUpClass()
43
+
44
+ @classmethod
45
+ def tearDownClass(cls):
46
+ socket.socket = cls.socket_original
47
+ return super().tearDownClass()
48
+
49
+ @staticmethod
50
+ def guard(*args, **kwargs):
51
+ raise SocketAccessError("Attempted to access network")
52
+
53
+
54
+ class LedgerTestCase(NoSocketsTestCase):
55
+ """
56
+ Preloaded Testcase class for Ledger tests without Network access.
57
+
58
+ Pre-Load:
59
+ * Alliance Auth Characters, Corporation, Alliance Data
60
+ * Eve Universe Data
61
+ * Eve Entity Data
62
+ * Taken User IDs: 1001, 1002, 1003, 1004, 1005
63
+
64
+ Available Request Factory:
65
+ `self.factory`
66
+
67
+ Available test users:
68
+ * `user` User with standard Ledger access.
69
+ * 'ledger.basic_access' Permission
70
+ * Character ID 1001
71
+ * Corporation ID 2001
72
+ * Alliance ID 3001
73
+ * `user2` Second user with standard Ledger access.
74
+ * 'ledger.basic_access' Permission
75
+ * Character ID 1002
76
+ * Corporation ID 2002
77
+ * Alliance ID 3002
78
+ * `superuser` Superuser.
79
+ * Access to whole Application
80
+ * Character ID 1003
81
+ * `manage_own_user` User with manage own corporation access.
82
+ * 'ledger.basic_access' Permission
83
+ * 'ledger.advanced_access' Permission
84
+ * 'ledger.corp_audit_manager' Permission
85
+ * 'ledger.manage_access' Permission
86
+ * Character ID 1004
87
+ * Corporation ID 2001
88
+ * Alliance ID 3001
89
+ * `manage_user` User with manage corporations access.
90
+ * 'ledger.basic_access' Permission
91
+ * 'ledger.advanced_access' Permission
92
+ * 'ledger.corp_audit_admin_manager' Permission
93
+ * 'ledger.manage_access' Permission
94
+ * Character ID 1005
95
+ * Corporation ID 2001
96
+ * Alliance ID 3001
97
+
98
+ Example:
99
+ .. code-block:: python
100
+
101
+ class TestMyLedgerStuff(LedgerTestCase):
102
+ def test_should_do_what_i_need(self):
103
+ user = self.user
104
+ """
105
+
106
+ @classmethod
107
+ def setUpClass(cls):
108
+ super().setUpClass()
109
+ # Initialize Alliance Auth test data
110
+ load_allianceauth()
111
+ load_eveuniverse()
112
+ load_eveentity()
113
+
114
+ # Request Factory
115
+ cls.factory = RequestFactory()
116
+
117
+ # User with Standard Access - Corporation 2001
118
+ cls.user, cls.user_character = create_user_from_evecharacter(
119
+ character_id=1001,
120
+ permissions=["ledger.basic_access"],
121
+ )
122
+ # User with Standard Access - Corporation 2002
123
+ cls.user2, cls.user2_character = create_user_from_evecharacter(
124
+ character_id=1002,
125
+ permissions=["ledger.basic_access"],
126
+ )
127
+ # User with Superuser Access - Corporation 2003
128
+ cls.superuser, cls.superuser_character = create_user_from_evecharacter(
129
+ character_id=1003,
130
+ permissions=[],
131
+ )
132
+ cls.superuser.is_superuser = True
133
+ cls.superuser.save()
134
+ # User with Manage Own Corporation Access - Corporation 2001
135
+ cls.manage_own_user, cls.manage_own_character = create_user_from_evecharacter(
136
+ character_id=1004,
137
+ permissions=[
138
+ "ledger.basic_access",
139
+ "ledger.advanced_access",
140
+ "ledger.corp_audit_manager",
141
+ "ledger.manage_access",
142
+ ],
143
+ )
144
+ # User with Manage Corporations Access - Corporation 2001
145
+ cls.manage_user, cls.manage_character = create_user_from_evecharacter(
146
+ character_id=1005,
147
+ permissions=[
148
+ "ledger.basic_access",
149
+ "ledger.advanced_access",
150
+ "ledger.corp_audit_admin_manager",
151
+ "ledger.manage_access",
152
+ ],
153
+ )
154
+
155
+ def _add_character(self, user, token):
156
+ request = self.factory.get(reverse("ledger:add_char"))
157
+ request.user = user
158
+ request.token = token
159
+ middleware = SessionMiddleware(Mock())
160
+ middleware.process_request(request)
161
+ orig_view = add_char.__wrapped__.__wrapped__.__wrapped__
162
+ return orig_view(request, token)
163
+
164
+ def _add_corporation(self, user, token):
165
+ request = self.factory.get(reverse("ledger:add_corp"))
166
+ request.user = user
167
+ request.token = token
168
+ middleware = SessionMiddleware(Mock())
169
+ middleware.process_request(request)
170
+ orig_view = add_corp.__wrapped__.__wrapped__.__wrapped__
171
+ return orig_view(request, token)
172
+
173
+ def _add_alliance(self, user, token):
174
+ request = self.factory.get(reverse("ledger:add_ally"))
175
+ request.user = user
176
+ request.token = token
177
+ middleware = SessionMiddleware(Mock())
178
+ middleware.process_request(request)
179
+ orig_view = add_ally.__wrapped__.__wrapped__.__wrapped__
180
+ return orig_view(request, token)
181
+
182
+ def _middleware_process_request(self, request: WSGIRequest):
183
+ """Helper method to process middleware for a request."""
184
+ session_middleware = SessionMiddleware(Mock())
185
+ session_middleware.process_request(request)
186
+ message_middleware = MessageMiddleware(Mock())
187
+ message_middleware.process_request(request)