Compare commits

..

40 Commits

Author SHA1 Message Date
Herculino Trotta
8bb40be41c Merge pull request #388 from eitchtee/weblate
Translations update from Weblate
2025-10-06 09:25:37 -03:00
doody
66c1cf2371 locale(Chinese (Traditional Han script)): update translation
Currently translated at 100.0% (695 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/zh_Hant/
2025-10-06 10:17:42 +00:00
doody
4b23836544 locale(Chinese (Traditional Han script)): update translation
Currently translated at 99.5% (692 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/zh_Hant/
2025-10-06 09:17:42 +00:00
doody
585af1270f locale(Chinese (Traditional Han script)): update translation
Currently translated at 83.7% (582 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/zh_Hant/
2025-10-06 08:17:42 +00:00
doody
a0cc51b2ec locale(Chinese (Traditional Han script)): update translation
Currently translated at 52.2% (363 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/zh_Hant/
2025-10-06 07:17:42 +00:00
Weblate
6a5de7d94d Merge remote-tracking branch 'origin/main' 2025-10-05 20:50:54 +00:00
Herculino Trotta
6d9687de0b Merge pull request #390 from eitchtee/add-mcp-server-mention
Add MCP Server section to README
2025-10-05 17:50:50 -03:00
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
TestXuser
698e05bd06 locale(Ukrainian): update translation
Currently translated at 14.2% (99 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/uk/
2025-10-05 09:17:43 +00:00
doody
90b3778e36 locale(Chinese (Traditional Han script)): update translation
Currently translated at 37.5% (261 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/zh_Hant/
2025-10-05 09:17:42 +00:00
doody
85a773bc01 locale(Chinese (Traditional Han script)): update translation
Currently translated at 18.7% (130 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/zh_Hant/
2025-10-05 08:17:42 +00:00
doody
355016a7a5 locale(Chinese (Traditional Han script)): update translation
Currently translated at 12.9% (90 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/zh_Hant/
2025-10-05 07:17:42 +00:00
doody
f04fcf99b7 locale(Chinese (Traditional Han script)): update translation
Currently translated at 2.1% (15 of 695 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/zh_Hant/
2025-10-04 17:17:42 +00:00
doody
0fb389e7e8 locale((Chinese (Traditional Han script))): added translation using Weblate 2025-10-04 16:46:45 +00: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
23 changed files with 1455 additions and 1589 deletions

3
.gitignore vendored
View File

@@ -160,6 +160,3 @@ cython_debug/
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/
postgres_data/
.prod.env

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>
@@ -126,7 +127,6 @@ To create the first user, open the container's console using Unraid's UI, by cli
| variable | type | default | explanation |
|-------------------------------|-------------|-----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| INTERNAL_PORT | int | 8000 | The port on which the app listens on. Defaults to 8000 if not set. |
| DJANGO_ALLOWED_HOSTS | string | localhost 127.0.0.1 | A list of space separated domains and IPs representing the host/domain names that WYGIWYH site can serve. [Click here](https://docs.djangoproject.com/en/5.1/ref/settings/#allowed-hosts) for more details |
| HTTPS_ENABLED | true\|false | false | Whether to use secure cookies. If this is set to true, the cookie will be marked as “secure”, which means browsers may ensure that the cookie is only sent under an HTTPS connection |
| URL | string | http://localhost http://127.0.0.1 | A list of space separated domains and IPs (with the protocol) representing the trusted origins for unsafe requests (e.g. POST). [Click here](https://docs.djangoproject.com/en/5.1/ref/settings/#csrf-trusted-origins ) for more details |
@@ -183,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"

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,9 +7,9 @@ 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-05-12 14:16+0000\n"
"Last-Translator: Felix <xnovaua@gmail.com>\n"
"POT-Creation-Date: 2025-09-20 14:08+0000\n"
"PO-Revision-Date: 2025-10-05 09:17+0000\n"
"Last-Translator: TestXuser <izime07@proton.me>\n"
"Language-Team: Ukrainian <https://translations.herculino.com/projects/"
"wygiwyh/app/uk/>\n"
"Language: uk\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.11.3\n"
"X-Generator: Weblate 5.13.3\n"
#: apps/accounts/forms.py:26
msgid "Group name"
@@ -154,8 +154,9 @@ msgid "Default currency for exchange calculations"
msgstr "Валюта за замовчуванням для обмінних розрахунків"
#: apps/accounts/models.py:55
#, fuzzy
msgid "Asset account"
msgstr "Рахунок активів"
msgstr "Рахунок активу"
#: apps/accounts/models.py:57
msgid ""
@@ -1335,7 +1336,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 +2191,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 +2568,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 +2780,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 +3163,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 ""
@@ -3417,15 +3424,15 @@ msgstr ""
#: templates/users/fragments/add.html:5
msgid "Add user"
msgstr ""
msgstr "Додати користувача"
#: templates/users/fragments/edit.html:5
msgid "Edit user"
msgstr ""
msgstr "Редагувати користувача"
#: templates/users/fragments/list.html:30
msgid "Email"
msgstr ""
msgstr "Email"
#: templates/users/fragments/list.html:31
msgid "Superuser"
@@ -3465,7 +3472,7 @@ msgstr ""
#: templates/users/login.html:40
msgid "Login with"
msgstr ""
msgstr "Увiйти за допомогою"
#: templates/yearly_overview/pages/overview_by_account.html:7
#: templates/yearly_overview/pages/overview_by_currency.html:9

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 %}

View File

@@ -15,7 +15,7 @@ services:
- ./frontend/:/usr/src/frontend:z
- wygiwyh_temp:/usr/src/app/temp/
ports:
- "${OUTBOUND_PORT:-8000}:${INTERNAL_PORT:-8000}"
- "${OUTBOUND_PORT}:8000"
env_file:
- .env
depends_on:

View File

@@ -4,7 +4,7 @@ services:
container_name: ${SERVER_NAME}
command: /start-single
ports:
- "${OUTBOUND_PORT:-8000}:${INTERNAL_PORT:-8000}"
- "${OUTBOUND_PORT}:8000"
env_file:
- .env
depends_on:

View File

@@ -4,9 +4,6 @@ set -o errexit
set -o pipefail
set -o nounset
# Set INTERNAL_PORT with default value of 8000
INTERNAL_PORT=${INTERNAL_PORT:-8000}
rm -f /tmp/migrations_complete
python manage.py migrate
@@ -16,4 +13,4 @@ touch /tmp/migrations_complete
python manage.py setup_users
exec python manage.py runserver 0.0.0.0:$INTERNAL_PORT
exec python manage.py runserver 0.0.0.0:8000

View File

@@ -4,9 +4,6 @@ set -o errexit
set -o pipefail
set -o nounset
# Set INTERNAL_PORT with default value of 8000
INTERNAL_PORT=${INTERNAL_PORT:-8000}
# Remove flag file if it exists from previous run
rm -f /tmp/migrations_complete
@@ -18,4 +15,4 @@ touch /tmp/migrations_complete
python manage.py setup_users
exec gunicorn WYGIWYH.wsgi:application --bind 0.0.0.0:$INTERNAL_PORT --timeout 600
exec gunicorn WYGIWYH.wsgi:application --bind 0.0.0.0:8000 --timeout 600