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
ledger/api/schema.py CHANGED
@@ -1,25 +1,198 @@
1
1
  # Standard Library
2
2
  from datetime import datetime
3
- from typing import Any
4
3
 
5
4
  # Third Party
6
5
  from ninja import Schema
7
6
 
7
+ # Django
8
+ from django.utils import timezone
8
9
 
9
- class EveName(Schema):
10
- id: int
10
+ # AA Ledger
11
+ from ledger.helpers.billboard import BillboardData
12
+
13
+
14
+ class OwnerSchema(Schema):
15
+ """
16
+ Schema for Character or Character Owner.
17
+
18
+ Attributes:
19
+ character_id (int): The ID of the character.
20
+ character_name (str): The name of the character.
21
+ icon (str | None): The URL of the character's icon, if available.
22
+ """
23
+
24
+ character_id: int
25
+ character_name: str
26
+ icon: str | None = None
27
+
28
+
29
+ class EntitySchema(Schema):
30
+ """
31
+ Schema for Entity or Corporation Owner.
32
+
33
+ Attributes:
34
+ entity_id (int): The ID of the entity.
35
+ entity_name (str): The name of the entity.
36
+ icon (str | None): The URL of the entity's icon, if available.
37
+ """
38
+
39
+ entity_id: int
40
+ entity_name: str
41
+ alt_ids: list[int] = []
42
+ icon: str = ""
43
+ popover: str = ""
44
+
45
+
46
+ class CategorySchema(Schema):
11
47
  name: str
12
- cat: str | None = None
48
+ amount: float = 0.00
49
+ average: float = 0.00
50
+ average_tick: float = 0.00
51
+ ref_types: str | None = None
13
52
 
14
53
 
15
- class CharacterPlanet(Schema):
16
- character_id: int | None = None
17
- character_name: str | None = None
18
- planet: str | None = None
19
- planet_id: int | None = None
20
- upgrade_level: int | None = None
21
- num_pins: int | None = None
54
+ class UpdateStatusSchema(Schema):
22
55
  last_update: datetime | None = None
