Merge pull request #137

automatic_exchange_rate
This commit is contained in:
Herculino Trotta
2025-02-06 21:48:29 -03:00
committed by GitHub
21 changed files with 1254 additions and 395 deletions

View File

@@ -6,7 +6,8 @@ from django.utils import timezone
from apps.currencies.exchange_rates.providers import ( from apps.currencies.exchange_rates.providers import (
SynthFinanceProvider, SynthFinanceProvider,
CoinGeckoProvider, CoinGeckoFreeProvider,
CoinGeckoProProvider,
) )
from apps.currencies.models import ExchangeRateService, ExchangeRate, Currency from apps.currencies.models import ExchangeRateService, ExchangeRate, Currency
@@ -16,7 +17,8 @@ logger = logging.getLogger(__name__)
# Map service types to provider classes # Map service types to provider classes
PROVIDER_MAPPING = { PROVIDER_MAPPING = {
"synth_finance": SynthFinanceProvider, "synth_finance": SynthFinanceProvider,
"coingecko": CoinGeckoProvider, "coingecko_free": CoinGeckoFreeProvider,
"coingecko_pro": CoinGeckoProProvider,
} }
@@ -31,7 +33,7 @@ class ExchangeRateFetcher:
If False, only fetches services that are due according to their interval. If False, only fetches services that are due according to their interval.
""" """
services = ExchangeRateService.objects.filter(is_active=True) services = ExchangeRateService.objects.filter(is_active=True)
current_time = timezone.now() current_time = timezone.now().replace(minute=0, second=0, microsecond=0)
for service in services: for service in services:
try: try:
@@ -47,9 +49,9 @@ class ExchangeRateFetcher:
continue continue
# Calculate when the next fetch should occur # Calculate when the next fetch should occur
next_fetch_due = service.last_fetch + timedelta( next_fetch_due = (
hours=service.fetch_interval_hours service.last_fetch + timedelta(hours=service.fetch_interval_hours)
) ).replace(minute=0, second=0, microsecond=0)
# Check if it's time for the next fetch # Check if it's time for the next fetch
if current_time >= next_fetch_due: if current_time >= next_fetch_due:

View File

@@ -77,8 +77,8 @@ class SynthFinanceProvider(ExchangeRateProvider):
return results return results
class CoinGeckoProvider(ExchangeRateProvider): class CoinGeckoFreeProvider(ExchangeRateProvider):
"""Implementation for CoinGecko API""" """Implementation for CoinGecko Free API"""
BASE_URL = "https://api.coingecko.com/api/v3" BASE_URL = "https://api.coingecko.com/api/v3"
rates_inverted = True rates_inverted = True
@@ -138,3 +138,15 @@ class CoinGeckoProvider(ExchangeRateProvider):
logger.error(f"Error fetching rates from CoinGecko API: {e}") logger.error(f"Error fetching rates from CoinGecko API: {e}")
return results return results
class CoinGeckoProProvider(CoinGeckoFreeProvider):
"""Implementation for CoinGecko Pro API"""
BASE_URL = "https://pro-api.coingecko.com/api/v3/simple/price"
rates_inverted = True
def __init__(self, api_key: str):
super().__init__(api_key)
self.session = requests.Session()
self.session.headers.update({"x-cg-pro-api-key": api_key})

View File

@@ -1,3 +1,4 @@
from crispy_bootstrap5.bootstrap5 import Switch
from crispy_forms.bootstrap import FormActions from crispy_forms.bootstrap import FormActions
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout from crispy_forms.layout import Layout
@@ -9,7 +10,7 @@ from apps.common.widgets.crispy.submit import NoClassSubmit
from apps.common.widgets.datepicker import AirDateTimePickerInput from apps.common.widgets.datepicker import AirDateTimePickerInput
from apps.common.widgets.decimal import ArbitraryDecimalDisplayNumberInput from apps.common.widgets.decimal import ArbitraryDecimalDisplayNumberInput
from apps.common.widgets.tom_select import TomSelect from apps.common.widgets.tom_select import TomSelect
from apps.currencies.models import Currency, ExchangeRate from apps.currencies.models import Currency, ExchangeRate, ExchangeRateService
class CurrencyForm(forms.ModelForm): class CurrencyForm(forms.ModelForm):
@@ -99,3 +100,50 @@ class ExchangeRateForm(forms.ModelForm):
), ),
), ),
) )
class ExchangeRateServiceForm(forms.ModelForm):
class Meta:
model = ExchangeRateService
fields = [
"name",
"service_type",
"is_active",
"api_key",
"fetch_interval_hours",
"target_currencies",
"target_accounts",
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.form_method = "post"
self.helper.layout = Layout(
"name",
"service_type",
Switch("is_active"),
"api_key",
"fetch_interval_hours",
"target_currencies",
"target_accounts",
)
if self.instance and self.instance.pk:
self.helper.layout.append(
FormActions(
NoClassSubmit(
"submit", _("Update"), css_class="btn btn-outline-primary w-100"
),
),
)
else:
self.helper.layout.append(
FormActions(
NoClassSubmit(
"submit", _("Add"), css_class="btn btn-outline-primary w-100"
),
),
)

View File

@@ -91,7 +91,8 @@ class ExchangeRateService(models.Model):
class ServiceType(models.TextChoices): class ServiceType(models.TextChoices):
SYNTH_FINANCE = "synth_finance", "Synth Finance" SYNTH_FINANCE = "synth_finance", "Synth Finance"
COINGECKO = "coingecko", "CoinGecko" COINGECKO_FREE = "coingecko_free", "CoinGecko (Demo/Free)"
COINGECKO_PRO = "coingecko_pro", "CoinGecko (Pro)"
name = models.CharField(max_length=255, unique=True, verbose_name=_("Service Name")) name = models.CharField(max_length=255, unique=True, verbose_name=_("Service Name"))
service_type = models.CharField( service_type = models.CharField(

View File

@@ -1,9 +1,8 @@
import logging import logging
from procrastinate.contrib.django import app from procrastinate.contrib.django import app
from apps.currencies.exchange_rates.fetcher import ExchangeRateFetcher from apps.currencies.exchange_rates.fetcher import ExchangeRateFetcher
from apps.currencies.models import ExchangeRateService
from django.utils import timezone
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -34,4 +34,34 @@ urlpatterns = [
views.exchange_rate_delete, views.exchange_rate_delete,
name="exchange_rate_delete", name="exchange_rate_delete",
), ),
path(
"automatic-exchange-rates/",
views.exchange_rates_services_index,
name="automatic_exchange_rates_index",
),
path(
"automatic-exchange-rates/list/",
views.exchange_rates_services_list,
name="automatic_exchange_rates_list",
),
path(
"automatic-exchange-rates/add/",
views.exchange_rate_service_add,
name="automatic_exchange_rate_add",
),
path(
"automatic-exchange-rates/force-fetch/",
views.exchange_rate_service_force_fetch,
name="automatic_exchange_rate_force_fetch",
),
path(
"automatic-exchange-rates/<int:pk>/edit/",
views.exchange_rate_service_edit,
name="automatic_exchange_rate_edit",
),
path(
"automatic-exchange-rates/<int:pk>/delete/",
views.exchange_rate_service_delete,
name="automatic_exchange_rate_delete",
),
] ]

View File

@@ -1,2 +1,3 @@
from .currencies import * from .currencies import *
from .exchange_rates import * from .exchange_rates import *
from .exchange_rates_services import *

View File

