Compare commits

..

27 Commits

Author SHA1 Message Date
Herculino Trotta
e9acf1dd8f Add MCP Server section to README
Added information about the MCP Server for self-hosting.

Closes #389
2025-10-05 17:50:03 -03:00
Herculino Trotta
63898aeef0 Merge pull request #386 from eitchtee/weblate
Translations update from Weblate
2025-09-23 09:18:59 -03:00
sorcierwax
4fdf00d098 locale(French): update translation
Currently translated at 100.0% (695 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-09-23 06:17:42 +00:00
Herculino Trotta
025cc585d5 Merge pull request #385 from eitchtee/weblate
Translations update from Weblate
2025-09-21 18:30:26 -03:00
Dimitri Decrock
17018d87cd locale(Dutch): update translation
Currently translated at 100.0% (695 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-09-21 13:17:42 +00:00
Herculino Trotta
1e5f4f6583 Merge pull request #384 from eitchtee/weblate
Translations update from Weblate
2025-09-20 11:55:33 -03:00
Herculino Trotta
a99851cf9b locale((Portuguese)): deleted translation using Weblate 2025-09-20 14:55:08 +00:00
Weblate
9fb1ad4861 Merge remote-tracking branch 'origin/main' 2025-09-20 14:47:54 +00:00
Herculino Trotta
66c3abfe37 Remove PT-BR to PT translation merge step
Removed the step that merges PT-BR translations into PT in the workflow.
2025-09-20 11:47:51 -03:00
Weblate
8ca64f5820 Merge remote-tracking branch 'origin/main' 2025-09-20 14:44:20 +00:00
Herculino Trotta
e743821570 locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (695 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-09-20 14:44:20 +00:00
eitchtee
5c698d8735 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-09-20 14:44:17 +00:00
Herculino Trotta
3e5aa90df0 Merge PT-BR translations into PT 2025-09-20 11:42:01 -03:00
Herculino Trotta
b2add14238 Merge pull request #378 from eitchtee/weblate
Translations update from Weblate
2025-09-20 11:36:30 -03:00
Herculino Trotta
a052c00aa8 Merge branch 'main' into weblate 2025-09-20 11:36:20 -03:00
eitchtee
7f343708e0 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-09-20 14:08:24 +00:00
Herculino Trotta
22e95c7f4a Merge pull request #383
feat(dca): remove ticks from price chart
2025-09-20 11:06:17 -03:00
Herculino Trotta
7645153f77 feat(dca): remove ticks from price chart 2025-09-20 11:05:56 -03:00
eitchtee
1abfed9abf chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-09-20 14:05:29 +00:00
Weblate
eea0ab009d Merge remote-tracking branch 'origin/main' 2025-09-20 14:02:44 +00:00
Herculino Trotta
29446def22 Merge pull request #382
feat(networth): add a chart with the currency difference between each month
2025-09-20 11:02:41 -03:00
Herculino Trotta
9dce5e9efe feat(networth): add a chart with the currency difference between each month 2025-09-20 11:02:23 -03:00
Weblate
695e2cb322 Merge remote-tracking branch 'origin/main' 2025-09-20 04:40:47 +00:00
Herculino Trotta
b135ec3b15 Merge pull request #381
fix(login): use full dynamic height
2025-09-20 01:40:44 -03:00
Herculino Trotta
bb3cc5da6c fix(login): use full dynamic height 2025-09-20 01:40:22 -03:00
Phillip Maizza
ca7fe24a8a locale(Italian): update translation
Currently translated at 100.0% (694 of 694 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/it/
2025-09-15 18:17:42 +00:00
Phillip Maizza
483ba74010 locale(Italian): update translation
Currently translated at 100.0% (694 of 694 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/it/
2025-09-15 17:17:42 +00:00
18 changed files with 717 additions and 4293 deletions

View File

@@ -13,6 +13,7 @@
<a href="#key-features">Features</a> •
<a href="#how-to-use">Usage</a> •
<a href="#how-it-works">How</a> •
<a href="#mcp-server">MCP Server</a> •
<a href="#help-us-translate-wygiwyh">Translate</a> •
<a href="#caveats-and-warnings">Caveats and Warnings</a> •
<a href="#built-with">Built with</a>
@@ -182,6 +183,10 @@ Check out our [Wiki](https://github.com/eitchtee/WYGIWYH/wiki) for more informat
> [!NOTE]
> Login with your github account
# MCP Server
[IZIme07](https://github.com/IZIme07) has kindly created an MCP Server for WYGIWYH that you can self-host. [Check it out at MCP-WYGIWYH](https://github.com/ReNewator/MCP-WYGIWYH)!
# Caveats and Warnings
- I'm not an accountant, some terms and even calculations might be wrong. Make sure to open an issue if you see anything that could be improved.

View File

@@ -182,3 +182,29 @@ def calculate_historical_account_balance(queryset):
historical_account_balance[date_filter(end_date, "b Y")] = month_data
return historical_account_balance
def calculate_monthly_net_worth_difference(historical_net_worth):
diff_dict = OrderedDict()
if not historical_net_worth:
return diff_dict
# Get all currencies
currencies = set()
for data in historical_net_worth.values():
currencies.update(data.keys())
# Initialize prev_values for all currencies
prev_values = {currency: Decimal("0.00") for currency in currencies}
for month, values in historical_net_worth.items():
diff_values = {}
for currency in sorted(list(currencies)):
current_val = values.get(currency, Decimal("0.00"))
prev_val = prev_values.get(currency, Decimal("0.00"))
diff_values[currency] = current_val - prev_val
diff_dict[month] = diff_values
prev_values = values.copy()
return diff_dict

View File

@@ -8,6 +8,7 @@ from django.views.decorators.http import require_http_methods
from apps.net_worth.utils.calculate_net_worth import (
calculate_historical_currency_net_worth,
calculate_historical_account_balance,
calculate_monthly_net_worth_difference,
)
from apps.transactions.models import Transaction
from apps.transactions.utils.calculations import (
@@ -96,6 +97,38 @@ def net_worth(request):
chart_data_currency_json = json.dumps(chart_data_currency, cls=DjangoJSONEncoder)
monthly_difference_data = calculate_monthly_net_worth_difference(
historical_net_worth=historical_currency_net_worth
)
diff_labels = (
list(monthly_difference_data.keys()) if monthly_difference_data else []
)
diff_currencies = (
list(monthly_difference_data[diff_labels[0]].keys())
if monthly_difference_data and diff_labels
else []
)
diff_datasets = []
for i, currency in enumerate(diff_currencies):
data = [
float(month_data.get(currency, 0))
for month_data in monthly_difference_data.values()
]
diff_datasets.append(
{
"label": currency,
"data": data,
"borderWidth": 3,
}
)
chart_data_monthly_difference = {"labels": diff_labels, "datasets": diff_datasets}
chart_data_monthly_difference_json = json.dumps(
chart_data_monthly_difference, cls=DjangoJSONEncoder
)
historical_account_balance = calculate_historical_account_balance(
queryset=transactions_account_queryset
)
@@ -140,6 +173,7 @@ def net_worth(request):
"chart_data_accounts_json": chart_data_accounts_json,
"accounts": accounts,
"type": view_type,
"chart_data_monthly_difference_json": chart_data_monthly_difference_json,
},
)

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-14 04:57+0000\n"
"POT-Creation-Date: 2025-09-20 14:08+0000\n"
"PO-Revision-Date: 2025-07-22 06:17+0000\n"
"Last-Translator: seraphblade2010 <marc.butenhoff@web.de>\n"
"Language-Team: German <https://translations.herculino.com/projects/wygiwyh/"
@@ -1358,7 +1358,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/net_worth/net_worth.html:33
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -2235,6 +2235,8 @@ msgid "Current balance"
msgstr "Aktueller Saldo"
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/net_worth/net_worth.html:105
#: templates/net_worth/net_worth.html:362
msgid "Difference"
msgstr "Differenz"
@@ -2612,19 +2614,19 @@ msgstr "Aktueller Preis"
msgid "Amount Bought"
msgstr "Anzahl gekauft"
#: templates/dca/fragments/strategy/details.html:390
#: templates/dca/fragments/strategy/details.html:392
msgid "Entry Price vs Current Price"
msgstr "Einstiegspreis zu Aktuellem Preis"
#: templates/dca/fragments/strategy/details.html:406
#: templates/dca/fragments/strategy/details.html:408
msgid "Days Between Investments"
msgstr "Tage zwischen Investitionen"
#: templates/dca/fragments/strategy/details.html:453
#: templates/dca/fragments/strategy/details.html:455
msgid "Investment Frequency"
msgstr "Investitions-Häufigkeit"
#: templates/dca/fragments/strategy/details.html:455
#: templates/dca/fragments/strategy/details.html:457
msgid "The straighter the blue line, the more consistent your DCA strategy is."
msgstr ""
"Je gerader die blaue Linie, desto gleichmäßiger ist deine DCA-Strategie."
@@ -2827,7 +2829,7 @@ msgstr "Nettovermögen"
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
#: templates/net_worth/net_worth.html:23
msgid "Current"
msgstr "Aktuell"
@@ -3228,25 +3230,31 @@ msgstr "Transaktionen filtern"
msgid "Order by"
msgstr "Sortieren nach"
#: templates/net_worth/net_worth.html:40
#: templates/net_worth/net_worth.html:42
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr "Nach Währung"
#: templates/net_worth/net_worth.html:75
#: templates/net_worth/net_worth.html:78
msgid "Consolidated"
msgstr "Zusammengefasst"
#: templates/net_worth/net_worth.html:104
#: templates/net_worth/net_worth.html:101
#, fuzzy
#| msgid "Evolution by account"
msgid "Evolution"
msgstr "Verlauf nach Konto"
#: templates/net_worth/net_worth.html:128
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr "Nach Konto"
#: templates/net_worth/net_worth.html:211
#: templates/net_worth/net_worth.html:236
msgid "Evolution by currency"
msgstr "Verlauf nach Währung"
#: templates/net_worth/net_worth.html:275
#: templates/net_worth/net_worth.html:300
msgid "Evolution by account"
msgstr "Verlauf nach Konto"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-14 04:57+0000\n"
"POT-Creation-Date: 2025-09-20 14:08+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1317,7 +1317,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/net_worth/net_worth.html:33
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -2168,6 +2168,8 @@ msgid "Current balance"
msgstr ""
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/net_worth/net_worth.html:105
#: templates/net_worth/net_worth.html:362
msgid "Difference"
msgstr ""
@@ -2543,19 +2545,19 @@ msgstr ""
msgid "Amount Bought"
msgstr ""
#: templates/dca/fragments/strategy/details.html:390
#: templates/dca/fragments/strategy/details.html:392
msgid "Entry Price vs Current Price"
msgstr ""
#: templates/dca/fragments/strategy/details.html:406
#: templates/dca/fragments/strategy/details.html:408
msgid "Days Between Investments"
msgstr ""
#: templates/dca/fragments/strategy/details.html:453
#: templates/dca/fragments/strategy/details.html:455
msgid "Investment Frequency"
msgstr ""
#: templates/dca/fragments/strategy/details.html:455
#: templates/dca/fragments/strategy/details.html:457
msgid "The straighter the blue line, the more consistent your DCA strategy is."
msgstr ""
@@ -2755,7 +2757,7 @@ msgstr ""
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
#: templates/net_worth/net_worth.html:23
msgid "Current"
msgstr ""
@@ -3138,25 +3140,29 @@ msgstr ""
msgid "Order by"
msgstr ""
#: templates/net_worth/net_worth.html:40
#: templates/net_worth/net_worth.html:42
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr ""
#: templates/net_worth/net_worth.html:75
#: templates/net_worth/net_worth.html:78
msgid "Consolidated"
msgstr ""
#: templates/net_worth/net_worth.html:104
#: templates/net_worth/net_worth.html:101
msgid "Evolution"
msgstr ""
#: templates/net_worth/net_worth.html:128
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr ""
#: templates/net_worth/net_worth.html:211
#: templates/net_worth/net_worth.html:236
msgid "Evolution by currency"
msgstr ""
#: templates/net_worth/net_worth.html:275
#: templates/net_worth/net_worth.html:300
msgid "Evolution by account"
msgstr ""

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-14 04:57+0000\n"
"POT-Creation-Date: 2025-09-20 14:08+0000\n"
"PO-Revision-Date: 2025-07-21 18:17+0000\n"
"Last-Translator: afermar <adrian.fm@protonmail.com>\n"
"Language-Team: Spanish <https://translations.herculino.com/projects/wygiwyh/"
@@ -1495,7 +1495,7 @@ msgstr "Update or Create Transaction action deleted successfully"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/net_worth/net_worth.html:33
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
#, fuzzy
@@ -2492,6 +2492,8 @@ msgid "Current balance"
msgstr "Current balance"
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/net_worth/net_worth.html:105
#: templates/net_worth/net_worth.html:362
#, fuzzy
msgid "Difference"
msgstr "Difference"
@@ -2941,22 +2943,22 @@ msgstr "Current Price"
msgid "Amount Bought"
msgstr "Amount Bought"
#: templates/dca/fragments/strategy/details.html:390
#: templates/dca/fragments/strategy/details.html:392
#, fuzzy
msgid "Entry Price vs Current Price"
msgstr "Entry Price vs Current Price"
#: templates/dca/fragments/strategy/details.html:406
#: templates/dca/fragments/strategy/details.html:408
#, fuzzy
msgid "Days Between Investments"
msgstr "Days Between Investments"
#: templates/dca/fragments/strategy/details.html:453
#: templates/dca/fragments/strategy/details.html:455
#, fuzzy
msgid "Investment Frequency"
msgstr "Investment Frequency"
#: templates/dca/fragments/strategy/details.html:455
#: templates/dca/fragments/strategy/details.html:457
#, fuzzy
msgid "The straighter the blue line, the more consistent your DCA strategy is."
msgstr ""
@@ -3203,7 +3205,7 @@ msgstr "Net Worth"
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
#: templates/net_worth/net_worth.html:23
#, fuzzy
msgid "Current"
msgstr "Current"
@@ -3657,25 +3659,31 @@ msgstr "Filtrar transacciones"
msgid "Order by"
msgstr "Ordenar por"
#: templates/net_worth/net_worth.html:40
#: templates/net_worth/net_worth.html:42
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr "Por moneda"
#: templates/net_worth/net_worth.html:75
#: templates/net_worth/net_worth.html:78
msgid "Consolidated"
msgstr "Consolidado"
#: templates/net_worth/net_worth.html:104
#: templates/net_worth/net_worth.html:101
#, fuzzy
#| msgid "Evolution by account"
msgid "Evolution"
msgstr "Evolución por cuenta"
#: templates/net_worth/net_worth.html:128
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr "Por cuenta"
#: templates/net_worth/net_worth.html:211
#: templates/net_worth/net_worth.html:236
msgid "Evolution by currency"
msgstr "Evolución por moneda"
#: templates/net_worth/net_worth.html:275
#: templates/net_worth/net_worth.html:300
msgid "Evolution by account"
msgstr "Evolución por cuenta"

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-14 04:57+0000\n"
"PO-Revision-Date: 2025-09-08 06:17+0000\n"
"POT-Creation-Date: 2025-09-20 14:08+0000\n"
"PO-Revision-Date: 2025-09-23 06:17+0000\n"
"Last-Translator: sorcierwax <freakywax@gmail.com>\n"
"Language-Team: French <https://translations.herculino.com/projects/wygiwyh/"
"app/fr/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.13\n"
"X-Generator: Weblate 5.13.3\n"
#: apps/accounts/forms.py:26
msgid "Group name"
@@ -1345,7 +1345,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/net_worth/net_worth.html:33
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -2217,6 +2217,8 @@ msgid "Current balance"
msgstr "Balance actuelle"
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/net_worth/net_worth.html:105
#: templates/net_worth/net_worth.html:362
msgid "Difference"
msgstr "Différence"
@@ -2592,19 +2594,19 @@ msgstr "Prix actuel"
msgid "Amount Bought"
msgstr "Montant acheté"
#: templates/dca/fragments/strategy/details.html:390
#: templates/dca/fragments/strategy/details.html:392
msgid "Entry Price vs Current Price"
msgstr "Prix d'entrée Vs Prix actuel"
#: templates/dca/fragments/strategy/details.html:406
#: templates/dca/fragments/strategy/details.html:408
msgid "Days Between Investments"
msgstr "Jours entre les investissements"
#: templates/dca/fragments/strategy/details.html:453
#: templates/dca/fragments/strategy/details.html:455
msgid "Investment Frequency"
msgstr "Fréquence d'investissement"
#: templates/dca/fragments/strategy/details.html:455
#: templates/dca/fragments/strategy/details.html:457
msgid "The straighter the blue line, the more consistent your DCA strategy is."
msgstr ""
"Plus la ligne bleue est droite, plus votre stratégie DCA est cohérente."
@@ -2807,7 +2809,7 @@ msgstr "Valeur nette"
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
#: templates/net_worth/net_worth.html:23
msgid "Current"
msgstr "A date"
@@ -3203,25 +3205,29 @@ msgstr "Filtrer les transactions"
msgid "Order by"
msgstr "Trier par"
#: templates/net_worth/net_worth.html:40
#: templates/net_worth/net_worth.html:42
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr "Par devises"
#: templates/net_worth/net_worth.html:75
#: templates/net_worth/net_worth.html:78
msgid "Consolidated"
msgstr "Consolidé"
#: templates/net_worth/net_worth.html:104
#: templates/net_worth/net_worth.html:101
msgid "Evolution"
msgstr "Evolution"
#: templates/net_worth/net_worth.html:128
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr "Par comptes"
#: templates/net_worth/net_worth.html:211
#: templates/net_worth/net_worth.html:236
msgid "Evolution by currency"
msgstr "Evolution par devises"
#: templates/net_worth/net_worth.html:275
#: templates/net_worth/net_worth.html:300
msgid "Evolution by account"
msgstr "Evolution par comptes"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-14 04:57+0000\n"
"POT-Creation-Date: 2025-09-20 14:08+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -1316,7 +1316,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/net_worth/net_worth.html:33
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -2167,6 +2167,8 @@ msgid "Current balance"
msgstr ""
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/net_worth/net_worth.html:105
#: templates/net_worth/net_worth.html:362
msgid "Difference"
msgstr ""
@@ -2542,19 +2544,19 @@ msgstr ""
msgid "Amount Bought"
msgstr ""
#: templates/dca/fragments/strategy/details.html:390
#: templates/dca/fragments/strategy/details.html:392
msgid "Entry Price vs Current Price"
msgstr ""
#: templates/dca/fragments/strategy/details.html:406
#: templates/dca/fragments/strategy/details.html:408
msgid "Days Between Investments"
msgstr ""
#: templates/dca/fragments/strategy/details.html:453
#: templates/dca/fragments/strategy/details.html:455
msgid "Investment Frequency"
msgstr ""
#: templates/dca/fragments/strategy/details.html:455
#: templates/dca/fragments/strategy/details.html:457
msgid "The straighter the blue line, the more consistent your DCA strategy is."
msgstr ""
@@ -2754,7 +2756,7 @@ msgstr ""
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
#: templates/net_worth/net_worth.html:23
msgid "Current"
msgstr ""
@@ -3137,25 +3139,29 @@ msgstr ""
msgid "Order by"
msgstr ""
#: templates/net_worth/net_worth.html:40
#: templates/net_worth/net_worth.html:42
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr ""
#: templates/net_worth/net_worth.html:75
#: templates/net_worth/net_worth.html:78
msgid "Consolidated"
msgstr ""
#: templates/net_worth/net_worth.html:104
#: templates/net_worth/net_worth.html:101
msgid "Evolution"
msgstr ""
#: templates/net_worth/net_worth.html:128
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr ""
#: templates/net_worth/net_worth.html:211
#: templates/net_worth/net_worth.html:236
msgid "Evolution by currency"
msgstr ""
#: templates/net_worth/net_worth.html:275
#: templates/net_worth/net_worth.html:300
msgid "Evolution by account"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-14 04:57+0000\n"
"PO-Revision-Date: 2025-09-11 22:17+0000\n"
"PO-Revision-Date: 2025-09-15 18:17+0000\n"
"Last-Translator: Phillip Maizza <phillipmaizza@gmail.com>\n"
"Language-Team: Italian <https://translations.herculino.com/projects/wygiwyh/"
"app/it/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.2\n"
"X-Generator: Weblate 5.13.3\n"
#: apps/accounts/forms.py:26
msgid "Group name"
@@ -134,7 +134,7 @@ msgstr "Gruppo conto"
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:204
msgid "Account Groups"
msgstr "Gruppi di conti"
msgstr "Gruppi conti"
#: apps/accounts/models.py:39 apps/currencies/models.py:44
#: templates/accounts/fragments/list.html:27
@@ -212,7 +212,7 @@ msgstr ""
#: apps/accounts/views/account_groups.py:44
msgid "Account Group added successfully"
msgstr "Gruppo di conti aggiunto con successo"
msgstr "Gruppo conti aggiunto con successo"
#: apps/accounts/views/account_groups.py:69
#: apps/accounts/views/account_groups.py:152 apps/accounts/views/accounts.py:68
@@ -228,7 +228,7 @@ msgstr "Solo il proprietario può modificare questo elemento"
#: apps/accounts/views/account_groups.py:82
msgid "Account Group updated successfully"
msgstr "Gruppo di conti aggiornato con successo"
msgstr "Gruppo conti aggiornato con successo"
#: apps/accounts/views/account_groups.py:111
#: apps/accounts/views/accounts.py:145 apps/dca/views.py:105
@@ -239,7 +239,7 @@ msgstr "Lelemento non è più condiviso con te"
#: apps/accounts/views/account_groups.py:114
msgid "Account Group deleted successfully"
msgstr "Gruppo di conti eliminato con successo"
msgstr "Gruppo conti eliminato con successo"
#: apps/accounts/views/account_groups.py:135
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
@@ -301,11 +301,11 @@ msgstr "Dati tag non validi. Fornisci un ID o un nome."
#: apps/api/fields/transactions.py:105
msgid "Entity with this ID does not exist."
msgstr "Lentità con questo ID non esiste."
msgstr "Il beneficiario con questo ID non esiste."
#: apps/api/fields/transactions.py:115
msgid "Invalid entity data. Provide an ID or name."
msgstr "Dati entità non validi. Fornisci un ID o un nome."
msgstr "Dati beneficiario non validi. Fornisci un ID o un nome."
#: apps/api/serializers/transactions.py:192
msgid "Either 'date' or 'reference_date' must be provided."
@@ -490,7 +490,7 @@ msgstr "Rimuovi"
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Pulisci"
msgstr "Reset"
#: apps/common/widgets/tom_select.py:16
msgid "No results..."
@@ -552,7 +552,7 @@ msgstr "A valuta"
#: apps/currencies/models.py:74 apps/currencies/models.py:81
msgid "Exchange Rate"
msgstr "Tasso di cambio"
msgstr "Cambio valuta"
#: apps/currencies/models.py:76
msgid "Date and Time"
@@ -568,7 +568,7 @@ msgstr "Automatico"
#: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:218
msgid "Exchange Rates"
msgstr "Tassi di cambio"
msgstr "Cambio valute"
#: apps/currencies/models.py:94
msgid "From and To currencies cannot be the same."
@@ -650,17 +650,17 @@ msgstr ""
#: apps/currencies/models.py:160
msgid "Single exchange rate"
msgstr "Tasso di cambio singolo"
msgstr "Cambio unico"
#: apps/currencies/models.py:163
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
"Crea un solo tasso di cambio e lo mantiene aggiornato. Evita ingombri nel "
"Crea un solo cambio valuta e aggiornalo nel tempo, evitando duplicati nel "
"database."
#: apps/currencies/models.py:168
msgid "Exchange Rate Service"
msgstr "Servizio tasso di cambio"
msgstr "Servizio cambio valuta"
#: apps/currencies/models.py:169
msgid "Exchange Rate Services"
@@ -704,15 +704,15 @@ msgstr "Valuta eliminata con successo"
#: apps/currencies/views/exchange_rates.py:89
msgid "Exchange rate added successfully"
msgstr "Tasso di cambio aggiunto con successo"
msgstr "Cambio valuta aggiunto con successo"
#: apps/currencies/views/exchange_rates.py:117
msgid "Exchange rate updated successfully"
msgstr "Tasso di cambio aggiornato con successo"
msgstr "Cambio valuta aggiornato con successo"
#: apps/currencies/views/exchange_rates.py:143
msgid "Exchange rate deleted successfully"
msgstr "Tasso di cambio eliminato con successo"
msgstr "Cambio valuta eliminato con successo"
#: apps/currencies/views/exchange_rates_services.py:50
msgid "Service added successfully"
@@ -876,7 +876,7 @@ msgstr "Categorie"
#: templates/includes/sidebar.html:190
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr "Entità"
msgstr "Beneficiari"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:807 templates/includes/navbar.html:77
@@ -884,7 +884,7 @@ msgstr "Entità"
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr "Transazioni ricorrenti"
msgstr "Pagamenti ricorrenti"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:583 templates/includes/navbar.html:75
@@ -892,14 +892,14 @@ msgstr "Transazioni ricorrenti"
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
msgstr "Rate / Piani di rateizzazione"
msgstr "Pagamenti a rate"
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:246
msgid "Automatic Exchange Rates"
msgstr "Tassi di cambio automatici"
msgstr "Cambio valuta automatico"
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:226 templates/rules/fragments/list.html:5
@@ -1343,7 +1343,7 @@ msgstr "Azione Aggiornamento o Creazione transazione eliminata correttamente"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/net_worth/net_worth.html:33
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -1392,12 +1392,12 @@ msgstr "Senza tag"
#: apps/transactions/filters.py:201
msgid "Any entity"
msgstr "Qualsiasi entità"
msgstr "Qualsiasi beneficiario"
#: apps/transactions/filters.py:202
#: templates/insights/fragments/category_overview/index.html:274
msgid "No entity"
msgstr "Nessuna entità"
msgstr "Nessun beneficiario"
#: apps/transactions/forms.py:175
msgid "More"
@@ -1436,7 +1436,7 @@ msgstr "Nome tag"
#: apps/transactions/forms.py:939
msgid "Entity name"
msgstr "Nome entità"
msgstr "Nome beneficiario"
#: apps/transactions/forms.py:971
msgid "Category name"
@@ -1487,12 +1487,12 @@ msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
msgstr ""
"Le entità disattivate non potranno essere selezionate durante la creazione "
"di nuove transazioni"
"I beneficiari disattivati non potranno essere selezionati durante la "
"creazione di nuove transazioni"
#: apps/transactions/models.py:277
msgid "Entity"
msgstr "Entità"
msgstr "Beneficiari"
#: apps/transactions/models.py:289 apps/transactions/models.py:971
#: templates/calendar_view/fragments/list.html:42
@@ -1504,7 +1504,7 @@ msgstr "Entità"
#: templates/insights/fragments/category_overview/index.html:79
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr "Entrata"
msgstr "Entrate"
#: apps/transactions/models.py:290 apps/transactions/models.py:972
#: templates/calendar_view/fragments/list.html:46
@@ -1625,7 +1625,7 @@ msgstr "Tipo di ricorrenza"
#: apps/transactions/models.py:782
msgid "Recurrence Interval"
msgstr "Intervallo di ricorrenza"
msgstr "Frequenza"
#: apps/transactions/models.py:785
msgid "Keep at most"
@@ -1714,15 +1714,15 @@ msgstr "Categoria eliminata con successo"
#: apps/transactions/views/entities.py:66
msgid "Entity added successfully"
msgstr "Entità aggiunta con successo"
msgstr "Beneficiario aggiunto con successo"
#: apps/transactions/views/entities.py:104
msgid "Entity updated successfully"
msgstr "Entità aggiornata con successo"
msgstr "Beneficiario aggiornato con successo"
#: apps/transactions/views/entities.py:133
msgid "Entity deleted successfully"
msgstr "Entità eliminata con successo"
msgstr "Beneficiario eliminato con successo"
#: apps/transactions/views/installment_plans.py:87
msgid "Installment Plan added successfully"
@@ -1886,8 +1886,8 @@ msgid ""
"displayed\n"
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr ""
"Questo cambia la lingua (se disponibile) e la modalità di visualizzazione di "
"numeri e date.\n"
"Cambia la lingua (se disponibile) e la modalità di visualizzazione di numeri "
"e date.\n"
"Considera la possibilità di contribuire alla traduzione di WYGIWYH nella tua "
"lingua su %(translation_link)s"
@@ -1897,7 +1897,7 @@ msgstr "Nuova Password"
#: apps/users/forms.py:160
msgid "Leave blank to keep the current password."
msgstr "Lasciare vuoto per mantenere la password corrente."
msgstr "Lascia vuoto per mantenere la password attuale."
#: apps/users/forms.py:163
msgid "Confirm New Password"
@@ -2016,11 +2016,11 @@ msgstr "Le tue impostazioni sono state aggiornate"
#: templates/account_groups/fragments/add.html:5
msgid "Add account group"
msgstr "Aggiungi gruppo di account"
msgstr "Aggiungi gruppo conti"
#: templates/account_groups/fragments/edit.html:5
msgid "Edit account group"
msgstr "Modifica gruppo di account"
msgstr "Modifica gruppo conti"
#: templates/account_groups/fragments/list.html:32
#: templates/accounts/fragments/list.html:37
@@ -2192,7 +2192,7 @@ msgstr "Condividi"
#: templates/account_groups/fragments/list.html:77
msgid "No account groups"
msgstr "Nessun gruppo di account"
msgstr "Nessun gruppo conti"
#: templates/account_groups/fragments/share.html:5
#: templates/accounts/fragments/share.html:5
@@ -2212,6 +2212,8 @@ msgid "Current balance"
msgstr "Saldo corrente"
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/net_worth/net_worth.html:105
#: templates/net_worth/net_worth.html:362
msgid "Difference"
msgstr "Differenza"
@@ -2517,7 +2519,7 @@ msgstr "Aggiungi strategia DCA"
#: templates/dca/fragments/strategy/details.html:22
msgid "No exchange rate available"
msgstr "Nessun tasso di cambio disponibile"
msgstr "Nessun cambio valuta disponibile"
#: templates/dca/fragments/strategy/details.html:33
msgid "Entries"
@@ -2587,19 +2589,19 @@ msgstr "Prezzo attuale"
msgid "Amount Bought"
msgstr "Importo acquistato"
#: templates/dca/fragments/strategy/details.html:390
#: templates/dca/fragments/strategy/details.html:392
msgid "Entry Price vs Current Price"
msgstr "Prezzo di ingresso vs prezzo corrente"
#: templates/dca/fragments/strategy/details.html:406
#: templates/dca/fragments/strategy/details.html:408
msgid "Days Between Investments"
msgstr "Giorni tra gli investimenti"
#: templates/dca/fragments/strategy/details.html:453
#: templates/dca/fragments/strategy/details.html:455
msgid "Investment Frequency"
msgstr "Frequenza di investimento"
#: templates/dca/fragments/strategy/details.html:455
#: templates/dca/fragments/strategy/details.html:457
msgid "The straighter the blue line, the more consistent your DCA strategy is."
msgstr "Più dritta è la linea blu, più coerente è la tua strategia DCA."
@@ -2610,33 +2612,33 @@ msgstr "Modifica la strategia DCA"
#: templates/dca/fragments/strategy/list.html:5
#: templates/dca/pages/strategy_index.html:4
msgid "Dollar Cost Average Strategies"
msgstr "Strategie di costo medio del dollaro"
msgstr "Strategie DCA"
#: templates/dca/pages/strategy_detail_index.html:4
msgid "Dollar Cost Average Strategy"
msgstr "Strategia del costo medio del dollaro"
msgstr "Strategie DCA"
#: templates/entities/fragments/add.html:5
msgid "Add entity"
msgstr "Aggiungi entità"
msgstr "Aggiungi beneficiario"
#: templates/entities/fragments/edit.html:5
msgid "Edit entity"
msgstr "Modifica entità"
msgstr "Modifica beneficiario"
#: templates/entities/fragments/table.html:71
msgid "No entities"
msgstr "Nessuna entità"
msgstr "Nessun beneficiario"
#: templates/exchange_rates/fragments/add.html:5
#: templates/exchange_rates_services/fragments/add.html:5
msgid "Add exchange rate"
msgstr "Aggiungi tasso di cambio"
msgstr "Aggiungi cambio valuta"
#: templates/exchange_rates/fragments/edit.html:5
#: templates/exchange_rates_services/fragments/edit.html:5
msgid "Edit exchange rate"
msgstr "Modifica tasso di cambio"
msgstr "Modifica cambio valuta"
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:85
@@ -2659,7 +2661,7 @@ msgstr "Tasso"
#: templates/exchange_rates/fragments/table.html:51
#: templates/exchange_rates_services/fragments/table.html:51
msgid "No exchange rates"
msgstr "Nessun tasso di cambio"
msgstr "Nessun cambio valuta"
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
@@ -2801,14 +2803,14 @@ msgstr "Patrimonio netto"
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
#: templates/net_worth/net_worth.html:23
msgid "Current"
msgstr "Attuale"
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:71
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Approfondimenti"
msgstr "Analisi"
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:93
msgid "Trash Can"
@@ -2820,19 +2822,19 @@ msgstr "Strumenti"
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:120
msgid "Dollar Cost Average Tracker"
msgstr "Tracker del costo medio del dollaro"
msgstr "Costo medio del dollaro"
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:126
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr "Calcolatore del prezzo unitario"
msgstr "Prezzo per unità"
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:132
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr "Convertitore di valuta"
msgstr "Converti valuta"
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:150
#: templates/includes/sidebar.html:163
@@ -2936,7 +2938,7 @@ msgstr "Tabella"
#: templates/insights/fragments/category_overview/index.html:24
msgid "Bars"
msgstr "Barre"
msgstr "Grafico a barre"
#: templates/insights/fragments/category_overview/index.html:39
msgid ""
@@ -2951,7 +2953,7 @@ msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
"Gli importi delle transazioni associati a più tag ed entità verranno "
"Gli importi delle transazioni associati a più tag e beneficiari verranno "
"conteggiati una volta per ogni tag"
#: templates/insights/fragments/category_overview/index.html:69
@@ -2997,7 +2999,7 @@ msgstr "Tutto bene!"
#: templates/insights/fragments/late_transactions.html:16
msgid "No late transactions"
msgstr "Nessuna transazione in ritardo"
msgstr "Nessuna transazione in sospeso"
#: templates/insights/fragments/latest_transactions.html:14
msgid "No recent transactions"
@@ -3023,35 +3025,35 @@ msgstr "Anno"
#: templates/insights/pages/index.html:45
msgid "Month Range"
msgstr "Intervallo di mesi"
msgstr "Intervallo mesi"
#: templates/insights/pages/index.html:50
msgid "Year Range"
msgstr "Intervallo di anni"
msgstr "Intervallo anni"
#: templates/insights/pages/index.html:55
msgid "Date Range"
msgstr "Intervallo di date"
msgstr "Intervallo date"
#: templates/insights/pages/index.html:83
msgid "Account Flow"
msgstr "Flusso del conto"
msgstr "Flusso conti"
#: templates/insights/pages/index.html:90
msgid "Currency Flow"
msgstr "Flusso di valuta"
msgstr "Flusso valute"
#: templates/insights/pages/index.html:97
msgid "Category Explorer"
msgstr "Esploratore di categorie"
msgstr "Categorie"
#: templates/insights/pages/index.html:104
msgid "Categories Overview"
msgstr "Panoramica delle categorie"
msgstr "Panoramica categorie"
#: templates/insights/pages/index.html:111
msgid "Late Transactions"
msgstr "Transazioni in ritardo"
msgstr "Transazioni in sospeso"
#: templates/insights/pages/index.html:117
msgid "Latest Transactions"
@@ -3114,7 +3116,7 @@ msgstr "Investi"
#: templates/mini_tools/unit_price_calculator.html:100
#: templates/mini_tools/unit_price_calculator.html:125
msgid "Item price"
msgstr "Prezzo dell'elemento"
msgstr "Prezzo"
#: templates/mini_tools/unit_price_calculator.html:33
#: templates/mini_tools/unit_price_calculator.html:106
@@ -3144,7 +3146,7 @@ msgstr "Quota di spesa giornaliera"
#: templates/monthly_overview/fragments/monthly_summary.html:6
msgid "This is the final total divided by the remaining days in the month"
msgstr "Questo è il totale finale diviso per i giorni rimanenti del mese"
msgstr "Il totale finale diviso per i giorni del mese rimanenti"
#: templates/monthly_overview/fragments/monthly_summary.html:42
#: templates/monthly_overview/fragments/monthly_summary.html:106
@@ -3194,25 +3196,31 @@ msgstr "Filtra transazioni"
msgid "Order by"
msgstr "Ordina per"
#: templates/net_worth/net_worth.html:40
#: templates/net_worth/net_worth.html:42
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr "Per valuta"
#: templates/net_worth/net_worth.html:75
#: templates/net_worth/net_worth.html:78
msgid "Consolidated"
msgstr "Consolidate"
#: templates/net_worth/net_worth.html:104
#: templates/net_worth/net_worth.html:101
#, fuzzy
#| msgid "Evolution by account"
msgid "Evolution"
msgstr "Evoluzione per conto"
#: templates/net_worth/net_worth.html:128
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr "Per conto"
#: templates/net_worth/net_worth.html:211
#: templates/net_worth/net_worth.html:236
msgid "Evolution by currency"
msgstr "Evoluzione per valuta"
#: templates/net_worth/net_worth.html:275
#: templates/net_worth/net_worth.html:300
msgid "Evolution by account"
msgstr "Evoluzione per conto"
@@ -3224,7 +3232,7 @@ msgstr "Aggiungi transazione rapida"
#: templates/quick_transactions/fragments/create_menu.html:13
#: templates/quick_transactions/fragments/list.html:68
msgid "Nothing to see here..."
msgstr "Qui non c'è niente da vedere..."
msgstr "Non cè nulla da mostrare..."
#: templates/quick_transactions/fragments/edit.html:5
msgid "Edit quick transaction"

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-14 04:57+0000\n"
"PO-Revision-Date: 2025-09-09 18:17+0000\n"
"POT-Creation-Date: 2025-09-20 14:08+0000\n"
"PO-Revision-Date: 2025-09-21 13:17+0000\n"
"Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n"
"Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/"
"app/nl/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13.2\n"
"X-Generator: Weblate 5.13.3\n"
#: apps/accounts/forms.py:26
msgid "Group name"
@@ -1344,7 +1344,7 @@ msgstr "Verrichting Bijwerken Of Maken succesvol verwijderd"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/net_worth/net_worth.html:33
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -2208,6 +2208,8 @@ msgid "Current balance"
msgstr "Huidige saldo"
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/net_worth/net_worth.html:105
#: templates/net_worth/net_worth.html:362
msgid "Difference"
msgstr "Verschil"
@@ -2583,19 +2585,19 @@ msgstr "Actuele Prijs"
msgid "Amount Bought"
msgstr "Gekocht Bedrag"
#: templates/dca/fragments/strategy/details.html:390
#: templates/dca/fragments/strategy/details.html:392
msgid "Entry Price vs Current Price"
msgstr "Instapprijs vs Huidige Prijs"
#: templates/dca/fragments/strategy/details.html:406
#: templates/dca/fragments/strategy/details.html:408
msgid "Days Between Investments"
msgstr "Dagen Tussen Investeringen"
#: templates/dca/fragments/strategy/details.html:453
#: templates/dca/fragments/strategy/details.html:455
msgid "Investment Frequency"
msgstr "Investeringsfrequentie"
#: templates/dca/fragments/strategy/details.html:455
#: templates/dca/fragments/strategy/details.html:457
msgid "The straighter the blue line, the more consistent your DCA strategy is."
msgstr "Hoe rechter de blauwe lijn, hoe consistenter je DCA-strategie is."
@@ -2796,7 +2798,7 @@ msgstr "Netto Waarde"
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
#: templates/net_worth/net_worth.html:23
msgid "Current"
msgstr "Huidige"
@@ -3190,25 +3192,29 @@ msgstr "Filter verrichtingen"
msgid "Order by"
msgstr "Sorteer op"
#: templates/net_worth/net_worth.html:40
#: templates/net_worth/net_worth.html:42
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr "Op munteenheid"
#: templates/net_worth/net_worth.html:75
#: templates/net_worth/net_worth.html:78
msgid "Consolidated"
msgstr "Samengevoegd"
#: templates/net_worth/net_worth.html:104
#: templates/net_worth/net_worth.html:101
msgid "Evolution"
msgstr "Evolutie"
#: templates/net_worth/net_worth.html:128
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr "Op rekening"
#: templates/net_worth/net_worth.html:211
#: templates/net_worth/net_worth.html:236
msgid "Evolution by currency"
msgstr "Evolutie per munteenheid"
#: templates/net_worth/net_worth.html:275
#: templates/net_worth/net_worth.html:300
msgid "Evolution by account"
msgstr "Evolutie per rekening"

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-14 04:57+0000\n"
"PO-Revision-Date: 2025-09-07 14:17+0000\n"
"POT-Creation-Date: 2025-09-20 14:08+0000\n"
"PO-Revision-Date: 2025-09-20 14:44+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translations.herculino.com/"
"projects/wygiwyh/app/pt_BR/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.13\n"
"X-Generator: Weblate 5.13.3\n"
#: apps/accounts/forms.py:26
msgid "Group name"
@@ -1342,7 +1342,7 @@ msgstr "Ação Atualizar ou Criar Transação apagada com sucesso"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/net_worth/net_worth.html:33
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -2207,6 +2207,8 @@ msgid "Current balance"
msgstr "Saldo atual"
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/net_worth/net_worth.html:105
#: templates/net_worth/net_worth.html:362
msgid "Difference"
msgstr "Diferença"
@@ -2582,19 +2584,19 @@ msgstr "Preço atual"
msgid "Amount Bought"
msgstr "Quantia comprada"
#: templates/dca/fragments/strategy/details.html:390
#: templates/dca/fragments/strategy/details.html:392
msgid "Entry Price vs Current Price"
msgstr "Preço de Entrada vs Preço Atual"
#: templates/dca/fragments/strategy/details.html:406
#: templates/dca/fragments/strategy/details.html:408
msgid "Days Between Investments"
msgstr "Dias entre investimentos"
#: templates/dca/fragments/strategy/details.html:453
#: templates/dca/fragments/strategy/details.html:455
msgid "Investment Frequency"
msgstr "Frequência de Investimento"
#: templates/dca/fragments/strategy/details.html:455
#: templates/dca/fragments/strategy/details.html:457
msgid "The straighter the blue line, the more consistent your DCA strategy is."
msgstr ""
"Quanto mais reta for a linha azul, mais consistente é sua estratégia de CMP."
@@ -2797,7 +2799,7 @@ msgstr "Patrimônio"
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
#: templates/net_worth/net_worth.html:23
msgid "Current"
msgstr "Atual"
@@ -3189,25 +3191,29 @@ msgstr "Filtrar transações"
msgid "Order by"
msgstr "Ordernar por"
#: templates/net_worth/net_worth.html:40
#: templates/net_worth/net_worth.html:42
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr "Por moeda"
#: templates/net_worth/net_worth.html:75
#: templates/net_worth/net_worth.html:78
msgid "Consolidated"
msgstr "Consolidado"
#: templates/net_worth/net_worth.html:104
#: templates/net_worth/net_worth.html:101
msgid "Evolution"
msgstr "Evolução"
#: templates/net_worth/net_worth.html:128
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr "Por conta"
#: templates/net_worth/net_worth.html:211
#: templates/net_worth/net_worth.html:236
msgid "Evolution by currency"
msgstr "Evolução por moeda"
#: templates/net_worth/net_worth.html:275
#: templates/net_worth/net_worth.html:300
msgid "Evolution by account"
msgstr "Evolução por conta"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-14 04:57+0000\n"
"POT-Creation-Date: 2025-09-20 14:08+0000\n"
"PO-Revision-Date: 2025-04-14 06:16+0000\n"
"Last-Translator: Emil <emil.bjorkroth@gmail.com>\n"
"Language-Team: Swedish <https://translations.herculino.com/projects/wygiwyh/"
@@ -1318,7 +1318,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/net_worth/net_worth.html:33
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -2169,6 +2169,8 @@ msgid "Current balance"
msgstr ""
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/net_worth/net_worth.html:105
#: templates/net_worth/net_worth.html:362
msgid "Difference"
msgstr ""
@@ -2544,19 +2546,19 @@ msgstr ""
msgid "Amount Bought"
msgstr ""
#: templates/dca/fragments/strategy/details.html:390
#: templates/dca/fragments/strategy/details.html:392
msgid "Entry Price vs Current Price"
msgstr ""
#: templates/dca/fragments/strategy/details.html:406
#: templates/dca/fragments/strategy/details.html:408
msgid "Days Between Investments"
msgstr ""
#: templates/dca/fragments/strategy/details.html:453
#: templates/dca/fragments/strategy/details.html:455
msgid "Investment Frequency"
msgstr ""
#: templates/dca/fragments/strategy/details.html:455
#: templates/dca/fragments/strategy/details.html:457
msgid "The straighter the blue line, the more consistent your DCA strategy is."
msgstr ""
@@ -2756,7 +2758,7 @@ msgstr ""
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
#: templates/net_worth/net_worth.html:23
msgid "Current"
msgstr ""
@@ -3139,25 +3141,29 @@ msgstr ""
msgid "Order by"
msgstr ""
#: templates/net_worth/net_worth.html:40
#: templates/net_worth/net_worth.html:42
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr ""
#: templates/net_worth/net_worth.html:75
#: templates/net_worth/net_worth.html:78
msgid "Consolidated"
msgstr ""
#: templates/net_worth/net_worth.html:104
#: templates/net_worth/net_worth.html:101
msgid "Evolution"
msgstr ""
#: templates/net_worth/net_worth.html:128
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr ""
#: templates/net_worth/net_worth.html:211
#: templates/net_worth/net_worth.html:236
msgid "Evolution by currency"
msgstr ""
#: templates/net_worth/net_worth.html:275
#: templates/net_worth/net_worth.html:300
msgid "Evolution by account"
msgstr ""

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-14 04:57+0000\n"
"POT-Creation-Date: 2025-09-20 14:08+0000\n"
"PO-Revision-Date: 2025-05-12 14:16+0000\n"
"Last-Translator: Felix <xnovaua@gmail.com>\n"
"Language-Team: Ukrainian <https://translations.herculino.com/projects/"
@@ -1335,7 +1335,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:47
#: templates/insights/fragments/category_overview/index.html:61
#: templates/net_worth/net_worth.html:32
#: templates/net_worth/net_worth.html:33
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -2190,6 +2190,8 @@ msgid "Current balance"
msgstr ""
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/net_worth/net_worth.html:105
#: templates/net_worth/net_worth.html:362
msgid "Difference"
msgstr ""
@@ -2565,19 +2567,19 @@ msgstr ""
msgid "Amount Bought"
msgstr ""
#: templates/dca/fragments/strategy/details.html:390
#: templates/dca/fragments/strategy/details.html:392
msgid "Entry Price vs Current Price"
msgstr ""
#: templates/dca/fragments/strategy/details.html:406
#: templates/dca/fragments/strategy/details.html:408
msgid "Days Between Investments"
msgstr ""
#: templates/dca/fragments/strategy/details.html:453
#: templates/dca/fragments/strategy/details.html:455
msgid "Investment Frequency"
msgstr ""
#: templates/dca/fragments/strategy/details.html:455
#: templates/dca/fragments/strategy/details.html:457
msgid "The straighter the blue line, the more consistent your DCA strategy is."
msgstr ""
@@ -2777,7 +2779,7 @@ msgstr ""
#: templates/includes/navbar.html:45
#: templates/insights/fragments/category_overview/index.html:65
#: templates/net_worth/net_worth.html:22
#: templates/net_worth/net_worth.html:23
msgid "Current"
msgstr ""
@@ -3160,25 +3162,29 @@ msgstr ""
msgid "Order by"
msgstr ""
#: templates/net_worth/net_worth.html:40
#: templates/net_worth/net_worth.html:42
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr ""
#: templates/net_worth/net_worth.html:75
#: templates/net_worth/net_worth.html:78
msgid "Consolidated"
msgstr ""
#: templates/net_worth/net_worth.html:104
#: templates/net_worth/net_worth.html:101
msgid "Evolution"
msgstr ""
#: templates/net_worth/net_worth.html:128
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr ""
#: templates/net_worth/net_worth.html:211
#: templates/net_worth/net_worth.html:236
msgid "Evolution by currency"
msgstr ""
#: templates/net_worth/net_worth.html:275
#: templates/net_worth/net_worth.html:300
msgid "Evolution by account"
msgstr ""

View File

@@ -3,7 +3,7 @@
{% if icon %}<i class="{{ icon }}"></i>{% else %}<span class="fw-bold">{{ title.0 }}</span>{% endif %}
</div>
<div class="card-body">
<h5 class="tw:text-{{ color }}-400 fw-bold tw:mr-[50px]" {{ attrs }}>{{ title }}{% if help_text %}<c-ui.help-icon :content="help_text" icon=""></c-ui.help-icon>{% endif %}</h5>
<h5 class="tw:text-{{ color }}-400 fw-bold tw:mr-[50px] {{ title_css_classes }}" {{ attrs }}>{{ title }}{% if help_text %}<c-ui.help-icon :content="help_text" icon=""></c-ui.help-icon>{% endif %}</h5>
{{ slot }}
</div>
</div>

View File

@@ -354,6 +354,7 @@
display: false,
},
ticks: {
display: false,
format: { maximumFractionDigits: 40, minimumFractionDigits: 1 }
}
},
@@ -369,6 +370,7 @@
display: false,
},
ticks: {
display: false,
format: { maximumFractionDigits: 40, minimumFractionDigits: 1 }
}
}

View File

@@ -9,338 +9,422 @@
{% block title %}{% if type == "current" %}{% translate 'Current Net Worth' %}{% else %}{% translate 'Projected Net Worth' %}{% endif %}{% endblock %}
{% block content %}
<div hx-trigger="every 60m, updated from:window" hx-include="#view-type" class="show-loading" hx-get="" hx-target="body">
<div class="h-100 text-center mb-4 pt-2">
<div class="btn-group gap-3" role="group" id="view-type" _="on change trigger updated">
<input type="radio" class="btn-check"
name="view_type"
id="current-view"
autocomplete="off"
value="current"
{% if type == "current" %}checked{% endif %}>
<label class="btn btn-outline-primary rounded-5" for="current-view"><i
class="fa-solid fa-sack-dollar fa-fw me-2"></i>{% trans 'Current' %}</label>
<div hx-trigger="every 60m, updated from:window" hx-include="#view-type" class="show-loading" hx-get=""
hx-target="body">
<div class="h-100 text-center mb-4 pt-2">
<div class="btn-group gap-3" role="group" id="view-type" _="on change trigger updated">
<input type="radio" class="btn-check"
name="view_type"
id="current-view"
autocomplete="off"
value="current"
{% if type == "current" %}checked{% endif %}>
<label class="btn btn-outline-primary rounded-5" for="current-view"><i
class="fa-solid fa-sack-dollar fa-fw me-2"></i>{% trans 'Current' %}</label>
<input type="radio"
class="btn-check"
name="view_type"
id="projected-view"
autocomplete="off"
value="projected"
{% if type == "projected" %}checked{% endif %}>
<label class="btn btn-outline-primary rounded-5" for="projected-view"><i
class="fa-solid fa-rocket fa-fw me-2"></i>{% trans 'Projected' %}</label>
<input type="radio"
class="btn-check"
name="view_type"
id="projected-view"
autocomplete="off"
value="projected"
{% if type == "projected" %}checked{% endif %}>
<label class="btn btn-outline-primary rounded-5" for="projected-view"><i
class="fa-solid fa-rocket fa-fw me-2"></i>{% trans 'Projected' %}</label>
</div>
</div>
</div>
<div class="container px-md-3 py-3" _="init call initializeAccountChart() then initializeCurrencyChart() end">
<div class="row gx-xl-4 gy-3 mb-4">
<div class="col-12 col-xl-5">
<div class="row row-cols-1 g-4">
<div class="col">
<c-ui.info-card color="yellow" icon="fa-solid fa-coins" title="{% trans 'By currency' %}"
_="on click showAllDatasetsCurrency()">
{% for currency in currency_net_worth.values %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="currency-name text-start font-monospace tw:text-gray-300"
_="on click showOnlyCurrencyDataset('{{ currency.currency.name }}')">
{{ currency.currency.name }}
<div class="container px-md-3 py-3"
_="init call initializeAccountChart() then initializeCurrencyChart() then initializeMonthlyDifferenceChart() end">
<div class="row gx-xl-4 gy-3 mb-4">
<div class="col-12 col-xl-5">
<div class="row row-cols-1 g-4">
<div class="col">
<c-ui.info-card color="yellow" icon="fa-solid fa-coins" title="{% trans 'By currency' %}"
title_css_classes="tw:cursor-pointer"
_="on click showAllDatasetsCurrency()">
{% for currency in currency_net_worth.values %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="currency-name text-start font-monospace tw:text-gray-300 tw:cursor-pointer"
_="on click showOnlyCurrencyDataset('{{ currency.currency.name }}')">
{{ currency.currency.name }}
</div>
<div class="dotted-line flex-grow-1"></div>
<div>
<c-amount.display
:amount="currency.total_final"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="{% if currency.total_final > 0 %}green{% elif currency.total_final < 0 %}red{% endif %}"
text-end></c-amount.display>
</div>
</div>
<div class="dotted-line flex-grow-1"></div>
</div>
{% if currency.exchanged and currency.exchanged.total_final %}
<div>
<c-amount.display
:amount="currency.total_final"
:prefix="currency.currency.prefix"
:suffix="currency.currency.suffix"
:decimal_places="currency.currency.decimal_places"
color="{% if currency.total_final > 0 %}green{% elif currency.total_final < 0 %}red{% endif %}"
text-end></c-amount.display>
:amount="currency.exchanged.total_final"
:prefix="currency.exchanged.currency.prefix"
:suffix="currency.exchanged.currency.suffix"
:decimal_places="currency.exchanged.currency.decimal_places"
text-end
color="grey"></c-amount.display>
</div>
</div>
</div>
{% if currency.exchanged and currency.exchanged.total_final %}
<div>
<c-amount.display
:amount="currency.exchanged.total_final"
:prefix="currency.exchanged.currency.prefix"
:suffix="currency.exchanged.currency.suffix"
:decimal_places="currency.exchanged.currency.decimal_places"
text-end
color="grey"></c-amount.display>
</div>
{% endif %}
{% if currency.consolidated and currency.consolidated.total_final != currency.total_final %}
<div class="d-flex align-items-baseline w-100">
<div class="account-name text-start font-monospace tw:text-gray-300">
<span class="hierarchy-line-icon"></span>{% trans 'Consolidated' %}</div>
<div class="dotted-line flex-grow-1"></div>
<div class="">
<c-amount.display
{% endif %}
{% if currency.consolidated and currency.consolidated.total_final != currency.total_final %}
<div class="d-flex align-items-baseline w-100">
<div class="account-name text-start font-monospace tw:text-gray-300">
<span class="hierarchy-line-icon"></span>{% trans 'Consolidated' %}</div>
<div class="dotted-line flex-grow-1"></div>
<div class="">
<c-amount.display
:amount="currency.consolidated.total_final"
:prefix="currency.consolidated.currency.prefix"
:suffix="currency.consolidated.currency.suffix"
:decimal_places="currency.consolidated.currency.decimal_places"
color="{% if currency.consolidated.total_final > 0 %}green{% elif currency.consolidated.total_final < 0 %}red{% endif %}"
text-end></c-amount.display>
</div>
</div>
{% endif %}
{% endfor %}
</c-ui.info-card>
</div>
{% endif %}
{% endfor %}
</c-ui.info-card>
</div>
</div>
</div>
<div class="col-12 col-xl-7">
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="evolution-tab" data-bs-toggle="tab"
data-bs-target="#evolution-tab-pane" type="button" role="tab" aria-controls="evolution-tab-pane"
aria-selected="true">{% trans 'Evolution' %}</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="diff-tab" data-bs-toggle="tab" data-bs-target="#diff-tab-pane" type="button"
role="tab" aria-controls="diff-tab-pane" aria-selected="false">{% trans 'Difference' %}</button>
</li>
</ul>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="evolution-tab-pane" role="tabpanel"
aria-labelledby="evolution-tab" tabindex="0">
<div class="chart-container position-relative tw:min-h-[40vh] tw:h-full tw:w-full">
<canvas id="currencyBalanceChart"></canvas>
</div>
</div>
<div class="tab-pane fade" id="diff-tab-pane" role="tabpanel" aria-labelledby="diff-tab" tabindex="0">
<div class="chart-container position-relative tw:min-h-[40vh] tw:h-full tw:w-full">
<canvas id="monthlyDifferenceChart"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 col-xl-7">
<div class="chart-container position-relative tw:min-h-[40vh] tw:h-full">
<canvas id="currencyBalanceChart"></canvas>
</div>
</div>
</div>
<hr>
<div class="row gx-xl-4 gy-3 mt-4">
<div class="col-12 col-xl-5">
<div class="row row-cols-1 g-4">
<div class="col">
<c-ui.info-card color="blue" icon="fa-solid fa-wallet" title="{% trans 'By account' %}"
_="on click showAllDatasetsAccount()">
{% regroup account_net_worth.values by account.group as account_data %}
{% for data in account_data %}
{% if data.grouper %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="text-start font-monospace tw:text-gray-300"><span class="badge text-bg-primary">
<hr>
<div class="row gx-xl-4 gy-3 mt-4">
<div class="col-12 col-xl-5">
<div class="row row-cols-1 g-4">
<div class="col">
<c-ui.info-card color="blue" icon="fa-solid fa-wallet" title="{% trans 'By account' %}"
title_css_classes="tw:cursor-pointer"
_="on click showAllDatasetsAccount()">
{% regroup account_net_worth.values by account.group as account_data %}
{% for data in account_data %}
{% if data.grouper %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="text-start font-monospace tw:text-gray-300"><span class="badge text-bg-primary">
{{ data.grouper }}</span></div>
</div>
</div>
{% for account in data.list %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="account-name text-start font-monospace tw:text-gray-300"
_="on click showOnlyAccountDataset('{{ account.account.name }}')">
<span class="hierarchy-line-icon"></span>{{ account.account.name }}</div>
<div class="dotted-line flex-grow-1"></div>
<div class="">
<c-amount.display
:amount="account.total_final"
:prefix="account.currency.prefix"
:suffix="account.currency.suffix"
:decimal_places="account.currency.decimal_places"
color="{% if account.total_final > 0 %}green{% elif account.total_final < 0 %}red{% endif %}"></c-amount.display>
</div>
</div>
</div>
{% if account.exchanged and account.exchanged.total_final %}
<c-amount.display
:amount="account.exchanged.total_final"
:prefix="account.exchanged.currency.prefix"
:suffix="account.exchanged.currency.suffix"
:decimal_places="account.exchanged.currency.decimal_places"
color="grey"
text-end></c-amount.display>
{% endif %}
{% endfor %}
{% else %}
{% for account in data.list %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="account-name text-start font-monospace tw:text-gray-300"
_="on click showOnlyAccountDataset('{{ account.account.name }}')">
{{ account.account.name }}
</div>
<div class="dotted-line flex-grow-1"></div>
<div>
<c-amount.display
:amount="account.total_final"
:prefix="account.currency.prefix"
:suffix="account.currency.suffix"
:decimal_places="account.currency.decimal_places"
color="{% if account.total_final > 0 %}green{% elif account.total_final < 0 %}red{% endif %}"></c-amount.display>
{% for account in data.list %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="account-name text-start font-monospace tw:text-gray-300 tw:cursor-pointer"
_="on click showOnlyAccountDataset('{{ account.account.name }}')">
<span class="hierarchy-line-icon"></span>{{ account.account.name }}</div>
<div class="dotted-line flex-grow-1"></div>
<div class="">
<c-amount.display
:amount="account.total_final"
:prefix="account.currency.prefix"
:suffix="account.currency.suffix"
:decimal_places="account.currency.decimal_places"
color="{% if account.total_final > 0 %}green{% elif account.total_final < 0 %}red{% endif %}"></c-amount.display>
</div>
</div>
</div>
</div>
{% if account.exchanged and account.exchanged.total_final %}
<c-amount.display
:amount="account.exchanged.total_final"
:prefix="account.exchanged.currency.prefix"
:suffix="account.exchanged.currency.suffix"
:decimal_places="account.exchanged.currency.decimal_places"
color="grey"
text-end></c-amount.display>
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
</c-ui.info-card>
{% if account.exchanged and account.exchanged.total_final %}
<c-amount.display
:amount="account.exchanged.total_final"
:prefix="account.exchanged.currency.prefix"
:suffix="account.exchanged.currency.suffix"
:decimal_places="account.exchanged.currency.decimal_places"
color="grey"
text-end></c-amount.display>
{% endif %}
{% endfor %}
{% else %}
{% for account in data.list %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="account-name text-start font-monospace tw:text-gray-300 tw:cursor-pointer"
_="on click showOnlyAccountDataset('{{ account.account.name }}')">
{{ account.account.name }}
</div>
<div class="dotted-line flex-grow-1"></div>
<div>
<c-amount.display
:amount="account.total_final"
:prefix="account.currency.prefix"
:suffix="account.currency.suffix"
:decimal_places="account.currency.decimal_places"
color="{% if account.total_final > 0 %}green{% elif account.total_final < 0 %}red{% endif %}"></c-amount.display>
</div>
</div>
</div>
{% if account.exchanged and account.exchanged.total_final %}
<c-amount.display
:amount="account.exchanged.total_final"
:prefix="account.exchanged.currency.prefix"
:suffix="account.exchanged.currency.suffix"
:decimal_places="account.exchanged.currency.decimal_places"
color="grey"
text-end></c-amount.display>
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
</c-ui.info-card>
</div>
</div>
</div>
<div class="col-12 col-xl-7">
<div class="chart-container position-relative tw:min-h-[40vh] tw:h-full">
<canvas id="accountBalanceChart"></canvas>
</div>
</div>
</div>
<div class="col-12 col-xl-7">
<div class="chart-container position-relative tw:min-h-[40vh] tw:h-full">
<canvas id="accountBalanceChart"></canvas>
</div>
</div>
</div>
<script>
var currencyChart;
function initializeCurrencyChart() {
// Destroy existing chart if it exists
if (currencyChart) {
currencyChart.destroy();
}
var chartData = JSON.parse('{{ chart_data_currency_json|safe }}');
var currencies = {{ currencies|safe }};
var ctx = document.getElementById('currencyBalanceChart').getContext('2d');
currencyChart = new Chart(ctx, {
type: 'line',
data: chartData,
options: {
maintainAspectRatio: false,
responsive: true,
interaction: {
mode: 'index',
intersect: false,
},
plugins: {
title: {
display: true,
text: '{% translate 'Evolution by currency' %}'
},
tooltip: {
mode: 'index',
intersect: false
}
},
scales: {
x: {
display: true,
title: {
display: false,
}
},
...Object.fromEntries(currencies.map((currency, i) => [
`y${i}`,
{
type: 'linear',
display: true,
grid: {
drawOnChartArea: i === 0,
},
ticks: {
display: false,
format: {maximumFractionDigits: 40, minimumFractionDigits: 0}
},
border: {
display: false
}
}
]))
}
}
});
}
</script>
<script id="accountBalanceChartScript">
var accountChart;
function initializeAccountChart() {
// Destroy existing chart if it exists
if (accountChart) {
accountChart.destroy();
}
var chartData = JSON.parse('{{ chart_data_accounts_json|safe }}');
var accounts = {{ accounts|safe }};
var ctx = document.getElementById('accountBalanceChart').getContext('2d');
accountChart = new Chart(ctx, {
type: 'line',
data: chartData,
options: {
maintainAspectRatio: false,
responsive: true,
interaction: {
mode: 'index',
intersect: false,
},
stacked: false,
plugins: {
title: {
display: true,
text: '{% translate "Evolution by account" %}'
},
tooltip: {
mode: 'index',
intersect: false
}
},
scales: {
x: {
display: true,
title: {
display: false,
}
},
...Object.fromEntries(accounts.map((account, i) => [
`y-axis-${i}`,
{
type: 'linear',
display: true,
position: i % 2 === 0 ? 'left' : 'right',
grid: {
drawOnChartArea: i === 0,
},
ticks: {
display: false,
format: {maximumFractionDigits: 40, minimumFractionDigits: 0}
},
border: {
display: false
}
}
]))
}
}
});
}
</script>
<script id="monthlyDifferenceChartScript">
var monthlyDifferenceChart;
function initializeMonthlyDifferenceChart() {
if (monthlyDifferenceChart) {
monthlyDifferenceChart.destroy();
}
var chartData = JSON.parse('{{ chart_data_monthly_difference_json|safe }}');
var ctx = document.getElementById('monthlyDifferenceChart').getContext('2d');
monthlyDifferenceChart = new Chart(ctx, {
type: 'bar',
data: chartData,
options: {
maintainAspectRatio: false,
responsive: true,
interaction: {
mode: 'index',
intersect: false,
},
plugins: {
title: {
display: true,
text: '{% translate "Difference" %}'
},
tooltip: {
mode: 'index',
intersect: false
}
},
scales: {
x: {
stacked: true,
},
y: {
stacked: true,
ticks: {
display: false,
format: {maximumFractionDigits: 40, minimumFractionDigits: 0}
},
}
}
}
});
}
</script>
<script type="text/hyperscript">
def showOnlyAccountDataset(datasetName)
for dataset in accountChart.data.datasets
set isMatch to dataset.label is datasetName
call accountChart.setDatasetVisibility(accountChart.data.datasets.indexOf(dataset), isMatch)
end
call accountChart.update()
end
def showOnlyCurrencyDataset(datasetName)
for dataset in currencyChart.data.datasets
set isMatch to dataset.label is datasetName
call currencyChart.setDatasetVisibility(currencyChart.data.datasets.indexOf(dataset), isMatch)
end
call currencyChart.update()
for dataset in monthlyDifferenceChart.data.datasets
set isMatch to dataset.label is datasetName
call monthlyDifferenceChart.setDatasetVisibility(monthlyDifferenceChart.data.datasets.indexOf(dataset), isMatch)
end
call monthlyDifferenceChart.update()
end
def showAllDatasetsAccount()
for dataset in accountChart.data.datasets
call accountChart.setDatasetVisibility(accountChart.data.datasets.indexOf(dataset), true)
end
call accountChart.update()
end
def showAllDatasetsCurrency()
for dataset in currencyChart.data.datasets
call currencyChart.setDatasetVisibility(currencyChart.data.datasets.indexOf(dataset), true)
end
call currencyChart.update()
for dataset in monthlyDifferenceChart.data.datasets
call monthlyDifferenceChart.setDatasetVisibility(monthlyDifferenceChart.data.datasets.indexOf(dataset), true)
end
call monthlyDifferenceChart.update()
end
</script>
</div>
<script>
var currencyChart;
function initializeCurrencyChart() {
// Destroy existing chart if it exists
if (currencyChart) {
currencyChart.destroy();
}
var chartData = JSON.parse('{{ chart_data_currency_json|safe }}');
var currencies = {{ currencies|safe }};
var ctx = document.getElementById('currencyBalanceChart').getContext('2d');
currencyChart = new Chart(ctx, {
type: 'line',
data: chartData,
options: {
maintainAspectRatio: false,
responsive: true,
interaction: {
mode: 'index',
intersect: false,
},
plugins: {
title: {
display: true,
text: '{% translate 'Evolution by currency' %}'
},
tooltip: {
mode: 'index',
intersect: false
}
},
scales: {
x: {
display: true,
title: {
display: false,
}
},
...Object.fromEntries(currencies.map((currency, i) => [
`y${i}`,
{
type: 'linear',
display: true,
grid: {
drawOnChartArea: i === 0,
},
ticks: {
display: false,
format: {maximumFractionDigits: 40, minimumFractionDigits: 0}
},
border: {
display: false
}
}
]))
}
}
});
}
</script>
<script id="accountBalanceChartScript">
var accountChart;
function initializeAccountChart() {
// Destroy existing chart if it exists
if (accountChart) {
accountChart.destroy();
}
var chartData = JSON.parse('{{ chart_data_accounts_json|safe }}');
var accounts = {{ accounts|safe }};
var ctx = document.getElementById('accountBalanceChart').getContext('2d');
accountChart = new Chart(ctx, {
type: 'line',
data: chartData,
options: {
maintainAspectRatio: false,
responsive: true,
interaction: {
mode: 'index',
intersect: false,
},
stacked: false,
plugins: {
title: {
display: true,
text: '{% translate "Evolution by account" %}'
},
tooltip: {
mode: 'index',
intersect: false
}
},
scales: {
x: {
display: true,
title: {
display: false,
}
},
...Object.fromEntries(accounts.map((account, i) => [
`y-axis-${i}`,
{
type: 'linear',
display: true,
position: i % 2 === 0 ? 'left' : 'right',
grid: {
drawOnChartArea: i === 0,
},
ticks: {
display: false,
format: {maximumFractionDigits: 40, minimumFractionDigits: 0}
},
border: {
display: false
}
}
]))
}
}
});
}
</script>
<script type="text/hyperscript">
def showOnlyAccountDataset(datasetName)
for dataset in accountChart.data.datasets
set isMatch to dataset.label is datasetName
call accountChart.setDatasetVisibility(accountChart.data.datasets.indexOf(dataset), isMatch)
end
call accountChart.update()
end
def showOnlyCurrencyDataset(datasetName)
for dataset in currencyChart.data.datasets
set isMatch to dataset.label is datasetName
call currencyChart.setDatasetVisibility(currencyChart.data.datasets.indexOf(dataset), isMatch)
end
call currencyChart.update()
end
def showAllDatasetsAccount()
for dataset in accountChart.data.datasets
call accountChart.setDatasetVisibility(accountChart.data.datasets.indexOf(dataset), true)
end
call accountChart.update()
end
def showAllDatasetsCurrency()
for dataset in currencyChart.data.datasets
call currencyChart.setDatasetVisibility(currencyChart.data.datasets.indexOf(dataset), true)
end
call currencyChart.update()
end
</script>
</div>
<c-ui.transactions_fab></c-ui.transactions_fab>
<c-ui.transactions_fab></c-ui.transactions_fab>
{% endblock %}

View File

@@ -9,7 +9,7 @@
{% block content %}
<div>
<div class="container">
<div class="row vh-100 d-flex justify-content-center align-items-center">
<div class="row tw:h-dvh d-flex justify-content-center align-items-center">
<div class="col-md-6 col-xl-4 col-12">
{% settings "DEMO" as demo_mode %}
{% if demo_mode %}