56
+ last_run: datetime | None = None
57
+ status: str | None = None
58
+ icon: str | None = None
59
+
60
+
61
+ class BillboardSchema(Schema):
62
+ xy_chart: BillboardData | None = None
63
+ chord_chart: BillboardData | None = None
64
+
65
+
66
+ class LedgerResponse(Schema):
67
+ """
68
+ Schema for Ledger Response.
69
+
70
+ Attributes:
71
+ owner (OwnerSchema): The owner of the ledger.
72
+ billboard (BillboardSchema): Billboard data.
73
+ actions (str, optional): HTML string for actions.
74
+ """
75
+
76
+ owner: OwnerSchema
77
+ billboard: BillboardSchema
78
+ actions: str = ""
79
+
80
+
81
+ class LedgerSchema(Schema):
82
+ """
83
+
84
+ Schema for Ledger Summary.
85
+
86
+ Attributes:
87
+ bounty (float): Amount related to bounties.
88
+ ess (float): Amount related to ESS activities.
89
+ costs (float): Amount related to costs.
90
+ miscellaneous (float): Miscellaneous amount.
91
+ total (float): Total amount.
92
+ """
93
+
94
+ bounty: float = 0.00
95
+ ess: float = 0.00
96
+ costs: float = 0.00
97
+ miscellaneous: float = 0.00
98
+ total: float = 0.00
99
+
100
+
101
+ class CharacterLedgerSchema(LedgerSchema):
102
+ """
103
+ Schema for Character Ledger extending LedgerSchema.
104
+
105
+ Subclass of :class:`LedgerSchema`.
106
+
107
+ Attributes:
108
+ mining (float): Amount related to mining activities.
109
+ """
110
+
111
+ mining: float = 0.00
112
+
113
+
114
+ class OwnerLedgerRequestInfo(Schema):
115
+ """Schema for Owner Ledger Request Information."""
116
+
117
+ owner_id: int
118
+ year: int
119
+ month: int | None = None
120
+ day: int | None = None
121
+ section: str = "summary"
122
+ dropdown_html: str | None = None
123
+ footer_html: str | None = None
124
+
125
+ def to_date_query(self) -> dict:
126
+ date_query = {"date__year": self.year}
127
+ if self.month is not None:
128
+ date_query["date__month"] = self.month
129
+ if self.day is not None:
130
+ date_query["date__day"] = self.day
131
+ return date_query
132
+
133
+
134
+ class CorporationLedgerRequestInfo(OwnerLedgerRequestInfo):
135
+ """
136
+ Schema for Corporation Ledger Request Information.
137
+
138
+ Subclass of :class:`OwnerLedgerRequestInfo`.
139
+
140
+ Attributes:
141
+ entity_id (int | None): The ID of the entity.
142
+ division_id (int | None): The ID of the division.
143
+ """
144
+
145
+ entity_id: int | None = None
146
+ division_id: int | None = None
147
+
148
+ def to_division_query(self) -> dict:
149
+ division_query = {}
150
+ if self.division_id is not None:
151
+ division_query["division__division_id"] = self.division_id
152
+ return division_query
153
+
154
+
155
+ class AllianceLedgerRequestInfo(OwnerLedgerRequestInfo):
156
+ """
157
+ Schema for Alliance Ledger Request Information.
158
+
159
+ Subclass of :class:`OwnerLedgerRequestInfo`.
160
+
161
+ Attributes:
162
+ corporation_id (int | None): The ID of the corporation.
163
+ """
164
+
165
+ corporation_id: int | None = None
166
+
167
+
168
+ class LedgerDetailsSummary(Schema):
169
+ """
170
+ Schema for summary of ledger details.
171
+
172
+ Attributes:
173
+ summary (str): Summary of all categories.
174
+ daily (str): Daily breakdown of categories.
175
+ hourly (str): Hourly breakdown of categories.
176
+ """
177
+
178
+ summary: str = ""
179
+ daily: str = ""
180
+ hourly: str = ""
181
+
182
+
183
+ class LedgerDetailsResponse(Schema):
184
+ """Flexible schema for detailed ledger categories.
185
+
186
+ Attributes:
187
+ summary (CategorySchema): Summary of all categories.
188
+ daily (CategorySchema): Daily breakdown of categories.
189
+ hourly (CategorySchema): Hourly breakdown of categories.
190
+ """
191
+
192
+ summary: list[CategorySchema]
193
+ daily: list[CategorySchema]
194
+ hourly: list[CategorySchema]
195
+ total: LedgerDetailsSummary
23
196
 
24
197
 
25
198
  class CharacterAdmin(Schema):
@@ -34,7 +207,59 @@ class AllianceAdmin(Schema):
34
207
  alliance: dict | None = None
35
208
 
36
209
 
37
- class Ledger(Schema):
38
- ratting: list | None = None
39
- billboard: Any | None = None
40
- total: dict | None = None
210
+ class EveTypeSchema(Schema):
211
+ """
212
+ Schema for EVE Online item types.
213
+
214
+ Attributes:
215
+ id (int): The ID of the item type.
216
+ name (str): The name of the item type.
217
+ description (str | None): The description of the item type, if available.
218
+ group_id (int | None): The group ID of the item type, if available.
219
+ group_name (str | None): The group name of the item type, if available.
220
+ market_group_id (int | None): The market group ID of the item type, if available.
221
+ market_group_name (str | None): The market group name of the item type, if available.
222
+ icon (str | None): The URL of the item type's icon, if available.
223
+ """
224
+
225
+ id: int
226
+ name: str
227
+ description: str | None = None
228
+ group_id: int | None = None
229
+ group_name: str | None = None
230
+ market_group_id: int | None = None
231
+ market_group_name: str | None = None
232
+ icon: str | None = None
233
+
234
+
235
+ class PlanetSchema(Schema):
236
+ id: int
237
+ name: str
238
+ type: EveTypeSchema
239
+ upgrade_level: int
240
+ num_pins: int
241
+ last_update: timezone.datetime
242
+
243
+
244
+ class CharacterPlanet(Schema):
245
+ character_id: int | None = None
246
+ character_name: str | None = None
247
+ planet: str | None = None
248
+ planet_id: int | None = None
249
+ upgrade_level: int | None = None
250
+ num_pins: int | None = None
251
+ last_update: datetime | None = None
252
+
253
+
254
+ class ProgressBarSchema(Schema):
255
+ percentage: str
256
+ html: str
257
+
258
+
259
+ class ExtractorSchema(Schema):
260
+ item_id: int
261
+ item_name: str
262
+ icon: str | None = None
263
+ install_time: str
264
+ expiry_time: str
265
+ progress: ProgressBarSchema
ledger/app_settings.py CHANGED
@@ -2,33 +2,17 @@
2
2
  App Settings
