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
@@ -6,23 +6,21 @@ from django.db.models import QuerySet
6
6
  from allianceauth.eveonline.models import EveAllianceInfo
7
7
  from allianceauth.services.hooks import get_extension_logger
8
8
 
9
- # Alliance Auth (External Libs)
10
- from app_utils.logging import LoggerAddTag
11
-
12
9
  # AA Ledger
13
10
  from ledger import __title__, models
11
+ from ledger.providers import AppLogger
14
12
 
15
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
13
+ logger = AppLogger(get_extension_logger(__name__), __title__)
16
14
 
17
15
 
18
- def get_character_or_none(
16
+ def get_characterowner_or_none(
19
17
  request, character_id
20
- ) -> tuple[bool, models.CharacterAudit | None]:
18
+ ) -> tuple[bool, models.CharacterOwner | None]:
21
19
  """Get Character and check permissions"""
22
20
  perms = True
23
21
 
24
22
  try:
25
- character = models.CharacterAudit.objects.get(
23
+ owner = models.CharacterOwner.objects.get(
26
24
  eve_character__character_id=character_id
27
25
  )
28
26
  except ObjectDoesNotExist:
@@ -31,27 +29,27 @@ def get_character_or_none(
31
29
  return None, None
32
30
 
33
31
  # check access
34
- visible = models.CharacterAudit.objects.visible_eve_characters(request.user)
35
- if character.eve_character not in visible:
32
+ visible = models.CharacterOwner.objects.visible_eve_characters(request.user)
33
+ if owner.eve_character not in visible:
36
34
  perms = False
37
- return perms, character
35
+ return perms, owner
38
36
 
39
37
 
40
- def get_corporation(
38
+ def get_corporationowner_or_none(
41
39
  request, corporation_id
42
- ) -> tuple[bool | None, models.CorporationAudit | None]:
40
+ ) -> tuple[bool | None, models.CorporationOwner | None]:
43
41
  """Return Corporation and check permissions"""
44
42
  perms = True
45
43
 
46
44
  try:
47
- main_corp = models.CorporationAudit.objects.get(
48
- corporation__corporation_id=corporation_id
45
+ main_corp = models.CorporationOwner.objects.get(
46
+ eve_corporation__corporation_id=corporation_id
49
47
  )
50
48
  except ObjectDoesNotExist:
51
49
  return None, None
52
50
 
53
51
  # Check access
54
- visible = models.CorporationAudit.objects.visible_to(request.user)
52
+ visible = models.CorporationOwner.objects.visible_to(request.user)
55
53
  if main_corp not in visible:
56
54
  perms = False
57
55
  return perms, main_corp
@@ -59,37 +57,39 @@ def get_corporation(
59
57
 
60
58
  def get_manage_corporation(
61
59
  request, corporation_id
62
- ) -> tuple[bool | None, models.CorporationAudit | None]:
60
+ ) -> tuple[bool | None, models.CorporationOwner | None]:
63
61
  """Returns a tuple of the permissions and the corporation object if manageable"""
64
62
  perms = True
65
63
 
66
64
  try:
67
- main_corp = models.CorporationAudit.objects.get(
68
- corporation__corporation_id=corporation_id
65
+ main_corp = models.CorporationOwner.objects.get(
66
+ eve_corporation__corporation_id=corporation_id
69
67
  )
70
68
  except ObjectDoesNotExist:
71
69
  return None, None
72
70
 
73
71
  # Check access
74
- visible = models.CorporationAudit.objects.manage_to(request.user)
72
+ visible = models.CorporationOwner.objects.manage_to(request.user)
75
73
  if main_corp not in visible:
76
74
  perms = False
77
75
  return perms, main_corp
78
76
 
79
77
 
80
- def get_alliance(request, alliance_id) -> tuple[bool | None, EveAllianceInfo | None]:
78
+ def get_alliance_or_none(
79
+ request, alliance_id
80
+ ) -> tuple[bool | None, EveAllianceInfo | None]:
81
81
  """Get Alliance and check permissions for each corporation"""
82
82
  perms = True
83
83
 
84
- corporations = models.CorporationAudit.objects.filter(
85
- corporation__alliance__alliance_id=alliance_id
84
+ corporations = models.CorporationOwner.objects.filter(
85
+ eve_corporation__alliance__alliance_id=alliance_id
86
86
  )
87
87
 
88
88
  if not corporations.exists():
89
89
  return None, None
90
90
 
91
91
  # Check access
92
- visible = models.CorporationAudit.objects.visible_to(request.user)
92
+ visible = models.CorporationOwner.objects.visible_to(request.user)
93
93
 
94
94
  # Check if there is an intersection between main_corp and visible
95
95
  common_corps = corporations.intersection(visible)
@@ -102,19 +102,19 @@ def get_alliance(request, alliance_id) -> tuple[bool | None, EveAllianceInfo | N
102
102
 
103
103
  def get_all_corporations_from_alliance(
104
104
  request, alliance_id
105
- ) -> tuple[bool | None, list[models.CorporationAudit] | None]:
105
+ ) -> tuple[bool | None, list[models.CorporationOwner] | None]:
106
106
  """Get Alliance and check permissions for each corporation"""
107
107
  perms = True
108
108
 
109
- corporations = models.CorporationAudit.objects.filter(
110
- corporation__alliance__alliance_id=alliance_id
109
+ corporations = models.CorporationOwner.objects.filter(
110
+ eve_corporation__alliance__alliance_id=alliance_id
111
111
  )
112
112
 
113
113
  if not corporations.exists():
114
114
  return None, None
115
115
 
116
116
  # Check access
117
- visible = models.CorporationAudit.objects.visible_to(request.user)
117
+ visible = models.CorporationOwner.objects.visible_to(request.user)
118
118
 
119
119
  # Check if there is an intersection between main_corp and visible
120
120
  common_corps = corporations.intersection(visible)
@@ -124,19 +124,19 @@ def get_all_corporations_from_alliance(
124
124
 
125
125
 
126
126
  def get_alts_queryset(
127
- character: models.CharacterAudit,
128
- ) -> QuerySet[list[models.CharacterAudit]]:
127
+ owner: models.CharacterOwner,
128
+ ) -> QuerySet[list[models.CharacterOwner]]:
129
129
  """Get all alts for a main character."""
130
130
  try:
131
131
  linked_characters = (
132
- character.eve_character.character_ownership.user.character_ownerships.all()
132
+ owner.eve_character.character_ownership.user.character_ownerships.all()
133
133
  )
134
134
 
135
135
  linked_characters = linked_characters.values_list("character_id", flat=True)
136
- return models.CharacterAudit.objects.filter(
136
+ return models.CharacterOwner.objects.filter(
137
137
  eve_character__id__in=linked_characters
138
138
  )
139
139
  except ObjectDoesNotExist:
140
- return models.CharacterAudit.objects.filter(
141
- eve_character__pk=character.eve_character.pk
140
+ return models.CharacterOwner.objects.filter(
141
+ eve_character__pk=owner.eve_character.pk
142
142
  )
@@ -0,0 +1,372 @@
1
+ # Django
2
+ from django.db import models
3
+ from django.urls import reverse
4
+ from django.utils.translation import gettext_lazy as _
5
+
6
+ # Alliance Auth
7
+ from allianceauth.authentication.models import CharacterOwnership
8
+ from allianceauth.services.hooks import get_extension_logger
9
+
10
+ # AA Ledger
11
+ from ledger import __title__
12
+ from ledger.api.schema import (
13
+ AllianceLedgerRequestInfo,
14
+ CorporationLedgerRequestInfo,
15
+ OwnerLedgerRequestInfo,
16
+ )
17
+ from ledger.helpers.eveonline import get_character_portrait_url
18
+ from ledger.models.planetary import CharacterPlanetDetails
19
+ from ledger.providers import AppLogger
20
+
21
+ logger = AppLogger(get_extension_logger(__name__), __title__)
22
+
23
+
24
+ def get_factory_info_button(
25
+ planet_details: CharacterPlanetDetails,
26
+ ) -> str:
27
+ """
28
+ Generate a Factory Info button for the Planetary View.
29
+
30
+ When clicked, it triggers a modal to display detailed information about the Factory.
31
+
32
+ Args:
33
+ planet_details (CharacterPlanetDetails): The planetary details object to be viewed.
34
+ Returns:
35
+ String: HTML string containing the info button.
36
+ """
37
+
38
+ # Generate the URL for the delete Request
39
+ button_request_info_url = reverse(
40
+ "ledger:api:get_factory_details",
41
+ kwargs={
42
+ "character_id": planet_details.character.eve_character.character_id,
43
+ "planet_id": planet_details.planet.id,
44
+ },
45
+ )
46
+
47
+ # Define the icon and tooltip for the delete button
48
+ icon = '<i class="fa-solid fa-info"></i>'
49
+ title = _("View Factory")
50
+ color = "primary"
51
+
52
+ # Create the HTML for the delete icon button
53
+ factory_info_button = (
54
+ f'<button data-action="{button_request_info_url}" '
55
+ f'class="btn btn-{color} btn-sm btn-square me-2" '
56
+ 'data-bs-toggle="modal" '
57
+ 'data-bs-tooltip="aa-ledger" '
58
+ 'data-bs-target="#ledger-view-planetary-factory" '
59
+ f'title="{title}">{icon}</button>'
60
+ )
61
+ return factory_info_button
62
+
63
+
64
+ def get_extractor_info_button(
65
+ planet_details: CharacterPlanetDetails,
66
+ ) -> str:
67
+ """
68
+ Generate a Extractor Info button for the Planetary View.
69
+
70
+ When clicked, it triggers a modal to display detailed information about the Extractor.
71
+
72
+ Args:
73
+ planet_details (CharacterPlanetDetails): The planetary details object to be viewed.
74
+ Returns:
75
+ String: HTML string containing the info button.
76
+ """
77
+
78
+ # Generate the URL for the delete Request
79
+ button_request_info_url = reverse(
80
+ "ledger:api:get_extractor_details",
81
+ kwargs={
82
+ "character_id": planet_details.character.eve_character.character_id,
83
+ "planet_id": planet_details.planet.id,
84
+ },
85
+ )
86
+
87
+ # Define the icon and tooltip for the delete button
88
+ icon = '<i class="fa-solid fa-info"></i>'
89
+ title = _("View Extractor")
90
+ color = "primary"
91
+
92
+ # Create the HTML for the delete icon button
93
+ extractor_info_button = (
94
+ f'<button data-action="{button_request_info_url}" '
95
+ f'class="btn btn-{color} btn-sm btn-square me-2" '
96
+ 'data-bs-toggle="modal" '
97
+ 'data-bs-tooltip="aa-ledger" '
98
+ 'data-bs-target="#ledger-view-planetary-extractor" '
99
+ f'title="{title}">{icon}</button>'
100
+ )
101
+ return extractor_info_button
102
+
103
+
104
+ def get_toggle_notification_button(
105
+ planet_details: CharacterPlanetDetails,
106
+ ) -> str:
107
+ """
108
+ Generate a Notification Toggle button for the Planetary View.
109
+
110
+ When clicked, it triggers a modal to confirm the action.
111
+
112
+ Args:
113
+ planet_details (CharacterPlanetDetails): The planetary details object to be viewed.
114
+ Returns:
115
+ String: HTML string containing the info button.
116
+ """
117
+
118
+ # Generate the URL for the delete Request
119
+ button_request_info_url = reverse(
120
+ "ledger:api:toggle_planet_notification",
121
+ kwargs={
122
+ "character_id": planet_details.character.eve_character.character_id,
123
+ "planet_id": planet_details.planet.id,
124
+ },
125
+ )
126
+
127
+ # Define the icon and tooltip for the delete button
128
+ icon = '<i class="fa-solid fa-bullhorn"></i>'
129
+ title = _("Toggle Notification")
130
+ color = "primary"
131
+
132
+ # Create the HTML for the delete icon button
133
+ notification_toggle_button = (
134
+ f'<button data-action="{button_request_info_url}" '
135
+ f'class="btn btn-{color} btn-sm btn-square me-2" '
136
+ 'data-bs-toggle="modal" '
137
+ 'data-bs-tooltip="aa-ledger" '
138
+ 'data-bs-target="#ledger-accept-planet-toggle-notification" '
139
+ f'title="{title}">{icon}</button>'
140
+ )
141
+ return notification_toggle_button
142
+
143
+
144
+ def get_character_details_info_button(
145
+ character_id: int,
146
+ request_info: OwnerLedgerRequestInfo,
147
+ section: str = "summary",
148
+ ) -> str:
149
+ """
150
+ Generate a Character Details Info button for the Character Ledger View.
151
+
152
+ When clicked, it triggers a modal to display detailed information about the Character.
153
+
154
+ Args:
155
+ character_id (int): The character ID to be viewed.
156
+ request_info (LedgerRequestInfo): The request information containing date and section details.
157
+ section (str, optional): The section of the ledger to view.
158
+ Returns:
159
+ String: HTML string containing the info button.
160
+ """
161
+
162
+ kwargs = {"character_id": character_id, "section": section}
163
+ if request_info.year is not None:
164
+ kwargs["year"] = request_info.year
165
+ if request_info.month is not None:
166
+ kwargs["month"] = request_info.month
167
+ if request_info.day is not None:
168
+ kwargs["day"] = request_info.day
169
+
170
+ # Generate the URL for the Info Request
171
+ button_request_info_url = reverse(
172
+ "ledger:api:get_character_ledger_details", kwargs=kwargs
173
+ )
174
+
175
+ # Define the icon and tooltip for the Info button
176
+ icon = '<i class="fa-solid fa-info"></i>'
177
+ title = _("View Details")
178
+ color = "primary"
179
+
180
+ # Create the HTML for the Info icon button
181
+ ledger_info_button = (
182
+ f'<button data-action="{button_request_info_url}" '
183
+ f'class="btn btn-{color} btn-sm btn-square me-2" '
184
+ 'data-bs-toggle="modal" '
185
+ 'data-bs-tooltip="aa-ledger" '
186
+ 'data-bs-target="#ledger-view-character-ledger-details" '
187
+ f'title="{title}">{icon}</button>'
188
+ )
189
+ return ledger_info_button
190
+
191
+
192
+ def get_ref_type_details_popover_button(
193
+ ref_types: list[str],
194
+ ) -> str:
195
+ """
196
+ Generate a Character Details Popover button for the Character Ledger View.
197
+
198
+ When hover, it triggers a popover to display information about the Ref Types.
199
+
200
+ Args:
201
+ ref_types (list[str]): The list of reference types to be viewed.
202
+ Returns:
203
+ String: HTML string containing the popover button.
204
+ """
205
+
206
+ # Define the icon and tooltip for the Ref Type button
207
+ icon = '<i class="fa-solid fa-info-circle"></i>'
208
+ title = _("Included Reference Types")
209
+ color = "primary"
210
+
211
+ # Create the HTML for the popover icon button
212
+ ledger_popover_button = (
213
+ f"<button "
214
+ f'class="btn btn-{color} btn-sm btn-square me-2" '
215
+ 'data-bs-toggle="popover" '
216
+ 'data-bs-popover="aa-ledger" '
217
+ 'data-bs-trigger="hover" '
218
+ 'data-bs-placement="top" '
219
+ 'data-bs-html="true" '
220
+ f'data-bs-content="{", ".join(ref_types)}" '
221
+ f'title="{title}">{icon}</button>'
222
+ )
223
+ return ledger_popover_button
224
+
225
+
226
+ def get_corporation_ledger_popover_button(
227
+ alts: models.QuerySet[CharacterOwnership],
228
+ ) -> str:
229
+ """
230
+ Generate a Corporation Ledger Popover button for the Corporation Ledger View.
231
+
232
+ When hover, it triggers a popover to display information about all Alt characters from the Account.
233
+
234
+ Args:
235
+ alts (models.QuerySet[CharacterOwnership]): The queryset of alt characters to be viewed.
236
+ Returns:
237
+ String: HTML string containing the popover button.
238
+ """
239
+ if not alts:
240
+ return ""
241
+
242
+ # Define the icon and tooltip for the Ref Type button
243
+ title = _("Included Alt Characters")
244
+
245
+ pieces: list[str] = []
246
+ for alt in alts:
247
+ portrait = get_character_portrait_url(
248
+ character_id=alt.character.character_id,
249
+ character_name=alt.character.character_name,
250
+ size=32,
251
+ as_html=True,
252
+ )
253
+ pieces.append(f"{portrait} {alt.character.character_name}<br>")
254
+
255
+ # join HTML, escape double-quotes for safe attribute embedding
256
+ content_html = "".join(pieces).replace('"', "&quot;")
257
+
258
+ ledger_popover_icon = (
259
+ f'<i class="fa-solid fa-circle-question" '
260
+ f'data-bs-toggle="popover" '
261
+ 'data-bs-popover="aa-ledger" '
262
+ 'data-bs-trigger="hover" '
263
+ 'data-bs-placement="top" '
264
+ 'data-bs-html="true" '
265
+ f'data-bs-content="{content_html}" '
266
+ f'title="{title}"></i>'
267
+ )
268
+ return ledger_popover_icon
269
+
270
+
271
+ def get_corporation_details_info_button(
272
+ entity_id: int,
273
+ request_info: CorporationLedgerRequestInfo,
274
+ section: str = "summary",
275
+ ) -> str:
276
+ """
277
+ Generate a Entity Details Info button for the Corporation Ledger View.
278
+
279
+ When clicked, it triggers a modal to display detailed information about the Entity.
280
+
281
+ Args:
282
+ entity_id (int): The entity ID to be viewed.
283
+ request_info (CorporationLedgerRequestInfo): The request information containing date and section details.
284
+ section (str, optional): The section of the ledger to view.
285
+ Returns:
286
+ String: HTML string containing the info button.
287
+ """
288
+
289
+ kwargs = {
290
+ "corporation_id": request_info.owner_id,
291
+ "entity_id": entity_id,
292
+ "section": section,
293
+ }
294
+ if request_info.year is not None:
295
+ kwargs["year"] = request_info.year
296
+ if request_info.month is not None:
297
+ kwargs["month"] = request_info.month
298
+ if request_info.day is not None:
299
+ kwargs["day"] = request_info.day
300
+
301
+ # Generate the URL for the Info Request
302
+ button_request_info_url = reverse(
303
+ "ledger:api:get_corporation_ledger_details", kwargs=kwargs
304
+ )
305
+
306
+ # Define the icon and tooltip for the Info button
307
+ icon = '<i class="fa-solid fa-info"></i>'
308
+ title = _("View Details")
309
+ color = "primary"
310
+
311
+ # Create the HTML for the Info icon button
312
+ ledger_info_button = (
313
+ f'<button data-action="{button_request_info_url}" '
314
+ f'class="btn btn-{color} btn-sm btn-square me-2" '
315
+ 'data-bs-toggle="modal" '
316
+ 'data-bs-tooltip="aa-ledger" '
317
+ 'data-bs-target="#ledger-view-corporation-ledger-details" '
318
+ f'title="{title}">{icon}</button>'
319
+ )
320
+ return ledger_info_button
321
+
322
+
323
+ def get_alliance_details_info_button(
324
+ entity_id: int,
325
+ request_info: AllianceLedgerRequestInfo,
326
+ section: str = "summary",
327
+ ) -> str:
328
+ """
329
+ Generate a Entity Details Info button for the Corporation Ledger View.
330
+
331
+ When clicked, it triggers a modal to display detailed information about the Entity.
332
+
333
+ Args:
334
+ entity_id (int): The entity ID to be viewed.
335
+ request_info (AllianceLedgerRequestInfo): The request information containing date and section details.
336
+ section (str, optional): The section of the ledger to view.
337
+ Returns:
338
+ String: HTML string containing the info button.
339
+ """
340
+
341
+ kwargs = {
342
+ "alliance_id": request_info.owner_id,
343
+ "entity_id": entity_id,
344
+ "section": section,
345
+ }
346
+ if request_info.year is not None:
347
+ kwargs["year"] = request_info.year
348
+ if request_info.month is not None:
349
+ kwargs["month"] = request_info.month
350
+ if request_info.day is not None:
351
+ kwargs["day"] = request_info.day
352
+
353
+ # Generate the URL for the Info Request
354
+ button_request_info_url = reverse(
355
+ "ledger:api:get_alliance_ledger_details", kwargs=kwargs
356
+ )
357
+
358
+ # Define the icon and tooltip for the Info button
359
+ icon = '<i class="fa-solid fa-info"></i>'
360
+ title = _("View Details")
361
+ color = "primary"
362
+
363
+ # Create the HTML for the Info icon button
364
+ ledger_info_button = (
365
+ f'<button data-action="{button_request_info_url}" '
366
+ f'class="btn btn-{color} btn-sm btn-square me-2" '
367
+ 'data-bs-toggle="modal" '
368
+ 'data-bs-tooltip="aa-ledger" '
369
+ 'data-bs-target="#ledger-view-alliance-ledger-details" '
370
+ f'title="{title}">{icon}</button>'
371
+ )
372
+ return ledger_info_button