aa-ledger 0.9.8__py3-none-any.whl → 0.9.9.1__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-0.9.8.dist-info → aa_ledger-0.9.9.1.dist-info}/METADATA +3 -1
- {aa_ledger-0.9.8.dist-info → aa_ledger-0.9.9.1.dist-info}/RECORD +78 -76
- ledger/__init__.py +9 -9
- ledger/api/api_helper/billboard_helper.py +55 -26
- ledger/api/ledger/admin.py +1 -1
- ledger/app_settings.py +18 -11
- ledger/constants.py +5 -0
- ledger/decorators.py +92 -11
- ledger/helpers/alliance.py +119 -91
- ledger/helpers/character.py +260 -252
- ledger/helpers/core.py +565 -565
- ledger/helpers/corporation.py +237 -187
- ledger/helpers/etag.py +2 -1
- ledger/helpers/ref_type.py +475 -475
- ledger/locale/cs_CZ/LC_MESSAGES/django.po +942 -932
- ledger/locale/de/LC_MESSAGES/django.mo +0 -0
- ledger/locale/de/LC_MESSAGES/django.po +961 -945
- ledger/locale/django.pot +942 -932
- ledger/locale/es/LC_MESSAGES/django.po +943 -933
- ledger/locale/fr_FR/LC_MESSAGES/django.po +942 -932
- ledger/locale/it_IT/LC_MESSAGES/django.po +942 -932
- ledger/locale/ja/LC_MESSAGES/django.po +943 -933
- ledger/locale/ko_KR/LC_MESSAGES/django.po +942 -932
- ledger/locale/nl_NL/LC_MESSAGES/django.po +942 -932
- ledger/locale/pl_PL/LC_MESSAGES/django.po +942 -932
- ledger/locale/ru/LC_MESSAGES/django.po +945 -935
- ledger/locale/sk/LC_MESSAGES/django.po +944 -934
- ledger/locale/uk/LC_MESSAGES/django.po +946 -936
- ledger/locale/zh_Hans/LC_MESSAGES/django.po +943 -933
- ledger/managers/character_mining_manager.py +66 -19
- ledger/managers/character_planetary_manager.py +1 -1
- ledger/migrations/0016_characterminingledger_price_per_unit.py +21 -0
- ledger/models/characteraudit.py +32 -1
- ledger/static/ledger/css/cards.css +1 -1
- ledger/static/ledger/css/table.css +1 -1
- ledger/static/ledger/js/charts.js +7 -227
- ledger/static/ledger/js/planetary.js +1 -0
- ledger/tasks.py +1 -8
- ledger/templates/ledger/allyledger/admin/alliance_administration.html +17 -8
- ledger/templates/ledger/allyledger/admin/alliance_overview.html +75 -89
- ledger/templates/ledger/allyledger/alliance_ledger.html +8 -10
- ledger/templates/ledger/bundles/ally-administration-bundles.html +2 -0
- ledger/templates/ledger/bundles/char-administration-bundles.html +2 -0
- ledger/templates/ledger/bundles/character-ledger-bundles.html +66 -64
- ledger/templates/ledger/bundles/corp-administration-bundles.html +2 -0
- ledger/templates/ledger/bundles/corporation-ledger-bundles.html +75 -73
- ledger/templates/ledger/charledger/admin/character_administration.html +10 -8
- ledger/templates/ledger/charledger/admin/character_overview.html +69 -86
- ledger/templates/ledger/charledger/character_ledger.html +11 -15
- ledger/templates/ledger/charledger/planetary/planetary_ledger.html +2 -6
- ledger/templates/ledger/corpledger/admin/corporation_administration.html +10 -8
- ledger/templates/ledger/corpledger/admin/corporation_overview.html +71 -83
- ledger/templates/ledger/corpledger/corporation_ledger.html +55 -14
- ledger/templates/ledger/partials/administration/alliance.html +28 -49
- ledger/templates/ledger/partials/administration/alliance_corporations.html +58 -0
- ledger/templates/ledger/partials/administration/corporation_characters.html +26 -28
- ledger/templates/ledger/partials/information/daily.html +1 -1
- ledger/templates/ledger/partials/information/day.html +1 -7
- ledger/templates/ledger/partials/information/hourly.html +1 -7
- ledger/templates/ledger/partials/information/summary.html +88 -84
- ledger/templates/ledger/partials/information/view_character_content.html +35 -35
- ledger/templates/ledger/partials/table/char-ledger.html +14 -5
- ledger/templates/ledger/partials/table/corp-ledger.html +3 -3
- ledger/templates/ledger/partials/view/card.html +2 -2
- ledger/tests/test_decarators.py +102 -17
- ledger/tests/test_helpers/test_etag.py +7 -6
- ledger/tests/test_managers/test_character_mining_manager.py +2 -1
- ledger/tests/test_models/test_characterminingledger.py +38 -2
- ledger/tests/test_tasks.py +4 -4
- ledger/tests/test_templatetags.py +5 -2
- ledger/tests/test_views/test_access.py +852 -852
- ledger/tests/testdata/esi.json +1 -2
- ledger/tests/testdata/eveuniverse.json +90 -48
- ledger/urls.py +66 -21
- ledger/views/alliance/alliance_ledger.py +4 -3
- ledger/views/corporation/corporation_ledger.py +25 -9
- {aa_ledger-0.9.8.dist-info → aa_ledger-0.9.9.1.dist-info}/WHEEL +0 -0
- {aa_ledger-0.9.8.dist-info → aa_ledger-0.9.9.1.dist-info}/licenses/LICENSE +0 -0
ledger/helpers/character.py
CHANGED
|
@@ -1,252 +1,260 @@
|
|
|
1
|
-
"""PvE Views"""
|
|
2
|
-
|
|
3
|
-
# Standard Library
|
|
4
|
-
import json
|
|
5
|
-
from decimal import Decimal
|
|
6
|
-
|
|
7
|
-
# Django
|
|
8
|
-
from django.core.handlers.wsgi import WSGIRequest
|
|
9
|
-
from django.utils.translation import gettext as _
|
|
10
|
-
|
|
11
|
-
# Alliance Auth
|
|
12
|
-
from allianceauth.services.hooks import get_extension_logger
|
|
13
|
-
|
|
14
|
-
# Alliance Auth (External Libs)
|
|
15
|
-
from app_utils.logging import LoggerAddTag
|
|
16
|
-
|
|
17
|
-
# AA Ledger
|
|
18
|
-
from ledger import __title__
|
|
19
|
-
from ledger.helpers.core import LedgerCore
|
|
20
|
-
from ledger.models.characteraudit import (
|
|
21
|
-
CharacterAudit,
|
|
22
|
-
CharacterMiningLedger,
|
|
23
|
-
CharacterWalletJournalEntry,
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
logger = LoggerAddTag(get_extension_logger(__name__), __title__)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class CharacterData(LedgerCore):
|
|
30
|
-
"""Class to hold character data for the ledger."""
|
|
31
|
-
|
|
32
|
-
# pylint: disable=too-many-positional-arguments
|
|
33
|
-
def __init__(
|
|
34
|
-
self,
|
|
35
|
-
request: WSGIRequest,
|
|
36
|
-
character: CharacterAudit,
|
|
37
|
-
year=None,
|
|
38
|
-
month=None,
|
|
39
|
-
day=None,
|
|
40
|
-
):
|
|
41
|
-
LedgerCore.__init__(self, year, month, day)
|
|
42
|
-
self.request = request
|
|
43
|
-
self.character = character
|
|
44
|
-
self.alts_ids = self.get_alt_ids
|
|
45
|
-
|
|
46
|
-
@property
|
|
47
|
-
def get_alt_ids(self):
|
|
48
|
-
return self.character.alts.values_list("character_id", flat=True)
|
|
49
|
-
|
|
50
|
-
@property
|
|
51
|
-
def is_old_ess(self):
|
|
52
|
-
"""
|
|
53
|
-
Compatibility check for old ESS income calculation.
|
|
54
|
-
Since Swagger ESI has added ESS Ref Type to the Character Journal Endpoint
|
|
55
|
-
"""
|
|
56
|
-
try:
|
|
57
|
-
if self.month is None and self.year is None:
|
|
58
|
-
return False
|
|
59
|
-
if self.year >= 2025 and self.month >= 6:
|
|
60
|
-
return False
|
|
61
|
-
except TypeError:
|
|
62
|
-
return True
|
|
63
|
-
return True
|
|
64
|
-
|
|
65
|
-
def setup_ledger(self, character: CharacterAudit):
|
|
66
|
-
"""Setup the Ledger Data for the Character."""
|
|
67
|
-
|
|
68
|
-
# Show Card Template for Character Ledger
|
|
69
|
-
if self.request.GET.get("single", False):
|
|
70
|
-
self.ledger_type = "single"
|
|
71
|
-
|
|
72
|
-
# Get All Journal Entries for the Character and its Alts for Details View
|
|
73
|
-
if self.request.GET.get("all", False):
|
|
74
|
-
self.journal = CharacterWalletJournalEntry.objects.filter(
|
|
75
|
-
self.filter_date,
|
|
76
|
-
character__eve_character__character_id__in=self.alts_ids,
|
|
77
|
-
)
|
|
78
|
-
self.mining = CharacterMiningLedger.objects.filter(
|
|
79
|
-
self.filter_date,
|
|
80
|
-
character__eve_character__character_id__in=self.alts_ids,
|
|
81
|
-
)
|
|
82
|
-
else:
|
|
83
|
-
# Get Journal Entries for the Character and its Alts
|
|
84
|
-
self.journal = character.ledger_character_journal.filter(self.filter_date)
|
|
85
|
-
self.mining = character.ledger_character_mining.filter(self.filter_date)
|
|
86
|
-
|
|
87
|
-
def generate_ledger_data(self) -> dict:
|
|
88
|
-
"""Generate the ledger data for the character and its alts."""
|
|
89
|
-
# Only show the character if 'single' is set in the request
|
|
90
|
-
if self.request.GET.get("single", False):
|
|
91
|
-
characters = CharacterAudit.objects.filter(
|
|
92
|
-
eve_character__character_id=self.character.eve_character.character_id
|
|
93
|
-
)
|
|
94
|
-
character = characters.first()
|
|
95
|
-
character_data = self._create_character_data(character=character)
|
|
96
|
-
ledger = character_data
|
|
97
|
-
else:
|
|
98
|
-
ledger = []
|
|
99
|
-
characters = CharacterAudit.objects.filter(
|
|
100
|
-
eve_character__character_id__in=self.alts_ids
|
|
101
|
-
).select_related("eve_character")
|
|
102
|
-
for character in characters:
|
|
103
|
-
character_data = self._create_character_data(character=character)
|
|
104
|
-
if character_data:
|
|
105
|
-
ledger.append(character_data)
|
|
106
|
-
|
|
107
|
-
# Generate the totals for the ledger
|
|
108
|
-
totals = self._calculate_totals(ledger)
|
|
109
|
-
|
|
110
|
-
# Evaluate the existing years for the view
|
|
111
|
-
existing_years = (
|
|
112
|
-
CharacterWalletJournalEntry.objects.filter(character__in=characters)
|
|
113
|
-
.exclude(date__year__isnull=True)
|
|
114
|
-
.values_list("date__year", flat=True)
|
|
115
|
-
.order_by("-date__year")
|
|
116
|
-
.distinct()
|
|
117
|
-
)
|
|
118
|
-
|
|
119
|
-
# Create the ratting bar for the view
|
|
120
|
-
self.create_rattingbar(
|
|
121
|
-
is_old_ess=self.is_old_ess,
|
|
122
|
-
character_ids=characters.values_list(
|
|
123
|
-
"eve_character__character_id", flat=True
|
|
124
|
-
),
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
context = {
|
|
128
|
-
"title": f"Character Ledger - {self.character.eve_character.character_name}",
|
|
129
|
-
"character_id": self.character.eve_character.character_id,
|
|
130
|
-
"billboard": json.dumps(self.billboard.dict.asdict()),
|
|
131
|
-
"ledger": ledger,
|
|
132
|
-
"years": list(existing_years),
|
|
133
|
-
"totals": totals,
|
|
134
|
-
"view": self.create_view_data(
|
|
135
|
-
viewname="character_details",
|
|
136
|
-
character_id=self.character.eve_character.character_id,
|
|
137
|
-
),
|
|
138
|
-
"is_old_ess": self.is_old_ess,
|
|
139
|
-
}
|
|
140
|
-
return context
|
|
141
|
-
|
|
142
|
-
def _create_character_data(
|
|
143
|
-
self,
|
|
144
|
-
character: CharacterAudit,
|
|
145
|
-
):
|
|
146
|
-
"""Create a dictionary with character data and update billboard/ledger."""
|
|
147
|
-
self.setup_ledger(character)
|
|
148
|
-
|
|
149
|
-
# If no journal or mining data exists, return None
|
|
150
|
-
if not self.journal.exists() and not self.mining.exists():
|
|
151
|
-
return None
|
|
152
|
-
|
|
153
|
-
bounty = self.journal.aggregate_bounty()
|
|
154
|
-
ess = (
|
|
155
|
-
self.journal.aggregate_bounty() * Decimal(0.667)
|
|
156
|
-
if self.is_old_ess
|
|
157
|
-
else self.journal.aggregate_ess()
|
|
158
|
-
)
|
|
159
|
-
mining_val = self.mining.aggregate_mining()
|
|
160
|
-
costs = self.journal.aggregate_costs(second_party=self.alts_ids)
|
|
161
|
-
miscellaneous = self.journal.aggregate_miscellaneous(first_party=self.alts_ids)
|
|
162
|
-
total = sum(
|
|
163
|
-
[
|
|
164
|
-
bounty,
|
|
165
|
-
ess,
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
"
|
|
181
|
-
"
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
"
|
|
187
|
-
|
|
188
|
-
"
|
|
189
|
-
"
|
|
190
|
-
"
|
|
191
|
-
"
|
|
192
|
-
"
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
"
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
)
|
|
251
|
-
|
|
252
|
-
|
|
1
|
+
"""PvE Views"""
|
|
2
|
+
|
|
3
|
+
# Standard Library
|
|
4
|
+
import json
|
|
5
|
+
from decimal import Decimal
|
|
6
|
+
|
|
7
|
+
# Django
|
|
8
|
+
from django.core.handlers.wsgi import WSGIRequest
|
|
9
|
+
from django.utils.translation import gettext as _
|
|
10
|
+
|
|
11
|
+
# Alliance Auth
|
|
12
|
+
from allianceauth.services.hooks import get_extension_logger
|
|
13
|
+
|
|
14
|
+
# Alliance Auth (External Libs)
|
|
15
|
+
from app_utils.logging import LoggerAddTag
|
|
16
|
+
|
|
17
|
+
# AA Ledger
|
|
18
|
+
from ledger import __title__
|
|
19
|
+
from ledger.helpers.core import LedgerCore
|
|
20
|
+
from ledger.models.characteraudit import (
|
|
21
|
+
CharacterAudit,
|
|
22
|
+
CharacterMiningLedger,
|
|
23
|
+
CharacterWalletJournalEntry,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
logger = LoggerAddTag(get_extension_logger(__name__), __title__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class CharacterData(LedgerCore):
|
|
30
|
+
"""Class to hold character data for the ledger."""
|
|
31
|
+
|
|
32
|
+
# pylint: disable=too-many-positional-arguments
|
|
33
|
+
def __init__(
|
|
34
|
+
self,
|
|
35
|
+
request: WSGIRequest,
|
|
36
|
+
character: CharacterAudit,
|
|
37
|
+
year=None,
|
|
38
|
+
month=None,
|
|
39
|
+
day=None,
|
|
40
|
+
):
|
|
41
|
+
LedgerCore.__init__(self, year, month, day)
|
|
42
|
+
self.request = request
|
|
43
|
+
self.character = character
|
|
44
|
+
self.alts_ids = self.get_alt_ids
|
|
45
|
+
|
|
46
|
+
@property
|
|
47
|
+
def get_alt_ids(self):
|
|
48
|
+
return self.character.alts.values_list("character_id", flat=True)
|
|
49
|
+
|
|
50
|
+
@property
|
|
51
|
+
def is_old_ess(self):
|
|
52
|
+
"""
|
|
53
|
+
Compatibility check for old ESS income calculation.
|
|
54
|
+
Since Swagger ESI has added ESS Ref Type to the Character Journal Endpoint
|
|
55
|
+
"""
|
|
56
|
+
try:
|
|
57
|
+
if self.month is None and self.year is None:
|
|
58
|
+
return False
|
|
59
|
+
if self.year >= 2025 and self.month >= 6:
|
|
60
|
+
return False
|
|
61
|
+
except TypeError:
|
|
62
|
+
return True
|
|
63
|
+
return True
|
|
64
|
+
|
|
65
|
+
def setup_ledger(self, character: CharacterAudit):
|
|
66
|
+
"""Setup the Ledger Data for the Character."""
|
|
67
|
+
|
|
68
|
+
# Show Card Template for Character Ledger
|
|
69
|
+
if self.request.GET.get("single", False):
|
|
70
|
+
self.ledger_type = "single"
|
|
71
|
+
|
|
72
|
+
# Get All Journal Entries for the Character and its Alts for Details View
|
|
73
|
+
if self.request.GET.get("all", False):
|
|
74
|
+
self.journal = CharacterWalletJournalEntry.objects.filter(
|
|
75
|
+
self.filter_date,
|
|
76
|
+
character__eve_character__character_id__in=self.alts_ids,
|
|
77
|
+
)
|
|
78
|
+
self.mining = CharacterMiningLedger.objects.filter(
|
|
79
|
+
self.filter_date,
|
|
80
|
+
character__eve_character__character_id__in=self.alts_ids,
|
|
81
|
+
)
|
|
82
|
+
else:
|
|
83
|
+
# Get Journal Entries for the Character and its Alts
|
|
84
|
+
self.journal = character.ledger_character_journal.filter(self.filter_date)
|
|
85
|
+
self.mining = character.ledger_character_mining.filter(self.filter_date)
|
|
86
|
+
|
|
87
|
+
def generate_ledger_data(self) -> dict:
|
|
88
|
+
"""Generate the ledger data for the character and its alts."""
|
|
89
|
+
# Only show the character if 'single' is set in the request
|
|
90
|
+
if self.request.GET.get("single", False):
|
|
91
|
+
characters = CharacterAudit.objects.filter(
|
|
92
|
+
eve_character__character_id=self.character.eve_character.character_id
|
|
93
|
+
)
|
|
94
|
+
character = characters.first()
|
|
95
|
+
character_data = self._create_character_data(character=character)
|
|
96
|
+
ledger = character_data
|
|
97
|
+
else:
|
|
98
|
+
ledger = []
|
|
99
|
+
characters = CharacterAudit.objects.filter(
|
|
100
|
+
eve_character__character_id__in=self.alts_ids
|
|
101
|
+
).select_related("eve_character")
|
|
102
|
+
for character in characters:
|
|
103
|
+
character_data = self._create_character_data(character=character)
|
|
104
|
+
if character_data:
|
|
105
|
+
ledger.append(character_data)
|
|
106
|
+
|
|
107
|
+
# Generate the totals for the ledger
|
|
108
|
+
totals = self._calculate_totals(ledger)
|
|
109
|
+
|
|
110
|
+
# Evaluate the existing years for the view
|
|
111
|
+
existing_years = (
|
|
112
|
+
CharacterWalletJournalEntry.objects.filter(character__in=characters)
|
|
113
|
+
.exclude(date__year__isnull=True)
|
|
114
|
+
.values_list("date__year", flat=True)
|
|
115
|
+
.order_by("-date__year")
|
|
116
|
+
.distinct()
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# Create the ratting bar for the view
|
|
120
|
+
self.create_rattingbar(
|
|
121
|
+
is_old_ess=self.is_old_ess,
|
|
122
|
+
character_ids=characters.values_list(
|
|
123
|
+
"eve_character__character_id", flat=True
|
|
124
|
+
),
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
context = {
|
|
128
|
+
"title": f"Character Ledger - {self.character.eve_character.character_name}",
|
|
129
|
+
"character_id": self.character.eve_character.character_id,
|
|
130
|
+
"billboard": json.dumps(self.billboard.dict.asdict()),
|
|
131
|
+
"ledger": ledger,
|
|
132
|
+
"years": list(existing_years),
|
|
133
|
+
"totals": totals,
|
|
134
|
+
"view": self.create_view_data(
|
|
135
|
+
viewname="character_details",
|
|
136
|
+
character_id=self.character.eve_character.character_id,
|
|
137
|
+
),
|
|
138
|
+
"is_old_ess": self.is_old_ess,
|
|
139
|
+
}
|
|
140
|
+
return context
|
|
141
|
+
|
|
142
|
+
def _create_character_data(
|
|
143
|
+
self,
|
|
144
|
+
character: CharacterAudit,
|
|
145
|
+
):
|
|
146
|
+
"""Create a dictionary with character data and update billboard/ledger."""
|
|
147
|
+
self.setup_ledger(character)
|
|
148
|
+
|
|
149
|
+
# If no journal or mining data exists, return None
|
|
150
|
+
if not self.journal.exists() and not self.mining.exists():
|
|
151
|
+
return None
|
|
152
|
+
|
|
153
|
+
bounty = self.journal.aggregate_bounty()
|
|
154
|
+
ess = (
|
|
155
|
+
self.journal.aggregate_bounty() * Decimal(0.667)
|
|
156
|
+
if self.is_old_ess
|
|
157
|
+
else self.journal.aggregate_ess()
|
|
158
|
+
)
|
|
159
|
+
mining_val = self.mining.aggregate_mining()
|
|
160
|
+
costs = self.journal.aggregate_costs(second_party=self.alts_ids)
|
|
161
|
+
miscellaneous = self.journal.aggregate_miscellaneous(first_party=self.alts_ids)
|
|
162
|
+
total = sum(
|
|
163
|
+
[
|
|
164
|
+
bounty,
|
|
165
|
+
ess,
|
|
166
|
+
costs,
|
|
167
|
+
miscellaneous,
|
|
168
|
+
]
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
# If total is 0, we do not need to create a character data entry
|
|
172
|
+
if int(total) == 0:
|
|
173
|
+
return None
|
|
174
|
+
|
|
175
|
+
update_states = {}
|
|
176
|
+
|
|
177
|
+
for status in character.ledger_update_status.all():
|
|
178
|
+
update_states[status.section] = {
|
|
179
|
+
"is_success": status.is_success,
|
|
180
|
+
"last_update_finished_at": status.last_update_finished_at,
|
|
181
|
+
"last_run_finished_at": status.last_run_finished_at,
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
char_data = {
|
|
185
|
+
"character": character,
|
|
186
|
+
"ledger": {
|
|
187
|
+
"bounty": bounty,
|
|
188
|
+
"ess": ess,
|
|
189
|
+
"mining": mining_val,
|
|
190
|
+
"costs": costs,
|
|
191
|
+
"miscellaneous": miscellaneous,
|
|
192
|
+
"total": total,
|
|
193
|
+
},
|
|
194
|
+
"update_states": update_states,
|
|
195
|
+
"single_url": self.create_url(
|
|
196
|
+
viewname="character_ledger",
|
|
197
|
+
character_id=character.eve_character.character_id,
|
|
198
|
+
),
|
|
199
|
+
"details_url": self.create_url(
|
|
200
|
+
viewname="character_details",
|
|
201
|
+
character_id=character.eve_character.character_id,
|
|
202
|
+
),
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
# Create the chord data for the billboard
|
|
206
|
+
self.billboard.chord_add_data(
|
|
207
|
+
chord_from=character.eve_character.character_name,
|
|
208
|
+
chord_to=_("Bounty"),
|
|
209
|
+
value=bounty,
|
|
210
|
+
)
|
|
211
|
+
self.billboard.chord_add_data(
|
|
212
|
+
chord_from=character.eve_character.character_name,
|
|
213
|
+
chord_to=_("ESS"),
|
|
214
|
+
value=ess,
|
|
215
|
+
)
|
|
216
|
+
self.billboard.chord_add_data(
|
|
217
|
+
chord_from=character.eve_character.character_name,
|
|
218
|
+
chord_to=_("Mining"),
|
|
219
|
+
value=mining_val,
|
|
220
|
+
)
|
|
221
|
+
self.billboard.chord_add_data(
|
|
222
|
+
chord_from=character.eve_character.character_name,
|
|
223
|
+
chord_to=_("Miscellaneous"),
|
|
224
|
+
value=miscellaneous,
|
|
225
|
+
)
|
|
226
|
+
self.billboard.chord_add_data(
|
|
227
|
+
chord_from=character.eve_character.character_name,
|
|
228
|
+
chord_to=_("Costs"),
|
|
229
|
+
value=abs(costs),
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
return char_data
|
|
233
|
+
|
|
234
|
+
def create_rattingbar(self, character_ids: list = None, is_old_ess: bool = False):
|
|
235
|
+
"""Create the ratting bar for the view."""
|
|
236
|
+
if not character_ids:
|
|
237
|
+
return
|
|
238
|
+
|
|
239
|
+
rattingbar_timeline = self.billboard.create_timeline(
|
|
240
|
+
CharacterWalletJournalEntry.objects.filter(
|
|
241
|
+
self.filter_date,
|
|
242
|
+
character__eve_character__character_id__in=character_ids,
|
|
243
|
+
)
|
|
244
|
+
)
|
|
245
|
+
rattingbar_mining_timeline = self.billboard.create_timeline(
|
|
246
|
+
CharacterMiningLedger.objects.filter(
|
|
247
|
+
self.filter_date,
|
|
248
|
+
character__eve_character__character_id__in=character_ids,
|
|
249
|
+
)
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
rattingbar = (
|
|
253
|
+
rattingbar_timeline.annotate_bounty_income()
|
|
254
|
+
.annotate_ess_income()
|
|
255
|
+
.annotate_miscellaneous_with_exclude(exclude=self.alts_ids)
|
|
256
|
+
)
|
|
257
|
+
rattingbar_mining = rattingbar_mining_timeline.annotate_mining(with_period=True)
|
|
258
|
+
self.billboard.create_or_update_results(rattingbar, is_old_ess=is_old_ess)
|
|
259
|
+
self.billboard.add_category(rattingbar_mining, category="mining")
|
|
260
|
+
self._build_xy_chart(title=_("Ratting Bar"))
|