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
@@ -4,18 +4,15 @@ from charlink.app_imports.utils import AppImport, LoginImport
4
4
  # Django
5
5
  from django.contrib.auth.models import Permission, User
6
6
  from django.db.models import Exists, OuterRef
7
- from django.utils.translation import gettext_lazy as trans
7
+ from django.utils.translation import gettext_lazy as _
8
8
 
9
9
  # Alliance Auth
10
10
  from allianceauth.eveonline.models import EveCharacter, EveCorporationInfo
11
11
 
12
- # Alliance Auth (External Libs)
13
- from app_utils.allianceauth import users_with_permission
14
-
15
12
  # AA Ledger
16
13
  from ledger.app_settings import LEDGER_APP_NAME
17
- from ledger.models.characteraudit import CharacterAudit
18
- from ledger.models.corporationaudit import CorporationAudit
14
+ from ledger.models.characteraudit import CharacterOwner
15
+ from ledger.models.corporationaudit import CorporationOwner
19
16
  from ledger.tasks import update_character, update_corporation
20
17
 
21
18
  _corp_perms = [
@@ -25,7 +22,7 @@ _corp_perms = [
25
22
 
26
23
  # pylint: disable=unused-argument, duplicate-code
27
24
  def _add_character_charaudit(request, token):
28
- character = CharacterAudit.objects.update_or_create(
25
+ character = CharacterOwner.objects.update_or_create(
29
26
  eve_character=EveCharacter.objects.get_character_by_id(token.character_id),
30
27
  defaults={
31
28
  "character_name": token.character_name,
@@ -47,7 +44,7 @@ def _add_character_corp(request, token):
47
44
  "corporation_name": char.corporation_name,
48
45
  },
49
46
  )
50
- corp = CorporationAudit.objects.update_or_create(
47
+ corp = CorporationOwner.objects.update_or_create(
51
48
  corporation=eve_corp,
52
49
  defaults={
53
50
  "corporation_name": eve_corp.corporation_name,
@@ -63,38 +60,70 @@ def _check_perms_corp(user: User):
63
60
 
64
61
 
65
62
  def _is_character_added_charaudit(character: EveCharacter):
66
- return CharacterAudit.objects.filter(character=character).exists()
63
+ return CharacterOwner.objects.filter(character=character).exists()
67
64
 
68
65
 
69
66
  def _is_character_added_corp(character: EveCharacter):
70
- return CorporationAudit.objects.filter(
71
- corporation__corporation_id=character.corporation_id
67
+ return CorporationOwner.objects.filter(
68
+ eve_corporation__corporation_id=character.corporation_id
72
69
  ).exists()
73
70
 
74
71
 
75
72
  def _users_with_perms_charaudit():
76
- return users_with_permission(
77
- Permission.objects.get(
78
- content_type__app_label="ledger", codename="basic_access"
73
+ permission = Permission.objects.get(
74
+ content_type__app_label="ledger", codename="basic_access"
75
+ )
76
+
77
+ users_qs = (
78
+ permission.user_set.all()
79
+ | User.objects.filter(
80
+ groups__in=list(permission.group_set.values_list("pk", flat=True))
81
+ )
82
+ | User.objects.select_related("profile").filter(
83
+ profile__state__in=list(permission.state_set.values_list("pk", flat=True))
79
84
  )
85
+ | User.objects.filter(is_superuser=True)
80
86
  )
87
+ return users_qs.distinct()
81
88
 
82
89
 
83
90
  def _users_with_perms_corp():
84
- users = users_with_permission(
85
- Permission.objects.get(
86
- content_type__app_label=_corp_perms[0].split(".", maxsplit=1)[0],
87
- codename=_corp_perms[0].split(".", maxsplit=1)[1],
91
+ permission = Permission.objects.get(
92
+ content_type__app_label=_corp_perms[0].split(".", maxsplit=1)[0],
93
+ codename=_corp_perms[0].split(".", maxsplit=1)[1],
94
+ )
95
+
96
+ users_qs = (
97
+ permission.user_set.all()
98
+ | User.objects.filter(
99
+ groups__in=list(permission.group_set.values_list("pk", flat=True))
100
+ )
101
+ | User.objects.select_related("profile").filter(
102
+ profile__state__in=list(permission.state_set.values_list("pk", flat=True))
88
103
  )
104
+ | User.objects.filter(is_superuser=True)
89
105
  )
106
+ users = users_qs.distinct()
107
+
90
108
  for perm_str in _corp_perms[1:]:
91
- users |= users_with_permission(
92
- Permission.objects.get(
93
- content_type__app_label=perm_str.split(".", maxsplit=1)[0],
94
- codename=perm_str.split(".", maxsplit=1)[1],
95
- )
109
+ permission = Permission.objects.get(
110
+ content_type__app_label=perm_str.split(".", maxsplit=1)[0],
111
+ codename=perm_str.split(".", maxsplit=1)[1],
96
112
  )
97
113
 
114
+ users_qs = (
115
+ permission.user_set.all()
116
+ | User.objects.filter(
117
+ groups__in=list(permission.group_set.values_list("pk", flat=True))
118
+ )
119
+ | User.objects.select_related("profile").filter(
120
+ profile__state__in=list(
121
+ permission.state_set.values_list("pk", flat=True)
122
+ )
123
+ )
124
+ | User.objects.filter(is_superuser=True)
125
+ )
126
+ users |= users_qs.distinct()
98
127
  return users
99
128
 
100
129
 
@@ -104,30 +133,31 @@ app_import = AppImport(
104
133
  LoginImport(
105
134
  app_label="ledger",
106
135
  unique_id="default",
107
- field_label=LEDGER_APP_NAME + " - " + trans("Character") + " Login",
136
+ field_label=_("Character") + " " + LEDGER_APP_NAME,
108
137
  add_character=_add_character_charaudit,
109
- scopes=CharacterAudit.get_esi_scopes(),
138
+ scopes=CharacterOwner.get_esi_scopes(),
110
139
  check_permissions=lambda user: user.has_perm("ledger.basic_access"),
111
140
  is_character_added=_is_character_added_charaudit,
112
141
  is_character_added_annotation=Exists(
113
- CharacterAudit.objects.filter(eve_character_id=OuterRef("pk"))
142
+ CharacterOwner.objects.filter(eve_character_id=OuterRef("pk"))
114
143
  ),
115
144
  get_users_with_perms=_users_with_perms_charaudit,
116
145
  ),
117
146
  LoginImport(
118
147
  app_label="ledger",
119
148
  unique_id="corpaudit",
120
- field_label=LEDGER_APP_NAME + " - " + trans("Corporation") + " Login",
149
+ field_label=_("Corporation") + " " + LEDGER_APP_NAME,
121
150
  add_character=_add_character_corp,
122
- scopes=CorporationAudit.get_esi_scopes(),
151
+ scopes=CorporationOwner.get_esi_scopes(),
123
152
  check_permissions=_check_perms_corp,
124
153
  is_character_added=_is_character_added_corp,
125
154
  is_character_added_annotation=Exists(
126
- CorporationAudit.objects.filter(
127
- corporation__corporation_id=OuterRef("corporation_id")
155
+ CorporationOwner.objects.filter(
156
+ eve_corporation__corporation_id=OuterRef("corporation_id")
128
157
  )
129
158
  ),
130
159
  get_users_with_perms=_users_with_perms_corp,
160
+ default_initial_selection=False,
131
161
  ),
132
162
  ],
133
163
  )
ledger/urls.py CHANGED
@@ -35,11 +35,6 @@ urlpatterns = [
35
35
  name="delete_corp",
36
36
  ),
37
37
  # -- -- Alliance Ledger
38
- path(
39
- "alliance/",
40
- alliance_ledger.alliance_ledger_index,
41
- name="alliance_ledger_index",
42
- ),
43
38
  path(
44
39
  "alliance/<int:alliance_id>/",
45
40
  alliance_ledger.alliance_ledger,
@@ -60,32 +55,6 @@ urlpatterns = [
60
55
  alliance_ledger.alliance_ledger,
61
56
  name="alliance_ledger",
62
57
  ),
63
- # -- -- Alliance Details
64
- path(
65
- "alliance/<int:alliance_id>/view/details/<int:entity_id>/section/<str:section>/",
66
- alliance_ledger.alliance_details,
67
- name="alliance_details",
68
- ),
69
- path(
70
- "alliance/<int:alliance_id>/<int:year>/view/details/<int:entity_id>/section/<str:section>/",
71
- alliance_ledger.alliance_details,
72
- name="alliance_details",
73
- ),
74
- path(
75
- "alliance/<int:alliance_id>/<int:year>/<int:month>/view/details/<int:entity_id>/section/<str:section>/",
76
- alliance_ledger.alliance_details,
77
- name="alliance_details",
78
- ),
79
- path(
80
- "alliance/<int:alliance_id>/<int:year>/<int:month>/<int:day>/view/details/<int:entity_id>/section/<str:section>/",
81
- alliance_ledger.alliance_details,
82
- name="alliance_details",
83
- ),
84
- path(
85
- "alliance/<int:alliance_id>/<int:year>/<int:month>/<int:day>/view/details/<int:entity_id>/section/<str:section>/",
86
- alliance_ledger.alliance_details,
87
- name="alliance_details",
88
- ),
89
58
  path(
90
59
  "alliance/<int:alliance_id>/view/administration/",
91
60
  alliance_ledger.alliance_administration,
@@ -98,11 +67,6 @@ urlpatterns = [
98
67
  ),
99
68
  path("alliance/add/", add_ally, name="add_ally"),
100
69
  # -- -- Corporation Ledger
101
- path(
102
- "corporation/",
103
- corporation_ledger.corporation_ledger_index,
104
- name="corporation_ledger_index",
105
- ),
106
70
  path(
107
71
  "corporation/<int:corporation_id>/",
108
72
  corporation_ledger.corporation_ledger,
@@ -143,74 +107,6 @@ urlpatterns = [
143
107
  corporation_ledger.corporation_ledger,
144
108
  name="corporation_ledger",
145
109
  ),
146
- # -- -- Data Export
147
- path(
148
- "corporation/<int:corporation_id>/data-export/",
149
- corporation_ledger.corporation_data_export,
150
- name="corporation_data_export",
151
- ),
152
- path(
153
- "corporation/<int:corporation_id>/data-export/generate/",
154
- corporation_ledger.corporation_data_export_generate,
155
- name="corporation_data_export_generate",
156
- ),
157
- path(
158
- "corporation/<str:hash_code>/data-export/download/",
159
- corporation_ledger.corporation_download_export_file,
160
- name="corporation_download_export_file",
161
- ),
162
- path(
163
- "corporation/<str:hash_code>/data-export/update/",
164
- corporation_ledger.corporation_data_export_run_update,
165
- name="corporation_data_export_run_update",
166
- ),
167
- # -- -- Corporation Details
168
- path(
169
- "corporation/<int:corporation_id>/view/details/<int:entity_id>/section/<str:section>/",
170
- corporation_ledger.corporation_details,
171
- name="corporation_details",
172
- ),
173
- path(
174
- "corporation/<int:corporation_id>/<int:year>/view/details/<int:entity_id>/section/<str:section>/",
175
- corporation_ledger.corporation_details,
176
- name="corporation_details",
177
- ),
178
- path(
179
- "corporation/<int:corporation_id>/<int:year>/<int:month>/view/details/<int:entity_id>/section/<str:section>/",
180
- corporation_ledger.corporation_details,
181
- name="corporation_details",
182
- ),
183
- path(
184
- "corporation/<int:corporation_id>/<int:year>/<int:month>/<int:day>/view/details/<int:entity_id>/section/<str:section>/",
185
- corporation_ledger.corporation_details,
186
- name="corporation_details",
187
- ),
188
- # -- -- Division Details
189
- path(
190
- "corporation/<int:corporation_id>/division/<int:division_id>/view/details/<int:entity_id>/section/<str:section>/",
191
- corporation_ledger.corporation_details,
192
- name="corporation_details",
193
- ),
194
- path(
195
- "corporation/<int:corporation_id>/division/<int:division_id>/<int:year>/view/details/<int:entity_id>/section/<str:section>/",
196
- corporation_ledger.corporation_details,
197
- name="corporation_details",
198
- ),
199
- path(
200
- "corporation/<int:corporation_id>/division/<int:division_id>/<int:year>/<int:month>/view/details/<int:entity_id>/section/<str:section>/",
201
- corporation_ledger.corporation_details,
202
- name="corporation_details",
203
- ),
204
- path(
205
- "corporation/<int:corporation_id>/division/<int:division_id>/<int:year>/<int:month>/<int:day>/view/details/<int:entity_id>/section/<str:section>/",
206
- corporation_ledger.corporation_details,
207
- name="corporation_details",
208
- ),
209
- path(
210
- "corporation/<int:corporation_id>/division/<int:division_id>/view/details/<int:entity_id>/section/<str:section>/",
211
- corporation_ledger.corporation_details,
212
- name="corporation_details",
213
- ),
214
110
  path(
215
111
  "corporation/<int:corporation_id>/view/administration/",
216
112
  corporation_ledger.corporation_administration,
@@ -262,32 +158,6 @@ urlpatterns = [
262
158
  character_ledger.character_ledger,
263
159
  name="character_ledger",
264
160
  ),
265
- # -- -- Character Details
266
- path(
267
- "character/<int:character_id>/view/details/section/<str:section>/",
268
- character_ledger.character_details,
269
- name="character_details",
270
- ),
271
- path(
272
- "character/<int:character_id>/<int:year>/view/details/section/<str:section>/",
273
- character_ledger.character_details,
274
- name="character_details",
275
- ),
276
- path(
277
- "character/<int:character_id>/<int:year>/<int:month>/view/details/section/<str:section>/",
278
- character_ledger.character_details,
279
- name="character_details",
280
- ),
281
- path(
282
- "character/<int:character_id>/<int:year>/<int:month>/<int:day>/view/details/section/<str:section>/",
283
- character_ledger.character_details,
284
- name="character_details",
285
- ),
286
- path(
287
- "character/<int:character_id>/<int:year>/<int:month>/<int:day>/view/details/section/<str:section>/",
288
- character_ledger.character_details,
289
- name="character_details",
290
- ),
291
161
  # -- -- Character Administration
292
162
  path(
293
163
  "character/<int:character_id>/view/administration/",
@@ -310,11 +180,6 @@ urlpatterns = [
310
180
  planetary.planetary_ledger,
311
181
  name="planetary_ledger",
312
182
  ),
313
- path(
314
- "character/switch_alarm/",
315
- planetary.switch_alarm,
316
- name="switch_alarm",
317
- ),
318
183
  path(
319
184
  "character/view/planetary/overview/",
320
185
  planetary.planetary_overview,
@@ -15,14 +15,12 @@ from allianceauth.eveonline.providers import ObjectNotFound, provider
15
15
  from allianceauth.services.hooks import get_extension_logger
16
16
  from esi.decorators import token_required
17
17
 
18
- # Alliance Auth (External Libs)
19
- from app_utils.logging import LoggerAddTag
20
-
21
18
  # AA Ledger
22
19
  from ledger import __title__
23
20
  from ledger.models.general import EveEntity
21
+ from ledger.providers import AppLogger
24
22
 
25
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
23
+ logger = AppLogger(get_extension_logger(__name__), __title__)
26
24
 
27
25
 
28
26
  @login_required
@@ -1,52 +1,38 @@
1
1
  """PvE Views"""
2
2
 
3
- # Standard Library
4
- import json
5
-
6
3
  # Django
7
4
  from django.contrib import messages
8
5
  from django.contrib.auth.decorators import login_required, permission_required
9
6
  from django.core.handlers.wsgi import WSGIRequest
10
7
  from django.shortcuts import redirect, render
8
+ from django.urls import reverse
9
+ from django.utils import timezone
11
10
  from django.utils.translation import gettext_lazy as _
12
11
 
13
12
  # Alliance Auth
14
13
  from allianceauth.eveonline.models import EveCorporationInfo
15
14
  from allianceauth.services.hooks import get_extension_logger
16
15
 
17
- # Alliance Auth (External Libs)
18
- from app_utils.logging import LoggerAddTag
19
-
20
16
  # AA Ledger
21
- from ledger import __title__
22
- from ledger.api.helpers import get_all_corporations_from_alliance, get_alliance
23
- from ledger.helpers.alliance import AllianceData
24
- from ledger.helpers.core import LedgerEntity, add_info_to_context
25
- from ledger.models.corporationaudit import CorporationWalletJournalEntry
26
-
27
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
28
-
29
-
30
- @login_required
31
- @permission_required("ledger.advanced_access")
32
- def alliance_ledger_index(request):
33
- """Alliance Ledger Index View"""
34
- context = {}
35
- context = add_info_to_context(request, context)
36
- alliance_id = request.user.profile.main_character.alliance_id
37
- if not alliance_id:
38
- alliance_id = 0
17
+ from ledger import __title__, forms
18
+ from ledger.api.helpers.core import (
19
+ get_all_corporations_from_alliance,
20
+ get_alliance_or_none,
21
+ )
22
+ from ledger.providers import AppLogger
39
23
 
40
- return redirect("ledger:alliance_ledger", alliance_id=alliance_id)
24
+ logger = AppLogger(get_extension_logger(__name__), __title__)
41
25
 
42
26
 
43
27
  @login_required
44
28
  @permission_required("ledger.advanced_access")
45
- def alliance_ledger(request, alliance_id, year=None, month=None, day=None):
29
+ def alliance_ledger(
30
+ request: WSGIRequest, alliance_id: int, year=None, month=None, day=None
31
+ ):
46
32
  """
47
33
  Alliance Ledger
48
34
  """
49
- perms, alliance = get_alliance(request, alliance_id)
35
+ perms = get_alliance_or_none(request, alliance_id)[0]
50
36
 
51
37
  context = {
52
38
  "title": "Alliance Ledger",
@@ -54,125 +40,56 @@ def alliance_ledger(request, alliance_id, year=None, month=None, day=None):
54
40
  "disabled": True,
55
41
  }
56
42
 
57
- # pylint: disable=duplicate-code
58
- if perms is False:
59
- msg = _("Permission Denied")
60
- messages.error(request, msg)
61
- return render(
62
- request, "ledger/allyledger/alliance_ledger.html", context=context
63
- )
64
- # pylint: disable=duplicate-code
65
- if perms is None:
66
- msg = _("Alliance not found.")
67
- messages.info(request, msg)
68
- return render(
69
- request, "ledger/allyledger/alliance_ledger.html", context=context
70
- )
71
-
72
- alliance_data = AllianceData(
73
- request=request, alliance=alliance, year=year, month=month, day=day
74
- )
43
+ kwargs = {
44
+ "alliance_id": alliance_id,
45
+ }
75
46
 
76
- # Create the Alliance ledger data
77
- ledger = alliance_data.generate_ledger_data()
47
+ # pylint: disable=duplicate-code
48
+ if request.POST:
49
+ year = request.POST.get("year") or None
50
+ month = request.POST.get("month") or None
51
+ day = request.POST.get("day") or None
52
+ # Ensure that if only day is provided, month is also provided
53
+ if day is not None and month is None:
54
+ month = timezone.now().month
55
+
56
+ if year is not None:
57
+ kwargs["year"] = year
58
+ if month is not None:
59
+ kwargs["month"] = month
60
+ if day is not None:
61
+ kwargs["day"] = day
62
+
63
+ # Redirect to the same view with updated parameters
64
+ if request.POST:
65
+ return redirect("ledger:alliance_ledger", **kwargs)
66
+
67
+ ledger_url = reverse("ledger:api:get_alliance_ledger", kwargs=kwargs)
78
68
 
79
69
  context = {
80
- "title": f"Alliance Ledger - {alliance.alliance_name}",
70
+ "title": "Alliance Ledger",
81
71
  "alliance_id": alliance_id,
82
- "billboard": json.dumps(alliance_data.billboard.dict.asdict()),
83
- "ledger": ledger,
84
- "years": CorporationWalletJournalEntry.objects.filter(
85
- division__corporation__corporation__corporation_id__in=alliance_data.corporations
86
- )
87
- .values_list("date__year", flat=True)
88
- .distinct()
89
- .order_by("-date__year"),
90
- "totals": alliance_data.calculate_totals(ledger),
91
- "view": alliance_data.create_view_data(
92
- viewname="alliance_details",
93
- alliance_id=alliance_id,
94
- entity_id=alliance_id,
95
- section="summary",
96
- ),
72
+ "ledger_url": ledger_url,
73
+ "forms": {
74
+ "alliance_dropdown": forms.AllianceDropdownForm(
75
+ alliance_id=alliance_id,
76
+ year=year,
77
+ month=month,
78
+ day=day,
79
+ ),
80
+ },
97
81
  }
98
- # Add additional information to the context
99
- context = add_info_to_context(request, context)
100
-
101
- return render(request, "ledger/allyledger/alliance_ledger.html", context=context)
102
-
103
-
104
- # pylint: disable=too-many-positional-arguments
105
- @login_required
106
- @permission_required("ledger.advanced_access")
107
- def alliance_details(
108
- request: WSGIRequest,
109
- alliance_id=None,
110
- entity_id=None,
111
- year=None,
112
- month=None,
113
- day=None,
114
- section=None,
115
- ):
116
- """
117
- Alliance Details
118
- """
119
- perms, alliance = get_alliance(request, alliance_id=alliance_id)
120
82
 
121
- # pylint: disable=duplicate-code
122
- if perms is False:
123
- msg = _("Permission Denied")
124
- return render(
125
- request,
126
- "ledger/partials/information/view_character_content.html",
127
- {
128
- "error": msg,
129
- "alliance_id": alliance_id,
130
- },
131
- )
132
- # pylint: disable=duplicate-code
133
83
  if perms is None:
134
84
  msg = _("Alliance not found.")
135
- return render(
136
- request,
137
- "ledger/partials/information/view_character_content.html",
138
- {
139
- "error": msg,
140
- "alliance_id": alliance_id,
141
- },
142
- )
143
-
144
- alliance_data = AllianceData(
145
- request=request,
146
- alliance=alliance,
147
- year=year,
148
- month=month,
149
- day=day,
150
- section=section,
151
- )
152
-
153
- # Create the Entity for the ledger
154
- entity = LedgerEntity(
155
- entity_id=entity_id,
156
- alliance_obj=alliance if entity_id == alliance.alliance_id else None,
157
- )
158
-
159
- journal = alliance_data.filter_entity_journal(entity=entity)
160
- amounts = alliance_data._create_corporation_details(journal=journal, entity=entity)
161
- details = alliance_data._add_average_details(request, amounts, day)
85
+ messages.info(request, msg)
86
+ return redirect("ledger:alliance_overview")
162
87
 
163
- context = {
164
- "title": f"Alliance Details - {alliance.alliance_name}",
165
- "type": "alliance",
166
- "character": details,
167
- "information": f"Alliance Details - {alliance_data.get_details_title}",
168
- }
169
- context = add_info_to_context(request, context)
170
- # pylint: disable=duplicate-code
171
- return render(
172
- request,
173
- "ledger/partials/information/view_character_content.html",
174
- context=context,
175
- )
88
+ if perms is False:
89
+ msg = _("Permission Denied")
90
+ messages.error(request, msg)
91
+ return redirect("ledger:alliance_overview")
92
+ return render(request, "ledger/view-alliance-ledger.html", context=context)
176
93
 
177
94
 
178
95
  @login_required
@@ -183,11 +100,10 @@ def alliance_overview(request):
183
100
  """
184
101
  context = {
185
102
  "title": "Alliance Overview",
103
+ "year": timezone.now().year,
104
+ "month": timezone.now().month,
186
105
  }
187
- context = add_info_to_context(request, context)
188
- return render(
189
- request, "ledger/allyledger/admin/alliance_overview.html", context=context
190
- )
106
+ return render(request, "ledger/view-alliance-overview.html", context=context)
191
107
 
192
108
 
193
109
  @login_required
@@ -196,23 +112,25 @@ def alliance_administration(request, alliance_id):
196
112
  """
197
113
  Alliance Administration
198
114
  """
199
- perm, alliance = get_alliance(request, alliance_id)
115
+ perm, alliance = get_alliance_or_none(request, alliance_id)
200
116
 
201
117
  if perm is False:
202
118
  msg = _("Permission Denied")
203
119
  messages.error(request, msg)
204
- return redirect("ledger:alliance_ledger_index")
120
+ return redirect("ledger:alliance_overview")
205
121
  if perm is None:
206
122
  msg = _("Alliance not found.")
207
123
  messages.info(request, msg)
208
- return redirect("ledger:alliance_ledger_index")
124
+ return redirect("ledger:alliance_overview")
209
125
 
210
126
  corporations = get_all_corporations_from_alliance(request, alliance.alliance_id)[1]
211
127
  all_corporations = EveCorporationInfo.objects.filter(
212
128
  alliance__alliance_id=alliance_id
213
129
  ).order_by("corporation_name")
214
130
 
215
- corp_audit_ids = corporations.values_list("corporation__corporation_id", flat=True)
131
+ corp_audit_ids = corporations.values_list(
132
+ "eve_corporation__corporation_id", flat=True
133
+ )
216
134
  missing_corporations = all_corporations.exclude(
217
135
  corporation_id__in=corp_audit_ids
218
136
  ).order_by("corporation_name")
@@ -224,9 +142,8 @@ def alliance_administration(request, alliance_id):
224
142
  "corporations": corporations,
225
143
  "missing_corporations": missing_corporations,
226
144
  }
227
- context = add_info_to_context(request, context)
228
145
  return render(
229
146
  request,
230
- "ledger/allyledger/admin/alliance_administration.html",
147
+ "ledger/view-alliance-administration.html",
231
148
  context=context,
232
149
  )