3
3
  """
4
4
 
5
- # Standard Library
6
- import sys
7
-
8
- # Alliance Auth (External Libs)
9
- from app_utils.app_settings import clean_setting
10
-
11
- IS_TESTING = sys.argv[1:2] == ["test"]
12
-
13
- # Set Test Mode True or False
5
+ # Django
6
+ from django.conf import settings
14
7
 
15
8
  # Set Naming on Auth Hook
16
- LEDGER_APP_NAME = clean_setting("LEDGER_APP_NAME", "Ledger")
17
-
18
- # zKillboard - https://zkillboard.com/
19
- EVE_BASE_URL = "https://esi.evetech.net/"
20
- EVE_API_URL = "https://esi.evetech.net/latest/"
21
- EVE_BASE_URL_REGEX = r"^http[s]?:\/\/esi.evetech\.net\/"
22
-
23
- # fuzzwork
24
- FUZZ_BASE_URL = "https://www.fuzzwork.co.uk/"
25
- FUZZ_API_URL = "https://www.fuzzwork.co.uk/api/"
26
- FUZZ_BASE_URL_REGEX = r"^http[s]?:\/\/(www\.)?fuzzwork\.co\.uk\/"
9
+ LEDGER_APP_NAME = getattr(settings, "LEDGER_APP_NAME", "Ledger")
27
10
 
28
11
  # Global timeout for tasks in seconds to reduce task accumulation during outages.
29
- LEDGER_TASKS_TIME_LIMIT = clean_setting("LEDGER_TASKS_TIME_LIMIT", 600)
12
+ LEDGER_TASKS_TIME_LIMIT = getattr(settings, "LEDGER_TASKS_TIME_LIMIT", 600)
30
13
 
31
- LEDGER_STALE_TYPES = clean_setting(
14
+ LEDGER_STALE_TYPES = getattr(
15
+ settings,
32
16
  "LEDGER_STALE_TYPES",
33
17
  {
34
18
  "wallet_journal": 30,
@@ -41,13 +25,13 @@ LEDGER_STALE_TYPES = clean_setting(
41
25
  )
42
26
 
43
27
  # Mining Price Calculation
44
- LEDGER_USE_COMPRESSED = clean_setting("LEDGER_USE_COMPRESSED", True)
45
- LEDGER_PRICE_PERCENTAGE = clean_setting("LEDGER_PRICE_PERCENTAGE", 0.9)
28
+ LEDGER_USE_COMPRESSED = getattr(settings, "LEDGER_USE_COMPRESSED", True)
29
+ LEDGER_PRICE_PERCENTAGE = getattr(settings, "LEDGER_PRICE_PERCENTAGE", 0.9)
46
30
 
47
31
  # Ledger Cache System
48
- LEDGER_CACHE_STALE = 60 * 60 * 168 # 168 hours
32
+ LEDGER_CACHE_STALE = 60 * 60 * 24 * 30 # 30 days
49
33
  LEDGER_CACHE_KEY = "LEDGER"
50
- LEDGER_CACHE_ENABLED = True
34
+ LEDGER_CACHE_ENABLED = getattr(settings, "LEDGER_CACHE_ENABLED", True)
51
35
 
52
36
  # Maximum Number of Objects processed per run of DJANGO Batch Method
53
37
  # Controls how many database records are inserted in a single batch operation.
@@ -55,4 +39,4 @@ LEDGER_CACHE_ENABLED = True
55
39
  # reduce this value (e.g., to 250 or 100).
56
40
  # Can be increased for better performance if your MySQL max_allowed_packet setting
57
41
  # is configured higher (default is usually 16-64MB).
58
- LEDGER_BULK_BATCH_SIZE = clean_setting("LEDGER_BULK_BATCH_SIZE", 500)
42
+ LEDGER_BULK_BATCH_SIZE = getattr(settings, "LEDGER_BULK_BATCH_SIZE", 500)
ledger/auth_hooks.py CHANGED
@@ -10,7 +10,7 @@ from allianceauth.services.hooks import MenuItemHook, UrlHook
10
10
 
11
11
  # AA Ledger
12
12
  from ledger import app_settings, urls
13
- from ledger.models.characteraudit import CharacterAudit
13
+ from ledger.models.characteraudit import CharacterOwner
14
14
 
15
15
 
16
16
  class LedgerMenuItem(MenuItemHook):
@@ -27,7 +27,7 @@ class LedgerMenuItem(MenuItemHook):
27
27
  def render(self, request):
28
28
  if request.user.has_perm("ledger.basic_access"):
29
29
  self.count = (
30
- CharacterAudit.objects.annotate_total_update_status_user(
30
+ CharacterOwner.objects.annotate_total_update_status_user(
31
31
  user=request.user
32
32
  )
33
33
  .aggregate(total_failed=Sum("num_sections_failed"))
ledger/constants.py CHANGED
@@ -2,6 +2,10 @@
2
2
  Constants
3
3
  """
