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
@@ -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
  )