mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-02-25 08:54:52 +01:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6bf262e514 | ||
|
|
f9d9137336 | ||
|
|
b532521f27 | ||
|
|
1e06e2d34d | ||
|
|
a33fa5e184 | ||
|
|
a2453695d8 | ||
|
|
3e929d0433 | ||
|
|
185fc464a5 | ||
|
|
647c009525 | ||
|
|
ba75492dcc | ||
|
|
8312baaf45 | ||
|
|
4d346dc278 | ||
|
|
70ff7fab38 | ||
|
|
6947c6affd |
@@ -29,4 +29,14 @@ urlpatterns = [
|
||||
views.category_sum_by_currency,
|
||||
name="category_sum_by_currency",
|
||||
),
|
||||
path(
|
||||
"insights/late-transactions/",
|
||||
views.late_transactions,
|
||||
name="insights_late_transactions",
|
||||
),
|
||||
path(
|
||||
"insights/latest-transactions/",
|
||||
views.latest_transactions,
|
||||
name="insights_latest_transactions",
|
||||
),
|
||||
]
|
||||
|
||||
@@ -22,7 +22,7 @@ from apps.insights.utils.sankey import (
|
||||
generate_sankey_data_by_currency,
|
||||
)
|
||||
from apps.insights.utils.transactions import get_transactions
|
||||
from apps.transactions.models import TransactionCategory
|
||||
from apps.transactions.models import TransactionCategory, Transaction
|
||||
|
||||
|
||||
@login_required
|
||||
@@ -157,3 +157,33 @@ def category_sum_by_currency(request):
|
||||
"insights/fragments/category_explorer/charts/currency.html",
|
||||
{"currency_data": currency_data},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def latest_transactions(request):
|
||||
limit = timezone.now() - relativedelta(days=3)
|
||||
transactions = Transaction.objects.filter(created_at__gte=limit).order_by("-id")[
|
||||
:30
|
||||
]
|
||||
|
||||
return render(
|
||||
request,
|
||||
"insights/fragments/latest_transactions.html",
|
||||
{"transactions": transactions},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def late_transactions(request):
|
||||
now = timezone.localdate(timezone.now())
|
||||
transactions = Transaction.objects.filter(is_paid=False, date__lt=now)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"insights/fragments/late_transactions.html",
|
||||
{"transactions": transactions},
|
||||
)
|
||||
|
||||
0
app/apps/mini_tools/utils/__init__.py
Normal file
0
app/apps/mini_tools/utils/__init__.py
Normal file
85
app/apps/mini_tools/utils/exchange_rate_map.py
Normal file
85
app/apps/mini_tools/utils/exchange_rate_map.py
Normal file
@@ -0,0 +1,85 @@
|
||||
from typing import Dict
|
||||
|
||||
from django.db.models import Func, F, Value
|
||||
from django.db.models.functions import Extract
|
||||
from django.utils import timezone
|
||||
|
||||
from apps.currencies.models import ExchangeRate
|
||||
|
||||
|
||||
def get_currency_exchange_map(date=None) -> Dict[str, dict]:
|
||||
"""
|
||||
Creates a nested dictionary of exchange rates and currency information.
|
||||
|
||||
Returns:
|
||||
{
|
||||
'BTC': {
|
||||
'decimal_places': 8,
|
||||
'prefix': '₿',
|
||||
'suffix': '',
|
||||
'rates': {'USD': Decimal('34000.00'), 'EUR': Decimal('31000.00')}
|
||||
},
|
||||
'USD': {
|
||||
'decimal_places': 2,
|
||||
'prefix': '$',
|
||||
'suffix': '',
|
||||
'rates': {'BTC': Decimal('0.0000294'), 'EUR': Decimal('0.91')}
|
||||
},
|
||||
...
|
||||
}
|
||||
"""
|
||||
if date is None:
|
||||
date = timezone.localtime(timezone.now())
|
||||
|
||||
# Get all exchange rates for the closest date
|
||||
exchange_rates = (
|
||||
ExchangeRate.objects.select_related(
|
||||
"from_currency", "to_currency"
|
||||
) # Optimize currency queries
|
||||
.annotate(
|
||||
date_diff=Func(Extract(F("date") - Value(date), "epoch"), function="ABS"),
|
||||
effective_rate=F("rate"),
|
||||
)
|
||||
.order_by("from_currency", "to_currency", "date_diff")
|
||||
.distinct("from_currency", "to_currency")
|
||||
)
|
||||
|
||||
# Initialize the result dictionary
|
||||
rate_map = {}
|
||||
|
||||
# Build the exchange rate mapping with currency info
|
||||
for rate in exchange_rates:
|
||||
# Add from_currency info if not exists
|
||||
if rate.from_currency.name not in rate_map:
|
||||
rate_map[rate.from_currency.name] = {
|
||||
"decimal_places": rate.from_currency.decimal_places,
|
||||
"prefix": rate.from_currency.prefix,
|
||||
"suffix": rate.from_currency.suffix,
|
||||
"rates": {},
|
||||
}
|
||||
|
||||
# Add to_currency info if not exists
|
||||
if rate.to_currency.name not in rate_map:
|
||||
rate_map[rate.to_currency.name] = {
|
||||
"decimal_places": rate.to_currency.decimal_places,
|
||||
"prefix": rate.to_currency.prefix,
|
||||
"suffix": rate.to_currency.suffix,
|
||||
"rates": {},
|
||||
}
|
||||
|
||||
# Add direct rate
|
||||
rate_map[rate.from_currency.name]["rates"][rate.to_currency.name] = {
|
||||
"rate": rate.rate,
|
||||
"decimal_places": rate.to_currency.decimal_places,
|
||||
"prefix": rate.to_currency.prefix,
|
||||
"suffix": rate.to_currency.suffix,
|
||||
}
|
||||
# Add inverse rate
|
||||
rate_map[rate.to_currency.name]["rates"][rate.from_currency.name] = {
|
||||
"rate": 1 / rate.rate,
|
||||
"decimal_places": rate.from_currency.decimal_places,
|
||||
"prefix": rate.from_currency.prefix,
|
||||
"suffix": rate.from_currency.suffix,
|
||||
}
|
||||
|
||||
return rate_map
|
||||
@@ -5,6 +5,7 @@ from apps.common.widgets.decimal import convert_to_decimal
|
||||
from apps.currencies.models import Currency
|
||||
from apps.currencies.utils.convert import convert
|
||||
from apps.mini_tools.forms import CurrencyConverterForm
|
||||
from apps.mini_tools.utils.exchange_rate_map import get_currency_exchange_map
|
||||
|
||||
|
||||
@login_required
|
||||
@@ -14,11 +15,13 @@ def unit_price_calculator(request):
|
||||
|
||||
@login_required
|
||||
def currency_converter(request):
|
||||
rate_map = get_currency_exchange_map()
|
||||
|
||||
form = CurrencyConverterForm()
|
||||
return render(
|
||||
request,
|
||||
"mini_tools/currency_converter/currency_converter.html",
|
||||
context={"form": form},
|
||||
context={"form": form, "rate_map": rate_map},
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-19 13:44-0300\n"
|
||||
"POT-Creation-Date: 2025-02-19 23:05-0300\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"
|
||||
@@ -773,15 +773,15 @@ msgstr ""
|
||||
msgid "Please upload either a ZIP file or at least one CSV file"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/views.py:169
|
||||
#: apps/export_app/views.py:168
|
||||
msgid "You have to select at least one export"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/views.py:187
|
||||
#: apps/export_app/views.py:186
|
||||
msgid "Data restored successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/views.py:199
|
||||
#: apps/export_app/views.py:198
|
||||
msgid ""
|
||||
"There was an error restoring your data. Check the logs for more details."
|
||||
msgstr ""
|
||||
@@ -865,17 +865,17 @@ msgstr ""
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:70
|
||||
#: apps/insights/utils/category_explorer.py:153
|
||||
#: apps/insights/utils/category_explorer.py:66
|
||||
#: apps/insights/utils/category_explorer.py:145
|
||||
#: templates/cotton/ui/percentage_distribution.html:10
|
||||
#: templates/cotton/ui/percentage_distribution.html:14
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:60
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:60
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:72
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:72
|
||||
msgid "Current Income"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:74
|
||||
#: apps/insights/utils/category_explorer.py:157
|
||||
#: apps/insights/utils/category_explorer.py:70
|
||||
#: apps/insights/utils/category_explorer.py:149
|
||||
#: templates/cotton/ui/percentage_distribution.html:24
|
||||
#: templates/cotton/ui/percentage_distribution.html:28
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:66
|
||||
@@ -883,21 +883,21 @@ msgstr ""
|
||||
msgid "Current Expenses"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:78
|
||||
#: apps/insights/utils/category_explorer.py:161
|
||||
#: apps/insights/utils/category_explorer.py:74
|
||||
#: apps/insights/utils/category_explorer.py:153
|
||||
#: templates/cotton/ui/percentage_distribution.html:3
|
||||
#: templates/cotton/ui/percentage_distribution.html:7
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:72
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:72
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:78
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:78
|
||||
msgid "Projected Income"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:82
|
||||
#: apps/insights/utils/category_explorer.py:165
|
||||
#: apps/insights/utils/category_explorer.py:78
|
||||
#: apps/insights/utils/category_explorer.py:157
|
||||
#: templates/cotton/ui/percentage_distribution.html:17
|
||||
#: templates/cotton/ui/percentage_distribution.html:21
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:78
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:78
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:60
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:60
|
||||
msgid "Projected Expenses"
|
||||
msgstr ""
|
||||
|
||||
@@ -2392,8 +2392,8 @@ msgstr ""
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:99
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:91
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:100
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:92
|
||||
#: templates/monthly_overview/fragments/monthly_account_summary.html:14
|
||||
#: templates/monthly_overview/fragments/monthly_currency_summary.html:13
|
||||
#: templates/transactions/fragments/all_account_summary.html:14
|
||||
@@ -2413,6 +2413,18 @@ msgstr ""
|
||||
msgid "Income/Expense by Currency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/late_transactions.html:15
|
||||
msgid "All good!"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/late_transactions.html:16
|
||||
msgid "No late transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/latest_transactions.html:14
|
||||
msgid "No recent transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/sankey.html:93
|
||||
msgid "From"
|
||||
msgstr ""
|
||||
@@ -2443,18 +2455,26 @@ msgstr ""
|
||||
msgid "Date Range"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/pages/index.html:82
|
||||
#: templates/insights/pages/index.html:81
|
||||
msgid "Account Flow"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/pages/index.html:89
|
||||
#: templates/insights/pages/index.html:88
|
||||
msgid "Currency Flow"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/pages/index.html:96
|
||||
#: templates/insights/pages/index.html:95
|
||||
msgid "Category Explorer"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/pages/index.html:102
|
||||
msgid "Late Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/pages/index.html:108
|
||||
msgid "Latest Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/installment_plans/fragments/add.html:5
|
||||
msgid "Add installment plan"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-19 13:44-0300\n"
|
||||
"PO-Revision-Date: 2025-02-12 06:58+0100\n"
|
||||
"POT-Creation-Date: 2025-02-19 23:05-0300\n"
|
||||
"PO-Revision-Date: 2025-02-22 15:03+0100\n"
|
||||
"Last-Translator: Dimitri Decrock <dimitri@fam-decrock.eu>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: nl\n"
|
||||
@@ -582,10 +582,8 @@ msgid "Services queued successfully"
|
||||
msgstr "Diensten succesvol in de wachtrij geplaatst"
|
||||
|
||||
#: apps/dca/forms.py:65 apps/dca/forms.py:164
|
||||
#, fuzzy
|
||||
#| msgid "Deleted transactions"
|
||||
msgid "Create transaction"
|
||||
msgstr "Verwijderde verrichtingen"
|
||||
msgstr "Maak verrichtingen"
|
||||
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:267
|
||||
msgid "From Account"
|
||||
@@ -602,31 +600,29 @@ msgstr "Uitgave Transactie"
|
||||
#: apps/dca/forms.py:120 apps/dca/forms.py:130
|
||||
msgid "Type to search for a transaction to link to this entry"
|
||||
msgstr ""
|
||||
"Type om een transactie te zoeken die aan dit item moet worden gekoppeld"
|
||||
|
||||
#: apps/dca/forms.py:126 apps/dca/models.py:177
|
||||
msgid "Income Transaction"
|
||||
msgstr "Ontvangsten Transactie"
|
||||
|
||||
#: apps/dca/forms.py:210
|
||||
#, fuzzy
|
||||
#| msgid "Edit transaction"
|
||||
msgid "Link transaction"
|
||||
msgstr "Bewerk verrichting"
|
||||
msgstr "Koppel verrichting"
|
||||
|
||||
#: apps/dca/forms.py:279 apps/dca/forms.py:280 apps/dca/forms.py:285
|
||||
#: apps/dca/forms.py:289
|
||||
msgid "You must provide an account."
|
||||
msgstr ""
|
||||
msgstr "Je moet een account opgeven."
|
||||
|
||||
#: apps/dca/forms.py:294 apps/transactions/forms.py:414
|
||||
msgid "From and To accounts must be different."
|
||||
msgstr "Van en Naar rekening moeten verschillend zijn."
|
||||
|
||||
#: apps/dca/forms.py:308
|
||||
#, fuzzy, python-format
|
||||
#| msgid "DCA Strategies"
|
||||
#, python-format
|
||||
msgid "DCA for %(strategy_name)s"
|
||||
msgstr "DCA Strategieën"
|
||||
msgstr "DCA voor %(strategy_name)s"
|
||||
|
||||
#: apps/dca/models.py:17
|
||||
msgid "Target Currency"
|
||||
@@ -749,7 +745,7 @@ msgstr "Regels"
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/cotton/transaction/item.html:56
|
||||
msgid "DCA"
|
||||
msgstr ""
|
||||
msgstr "DCA"
|
||||
|
||||
#: apps/export_app/forms.py:86 apps/export_app/forms.py:147
|
||||
#: templates/import_app/fragments/profiles/list.html:5
|
||||
@@ -759,18 +755,16 @@ msgstr "Profielen importeren"
|
||||
|
||||
#: apps/export_app/forms.py:112 templates/export_app/fragments/export.html:5
|
||||
#: templates/export_app/pages/index.html:15
|
||||
#, fuzzy
|
||||
#| msgid "Import"
|
||||
msgid "Export"
|
||||
msgstr "Importeer"
|
||||
msgstr "Exporteer"
|
||||
|
||||
#: apps/export_app/forms.py:121
|
||||
msgid "Import a ZIP file exported from WYGIWYH"
|
||||
msgstr ""
|
||||
msgstr "Importeer een ZIP-bestand geëxporteerd vanuit WYGIWYH"
|
||||
|
||||
#: apps/export_app/forms.py:122
|
||||
msgid "ZIP File"
|
||||
msgstr ""
|
||||
msgstr "ZIP-bestand"
|
||||
|
||||
#: apps/export_app/forms.py:138 apps/rules/models.py:16
|
||||
msgid "Transaction rules"
|
||||
@@ -793,22 +787,22 @@ msgstr "Herstel"
|
||||
|
||||
#: apps/export_app/forms.py:187
|
||||
msgid "Please upload either a ZIP file or at least one CSV file"
|
||||
msgstr ""
|
||||
msgstr "Upload een ZIP-bestand of ten minste één CSV-bestand"
|
||||
|
||||
#: apps/export_app/views.py:169
|
||||
#: apps/export_app/views.py:168
|
||||
msgid "You have to select at least one export"
|
||||
msgstr ""
|
||||
msgstr "U moet ten minste één export selecteren"
|
||||
|
||||
#: apps/export_app/views.py:187
|
||||
#, fuzzy
|
||||
#| msgid "Tag updated successfully"
|
||||
#: apps/export_app/views.py:186
|
||||
msgid "Data restored successfully"
|
||||
msgstr "Label succesvol bijgewerkt"
|
||||
msgstr "Gegevens succesvol hersteld"
|
||||
|
||||
#: apps/export_app/views.py:199
|
||||
#: apps/export_app/views.py:198
|
||||
msgid ""
|
||||
"There was an error restoring your data. Check the logs for more details."
|
||||
msgstr ""
|
||||
"Er is een fout opgetreden bij het herstellen van uw gegevens. Controleer de "
|
||||
"logboeken voor meer details."
|
||||
|
||||
#: apps/import_app/forms.py:49
|
||||
msgid "Select a file"
|
||||
@@ -886,22 +880,20 @@ msgstr "Run met succes verwijderd"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#, fuzzy
|
||||
#| msgid "Categories"
|
||||
msgid "Uncategorized"
|
||||
msgstr "Categorieën"
|
||||
msgstr "Ongecategoriseerd"
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:70
|
||||
#: apps/insights/utils/category_explorer.py:153
|
||||
#: apps/insights/utils/category_explorer.py:66
|
||||
#: apps/insights/utils/category_explorer.py:145
|
||||
#: templates/cotton/ui/percentage_distribution.html:10
|
||||
#: templates/cotton/ui/percentage_distribution.html:14
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:60
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:60
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:72
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:72
|
||||
msgid "Current Income"
|
||||
msgstr "Huidige inkomsten"
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:74
|
||||
#: apps/insights/utils/category_explorer.py:157
|
||||
#: apps/insights/utils/category_explorer.py:70
|
||||
#: apps/insights/utils/category_explorer.py:149
|
||||
#: templates/cotton/ui/percentage_distribution.html:24
|
||||
#: templates/cotton/ui/percentage_distribution.html:28
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:66
|
||||
@@ -909,30 +901,28 @@ msgstr "Huidige inkomsten"
|
||||
msgid "Current Expenses"
|
||||
msgstr "Huidige uitgaven"
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:78
|
||||
#: apps/insights/utils/category_explorer.py:161
|
||||
#: apps/insights/utils/category_explorer.py:74
|
||||
#: apps/insights/utils/category_explorer.py:153
|
||||
#: templates/cotton/ui/percentage_distribution.html:3
|
||||
#: templates/cotton/ui/percentage_distribution.html:7
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:72
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:72
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:78
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:78
|
||||
msgid "Projected Income"
|
||||
msgstr "Verwachte inkomsten"
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:82
|
||||
#: apps/insights/utils/category_explorer.py:165
|
||||
#: apps/insights/utils/category_explorer.py:78
|
||||
#: apps/insights/utils/category_explorer.py:157
|
||||
#: templates/cotton/ui/percentage_distribution.html:17
|
||||
#: templates/cotton/ui/percentage_distribution.html:21
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:78
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:78
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:60
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:60
|
||||
msgid "Projected Expenses"
|
||||
msgstr "Verwachte uitgaven"
|
||||
|
||||
#: apps/insights/utils/sankey.py:133 apps/insights/utils/sankey.py:134
|
||||
#: apps/insights/utils/sankey.py:263 apps/insights/utils/sankey.py:264
|
||||
#, fuzzy
|
||||
#| msgid "Save"
|
||||
msgid "Saved"
|
||||
msgstr "Opslaan"
|
||||
msgstr "Opgeslagen"
|
||||
|
||||
#: apps/rules/forms.py:20
|
||||
msgid "Run on creation"
|
||||
@@ -1085,13 +1075,12 @@ msgid "Filter"
|
||||
msgstr "Filter"
|
||||
|
||||
#: apps/rules/models.py:85
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Generic expression to enable or disable execution. Should evaluate to True "
|
||||
"or False"
|
||||
msgstr ""
|
||||
"Generieke expressie om uitvoering in of uit te schakelen. Moet evalueren "
|
||||
"naar True of False"
|
||||
"naar Waar of Onwaar"
|
||||
|
||||
#: apps/rules/models.py:289
|
||||
msgid "Update or create transaction action"
|
||||
@@ -1296,16 +1285,12 @@ msgid "No tags"
|
||||
msgstr "Geen labels"
|
||||
|
||||
#: apps/transactions/models.py:324
|
||||
#, fuzzy
|
||||
#| msgid "No categories"
|
||||
msgid "No category"
|
||||
msgstr "Geen categorieën"
|
||||
msgstr "Geen categorie"
|
||||
|
||||
#: apps/transactions/models.py:326
|
||||
#, fuzzy
|
||||
#| msgid "Description"
|
||||
msgid "No description"
|
||||
msgstr "Beschrijving"
|
||||
msgstr "Geen Beschrijving"
|
||||
|
||||
#: apps/transactions/models.py:332
|
||||
msgid "Yearly"
|
||||
@@ -2255,7 +2240,7 @@ msgstr "Geen diensten ingesteld"
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:136
|
||||
msgid "Export and Restore"
|
||||
msgstr ""
|
||||
msgstr "Exporteren en Herstellen"
|
||||
|
||||
#: templates/import_app/fragments/profiles/add.html:6
|
||||
msgid "Add new import profile"
|
||||
@@ -2360,7 +2345,7 @@ msgstr "Huidige"
|
||||
|
||||
#: templates/includes/navbar.html:50
|
||||
msgid "Insights"
|
||||
msgstr ""
|
||||
msgstr "Inzichten"
|
||||
|
||||
#: templates/includes/navbar.html:66
|
||||
msgid "Trash Can"
|
||||
@@ -2436,8 +2421,8 @@ msgstr "Annuleer"
|
||||
msgid "Confirm"
|
||||
msgstr "Bevestig"
|
||||
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:99
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:91
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:100
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:92
|
||||
#: templates/monthly_overview/fragments/monthly_account_summary.html:14
|
||||
#: templates/monthly_overview/fragments/monthly_currency_summary.html:13
|
||||
#: templates/transactions/fragments/all_account_summary.html:14
|
||||
@@ -2451,27 +2436,35 @@ msgstr "Geen informatie om weer te geven"
|
||||
|
||||
#: templates/insights/fragments/category_explorer/index.html:14
|
||||
msgid "Income/Expense by Account"
|
||||
msgstr ""
|
||||
msgstr "Inkomsten/uitgaven per rekening"
|
||||
|
||||
#: templates/insights/fragments/category_explorer/index.html:26
|
||||
#, fuzzy
|
||||
#| msgid "Exchange Currency"
|
||||
msgid "Income/Expense by Currency"
|
||||
msgstr "Eenheid Wisselgeld"
|
||||
msgstr "Inkomsten/uitgaven per Munteenheid"
|
||||
|
||||
#: templates/insights/fragments/late_transactions.html:15
|
||||
msgid "All good!"
|
||||
msgstr "Allemaal goed!"
|
||||
|
||||
#: templates/insights/fragments/late_transactions.html:16
|
||||
msgid "No late transactions"
|
||||
msgstr "Geen betalingsachterstanden"
|
||||
|
||||
#: templates/insights/fragments/latest_transactions.html:14
|
||||
msgid "No recent transactions"
|
||||
msgstr "Geen recente betalingen"
|
||||
|
||||
#: templates/insights/fragments/sankey.html:93
|
||||
msgid "From"
|
||||
msgstr ""
|
||||
msgstr "Van"
|
||||
|
||||
#: templates/insights/fragments/sankey.html:96
|
||||
msgid "Percentage"
|
||||
msgstr ""
|
||||
msgstr "Percentage"
|
||||
|
||||
#: templates/insights/pages/index.html:35
|
||||
#, fuzzy
|
||||
#| msgid "Monthly"
|
||||
msgid "Month"
|
||||
msgstr "Maandelijks"
|
||||
msgstr "Maand"
|
||||
|
||||
#: templates/insights/pages/index.html:38
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:61
|
||||
@@ -2480,38 +2473,36 @@ msgid "Year"
|
||||
msgstr "Jaar"
|
||||
|
||||
#: templates/insights/pages/index.html:43
|
||||
#, fuzzy
|
||||
#| msgid "Unchanged"
|
||||
msgid "Month Range"
|
||||
msgstr "Ongewijzigd"
|
||||
msgstr "Maand Bereik"
|
||||
|
||||
#: templates/insights/pages/index.html:48
|
||||
msgid "Year Range"
|
||||
msgstr ""
|
||||
msgstr "Jaar Bereik"
|
||||
|
||||
#: templates/insights/pages/index.html:53
|
||||
#, fuzzy
|
||||
#| msgid "Date and Time"
|
||||
msgid "Date Range"
|
||||
msgstr "Datum en Tijd"
|
||||
msgstr "Datum Bereik"
|
||||
|
||||
#: templates/insights/pages/index.html:82
|
||||
#, fuzzy
|
||||
#| msgid "Account"
|
||||
#: templates/insights/pages/index.html:81
|
||||
msgid "Account Flow"
|
||||
msgstr "Rekening"
|
||||
msgstr "Rekeningstroom"
|
||||
|
||||
#: templates/insights/pages/index.html:89
|
||||
#, fuzzy
|
||||
#| msgid "Currency Code"
|
||||
#: templates/insights/pages/index.html:88
|
||||
msgid "Currency Flow"
|
||||
msgstr "Munteenheids Code"
|
||||
msgstr "Geldstroom"
|
||||
|
||||
#: templates/insights/pages/index.html:96
|
||||
#, fuzzy
|
||||
#| msgid "Category name"
|
||||
#: templates/insights/pages/index.html:95
|
||||
msgid "Category Explorer"
|
||||
msgstr "Naam van categorie"
|
||||
msgstr "Categorie Verkenner"
|
||||
|
||||
#: templates/insights/pages/index.html:102
|
||||
msgid "Late Transactions"
|
||||
msgstr "Betalingsachterstanden"
|
||||
|
||||
#: templates/insights/pages/index.html:108
|
||||
msgid "Latest Transactions"
|
||||
msgstr "Laatste Verrichtingen"
|
||||
|
||||
#: templates/installment_plans/fragments/add.html:5
|
||||
msgid "Add installment plan"
|
||||
|
||||
@@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-02-19 13:44-0300\n"
|
||||
"PO-Revision-Date: 2025-02-19 13:50-0300\n"
|
||||
"POT-Creation-Date: 2025-02-19 23:05-0300\n"
|
||||
"PO-Revision-Date: 2025-02-19 23:06-0300\n"
|
||||
"Last-Translator: Herculino Trotta\n"
|
||||
"Language-Team: \n"
|
||||
"Language: pt_BR\n"
|
||||
@@ -774,7 +774,7 @@ msgstr "Ação de editar de transação"
|
||||
|
||||
#: apps/export_app/forms.py:143 apps/rules/models.py:290
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Ações de atualizar ou criar transação "
|
||||
msgstr "Ações de atualizar ou criar transação"
|
||||
|
||||
#: apps/export_app/forms.py:176 templates/cotton/transaction/item.html:158
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
@@ -787,15 +787,15 @@ msgstr "Restaurar"
|
||||
msgid "Please upload either a ZIP file or at least one CSV file"
|
||||
msgstr "Carregue um arquivo ZIP ou pelo menos um arquivo CSV"
|
||||
|
||||
#: apps/export_app/views.py:169
|
||||
#: apps/export_app/views.py:168
|
||||
msgid "You have to select at least one export"
|
||||
msgstr "É necessário selecionar pelo menos uma exportação"
|
||||
|
||||
#: apps/export_app/views.py:187
|
||||
#: apps/export_app/views.py:186
|
||||
msgid "Data restored successfully"
|
||||
msgstr "Dados restaurados com sucesso"
|
||||
|
||||
#: apps/export_app/views.py:199
|
||||
#: apps/export_app/views.py:198
|
||||
msgid ""
|
||||
"There was an error restoring your data. Check the logs for more details."
|
||||
msgstr ""
|
||||
@@ -881,17 +881,17 @@ msgstr "Importação apagada com sucesso"
|
||||
msgid "Uncategorized"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:70
|
||||
#: apps/insights/utils/category_explorer.py:153
|
||||
#: apps/insights/utils/category_explorer.py:66
|
||||
#: apps/insights/utils/category_explorer.py:145
|
||||
#: templates/cotton/ui/percentage_distribution.html:10
|
||||
#: templates/cotton/ui/percentage_distribution.html:14
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:60
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:60
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:72
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:72
|
||||
msgid "Current Income"
|
||||
msgstr "Renda Atual"
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:74
|
||||
#: apps/insights/utils/category_explorer.py:157
|
||||
#: apps/insights/utils/category_explorer.py:70
|
||||
#: apps/insights/utils/category_explorer.py:149
|
||||
#: templates/cotton/ui/percentage_distribution.html:24
|
||||
#: templates/cotton/ui/percentage_distribution.html:28
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:66
|
||||
@@ -899,21 +899,21 @@ msgstr "Renda Atual"
|
||||
msgid "Current Expenses"
|
||||
msgstr "Despesas Atuais"
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:78
|
||||
#: apps/insights/utils/category_explorer.py:161
|
||||
#: apps/insights/utils/category_explorer.py:74
|
||||
#: apps/insights/utils/category_explorer.py:153
|
||||
#: templates/cotton/ui/percentage_distribution.html:3
|
||||
#: templates/cotton/ui/percentage_distribution.html:7
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:72
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:72
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:78
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:78
|
||||
msgid "Projected Income"
|
||||
msgstr "Renda Prevista"
|
||||
|
||||
#: apps/insights/utils/category_explorer.py:82
|
||||
#: apps/insights/utils/category_explorer.py:165
|
||||
#: apps/insights/utils/category_explorer.py:78
|
||||
#: apps/insights/utils/category_explorer.py:157
|
||||
#: templates/cotton/ui/percentage_distribution.html:17
|
||||
#: templates/cotton/ui/percentage_distribution.html:21
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:78
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:78
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:60
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:60
|
||||
msgid "Projected Expenses"
|
||||
msgstr "Despesas Previstas"
|
||||
|
||||
@@ -1082,7 +1082,7 @@ msgstr ""
|
||||
|
||||
#: apps/rules/models.py:289
|
||||
msgid "Update or create transaction action"
|
||||
msgstr " Ação de atualizar ou criar transação"
|
||||
msgstr "Ação de atualizar ou criar transação"
|
||||
|
||||
#: apps/rules/views.py:52
|
||||
msgid "Rule deactivated successfully"
|
||||
@@ -2419,8 +2419,8 @@ msgstr "Cancelar"
|
||||
msgid "Confirm"
|
||||
msgstr "Confirmar"
|
||||
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:99
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:91
|
||||
#: templates/insights/fragments/category_explorer/charts/account.html:100
|
||||
#: templates/insights/fragments/category_explorer/charts/currency.html:92
|
||||
#: templates/monthly_overview/fragments/monthly_account_summary.html:14
|
||||
#: templates/monthly_overview/fragments/monthly_currency_summary.html:13
|
||||
#: templates/transactions/fragments/all_account_summary.html:14
|
||||
@@ -2440,6 +2440,18 @@ msgstr "Gasto/Despesa por Conta"
|
||||
msgid "Income/Expense by Currency"
|
||||
msgstr "Gasto/Despesa por Moeda"
|
||||
|
||||
#: templates/insights/fragments/late_transactions.html:15
|
||||
msgid "All good!"
|
||||
msgstr "Tudo certo!"
|
||||
|
||||
#: templates/insights/fragments/late_transactions.html:16
|
||||
msgid "No late transactions"
|
||||
msgstr "Nenhuma transação atrasada"
|
||||
|
||||
#: templates/insights/fragments/latest_transactions.html:14
|
||||
msgid "No recent transactions"
|
||||
msgstr "Nenhuma transação recente"
|
||||
|
||||
#: templates/insights/fragments/sankey.html:93
|
||||
msgid "From"
|
||||
msgstr "De"
|
||||
@@ -2470,18 +2482,26 @@ msgstr "Intervalo de Ano"
|
||||
msgid "Date Range"
|
||||
msgstr "Intervalo de Data"
|
||||
|
||||
#: templates/insights/pages/index.html:82
|
||||
#: templates/insights/pages/index.html:81
|
||||
msgid "Account Flow"
|
||||
msgstr "Fluxo de Conta"
|
||||
|
||||
#: templates/insights/pages/index.html:89
|
||||
#: templates/insights/pages/index.html:88
|
||||
msgid "Currency Flow"
|
||||
msgstr "Fluxo de Moeda"
|
||||
|
||||
#: templates/insights/pages/index.html:96
|
||||
#: templates/insights/pages/index.html:95
|
||||
msgid "Category Explorer"
|
||||
msgstr "Explorador de Categoria"
|
||||
|
||||
#: templates/insights/pages/index.html:102
|
||||
msgid "Late Transactions"
|
||||
msgstr "Transações Atrasadas"
|
||||
|
||||
#: templates/insights/pages/index.html:108
|
||||
msgid "Latest Transactions"
|
||||
msgstr "Últimas Transações"
|
||||
|
||||
#: templates/installment_plans/fragments/add.html:5
|
||||
msgid "Add installment plan"
|
||||
msgstr "Adicionar parcelamento"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<div class="row {% if not remove_padding %}p-5{% endif %}">
|
||||
<div class="col {% if not remove_padding %}p-5{% endif %}">
|
||||
<div class="text-center">
|
||||
<i class="fa-solid fa-circle-xmark tw-text-6xl"></i>
|
||||
<i class="{% if icon %}{{ icon }}{% else %}fa-solid fa-circle-xmark{% endif %} tw-text-6xl"></i>
|
||||
<p class="lead mt-4 mb-0">{{ title }}</p>
|
||||
<p class="tw-text-gray-500">{{ subtitle }}</p>
|
||||
</div>
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
_="on mouseover remove .tw-invisible from the first .transaction-actions in me end
|
||||
on mouseout add .tw-invisible to the first .transaction-actions in me end">
|
||||
<div class="row font-monospace tw-text-sm align-items-center">
|
||||
<div class="col-lg-1 col-12 d-flex align-items-center tw-text-2xl lg:tw-text-xl text-lg-center text-center">
|
||||
<div class="col-lg-auto col-12 d-flex align-items-center tw-text-2xl lg:tw-text-xl text-lg-center text-center p-0 ps-1">
|
||||
{% if not transaction.deleted %}
|
||||
<a class="text-decoration-none my-lg-3 mx-lg-3 mx-2 my-2 tw-text-gray-500"
|
||||
<a class="text-decoration-none p-3 tw-text-gray-500"
|
||||
title="{% if transaction.is_paid %}{% trans 'Paid' %}{% else %}{% trans 'Projected' %}{% endif %}"
|
||||
role="button"
|
||||
hx-get="{% url 'transaction_pay' transaction_id=transaction.id %}"
|
||||
@@ -27,14 +27,14 @@
|
||||
class="fa-regular fa-circle"></i>{% endif %}
|
||||
</a>
|
||||
{% else %}
|
||||
<div class="text-decoration-none my-lg-3 mx-lg-3 mx-2 my-2 tw-text-gray-500"
|
||||
<div class="text-decoration-none p-3 tw-text-gray-500"
|
||||
title="{% if transaction.is_paid %}{% trans 'Paid' %}{% else %}{% trans 'Projected' %}{% endif %}">
|
||||
{% if transaction.is_paid %}<i class="fa-regular fa-circle-check"></i>{% else %}<i
|
||||
class="fa-regular fa-circle"></i>{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-lg-8 col-12">
|
||||
<div class="col-lg col-12">
|
||||
{# Date#}
|
||||
<div class="row mb-2 mb-lg-1 tw-text-gray-400">
|
||||
<div class="col-auto pe-1"><i class="fa-solid fa-calendar fa-fw me-1 fa-xs"></i></div>
|
||||
@@ -92,7 +92,7 @@
|
||||
{% endwith %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-12 text-lg-end align-self-end">
|
||||
<div class="col-lg-auto col-12 text-lg-end align-self-end">
|
||||
<div class="main-amount mb-2 mb-lg-0">
|
||||
<c-amount.display
|
||||
:amount="transaction.amount"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<div class="card tw-relative h-100 shadow">
|
||||
<div class="tw-absolute tw-h-8 tw-w-8 tw-right-2 tw-top-2 tw-bg-{{ color }}-300 tw-text-{{ color }}-800 text-center align-items-center d-flex justify-content-center rounded-2">
|
||||
<i class="{{ icon }}"></i>
|
||||
{% 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 %}{% include 'includes/help_icon.html' with content=help_text %}{% endif %}</h5>
|
||||
{{ slot }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
backgroundColor: '#4dde8080', // Added transparency
|
||||
stack: 'stack0'
|
||||
},
|
||||
|
||||
|
||||
]
|
||||
},
|
||||
options: chartOptions
|
||||
|
||||
18
app/templates/insights/fragments/late_transactions.html
Normal file
18
app/templates/insights/fragments/late_transactions.html
Normal file
@@ -0,0 +1,18 @@
|
||||
{% load i18n %}
|
||||
|
||||
|
||||
<div hx-get="{% url 'insights_late_transactions' %}" hx-trigger="updated from:window" class="show-loading"
|
||||
id="transactions-list" hx-swap="outerHTML">
|
||||
{% if transactions %}
|
||||
{% for transaction in transactions %}
|
||||
<c-transaction.item :transaction="transaction"></c-transaction.item>
|
||||
{% endfor %}
|
||||
{# Floating bar #}
|
||||
<c-ui.transactions-action-bar></c-ui.transactions-action-bar>
|
||||
{% else %}
|
||||
<c-msg.empty
|
||||
icon="fa-regular fa-hourglass"
|
||||
title="{% translate 'All good!' %}"
|
||||
subtitle="{% translate "No late transactions" %}"></c-msg.empty>
|
||||
{% endif %}
|
||||
</div>
|
||||
16
app/templates/insights/fragments/latest_transactions.html
Normal file
16
app/templates/insights/fragments/latest_transactions.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{% load i18n %}
|
||||
|
||||
|
||||
<div hx-get="{% url 'insights_late_transactions' %}" hx-trigger="updated from:window" class="show-loading"
|
||||
id="transactions-list" hx-swap="outerHTML">
|
||||
{% if transactions %}
|
||||
{% for transaction in transactions %}
|
||||
<c-transaction.item :transaction="transaction"></c-transaction.item>
|
||||
{% endfor %}
|
||||
{# Floating bar #}
|
||||
<c-ui.transactions-action-bar></c-ui.transactions-action-bar>
|
||||
{% else %}
|
||||
<c-msg.empty
|
||||
title="{% translate 'No recent transactions' %}"></c-msg.empty>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -72,7 +72,6 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<hr class="mt-0">
|
||||
<div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist"
|
||||
aria-orientation="vertical">
|
||||
<button class="nav-link" id="v-pills-tab" data-bs-toggle="pill" data-bs-target="#v-pills-content"
|
||||
@@ -95,6 +94,19 @@
|
||||
hx-indicator="#tab-content"
|
||||
hx-target="#tab-content">{% trans 'Category Explorer' %}
|
||||
</button>
|
||||
<hr>
|
||||
<button class="nav-link" id="v-pills-tab" data-bs-toggle="pill" data-bs-target="#v-pills-content"
|
||||
type="button" role="tab" aria-controls="v-pills-content" aria-selected="false"
|
||||
hx-get="{% url 'insights_late_transactions' %}"
|
||||
hx-indicator="#tab-content"
|
||||
hx-target="#tab-content">{% trans 'Late Transactions' %}
|
||||
</button>
|
||||
<button class="nav-link" id="v-pills-tab" data-bs-toggle="pill" data-bs-target="#v-pills-content"
|
||||
type="button" role="tab" aria-controls="v-pills-content" aria-selected="false"
|
||||
hx-get="{% url 'insights_latest_transactions' %}"
|
||||
hx-indicator="#tab-content"
|
||||
hx-target="#tab-content">{% trans 'Latest Transactions' %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="tw-cursor-pointer text-primary text-end"
|
||||
<div class="tw-cursor-pointer text-primary text-end"
|
||||
_="on click
|
||||
set from_value to #id_from_currency's value
|
||||
set to_value to #id_to_currency's value
|
||||
@@ -58,5 +58,39 @@
|
||||
<i class="fa-solid fa-rotate me-2"></i><span>{% trans 'Invert' %}</span>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-4">
|
||||
{% for currency, data in rate_map.items %}
|
||||
<div class="col">
|
||||
<c-ui.info-card color="yellow" title="{{ currency }}">
|
||||
{% for rate in data.rates.values %}
|
||||
<div class="d-flex justify-content-between align-items-baseline mt-2">
|
||||
<div class="text-end font-monospace">
|
||||
<div class="tw-text-gray-400">
|
||||
{# <c-amount.display#}
|
||||
{# :amount="1"#}
|
||||
{# :prefix="data.prefix"#}
|
||||
{# :suffix="data.suffix"#}
|
||||
{# :decimal_places="data.decimal_places"></c-amount.display>#}
|
||||
</div>
|
||||
</div>
|
||||
<div class="dotted-line flex-grow-1"></div>
|
||||
{% if currency.income_projected != 0 %}
|
||||
<div class="text-end font-monospace tw-text-green-400">
|
||||
<c-amount.display
|
||||
:amount="rate.rate"
|
||||
:prefix="rate.prefix"
|
||||
:suffix="rate.suffix"
|
||||
:decimal_places="rate.decimal_places"></c-amount.display>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="text-end font-monospace">-</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</c-ui.info-card>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user