4
4
 
5
+ # Django
6
+ from django.db import models
7
+ from django.utils.translation import gettext_lazy as _
8
+
5
9
  # Embed colors
6
10
  DISCORD_EMBED_COLOR_INFO = 0x5BC0DE
7
11
  DISCORD_EMBED_COLOR_SUCCESS = 0x5CB85C
@@ -16,188 +20,57 @@ DISCORD_EMBED_COLOR_MAP = {
16
20
  "danger": DISCORD_EMBED_COLOR_DANGER,
17
21
  }
18
22
 
19
- COMMAND_CENTER = [
20
- 2129,
21
- 2130,
22
- 2131,
23
- 2132,
24
- 2136,
25
- 2137,
26
- 2138,
27
- 2139,
28
- 2140,
29
- 2141,
30
- 2142,
31
- 2143,
32
- 2144,
33
- 2145,
34
- 2146,
35
- 2147,
36
- 2148,
37
- 2149,
38
- 2150,
39
- 2151,
40
- 2152,
41
- 2153,
42
- 2154,
43
- 2155,
44
- 2156,
45
- 2157,
46
- 2158,
47
- 2159,
48
- 2160,
49
- 2254,
50
- 2524,
51
- 2525,
52
- 2533,
53
- 2534,
54
- 2549,
55
- 2550,
56
- 2551,
57
- 2574,
58
- 2576,
59
- 2577,
60
- 2568,
61
- 2581,
62
- 2582,
63
- 2585,
64
- 2586,
65
- ]
66
- SPACEPORTS = [2256, 2542, 2543, 2544, 2552, 2555, 2556, 2557]
67
- STORAGE_FACILITY = [2257, 2535, 2536, 2541, 2558, 2560, 2561, 2562]
68
- EXTRACTOR_CONTROL_UNIT = [2848, 3060, 3061, 3062, 3063, 3064, 3067, 3068]
69
- P0_PRODUCTS_SOLID = [2267, 2270, 2272, 2306, 2307]
70
- P0_PRODUCTS_LIQUID_GAS = [2268, 2308, 2309, 2310, 2311]
71
- P0_PRODUCTS_ORGANIC = [2073, 2286, 2287, 2288, 2305]
72
- P0_PRODUCTS = P0_PRODUCTS_SOLID + P0_PRODUCTS_LIQUID_GAS + P0_PRODUCTS_ORGANIC
73
- P1_PRODUCTS = [
74
- 2389,
75
- 2390,
76
- 2392,
77
- 2393,
78
- 2395,
79
- 2396,
80
- 2397,
81
- 2398,
82
- 2399,
83
- 2400,
84
- 2401,
85
- 3645,
86
- 3683,
87
- 3779,
88
- 9828,
89
- ]
90
- P2_PRODUCTS = [
91
- 44,
92
- 2312,
93
- 2317,
94
- 2319,
95
- 2321,
96
- 2327,
97
- 2328,
98
- 2329,
99
- 2463,
100
- 3689,
101
- 3691,
102
- 3693,
103
- 3695,
104
- 3697,
105
- 3725,
106
- 3775,
107
- 3828,
108
- 983,
109
- 9832,
110
- 9836,
111
- 9838,
112
- 9840,
113
- 9842,
114
- 15317,
115
- ]
116
- P3_PRODUCTS = [
117
- 2344,
118
- 2345,
119
- 2346,
120
- 2348,
121
- 2349,
122
- 2351,
123
- 2352,
124
- 2354,
125
- 2358,
126
- 2360,
127
- 2361,
128
- 2366,
129
- 2367,
130
- 9834,
131
- 9846,
132
- 9848,
133
- 12836,
134
- 17136,
135
- 17392,
136
- 17898,
137
- 28974,
138
- ]
139
- P4_PRODUCTS = [2867, 2868, 2869, 2870, 2871, 2872, 2875, 2876]
140
- P5_PRODUCTS = []
141
-
142
23
  NPC_ENTITIES = [
143
24
  1000125, # Concord Bounties (Bounty Prizes, ESS
144
25
  1000132, # Secure Commerce Commission (Market Fees)
145
26
  1000413, # Air Laboratories (Daily Login Rewards, etc.)
146
27
  ]
