aa-ledger 1.0.4__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.4.dist-info → aa_ledger-2.0.0.dist-info}/METADATA +5 -6
  2. aa_ledger-2.0.0.dist-info/RECORD +267 -0
  3. ledger/__init__.py +2 -2
  4. ledger/admin.py +23 -18
  5. ledger/api/__init__.py +23 -7
  6. ledger/api/{ledger/admin.py → admin.py} +25 -31
  7. ledger/api/alliance.py +755 -0
  8. ledger/api/character.py +786 -0
  9. ledger/api/corporation.py +1141 -0
  10. ledger/api/{helpers.py → helpers/core.py} +33 -33
  11. ledger/api/helpers/icons.py +372 -0
  12. ledger/api/helpers/planetary_helper.py +354 -0
  13. ledger/api/planetary.py +354 -0
  14. ledger/api/schema.py +240 -15
  15. ledger/app_settings.py +11 -27
  16. ledger/auth_hooks.py +2 -2
  17. ledger/constants.py +50 -177
  18. ledger/decorators.py +2 -46
  19. ledger/forms.py +133 -39
  20. ledger/helpers/billboard.py +194 -144
  21. ledger/helpers/cache.py +105 -0
  22. ledger/helpers/discord.py +2 -4
  23. ledger/helpers/eveonline.py +160 -0
  24. ledger/helpers/ledger_data.py +23 -0
  25. ledger/helpers/ref_type.py +53 -78
  26. ledger/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  27. ledger/locale/cs_CZ/LC_MESSAGES/django.po +349 -193
  28. ledger/locale/de/LC_MESSAGES/django.mo +0 -0
  29. ledger/locale/de/LC_MESSAGES/django.po +528 -379
  30. ledger/locale/django.pot +721 -546
  31. ledger/locale/es/LC_MESSAGES/django.mo +0 -0
  32. ledger/locale/es/LC_MESSAGES/django.po +349 -194
  33. ledger/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  34. ledger/locale/fr_FR/LC_MESSAGES/django.po +349 -193
  35. ledger/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  36. ledger/locale/it_IT/LC_MESSAGES/django.po +349 -193
  37. ledger/locale/ja/LC_MESSAGES/django.mo +0 -0
  38. ledger/locale/ja/LC_MESSAGES/django.po +348 -193
  39. ledger/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
  40. ledger/locale/ko_KR/LC_MESSAGES/django.po +349 -193
  41. ledger/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
  42. ledger/locale/nl_NL/LC_MESSAGES/django.po +349 -193
  43. ledger/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  44. ledger/locale/pl_PL/LC_MESSAGES/django.po +350 -193
  45. ledger/locale/ru/LC_MESSAGES/django.mo +0 -0
  46. ledger/locale/ru/LC_MESSAGES/django.po +348 -193
  47. ledger/locale/sk/LC_MESSAGES/django.mo +0 -0
  48. ledger/locale/sk/LC_MESSAGES/django.po +348 -193
  49. ledger/locale/uk/LC_MESSAGES/django.mo +0 -0
  50. ledger/locale/uk/LC_MESSAGES/django.po +348 -193
  51. ledger/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  52. ledger/locale/zh_Hans/LC_MESSAGES/django.po +348 -193
  53. ledger/managers/character_audit_manager.py +28 -20
  54. ledger/managers/character_journal_manager.py +185 -357
  55. ledger/managers/character_mining_manager.py +52 -26
  56. ledger/managers/character_planetary_manager.py +178 -136
  57. ledger/managers/corporation_audit_manager.py +36 -27
  58. ledger/managers/corporation_journal_manager.py +92 -56
  59. ledger/managers/general_manager.py +8 -7
  60. ledger/migrations/0018_remove_characterplanet_ledger_char_planet__58a5b6_idx_and_more.py +44 -0
  61. ledger/migrations/0019_rename_characteraudit_characterowner_and_more.py +48 -0
  62. ledger/models/__init__.py +5 -11
  63. ledger/models/characteraudit.py +101 -109
  64. ledger/models/corporationaudit.py +94 -49
  65. ledger/models/general.py +105 -211
  66. ledger/models/helpers/update_manager.py +302 -0
  67. ledger/models/planetary.py +60 -205
  68. ledger/providers.py +101 -0
  69. ledger/static/ledger/css/{ledger.css → aa-ledger.css} +54 -28
  70. ledger/static/ledger/js/aa-ledger.js +124 -0
  71. ledger/static/ledger/js/charts.js +25 -1
  72. ledger/static/ledger/js/view-alliance-ledger.js +383 -0
  73. ledger/static/ledger/js/view-character-ledger.js +388 -0
  74. ledger/static/ledger/js/view-corporation-ledger.js +402 -0
  75. ledger/static/ledger/js/view-planetary.js +492 -0
  76. ledger/static/ledger/libs/amCharts/5.14.4/js/flow.js +2 -0
  77. ledger/static/ledger/libs/amCharts/5.14.4/js/index.js +2 -0
  78. ledger/static/ledger/libs/amCharts/5.14.4/js/percent.js +2 -0
  79. ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Animated.js +2 -0
  80. ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Dark.js +2 -0
  81. ledger/static/ledger/libs/amCharts/5.14.4/js/xy.js +2 -0
  82. ledger/static/ledger/libs/datatables/2.3.5/css/dataTables.bootstrap5.css +610 -0
  83. ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.bootstrap5.js +122 -0
  84. ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.js +14127 -0
  85. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.css +516 -0
  86. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.dataTables.css +529 -0
  87. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.js +73 -0
  88. ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.js +3090 -0
  89. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.css +20 -0
  90. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.js +1203 -0
  91. ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.js +59 -0
  92. ledger/tasks.py +157 -141
  93. ledger/templates/ledger/base.html +59 -21
  94. ledger/templates/ledger/bundles/aa-ledger-css.html +3 -0
  95. ledger/templates/ledger/bundles/aa-ledger-js.html +3 -0
  96. ledger/templates/ledger/bundles/view-alliance-ledger-js.html +14 -0
  97. ledger/templates/ledger/bundles/view-character-ledger-js.html +15 -0
  98. ledger/templates/ledger/bundles/view-character-planetary-css.html +3 -0
  99. ledger/templates/ledger/bundles/view-character-planetary-js.html +4 -0
  100. ledger/templates/ledger/bundles/view-corporation-ledger-js.html +15 -0
  101. ledger/templates/ledger/partials/modal/confirm.html +0 -1
  102. ledger/templates/ledger/partials/modal/request-accept-delete-alliance.html +38 -0
  103. ledger/templates/ledger/partials/modal/request-accept-delete-character.html +38 -0
  104. ledger/templates/ledger/partials/modal/request-accept-delete-corporation.html +38 -0
  105. ledger/templates/ledger/partials/modal/request-accept-switch-notification.html +38 -0
  106. ledger/templates/ledger/partials/modal/request-view-alliance-details.html +26 -0
  107. ledger/templates/ledger/partials/modal/request-view-character-details.html +26 -0
  108. ledger/templates/ledger/partials/modal/request-view-corporation-details.html +26 -0
  109. ledger/templates/ledger/partials/modal/request-view-extractor.html +32 -0
  110. ledger/templates/ledger/partials/modal/request-view-factory.html +31 -0
  111. ledger/templates/ledger/partials/{menu → navigation}/administration.html +8 -0
  112. ledger/templates/ledger/partials/{menu → navigation}/navigation.html +2 -2
  113. ledger/templates/ledger/partials/{administration → view-alliance-administration}/alliance_corporations.html +3 -3
  114. ledger/templates/ledger/partials/view-alliance-administration/dashboard.html +81 -0
  115. ledger/templates/ledger/partials/view-alliance-ledger/alliance-billboard.html +25 -0
  116. ledger/templates/ledger/partials/view-alliance-ledger/alliance-ledger-details.html +21 -0
  117. ledger/templates/ledger/partials/view-alliance-ledger/alliance-table.html +24 -0
  118. ledger/templates/ledger/partials/view-alliance-ledger/information/daily.html +18 -0
  119. ledger/templates/ledger/partials/view-alliance-ledger/information/hourly.html +18 -0
  120. ledger/templates/ledger/partials/view-alliance-ledger/information/summary.html +19 -0
  121. ledger/templates/ledger/partials/{administration → view-character-administration}/character.html +1 -9
  122. ledger/templates/ledger/partials/{administration → view-character-administration}/dashboard.html +0 -34
  123. ledger/templates/ledger/partials/view-character-ledger/character-billboard.html +25 -0
  124. ledger/templates/ledger/partials/view-character-ledger/character-ledger-details.html +21 -0
  125. ledger/templates/ledger/partials/view-character-ledger/character-table.html +25 -0
  126. ledger/templates/ledger/partials/view-character-ledger/information/daily.html +18 -0
  127. ledger/templates/ledger/partials/view-character-ledger/information/hourly.html +18 -0
  128. ledger/templates/ledger/partials/view-character-ledger/information/summary.html +19 -0
  129. ledger/templates/ledger/partials/view-character-planetary/extractor-table.html +24 -0
  130. ledger/templates/ledger/partials/view-character-planetary/factory-table.html +24 -0
  131. ledger/templates/ledger/partials/view-character-planetary/planetary-table.html +22 -0
  132. ledger/templates/ledger/partials/view-character-planetary/storage-table.html +23 -0
  133. ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation.html +5 -13
  134. ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation_characters.html +1 -1
  135. ledger/templates/ledger/partials/view-corporation-administration/dashboard.html +81 -0
  136. ledger/templates/ledger/partials/view-corporation-ledger/corporation-billboard.html +25 -0
  137. ledger/templates/ledger/partials/view-corporation-ledger/corporation-ledger-details.html +21 -0
  138. ledger/templates/ledger/partials/view-corporation-ledger/corporation-table.html +26 -0
  139. ledger/templates/ledger/partials/view-corporation-ledger/information/daily.html +18 -0
  140. ledger/templates/ledger/partials/view-corporation-ledger/information/hourly.html +18 -0
  141. ledger/templates/ledger/partials/view-corporation-ledger/information/summary.html +19 -0
  142. ledger/templates/ledger/view-administration.html +62 -0
  143. ledger/templates/ledger/view-alliance-administration.html +49 -0
  144. ledger/templates/ledger/view-alliance-ledger.html +72 -0
  145. ledger/templates/ledger/view-alliance-overview.html +131 -0
  146. ledger/templates/ledger/view-character-administration.html +42 -0
  147. ledger/templates/ledger/view-character-ledger.html +73 -0
  148. ledger/templates/ledger/view-character-overview.html +135 -0
  149. ledger/templates/ledger/view-character-planetary-overview.html +135 -0
  150. ledger/templates/ledger/view-character-planetary.html +73 -0
  151. ledger/templates/ledger/view-corporation-administration.html +42 -0
  152. ledger/templates/ledger/view-corporation-ledger.html +73 -0
  153. ledger/templates/ledger/view-corporation-overview.html +131 -0
  154. ledger/templatetags/ledger.py +3 -5
  155. ledger/tests/__init__.py +187 -0
  156. ledger/tests/test_admin.py +164 -68
  157. ledger/tests/test_auth_hook.py +31 -13
  158. ledger/tests/test_decarators.py +14 -79
  159. ledger/tests/test_discord_installed.py +0 -1
  160. ledger/tests/test_helpers/test_ledger_data.py +19 -0
  161. ledger/tests/test_managers/test_character_audit_manager.py +111 -69
  162. ledger/tests/test_managers/test_character_journal_manager.py +48 -208
  163. ledger/tests/test_managers/test_character_mining_manager.py +37 -16
  164. ledger/tests/test_managers/test_corporation_division_manager.py +66 -28
  165. ledger/tests/test_managers/test_corporation_journal_manager.py +39 -42
  166. ledger/tests/test_managers/test_general_manager.py +78 -18
  167. ledger/tests/test_managers/test_planetary_manager.py +73 -32
  168. ledger/tests/test_models/test_characteraudit.py +58 -74
  169. ledger/tests/test_models/test_characterminingledger.py +20 -26
  170. ledger/tests/test_models/test_characterwalletjournal.py +10 -33
  171. ledger/tests/test_models/test_corporationaudit.py +41 -35
  172. ledger/tests/test_models/test_corporationwalletjournal.py +35 -32
  173. ledger/tests/test_models/test_general.py +44 -11
  174. ledger/tests/test_models/test_planetary.py +14 -80
  175. ledger/tests/test_templatetags.py +2 -7
  176. ledger/tests/test_views/corporation/test_add_corp.py +16 -35
  177. ledger/tests/test_views/corporation/test_delete_corporation.py +66 -42
  178. ledger/tests/test_views/test_access.py +512 -545
  179. ledger/tests/test_views/test_add_ally.py +57 -46
  180. ledger/tests/test_views/test_add_char.py +21 -33
  181. ledger/tests/test_views/test_delete_character.py +24 -21
  182. ledger/tests/testdata/README_ESI_STUB.md +430 -0
  183. ledger/tests/testdata/esi_stub_openapi.py +511 -0
  184. ledger/tests/testdata/integrations/__init__.py +0 -0
  185. ledger/tests/testdata/{load_eveuniverse.py → integrations/eveuniverse.py} +0 -1
  186. ledger/tests/testdata/integrations/planetary.py +13 -0
  187. ledger/tests/testdata/json/factory.json +281 -0
  188. ledger/tests/testdata/json/inactive.json +281 -0
  189. ledger/tests/testdata/json/pins.json +175 -272
  190. ledger/tests/testdata/json/route.json +95 -528
  191. ledger/tests/testdata/test_esi_stub.py +468 -0
  192. ledger/tests/testdata/utils.py +601 -0
  193. ledger/thirdparty/charlink_hook.py +60 -30
  194. ledger/urls.py +0 -135
  195. ledger/views/alliance/add_ally.py +2 -4
  196. ledger/views/alliance/alliance_ledger.py +64 -147
  197. ledger/views/character/add_char.py +8 -10
  198. ledger/views/character/character_ledger.py +60 -126
  199. ledger/views/character/planetary.py +5 -98
  200. ledger/views/corporation/add_corp.py +10 -12
  201. ledger/views/corporation/corporation_ledger.py +65 -327
  202. ledger/views/index.py +92 -30
  203. aa_ledger-1.0.4.dist-info/RECORD +0 -236
  204. ledger/api/api_helper/planetary_helper.py +0 -107
  205. ledger/api/ledger/__init__.py +0 -7
  206. ledger/api/ledger/planetary.py +0 -231
  207. ledger/helpers/alliance.py +0 -317
  208. ledger/helpers/character.py +0 -251
  209. ledger/helpers/core.py +0 -665
  210. ledger/helpers/corporation.py +0 -427
  211. ledger/helpers/data_exporter.py +0 -452
  212. ledger/static/ledger/js/planetary-confirm.js +0 -66
  213. ledger/static/ledger/js/planetary.js +0 -143
  214. ledger/templates/ledger/admin.html +0 -43
  215. ledger/templates/ledger/allyledger/admin/alliance_administration.html +0 -46
  216. ledger/templates/ledger/allyledger/admin/alliance_overview.html +0 -108
  217. ledger/templates/ledger/allyledger/alliance_ledger.html +0 -86
  218. ledger/templates/ledger/bundles/character-ledger-bundles.html +0 -66
  219. ledger/templates/ledger/bundles/corporation-ledger-bundles.html +0 -75
  220. ledger/templates/ledger/bundles/ledger-bundles.html +0 -23
  221. ledger/templates/ledger/bundles/ledger-css.html +0 -3
  222. ledger/templates/ledger/bundles/planetary-bundles.html +0 -50
  223. ledger/templates/ledger/bundles/table-css.html +0 -3
  224. ledger/templates/ledger/charledger/admin/character_administration.html +0 -39
  225. ledger/templates/ledger/charledger/admin/character_overview.html +0 -106
  226. ledger/templates/ledger/charledger/character_ledger.html +0 -94
  227. ledger/templates/ledger/charledger/planetary/admin/planetary_overview.html +0 -123
  228. ledger/templates/ledger/charledger/planetary/planetary_ledger.html +0 -54
  229. ledger/templates/ledger/corpledger/admin/corporation_administration.html +0 -39
  230. ledger/templates/ledger/corpledger/admin/corporation_overview.html +0 -108
  231. ledger/templates/ledger/corpledger/corporation_ledger.html +0 -129
  232. ledger/templates/ledger/data-export.html +0 -78
  233. ledger/templates/ledger/error.html +0 -31
  234. ledger/templates/ledger/partials/form/error-message.html +0 -1
  235. ledger/templates/ledger/partials/information/daily.html +0 -56
  236. ledger/templates/ledger/partials/information/day.html +0 -48
  237. ledger/templates/ledger/partials/information/error.html +0 -8
  238. ledger/templates/ledger/partials/information/hourly.html +0 -53
  239. ledger/templates/ledger/partials/information/summary.html +0 -88
  240. ledger/templates/ledger/partials/information/view_character_content.html +0 -35
  241. ledger/templates/ledger/partials/modal/switchalarm_confirm.html +0 -39
  242. ledger/templates/ledger/partials/modal/view_extractor.html +0 -48
  243. ledger/templates/ledger/partials/modal/view_factory.html +0 -123
  244. ledger/templates/ledger/partials/table/char-ledger.html +0 -85
  245. ledger/templates/ledger/partials/table/corp-ledger.html +0 -66
  246. ledger/templates/ledger/partials/table/planetary.html +0 -18
  247. ledger/templates/ledger/partials/thirdparty/billboard.html +0 -22
  248. ledger/templates/ledger/partials/view/card.html +0 -160
  249. ledger/templates/ledger/permission.html +0 -2
  250. ledger/tests/test_helpers/test_billboard.py +0 -11
  251. ledger/tests/test_helpers/test_data_exporter.py +0 -207
  252. ledger/tests/test_tasks.py +0 -282
  253. ledger/tests/test_view_helpers/test_core.py +0 -47
  254. ledger/tests/test_views/corporation/test_corporation.py +0 -267
  255. ledger/tests/test_views/test_planetary.py +0 -137
  256. ledger/tests/testdata/esi_stub.py +0 -109
  257. ledger/tests/testdata/esi_stub_migration.py +0 -80
  258. ledger/tests/testdata/generate_characteraudit.py +0 -106
  259. ledger/tests/testdata/generate_corporationaudit.py +0 -74
  260. ledger/tests/testdata/generate_events.py +0 -31
  261. ledger/tests/testdata/generate_miningledger.py +0 -13
  262. ledger/tests/testdata/generate_planets.py +0 -48
  263. ledger/tests/testdata/generate_walletjournal.py +0 -42
  264. ledger/tests/testdata/json/czarno-pins.json +0 -240
  265. ledger/tests/testdata/json/czarno-routes.json +0 -165
  266. ledger/tests/testdata/json/pins2.json +0 -538
  267. {aa_ledger-1.0.4.dist-info → aa_ledger-2.0.0.dist-info}/WHEEL +0 -0
  268. {aa_ledger-1.0.4.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)