@@ -0,0 +1,122 @@
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.db.models import CharField, Value
from django.db.models.functions import Concat
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.utils.translation import gettext_lazy as _
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
from apps.currencies.forms import ExchangeRateForm, ExchangeRateServiceForm
from apps.currencies.models import ExchangeRate, ExchangeRateService
from apps.currencies.tasks import manual_fetch_exchange_rates
@login_required
@require_http_methods(["GET"])
def exchange_rates_services_index(request):
return render(
request,
"exchange_rates_services/pages/index.html",
)
@only_htmx
@login_required
@require_http_methods(["GET"])
def exchange_rates_services_list(request):
services = ExchangeRateService.objects.all()
return render(
request,
"exchange_rates_services/fragments/list.html",
{"services": services},
)
@only_htmx
@login_required
@require_http_methods(["GET", "POST"])
def exchange_rate_service_add(request):
if request.method == "POST":
form = ExchangeRateServiceForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, _("Service added successfully"))
return HttpResponse(
status=204,
headers={
"HX-Trigger": "updated, hide_offcanvas",
},
)
else:
form = ExchangeRateServiceForm()
return render(
request,
"exchange_rates_services/fragments/add.html",
{"form": form},
)
@only_htmx
@login_required
@require_http_methods(["GET", "POST"])
def exchange_rate_service_edit(request, pk):
service = get_object_or_404(ExchangeRateService, id=pk)
if request.method == "POST":
form = ExchangeRateServiceForm(request.POST, instance=service)
if form.is_valid():
form.save()
messages.success(request, _("Service updated successfully"))
return HttpResponse(
status=204,
headers={
"HX-Trigger": "updated, hide_offcanvas",
},
)
else:
form = ExchangeRateServiceForm(instance=service)
return render(
request,
"exchange_rates_services/fragments/edit.html",
{"form": form, "service": service},
)
@only_htmx
@login_required
@require_http_methods(["DELETE"])
def exchange_rate_service_delete(request, pk):
service = get_object_or_404(ExchangeRateService, id=pk)
service.delete()
messages.success(request, _("Service deleted successfully"))
return HttpResponse(
status=204,
headers={
"HX-Trigger": "updated, hide_offcanvas",
},
)
@only_htmx
@login_required
@require_http_methods(["GET"])
def exchange_rate_service_force_fetch(request):
manual_fetch_exchange_rates.defer()
messages.success(request, _("Services queued successfully"))
return HttpResponse(
status=204,
headers={
"HX-Trigger": "toasts",
},
)

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-01 22:04+0000\n" "POT-Creation-Date: 2025-02-04 03:20+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -23,23 +23,24 @@ msgid "Group name"
msgstr "" msgstr ""
#: apps/accounts/forms.py:40 apps/accounts/forms.py:96 #: apps/accounts/forms.py:40 apps/accounts/forms.py:96
#: apps/currencies/forms.py:52 apps/currencies/forms.py:90 apps/dca/forms.py:41 #: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/dca/forms.py:93 apps/import_app/forms.py:34 apps/rules/forms.py:45 #: apps/currencies/forms.py:138 apps/dca/forms.py:41 apps/dca/forms.py:93
#: apps/rules/forms.py:87 apps/transactions/forms.py:190 #: apps/import_app/forms.py:34 apps/rules/forms.py:45 apps/rules/forms.py:87
#: apps/transactions/forms.py:257 apps/transactions/forms.py:581 #: apps/transactions/forms.py:190 apps/transactions/forms.py:257
#: apps/transactions/forms.py:624 apps/transactions/forms.py:656 #: apps/transactions/forms.py:581 apps/transactions/forms.py:624
#: apps/transactions/forms.py:691 apps/transactions/forms.py:827 #: apps/transactions/forms.py:656 apps/transactions/forms.py:691
#: apps/transactions/forms.py:827
msgid "Update" msgid "Update"
msgstr "" msgstr ""
#: apps/accounts/forms.py:48 apps/accounts/forms.py:104 #: apps/accounts/forms.py:48 apps/accounts/forms.py:104
#: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:60 #: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:61
#: apps/currencies/forms.py:98 apps/dca/forms.py:49 apps/dca/forms.py:102 #: apps/currencies/forms.py:99 apps/currencies/forms.py:146
#: apps/import_app/forms.py:42 apps/rules/forms.py:53 apps/rules/forms.py:95 #: apps/dca/forms.py:49 apps/dca/forms.py:102 apps/import_app/forms.py:42
#: apps/transactions/forms.py:174 apps/transactions/forms.py:199 #: apps/rules/forms.py:53 apps/rules/forms.py:95 apps/transactions/forms.py:174
#: apps/transactions/forms.py:589 apps/transactions/forms.py:632 #: apps/transactions/forms.py:199 apps/transactions/forms.py:589
#: apps/transactions/forms.py:664 apps/transactions/forms.py:699 #: apps/transactions/forms.py:632 apps/transactions/forms.py:664
#: apps/transactions/forms.py:835 #: apps/transactions/forms.py:699 apps/transactions/forms.py:835
#: templates/account_groups/fragments/list.html:9 #: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -48,6 +49,7 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:9 #: templates/dca/fragments/strategy/list.html:9
#: templates/entities/fragments/list.html:9 #: templates/entities/fragments/list.html:9
#: templates/exchange_rates/fragments/list.html:10 #: templates/exchange_rates/fragments/list.html:10
#: templates/exchange_rates_services/fragments/list.html:10
#: templates/import_app/fragments/profiles/list.html:7 #: templates/import_app/fragments/profiles/list.html:7
#: templates/import_app/fragments/profiles/list.html:10 #: templates/import_app/fragments/profiles/list.html:10
#: templates/installment_plans/fragments/list.html:9 #: templates/installment_plans/fragments/list.html:9
@@ -69,7 +71,7 @@ msgstr ""
#: apps/transactions/forms.py:39 apps/transactions/forms.py:291 #: apps/transactions/forms.py:39 apps/transactions/forms.py:291
#: apps/transactions/forms.py:298 apps/transactions/forms.py:478 #: apps/transactions/forms.py:298 apps/transactions/forms.py:478
#: apps/transactions/forms.py:723 apps/transactions/models.py:159 #: apps/transactions/forms.py:723 apps/transactions/models.py:159
#: apps/transactions/models.py:314 apps/transactions/models.py:494 #: apps/transactions/models.py:328 apps/transactions/models.py:508
msgid "Category" msgid "Category"
msgstr "" msgstr ""
@@ -77,8 +79,8 @@ msgstr ""
#: apps/transactions/filters.py:74 apps/transactions/forms.py:47 #: apps/transactions/filters.py:74 apps/transactions/forms.py:47
#: apps/transactions/forms.py:307 apps/transactions/forms.py:315 #: apps/transactions/forms.py:307 apps/transactions/forms.py:315
#: apps/transactions/forms.py:471 apps/transactions/forms.py:716 #: apps/transactions/forms.py:471 apps/transactions/forms.py:716
#: apps/transactions/models.py:165 apps/transactions/models.py:316 #: apps/transactions/models.py:165 apps/transactions/models.py:330
#: apps/transactions/models.py:498 templates/includes/navbar.html:105 #: apps/transactions/models.py:512 templates/includes/navbar.html:105
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "" msgstr ""
@@ -92,6 +94,7 @@ msgstr ""
#: templates/categories/fragments/table.html:16 #: templates/categories/fragments/table.html:16
#: templates/currencies/fragments/list.html:26 #: templates/currencies/fragments/list.html:26
#: templates/entities/fragments/table.html:16 #: templates/entities/fragments/table.html:16
#: templates/exchange_rates_services/fragments/list.html:32
#: templates/import_app/fragments/profiles/list.html:36 #: templates/import_app/fragments/profiles/list.html:36
#: templates/installment_plans/fragments/table.html:16 #: templates/installment_plans/fragments/table.html:16
#: templates/recurring_transactions/fragments/table.html:18 #: templates/recurring_transactions/fragments/table.html:18
@@ -110,17 +113,17 @@ msgstr ""
msgid "Account Groups" msgid "Account Groups"
msgstr "" msgstr ""
#: apps/accounts/models.py:31 apps/currencies/models.py:32 #: apps/accounts/models.py:31 apps/currencies/models.py:38
#: templates/accounts/fragments/list.html:27 #: templates/accounts/fragments/list.html:27
msgid "Currency" msgid "Currency"
msgstr "" msgstr ""
#: apps/accounts/models.py:37 apps/currencies/models.py:20 #: apps/accounts/models.py:37 apps/currencies/models.py:26
#: templates/accounts/fragments/list.html:28 #: templates/accounts/fragments/list.html:28
msgid "Exchange Currency" msgid "Exchange Currency"
msgstr "" msgstr ""
#: apps/accounts/models.py:42 apps/currencies/models.py:25 #: apps/accounts/models.py:42 apps/currencies/models.py:31
msgid "Default currency for exchange calculations" msgid "Default currency for exchange calculations"
msgstr "" msgstr ""
@@ -147,7 +150,7 @@ msgstr ""
#: apps/accounts/models.py:59 apps/rules/models.py:19 #: apps/accounts/models.py:59 apps/rules/models.py:19
#: apps/transactions/forms.py:59 apps/transactions/forms.py:463 #: apps/transactions/forms.py:59 apps/transactions/forms.py:463
#: apps/transactions/forms.py:708 apps/transactions/models.py:132 #: apps/transactions/forms.py:708 apps/transactions/models.py:132
#: apps/transactions/models.py:274 apps/transactions/models.py:476 #: apps/transactions/models.py:288 apps/transactions/models.py:490
msgid "Account" msgid "Account"
msgstr "" msgstr ""
@@ -345,35 +348,36 @@ msgstr ""
msgid "No results..." msgid "No results..."
msgstr "" msgstr ""
#: apps/currencies/forms.py:16 apps/currencies/models.py:15 #: apps/currencies/forms.py:17 apps/currencies/models.py:21
msgid "Prefix" msgid "Prefix"
msgstr "" msgstr ""
#: apps/currencies/forms.py:17 apps/currencies/models.py:16 #: apps/currencies/forms.py:18 apps/currencies/models.py:22
msgid "Suffix" msgid "Suffix"
msgstr "" msgstr ""
#: apps/currencies/forms.py:68 apps/dca/models.py:156 apps/rules/models.py:22 #: apps/currencies/forms.py:69 apps/dca/models.py:156 apps/rules/models.py:22
#: apps/transactions/forms.py:63 apps/transactions/forms.py:319 #: apps/transactions/forms.py:63 apps/transactions/forms.py:319
#: apps/transactions/models.py:142 #: apps/transactions/models.py:142
#: templates/dca/fragments/strategy/details.html:52 #: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10 #: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
msgid "Date" msgid "Date"
msgstr "" msgstr ""
#: apps/currencies/models.py:8 #: apps/currencies/models.py:13
msgid "Currency Code" msgid "Currency Code"
msgstr "" msgstr ""
#: apps/currencies/models.py:9 #: apps/currencies/models.py:15
msgid "Currency Name" msgid "Currency Name"
msgstr "" msgstr ""
#: apps/currencies/models.py:13 #: apps/currencies/models.py:19
msgid "Decimal Places" msgid "Decimal Places"
msgstr "" msgstr ""
#: apps/currencies/models.py:33 apps/transactions/filters.py:60 #: apps/currencies/models.py:39 apps/transactions/filters.py:60
#: templates/currencies/fragments/list.html:5 #: templates/currencies/fragments/list.html:5
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:119 #: templates/currencies/pages/index.html:4 templates/includes/navbar.html:119
#: templates/includes/navbar.html:121 #: templates/includes/navbar.html:121
@@ -383,36 +387,97 @@ msgstr ""
msgid "Currencies" msgid "Currencies"
msgstr "" msgstr ""
#: apps/currencies/models.py:41 #: apps/currencies/models.py:47
msgid "Currency cannot have itself as exchange currency." msgid "Currency cannot have itself as exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:52 #: apps/currencies/models.py:58
msgid "From Currency" msgid "From Currency"
msgstr "" msgstr ""
#: apps/currencies/models.py:58 #: apps/currencies/models.py:64
msgid "To Currency" msgid "To Currency"
msgstr "" msgstr ""
#: apps/currencies/models.py:61 apps/currencies/models.py:66 #: apps/currencies/models.py:67 apps/currencies/models.py:72
msgid "Exchange Rate" msgid "Exchange Rate"
msgstr "" msgstr ""
#: apps/currencies/models.py:63 #: apps/currencies/models.py:69
msgid "Date and Time" msgid "Date and Time"
msgstr "" msgstr ""
#: apps/currencies/models.py:67 templates/exchange_rates/fragments/list.html:6 #: apps/currencies/models.py:73 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:123 #: templates/includes/navbar.html:123
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "" msgstr ""
#: apps/currencies/models.py:79 #: apps/currencies/models.py:85
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "" msgstr ""
#: apps/currencies/models.py:97
msgid "Service Name"
msgstr ""
#: apps/currencies/models.py:99
msgid "Service Type"
msgstr ""
#: apps/currencies/models.py:101 apps/transactions/models.py:71
#: apps/transactions/models.py:90 apps/transactions/models.py:109
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
#: templates/tags/fragments/list.html:21
msgid "Active"
msgstr ""
#: apps/currencies/models.py:106
msgid "API Key"
msgstr ""
#: apps/currencies/models.py:107
msgid "API key for the service (if required)"
msgstr ""
#: apps/currencies/models.py:112
msgid "Fetch Interval (hours)"
msgstr ""
#: apps/currencies/models.py:115
msgid "Last Successful Fetch"
msgstr ""
#: apps/currencies/models.py:120
msgid "Target Currencies"
msgstr ""
#: apps/currencies/models.py:122
msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency."
msgstr ""
#: apps/currencies/models.py:130
msgid "Target Accounts"
msgstr ""
#: apps/currencies/models.py:132
msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency."
msgstr ""
#: apps/currencies/models.py:139
msgid "Exchange Rate Service"
msgstr ""
#: apps/currencies/models.py:140
msgid "Exchange Rate Services"
msgstr ""
#: apps/currencies/views/currencies.py:42 #: apps/currencies/views/currencies.py:42
msgid "Currency added successfully" msgid "Currency added successfully"
msgstr "" msgstr ""
@@ -437,6 +502,22 @@ msgstr ""
msgid "Exchange rate deleted successfully" msgid "Exchange rate deleted successfully"
msgstr "" msgstr ""
#: apps/currencies/views/exchange_rates_services.py:46
msgid "Service added successfully"
msgstr ""
#: apps/currencies/views/exchange_rates_services.py:74
msgid "Service updated successfully"
msgstr ""
#: apps/currencies/views/exchange_rates_services.py:100
msgid "Service deleted successfully"
msgstr ""
#: apps/currencies/views/exchange_rates_services.py:115
msgid "Services queued successfully"
msgstr ""
#: apps/dca/models.py:17 #: apps/dca/models.py:17
msgid "Target Currency" msgid "Target Currency"
msgstr "" msgstr ""
@@ -447,7 +528,7 @@ msgstr ""
#: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/models.py:26 #: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/models.py:26
#: apps/transactions/forms.py:333 apps/transactions/models.py:155 #: apps/transactions/forms.py:333 apps/transactions/models.py:155
#: apps/transactions/models.py:323 apps/transactions/models.py:504 #: apps/transactions/models.py:337 apps/transactions/models.py:518
msgid "Notes" msgid "Notes"
msgstr "" msgstr ""
@@ -611,7 +692,7 @@ msgstr ""
#: apps/rules/models.py:10 apps/rules/models.py:25 #: apps/rules/models.py:10 apps/rules/models.py:25
#: apps/transactions/forms.py:325 apps/transactions/models.py:153 #: apps/transactions/forms.py:325 apps/transactions/models.py:153
#: apps/transactions/models.py:281 apps/transactions/models.py:490 #: apps/transactions/models.py:295 apps/transactions/models.py:504
msgid "Description" msgid "Description"
msgstr "" msgstr ""
@@ -620,7 +701,7 @@ msgid "Trigger"
msgstr "" msgstr ""
#: apps/rules/models.py:20 apps/transactions/models.py:139 #: apps/rules/models.py:20 apps/transactions/models.py:139
#: apps/transactions/models.py:279 apps/transactions/models.py:482 #: apps/transactions/models.py:293 apps/transactions/models.py:496
msgid "Type" msgid "Type"
msgstr "" msgstr ""
@@ -634,21 +715,21 @@ msgstr ""
#: apps/rules/models.py:23 apps/transactions/forms.py:66 #: apps/rules/models.py:23 apps/transactions/forms.py:66
#: apps/transactions/forms.py:322 apps/transactions/forms.py:492 #: apps/transactions/forms.py:322 apps/transactions/forms.py:492
#: apps/transactions/models.py:143 apps/transactions/models.py:297 #: apps/transactions/models.py:143 apps/transactions/models.py:311
#: apps/transactions/models.py:506 #: apps/transactions/models.py:520
msgid "Reference Date" msgid "Reference Date"
msgstr "" msgstr ""
#: apps/rules/models.py:24 apps/transactions/models.py:148 #: apps/rules/models.py:24 apps/transactions/models.py:148
#: apps/transactions/models.py:487 #: apps/transactions/models.py:501
msgid "Amount" msgid "Amount"
msgstr "" msgstr ""
#: apps/rules/models.py:29 apps/transactions/filters.py:81 #: apps/rules/models.py:29 apps/transactions/filters.py:81
#: apps/transactions/forms.py:55 apps/transactions/forms.py:486 #: apps/transactions/forms.py:55 apps/transactions/forms.py:486
#: apps/transactions/forms.py:731 apps/transactions/models.py:117 #: apps/transactions/forms.py:731 apps/transactions/models.py:117
#: apps/transactions/models.py:170 apps/transactions/models.py:319 #: apps/transactions/models.py:170 apps/transactions/models.py:333
#: apps/transactions/models.py:501 templates/entities/fragments/list.html:5 #: apps/transactions/models.py:515 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:107 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:107
msgid "Entities" msgid "Entities"
msgstr "" msgstr ""
@@ -786,14 +867,6 @@ msgstr ""
msgid "Mute" msgid "Mute"
msgstr "" msgstr ""
#: apps/transactions/models.py:71 apps/transactions/models.py:90
#: apps/transactions/models.py:109 templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
#: templates/tags/fragments/list.html:21
msgid "Active"
msgstr ""
#: apps/transactions/models.py:73 #: apps/transactions/models.py:73
msgid "" msgid ""
"Deactivated categories won't be able to be selected when creating new " "Deactivated categories won't be able to be selected when creating new "
@@ -846,11 +919,11 @@ msgstr ""
msgid "Expense" msgid "Expense"
msgstr "" msgstr ""
#: apps/transactions/models.py:181 apps/transactions/models.py:326 #: apps/transactions/models.py:181 apps/transactions/models.py:340
msgid "Installment Plan" msgid "Installment Plan"
msgstr "" msgstr ""
#: apps/transactions/models.py:190 apps/transactions/models.py:527 #: apps/transactions/models.py:190 apps/transactions/models.py:541
msgid "Recurring Transaction" msgid "Recurring Transaction"
msgstr "" msgstr ""
@@ -882,95 +955,95 @@ msgstr ""
msgid "Transactions" msgid "Transactions"
msgstr "" msgstr ""
#: apps/transactions/models.py:268 #: apps/transactions/models.py:282
msgid "Yearly" msgid "Yearly"
msgstr "" msgstr ""
#: apps/transactions/models.py:269 apps/users/models.py:26 #: apps/transactions/models.py:283 apps/users/models.py:26
#: templates/includes/navbar.html:26 #: templates/includes/navbar.html:26
msgid "Monthly" msgid "Monthly"
msgstr "" msgstr ""
#: apps/transactions/models.py:270 #: apps/transactions/models.py:284
msgid "Weekly" msgid "Weekly"
msgstr "" msgstr ""
#: apps/transactions/models.py:271 #: apps/transactions/models.py:285
msgid "Daily" msgid "Daily"
msgstr "" msgstr ""
#: apps/transactions/models.py:284 #: apps/transactions/models.py:298
msgid "Number of Installments" msgid "Number of Installments"
msgstr "" msgstr ""
#: apps/transactions/models.py:289 #: apps/transactions/models.py:303
msgid "Installment Start" msgid "Installment Start"
msgstr "" msgstr ""
#: apps/transactions/models.py:290 #: apps/transactions/models.py:304
msgid "The installment number to start counting from" msgid "The installment number to start counting from"
msgstr "" msgstr ""
#: apps/transactions/models.py:295 apps/transactions/models.py:510 #: apps/transactions/models.py:309 apps/transactions/models.py:524
msgid "Start Date" msgid "Start Date"
msgstr "" msgstr ""
#: apps/transactions/models.py:299 apps/transactions/models.py:511 #: apps/transactions/models.py:313 apps/transactions/models.py:525
msgid "End Date" msgid "End Date"
msgstr "" msgstr ""
#: apps/transactions/models.py:304 #: apps/transactions/models.py:318
msgid "Recurrence" msgid "Recurrence"
msgstr "" msgstr ""
#: apps/transactions/models.py:307 #: apps/transactions/models.py:321
msgid "Installment Amount" msgid "Installment Amount"
msgstr "" msgstr ""
#: apps/transactions/models.py:327 templates/includes/navbar.html:69 #: apps/transactions/models.py:341 templates/includes/navbar.html:69
#: templates/installment_plans/fragments/list.html:5 #: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4 #: templates/installment_plans/pages/index.html:4
msgid "Installment Plans" msgid "Installment Plans"
msgstr "" msgstr ""
#: apps/transactions/models.py:469 #: apps/transactions/models.py:483
msgid "day(s)" msgid "day(s)"
msgstr "" msgstr ""
#: apps/transactions/models.py:470 #: apps/transactions/models.py:484
msgid "week(s)" msgid "week(s)"
msgstr "" msgstr ""
#: apps/transactions/models.py:471 #: apps/transactions/models.py:485
msgid "month(s)" msgid "month(s)"
msgstr "" msgstr ""
#: apps/transactions/models.py:472 #: apps/transactions/models.py:486
msgid "year(s)" msgid "year(s)"
msgstr "" msgstr ""
#: apps/transactions/models.py:474 #: apps/transactions/models.py:488
#: templates/recurring_transactions/fragments/list.html:24 #: templates/recurring_transactions/fragments/list.html:24
msgid "Paused" msgid "Paused"
msgstr "" msgstr ""
#: apps/transactions/models.py:513 #: apps/transactions/models.py:527
msgid "Recurrence Type" msgid "Recurrence Type"
msgstr "" msgstr ""
#: apps/transactions/models.py:516 #: apps/transactions/models.py:530
msgid "Recurrence Interval" msgid "Recurrence Interval"
msgstr "" msgstr ""
#: apps/transactions/models.py:520 #: apps/transactions/models.py:534
msgid "Last Generated Date" msgid "Last Generated Date"
msgstr "" msgstr ""
#: apps/transactions/models.py:523 #: apps/transactions/models.py:537
msgid "Last Generated Reference Date" msgid "Last Generated Reference Date"
msgstr "" msgstr ""
#: apps/transactions/models.py:528 templates/includes/navbar.html:71 #: apps/transactions/models.py:542 templates/includes/navbar.html:71
#: templates/recurring_transactions/fragments/list.html:5 #: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4 #: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions" msgid "Recurring Transactions"
@@ -1171,15 +1244,15 @@ msgstr ""
msgid "Default" msgid "Default"
msgstr "" msgstr ""
#: apps/users/forms.py:91 apps/users/models.py:40 #: apps/users/forms.py:91 apps/users/models.py:41
msgid "Date Format" msgid "Date Format"
msgstr "" msgstr ""
#: apps/users/forms.py:96 apps/users/models.py:45 #: apps/users/forms.py:96 apps/users/models.py:46
msgid "Datetime Format" msgid "Datetime Format"
msgstr "" msgstr ""
#: apps/users/forms.py:102 apps/users/models.py:48 #: apps/users/forms.py:102 apps/users/models.py:49
msgid "Number Format" msgid "Number Format"
msgstr "" msgstr ""
@@ -1195,51 +1268,55 @@ msgstr ""
msgid "Yearly by account" msgid "Yearly by account"
msgstr "" msgstr ""
#: apps/users/models.py:29 templates/includes/navbar.html:40 #: apps/users/models.py:29 templates/net_worth/net_worth.html:9
msgid "Net Worth" msgid "Current Net Worth"
msgstr "" msgstr ""
#: apps/users/models.py:30 #: apps/users/models.py:30 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr ""
#: apps/users/models.py:31
msgid "All Transactions" msgid "All Transactions"
msgstr "" msgstr ""
#: apps/users/models.py:31 templates/includes/navbar.html:32 #: apps/users/models.py:32 templates/includes/navbar.html:32
msgid "Calendar" msgid "Calendar"
msgstr "" msgstr ""
#: apps/users/models.py:53 apps/users/models.py:59 #: apps/users/models.py:54 apps/users/models.py:60
msgid "Auto" msgid "Auto"
msgstr "" msgstr ""
#: apps/users/models.py:55 #: apps/users/models.py:56
msgid "Language" msgid "Language"
msgstr "" msgstr ""
#: apps/users/models.py:61 #: apps/users/models.py:62
msgid "Time Zone" msgid "Time Zone"
msgstr "" msgstr ""
#: apps/users/models.py:67 #: apps/users/models.py:68
msgid "Start page" msgid "Start page"
msgstr "" msgstr ""
#: apps/users/views.py:60 #: apps/users/views.py:62
msgid "Transaction amounts are now hidden" msgid "Transaction amounts are now hidden"
msgstr "" msgstr ""
#: apps/users/views.py:63 #: apps/users/views.py:65
msgid "Transaction amounts are now displayed" msgid "Transaction amounts are now displayed"
msgstr "" msgstr ""
#: apps/users/views.py:81 #: apps/users/views.py:83
msgid "Sounds are now muted" msgid "Sounds are now muted"
msgstr "" msgstr ""
#: apps/users/views.py:84 #: apps/users/views.py:86
msgid "Sounds will now play" msgid "Sounds will now play"
msgstr "" msgstr ""
#: apps/users/views.py:100 #: apps/users/views.py:102
msgid "Your settings have been updated" msgid "Your settings have been updated"
msgstr "" msgstr ""
@@ -1258,6 +1335,8 @@ msgstr ""
#: templates/dca/fragments/strategy/details.html:63 #: templates/dca/fragments/strategy/details.html:63
#: templates/entities/fragments/table.html:23 #: templates/entities/fragments/table.html:23
#: templates/exchange_rates/fragments/table.html:19 #: templates/exchange_rates/fragments/table.html:19
#: templates/exchange_rates_services/fragments/list.html:43
#: templates/exchange_rates_services/fragments/table.html:19
#: templates/import_app/fragments/profiles/list.html:44 #: templates/import_app/fragments/profiles/list.html:44
#: templates/installment_plans/fragments/table.html:23 #: templates/installment_plans/fragments/table.html:23
#: templates/recurring_transactions/fragments/table.html:25 #: templates/recurring_transactions/fragments/table.html:25
@@ -1276,6 +1355,8 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:34 #: templates/dca/fragments/strategy/list.html:34
#: templates/entities/fragments/table.html:28 #: templates/entities/fragments/table.html:28
#: templates/exchange_rates/fragments/table.html:23 #: templates/exchange_rates/fragments/table.html:23
#: templates/exchange_rates_services/fragments/list.html:47
#: templates/exchange_rates_services/fragments/table.html:23
#: templates/import_app/fragments/profiles/list.html:48 #: templates/import_app/fragments/profiles/list.html:48
#: templates/installment_plans/fragments/table.html:27 #: templates/installment_plans/fragments/table.html:27
#: templates/recurring_transactions/fragments/table.html:29 #: templates/recurring_transactions/fragments/table.html:29
@@ -1297,6 +1378,8 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:42 #: templates/dca/fragments/strategy/list.html:42
#: templates/entities/fragments/table.html:36 #: templates/entities/fragments/table.html:36
#: templates/exchange_rates/fragments/table.html:31 #: templates/exchange_rates/fragments/table.html:31
#: templates/exchange_rates_services/fragments/list.html:54
#: templates/exchange_rates_services/fragments/table.html:31
#: templates/import_app/fragments/profiles/list.html:69 #: templates/import_app/fragments/profiles/list.html:69
#: templates/import_app/fragments/runs/list.html:102 #: templates/import_app/fragments/runs/list.html:102
#: templates/installment_plans/fragments/table.html:56 #: templates/installment_plans/fragments/table.html:56
@@ -1320,6 +1403,8 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:46 #: templates/dca/fragments/strategy/list.html:46
#: templates/entities/fragments/table.html:40 #: templates/entities/fragments/table.html:40
#: templates/exchange_rates/fragments/table.html:36 #: templates/exchange_rates/fragments/table.html:36
#: templates/exchange_rates_services/fragments/list.html:58
#: templates/exchange_rates_services/fragments/table.html:36
#: templates/import_app/fragments/profiles/list.html:73 #: templates/import_app/fragments/profiles/list.html:73
#: templates/import_app/fragments/runs/list.html:106 #: templates/import_app/fragments/runs/list.html:106
#: templates/installment_plans/fragments/table.html:48 #: templates/installment_plans/fragments/table.html:48
@@ -1346,6 +1431,8 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:47 #: templates/dca/fragments/strategy/list.html:47
#: templates/entities/fragments/table.html:41 #: templates/entities/fragments/table.html:41
#: templates/exchange_rates/fragments/table.html:37 #: templates/exchange_rates/fragments/table.html:37
#: templates/exchange_rates_services/fragments/list.html:59
#: templates/exchange_rates_services/fragments/table.html:37
#: templates/import_app/fragments/profiles/list.html:74 #: templates/import_app/fragments/profiles/list.html:74
#: templates/rules/fragments/list.html:49 #: templates/rules/fragments/list.html:49
#: templates/rules/fragments/transaction_rule/view.html:61 #: templates/rules/fragments/transaction_rule/view.html:61
@@ -1363,6 +1450,8 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:48 #: templates/dca/fragments/strategy/list.html:48
#: templates/entities/fragments/table.html:42 #: templates/entities/fragments/table.html:42
#: templates/exchange_rates/fragments/table.html:38 #: templates/exchange_rates/fragments/table.html:38
#: templates/exchange_rates_services/fragments/list.html:60
#: templates/exchange_rates_services/fragments/table.html:38
#: templates/import_app/fragments/profiles/list.html:75 #: templates/import_app/fragments/profiles/list.html:75
#: templates/import_app/fragments/runs/list.html:108 #: templates/import_app/fragments/runs/list.html:108
#: templates/installment_plans/fragments/table.html:62 #: templates/installment_plans/fragments/table.html:62
@@ -1494,37 +1583,37 @@ msgid "Restore"
msgstr "" msgstr ""
#: templates/cotton/ui/account_card.html:15 #: templates/cotton/ui/account_card.html:15
#: templates/cotton/ui/currency_card.html:13 #: templates/cotton/ui/currency_card.html:10
msgid "projected income" msgid "projected income"
msgstr "" msgstr ""
#: templates/cotton/ui/account_card.html:37 #: templates/cotton/ui/account_card.html:37
#: templates/cotton/ui/currency_card.html:35 #: templates/cotton/ui/currency_card.html:32
msgid "projected expenses" msgid "projected expenses"
msgstr "" msgstr ""
#: templates/cotton/ui/account_card.html:61 #: templates/cotton/ui/account_card.html:61
#: templates/cotton/ui/currency_card.html:59 #: templates/cotton/ui/currency_card.html:56
msgid "projected total" msgid "projected total"
msgstr "" msgstr ""
#: templates/cotton/ui/account_card.html:86 #: templates/cotton/ui/account_card.html:86
#: templates/cotton/ui/currency_card.html:84 #: templates/cotton/ui/currency_card.html:81
msgid "current income" msgid "current income"
msgstr "" msgstr ""
#: templates/cotton/ui/account_card.html:108 #: templates/cotton/ui/account_card.html:108
#: templates/cotton/ui/currency_card.html:106 #: templates/cotton/ui/currency_card.html:103
msgid "current expenses" msgid "current expenses"
msgstr "" msgstr ""
#: templates/cotton/ui/account_card.html:130 #: templates/cotton/ui/account_card.html:130
#: templates/cotton/ui/currency_card.html:128 #: templates/cotton/ui/currency_card.html:125
msgid "current total" msgid "current total"
msgstr "" msgstr ""
#: templates/cotton/ui/account_card.html:156 #: templates/cotton/ui/account_card.html:156
#: templates/cotton/ui/currency_card.html:154 #: templates/cotton/ui/currency_card.html:151
msgid "final total" msgid "final total"
msgstr "" msgstr ""
@@ -1778,10 +1867,12 @@ msgid "No entities"
msgstr "" msgstr ""
#: templates/exchange_rates/fragments/add.html:5 #: templates/exchange_rates/fragments/add.html:5
#: templates/exchange_rates_services/fragments/add.html:5
msgid "Add exchange rate" msgid "Add exchange rate"
msgstr "" msgstr ""
#: templates/exchange_rates/fragments/edit.html:5 #: templates/exchange_rates/fragments/edit.html:5
#: templates/exchange_rates_services/fragments/edit.html:5
msgid "Edit exchange rate" msgid "Edit exchange rate"
msgstr "" msgstr ""
@@ -1794,22 +1885,68 @@ msgid "All"
msgstr "" msgstr ""
#: templates/exchange_rates/fragments/table.html:11 #: templates/exchange_rates/fragments/table.html:11
#: templates/exchange_rates_services/fragments/table.html:11
msgid "Pairing" msgid "Pairing"
msgstr "" msgstr ""
#: templates/exchange_rates/fragments/table.html:12 #: templates/exchange_rates/fragments/table.html:12
#: templates/exchange_rates_services/fragments/table.html:12
msgid "Rate" msgid "Rate"
msgstr "" msgstr ""
#: templates/exchange_rates/fragments/table.html:51 #: templates/exchange_rates/fragments/table.html:51
#: templates/exchange_rates_services/fragments/table.html:51
msgid "No exchange rates" msgid "No exchange rates"
msgstr "" msgstr ""
#: templates/exchange_rates/fragments/table.html:58 #: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47 #: templates/transactions/fragments/list_all.html:47
msgid "Page navigation" msgid "Page navigation"
msgstr "" msgstr ""
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:133
msgid "Automatic Exchange Rates"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:21
msgid "Fetch all"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:33
msgid "Service"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:34
msgid "Targeting"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:35
msgid "Fetch every"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:36
msgid "Last fetch"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:68
msgid "currencies"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:68
msgid "accounts"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:69
msgid "hours"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:77
msgid "No services configured"
msgstr ""
#: templates/import_app/fragments/profiles/add.html:6 #: templates/import_app/fragments/profiles/add.html:6
msgid "Add new import profile" msgid "Add new import profile"
msgstr "" msgstr ""
@@ -1907,6 +2044,10 @@ msgstr ""
msgid "Overview" msgid "Overview"
msgstr "" msgstr ""
#: templates/includes/navbar.html:40
msgid "Net Worth"
msgstr ""
#: templates/includes/navbar.html:44 #: templates/includes/navbar.html:44
msgid "Current" msgid "Current"
msgstr "" msgstr ""
@@ -1948,15 +2089,15 @@ msgstr ""
msgid "Rules" msgid "Rules"
msgstr "" msgstr ""
#: templates/includes/navbar.html:141 #: templates/includes/navbar.html:143
msgid "Only use this if you know what you're doing" msgid "Only use this if you know what you're doing"
msgstr "" msgstr ""
#: templates/includes/navbar.html:142 #: templates/includes/navbar.html:144
msgid "Django Admin" msgid "Django Admin"
msgstr "" msgstr ""
#: templates/includes/navbar.html:151 #: templates/includes/navbar.html:153
msgid "Calculator" msgid "Calculator"
msgstr "" msgstr ""
@@ -2121,14 +2262,6 @@ msgstr ""
msgid "Newest first" msgid "Newest first"
msgstr "" msgstr ""
#: templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr ""
#: templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr ""
#: templates/net_worth/net_worth.html:17 #: templates/net_worth/net_worth.html:17
#: templates/yearly_overview/pages/overview_by_currency.html:9 #: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency" msgid "By currency"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-01 22:04+0000\n" "POT-Creation-Date: 2025-02-04 03:20+0000\n"
"PO-Revision-Date: 2025-01-29 06:12+0100\n" "PO-Revision-Date: 2025-01-29 06:12+0100\n"
"Last-Translator: Dimitri Decrock <dimitri@fam-decrock.eu>\n" "Last-Translator: Dimitri Decrock <dimitri@fam-decrock.eu>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -24,23 +24,24 @@ msgid "Group name"
msgstr "Groepsnaam" msgstr "Groepsnaam"
#: apps/accounts/forms.py:40 apps/accounts/forms.py:96 #: apps/accounts/forms.py:40 apps/accounts/forms.py:96
#: apps/currencies/forms.py:52 apps/currencies/forms.py:90 apps/dca/forms.py:41 #: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/dca/forms.py:93 apps/import_app/forms.py:34 apps/rules/forms.py:45 #: apps/currencies/forms.py:138 apps/dca/forms.py:41 apps/dca/forms.py:93
#: apps/rules/forms.py:87 apps/transactions/forms.py:190 #: apps/import_app/forms.py:34 apps/rules/forms.py:45 apps/rules/forms.py:87
#: apps/transactions/forms.py:257 apps/transactions/forms.py:581 #: apps/transactions/forms.py:190 apps/transactions/forms.py:257
#: apps/transactions/forms.py:624 apps/transactions/forms.py:656 #: apps/transactions/forms.py:581 apps/transactions/forms.py:624
#: apps/transactions/forms.py:691 apps/transactions/forms.py:827 #: apps/transactions/forms.py:656 apps/transactions/forms.py:691
#: apps/transactions/forms.py:827
msgid "Update" msgid "Update"
msgstr "Bijwerken" msgstr "Bijwerken"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:104 #: apps/accounts/forms.py:48 apps/accounts/forms.py:104
#: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:60 #: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:61
#: apps/currencies/forms.py:98 apps/dca/forms.py:49 apps/dca/forms.py:102 #: apps/currencies/forms.py:99 apps/currencies/forms.py:146
#: apps/import_app/forms.py:42 apps/rules/forms.py:53 apps/rules/forms.py:95 #: apps/dca/forms.py:49 apps/dca/forms.py:102 apps/import_app/forms.py:42
#: apps/transactions/forms.py:174 apps/transactions/forms.py:199 #: apps/rules/forms.py:53 apps/rules/forms.py:95 apps/transactions/forms.py:174
#: apps/transactions/forms.py:589 apps/transactions/forms.py:632 #: apps/transactions/forms.py:199 apps/transactions/forms.py:589
#: apps/transactions/forms.py:664 apps/transactions/forms.py:699 #: apps/transactions/forms.py:632 apps/transactions/forms.py:664
#: apps/transactions/forms.py:835 #: apps/transactions/forms.py:699 apps/transactions/forms.py:835
#: templates/account_groups/fragments/list.html:9 #: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -49,6 +50,7 @@ msgstr "Bijwerken"
#: templates/dca/fragments/strategy/list.html:9 #: templates/dca/fragments/strategy/list.html:9
#: templates/entities/fragments/list.html:9 #: templates/entities/fragments/list.html:9
#: templates/exchange_rates/fragments/list.html:10 #: templates/exchange_rates/fragments/list.html:10
#: templates/exchange_rates_services/fragments/list.html:10
#: templates/import_app/fragments/profiles/list.html:7 #: templates/import_app/fragments/profiles/list.html:7
#: templates/import_app/fragments/profiles/list.html:10 #: templates/import_app/fragments/profiles/list.html:10
#: templates/installment_plans/fragments/list.html:9 #: templates/installment_plans/fragments/list.html:9
@@ -70,7 +72,7 @@ msgstr "Nieuw saldo"
#: apps/transactions/forms.py:39 apps/transactions/forms.py:291 #: apps/transactions/forms.py:39 apps/transactions/forms.py:291
#: apps/transactions/forms.py:298 apps/transactions/forms.py:478 #: apps/transactions/forms.py:298 apps/transactions/forms.py:478
#: apps/transactions/forms.py:723 apps/transactions/models.py:159 #: apps/transactions/forms.py:723 apps/transactions/models.py:159
#: apps/transactions/models.py:314 apps/transactions/models.py:494 #: apps/transactions/models.py:328 apps/transactions/models.py:508
msgid "Category" msgid "Category"
msgstr "Categorie" msgstr "Categorie"
@@ -78,8 +80,8 @@ msgstr "Categorie"
#: apps/transactions/filters.py:74 apps/transactions/forms.py:47 #: apps/transactions/filters.py:74 apps/transactions/forms.py:47
#: apps/transactions/forms.py:307 apps/transactions/forms.py:315 #: apps/transactions/forms.py:307 apps/transactions/forms.py:315
#: apps/transactions/forms.py:471 apps/transactions/forms.py:716 #: apps/transactions/forms.py:471 apps/transactions/forms.py:716
#: apps/transactions/models.py:165 apps/transactions/models.py:316 #: apps/transactions/models.py:165 apps/transactions/models.py:330
#: apps/transactions/models.py:498 templates/includes/navbar.html:105 #: apps/transactions/models.py:512 templates/includes/navbar.html:105
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "Labels" msgstr "Labels"
@@ -93,6 +95,7 @@ msgstr "Labels"
#: templates/categories/fragments/table.html:16 #: templates/categories/fragments/table.html:16
#: templates/currencies/fragments/list.html:26 #: templates/currencies/fragments/list.html:26
#: templates/entities/fragments/table.html:16 #: templates/entities/fragments/table.html:16
#: templates/exchange_rates_services/fragments/list.html:32
#: templates/import_app/fragments/profiles/list.html:36 #: templates/import_app/fragments/profiles/list.html:36
#: templates/installment_plans/fragments/table.html:16 #: templates/installment_plans/fragments/table.html:16
#: templates/recurring_transactions/fragments/table.html:18 #: templates/recurring_transactions/fragments/table.html:18
@@ -111,17 +114,17 @@ msgstr "Accountgroep"
msgid "Account Groups" msgid "Account Groups"
msgstr "Accountgroepen" msgstr "Accountgroepen"
#: apps/accounts/models.py:31 apps/currencies/models.py:32 #: apps/accounts/models.py:31 apps/currencies/models.py:38
#: templates/accounts/fragments/list.html:27 #: templates/accounts/fragments/list.html:27
msgid "Currency" msgid "Currency"
msgstr "Munteenheid" msgstr "Munteenheid"
#: apps/accounts/models.py:37 apps/currencies/models.py:20 #: apps/accounts/models.py:37 apps/currencies/models.py:26
#: templates/accounts/fragments/list.html:28 #: templates/accounts/fragments/list.html:28
msgid "Exchange Currency" msgid "Exchange Currency"
msgstr "Eenheid Wisselgeld" msgstr "Eenheid Wisselgeld"
#: apps/accounts/models.py:42 apps/currencies/models.py:25 #: apps/accounts/models.py:42 apps/currencies/models.py:31
msgid "Default currency for exchange calculations" msgid "Default currency for exchange calculations"
msgstr "Standaard munteenheid voor wisselberekeningen" msgstr "Standaard munteenheid voor wisselberekeningen"
@@ -152,7 +155,7 @@ msgstr ""
#: apps/accounts/models.py:59 apps/rules/models.py:19 #: apps/accounts/models.py:59 apps/rules/models.py:19
#: apps/transactions/forms.py:59 apps/transactions/forms.py:463 #: apps/transactions/forms.py:59 apps/transactions/forms.py:463
#: apps/transactions/forms.py:708 apps/transactions/models.py:132 #: apps/transactions/forms.py:708 apps/transactions/models.py:132
#: apps/transactions/models.py:274 apps/transactions/models.py:476 #: apps/transactions/models.py:288 apps/transactions/models.py:490
msgid "Account" msgid "Account"
msgstr "Rekening" msgstr "Rekening"
@@ -351,35 +354,36 @@ msgstr "Leegmaken"
msgid "No results..." msgid "No results..."
msgstr "Geen resultaten..." msgstr "Geen resultaten..."
#: apps/currencies/forms.py:16 apps/currencies/models.py:15 #: apps/currencies/forms.py:17 apps/currencies/models.py:21
msgid "Prefix" msgid "Prefix"
msgstr "Voorvoegsel" msgstr "Voorvoegsel"
#: apps/currencies/forms.py:17 apps/currencies/models.py:16 #: apps/currencies/forms.py:18 apps/currencies/models.py:22
msgid "Suffix" msgid "Suffix"
msgstr "Achtervoegsel" msgstr "Achtervoegsel"
#: apps/currencies/forms.py:68 apps/dca/models.py:156 apps/rules/models.py:22 #: apps/currencies/forms.py:69 apps/dca/models.py:156 apps/rules/models.py:22
#: apps/transactions/forms.py:63 apps/transactions/forms.py:319 #: apps/transactions/forms.py:63 apps/transactions/forms.py:319
#: apps/transactions/models.py:142 #: apps/transactions/models.py:142
#: templates/dca/fragments/strategy/details.html:52 #: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10 #: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
msgid "Date" msgid "Date"
msgstr "Datum" msgstr "Datum"
#: apps/currencies/models.py:8 #: apps/currencies/models.py:13
msgid "Currency Code" msgid "Currency Code"
msgstr "Munteenheids Code" msgstr "Munteenheids Code"
#: apps/currencies/models.py:9 #: apps/currencies/models.py:15
msgid "Currency Name" msgid "Currency Name"
msgstr "Munteenheids Naam" msgstr "Munteenheids Naam"
#: apps/currencies/models.py:13 #: apps/currencies/models.py:19
msgid "Decimal Places" msgid "Decimal Places"
msgstr "Cijfers na de komma" msgstr "Cijfers na de komma"
#: apps/currencies/models.py:33 apps/transactions/filters.py:60 #: apps/currencies/models.py:39 apps/transactions/filters.py:60
#: templates/currencies/fragments/list.html:5 #: templates/currencies/fragments/list.html:5
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:119 #: templates/currencies/pages/index.html:4 templates/includes/navbar.html:119
#: templates/includes/navbar.html:121 #: templates/includes/navbar.html:121
@@ -389,36 +393,109 @@ msgstr "Cijfers na de komma"
msgid "Currencies" msgid "Currencies"
msgstr "Munteenheden" msgstr "Munteenheden"
#: apps/currencies/models.py:41 #: apps/currencies/models.py:47
msgid "Currency cannot have itself as exchange currency." msgid "Currency cannot have itself as exchange currency."
msgstr "Munteenheid kan zichzelf niet als ruilmiddel hebben." msgstr "Munteenheid kan zichzelf niet als ruilmiddel hebben."
#: apps/currencies/models.py:52 #: apps/currencies/models.py:58
msgid "From Currency" msgid "From Currency"
msgstr "Van Munteenheid" msgstr "Van Munteenheid"
#: apps/currencies/models.py:58 #: apps/currencies/models.py:64
msgid "To Currency" msgid "To Currency"
msgstr "Naar Munteenheid" msgstr "Naar Munteenheid"
#: apps/currencies/models.py:61 apps/currencies/models.py:66 #: apps/currencies/models.py:67 apps/currencies/models.py:72
msgid "Exchange Rate" msgid "Exchange Rate"
msgstr "Wisselkoers" msgstr "Wisselkoers"
#: apps/currencies/models.py:63 #: apps/currencies/models.py:69
msgid "Date and Time" msgid "Date and Time"
msgstr "Datum en Tijd" msgstr "Datum en Tijd"
#: apps/currencies/models.py:67 templates/exchange_rates/fragments/list.html:6 #: apps/currencies/models.py:73 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:123 #: templates/includes/navbar.html:123
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "Wisselkoersen" msgstr "Wisselkoersen"
#: apps/currencies/models.py:79 #: apps/currencies/models.py:85
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn." msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn."
#: apps/currencies/models.py:97
msgid "Service Name"
msgstr ""
#: apps/currencies/models.py:99
#, fuzzy
#| msgid "Recurrence Type"
msgid "Service Type"
msgstr "Type Terugkeerpatroon"
#: apps/currencies/models.py:101 apps/transactions/models.py:71
#: apps/transactions/models.py:90 apps/transactions/models.py:109
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
#: templates/tags/fragments/list.html:21
msgid "Active"
msgstr "Actief"
#: apps/currencies/models.py:106
msgid "API Key"
msgstr ""
#: apps/currencies/models.py:107
msgid "API key for the service (if required)"
msgstr ""
#: apps/currencies/models.py:112
msgid "Fetch Interval (hours)"
msgstr ""
#: apps/currencies/models.py:115
#, fuzzy
#| msgid "Successful Items"
msgid "Last Successful Fetch"
msgstr "Succesvolle Artikelen"
#: apps/currencies/models.py:120
#, fuzzy
#| msgid "Target Currency"
msgid "Target Currencies"
msgstr "Doel Munteenheid"
#: apps/currencies/models.py:122
msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency."
msgstr ""
#: apps/currencies/models.py:130
#, fuzzy
#| msgid "To Account"
msgid "Target Accounts"
msgstr "Naar rekening"
#: apps/currencies/models.py:132
msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency."
msgstr ""
#: apps/currencies/models.py:139
#, fuzzy
#| msgid "Exchange Rate"
msgid "Exchange Rate Service"
msgstr "Wisselkoers"
#: apps/currencies/models.py:140
#, fuzzy
#| msgid "Exchange Rates"
msgid "Exchange Rate Services"
msgstr "Wisselkoersen"
#: apps/currencies/views/currencies.py:42 #: apps/currencies/views/currencies.py:42
msgid "Currency added successfully" msgid "Currency added successfully"
msgstr "Munteenheid succesvol toegevoegd" msgstr "Munteenheid succesvol toegevoegd"
@@ -443,6 +520,30 @@ msgstr "Wisselkoers succesvol bijgewerkt"
msgid "Exchange rate deleted successfully" msgid "Exchange rate deleted successfully"
msgstr "Wisselkoers succesvol verwijderd" msgstr "Wisselkoers succesvol verwijderd"
#: apps/currencies/views/exchange_rates_services.py:46
#, fuzzy
#| msgid "Rule added successfully"
msgid "Service added successfully"
msgstr "Regel succesvol toegevoegd"
#: apps/currencies/views/exchange_rates_services.py:74
#, fuzzy
#| msgid "Rule updated successfully"
msgid "Service updated successfully"
msgstr "Regel succesvol bijgewerkt"
#: apps/currencies/views/exchange_rates_services.py:100
#, fuzzy
#| msgid "Rule deleted successfully"
msgid "Service deleted successfully"
msgstr "Regel succesvol verwijderd"
#: apps/currencies/views/exchange_rates_services.py:115
#, fuzzy
#| msgid "Rule updated successfully"
msgid "Services queued successfully"
msgstr "Regel succesvol bijgewerkt"
#: apps/dca/models.py:17 #: apps/dca/models.py:17
msgid "Target Currency" msgid "Target Currency"
msgstr "Doel Munteenheid" msgstr "Doel Munteenheid"
@@ -453,7 +554,7 @@ msgstr "Betaal Munteenheid"
#: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/models.py:26 #: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/models.py:26
#: apps/transactions/forms.py:333 apps/transactions/models.py:155 #: apps/transactions/forms.py:333 apps/transactions/models.py:155
#: apps/transactions/models.py:323 apps/transactions/models.py:504 #: apps/transactions/models.py:337 apps/transactions/models.py:518
msgid "Notes" msgid "Notes"
msgstr "Opmerkingen" msgstr "Opmerkingen"
@@ -617,7 +718,7 @@ msgstr "Een waarde voor dit veld bestaat al in de regel."
#: apps/rules/models.py:10 apps/rules/models.py:25 #: apps/rules/models.py:10 apps/rules/models.py:25
#: apps/transactions/forms.py:325 apps/transactions/models.py:153 #: apps/transactions/forms.py:325 apps/transactions/models.py:153
#: apps/transactions/models.py:281 apps/transactions/models.py:490 #: apps/transactions/models.py:295 apps/transactions/models.py:504
msgid "Description" msgid "Description"
msgstr "Beschrijving" msgstr "Beschrijving"
@@ -626,7 +727,7 @@ msgid "Trigger"
msgstr "Trigger" msgstr "Trigger"
#: apps/rules/models.py:20 apps/transactions/models.py:139 #: apps/rules/models.py:20 apps/transactions/models.py:139
#: apps/transactions/models.py:279 apps/transactions/models.py:482 #: apps/transactions/models.py:293 apps/transactions/models.py:496
msgid "Type" msgid "Type"
msgstr "Soort" msgstr "Soort"
@@ -640,21 +741,21 @@ msgstr "Betaald"
#: apps/rules/models.py:23 apps/transactions/forms.py:66 #: apps/rules/models.py:23 apps/transactions/forms.py:66
#: apps/transactions/forms.py:322 apps/transactions/forms.py:492 #: apps/transactions/forms.py:322 apps/transactions/forms.py:492
#: apps/transactions/models.py:143 apps/transactions/models.py:297 #: apps/transactions/models.py:143 apps/transactions/models.py:311
#: apps/transactions/models.py:506 #: apps/transactions/models.py:520
msgid "Reference Date" msgid "Reference Date"
msgstr "Referentiedatum" msgstr "Referentiedatum"
#: apps/rules/models.py:24 apps/transactions/models.py:148 #: apps/rules/models.py:24 apps/transactions/models.py:148
#: apps/transactions/models.py:487 #: apps/transactions/models.py:501
msgid "Amount" msgid "Amount"
msgstr "Bedrag" msgstr "Bedrag"
#: apps/rules/models.py:29 apps/transactions/filters.py:81 #: apps/rules/models.py:29 apps/transactions/filters.py:81
#: apps/transactions/forms.py:55 apps/transactions/forms.py:486 #: apps/transactions/forms.py:55 apps/transactions/forms.py:486
#: apps/transactions/forms.py:731 apps/transactions/models.py:117 #: apps/transactions/forms.py:731 apps/transactions/models.py:117
#: apps/transactions/models.py:170 apps/transactions/models.py:319 #: apps/transactions/models.py:170 apps/transactions/models.py:333
#: apps/transactions/models.py:501 templates/entities/fragments/list.html:5 #: apps/transactions/models.py:515 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:107 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:107
msgid "Entities" msgid "Entities"
msgstr "Bedrijven" msgstr "Bedrijven"
@@ -792,14 +893,6 @@ msgstr "De einddatum moet na de begindatum vallen"
msgid "Mute" msgid "Mute"
msgstr "Gedempt" msgstr "Gedempt"
#: apps/transactions/models.py:71 apps/transactions/models.py:90
#: apps/transactions/models.py:109 templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
#: templates/tags/fragments/list.html:21
msgid "Active"
msgstr "Actief"
#: apps/transactions/models.py:73 #: apps/transactions/models.py:73
msgid "" msgid ""
"Deactivated categories won't be able to be selected when creating new " "Deactivated categories won't be able to be selected when creating new "
@@ -858,11 +951,11 @@ msgstr "Ontvangsten Transactie"
msgid "Expense" msgid "Expense"
msgstr "Uitgave Transactie" msgstr "Uitgave Transactie"
#: apps/transactions/models.py:181 apps/transactions/models.py:326 #: apps/transactions/models.py:181 apps/transactions/models.py:340
msgid "Installment Plan" msgid "Installment Plan"
msgstr "Afbetalingsplan" msgstr "Afbetalingsplan"
#: apps/transactions/models.py:190 apps/transactions/models.py:527 #: apps/transactions/models.py:190 apps/transactions/models.py:541
msgid "Recurring Transaction" msgid "Recurring Transaction"
msgstr "Terugkerende verrichting" msgstr "Terugkerende verrichting"
@@ -894,95 +987,95 @@ msgstr "Verrichting"
msgid "Transactions" msgid "Transactions"
msgstr "Verrichtingen" msgstr "Verrichtingen"
#: apps/transactions/models.py:268 #: apps/transactions/models.py:282
msgid "Yearly" msgid "Yearly"
msgstr "Jaarlijks" msgstr "Jaarlijks"
#: apps/transactions/models.py:269 apps/users/models.py:26 #: apps/transactions/models.py:283 apps/users/models.py:26
#: templates/includes/navbar.html:26 #: templates/includes/navbar.html:26
msgid "Monthly" msgid "Monthly"
msgstr "Maandelijks" msgstr "Maandelijks"
#: apps/transactions/models.py:270 #: apps/transactions/models.py:284
msgid "Weekly" msgid "Weekly"
msgstr "Wekelijks" msgstr "Wekelijks"
#: apps/transactions/models.py:271 #: apps/transactions/models.py:285
msgid "Daily" msgid "Daily"
msgstr "Dagelijks" msgstr "Dagelijks"
#: apps/transactions/models.py:284 #: apps/transactions/models.py:298
msgid "Number of Installments" msgid "Number of Installments"
msgstr "Aantal aflossingen" msgstr "Aantal aflossingen"
#: apps/transactions/models.py:289 #: apps/transactions/models.py:303
msgid "Installment Start" msgid "Installment Start"
msgstr "Begin afbetaling" msgstr "Begin afbetaling"
#: apps/transactions/models.py:290 #: apps/transactions/models.py:304
msgid "The installment number to start counting from" msgid "The installment number to start counting from"
msgstr "Het nummer van de aflevering om mee te beginnen" msgstr "Het nummer van de aflevering om mee te beginnen"
#: apps/transactions/models.py:295 apps/transactions/models.py:510 #: apps/transactions/models.py:309 apps/transactions/models.py:524
msgid "Start Date" msgid "Start Date"
msgstr "Startdatum" msgstr "Startdatum"
#: apps/transactions/models.py:299 apps/transactions/models.py:511 #: apps/transactions/models.py:313 apps/transactions/models.py:525
msgid "End Date" msgid "End Date"
msgstr "Einddatum" msgstr "Einddatum"
#: apps/transactions/models.py:304 #: apps/transactions/models.py:318
msgid "Recurrence" msgid "Recurrence"
msgstr "Terugkeerpatroon" msgstr "Terugkeerpatroon"
#: apps/transactions/models.py:307 #: apps/transactions/models.py:321
msgid "Installment Amount" msgid "Installment Amount"
msgstr "Termijnbedrag" msgstr "Termijnbedrag"
#: apps/transactions/models.py:327 templates/includes/navbar.html:69 #: apps/transactions/models.py:341 templates/includes/navbar.html:69
#: templates/installment_plans/fragments/list.html:5 #: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4 #: templates/installment_plans/pages/index.html:4
msgid "Installment Plans" msgid "Installment Plans"
msgstr "Afbetalingsplannen" msgstr "Afbetalingsplannen"
#: apps/transactions/models.py:469 #: apps/transactions/models.py:483
msgid "day(s)" msgid "day(s)"
msgstr "dag(en)" msgstr "dag(en)"
#: apps/transactions/models.py:470 #: apps/transactions/models.py:484
msgid "week(s)" msgid "week(s)"
msgstr "we(e)k(en)" msgstr "we(e)k(en)"
#: apps/transactions/models.py:471 #: apps/transactions/models.py:485
msgid "month(s)" msgid "month(s)"
msgstr "maand(en)" msgstr "maand(en)"
#: apps/transactions/models.py:472 #: apps/transactions/models.py:486
msgid "year(s)" msgid "year(s)"
msgstr "ja(a)r(en)" msgstr "ja(a)r(en)"
#: apps/transactions/models.py:474 #: apps/transactions/models.py:488
#: templates/recurring_transactions/fragments/list.html:24 #: templates/recurring_transactions/fragments/list.html:24
msgid "Paused" msgid "Paused"
msgstr "Gepauzeerd" msgstr "Gepauzeerd"
#: apps/transactions/models.py:513 #: apps/transactions/models.py:527
msgid "Recurrence Type" msgid "Recurrence Type"
msgstr "Type Terugkeerpatroon" msgstr "Type Terugkeerpatroon"
#: apps/transactions/models.py:516 #: apps/transactions/models.py:530
msgid "Recurrence Interval" msgid "Recurrence Interval"
msgstr "Terugkeer Interval" msgstr "Terugkeer Interval"
#: apps/transactions/models.py:520 #: apps/transactions/models.py:534
msgid "Last Generated Date" msgid "Last Generated Date"
msgstr "Laatste Gegenereerde Datum" msgstr "Laatste Gegenereerde Datum"
#: apps/transactions/models.py:523 #: apps/transactions/models.py:537
msgid "Last Generated Reference Date" msgid "Last Generated Reference Date"
msgstr "Laatste Gegenereerde Referentiedatum" msgstr "Laatste Gegenereerde Referentiedatum"
#: apps/transactions/models.py:528 templates/includes/navbar.html:71 #: apps/transactions/models.py:542 templates/includes/navbar.html:71
#: templates/recurring_transactions/fragments/list.html:5 #: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4 #: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions" msgid "Recurring Transactions"
@@ -1187,15 +1280,15 @@ msgstr "Deze gebruiker is gedeactiveerd"
msgid "Default" msgid "Default"
msgstr "Standaard" msgstr "Standaard"
#: apps/users/forms.py:91 apps/users/models.py:40 #: apps/users/forms.py:91 apps/users/models.py:41
msgid "Date Format" msgid "Date Format"
msgstr "Datumnotatie" msgstr "Datumnotatie"
#: apps/users/forms.py:96 apps/users/models.py:45 #: apps/users/forms.py:96 apps/users/models.py:46
msgid "Datetime Format" msgid "Datetime Format"
msgstr "Tijdsnotatie" msgstr "Tijdsnotatie"
#: apps/users/forms.py:102 apps/users/models.py:48 #: apps/users/forms.py:102 apps/users/models.py:49
msgid "Number Format" msgid "Number Format"
msgstr "Schrijfwijze Nummers" msgstr "Schrijfwijze Nummers"
@@ -1211,51 +1304,55 @@ msgstr "Jaarlijks per munteenheid"
msgid "Yearly by account" msgid "Yearly by account"
msgstr "Jaarlijks per rekening" msgstr "Jaarlijks per rekening"
#: apps/users/models.py:29 templates/includes/navbar.html:40 #: apps/users/models.py:29 templates/net_worth/net_worth.html:9
msgid "Net Worth" msgid "Current Net Worth"
msgstr "Netto Waarde" msgstr "Huidige Nettowaarde"
#: apps/users/models.py:30 #: apps/users/models.py:30 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr "Verwachte Nettowaarde"
#: apps/users/models.py:31
msgid "All Transactions" msgid "All Transactions"
msgstr "Alle Verrichtingen" msgstr "Alle Verrichtingen"
#: apps/users/models.py:31 templates/includes/navbar.html:32 #: apps/users/models.py:32 templates/includes/navbar.html:32
msgid "Calendar" msgid "Calendar"
msgstr "Kalender" msgstr "Kalender"
#: apps/users/models.py:53 apps/users/models.py:59 #: apps/users/models.py:54 apps/users/models.py:60
msgid "Auto" msgid "Auto"
msgstr "Automatisch" msgstr "Automatisch"
#: apps/users/models.py:55 #: apps/users/models.py:56
msgid "Language" msgid "Language"
msgstr "Taal" msgstr "Taal"
#: apps/users/models.py:61 #: apps/users/models.py:62
msgid "Time Zone" msgid "Time Zone"
msgstr "Tijdszone" msgstr "Tijdszone"
#: apps/users/models.py:67 #: apps/users/models.py:68
msgid "Start page" msgid "Start page"
msgstr "Startpagina" msgstr "Startpagina"
#: apps/users/views.py:60 #: apps/users/views.py:62
msgid "Transaction amounts are now hidden" msgid "Transaction amounts are now hidden"
msgstr "Verrichtingsbedragen worden nu verborgen" msgstr "Verrichtingsbedragen worden nu verborgen"
#: apps/users/views.py:63 #: apps/users/views.py:65
msgid "Transaction amounts are now displayed" msgid "Transaction amounts are now displayed"
msgstr "Verrichtingsbedragen worden nu weergegeven" msgstr "Verrichtingsbedragen worden nu weergegeven"
#: apps/users/views.py:81 #: apps/users/views.py:83
msgid "Sounds are now muted" msgid "Sounds are now muted"
msgstr "De Geluiden zijn nu gedempt" msgstr "De Geluiden zijn nu gedempt"
#: apps/users/views.py:84 #: apps/users/views.py:86
msgid "Sounds will now play" msgid "Sounds will now play"
msgstr "De geluiden worden nu afgespeeld" msgstr "De geluiden worden nu afgespeeld"
#: apps/users/views.py:100 #: apps/users/views.py:102
msgid "Your settings have been updated" msgid "Your settings have been updated"
msgstr "Jouw instellingen zijn bijgewerkt" msgstr "Jouw instellingen zijn bijgewerkt"
@@ -1274,6 +1371,8 @@ msgstr "Rekeningsgroep bewerken"
#: templates/dca/fragments/strategy/details.html:63 #: templates/dca/fragments/strategy/details.html:63
#: templates/entities/fragments/table.html:23 #: templates/entities/fragments/table.html:23
#: templates/exchange_rates/fragments/table.html:19 #: templates/exchange_rates/fragments/table.html:19
#: templates/exchange_rates_services/fragments/list.html:43
#: templates/exchange_rates_services/fragments/table.html:19
#: templates/import_app/fragments/profiles/list.html:44 #: templates/import_app/fragments/profiles/list.html:44
#: templates/installment_plans/fragments/table.html:23 #: templates/installment_plans/fragments/table.html:23
#: templates/recurring_transactions/fragments/table.html:25 #: templates/recurring_transactions/fragments/table.html:25
@@ -1292,6 +1391,8 @@ msgstr "Acties"
#: templates/dca/fragments/strategy/list.html:34 #: templates/dca/fragments/strategy/list.html:34
#: templates/entities/fragments/table.html:28 #: templates/entities/fragments/table.html:28
#: templates/exchange_rates/fragments/table.html:23 #: templates/exchange_rates/fragments/table.html:23
#: templates/exchange_rates_services/fragments/list.html:47
#: templates/exchange_rates_services/fragments/table.html:23
#: templates/import_app/fragments/profiles/list.html:48 #: templates/import_app/fragments/profiles/list.html:48
#: templates/installment_plans/fragments/table.html:27 #: templates/installment_plans/fragments/table.html:27
#: templates/recurring_transactions/fragments/table.html:29 #: templates/recurring_transactions/fragments/table.html:29
@@ -1313,6 +1414,8 @@ msgstr "Bijwerken"
#: templates/dca/fragments/strategy/list.html:42 #: templates/dca/fragments/strategy/list.html:42
#: templates/entities/fragments/table.html:36 #: templates/entities/fragments/table.html:36
#: templates/exchange_rates/fragments/table.html:31 #: templates/exchange_rates/fragments/table.html:31
#: templates/exchange_rates_services/fragments/list.html:54
#: templates/exchange_rates_services/fragments/table.html:31
#: templates/import_app/fragments/profiles/list.html:69 #: templates/import_app/fragments/profiles/list.html:69
#: templates/import_app/fragments/runs/list.html:102 #: templates/import_app/fragments/runs/list.html:102
#: templates/installment_plans/fragments/table.html:56 #: templates/installment_plans/fragments/table.html:56
@@ -1336,6 +1439,8 @@ msgstr "Verwijderen"
#: templates/dca/fragments/strategy/list.html:46 #: templates/dca/fragments/strategy/list.html:46
#: templates/entities/fragments/table.html:40 #: templates/entities/fragments/table.html:40
#: templates/exchange_rates/fragments/table.html:36 #: templates/exchange_rates/fragments/table.html:36
#: templates/exchange_rates_services/fragments/list.html:58
#: templates/exchange_rates_services/fragments/table.html:36
#: templates/import_app/fragments/profiles/list.html:73 #: templates/import_app/fragments/profiles/list.html:73
#: templates/import_app/fragments/runs/list.html:106 #: templates/import_app/fragments/runs/list.html:106
#: templates/installment_plans/fragments/table.html:48 #: templates/installment_plans/fragments/table.html:48
@@ -1362,6 +1467,8 @@ msgstr "Weet je het zeker?"
#: templates/dca/fragments/strategy/list.html:47 #: templates/dca/fragments/strategy/list.html:47
#: templates/entities/fragments/table.html:41 #: templates/entities/fragments/table.html:41
#: templates/exchange_rates/fragments/table.html:37 #: templates/exchange_rates/fragments/table.html:37
#: templates/exchange_rates_services/fragments/list.html:59
#: templates/exchange_rates_services/fragments/table.html:37
#: templates/import_app/fragments/profiles/list.html:74 #: templates/import_app/fragments/profiles/list.html:74
#: templates/rules/fragments/list.html:49 #: templates/rules/fragments/list.html:49
#: templates/rules/fragments/transaction_rule/view.html:61 #: templates/rules/fragments/transaction_rule/view.html:61
@@ -1379,6 +1486,8 @@ msgstr "Je kunt dit niet meer terugdraaien!"
#: templates/dca/fragments/strategy/list.html:48 #: templates/dca/fragments/strategy/list.html:48
#: templates/entities/fragments/table.html:42 #: templates/entities/fragments/table.html:42
#: templates/exchange_rates/fragments/table.html:38 #: templates/exchange_rates/fragments/table.html:38
#: templates/exchange_rates_services/fragments/list.html:60
#: templates/exchange_rates_services/fragments/table.html:38
#: templates/import_app/fragments/profiles/list.html:75 #: templates/import_app/fragments/profiles/list.html:75
#: templates/import_app/fragments/runs/list.html:108 #: templates/import_app/fragments/runs/list.html:108
#: templates/installment_plans/fragments/table.html:62 #: templates/installment_plans/fragments/table.html:62
@@ -1510,37 +1619,37 @@ msgid "Restore"
msgstr "" msgstr ""
#: templates/cotton/ui/account_card.html:15 #: templates/cotton/ui/account_card.html:15
#: templates/cotton/ui/currency_card.html:13 #: templates/cotton/ui/currency_card.html:10
msgid "projected income" msgid "projected income"
msgstr "verwachte inkomsten" msgstr "verwachte inkomsten"
#: templates/cotton/ui/account_card.html:37 #: templates/cotton/ui/account_card.html:37
#: templates/cotton/ui/currency_card.html:35 #: templates/cotton/ui/currency_card.html:32
msgid "projected expenses" msgid "projected expenses"
msgstr "verwachte uitgaven" msgstr "verwachte uitgaven"
#: templates/cotton/ui/account_card.html:61 #: templates/cotton/ui/account_card.html:61
#: templates/cotton/ui/currency_card.html:59 #: templates/cotton/ui/currency_card.html:56
msgid "projected total" msgid "projected total"
msgstr "verwachte totaal" msgstr "verwachte totaal"
#: templates/cotton/ui/account_card.html:86 #: templates/cotton/ui/account_card.html:86
#: templates/cotton/ui/currency_card.html:84 #: templates/cotton/ui/currency_card.html:81
msgid "current income" msgid "current income"
msgstr "huidige inkomsten" msgstr "huidige inkomsten"
#: templates/cotton/ui/account_card.html:108 #: templates/cotton/ui/account_card.html:108
#: templates/cotton/ui/currency_card.html:106 #: templates/cotton/ui/currency_card.html:103
msgid "current expenses" msgid "current expenses"
msgstr "huidige uitgaven" msgstr "huidige uitgaven"
#: templates/cotton/ui/account_card.html:130 #: templates/cotton/ui/account_card.html:130
#: templates/cotton/ui/currency_card.html:128 #: templates/cotton/ui/currency_card.html:125
msgid "current total" msgid "current total"
msgstr "huidige totaal" msgstr "huidige totaal"
#: templates/cotton/ui/account_card.html:156 #: templates/cotton/ui/account_card.html:156
#: templates/cotton/ui/currency_card.html:154 #: templates/cotton/ui/currency_card.html:151
msgid "final total" msgid "final total"
msgstr "eindtotaal" msgstr "eindtotaal"
@@ -1794,10 +1903,12 @@ msgid "No entities"
msgstr "Geen bedrijven" msgstr "Geen bedrijven"
#: templates/exchange_rates/fragments/add.html:5 #: templates/exchange_rates/fragments/add.html:5
#: templates/exchange_rates_services/fragments/add.html:5
msgid "Add exchange rate" msgid "Add exchange rate"
msgstr "Wisselkoers toevoegen" msgstr "Wisselkoers toevoegen"
#: templates/exchange_rates/fragments/edit.html:5 #: templates/exchange_rates/fragments/edit.html:5
#: templates/exchange_rates_services/fragments/edit.html:5
msgid "Edit exchange rate" msgid "Edit exchange rate"
msgstr "Wisselkoers bewerken" msgstr "Wisselkoers bewerken"
@@ -1810,22 +1921,76 @@ msgid "All"
msgstr "Allemaal" msgstr "Allemaal"
#: templates/exchange_rates/fragments/table.html:11 #: templates/exchange_rates/fragments/table.html:11
#: templates/exchange_rates_services/fragments/table.html:11
msgid "Pairing" msgid "Pairing"
msgstr "Koppelen" msgstr "Koppelen"
#: templates/exchange_rates/fragments/table.html:12 #: templates/exchange_rates/fragments/table.html:12
#: templates/exchange_rates_services/fragments/table.html:12
msgid "Rate" msgid "Rate"
msgstr "Tarief" msgstr "Tarief"
#: templates/exchange_rates/fragments/table.html:51 #: templates/exchange_rates/fragments/table.html:51
#: templates/exchange_rates_services/fragments/table.html:51
msgid "No exchange rates" msgid "No exchange rates"
msgstr "Geen wisselkoersen" msgstr "Geen wisselkoersen"
#: templates/exchange_rates/fragments/table.html:58 #: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47 #: templates/transactions/fragments/list_all.html:47
msgid "Page navigation" msgid "Page navigation"
msgstr "Paginanavigatie" msgstr "Paginanavigatie"
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:133
#, fuzzy
#| msgid "Exchange Rates"
msgid "Automatic Exchange Rates"
msgstr "Wisselkoersen"
#: templates/exchange_rates_services/fragments/list.html:21
msgid "Fetch all"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:33
#, fuzzy
#| msgid "Overview"
msgid "Service"
msgstr "Overzicht"
#: templates/exchange_rates_services/fragments/list.html:34
msgid "Targeting"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:35
msgid "Fetch every"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:36
msgid "Last fetch"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:68
#, fuzzy
#| msgid "Currencies"
msgid "currencies"
msgstr "Munteenheden"
#: templates/exchange_rates_services/fragments/list.html:68
#, fuzzy
#| msgid "Accounts"
msgid "accounts"
msgstr "Rekeningen"
#: templates/exchange_rates_services/fragments/list.html:69
msgid "hours"
msgstr ""
#: templates/exchange_rates_services/fragments/list.html:77
msgid "No services configured"
msgstr ""
#: templates/import_app/fragments/profiles/add.html:6 #: templates/import_app/fragments/profiles/add.html:6
msgid "Add new import profile" msgid "Add new import profile"
msgstr "Nieuw importprofiel toevoegen" msgstr "Nieuw importprofiel toevoegen"
@@ -1924,6 +2089,10 @@ msgstr "Navigatie Knop"
msgid "Overview" msgid "Overview"
msgstr "Overzicht" msgstr "Overzicht"
#: templates/includes/navbar.html:40
msgid "Net Worth"
msgstr "Netto Waarde"
#: templates/includes/navbar.html:44 #: templates/includes/navbar.html:44
msgid "Current" msgid "Current"
msgstr "Huidige" msgstr "Huidige"
@@ -1965,15 +2134,15 @@ msgstr "Automatisatie"
msgid "Rules" msgid "Rules"
msgstr "Regels" msgstr "Regels"
#: templates/includes/navbar.html:141 #: templates/includes/navbar.html:143
msgid "Only use this if you know what you're doing" msgid "Only use this if you know what you're doing"
msgstr "Gebruik dit alleen als je weet wat je doet" msgstr "Gebruik dit alleen als je weet wat je doet"
#: templates/includes/navbar.html:142 #: templates/includes/navbar.html:144
msgid "Django Admin" msgid "Django Admin"
msgstr "Django Beheerder" msgstr "Django Beheerder"
#: templates/includes/navbar.html:151 #: templates/includes/navbar.html:153
msgid "Calculator" msgid "Calculator"
msgstr "Rekenmachine" msgstr "Rekenmachine"
@@ -2142,14 +2311,6 @@ msgstr "Oudste eerst"
msgid "Newest first" msgid "Newest first"
msgstr "Nieuwste eerst" msgstr "Nieuwste eerst"
#: templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr "Huidige Nettowaarde"
#: templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr "Verwachte Nettowaarde"
#: templates/net_worth/net_worth.html:17 #: templates/net_worth/net_worth.html:17
#: templates/yearly_overview/pages/overview_by_currency.html:9 #: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency" msgid "By currency"
@@ -2385,3 +2546,8 @@ msgstr "Jaaroverzicht"
#: templates/yearly_overview/pages/overview_by_currency.html:63 #: templates/yearly_overview/pages/overview_by_currency.html:63
msgid "Year" msgid "Year"
msgstr "Jaar" msgstr "Jaar"
#, fuzzy
#~| msgid "Exchange rate deleted successfully"
#~ msgid "Exchange rates queued to be fetched successfully"
#~ msgstr "Wisselkoers succesvol verwijderd"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-01 22:04+0000\n" "POT-Creation-Date: 2025-02-04 03:20+0000\n"
"PO-Revision-Date: 2025-02-01 19:04-0300\n" "PO-Revision-Date: 2025-02-04 00:22-0300\n"
"Last-Translator: Herculino Trotta\n" "Last-Translator: Herculino Trotta\n"
"Language-Team: \n" "Language-Team: \n"
"Language: pt_BR\n" "Language: pt_BR\n"
@@ -24,23 +24,24 @@ msgid "Group name"
msgstr "Nome do grupo" msgstr "Nome do grupo"
#: apps/accounts/forms.py:40 apps/accounts/forms.py:96 #: apps/accounts/forms.py:40 apps/accounts/forms.py:96
#: apps/currencies/forms.py:52 apps/currencies/forms.py:90 apps/dca/forms.py:41 #: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/dca/forms.py:93 apps/import_app/forms.py:34 apps/rules/forms.py:45 #: apps/currencies/forms.py:138 apps/dca/forms.py:41 apps/dca/forms.py:93
#: apps/rules/forms.py:87 apps/transactions/forms.py:190 #: apps/import_app/forms.py:34 apps/rules/forms.py:45 apps/rules/forms.py:87
#: apps/transactions/forms.py:257 apps/transactions/forms.py:581 #: apps/transactions/forms.py:190 apps/transactions/forms.py:257
#: apps/transactions/forms.py:624 apps/transactions/forms.py:656 #: apps/transactions/forms.py:581 apps/transactions/forms.py:624
#: apps/transactions/forms.py:691 apps/transactions/forms.py:827 #: apps/transactions/forms.py:656 apps/transactions/forms.py:691
#: apps/transactions/forms.py:827
msgid "Update" msgid "Update"
msgstr "Atualizar" msgstr "Atualizar"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:104 #: apps/accounts/forms.py:48 apps/accounts/forms.py:104
#: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:60 #: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:61
#: apps/currencies/forms.py:98 apps/dca/forms.py:49 apps/dca/forms.py:102 #: apps/currencies/forms.py:99 apps/currencies/forms.py:146
#: apps/import_app/forms.py:42 apps/rules/forms.py:53 apps/rules/forms.py:95 #: apps/dca/forms.py:49 apps/dca/forms.py:102 apps/import_app/forms.py:42
#: apps/transactions/forms.py:174 apps/transactions/forms.py:199 #: apps/rules/forms.py:53 apps/rules/forms.py:95 apps/transactions/forms.py:174
#: apps/transactions/forms.py:589 apps/transactions/forms.py:632 #: apps/transactions/forms.py:199 apps/transactions/forms.py:589
#: apps/transactions/forms.py:664 apps/transactions/forms.py:699 #: apps/transactions/forms.py:632 apps/transactions/forms.py:664
#: apps/transactions/forms.py:835 #: apps/transactions/forms.py:699 apps/transactions/forms.py:835
#: templates/account_groups/fragments/list.html:9 #: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -49,6 +50,7 @@ msgstr "Atualizar"
#: templates/dca/fragments/strategy/list.html:9 #: templates/dca/fragments/strategy/list.html:9
#: templates/entities/fragments/list.html:9 #: templates/entities/fragments/list.html:9
#: templates/exchange_rates/fragments/list.html:10 #: templates/exchange_rates/fragments/list.html:10
#: templates/exchange_rates_services/fragments/list.html:10
#: templates/import_app/fragments/profiles/list.html:7 #: templates/import_app/fragments/profiles/list.html:7
#: templates/import_app/fragments/profiles/list.html:10 #: templates/import_app/fragments/profiles/list.html:10
#: templates/installment_plans/fragments/list.html:9 #: templates/installment_plans/fragments/list.html:9
@@ -70,7 +72,7 @@ msgstr "Novo saldo"
#: apps/transactions/forms.py:39 apps/transactions/forms.py:291 #: apps/transactions/forms.py:39 apps/transactions/forms.py:291
#: apps/transactions/forms.py:298 apps/transactions/forms.py:478 #: apps/transactions/forms.py:298 apps/transactions/forms.py:478
#: apps/transactions/forms.py:723 apps/transactions/models.py:159 #: apps/transactions/forms.py:723 apps/transactions/models.py:159
#: apps/transactions/models.py:314 apps/transactions/models.py:494 #: apps/transactions/models.py:328 apps/transactions/models.py:508
msgid "Category" msgid "Category"
msgstr "Categoria" msgstr "Categoria"
@@ -78,8 +80,8 @@ msgstr "Categoria"
#: apps/transactions/filters.py:74 apps/transactions/forms.py:47 #: apps/transactions/filters.py:74 apps/transactions/forms.py:47
#: apps/transactions/forms.py:307 apps/transactions/forms.py:315 #: apps/transactions/forms.py:307 apps/transactions/forms.py:315
#: apps/transactions/forms.py:471 apps/transactions/forms.py:716 #: apps/transactions/forms.py:471 apps/transactions/forms.py:716
#: apps/transactions/models.py:165 apps/transactions/models.py:316 #: apps/transactions/models.py:165 apps/transactions/models.py:330
#: apps/transactions/models.py:498 templates/includes/navbar.html:105 #: apps/transactions/models.py:512 templates/includes/navbar.html:105
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "Tags" msgstr "Tags"
@@ -93,6 +95,7 @@ msgstr "Tags"
#: templates/categories/fragments/table.html:16 #: templates/categories/fragments/table.html:16
#: templates/currencies/fragments/list.html:26 #: templates/currencies/fragments/list.html:26
#: templates/entities/fragments/table.html:16 #: templates/entities/fragments/table.html:16
#: templates/exchange_rates_services/fragments/list.html:32
#: templates/import_app/fragments/profiles/list.html:36 #: templates/import_app/fragments/profiles/list.html:36
#: templates/installment_plans/fragments/table.html:16 #: templates/installment_plans/fragments/table.html:16
#: templates/recurring_transactions/fragments/table.html:18 #: templates/recurring_transactions/fragments/table.html:18
@@ -111,17 +114,17 @@ msgstr "Grupo da Conta"
msgid "Account Groups" msgid "Account Groups"
msgstr "Grupos da Conta" msgstr "Grupos da Conta"
#: apps/accounts/models.py:31 apps/currencies/models.py:32 #: apps/accounts/models.py:31 apps/currencies/models.py:38
#: templates/accounts/fragments/list.html:27 #: templates/accounts/fragments/list.html:27
msgid "Currency" msgid "Currency"
msgstr "Moeda" msgstr "Moeda"
#: apps/accounts/models.py:37 apps/currencies/models.py:20 #: apps/accounts/models.py:37 apps/currencies/models.py:26
#: templates/accounts/fragments/list.html:28 #: templates/accounts/fragments/list.html:28
msgid "Exchange Currency" msgid "Exchange Currency"
msgstr "Moeda de Câmbio" msgstr "Moeda de Câmbio"
#: apps/accounts/models.py:42 apps/currencies/models.py:25 #: apps/accounts/models.py:42 apps/currencies/models.py:31
msgid "Default currency for exchange calculations" msgid "Default currency for exchange calculations"
msgstr "Moeda padrão para os cálculos de câmbio" msgstr "Moeda padrão para os cálculos de câmbio"
@@ -151,7 +154,7 @@ msgstr ""
#: apps/accounts/models.py:59 apps/rules/models.py:19 #: apps/accounts/models.py:59 apps/rules/models.py:19
#: apps/transactions/forms.py:59 apps/transactions/forms.py:463 #: apps/transactions/forms.py:59 apps/transactions/forms.py:463
#: apps/transactions/forms.py:708 apps/transactions/models.py:132 #: apps/transactions/forms.py:708 apps/transactions/models.py:132
#: apps/transactions/models.py:274 apps/transactions/models.py:476 #: apps/transactions/models.py:288 apps/transactions/models.py:490
msgid "Account" msgid "Account"
msgstr "Conta" msgstr "Conta"
@@ -349,35 +352,36 @@ msgstr "Limpar"
msgid "No results..." msgid "No results..."
msgstr "Sem resultados..." msgstr "Sem resultados..."
#: apps/currencies/forms.py:16 apps/currencies/models.py:15 #: apps/currencies/forms.py:17 apps/currencies/models.py:21
msgid "Prefix" msgid "Prefix"
msgstr "Prefixo" msgstr "Prefixo"
#: apps/currencies/forms.py:17 apps/currencies/models.py:16 #: apps/currencies/forms.py:18 apps/currencies/models.py:22
msgid "Suffix" msgid "Suffix"
msgstr "Sufixo" msgstr "Sufixo"
#: apps/currencies/forms.py:68 apps/dca/models.py:156 apps/rules/models.py:22 #: apps/currencies/forms.py:69 apps/dca/models.py:156 apps/rules/models.py:22
#: apps/transactions/forms.py:63 apps/transactions/forms.py:319 #: apps/transactions/forms.py:63 apps/transactions/forms.py:319
#: apps/transactions/models.py:142 #: apps/transactions/models.py:142
#: templates/dca/fragments/strategy/details.html:52 #: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10 #: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
msgid "Date" msgid "Date"
msgstr "Data" msgstr "Data"
#: apps/currencies/models.py:8 #: apps/currencies/models.py:13
msgid "Currency Code" msgid "Currency Code"
msgstr "Código da Moeda" msgstr "Código da Moeda"
#: apps/currencies/models.py:9 #: apps/currencies/models.py:15
msgid "Currency Name" msgid "Currency Name"
msgstr "Nome da Moeda" msgstr "Nome da Moeda"
#: apps/currencies/models.py:13 #: apps/currencies/models.py:19
msgid "Decimal Places" msgid "Decimal Places"
msgstr "Casas Decimais" msgstr "Casas Decimais"
#: apps/currencies/models.py:33 apps/transactions/filters.py:60 #: apps/currencies/models.py:39 apps/transactions/filters.py:60
#: templates/currencies/fragments/list.html:5 #: templates/currencies/fragments/list.html:5
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:119 #: templates/currencies/pages/index.html:4 templates/includes/navbar.html:119
#: templates/includes/navbar.html:121 #: templates/includes/navbar.html:121
@@ -387,36 +391,102 @@ msgstr "Casas Decimais"
msgid "Currencies" msgid "Currencies"
msgstr "Moedas" msgstr "Moedas"
#: apps/currencies/models.py:41 #: apps/currencies/models.py:47
msgid "Currency cannot have itself as exchange currency." msgid "Currency cannot have itself as exchange currency."
msgstr "A moeda não pode ter a si mesma como moeda de câmbio." msgstr "A moeda não pode ter a si mesma como moeda de câmbio."
#: apps/currencies/models.py:52 #: apps/currencies/models.py:58
msgid "From Currency" msgid "From Currency"
msgstr "Moeda de origem" msgstr "Moeda de origem"
#: apps/currencies/models.py:58 #: apps/currencies/models.py:64
msgid "To Currency" msgid "To Currency"
msgstr "Moeda de destino" msgstr "Moeda de destino"
#: apps/currencies/models.py:61 apps/currencies/models.py:66 #: apps/currencies/models.py:67 apps/currencies/models.py:72
msgid "Exchange Rate" msgid "Exchange Rate"
msgstr "Taxa de Câmbio" msgstr "Taxa de Câmbio"
#: apps/currencies/models.py:63 #: apps/currencies/models.py:69
msgid "Date and Time" msgid "Date and Time"
msgstr "Data e Tempo" msgstr "Data e Tempo"
#: apps/currencies/models.py:67 templates/exchange_rates/fragments/list.html:6 #: apps/currencies/models.py:73 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:123 #: templates/includes/navbar.html:123
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "Taxas de Câmbio" msgstr "Taxas de Câmbio"
#: apps/currencies/models.py:79 #: apps/currencies/models.py:85
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "As moedas De e Para não podem ser as mesmas." msgstr "As moedas De e Para não podem ser as mesmas."
#: apps/currencies/models.py:97
msgid "Service Name"
msgstr "Nome do Serviço"
#: apps/currencies/models.py:99
msgid "Service Type"
msgstr "Tipo de Serviço"
#: apps/currencies/models.py:101 apps/transactions/models.py:71
#: apps/transactions/models.py:90 apps/transactions/models.py:109
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
#: templates/tags/fragments/list.html:21
msgid "Active"
msgstr "Ativo"
#: apps/currencies/models.py:106
msgid "API Key"
msgstr "Chave de API"
#: apps/currencies/models.py:107
msgid "API key for the service (if required)"
msgstr "Chave de API para o serviço (se necessário)"
#: apps/currencies/models.py:112
msgid "Fetch Interval (hours)"
msgstr "Intervalo de busca (horas)"
#: apps/currencies/models.py:115
msgid "Last Successful Fetch"
msgstr "Última execução bem-sucedida"
#: apps/currencies/models.py:120
msgid "Target Currencies"
msgstr "Moedas-alvo"
#: apps/currencies/models.py:122
msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency."
msgstr ""
"Selecione as moedas para as quais deseja obter as taxas de câmbio. As taxas "
"serão obtidas para cada moeda em relação à moeda de câmbio definida."
#: apps/currencies/models.py:130
msgid "Target Accounts"
msgstr "Contas-alvo"
#: apps/currencies/models.py:132
msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency."
msgstr ""
"Selecione as contas para as quais deseja obter taxas de câmbio. As taxas "
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
"definida."
#: apps/currencies/models.py:139
msgid "Exchange Rate Service"
msgstr "Serviço de Taxa de Câmbio"
#: apps/currencies/models.py:140
msgid "Exchange Rate Services"
msgstr "Serviços de Taxa de Câmbio"
#: apps/currencies/views/currencies.py:42 #: apps/currencies/views/currencies.py:42
msgid "Currency added successfully" msgid "Currency added successfully"
msgstr "Moeda adicionada com sucesso" msgstr "Moeda adicionada com sucesso"
@@ -441,6 +511,22 @@ msgstr "Taxa de câmbio atualizada com sucesso"
msgid "Exchange rate deleted successfully" msgid "Exchange rate deleted successfully"
msgstr "Taxa de câmbio apagada com sucesso" msgstr "Taxa de câmbio apagada com sucesso"
#: apps/currencies/views/exchange_rates_services.py:46
msgid "Service added successfully"
msgstr "Serviço adicionado com sucesso"
#: apps/currencies/views/exchange_rates_services.py:74
msgid "Service updated successfully"
msgstr "Serviço atualizado com sucesso"
#: apps/currencies/views/exchange_rates_services.py:100
msgid "Service deleted successfully"
msgstr "Serviço apagado com sucesso"
#: apps/currencies/views/exchange_rates_services.py:115
msgid "Services queued successfully"
msgstr "Serviços marcados para execução com sucesso"
#: apps/dca/models.py:17 #: apps/dca/models.py:17
msgid "Target Currency" msgid "Target Currency"
msgstr "Moeda de destino" msgstr "Moeda de destino"
@@ -451,7 +537,7 @@ msgstr "Moeda de pagamento"
#: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/models.py:26 #: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/models.py:26
#: apps/transactions/forms.py:333 apps/transactions/models.py:155 #: apps/transactions/forms.py:333 apps/transactions/models.py:155
#: apps/transactions/models.py:323 apps/transactions/models.py:504 #: apps/transactions/models.py:337 apps/transactions/models.py:518
msgid "Notes" msgid "Notes"
msgstr "Notas" msgstr "Notas"
@@ -615,7 +701,7 @@ msgstr "Já existe um valor para esse campo na regra."
#: apps/rules/models.py:10 apps/rules/models.py:25 #: apps/rules/models.py:10 apps/rules/models.py:25
#: apps/transactions/forms.py:325 apps/transactions/models.py:153 #: apps/transactions/forms.py:325 apps/transactions/models.py:153
#: apps/transactions/models.py:281 apps/transactions/models.py:490 #: apps/transactions/models.py:295 apps/transactions/models.py:504
msgid "Description" msgid "Description"
msgstr "Descrição" msgstr "Descrição"
@@ -624,7 +710,7 @@ msgid "Trigger"
msgstr "Gatilho" msgstr "Gatilho"
#: apps/rules/models.py:20 apps/transactions/models.py:139 #: apps/rules/models.py:20 apps/transactions/models.py:139
#: apps/transactions/models.py:279 apps/transactions/models.py:482 #: apps/transactions/models.py:293 apps/transactions/models.py:496
msgid "Type" msgid "Type"
msgstr "Tipo" msgstr "Tipo"
@@ -638,21 +724,21 @@ msgstr "Pago"
#: apps/rules/models.py:23 apps/transactions/forms.py:66 #: apps/rules/models.py:23 apps/transactions/forms.py:66
#: apps/transactions/forms.py:322 apps/transactions/forms.py:492 #: apps/transactions/forms.py:322 apps/transactions/forms.py:492
#: apps/transactions/models.py:143 apps/transactions/models.py:297 #: apps/transactions/models.py:143 apps/transactions/models.py:311
#: apps/transactions/models.py:506 #: apps/transactions/models.py:520
msgid "Reference Date" msgid "Reference Date"
msgstr "Data de Referência" msgstr "Data de Referência"
#: apps/rules/models.py:24 apps/transactions/models.py:148 #: apps/rules/models.py:24 apps/transactions/models.py:148
#: apps/transactions/models.py:487 #: apps/transactions/models.py:501
msgid "Amount" msgid "Amount"
msgstr "Quantia" msgstr "Quantia"
#: apps/rules/models.py:29 apps/transactions/filters.py:81 #: apps/rules/models.py:29 apps/transactions/filters.py:81
#: apps/transactions/forms.py:55 apps/transactions/forms.py:486 #: apps/transactions/forms.py:55 apps/transactions/forms.py:486
#: apps/transactions/forms.py:731 apps/transactions/models.py:117 #: apps/transactions/forms.py:731 apps/transactions/models.py:117
#: apps/transactions/models.py:170 apps/transactions/models.py:319 #: apps/transactions/models.py:170 apps/transactions/models.py:333
#: apps/transactions/models.py:501 templates/entities/fragments/list.html:5 #: apps/transactions/models.py:515 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:107 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:107
msgid "Entities" msgid "Entities"
msgstr "Entidades" msgstr "Entidades"
@@ -790,14 +876,6 @@ msgstr "Data final deve ser após data inicial"
msgid "Mute" msgid "Mute"
msgstr "Silenciada" msgstr "Silenciada"
#: apps/transactions/models.py:71 apps/transactions/models.py:90
#: apps/transactions/models.py:109 templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
#: templates/tags/fragments/list.html:21
msgid "Active"
msgstr "Ativo"
#: apps/transactions/models.py:73 #: apps/transactions/models.py:73
msgid "" msgid ""
"Deactivated categories won't be able to be selected when creating new " "Deactivated categories won't be able to be selected when creating new "
@@ -855,11 +933,11 @@ msgstr "Renda"
msgid "Expense" msgid "Expense"
msgstr "Despesa" msgstr "Despesa"
#: apps/transactions/models.py:181 apps/transactions/models.py:326 #: apps/transactions/models.py:181 apps/transactions/models.py:340
msgid "Installment Plan" msgid "Installment Plan"
msgstr "Parcelamento" msgstr "Parcelamento"
#: apps/transactions/models.py:190 apps/transactions/models.py:527 #: apps/transactions/models.py:190 apps/transactions/models.py:541
msgid "Recurring Transaction" msgid "Recurring Transaction"
msgstr "Transação Recorrente" msgstr "Transação Recorrente"
@@ -891,95 +969,95 @@ msgstr "Transação"
msgid "Transactions" msgid "Transactions"
msgstr "Transações" msgstr "Transações"
#: apps/transactions/models.py:268 #: apps/transactions/models.py:282
msgid "Yearly" msgid "Yearly"
msgstr "Anual" msgstr "Anual"
#: apps/transactions/models.py:269 apps/users/models.py:26 #: apps/transactions/models.py:283 apps/users/models.py:26
#: templates/includes/navbar.html:26 #: templates/includes/navbar.html:26
msgid "Monthly" msgid "Monthly"
msgstr "Mensal" msgstr "Mensal"
#: apps/transactions/models.py:270 #: apps/transactions/models.py:284
msgid "Weekly" msgid "Weekly"
msgstr "Semanal" msgstr "Semanal"
#: apps/transactions/models.py:271 #: apps/transactions/models.py:285
msgid "Daily" msgid "Daily"
msgstr "Diária" msgstr "Diária"
#: apps/transactions/models.py:284 #: apps/transactions/models.py:298
msgid "Number of Installments" msgid "Number of Installments"
msgstr "Número de Parcelas" msgstr "Número de Parcelas"
#: apps/transactions/models.py:289 #: apps/transactions/models.py:303
msgid "Installment Start" msgid "Installment Start"
msgstr "Parcela inicial" msgstr "Parcela inicial"
#: apps/transactions/models.py:290 #: apps/transactions/models.py:304
msgid "The installment number to start counting from" msgid "The installment number to start counting from"
msgstr "O número da parcela a partir do qual se inicia a contagem" msgstr "O número da parcela a partir do qual se inicia a contagem"
#: apps/transactions/models.py:295 apps/transactions/models.py:510 #: apps/transactions/models.py:309 apps/transactions/models.py:524
msgid "Start Date" msgid "Start Date"
msgstr "Data de Início" msgstr "Data de Início"
#: apps/transactions/models.py:299 apps/transactions/models.py:511 #: apps/transactions/models.py:313 apps/transactions/models.py:525
msgid "End Date" msgid "End Date"
msgstr "Data Final" msgstr "Data Final"
#: apps/transactions/models.py:304 #: apps/transactions/models.py:318
msgid "Recurrence" msgid "Recurrence"
msgstr "Recorrência" msgstr "Recorrência"
#: apps/transactions/models.py:307 #: apps/transactions/models.py:321
msgid "Installment Amount" msgid "Installment Amount"
msgstr "Valor da Parcela" msgstr "Valor da Parcela"
#: apps/transactions/models.py:327 templates/includes/navbar.html:69 #: apps/transactions/models.py:341 templates/includes/navbar.html:69
#: templates/installment_plans/fragments/list.html:5 #: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4 #: templates/installment_plans/pages/index.html:4
msgid "Installment Plans" msgid "Installment Plans"
msgstr "Parcelamentos" msgstr "Parcelamentos"
#: apps/transactions/models.py:469 #: apps/transactions/models.py:483
msgid "day(s)" msgid "day(s)"
msgstr "dia(s)" msgstr "dia(s)"
#: apps/transactions/models.py:470 #: apps/transactions/models.py:484
msgid "week(s)" msgid "week(s)"
msgstr "semana(s)" msgstr "semana(s)"
#: apps/transactions/models.py:471 #: apps/transactions/models.py:485
msgid "month(s)" msgid "month(s)"
msgstr "mês(es)" msgstr "mês(es)"
#: apps/transactions/models.py:472 #: apps/transactions/models.py:486
msgid "year(s)" msgid "year(s)"
msgstr "ano(s)" msgstr "ano(s)"
#: apps/transactions/models.py:474 #: apps/transactions/models.py:488
#: templates/recurring_transactions/fragments/list.html:24 #: templates/recurring_transactions/fragments/list.html:24
msgid "Paused" msgid "Paused"
msgstr "Pausado" msgstr "Pausado"
#: apps/transactions/models.py:513 #: apps/transactions/models.py:527
msgid "Recurrence Type" msgid "Recurrence Type"
msgstr "Tipo de recorrência" msgstr "Tipo de recorrência"
#: apps/transactions/models.py:516 #: apps/transactions/models.py:530
msgid "Recurrence Interval" msgid "Recurrence Interval"
msgstr "Intervalo de recorrência" msgstr "Intervalo de recorrência"
#: apps/transactions/models.py:520 #: apps/transactions/models.py:534
msgid "Last Generated Date" msgid "Last Generated Date"
msgstr "Última data gerada" msgstr "Última data gerada"
#: apps/transactions/models.py:523 #: apps/transactions/models.py:537
msgid "Last Generated Reference Date" msgid "Last Generated Reference Date"
msgstr "Última data de referência gerada" msgstr "Última data de referência gerada"
#: apps/transactions/models.py:528 templates/includes/navbar.html:71 #: apps/transactions/models.py:542 templates/includes/navbar.html:71
#: templates/recurring_transactions/fragments/list.html:5 #: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4 #: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions" msgid "Recurring Transactions"
@@ -1180,15 +1258,15 @@ msgstr "Essa conta está desativada"
msgid "Default" msgid "Default"
msgstr "Padrão" msgstr "Padrão"
#: apps/users/forms.py:91 apps/users/models.py:40 #: apps/users/forms.py:91 apps/users/models.py:41
msgid "Date Format" msgid "Date Format"
msgstr "Formato de Data" msgstr "Formato de Data"
#: apps/users/forms.py:96 apps/users/models.py:45 #: apps/users/forms.py:96 apps/users/models.py:46
msgid "Datetime Format" msgid "Datetime Format"
msgstr "Formato de Data e Hora" msgstr "Formato de Data e Hora"
#: apps/users/forms.py:102 apps/users/models.py:48 #: apps/users/forms.py:102 apps/users/models.py:49
msgid "Number Format" msgid "Number Format"
msgstr "Formato de Número" msgstr "Formato de Número"
@@ -1204,51 +1282,55 @@ msgstr "Anual por moeda"
msgid "Yearly by account" msgid "Yearly by account"
msgstr "Anual por conta" msgstr "Anual por conta"
#: apps/users/models.py:29 templates/includes/navbar.html:40 #: apps/users/models.py:29 templates/net_worth/net_worth.html:9
msgid "Net Worth" msgid "Current Net Worth"
msgstr "Patrimônio" msgstr "Patrimônio Atual"
#: apps/users/models.py:30 #: apps/users/models.py:30 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr "Patrimônio Previsto"
#: apps/users/models.py:31
msgid "All Transactions" msgid "All Transactions"
msgstr "Todas as transações" msgstr "Todas as transações"
#: apps/users/models.py:31 templates/includes/navbar.html:32 #: apps/users/models.py:32 templates/includes/navbar.html:32
msgid "Calendar" msgid "Calendar"
msgstr "Calendário" msgstr "Calendário"
#: apps/users/models.py:53 apps/users/models.py:59 #: apps/users/models.py:54 apps/users/models.py:60
msgid "Auto" msgid "Auto"
msgstr "Automático" msgstr "Automático"
#: apps/users/models.py:55 #: apps/users/models.py:56
msgid "Language" msgid "Language"
msgstr "Linguagem" msgstr "Linguagem"
#: apps/users/models.py:61 #: apps/users/models.py:62
msgid "Time Zone" msgid "Time Zone"
msgstr "Fuso horário" msgstr "Fuso horário"
#: apps/users/models.py:67 #: apps/users/models.py:68
msgid "Start page" msgid "Start page"
msgstr "Página inicial" msgstr "Página inicial"
#: apps/users/views.py:60 #: apps/users/views.py:62
msgid "Transaction amounts are now hidden" msgid "Transaction amounts are now hidden"
msgstr "Os valores das transações agora estão ocultos" msgstr "Os valores das transações agora estão ocultos"
#: apps/users/views.py:63 #: apps/users/views.py:65
msgid "Transaction amounts are now displayed" msgid "Transaction amounts are now displayed"
msgstr "Os valores das transações agora estão sendo exibidos" msgstr "Os valores das transações agora estão sendo exibidos"
#: apps/users/views.py:81 #: apps/users/views.py:83
msgid "Sounds are now muted" msgid "Sounds are now muted"
msgstr "Os sons agora estão silenciados" msgstr "Os sons agora estão silenciados"
#: apps/users/views.py:84 #: apps/users/views.py:86
msgid "Sounds will now play" msgid "Sounds will now play"
msgstr "Os sons agora serão reproduzidos" msgstr "Os sons agora serão reproduzidos"
#: apps/users/views.py:100 #: apps/users/views.py:102
msgid "Your settings have been updated" msgid "Your settings have been updated"
msgstr "Suas configurações foram atualizadas" msgstr "Suas configurações foram atualizadas"
@@ -1267,6 +1349,8 @@ msgstr "Editar grupo de conta"
#: templates/dca/fragments/strategy/details.html:63 #: templates/dca/fragments/strategy/details.html:63
#: templates/entities/fragments/table.html:23 #: templates/entities/fragments/table.html:23
#: templates/exchange_rates/fragments/table.html:19 #: templates/exchange_rates/fragments/table.html:19
#: templates/exchange_rates_services/fragments/list.html:43
#: templates/exchange_rates_services/fragments/table.html:19
#: templates/import_app/fragments/profiles/list.html:44 #: templates/import_app/fragments/profiles/list.html:44
#: templates/installment_plans/fragments/table.html:23 #: templates/installment_plans/fragments/table.html:23
#: templates/recurring_transactions/fragments/table.html:25 #: templates/recurring_transactions/fragments/table.html:25
@@ -1285,6 +1369,8 @@ msgstr "Ações"
#: templates/dca/fragments/strategy/list.html:34 #: templates/dca/fragments/strategy/list.html:34
#: templates/entities/fragments/table.html:28 #: templates/entities/fragments/table.html:28
#: templates/exchange_rates/fragments/table.html:23 #: templates/exchange_rates/fragments/table.html:23
#: templates/exchange_rates_services/fragments/list.html:47
#: templates/exchange_rates_services/fragments/table.html:23
#: templates/import_app/fragments/profiles/list.html:48 #: templates/import_app/fragments/profiles/list.html:48
#: templates/installment_plans/fragments/table.html:27 #: templates/installment_plans/fragments/table.html:27
#: templates/recurring_transactions/fragments/table.html:29 #: templates/recurring_transactions/fragments/table.html:29
@@ -1306,6 +1392,8 @@ msgstr "Editar"
#: templates/dca/fragments/strategy/list.html:42 #: templates/dca/fragments/strategy/list.html:42
#: templates/entities/fragments/table.html:36 #: templates/entities/fragments/table.html:36
#: templates/exchange_rates/fragments/table.html:31 #: templates/exchange_rates/fragments/table.html:31
#: templates/exchange_rates_services/fragments/list.html:54
#: templates/exchange_rates_services/fragments/table.html:31
#: templates/import_app/fragments/profiles/list.html:69 #: templates/import_app/fragments/profiles/list.html:69
#: templates/import_app/fragments/runs/list.html:102 #: templates/import_app/fragments/runs/list.html:102
#: templates/installment_plans/fragments/table.html:56 #: templates/installment_plans/fragments/table.html:56
@@ -1329,6 +1417,8 @@ msgstr "Apagar"
#: templates/dca/fragments/strategy/list.html:46 #: templates/dca/fragments/strategy/list.html:46
#: templates/entities/fragments/table.html:40 #: templates/entities/fragments/table.html:40
#: templates/exchange_rates/fragments/table.html:36 #: templates/exchange_rates/fragments/table.html:36
#: templates/exchange_rates_services/fragments/list.html:58
#: templates/exchange_rates_services/fragments/table.html:36
#: templates/import_app/fragments/profiles/list.html:73 #: templates/import_app/fragments/profiles/list.html:73
#: templates/import_app/fragments/runs/list.html:106 #: templates/import_app/fragments/runs/list.html:106
#: templates/installment_plans/fragments/table.html:48 #: templates/installment_plans/fragments/table.html:48
@@ -1355,6 +1445,8 @@ msgstr "Tem certeza?"
#: templates/dca/fragments/strategy/list.html:47 #: templates/dca/fragments/strategy/list.html:47
#: templates/entities/fragments/table.html:41 #: templates/entities/fragments/table.html:41
#: templates/exchange_rates/fragments/table.html:37 #: templates/exchange_rates/fragments/table.html:37
#: templates/exchange_rates_services/fragments/list.html:59
#: templates/exchange_rates_services/fragments/table.html:37
#: templates/import_app/fragments/profiles/list.html:74 #: templates/import_app/fragments/profiles/list.html:74
#: templates/rules/fragments/list.html:49 #: templates/rules/fragments/list.html:49
#: templates/rules/fragments/transaction_rule/view.html:61 #: templates/rules/fragments/transaction_rule/view.html:61
@@ -1372,6 +1464,8 @@ msgstr "Você não será capaz de reverter isso!"
#: templates/dca/fragments/strategy/list.html:48 #: templates/dca/fragments/strategy/list.html:48
#: templates/entities/fragments/table.html:42 #: templates/entities/fragments/table.html:42
#: templates/exchange_rates/fragments/table.html:38 #: templates/exchange_rates/fragments/table.html:38
#: templates/exchange_rates_services/fragments/list.html:60
#: templates/exchange_rates_services/fragments/table.html:38
#: templates/import_app/fragments/profiles/list.html:75 #: templates/import_app/fragments/profiles/list.html:75
#: templates/import_app/fragments/runs/list.html:108 #: templates/import_app/fragments/runs/list.html:108
#: templates/installment_plans/fragments/table.html:62 #: templates/installment_plans/fragments/table.html:62
@@ -1503,37 +1597,37 @@ msgid "Restore"
msgstr "Restaurar" msgstr "Restaurar"
#: templates/cotton/ui/account_card.html:15 #: templates/cotton/ui/account_card.html:15
#: templates/cotton/ui/currency_card.html:13 #: templates/cotton/ui/currency_card.html:10
msgid "projected income" msgid "projected income"
msgstr "renda prevista" msgstr "renda prevista"
#: templates/cotton/ui/account_card.html:37 #: templates/cotton/ui/account_card.html:37
#: templates/cotton/ui/currency_card.html:35 #: templates/cotton/ui/currency_card.html:32
msgid "projected expenses" msgid "projected expenses"
msgstr "despesas previstas" msgstr "despesas previstas"
#: templates/cotton/ui/account_card.html:61 #: templates/cotton/ui/account_card.html:61
#: templates/cotton/ui/currency_card.html:59 #: templates/cotton/ui/currency_card.html:56
msgid "projected total" msgid "projected total"
msgstr "total previsto" msgstr "total previsto"
#: templates/cotton/ui/account_card.html:86 #: templates/cotton/ui/account_card.html:86
#: templates/cotton/ui/currency_card.html:84 #: templates/cotton/ui/currency_card.html:81
msgid "current income" msgid "current income"
msgstr "renda atual" msgstr "renda atual"
#: templates/cotton/ui/account_card.html:108 #: templates/cotton/ui/account_card.html:108
#: templates/cotton/ui/currency_card.html:106 #: templates/cotton/ui/currency_card.html:103
msgid "current expenses" msgid "current expenses"
msgstr "despesas atuais" msgstr "despesas atuais"
#: templates/cotton/ui/account_card.html:130 #: templates/cotton/ui/account_card.html:130
#: templates/cotton/ui/currency_card.html:128 #: templates/cotton/ui/currency_card.html:125
msgid "current total" msgid "current total"
msgstr "total atual" msgstr "total atual"
#: templates/cotton/ui/account_card.html:156 #: templates/cotton/ui/account_card.html:156
#: templates/cotton/ui/currency_card.html:154 #: templates/cotton/ui/currency_card.html:151
msgid "final total" msgid "final total"
msgstr "total final" msgstr "total final"
@@ -1788,10 +1882,12 @@ msgid "No entities"
msgstr "Sem entidades" msgstr "Sem entidades"
#: templates/exchange_rates/fragments/add.html:5 #: templates/exchange_rates/fragments/add.html:5
#: templates/exchange_rates_services/fragments/add.html:5
msgid "Add exchange rate" msgid "Add exchange rate"
msgstr "Adicionar taxa de câmbio" msgstr "Adicionar taxa de câmbio"
#: templates/exchange_rates/fragments/edit.html:5 #: templates/exchange_rates/fragments/edit.html:5
#: templates/exchange_rates_services/fragments/edit.html:5
msgid "Edit exchange rate" msgid "Edit exchange rate"
msgstr "Editar taxa de câmbio" msgstr "Editar taxa de câmbio"
@@ -1804,22 +1900,68 @@ msgid "All"
msgstr "Todas" msgstr "Todas"
#: templates/exchange_rates/fragments/table.html:11 #: templates/exchange_rates/fragments/table.html:11
#: templates/exchange_rates_services/fragments/table.html:11
msgid "Pairing" msgid "Pairing"
msgstr "Pares" msgstr "Pares"
#: templates/exchange_rates/fragments/table.html:12 #: templates/exchange_rates/fragments/table.html:12
#: templates/exchange_rates_services/fragments/table.html:12
msgid "Rate" msgid "Rate"
msgstr "Taxa de Câmbio" msgstr "Taxa de Câmbio"
#: templates/exchange_rates/fragments/table.html:51 #: templates/exchange_rates/fragments/table.html:51
#: templates/exchange_rates_services/fragments/table.html:51
msgid "No exchange rates" msgid "No exchange rates"
msgstr "Nenhuma taxa de câmbio" msgstr "Nenhuma taxa de câmbio"
#: templates/exchange_rates/fragments/table.html:58 #: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47 #: templates/transactions/fragments/list_all.html:47
msgid "Page navigation" msgid "Page navigation"
msgstr "Navegação por página" msgstr "Navegação por página"
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:133
msgid "Automatic Exchange Rates"
msgstr "Taxas de Câmbio Automáticas"
#: templates/exchange_rates_services/fragments/list.html:21
msgid "Fetch all"
msgstr "Executar todos"
#: templates/exchange_rates_services/fragments/list.html:33
msgid "Service"
msgstr "Serviço"
#: templates/exchange_rates_services/fragments/list.html:34
msgid "Targeting"
msgstr "Alvos"
#: templates/exchange_rates_services/fragments/list.html:35
msgid "Fetch every"
msgstr "Buscar a cada"
#: templates/exchange_rates_services/fragments/list.html:36
msgid "Last fetch"
msgstr "Última execução"
#: templates/exchange_rates_services/fragments/list.html:68
msgid "currencies"
msgstr "moedas"
#: templates/exchange_rates_services/fragments/list.html:68
msgid "accounts"
msgstr "contas"
#: templates/exchange_rates_services/fragments/list.html:69
msgid "hours"
msgstr "horas"
#: templates/exchange_rates_services/fragments/list.html:77
msgid "No services configured"
msgstr "Nenhum serviço configurado"
#: templates/import_app/fragments/profiles/add.html:6 #: templates/import_app/fragments/profiles/add.html:6
msgid "Add new import profile" msgid "Add new import profile"
msgstr "Adicionar novo perfil de importação" msgstr "Adicionar novo perfil de importação"
@@ -1919,6 +2061,10 @@ msgstr "Alternar navegação"
msgid "Overview" msgid "Overview"
msgstr "Visão Geral" msgstr "Visão Geral"
#: templates/includes/navbar.html:40
msgid "Net Worth"
msgstr "Patrimônio"
#: templates/includes/navbar.html:44 #: templates/includes/navbar.html:44
msgid "Current" msgid "Current"
msgstr "Atual" msgstr "Atual"
@@ -1960,15 +2106,15 @@ msgstr "Automação"
msgid "Rules" msgid "Rules"
msgstr "Regras" msgstr "Regras"
#: templates/includes/navbar.html:141 #: templates/includes/navbar.html:143
msgid "Only use this if you know what you're doing" msgid "Only use this if you know what you're doing"
msgstr "Só use isso se você souber o que está fazendo" msgstr "Só use isso se você souber o que está fazendo"
#: templates/includes/navbar.html:142 #: templates/includes/navbar.html:144
msgid "Django Admin" msgid "Django Admin"
msgstr "Django Admin" msgstr "Django Admin"
#: templates/includes/navbar.html:151 #: templates/includes/navbar.html:153
msgid "Calculator" msgid "Calculator"
msgstr "Calculadora" msgstr "Calculadora"
@@ -2136,14 +2282,6 @@ msgstr "Mais antigas primeiro"
msgid "Newest first" msgid "Newest first"
msgstr "Mais novas primeiro" msgstr "Mais novas primeiro"
#: templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr "Patrimônio Atual"
#: templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr "Patrimônio Previsto"
#: templates/net_worth/net_worth.html:17 #: templates/net_worth/net_worth.html:17
#: templates/yearly_overview/pages/overview_by_currency.html:9 #: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency" msgid "By currency"
@@ -2373,6 +2511,10 @@ msgstr "Visão Anual"
msgid "Year" msgid "Year"
msgstr "Ano" msgstr "Ano"
#, fuzzy
#~ msgid "Exchange rates queued to be fetched successfully"
#~ msgstr "Taxas de câmbio com sucesso"
#, fuzzy #, fuzzy
#~| msgid "Transaction updated successfully" #~| msgid "Transaction updated successfully"
#~ msgid "{count} transactions updated successfully" #~ msgid "{count} transactions updated successfully"

