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.
- {aa_ledger-1.0.4.dist-info → aa_ledger-2.0.0.dist-info}/METADATA +5 -6
- aa_ledger-2.0.0.dist-info/RECORD +267 -0
- ledger/__init__.py +2 -2
- ledger/admin.py +23 -18
- ledger/api/__init__.py +23 -7
- ledger/api/{ledger/admin.py → admin.py} +25 -31
- ledger/api/alliance.py +755 -0
- ledger/api/character.py +786 -0
- ledger/api/corporation.py +1141 -0
- ledger/api/{helpers.py → helpers/core.py} +33 -33
- ledger/api/helpers/icons.py +372 -0
- ledger/api/helpers/planetary_helper.py +354 -0
- ledger/api/planetary.py +354 -0
- ledger/api/schema.py +240 -15
- ledger/app_settings.py +11 -27
- ledger/auth_hooks.py +2 -2
- ledger/constants.py +50 -177
- ledger/decorators.py +2 -46
- ledger/forms.py +133 -39
- ledger/helpers/billboard.py +194 -144
- ledger/helpers/cache.py +105 -0
- ledger/helpers/discord.py +2 -4
- ledger/helpers/eveonline.py +160 -0
- ledger/helpers/ledger_data.py +23 -0
- ledger/helpers/ref_type.py +53 -78
- ledger/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
- ledger/locale/cs_CZ/LC_MESSAGES/django.po +349 -193
- ledger/locale/de/LC_MESSAGES/django.mo +0 -0
- ledger/locale/de/LC_MESSAGES/django.po +528 -379
- ledger/locale/django.pot +721 -546
- ledger/locale/es/LC_MESSAGES/django.mo +0 -0
- ledger/locale/es/LC_MESSAGES/django.po +349 -194
- ledger/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
- ledger/locale/fr_FR/LC_MESSAGES/django.po +349 -193
- ledger/locale/it_IT/LC_MESSAGES/django.mo +0 -0
- ledger/locale/it_IT/LC_MESSAGES/django.po +349 -193
- ledger/locale/ja/LC_MESSAGES/django.mo +0 -0
- ledger/locale/ja/LC_MESSAGES/django.po +348 -193
- ledger/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
- ledger/locale/ko_KR/LC_MESSAGES/django.po +349 -193
- ledger/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
- ledger/locale/nl_NL/LC_MESSAGES/django.po +349 -193
- ledger/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
- ledger/locale/pl_PL/LC_MESSAGES/django.po +350 -193
- ledger/locale/ru/LC_MESSAGES/django.mo +0 -0
- ledger/locale/ru/LC_MESSAGES/django.po +348 -193
- ledger/locale/sk/LC_MESSAGES/django.mo +0 -0
- ledger/locale/sk/LC_MESSAGES/django.po +348 -193
- ledger/locale/uk/LC_MESSAGES/django.mo +0 -0
- ledger/locale/uk/LC_MESSAGES/django.po +348 -193
- ledger/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- ledger/locale/zh_Hans/LC_MESSAGES/django.po +348 -193
- ledger/managers/character_audit_manager.py +28 -20
- ledger/managers/character_journal_manager.py +185 -357
- ledger/managers/character_mining_manager.py +52 -26
- ledger/managers/character_planetary_manager.py +178 -136
- ledger/managers/corporation_audit_manager.py +36 -27
- ledger/managers/corporation_journal_manager.py +92 -56
- ledger/managers/general_manager.py +8 -7
- ledger/migrations/0018_remove_characterplanet_ledger_char_planet__58a5b6_idx_and_more.py +44 -0
- ledger/migrations/0019_rename_characteraudit_characterowner_and_more.py +48 -0
- ledger/models/__init__.py +5 -11
- ledger/models/characteraudit.py +101 -109
- ledger/models/corporationaudit.py +94 -49
- ledger/models/general.py +105 -211
- ledger/models/helpers/update_manager.py +302 -0
- ledger/models/planetary.py +60 -205
- ledger/providers.py +101 -0
- ledger/static/ledger/css/{ledger.css → aa-ledger.css} +54 -28
- ledger/static/ledger/js/aa-ledger.js +124 -0
- ledger/static/ledger/js/charts.js +25 -1
- ledger/static/ledger/js/view-alliance-ledger.js +383 -0
- ledger/static/ledger/js/view-character-ledger.js +388 -0
- ledger/static/ledger/js/view-corporation-ledger.js +402 -0
- ledger/static/ledger/js/view-planetary.js +492 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/flow.js +2 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/index.js +2 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/percent.js +2 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Animated.js +2 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/themes/Dark.js +2 -0
- ledger/static/ledger/libs/amCharts/5.14.4/js/xy.js +2 -0
- ledger/static/ledger/libs/datatables/2.3.5/css/dataTables.bootstrap5.css +610 -0
- ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.bootstrap5.js +122 -0
- ledger/static/ledger/libs/datatables/2.3.5/js/dataTables.js +14127 -0
- ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.css +516 -0
- ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/css/columnControl.dataTables.css +529 -0
- ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.js +73 -0
- ledger/static/ledger/libs/datatables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.js +3090 -0
- ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.css +20 -0
- ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.js +1203 -0
- ledger/static/ledger/libs/datatables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.js +59 -0
- ledger/tasks.py +157 -141
- ledger/templates/ledger/base.html +59 -21
- ledger/templates/ledger/bundles/aa-ledger-css.html +3 -0
- ledger/templates/ledger/bundles/aa-ledger-js.html +3 -0
- ledger/templates/ledger/bundles/view-alliance-ledger-js.html +14 -0
- ledger/templates/ledger/bundles/view-character-ledger-js.html +15 -0
- ledger/templates/ledger/bundles/view-character-planetary-css.html +3 -0
- ledger/templates/ledger/bundles/view-character-planetary-js.html +4 -0
- ledger/templates/ledger/bundles/view-corporation-ledger-js.html +15 -0
- ledger/templates/ledger/partials/modal/confirm.html +0 -1
- ledger/templates/ledger/partials/modal/request-accept-delete-alliance.html +38 -0
- ledger/templates/ledger/partials/modal/request-accept-delete-character.html +38 -0
- ledger/templates/ledger/partials/modal/request-accept-delete-corporation.html +38 -0
- ledger/templates/ledger/partials/modal/request-accept-switch-notification.html +38 -0
- ledger/templates/ledger/partials/modal/request-view-alliance-details.html +26 -0
- ledger/templates/ledger/partials/modal/request-view-character-details.html +26 -0
- ledger/templates/ledger/partials/modal/request-view-corporation-details.html +26 -0
- ledger/templates/ledger/partials/modal/request-view-extractor.html +32 -0
- ledger/templates/ledger/partials/modal/request-view-factory.html +31 -0
- ledger/templates/ledger/partials/{menu → navigation}/administration.html +8 -0
- ledger/templates/ledger/partials/{menu → navigation}/navigation.html +2 -2
- ledger/templates/ledger/partials/{administration → view-alliance-administration}/alliance_corporations.html +3 -3
- ledger/templates/ledger/partials/view-alliance-administration/dashboard.html +81 -0
- ledger/templates/ledger/partials/view-alliance-ledger/alliance-billboard.html +25 -0
- ledger/templates/ledger/partials/view-alliance-ledger/alliance-ledger-details.html +21 -0
- ledger/templates/ledger/partials/view-alliance-ledger/alliance-table.html +24 -0
- ledger/templates/ledger/partials/view-alliance-ledger/information/daily.html +18 -0
- ledger/templates/ledger/partials/view-alliance-ledger/information/hourly.html +18 -0
- ledger/templates/ledger/partials/view-alliance-ledger/information/summary.html +19 -0
- ledger/templates/ledger/partials/{administration → view-character-administration}/character.html +1 -9
- ledger/templates/ledger/partials/{administration → view-character-administration}/dashboard.html +0 -34
- ledger/templates/ledger/partials/view-character-ledger/character-billboard.html +25 -0
- ledger/templates/ledger/partials/view-character-ledger/character-ledger-details.html +21 -0
- ledger/templates/ledger/partials/view-character-ledger/character-table.html +25 -0
- ledger/templates/ledger/partials/view-character-ledger/information/daily.html +18 -0
- ledger/templates/ledger/partials/view-character-ledger/information/hourly.html +18 -0
- ledger/templates/ledger/partials/view-character-ledger/information/summary.html +19 -0
- ledger/templates/ledger/partials/view-character-planetary/extractor-table.html +24 -0
- ledger/templates/ledger/partials/view-character-planetary/factory-table.html +24 -0
- ledger/templates/ledger/partials/view-character-planetary/planetary-table.html +22 -0
- ledger/templates/ledger/partials/view-character-planetary/storage-table.html +23 -0
- ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation.html +5 -13
- ledger/templates/ledger/partials/{administration → view-corporation-administration}/corporation_characters.html +1 -1
- ledger/templates/ledger/partials/view-corporation-administration/dashboard.html +81 -0
- ledger/templates/ledger/partials/view-corporation-ledger/corporation-billboard.html +25 -0
- ledger/templates/ledger/partials/view-corporation-ledger/corporation-ledger-details.html +21 -0
- ledger/templates/ledger/partials/view-corporation-ledger/corporation-table.html +26 -0
- ledger/templates/ledger/partials/view-corporation-ledger/information/daily.html +18 -0
- ledger/templates/ledger/partials/view-corporation-ledger/information/hourly.html +18 -0
- ledger/templates/ledger/partials/view-corporation-ledger/information/summary.html +19 -0
- ledger/templates/ledger/view-administration.html +62 -0
- ledger/templates/ledger/view-alliance-administration.html +49 -0
- ledger/templates/ledger/view-alliance-ledger.html +72 -0
- ledger/templates/ledger/view-alliance-overview.html +131 -0
- ledger/templates/ledger/view-character-administration.html +42 -0
- ledger/templates/ledger/view-character-ledger.html +73 -0
- ledger/templates/ledger/view-character-overview.html +135 -0
- ledger/templates/ledger/view-character-planetary-overview.html +135 -0
- ledger/templates/ledger/view-character-planetary.html +73 -0
- ledger/templates/ledger/view-corporation-administration.html +42 -0
- ledger/templates/ledger/view-corporation-ledger.html +73 -0
- ledger/templates/ledger/view-corporation-overview.html +131 -0
- ledger/templatetags/ledger.py +3 -5
- ledger/tests/__init__.py +187 -0
- ledger/tests/test_admin.py +164 -68
- ledger/tests/test_auth_hook.py +31 -13
- ledger/tests/test_decarators.py +14 -79
- ledger/tests/test_discord_installed.py +0 -1
- ledger/tests/test_helpers/test_ledger_data.py +19 -0
- ledger/tests/test_managers/test_character_audit_manager.py +111 -69
- ledger/tests/test_managers/test_character_journal_manager.py +48 -208
- ledger/tests/test_managers/test_character_mining_manager.py +37 -16
- ledger/tests/test_managers/test_corporation_division_manager.py +66 -28
- ledger/tests/test_managers/test_corporation_journal_manager.py +39 -42
- ledger/tests/test_managers/test_general_manager.py +78 -18
- ledger/tests/test_managers/test_planetary_manager.py +73 -32
- ledger/tests/test_models/test_characteraudit.py +58 -74
- ledger/tests/test_models/test_characterminingledger.py +20 -26
- ledger/tests/test_models/test_characterwalletjournal.py +10 -33
- ledger/tests/test_models/test_corporationaudit.py +41 -35
- ledger/tests/test_models/test_corporationwalletjournal.py +35 -32
- ledger/tests/test_models/test_general.py +44 -11
- ledger/tests/test_models/test_planetary.py +14 -80
- ledger/tests/test_templatetags.py +2 -7
- ledger/tests/test_views/corporation/test_add_corp.py +16 -35
- ledger/tests/test_views/corporation/test_delete_corporation.py +66 -42
- ledger/tests/test_views/test_access.py +512 -545
- ledger/tests/test_views/test_add_ally.py +57 -46
- ledger/tests/test_views/test_add_char.py +21 -33
- ledger/tests/test_views/test_delete_character.py +24 -21
- ledger/tests/testdata/README_ESI_STUB.md +430 -0
- ledger/tests/testdata/esi_stub_openapi.py +511 -0
- ledger/tests/testdata/integrations/__init__.py +0 -0
- ledger/tests/testdata/{load_eveuniverse.py → integrations/eveuniverse.py} +0 -1
- ledger/tests/testdata/integrations/planetary.py +13 -0
- ledger/tests/testdata/json/factory.json +281 -0
- ledger/tests/testdata/json/inactive.json +281 -0
- ledger/tests/testdata/json/pins.json +175 -272
- ledger/tests/testdata/json/route.json +95 -528
- ledger/tests/testdata/test_esi_stub.py +468 -0
- ledger/tests/testdata/utils.py +601 -0
- ledger/thirdparty/charlink_hook.py +60 -30
- ledger/urls.py +0 -135
- ledger/views/alliance/add_ally.py +2 -4
- ledger/views/alliance/alliance_ledger.py +64 -147
- ledger/views/character/add_char.py +8 -10
- ledger/views/character/character_ledger.py +60 -126
- ledger/views/character/planetary.py +5 -98
- ledger/views/corporation/add_corp.py +10 -12
- ledger/views/corporation/corporation_ledger.py +65 -327
- ledger/views/index.py +92 -30
- aa_ledger-1.0.4.dist-info/RECORD +0 -236
- ledger/api/api_helper/planetary_helper.py +0 -107
- ledger/api/ledger/__init__.py +0 -7
- ledger/api/ledger/planetary.py +0 -231
- ledger/helpers/alliance.py +0 -317
- ledger/helpers/character.py +0 -251
- ledger/helpers/core.py +0 -665
- ledger/helpers/corporation.py +0 -427
- ledger/helpers/data_exporter.py +0 -452
- ledger/static/ledger/js/planetary-confirm.js +0 -66
- ledger/static/ledger/js/planetary.js +0 -143
- ledger/templates/ledger/admin.html +0 -43
- ledger/templates/ledger/allyledger/admin/alliance_administration.html +0 -46
- ledger/templates/ledger/allyledger/admin/alliance_overview.html +0 -108
- ledger/templates/ledger/allyledger/alliance_ledger.html +0 -86
- ledger/templates/ledger/bundles/character-ledger-bundles.html +0 -66
- ledger/templates/ledger/bundles/corporation-ledger-bundles.html +0 -75
- ledger/templates/ledger/bundles/ledger-bundles.html +0 -23
- ledger/templates/ledger/bundles/ledger-css.html +0 -3
- ledger/templates/ledger/bundles/planetary-bundles.html +0 -50
- ledger/templates/ledger/bundles/table-css.html +0 -3
- ledger/templates/ledger/charledger/admin/character_administration.html +0 -39
- ledger/templates/ledger/charledger/admin/character_overview.html +0 -106
- ledger/templates/ledger/charledger/character_ledger.html +0 -94
- ledger/templates/ledger/charledger/planetary/admin/planetary_overview.html +0 -123
- ledger/templates/ledger/charledger/planetary/planetary_ledger.html +0 -54
- ledger/templates/ledger/corpledger/admin/corporation_administration.html +0 -39
- ledger/templates/ledger/corpledger/admin/corporation_overview.html +0 -108
- ledger/templates/ledger/corpledger/corporation_ledger.html +0 -129
- ledger/templates/ledger/data-export.html +0 -78
- ledger/templates/ledger/error.html +0 -31
- ledger/templates/ledger/partials/form/error-message.html +0 -1
- ledger/templates/ledger/partials/information/daily.html +0 -56
- ledger/templates/ledger/partials/information/day.html +0 -48
- ledger/templates/ledger/partials/information/error.html +0 -8
- ledger/templates/ledger/partials/information/hourly.html +0 -53
- ledger/templates/ledger/partials/information/summary.html +0 -88
- ledger/templates/ledger/partials/information/view_character_content.html +0 -35
- ledger/templates/ledger/partials/modal/switchalarm_confirm.html +0 -39
- ledger/templates/ledger/partials/modal/view_extractor.html +0 -48
- ledger/templates/ledger/partials/modal/view_factory.html +0 -123
- ledger/templates/ledger/partials/table/char-ledger.html +0 -85
- ledger/templates/ledger/partials/table/corp-ledger.html +0 -66
- ledger/templates/ledger/partials/table/planetary.html +0 -18
- ledger/templates/ledger/partials/thirdparty/billboard.html +0 -22
- ledger/templates/ledger/partials/view/card.html +0 -160
- ledger/templates/ledger/permission.html +0 -2
- ledger/tests/test_helpers/test_billboard.py +0 -11
- ledger/tests/test_helpers/test_data_exporter.py +0 -207
- ledger/tests/test_tasks.py +0 -282
- ledger/tests/test_view_helpers/test_core.py +0 -47
- ledger/tests/test_views/corporation/test_corporation.py +0 -267
- ledger/tests/test_views/test_planetary.py +0 -137
- ledger/tests/testdata/esi_stub.py +0 -109
- ledger/tests/testdata/esi_stub_migration.py +0 -80
- ledger/tests/testdata/generate_characteraudit.py +0 -106
- ledger/tests/testdata/generate_corporationaudit.py +0 -74
- ledger/tests/testdata/generate_events.py +0 -31
- ledger/tests/testdata/generate_miningledger.py +0 -13
- ledger/tests/testdata/generate_planets.py +0 -48
- ledger/tests/testdata/generate_walletjournal.py +0 -42
- ledger/tests/testdata/json/czarno-pins.json +0 -240
- ledger/tests/testdata/json/czarno-routes.json +0 -165
- ledger/tests/testdata/json/pins2.json +0 -538
- {aa_ledger-1.0.4.dist-info → aa_ledger-2.0.0.dist-info}/WHEEL +0 -0
- {aa_ledger-1.0.4.dist-info → aa_ledger-2.0.0.dist-info}/licenses/LICENSE +0 -0
- /ledger/{tests/test_view_helpers → api/helpers}/__init__.py +0 -0
- /ledger/templates/ledger/bundles/{ally-administration-bundles.html → view-alliance-administration-js.html} +0 -0
- /ledger/templates/ledger/bundles/{char-administration-bundles.html → view-character-administration-js.html} +0 -0
- /ledger/templates/ledger/bundles/{corp-administration-bundles.html → view-corporation-administration-js.html} +0 -0
- /ledger/templates/ledger/partials/{administration → view-alliance-administration}/alliance.html +0 -0
- /ledger/tests/testdata/{esi.json → esi_test_data.json} +0 -0
- /ledger/tests/testdata/{allianceauth.json → integrations/allianceauth.json} +0 -0
- /ledger/tests/testdata/{load_allianceauth.py → integrations/allianceauth.py} +0 -0
- /ledger/tests/testdata/{eveentity.json → integrations/eveentity.json} +0 -0
- /ledger/tests/testdata/{load_eveentity.py → integrations/eveentity.py} +0 -0
- /ledger/tests/testdata/{eveuniverse.json → integrations/eveuniverse.json} +0 -0
- /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 =
|
|
13
|
+
logger = AppLogger(get_extension_logger(__name__), __title__)
|
|
16
14
|
|
|
17
15
|
|
|
18
|
-
def
|
|
16
|
+
def get_characterowner_or_none(
|
|
19
17
|
request, character_id
|
|
20
|
-
) -> tuple[bool, models.
|
|
18
|
+
) -> tuple[bool, models.CharacterOwner | None]:
|
|
21
19
|
"""Get Character and check permissions"""
|
|
22
20
|
perms = True
|
|
23
21
|
|
|
24
22
|
try:
|
|
25
|
-
|
|
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.
|
|
35
|
-
if
|
|
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,
|
|
35
|
+
return perms, owner
|
|
38
36
|
|
|
39
37
|
|
|
40
|
-
def
|
|
38
|
+
def get_corporationowner_or_none(
|
|
41
39
|
request, corporation_id
|
|
42
|
-
) -> tuple[bool | None, models.
|
|
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.
|
|
48
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
68
|
-
|
|
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.
|
|
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
|
|
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.
|
|
85
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
110
|
-
|
|
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.
|
|
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
|
-
|
|
128
|
-
) -> QuerySet[list[models.
|
|
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
|
-
|
|
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.
|
|
136
|
+
return models.CharacterOwner.objects.filter(
|
|
137
137
|
eve_character__id__in=linked_characters
|
|
138
138
|
)
|
|
139
139
|
except ObjectDoesNotExist:
|
|
140
|
-
return models.
|
|
141
|
-
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('"', """)
|
|
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
|