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
ledger/helpers/corporation.py
DELETED
|
@@ -1,427 +0,0 @@
|
|
|
1
|
-
"""PvE Views"""
|
|
2
|
-
|
|
3
|
-
# Standard Library
|
|
4
|
-
from decimal import Decimal
|
|
5
|
-
from typing import Any
|
|
6
|
-
|
|
7
|
-
# Django
|
|
8
|
-
from django.db.models import DecimalField, Q, QuerySet, Sum
|
|
9
|
-
from django.utils.translation import gettext as _
|
|
10
|
-
|
|
11
|
-
# Alliance Auth
|
|
12
|
-
from allianceauth.eveonline.models import EveCharacter
|
|
13
|
-
from allianceauth.services.hooks import get_extension_logger
|
|
14
|
-
|
|
15
|
-
# Alliance Auth (External Libs)
|
|
16
|
-
from app_utils.logging import LoggerAddTag
|
|
17
|
-
|
|
18
|
-
# AA Ledger
|
|
19
|
-
from ledger import __title__
|
|
20
|
-
from ledger.constants import NPC_ENTITIES
|
|
21
|
-
from ledger.helpers.billboard import BillboardSystem
|
|
22
|
-
from ledger.helpers.core import LedgerCore, LedgerEntity
|
|
23
|
-
from ledger.helpers.ref_type import RefTypeManager
|
|
24
|
-
from ledger.models.corporationaudit import (
|
|
25
|
-
CorporationAudit,
|
|
26
|
-
CorporationWalletDivision,
|
|
27
|
-
CorporationWalletJournalEntry,
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
logger = LoggerAddTag(get_extension_logger(__name__), __title__)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class CorporationData(LedgerCore):
|
|
34
|
-
"""Class to hold character data for the ledger."""
|
|
35
|
-
|
|
36
|
-
# pylint: disable=too-many-positional-arguments
|
|
37
|
-
def __init__(
|
|
38
|
-
self,
|
|
39
|
-
corporation: CorporationAudit,
|
|
40
|
-
division_id: int = None,
|
|
41
|
-
year: int = None,
|
|
42
|
-
month: int = None,
|
|
43
|
-
day: int = None,
|
|
44
|
-
section: str = None,
|
|
45
|
-
):
|
|
46
|
-
super().__init__(year, month, day)
|
|
47
|
-
self.corporation = corporation
|
|
48
|
-
self.entity_id = corporation.corporation.corporation_id
|
|
49
|
-
self.division_id = division_id
|
|
50
|
-
self.section = section
|
|
51
|
-
self.auth_char_ids = self.auth_character_ids
|
|
52
|
-
self.billboard = BillboardSystem()
|
|
53
|
-
self.queryset = (
|
|
54
|
-
self._get_journal_queryset()
|
|
55
|
-
) # Prepare Queryset and auxiliary data
|
|
56
|
-
|
|
57
|
-
@property
|
|
58
|
-
def has_data(self) -> bool:
|
|
59
|
-
"""Return True if there is data for the corporation in the selected date range."""
|
|
60
|
-
return self.queryset.exists()
|
|
61
|
-
|
|
62
|
-
@property
|
|
63
|
-
def activity_years(self) -> list[int]:
|
|
64
|
-
"""Return a list of years with data for the corporation."""
|
|
65
|
-
return (
|
|
66
|
-
CorporationWalletJournalEntry.objects.filter(
|
|
67
|
-
division__corporation=self.corporation
|
|
68
|
-
)
|
|
69
|
-
.values_list("date__year", flat=True)
|
|
70
|
-
.distinct()
|
|
71
|
-
.order_by("-date__year")
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
@property
|
|
75
|
-
def divisions(self) -> QuerySet:
|
|
76
|
-
"""Return a list of divisions for the corporation."""
|
|
77
|
-
return CorporationWalletDivision.objects.filter(
|
|
78
|
-
corporation=self.corporation
|
|
79
|
-
).order_by("division_id")
|
|
80
|
-
|
|
81
|
-
def _get_journal_queryset(self) -> QuerySet[CorporationWalletJournalEntry]:
|
|
82
|
-
"""Return the base queryset filtered by the current date range and corporation division."""
|
|
83
|
-
if self.division_id is not None:
|
|
84
|
-
return CorporationWalletJournalEntry.objects.filter(
|
|
85
|
-
self.filter_date,
|
|
86
|
-
division__corporation=self.corporation,
|
|
87
|
-
division=self.division_id,
|
|
88
|
-
).exclude(
|
|
89
|
-
first_party_id=self.corporation.corporation.corporation_id,
|
|
90
|
-
second_party_id=self.corporation.corporation.corporation_id,
|
|
91
|
-
)
|
|
92
|
-
return CorporationWalletJournalEntry.objects.filter(
|
|
93
|
-
self.filter_date,
|
|
94
|
-
division__corporation=self.corporation,
|
|
95
|
-
).exclude(
|
|
96
|
-
first_party_id=self.corporation.corporation.corporation_id,
|
|
97
|
-
second_party_id=self.corporation.corporation.corporation_id,
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
def _compute_entities(
|
|
101
|
-
self, journal: QuerySet[CorporationWalletJournalEntry]
|
|
102
|
-
) -> set:
|
|
103
|
-
"""Return a set of all entity IDs (first and second parties) present in the current journal."""
|
|
104
|
-
return set(journal.values_list("second_party_id", flat=True)) | set(
|
|
105
|
-
journal.values_list("first_party_id", flat=True)
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
# pylint: disable=duplicate-code
|
|
109
|
-
def _compute_journal_values(
|
|
110
|
-
self, journal: QuerySet[CorporationWalletJournalEntry]
|
|
111
|
-
) -> QuerySet[dict[str, Any]]:
|
|
112
|
-
"""Return the journal values for the current journal."""
|
|
113
|
-
return journal.values(
|
|
114
|
-
"first_party_id", "second_party_id", "pk", "ref_type"
|
|
115
|
-
).annotate(
|
|
116
|
-
bounty=Sum(
|
|
117
|
-
"amount",
|
|
118
|
-
filter=Q(ref_type__in=RefTypeManager.BOUNTY_PRIZES),
|
|
119
|
-
output_field=DecimalField(),
|
|
120
|
-
),
|
|
121
|
-
ess=Sum(
|
|
122
|
-
"amount",
|
|
123
|
-
filter=Q(ref_type__in=RefTypeManager.ESS_TRANSFER),
|
|
124
|
-
output_field=DecimalField(),
|
|
125
|
-
),
|
|
126
|
-
costs=Sum(
|
|
127
|
-
"amount",
|
|
128
|
-
filter=Q(ref_type__in=RefTypeManager.all_ref_types(), amount__lt=0),
|
|
129
|
-
output_field=DecimalField(),
|
|
130
|
-
),
|
|
131
|
-
miscellaneous=Sum(
|
|
132
|
-
"amount",
|
|
133
|
-
filter=Q(ref_type__in=RefTypeManager.all_ref_types(), amount__gt=0),
|
|
134
|
-
output_field=DecimalField(),
|
|
135
|
-
),
|
|
136
|
-
)
|
|
137
|
-
|
|
138
|
-
def create_entity_data(
|
|
139
|
-
self,
|
|
140
|
-
entity: LedgerEntity,
|
|
141
|
-
alts: EveCharacter = None,
|
|
142
|
-
) -> dict:
|
|
143
|
-
"""Create the URL for entity details based on the view type."""
|
|
144
|
-
ids = (
|
|
145
|
-
list(alts.values_list("character__character_id", flat=True))
|
|
146
|
-
if alts is not None
|
|
147
|
-
else [entity.entity_id]
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
# Create Alts Dictionary
|
|
151
|
-
alts_dict = {}
|
|
152
|
-
if alts is not None:
|
|
153
|
-
for alt in alts:
|
|
154
|
-
alts_dict[alt.character.character_id] = alt.character.character_name
|
|
155
|
-
|
|
156
|
-
# Remove the main character from the alts dictionary only one entry
|
|
157
|
-
if len(alts_dict) == 1:
|
|
158
|
-
alts_dict.pop(entity.entity_id, None)
|
|
159
|
-
|
|
160
|
-
used_pks = set()
|
|
161
|
-
bounty = Decimal(0)
|
|
162
|
-
ess = Decimal(0)
|
|
163
|
-
miscellaneous = Decimal(0)
|
|
164
|
-
costs = Decimal(0)
|
|
165
|
-
|
|
166
|
-
for pk, rows in list(self.entries.items()):
|
|
167
|
-
for row in rows:
|
|
168
|
-
if row["first_party_id"] in ids or row["second_party_id"] in ids:
|
|
169
|
-
if RefTypeManager.special_cases(
|
|
170
|
-
row, ids=ids, account_char_ids=self.auth_char_ids
|
|
171
|
-
):
|
|
172
|
-
continue
|
|
173
|
-
bounty += row.get("bounty") or Decimal(0)
|
|
174
|
-
ess += row.get("ess") or Decimal(0)
|
|
175
|
-
miscellaneous += row.get("miscellaneous") or Decimal(0)
|
|
176
|
-
costs += row.get("costs") or Decimal(0)
|
|
177
|
-
used_pks.add(pk)
|
|
178
|
-
|
|
179
|
-
# Remove Used Pks from Entries
|
|
180
|
-
# This is to prevent the entries from being used in the future
|
|
181
|
-
for pk in used_pks:
|
|
182
|
-
self.entries.pop(pk, None)
|
|
183
|
-
|
|
184
|
-
total = sum([bounty, ess, miscellaneous, costs])
|
|
185
|
-
|
|
186
|
-
if total == 0:
|
|
187
|
-
return None
|
|
188
|
-
|
|
189
|
-
char_data = {
|
|
190
|
-
"entity": entity,
|
|
191
|
-
"alts": alts_dict,
|
|
192
|
-
"ledger": {
|
|
193
|
-
"bounty": bounty,
|
|
194
|
-
"ess": ess,
|
|
195
|
-
"miscellaneous": miscellaneous,
|
|
196
|
-
"costs": costs,
|
|
197
|
-
"total": total,
|
|
198
|
-
},
|
|
199
|
-
"type": entity.type,
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
return char_data
|
|
203
|
-
|
|
204
|
-
def generate_ledger_data(self) -> dict:
|
|
205
|
-
"""
|
|
206
|
-
Generate the ledger data for the corporation.
|
|
207
|
-
|
|
208
|
-
This method processes the journal entries, builds the ledger data,
|
|
209
|
-
and prepares the context for rendering the corporation ledger view.
|
|
210
|
-
"""
|
|
211
|
-
# Compute all entities in the journal
|
|
212
|
-
self.entities = self._compute_entities(self.queryset)
|
|
213
|
-
# Compute journal values
|
|
214
|
-
journal = self._compute_journal_values(self.queryset)
|
|
215
|
-
|
|
216
|
-
# Caching
|
|
217
|
-
ledger_hash = self.get_ledger_journal_hash(journal.values_list("pk"))
|
|
218
|
-
cache_key = f"{self.corporation.corporation.corporation_id}_{self.division_id}"
|
|
219
|
-
|
|
220
|
-
# Get Cached Data if available
|
|
221
|
-
ledger, finished_entities = self.get_cache_ledger(
|
|
222
|
-
ledger_hash=ledger_hash, cache_key=cache_key
|
|
223
|
-
)
|
|
224
|
-
|
|
225
|
-
if finished_entities is False or ledger is False:
|
|
226
|
-
# Build the entries from the journal
|
|
227
|
-
self.entries = {}
|
|
228
|
-
for row in journal:
|
|
229
|
-
self.entries.setdefault(row["pk"], []).append(row)
|
|
230
|
-
|
|
231
|
-
# Process Auth Accounts first
|
|
232
|
-
ledger, finished_entities = self._process_auth_accounts()
|
|
233
|
-
# Process remaining entities
|
|
234
|
-
ledger, finished_entities = self._process_remaining_entities(
|
|
235
|
-
ledger, finished_entities
|
|
236
|
-
)
|
|
237
|
-
# Process corporation entity last to ensure it's always included
|
|
238
|
-
self._handle_entity(
|
|
239
|
-
ledger=ledger,
|
|
240
|
-
entity_id=self.corporation.corporation.corporation_id,
|
|
241
|
-
corporation_obj=self.corporation.corporation,
|
|
242
|
-
)
|
|
243
|
-
|
|
244
|
-
# Create Cache
|
|
245
|
-
self.set_cache_ledger(
|
|
246
|
-
ledger_hash=ledger_hash,
|
|
247
|
-
cache_key=cache_key,
|
|
248
|
-
ledger=ledger,
|
|
249
|
-
finished_entities=finished_entities,
|
|
250
|
-
)
|
|
251
|
-
|
|
252
|
-
# Finalize the billboard for the ledger.
|
|
253
|
-
self.billboard.change_view(self.get_view_mode())
|
|
254
|
-
self.create_rattingbar(journal=journal, entities_ids=list(finished_entities))
|
|
255
|
-
self.create_chord(ledger)
|
|
256
|
-
return ledger
|
|
257
|
-
|
|
258
|
-
def generate_data_export(self) -> dict:
|
|
259
|
-
"""Generate the data export for the corporation."""
|
|
260
|
-
# Compute all entities in the journal
|
|
261
|
-
self.entities = self._compute_entities(self.queryset)
|
|
262
|
-
# Compute journal values
|
|
263
|
-
journal = self._compute_journal_values(self.queryset)
|
|
264
|
-
|
|
265
|
-
# Build the entries from the journal
|
|
266
|
-
self.entries = {}
|
|
267
|
-
for row in journal:
|
|
268
|
-
self.entries.setdefault(row["pk"], []).append(row)
|
|
269
|
-
|
|
270
|
-
# Process Auth Accounts first
|
|
271
|
-
ledger, finished_entities = self._process_auth_accounts()
|
|
272
|
-
# Process remaining entities
|
|
273
|
-
ledger, finished_entities = self._process_remaining_entities(
|
|
274
|
-
ledger, finished_entities
|
|
275
|
-
)
|
|
276
|
-
# Process corporation entity last to ensure it's always included
|
|
277
|
-
self._handle_entity(
|
|
278
|
-
ledger=ledger,
|
|
279
|
-
entity_id=self.corporation.corporation.corporation_id,
|
|
280
|
-
corporation_obj=self.corporation.corporation,
|
|
281
|
-
)
|
|
282
|
-
return ledger
|
|
283
|
-
|
|
284
|
-
# pylint: disable=too-many-arguments
|
|
285
|
-
def _handle_entity(
|
|
286
|
-
self,
|
|
287
|
-
ledger: list,
|
|
288
|
-
entity_id: int,
|
|
289
|
-
character_obj=None,
|
|
290
|
-
corporation_obj=None,
|
|
291
|
-
alts=None,
|
|
292
|
-
add_finished: bool = True,
|
|
293
|
-
finished_ids=None,
|
|
294
|
-
) -> set:
|
|
295
|
-
"""Create entity object, add to ledger if it has data and return IDs to mark finished.
|
|
296
|
-
|
|
297
|
-
- ledger: list to append to
|
|
298
|
-
- entity_id: numeric id
|
|
299
|
-
- character_obj / corporation_obj: optional objects to attach to LedgerEntity
|
|
300
|
-
- alts: optional alts queryset passed to create_entity_data
|
|
301
|
-
- add_finished: whether to return ids that should be added to finished_entities
|
|
302
|
-
- finished_ids: explicit IDs (set or iterable) to mark finished (used for accounts)
|
|
303
|
-
"""
|
|
304
|
-
details_url = self.create_url(
|
|
305
|
-
viewname="corporation_details",
|
|
306
|
-
corporation_id=self.corporation.corporation.corporation_id,
|
|
307
|
-
entity_id=entity_id,
|
|
308
|
-
section="single",
|
|
309
|
-
)
|
|
310
|
-
entity_obj = LedgerEntity(
|
|
311
|
-
entity_id,
|
|
312
|
-
character_obj=character_obj,
|
|
313
|
-
corporation_obj=corporation_obj,
|
|
314
|
-
details_url=details_url,
|
|
315
|
-
)
|
|
316
|
-
|
|
317
|
-
# Create the character data for the ledger
|
|
318
|
-
char_data = self.create_entity_data(entity=entity_obj, alts=alts)
|
|
319
|
-
|
|
320
|
-
# Only add to ledger if there is data
|
|
321
|
-
if char_data is None:
|
|
322
|
-
return set()
|
|
323
|
-
|
|
324
|
-
ledger.append(char_data)
|
|
325
|
-
|
|
326
|
-
if not add_finished:
|
|
327
|
-
return set()
|
|
328
|
-
|
|
329
|
-
if finished_ids is not None:
|
|
330
|
-
return set(finished_ids)
|
|
331
|
-
|
|
332
|
-
return {entity_id}
|
|
333
|
-
|
|
334
|
-
def _process_auth_accounts(self):
|
|
335
|
-
"""Process Auth Account information for the ledger."""
|
|
336
|
-
ledger = []
|
|
337
|
-
finished_entities = set()
|
|
338
|
-
for account in self.auth_accounts:
|
|
339
|
-
alts = account.user.character_ownerships.all()
|
|
340
|
-
existing_alts = set(
|
|
341
|
-
alts.values_list("character__character_id", flat=True)
|
|
342
|
-
).intersection(self.entities)
|
|
343
|
-
alts = alts.filter(character__character_id__in=existing_alts)
|
|
344
|
-
if not existing_alts:
|
|
345
|
-
continue
|
|
346
|
-
finished_entities.update(
|
|
347
|
-
self._handle_entity(
|
|
348
|
-
ledger,
|
|
349
|
-
account.main_character.character_id,
|
|
350
|
-
character_obj=account.main_character,
|
|
351
|
-
alts=alts,
|
|
352
|
-
finished_ids=existing_alts,
|
|
353
|
-
)
|
|
354
|
-
)
|
|
355
|
-
return ledger, finished_entities
|
|
356
|
-
|
|
357
|
-
def _process_remaining_entities(self, ledger, finished_entities: set):
|
|
358
|
-
"""Process remaining entities for the ledger."""
|
|
359
|
-
remaining_entities = self.entities - finished_entities
|
|
360
|
-
|
|
361
|
-
# If no remaining entities, return finished_entities
|
|
362
|
-
if not remaining_entities:
|
|
363
|
-
return ledger, finished_entities
|
|
364
|
-
|
|
365
|
-
for entity_id in remaining_entities:
|
|
366
|
-
if entity_id in NPC_ENTITIES:
|
|
367
|
-
continue
|
|
368
|
-
if entity_id == self.corporation.corporation.corporation_id:
|
|
369
|
-
continue
|
|
370
|
-
finished_entities.update(self._handle_entity(ledger, entity_id))
|
|
371
|
-
return ledger, finished_entities
|
|
372
|
-
|
|
373
|
-
def create_rattingbar(
|
|
374
|
-
self,
|
|
375
|
-
journal: QuerySet[CorporationWalletJournalEntry],
|
|
376
|
-
entities_ids: list = None,
|
|
377
|
-
):
|
|
378
|
-
"""Create the ratting bar for the view."""
|
|
379
|
-
if not entities_ids:
|
|
380
|
-
return
|
|
381
|
-
|
|
382
|
-
# Create the timeline for the ratting bar
|
|
383
|
-
rattingbar_timeline = self.billboard.create_timeline(journal)
|
|
384
|
-
# Annotate the timeline with the relevant data
|
|
385
|
-
rattingbar = (
|
|
386
|
-
rattingbar_timeline.annotate_bounty_income()
|
|
387
|
-
.annotate_ess_income()
|
|
388
|
-
.annotate_miscellaneous()
|
|
389
|
-
)
|
|
390
|
-
# Generate the XY series for the ratting bar
|
|
391
|
-
self.billboard.create_or_update_results(rattingbar)
|
|
392
|
-
series, categories = self.billboard.generate_xy_series()
|
|
393
|
-
if series and categories:
|
|
394
|
-
# Create the ratting bar chart
|
|
395
|
-
self.billboard.create_xy_chart(
|
|
396
|
-
title=_("Ratting Bar"), categories=categories, series=series
|
|
397
|
-
)
|
|
398
|
-
|
|
399
|
-
def create_chord(self, ledger_data: list[dict]):
|
|
400
|
-
"""Create the chord chart for the view."""
|
|
401
|
-
if not ledger_data:
|
|
402
|
-
return
|
|
403
|
-
|
|
404
|
-
for entry in ledger_data:
|
|
405
|
-
entity_name = entry["entity"].entity_name
|
|
406
|
-
ledger = entry["ledger"]
|
|
407
|
-
self.billboard.chord_add_data(
|
|
408
|
-
chord_from=entity_name,
|
|
409
|
-
chord_to=_("Bounty (Wallet)"),
|
|
410
|
-
value=ledger.get("bounty", 0),
|
|
411
|
-
)
|
|
412
|
-
self.billboard.chord_add_data(
|
|
413
|
-
chord_from=entity_name,
|
|
414
|
-
chord_to=_("ESS (Wallet)"),
|
|
415
|
-
value=ledger.get("ess", 0),
|
|
416
|
-
)
|
|
417
|
-
self.billboard.chord_add_data(
|
|
418
|
-
chord_from=entity_name,
|
|
419
|
-
chord_to=_("Costs (Wallet)"),
|
|
420
|
-
value=abs(ledger.get("costs", 0)),
|
|
421
|
-
)
|
|
422
|
-
self.billboard.chord_add_data(
|
|
423
|
-
chord_from=entity_name,
|
|
424
|
-
chord_to=_("Miscellaneous (Wallet)"),
|
|
425
|
-
value=abs(ledger.get("miscellaneous", 0)),
|
|
426
|
-
)
|
|
427
|
-
self.billboard.chord_handle_overflow()
|