147
28
 
148
- BOUNTY_PRIZES = ["bounty_prizes"]
149
- ESS_TRANSFER = ["ess_escrow_transfer"]
150
- MISSION_REWARD = ["agent_mission_reward", "agent_mission_time_bonus_reward"]
151
- INCURSION = ["corporate_reward_payout"]
152
29
 
153
- # Cost Ref Types
154
- CONTRACT = [
155
- "contract_price",
156
- "contract_collateral",
157
- "contract_reward_deposited",
158
- "contract_brokers_fee",
159
- "contract_sales_tax",
160
- "contract_price_payment_corp",
161
- "contract_reward",
162
- "contract_reward_refund",
163
- "contract_collateral_refund",
164
- "contract_deposit_refund",
165
- ]
166
- MARKET = [
167
- "market_escrow",
168
- "transaction_tax",
169
- "market_provider_tax",
170
- "brokers_fee",
171
- "market_transaction",
172
- ]
173
- ASSETS = ["asset_safety_recovery_tax"]
174
- TRAVELING = [
175
- "structure_gate_jump",
176
- "jump_clone_activation_fee",
177
- "jump_clone_installation_fee",
178
- ]
179
- PRODUCTION = [
180
- "industry_job_tax",
181
- "manufacturing",
182
- "researching_time_productivity",
183
- "researching_material_productivity",
184
- "copying",
185
- "reprocessing_tax",
186
- "reaction",
187
- ]
188
- SKILL = ["skill_purchase"]
189
- PLANETARY = [
190
- "planetary_export_tax",
191
- "planetary_import_tax",
192
- "planetary_construction",
193
- ]
194
- LP = ["lp_store"]
195
- # Trading
196
- DONATION = ["player_donation"]
197
- INSURANCE = ["insurance"]
198
- # MISC
199
- MILESTONE_REWARD = ["milestone_reward_payment"]
200
- DAILY_GOAL_REWARD = ["daily_goal_payouts"]
30
+ class MonthChoice(models.TextChoices):
31
+ JANUARY = 1, _("January")
32
+ FEBRUARY = 2, _("February")
33
+ MARCH = 3, _("March")
34
+ APRIL = 4, _("April")
35
+ MAY = 5, _("May")
36
+ JUNE = 6, _("June")
37
+ JULY = 7, _("July")
38
+ AUGUST = 8, _("August")
39
+ SEPTEMBER = 9, _("September")
40
+ OCTOBER = 10, _("October")
41
+ NOVEMBER = 11, _("November")
42
+ DECEMBER = 12, _("December")
43
+
201
44
 