View File

@@ -0,0 +1,11 @@
{% extends 'extends/offcanvas.html' %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block title %}{% translate 'Add exchange rate' %}{% endblock %}
{% block body %}
<form hx-post="{% url 'automatic_exchange_rate_add' %}" hx-target="#generic-offcanvas" novalidate>
{% crispy form %}
</form>
{% endblock %}

View File

@@ -0,0 +1,11 @@
{% extends 'extends/offcanvas.html' %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block title %}{% translate 'Edit exchange rate' %}{% endblock %}
{% block body %}
<form hx-post="{% url 'automatic_exchange_rate_edit' pk=service.id %}" hx-target="#generic-offcanvas" novalidate>
{% crispy form %}
</form>
{% endblock %}

View File

@@ -0,0 +1,81 @@
{% load currency_display %}
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
{% spaceless %}
<div>{% translate 'Automatic Exchange Rates' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"
hx-get="{% url 'automatic_exchange_rate_add' %}"
hx-target="#generic-offcanvas">
<i class="fa-solid fa-circle-plus fa-fw"></i></a>
</span></div>
{% endspaceless %}
</div>
<div class="card">
<div class="card-header text-body-secondary">
<button type="button" hx-get="{% url 'automatic_exchange_rate_force_fetch' %}"
class="btn btn-outline-primary btn-sm">{% trans 'Fetch all' %}</button>
</div>
<div class="card-body">
{% if services %}
<c-config.search></c-config.search>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th scope="col" class="col-auto"></th>
<th scope="col" class="col-auto"></th>
<th scope="col" class="col-auto">{% translate 'Name' %}</th>
<th scope="col" class="col">{% translate 'Service' %}</th>
<th scope="col" class="col">{% translate 'Targeting' %}</th>
<th scope="col" class="col">{% translate 'Fetch every' %}</th>
<th scope="col" class="col">{% translate 'Last fetch' %}</th>
</tr>
</thead>
<tbody>
{% for service in services %}
<tr class="services">
<td class="col-auto">
<div class="btn-group" role="group" aria-label="{% translate 'Actions' %}">
<a class="btn btn-secondary btn-sm"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Edit" %}"
hx-get="{% url 'automatic_exchange_rate_edit' pk=service.id %}"
hx-target="#generic-offcanvas">
<i class="fa-solid fa-pencil fa-fw"></i></a>
<a class="btn btn-secondary btn-sm text-danger"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Delete" %}"
hx-delete="{% url 'automatic_exchange_rate_delete' pk=service.id %}"
hx-trigger='confirmed'
data-bypass-on-ctrl="true"
data-title="{% translate "Are you sure?" %}"
data-text="{% translate "You won't be able to revert this!" %}"
data-confirm-text="{% translate "Yes, delete it!" %}"
_="install prompt_swal"><i class="fa-solid fa-trash fa-fw"></i></a>
</div>
</td>
<td class="col-auto">{% if service.is_active %}<i class="fa-solid fa-circle text-success"></i>{% else %}
<i class="fa-solid fa-circle text-danger"></i>{% endif %}</td>
<td class="col-auto">{{ service.name }}</td>
<td class="col">{{ service.get_service_type_display }}</td>
<td class="col">{{ service.target_currencies.count }} {% trans 'currencies' %}, {{ service.target_accounts.count }} {% trans 'accounts' %}</td>
<td class="col">{{ service.fetch_interval_hours }} {% trans 'hours' %}</td>
<td class="col">{{ service.last_fetch|date:"SHORT_DATETIME_FORMAT" }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<c-msg.empty title="{% translate "No services configured" %}" remove-padding></c-msg.empty>
{% endif %}
</div>
</div>
</div>

View File

@@ -0,0 +1,132 @@
{% load currency_display %}
{% load i18n %}
<div class="card-body show-loading" hx-get="{% url 'exchange_rates_list_pair' %}" hx-trigger="updated from:window" hx-swap="outerHTML" hx-vals='{"page": "{{ page_obj.number }}", "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'>
{% if page_obj %}
<div class="table-responsive">
<table class="table table-hover text-nowrap">
<thead>
<tr>
<th scope="col" class="col-auto"></th>
<th scope="col" class="col">{% translate 'Date' %}</th>
<th scope="col" class="col">{% translate 'Pairing' %}</th>
<th scope="col" class="col">{% translate 'Rate' %}</th>
</tr>
</thead>
<tbody>
{% for exchange_rate in page_obj %}
<tr class="exchange-rate">
<td class="col-auto">
<div class="btn-group" role="group" aria-label="{% translate 'Actions' %}">
<a class="btn btn-secondary btn-sm"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Edit" %}"
hx-get="{% url 'exchange_rate_edit' pk=exchange_rate.id %}"
hx-target="#generic-offcanvas"
hx-swap="innerHTML">
<i class="fa-solid fa-pencil fa-fw"></i></a>
<a class="btn btn-secondary btn-sm text-danger"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Delete" %}"
hx-delete="{% url 'exchange_rate_delete' pk=exchange_rate.id %}"
hx-trigger='confirmed'
hx-swap="innerHTML"
data-bypass-on-ctrl="true"
data-title="{% translate "Are you sure?" %}"
data-text="{% translate "You won't be able to revert this!" %}"
data-confirm-text="{% translate "Yes, delete it!" %}"
_="install prompt_swal"><i class="fa-solid fa-trash fa-fw"></i></a>
</div>
</td>
<td class="col-3">{{ exchange_rate.date|date:"SHORT_DATETIME_FORMAT" }}</td>
<td class="col-3"><span class="badge rounded-pill text-bg-secondary">{{ exchange_rate.from_currency.name }}</span> x <span class="badge rounded-pill text-bg-secondary">{{ exchange_rate.to_currency.name }}</span></td>
<td class="col-3">1 {{ exchange_rate.from_currency.name }} ≅ {% currency_display amount=exchange_rate.rate prefix=exchange_rate.to_currency.prefix suffix=exchange_rate.to_currency.suffix decimal_places=exchange_rate.to_currency.decimal_places%}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<c-msg.empty title="{% translate "No exchange rates" %}" remove-padding></c-msg.empty>
{% endif %}
{% if page_obj.has_other_pages %}
<div class="mt-auto">
<input value="{{ page_obj.number }}" name="page" type="hidden" id="page">
<nav aria-label="{% translate 'Page navigation' %}">
<ul class="pagination justify-content-center mt-5">
<li class="page-item">
<a class="page-link tw-cursor-pointer {% if not page_obj.has_previous %}disabled{% endif %}"
hx-get="{% if page_obj.has_previous %}{% url 'exchange_rates_list_pair' %}{% endif %}"
hx-vals='{"page": 1, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-include="#filter, #order"
hx-target="#exchange-rates-table"
aria-label="Primeira página"
hx-swap="show:top">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
{% for page_number in page_obj.paginator.page_range %}
{% comment %}
This conditional allows us to display up to 3 pages before and after the current page
If you decide to remove this conditional, all the pages will be displayed
You can change the 3 to any number you want e.g
To display only 5 pagination items, change the 3 to 2 (2 before and 2 after the current page)
{% endcomment %}
{% if page_number <= page_obj.number|add:3 and page_number >= page_obj.number|add:-3 %}
{% if page_obj.number == page_number %}
<li class="page-item active">
<a class="page-link tw-cursor-pointer">
{{ page_number }}
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link tw-cursor-pointer"
hx-get="{% url 'exchange_rates_list_pair' %}"
hx-vals='{"page": {{ page_number }}, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-target="#exchange-rates-table"
hx-swap="show:top">
{{ page_number }}
</a>
</li>
{% endif %}
{% endif %}
{% endfor %}
{% if page_obj.number|add:3 < page_obj.paginator.num_pages %}
<li class="page-item">
<a class="page-link disabled"
aria-label="...">
<span aria-hidden="true">...</span>
</a>
</li>
<li class="page-item">
<a class="page-link tw-cursor-pointer"
hx-get="{% url 'exchange_rates_list_pair' %}" hx-target="#exchange-rates-table"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-include="#filter, #order"
hx-swap="show:top"
aria-label="Última página">
<span aria-hidden="true">{{ page_obj.paginator.num_pages }}</span>
</a>
</li>
{% endif %}
<li class="page-item">
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw-cursor-pointer"
hx-get="{% if page_obj.has_next %}{% url 'exchange_rates_list_pair' %}{% endif %}"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-include="#filter, #order"
hx-swap="show:top"
hx-target="#exchange-rates-table"
aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>
</div>
{% endif %}
</div>

View File

@@ -0,0 +1,8 @@
{% extends "layouts/base.html" %}
{% load i18n %}
{% block title %}{% translate 'Automatic Exchange Rates' %}{% endblock %}
{% block content %}
<div hx-get="{% url 'automatic_exchange_rates_list' %}" hx-trigger="load, updated from:window" class="show-loading"></div>
{% endblock %}

View File

@@ -129,6 +129,8 @@
href="{% url 'rules_index' %}">{% translate 'Rules' %}</a></li> href="{% url 'rules_index' %}">{% translate 'Rules' %}</a></li>
<li><a class="dropdown-item {% active_link views='import_profiles_index' %}" <li><a class="dropdown-item {% active_link views='import_profiles_index' %}"
href="{% url 'import_profiles_index' %}">{% translate 'Import' %} <span class="badge text-bg-primary">beta</span></a></li> href="{% url 'import_profiles_index' %}">{% translate 'Import' %} <span class="badge text-bg-primary">beta</span></a></li>
<li><a class="dropdown-item {% active_link views='automatic_exchange_rates_index' %}"
href="{% url 'automatic_exchange_rates_index' %}">{% translate 'Automatic Exchange Rates' %}</a></li>
<li> <li>
<hr class="dropdown-divider"> <hr class="dropdown-divider">
</li> </li>

View File

@@ -4,11 +4,13 @@
{% javascript_pack 'sweetalert2' attrs="defer" %} {% javascript_pack 'sweetalert2' attrs="defer" %}
{% javascript_pack 'select' attrs="defer" %} {% javascript_pack 'select' attrs="defer" %}
{% javascript_pack 'datepicker' %} {% javascript_pack 'datepicker' %}
{% javascript_pack 'autosize' attrs="defer" %}
{% include 'includes/scripts/hyperscript/init_tom_select.html' %} {% include 'includes/scripts/hyperscript/init_tom_select.html' %}
{% include 'includes/scripts/hyperscript/init_date_picker.html' %} {% include 'includes/scripts/hyperscript/init_date_picker.html' %}
{% include 'includes/scripts/hyperscript/hide_amount.html' %} {% include 'includes/scripts/hyperscript/hide_amount.html' %}
{% include 'includes/scripts/hyperscript/tooltip.html' %} {% include 'includes/scripts/hyperscript/tooltip.html' %}
{% include 'includes/scripts/hyperscript/autosize.html' %}
{% include 'includes/scripts/hyperscript/htmx_error_handler.html' %} {% include 'includes/scripts/hyperscript/htmx_error_handler.html' %}
{% include 'includes/scripts/hyperscript/sounds.html' %} {% include 'includes/scripts/hyperscript/sounds.html' %}
{% include 'includes/scripts/hyperscript/swal.html' %} {% include 'includes/scripts/hyperscript/swal.html' %}

View File

@@ -0,0 +1,7 @@
<script type="text/hyperscript">
on htmx:afterSettle
for elem in <.textarea/>
autosize(elem)
end
end
</script>

View File

@@ -1,5 +1,5 @@
<div id="toasts"> <div id="toasts">
<div class="toast-container position-fixed bottom-0 end-0 p-3" hx-trigger="load, updated from:window" hx-get="{% url 'toasts' %}" hx-swap="beforeend"> <div class="toast-container position-fixed bottom-0 end-0 p-3" hx-trigger="load, updated from:window, toasts from:window" hx-get="{% url 'toasts' %}" hx-swap="beforeend">
</div> </div>
</div> </div>

View File

@@ -1,54 +1,3 @@
import autosize from "autosize/dist/autosize"; import autosize from "autosize/dist/autosize";
let autosize_textareas = document.querySelectorAll('textarea[autosize]'); window.autosize = autosize;
autosize(autosize_textareas);
document.addEventListener('shown.bs.collapse', function () {
autosize.update(autosize_textareas);
});
// UPDATE AUTOSIZE TEXT AREAS FOR FORMS INSIDE HTMX MODALS
document.addEventListener('updated.bs.modal', function () {
let new_autosize_textareas = document.querySelectorAll('textarea[autosize]');
autosize(new_autosize_textareas);
});
let charcount_textareas = document.querySelectorAll('textarea[countchars], input[countchars]');
charcount_textareas.forEach(formElement => {
countTextArea(formElement);
formElement.addEventListener('input', () => countTextArea(formElement));
});
function countTextArea(formElement) {
let name = formElement.name;
let max_chars = null;
if (formElement.dataset.maxChars) {
max_chars = formElement.dataset.maxChars;
} else if (formElement.hasAttribute("maxlength")) {
max_chars = formElement.getAttribute("maxlength");
}
let cur_chars = formElement.value.length;
let wrapper = document.querySelector(`#charcount-${name}`);
let char_counter = document.querySelector(`#char-counter-${name}`);
let max_counter = document.querySelector(`#max-counter-${name}`);
char_counter.textContent = cur_chars;
if (max_counter) {
max_counter.textContent = max_chars;
wrapper.classList.remove("text-bg-warning", "text-bg-normal", "text-bg-success", "text-bg-danger");
if (cur_chars === 0) {
wrapper.classList.add("text-bg-secondary");
} else if (cur_chars > max_chars - 1) {
wrapper.classList.add("text-bg-danger");
} else if (cur_chars < max_chars && cur_chars > max_chars * (90 / 100)) {
wrapper.classList.add("text-bg-warning");
} else if (cur_chars < max_chars - ((max_chars * (10 / 100)) - 1)) {
wrapper.classList.add("text-bg-success");
}
}
}