202
- RENTAL = ["office_rental_fee"]
203
- CORP_WITHDRAW = ["corporation_account_withdrawal"]
45
+ class DayChoice(models.TextChoices):
46
+ DAY_1 = 1, _("1")
47
+ DAY_2 = 2, _("2")
48
+ DAY_3 = 3, _("3")
49
+ DAY_4 = 4, _("4")
50
+ DAY_5 = 5, _("5")
51
+ DAY_6 = 6, _("6")
52
+ DAY_7 = 7, _("7")
53
+ DAY_8 = 8, _("8")
54
+ DAY_9 = 9, _("9")
55
+ DAY_10 = 10, _("10")
56
+ DAY_11 = 11, _("11")
57
+ DAY_12 = 12, _("12")
58
+ DAY_13 = 13, _("13")
59
+ DAY_14 = 14, _("14")
60
+ DAY_15 = 15, _("15")
61
+ DAY_16 = 16, _("16")
62
+ DAY_17 = 17, _("17")
63
+ DAY_18 = 18, _("18")
64
+ DAY_19 = 19, _("19")
65
+ DAY_20 = 20, _("20")
66
+ DAY_21 = 21, _("21")
67
+ DAY_22 = 22, _("22")
68
+ DAY_23 = 23, _("23")
69
+ DAY_24 = 24, _("24")
70
+ DAY_25 = 25, _("25")
71
+ DAY_26 = 26, _("26")
72
+ DAY_27 = 27, _("27")
73
+ DAY_28 = 28, _("28")
74
+ DAY_29 = 29, _("29")
75
+ DAY_30 = 30, _("30")
76
+ DAY_31 = 31, _("31")
ledger/decorators.py CHANGED
@@ -4,59 +4,15 @@ Decorators
4
4
 
5
5
  # Standard Library
6
6
  import time
7
- from functools import wraps
8
-
9
- # Django
10
- from django.core.cache import cache
11
7
 
12
8
  # Alliance Auth
13
9
  from allianceauth.services.hooks import get_extension_logger
14
10
 
15
- # Alliance Auth (External Libs)
16
- from app_utils.esi import fetch_esi_status
17
- from app_utils.logging import LoggerAddTag
18
-
19
11
  # AA Ledger
20
12
  from ledger import __title__
21
- from ledger.app_settings import IS_TESTING
22
-
23
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
24
-
25
- # Use shared ESI status route rate limit from app_settings
26
- ESI_STATUS_ROUTE_RATE_LIMIT = 5
27
- ESI_STATUS_KEY = "esi-is-available-status"
28
-
29
-
30
- def get_esi_available_cache() -> bool:
31
- """Return True if ESI availability cache is present."""
32
- if cache.get(ESI_STATUS_KEY):
33
- return True
34
- return False
35
-
36
-
37
- def when_esi_is_available(func):
38
- """
39
- Make sure the decorated task only runs when esi is available and store the result.
40
- Complete the task without running it when downtime is detected.
41
- Automatically disabled during tests.
42
- """
43
-
44
- @wraps(func)
45
- def outer(*args, **kwargs):
46
-
47
- # During tests we skip ESI checks
48
- if IS_TESTING or get_esi_available_cache():
49
- logger.debug("Skipping ESI check (testing mode or cache present).")
50
- return func(*args, **kwargs)
51
-
52
- # Check ESI status
53
- if fetch_esi_status().is_ok:
54
- logger.debug("ESI is available, proceeding.")
55
- cache.set(ESI_STATUS_KEY, "1", timeout=ESI_STATUS_ROUTE_RATE_LIMIT)
56
- return func(*args, **kwargs)
57
- return None # function will not run
13
+ from ledger.providers import AppLogger
58
14
 
59
- return outer
15
+ logger = AppLogger(get_extension_logger(__name__), __title__)
60
16
 
61
17
 
62
18
  def log_timing(logs):