mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-02-25 08:54:52 +01:00
Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
99c85a56bb | ||
|
|
ab1c074f27 | ||
|
|
abf3a148cc | ||
|
|
2733c92da5 | ||
|
|
9bfbe54ed5 | ||
|
|
5b27dea07c | ||
|
|
791e1000a3 | ||
|
|
7301d9f475 | ||
|
|
47a44e96f8 | ||
|
|
7d247eb737 | ||
|
|
373616e7bb | ||
|
|
bf3c11d582 | ||
|
|
b4b1c10db9 | ||
|
|
5ca531f47d | ||
|
|
07673cb528 | ||
|
|
67c6d81897 | ||
|
|
3c85da46b0 | ||
|
|
d263936be7 | ||
|
|
1524063d5a | ||
|
|
c3a403b8f0 | ||
|
|
1c1018adae | ||
|
|
350d5adf25 | ||
|
|
7e4defb9cc | ||
|
|
7121e4bc09 | ||
|
|
4540e48fe5 | ||
|
|
d06b51421f | ||
|
|
e096912e41 | ||
|
|
f0ad6e16fe | ||
|
|
734a302fa7 | ||
|
|
89b1b7bcb7 | ||
|
|
37b40f89bb | ||
|
|
0c63552d1b | ||
|
|
7db517e848 | ||
|
|
7e3ed6cf94 | ||
|
|
e10a88c00e | ||
|
|
b912a33b93 | ||
|
|
d9fb3627cc | ||
|
|
78ffa68ba4 | ||
|
|
37f4ead058 | ||
|
|
61630fca5b | ||
|
|
910d4c84a3 | ||
|
|
be1f29d8c1 | ||
|
|
9784d840cc | ||
|
|
db5ce13ff3 | ||
|
|
a2b943d949 | ||
|
|
d8098b4486 | ||
|
|
f8cff6623f | ||
|
|
65c61f76ff | ||
|
|
74899f63ab | ||
|
|
66a5e6d613 | ||
|
|
e0ab32ec03 | ||
|
|
a912e4a511 | ||
|
|
57ba672c91 | ||
|
|
20c6989ffb | ||
|
|
c6cd525c49 | ||
|
|
55c4b920ee | ||
|
|
7f8261b9cc | ||
|
|
9102654eab | ||
|
|
1ff49a8a04 | ||
|
|
846dd1fd73 | ||
|
|
9eed3b6692 |
@@ -379,7 +379,7 @@ DEBUG_TOOLBAR_PANELS = [
|
||||
"debug_toolbar.panels.signals.SignalsPanel",
|
||||
"debug_toolbar.panels.redirects.RedirectsPanel",
|
||||
"debug_toolbar.panels.profiling.ProfilingPanel",
|
||||
"cachalot.panels.CachalotPanel",
|
||||
# "cachalot.panels.CachalotPanel",
|
||||
]
|
||||
INTERNAL_IPS = [
|
||||
"127.0.0.1",
|
||||
|
||||
20
app/apps/accounts/migrations/0016_account_untracked_by.py
Normal file
20
app/apps/accounts/migrations/0016_account_untracked_by.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# Generated by Django 5.2.4 on 2025-08-09 05:52
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('accounts', '0015_alter_account_owner_alter_account_shared_with_and_more'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='account',
|
||||
name='untracked_by',
|
||||
field=models.ManyToManyField(blank=True, related_name='untracked_accounts', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
||||
@@ -1,11 +1,11 @@
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import models
|
||||
from django.db.models import Q
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from apps.transactions.models import Transaction
|
||||
from apps.common.middleware.thread_local import get_current_user
|
||||
from apps.common.models import SharedObject, SharedObjectManager
|
||||
from apps.transactions.models import Transaction
|
||||
|
||||
|
||||
class AccountGroup(SharedObject):
|
||||
@@ -62,6 +62,11 @@ class Account(SharedObject):
|
||||
verbose_name=_("Archived"),
|
||||
help_text=_("Archived accounts don't show up nor count towards your net worth"),
|
||||
)
|
||||
untracked_by = models.ManyToManyField(
|
||||
settings.AUTH_USER_MODEL,
|
||||
blank=True,
|
||||
related_name="untracked_accounts",
|
||||
)
|
||||
|
||||
objects = SharedObjectManager()
|
||||
all_objects = models.Manager() # Unfiltered manager
|
||||
@@ -75,6 +80,10 @@ class Account(SharedObject):
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def is_untracked_by(self):
|
||||
user = get_current_user()
|
||||
return self.untracked_by.filter(pk=user.pk).exists()
|
||||
|
||||
def clean(self):
|
||||
super().clean()
|
||||
if self.exchange_currency == self.currency:
|
||||
|
||||
@@ -31,6 +31,11 @@ urlpatterns = [
|
||||
views.account_take_ownership,
|
||||
name="account_take_ownership",
|
||||
),
|
||||
path(
|
||||
"account/<int:pk>/toggle-untracked/",
|
||||
views.account_toggle_untracked,
|
||||
name="account_toggle_untracked",
|
||||
),
|
||||
path("account-groups/", views.account_groups_index, name="account_groups_index"),
|
||||
path("account-groups/list/", views.account_groups_list, name="account_groups_list"),
|
||||
path("account-groups/add/", views.account_group_add, name="account_group_add"),
|
||||
|
||||
@@ -155,6 +155,26 @@ def account_delete(request, pk):
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def account_toggle_untracked(request, pk):
|
||||
account = get_object_or_404(Account, id=pk)
|
||||
if account.is_untracked_by():
|
||||
account.untracked_by.remove(request.user)
|
||||
messages.success(request, _("Account is now tracked"))
|
||||
else:
|
||||
account.untracked_by.add(request.user)
|
||||
messages.success(request, _("Account is now untracked"))
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={
|
||||
"HX-Trigger": "updated",
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
|
||||
@@ -139,7 +139,6 @@ class DynamicModelMultipleChoiceField(forms.ModelMultipleChoiceField):
|
||||
instance.save()
|
||||
return instance
|
||||
except Exception as e:
|
||||
print(e)
|
||||
raise ValidationError(_("Error creating new instance"))
|
||||
|
||||
def clean(self, value):
|
||||
|
||||
@@ -5,7 +5,12 @@ from django.utils.formats import get_format as original_get_format
|
||||
def get_format(format_type=None, lang=None, use_l10n=None):
|
||||
user = get_current_user()
|
||||
|
||||
if user and user.is_authenticated and hasattr(user, "settings") and use_l10n:
|
||||
if (
|
||||
user
|
||||
and user.is_authenticated
|
||||
and hasattr(user, "settings")
|
||||
and use_l10n is not False
|
||||
):
|
||||
user_settings = user.settings
|
||||
if format_type == "THOUSAND_SEPARATOR":
|
||||
number_format = getattr(user_settings, "number_format", None)
|
||||
@@ -13,11 +18,13 @@ def get_format(format_type=None, lang=None, use_l10n=None):
|
||||
return "."
|
||||
elif number_format == "CD":
|
||||
return ","
|
||||
elif number_format == "SD" or number_format == "SC":
|
||||
return " "
|
||||
elif format_type == "DECIMAL_SEPARATOR":
|
||||
number_format = getattr(user_settings, "number_format", None)
|
||||
if number_format == "DC":
|
||||
if number_format == "DC" or number_format == "SC":
|
||||
return ","
|
||||
elif number_format == "CD":
|
||||
elif number_format == "CD" or number_format == "SD":
|
||||
return "."
|
||||
elif format_type == "SHORT_DATE_FORMAT":
|
||||
date_format = getattr(user_settings, "date_format", None)
|
||||
|
||||
@@ -91,6 +91,12 @@ def month_year_picker(request):
|
||||
for date in all_months
|
||||
]
|
||||
|
||||
today_url = (
|
||||
reverse(url, kwargs={"month": current_date.month, "year": current_date.year})
|
||||
if url
|
||||
else ""
|
||||
)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"common/fragments/month_year_picker.html",
|
||||
@@ -98,6 +104,7 @@ def month_year_picker(request):
|
||||
"month_year_data": result,
|
||||
"current_month": current_month,
|
||||
"current_year": current_year,
|
||||
"today_url": today_url,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@@ -35,8 +35,7 @@ class ArbitraryDecimalDisplayNumberInput(forms.TextInput):
|
||||
self.attrs.update(
|
||||
{
|
||||
"x-data": "",
|
||||
"x-mask:dynamic": f"$money($input, '{get_format('DECIMAL_SEPARATOR')}', "
|
||||
f"'{get_format('THOUSAND_SEPARATOR')}', '30')",
|
||||
"x-mask:dynamic": f"$money($input, '{get_format('DECIMAL_SEPARATOR')}', '{get_format('THOUSAND_SEPARATOR')}', '30')",
|
||||
"x-on:keyup": "$el.dispatchEvent(new Event('input'))",
|
||||
}
|
||||
)
|
||||
|
||||
@@ -4,13 +4,7 @@ from datetime import timedelta
|
||||
from django.db.models import QuerySet
|
||||
from django.utils import timezone
|
||||
|
||||
from apps.currencies.exchange_rates.providers import (
|
||||
SynthFinanceProvider,
|
||||
SynthFinanceStockProvider,
|
||||
CoinGeckoFreeProvider,
|
||||
CoinGeckoProProvider,
|
||||
TransitiveRateProvider,
|
||||
)
|
||||
import apps.currencies.exchange_rates.providers as providers
|
||||
from apps.currencies.models import ExchangeRateService, ExchangeRate, Currency
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -18,11 +12,12 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
# Map service types to provider classes
|
||||
PROVIDER_MAPPING = {
|
||||
"synth_finance": SynthFinanceProvider,
|
||||
"synth_finance_stock": SynthFinanceStockProvider,
|
||||
"coingecko_free": CoinGeckoFreeProvider,
|
||||
"coingecko_pro": CoinGeckoProProvider,
|
||||
"transitive": TransitiveRateProvider,
|
||||
"coingecko_free": providers.CoinGeckoFreeProvider,
|
||||
"coingecko_pro": providers.CoinGeckoProProvider,
|
||||
"transitive": providers.TransitiveRateProvider,
|
||||
"frankfurter": providers.FrankfurterProvider,
|
||||
"twelvedata": providers.TwelveDataProvider,
|
||||
"twelvedatamarkets": providers.TwelveDataMarketsProvider,
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -13,70 +13,6 @@ from apps.currencies.exchange_rates.base import ExchangeRateProvider
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SynthFinanceProvider(ExchangeRateProvider):
|
||||
"""Implementation for Synth Finance API (synthfinance.com)"""
|
||||
|
||||
BASE_URL = "https://api.synthfinance.com/rates/live"
|
||||
rates_inverted = False # SynthFinance returns non-inverted rates
|
||||
|
||||
def __init__(self, api_key: str = None):
|
||||
super().__init__(api_key)
|
||||
self.session = requests.Session()
|
||||
self.session.headers.update({"Authorization": f"Bearer {self.api_key}"})
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
results = []
|
||||
currency_groups = {}
|
||||
for currency in target_currencies:
|
||||
if currency.exchange_currency in exchange_currencies:
|
||||
group = currency_groups.setdefault(currency.exchange_currency.code, [])
|
||||
group.append(currency)
|
||||
|
||||
for base_currency, currencies in currency_groups.items():
|
||||
try:
|
||||
to_currencies = ",".join(
|
||||
currency.code
|
||||
for currency in currencies
|
||||
if currency.code != base_currency
|
||||
)
|
||||
response = self.session.get(
|
||||
f"{self.BASE_URL}",
|
||||
params={"from": base_currency, "to": to_currencies},
|
||||
)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
rates = data["data"]["rates"]
|
||||
|
||||
for currency in currencies:
|
||||
if currency.code == base_currency:
|
||||
rate = Decimal("1")
|
||||
else:
|
||||
rate = Decimal(str(rates[currency.code]))
|
||||
# Return the rate as is, without inversion
|
||||
results.append((currency.exchange_currency, currency, rate))
|
||||
|
||||
credits_used = data["meta"]["credits_used"]
|
||||
credits_remaining = data["meta"]["credits_remaining"]
|
||||
logger.info(
|
||||
f"Synth Finance API call: {credits_used} credits used, {credits_remaining} remaining"
|
||||
)
|
||||
except requests.RequestException as e:
|
||||
logger.error(
|
||||
f"Error fetching rates from Synth Finance API for base {base_currency}: {e}"
|
||||
)
|
||||
except KeyError as e:
|
||||
logger.error(
|
||||
f"Unexpected response structure from Synth Finance API for base {base_currency}: {e}"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Unexpected error processing Synth Finance data for base {base_currency}: {e}"
|
||||
)
|
||||
return results
|
||||
|
||||
|
||||
class CoinGeckoFreeProvider(ExchangeRateProvider):
|
||||
"""Implementation for CoinGecko Free API"""
|
||||
|
||||
@@ -152,71 +88,6 @@ class CoinGeckoProProvider(CoinGeckoFreeProvider):
|
||||
self.session.headers.update({"x-cg-pro-api-key": api_key})
|
||||
|
||||
|
||||
class SynthFinanceStockProvider(ExchangeRateProvider):
|
||||
"""Implementation for Synth Finance API Real-Time Prices endpoint (synthfinance.com)"""
|
||||
|
||||
BASE_URL = "https://api.synthfinance.com/tickers"
|
||||
rates_inverted = True
|
||||
|
||||
def __init__(self, api_key: str = None):
|
||||
super().__init__(api_key)
|
||||
self.session = requests.Session()
|
||||
self.session.headers.update(
|
||||
{"Authorization": f"Bearer {self.api_key}", "accept": "application/json"}
|
||||
)
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
results = []
|
||||
|
||||
for currency in target_currencies:
|
||||
if currency.exchange_currency not in exchange_currencies:
|
||||
continue
|
||||
|
||||
try:
|
||||
# Same currency has rate of 1
|
||||
if currency.code == currency.exchange_currency.code:
|
||||
rate = Decimal("1")
|
||||
results.append((currency.exchange_currency, currency, rate))
|
||||
continue
|
||||
|
||||
# Fetch real-time price for this ticker
|
||||
response = self.session.get(
|
||||
f"{self.BASE_URL}/{currency.code}/real-time"
|
||||
)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
|
||||
# Use fair market value as the rate
|
||||
rate = Decimal(data["data"]["fair_market_value"])
|
||||
results.append((currency.exchange_currency, currency, rate))
|
||||
|
||||
# Log API usage
|
||||
credits_used = data["meta"]["credits_used"]
|
||||
credits_remaining = data["meta"]["credits_remaining"]
|
||||
logger.info(
|
||||
f"Synth Finance API call for {currency.code}: {credits_used} credits used, {credits_remaining} remaining"
|
||||
)
|
||||
except requests.RequestException as e:
|
||||
logger.error(
|
||||
f"Error fetching rate from Synth Finance API for ticker {currency.code}: {e}",
|
||||
exc_info=True,
|
||||
)
|
||||
except KeyError as e:
|
||||
logger.error(
|
||||
f"Unexpected response structure from Synth Finance API for ticker {currency.code}: {e}",
|
||||
exc_info=True,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Unexpected error processing Synth Finance data for ticker {currency.code}: {e}",
|
||||
exc_info=True,
|
||||
)
|
||||
|
||||
return results
|
||||
|
||||
|
||||
class TransitiveRateProvider(ExchangeRateProvider):
|
||||
"""Calculates exchange rates through paths of existing rates"""
|
||||
|
||||
@@ -306,3 +177,329 @@ class TransitiveRateProvider(ExchangeRateProvider):
|
||||
queue.append((neighbor, path + [neighbor], current_rate * rate))
|
||||
|
||||
return None, None
|
||||
|
||||
|
||||
class FrankfurterProvider(ExchangeRateProvider):
|
||||
"""Implementation for the Frankfurter API (frankfurter.dev)"""
|
||||
|
||||
BASE_URL = "https://api.frankfurter.dev/v1/latest"
|
||||
rates_inverted = (
|
||||
False # Frankfurter returns non-inverted rates (e.g., 1 EUR = 1.1 USD)
|
||||
)
|
||||
|
||||
def __init__(self, api_key: str = None):
|
||||
"""
|
||||
Initializes the provider. The Frankfurter API does not require an API key,
|
||||
so the api_key parameter is ignored.
|
||||
"""
|
||||
super().__init__(api_key)
|
||||
self.session = requests.Session()
|
||||
|
||||
@classmethod
|
||||
def requires_api_key(cls) -> bool:
|
||||
return False
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
results = []
|
||||
currency_groups = {}
|
||||
# Group target currencies by their exchange (base) currency to minimize API calls
|
||||
for currency in target_currencies:
|
||||
if currency.exchange_currency in exchange_currencies:
|
||||
group = currency_groups.setdefault(currency.exchange_currency.code, [])
|
||||
group.append(currency)
|
||||
|
||||
# Make one API call for each base currency
|
||||
for base_currency, currencies in currency_groups.items():
|
||||
try:
|
||||
# Create a comma-separated list of target currency codes
|
||||
to_currencies = ",".join(
|
||||
currency.code
|
||||
for currency in currencies
|
||||
if currency.code != base_currency
|
||||
)
|
||||
|
||||
# If there are no target currencies other than the base, skip the API call
|
||||
if not to_currencies:
|
||||
# Handle the case where the only request is for the base rate (e.g., USD to USD)
|
||||
for currency in currencies:
|
||||
if currency.code == base_currency:
|
||||
results.append(
|
||||
(currency.exchange_currency, currency, Decimal("1"))
|
||||
)
|
||||
continue
|
||||
|
||||
response = self.session.get(
|
||||
self.BASE_URL,
|
||||
params={"base": base_currency, "symbols": to_currencies},
|
||||
)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
rates = data["rates"]
|
||||
|
||||
# Process the returned rates
|
||||
for currency in currencies:
|
||||
if currency.code == base_currency:
|
||||
# The rate for the base currency to itself is always 1
|
||||
rate = Decimal("1")
|
||||
else:
|
||||
rate = Decimal(str(rates[currency.code]))
|
||||
|
||||
results.append((currency.exchange_currency, currency, rate))
|
||||
|
||||
except requests.RequestException as e:
|
||||
logger.error(
|
||||
f"Error fetching rates from Frankfurter API for base {base_currency}: {e}"
|
||||
)
|
||||
except KeyError as e:
|
||||
logger.error(
|
||||
f"Unexpected response structure from Frankfurter API for base {base_currency}: {e}"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Unexpected error processing Frankfurter data for base {base_currency}: {e}"
|
||||
)
|
||||
return results
|
||||
|
||||
|
||||
class TwelveDataProvider(ExchangeRateProvider):
|
||||
"""Implementation for the Twelve Data API (twelvedata.com)"""
|
||||
|
||||
BASE_URL = "https://api.twelvedata.com/exchange_rate"
|
||||
rates_inverted = (
|
||||
False # The API returns direct rates, e.g., for EUR/USD it's 1 EUR = X USD
|
||||
)
|
||||
|
||||
def __init__(self, api_key: str):
|
||||
"""
|
||||
Initializes the provider with an API key and a requests session.
|
||||
"""
|
||||
super().__init__(api_key)
|
||||
self.session = requests.Session()
|
||||
|
||||
@classmethod
|
||||
def requires_api_key(cls) -> bool:
|
||||
"""This provider requires an API key."""
|
||||
return True
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
"""
|
||||
Fetches exchange rates from the Twelve Data API for the given currency pairs.
|
||||
|
||||
This provider makes one API call for each requested currency pair.
|
||||
"""
|
||||
results = []
|
||||
|
||||
for target_currency in target_currencies:
|
||||
# Ensure the target currency's exchange currency is one we're interested in
|
||||
if target_currency.exchange_currency not in exchange_currencies:
|
||||
continue
|
||||
|
||||
base_currency = target_currency.exchange_currency
|
||||
|
||||
# The exchange rate for the same currency is always 1
|
||||
if base_currency.code == target_currency.code:
|
||||
rate = Decimal("1")
|
||||
results.append((base_currency, target_currency, rate))
|
||||
continue
|
||||
|
||||
# Construct the symbol in the format "BASE/TARGET", e.g., "EUR/USD"
|
||||
symbol = f"{base_currency.code}/{target_currency.code}"
|
||||
|
||||
try:
|
||||
params = {
|
||||
"symbol": symbol,
|
||||
"apikey": self.api_key,
|
||||
}
|
||||
|
||||
response = self.session.get(self.BASE_URL, params=params)
|
||||
response.raise_for_status() # Raise an HTTPError for bad responses (4xx or 5xx)
|
||||
|
||||
data = response.json()
|
||||
|
||||
# The API may return an error message in a JSON object
|
||||
if "rate" not in data:
|
||||
error_message = data.get("message", "Rate not found in response.")
|
||||
logger.error(
|
||||
f"Could not fetch rate for {symbol} from Twelve Data: {error_message}"
|
||||
)
|
||||
continue
|
||||
|
||||
# Convert the rate to a Decimal for precision
|
||||
rate = Decimal(str(data["rate"]))
|
||||
results.append((base_currency, target_currency, rate))
|
||||
|
||||
logger.info(f"Successfully fetched rate for {symbol} from Twelve Data.")
|
||||
|
||||
time.sleep(
|
||||
60
|
||||
) # We sleep every pair as to not step over TwelveData's minute limit
|
||||
|
||||
except requests.RequestException as e:
|
||||
logger.error(
|
||||
f"Error fetching rate from Twelve Data API for symbol {symbol}: {e}"
|
||||
)
|
||||
except KeyError as e:
|
||||
logger.error(
|
||||
f"Unexpected response structure from Twelve Data API for symbol {symbol}: Missing key {e}"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"An unexpected error occurred while processing Twelve Data for {symbol}: {e}"
|
||||
)
|
||||
|
||||
return results
|
||||
|
||||
|
||||
class TwelveDataMarketsProvider(ExchangeRateProvider):
|
||||
"""
|
||||
Provides prices for market instruments (stocks, ETFs, etc.) using the Twelve Data API.
|
||||
|
||||
This provider performs a multi-step process:
|
||||
1. Parses instrument codes which can be symbols, FIGI, CUSIP, or ISIN.
|
||||
2. For CUSIPs, it defaults the currency to USD. For all others, it searches
|
||||
for the instrument to determine its native trading currency.
|
||||
3. Fetches the latest price for the instrument in its native currency.
|
||||
4. Converts the price to the requested target exchange currency.
|
||||
"""
|
||||
|
||||
SYMBOL_SEARCH_URL = "https://api.twelvedata.com/symbol_search"
|
||||
PRICE_URL = "https://api.twelvedata.com/price"
|
||||
EXCHANGE_RATE_URL = "https://api.twelvedata.com/exchange_rate"
|
||||
|
||||
rates_inverted = True
|
||||
|
||||
def __init__(self, api_key: str):
|
||||
super().__init__(api_key)
|
||||
self.session = requests.Session()
|
||||
|
||||
@classmethod
|
||||
def requires_api_key(cls) -> bool:
|
||||
return True
|
||||
|
||||
def _parse_code(self, raw_code: str) -> Tuple[str, str]:
|
||||
"""Parses the raw code to determine its type and value."""
|
||||
if raw_code.startswith("figi:"):
|
||||
return "figi", raw_code.removeprefix("figi:")
|
||||
if raw_code.startswith("cusip:"):
|
||||
return "cusip", raw_code.removeprefix("cusip:")
|
||||
if raw_code.startswith("isin:"):
|
||||
return "isin", raw_code.removeprefix("isin:")
|
||||
return "symbol", raw_code
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
results = []
|
||||
|
||||
for asset in target_currencies:
|
||||
if asset.exchange_currency not in exchange_currencies:
|
||||
continue
|
||||
|
||||
code_type, code_value = self._parse_code(asset.code)
|
||||
original_currency_code = None
|
||||
|
||||
try:
|
||||
# Determine the instrument's native currency
|
||||
if code_type == "cusip":
|
||||
# CUSIP codes always default to USD
|
||||
original_currency_code = "USD"
|
||||
logger.info(f"Defaulting CUSIP {code_value} to USD currency.")
|
||||
else:
|
||||
# For all other types, find currency via symbol search
|
||||
search_params = {"symbol": code_value, "apikey": "demo"}
|
||||
search_res = self.session.get(
|
||||
self.SYMBOL_SEARCH_URL, params=search_params
|
||||
)
|
||||
search_res.raise_for_status()
|
||||
search_data = search_res.json()
|
||||
|
||||
if not search_data.get("data"):
|
||||
logger.warning(
|
||||
f"TwelveDataMarkets: Symbol search for '{code_value}' returned no results."
|
||||
)
|
||||
continue
|
||||
|
||||
instrument_data = search_data["data"][0]
|
||||
original_currency_code = instrument_data.get("currency")
|
||||
|
||||
if not original_currency_code:
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: Could not determine original currency for '{code_value}'."
|
||||
)
|
||||
continue
|
||||
|
||||
# Get the instrument's price in its native currency
|
||||
price_params = {code_type: code_value, "apikey": self.api_key}
|
||||
price_res = self.session.get(self.PRICE_URL, params=price_params)
|
||||
price_res.raise_for_status()
|
||||
price_data = price_res.json()
|
||||
|
||||
if "price" not in price_data:
|
||||
error_message = price_data.get(
|
||||
"message", "Price key not found in response"
|
||||
)
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: Could not get price for {code_type} '{code_value}': {error_message}"
|
||||
)
|
||||
continue
|
||||
|
||||
price_in_original_currency = Decimal(price_data["price"])
|
||||
|
||||
# Convert price to the target exchange currency
|
||||
target_exchange_currency = asset.exchange_currency
|
||||
|
||||
if (
|
||||
original_currency_code.upper()
|
||||
== target_exchange_currency.code.upper()
|
||||
):
|
||||
final_price = price_in_original_currency
|
||||
else:
|
||||
rate_symbol = (
|
||||
f"{original_currency_code}/{target_exchange_currency.code}"
|
||||
)
|
||||
rate_params = {"symbol": rate_symbol, "apikey": self.api_key}
|
||||
rate_res = self.session.get(
|
||||
self.EXCHANGE_RATE_URL, params=rate_params
|
||||
)
|
||||
rate_res.raise_for_status()
|
||||
rate_data = rate_res.json()
|
||||
|
||||
if "rate" not in rate_data:
|
||||
error_message = rate_data.get(
|
||||
"message", "Rate key not found in response"
|
||||
)
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: Could not get conversion rate for '{rate_symbol}': {error_message}"
|
||||
)
|
||||
continue
|
||||
|
||||
conversion_rate = Decimal(str(rate_data["rate"]))
|
||||
final_price = price_in_original_currency * conversion_rate
|
||||
|
||||
results.append((target_exchange_currency, asset, final_price))
|
||||
logger.info(
|
||||
f"Successfully processed price for {asset.code} as {final_price} {target_exchange_currency.code}"
|
||||
)
|
||||
|
||||
time.sleep(
|
||||
60
|
||||
) # We sleep every pair as to not step over TwelveData's minute limit
|
||||
|
||||
except requests.RequestException as e:
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: API request failed for {code_value}: {e}"
|
||||
)
|
||||
except (KeyError, IndexError) as e:
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: Error processing API response for {code_value}: {e}"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"TwelveDataMarkets: An unexpected error occurred for {code_value}: {e}"
|
||||
)
|
||||
|
||||
return results
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-16 22:18
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0016_alter_exchangerate_automatic'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exchangerateservice',
|
||||
name='service_type',
|
||||
field=models.CharField(choices=[('synth_finance', 'Synth Finance'), ('synth_finance_stock', 'Synth Finance Stock'), ('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter')], max_length=255, verbose_name='Service Type'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-17 03:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0017_alter_exchangerateservice_service_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exchangerateservice',
|
||||
name='service_type',
|
||||
field=models.CharField(choices=[('synth_finance', 'Synth Finance'), ('synth_finance_stock', 'Synth Finance Stock'), ('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter'), ('twelvedata', 'TwelveData')], max_length=255, verbose_name='Service Type'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-17 06:01
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0018_alter_exchangerateservice_service_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exchangerateservice',
|
||||
name='service_type',
|
||||
field=models.CharField(choices=[('synth_finance', 'Synth Finance'), ('synth_finance_stock', 'Synth Finance Stock'), ('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter'), ('twelvedata', 'TwelveData'), ('twelvedatamarkets', 'TwelveData Markets')], max_length=255, verbose_name='Service Type'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,51 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-17 06:25
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
# The new value we are migrating to
|
||||
NEW_SERVICE_TYPE = "frankfurter"
|
||||
# The old values we are deprecating
|
||||
OLD_SERVICE_TYPE_TO_UPDATE = "synth_finance"
|
||||
OLD_SERVICE_TYPE_TO_DELETE = "synth_finance_stock"
|
||||
|
||||
|
||||
def forwards_func(apps, schema_editor):
|
||||
"""
|
||||
Forward migration:
|
||||
- Deletes all ExchangeRateService instances with service_type 'synth_finance_stock'.
|
||||
- Updates all ExchangeRateService instances with service_type 'synth_finance' to 'frankfurter'.
|
||||
"""
|
||||
ExchangeRateService = apps.get_model("currencies", "ExchangeRateService")
|
||||
db_alias = schema_editor.connection.alias
|
||||
|
||||
# 1. Delete the SYNTH_FINANCE_STOCK entries
|
||||
ExchangeRateService.objects.using(db_alias).filter(
|
||||
service_type=OLD_SERVICE_TYPE_TO_DELETE
|
||||
).delete()
|
||||
|
||||
# 2. Update the SYNTH_FINANCE entries to FRANKFURTER
|
||||
ExchangeRateService.objects.using(db_alias).filter(
|
||||
service_type=OLD_SERVICE_TYPE_TO_UPDATE
|
||||
).update(service_type=NEW_SERVICE_TYPE, api_key=None)
|
||||
|
||||
|
||||
def backwards_func(apps, schema_editor):
|
||||
"""
|
||||
Backward migration: This operation is not safely reversible.
|
||||
- We cannot know which 'frankfurter' services were originally 'synth_finance'.
|
||||
- The deleted 'synth_finance_stock' services cannot be recovered.
|
||||
We will leave this function empty to allow migrating backwards without doing anything.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
# Add the previous migration file here
|
||||
("currencies", "0019_alter_exchangerateservice_service_type"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forwards_func, reverse_code=backwards_func),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-17 06:29
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0020_migrate_synth_finance_services'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exchangerateservice',
|
||||
name='service_type',
|
||||
field=models.CharField(choices=[('coingecko_free', 'CoinGecko (Demo/Free)'), ('coingecko_pro', 'CoinGecko (Pro)'), ('transitive', 'Transitive (Calculated from Existing Rates)'), ('frankfurter', 'Frankfurter'), ('twelvedata', 'TwelveData'), ('twelvedatamarkets', 'TwelveData Markets')], max_length=255, verbose_name='Service Type'),
|
||||
),
|
||||
]
|
||||
@@ -94,11 +94,12 @@ class ExchangeRateService(models.Model):
|
||||
"""Configuration for exchange rate services"""
|
||||
|
||||
class ServiceType(models.TextChoices):
|
||||
SYNTH_FINANCE = "synth_finance", "Synth Finance"
|
||||
SYNTH_FINANCE_STOCK = "synth_finance_stock", "Synth Finance Stock"
|
||||
COINGECKO_FREE = "coingecko_free", "CoinGecko (Demo/Free)"
|
||||
COINGECKO_PRO = "coingecko_pro", "CoinGecko (Pro)"
|
||||
TRANSITIVE = "transitive", "Transitive (Calculated from Existing Rates)"
|
||||
FRANKFURTER = "frankfurter", "Frankfurter"
|
||||
TWELVEDATA = "twelvedata", "TwelveData"
|
||||
TWELVEDATA_MARKETS = "twelvedatamarkets", "TwelveData Markets"
|
||||
|
||||
class IntervalType(models.TextChoices):
|
||||
ON = "on", _("On")
|
||||
|
||||
@@ -9,7 +9,9 @@ from apps.currencies.models import Currency
|
||||
from apps.currencies.utils.convert import convert
|
||||
|
||||
|
||||
def get_categories_totals(transactions_queryset, ignore_empty=False):
|
||||
def get_categories_totals(
|
||||
transactions_queryset, ignore_empty=False, show_entities=False
|
||||
):
|
||||
# First get the category totals as before
|
||||
category_currency_metrics = (
|
||||
transactions_queryset.values(
|
||||
@@ -240,6 +242,7 @@ def get_categories_totals(transactions_queryset, ignore_empty=False):
|
||||
result[category_id]["tags"][tag_key] = {
|
||||
"name": tag_name,
|
||||
"currencies": {},
|
||||
"entities": {},
|
||||
}
|
||||
|
||||
currency_id = tag_metric["account__currency"]
|
||||
@@ -319,4 +322,173 @@ def get_categories_totals(transactions_queryset, ignore_empty=False):
|
||||
currency_id
|
||||
] = tag_currency_data
|
||||
|
||||
if show_entities:
|
||||
entity_metrics = transactions_queryset.values(
|
||||
"category",
|
||||
"tags",
|
||||
"entities",
|
||||
"entities__name",
|
||||
"account__currency",
|
||||
"account__currency__code",
|
||||
"account__currency__name",
|
||||
"account__currency__decimal_places",
|
||||
"account__currency__prefix",
|
||||
"account__currency__suffix",
|
||||
"account__currency__exchange_currency",
|
||||
).annotate(
|
||||
expense_current=Coalesce(
|
||||
Sum(
|
||||
Case(
|
||||
When(
|
||||
type=Transaction.Type.EXPENSE, is_paid=True, then="amount"
|
||||
),
|
||||
default=Value(0),
|
||||
output_field=models.DecimalField(),
|
||||
)
|
||||
),
|
||||
Decimal("0"),
|
||||
),
|
||||
expense_projected=Coalesce(
|
||||
Sum(
|
||||
Case(
|
||||
When(
|
||||
type=Transaction.Type.EXPENSE, is_paid=False, then="amount"
|
||||
),
|
||||
default=Value(0),
|
||||
output_field=models.DecimalField(),
|
||||
)
|
||||
),
|
||||
Decimal("0"),
|
||||
),
|
||||
income_current=Coalesce(
|
||||
Sum(
|
||||
Case(
|
||||
When(type=Transaction.Type.INCOME, is_paid=True, then="amount"),
|
||||
default=Value(0),
|
||||
output_field=models.DecimalField(),
|
||||
)
|
||||
),
|
||||
Decimal("0"),
|
||||
),
|
||||
income_projected=Coalesce(
|
||||
Sum(
|
||||
Case(
|
||||
When(
|
||||
type=Transaction.Type.INCOME, is_paid=False, then="amount"
|
||||
),
|
||||
default=Value(0),
|
||||
output_field=models.DecimalField(),
|
||||
)
|
||||
),
|
||||
Decimal("0"),
|
||||
),
|
||||
)
|
||||
|
||||
for entity_metric in entity_metrics:
|
||||
category_id = entity_metric["category"]
|
||||
tag_id = entity_metric["tags"]
|
||||
entity_id = entity_metric["entities"]
|
||||
|
||||
if not entity_id:
|
||||
continue
|
||||
|
||||
if category_id in result:
|
||||
tag_key = tag_id if tag_id is not None else "untagged"
|
||||
if tag_key in result[category_id]["tags"]:
|
||||
entity_key = entity_id
|
||||
entity_name = entity_metric["entities__name"]
|
||||
|
||||
if "entities" not in result[category_id]["tags"][tag_key]:
|
||||
result[category_id]["tags"][tag_key]["entities"] = {}
|
||||
|
||||
if (
|
||||
entity_key
|
||||
not in result[category_id]["tags"][tag_key]["entities"]
|
||||
):
|
||||
result[category_id]["tags"][tag_key]["entities"][entity_key] = {
|
||||
"name": entity_name,
|
||||
"currencies": {},
|
||||
}
|
||||
|
||||
currency_id = entity_metric["account__currency"]
|
||||
|
||||
entity_total_current = (
|
||||
entity_metric["income_current"]
|
||||
- entity_metric["expense_current"]
|
||||
)
|
||||
entity_total_projected = (
|
||||
entity_metric["income_projected"]
|
||||
- entity_metric["expense_projected"]
|
||||
)
|
||||
entity_total_income = (
|
||||
entity_metric["income_current"]
|
||||
+ entity_metric["income_projected"]
|
||||
)
|
||||
entity_total_expense = (
|
||||
entity_metric["expense_current"]
|
||||
+ entity_metric["expense_projected"]
|
||||
)
|
||||
entity_total_final = entity_total_current + entity_total_projected
|
||||
|
||||
entity_currency_data = {
|
||||
"currency": {
|
||||
"code": entity_metric["account__currency__code"],
|
||||
"name": entity_metric["account__currency__name"],
|
||||
"decimal_places": entity_metric[
|
||||
"account__currency__decimal_places"
|
||||
],
|
||||
"prefix": entity_metric["account__currency__prefix"],
|
||||
"suffix": entity_metric["account__currency__suffix"],
|
||||
},
|
||||
"expense_current": entity_metric["expense_current"],
|
||||
"expense_projected": entity_metric["expense_projected"],
|
||||
"total_expense": entity_total_expense,
|
||||
"income_current": entity_metric["income_current"],
|
||||
"income_projected": entity_metric["income_projected"],
|
||||
"total_income": entity_total_income,
|
||||
"total_current": entity_total_current,
|
||||
"total_projected": entity_total_projected,
|
||||
"total_final": entity_total_final,
|
||||
}
|
||||
|
||||
if entity_metric["account__currency__exchange_currency"]:
|
||||
from_currency = Currency.objects.get(id=currency_id)
|
||||
exchange_currency = Currency.objects.get(
|
||||
id=entity_metric["account__currency__exchange_currency"]
|
||||
)
|
||||
|
||||
exchanged = {}
|
||||
for field in [
|
||||
"expense_current",
|
||||
"expense_projected",
|
||||
"income_current",
|
||||
"income_projected",
|
||||
"total_income",
|
||||
"total_expense",
|
||||
"total_current",
|
||||
"total_projected",
|
||||
"total_final",
|
||||
]:
|
||||
amount, prefix, suffix, decimal_places = convert(
|
||||
amount=entity_currency_data[field],
|
||||
from_currency=from_currency,
|
||||
to_currency=exchange_currency,
|
||||
)
|
||||
if amount is not None:
|
||||
exchanged[field] = amount
|
||||
if "currency" not in exchanged:
|
||||
exchanged["currency"] = {
|
||||
"prefix": prefix,
|
||||
"suffix": suffix,
|
||||
"decimal_places": decimal_places,
|
||||
"code": exchange_currency.code,
|
||||
"name": exchange_currency.name,
|
||||
}
|
||||
if exchanged:
|
||||
entity_currency_data["exchanged"] = exchanged
|
||||
|
||||
result[category_id]["tags"][tag_key]["entities"][entity_key][
|
||||
"currencies"
|
||||
][currency_id] = entity_currency_data
|
||||
|
||||
return result
|
||||
|
||||
@@ -13,7 +13,9 @@ from apps.insights.forms import (
|
||||
)
|
||||
|
||||
|
||||
def get_transactions(request, include_unpaid=True, include_silent=False):
|
||||
def get_transactions(
|
||||
request, include_unpaid=True, include_silent=False, include_untracked_accounts=False
|
||||
):
|
||||
transactions = Transaction.objects.all()
|
||||
|
||||
filter_type = request.GET.get("type", None)
|
||||
@@ -95,4 +97,9 @@ def get_transactions(request, include_unpaid=True, include_silent=False):
|
||||
Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True)
|
||||
)
|
||||
|
||||
if not include_untracked_accounts:
|
||||
transactions = transactions.exclude(
|
||||
account__in=request.user.untracked_accounts.all()
|
||||
)
|
||||
|
||||
return transactions
|
||||
|
||||
@@ -74,7 +74,7 @@ def index(request):
|
||||
def sankey_by_account(request):
|
||||
# Get filtered transactions
|
||||
|
||||
transactions = get_transactions(request)
|
||||
transactions = get_transactions(request, include_untracked_accounts=True)
|
||||
|
||||
# Generate Sankey data
|
||||
sankey_data = generate_sankey_data_by_account(transactions)
|
||||
@@ -180,6 +180,14 @@ def category_overview(request):
|
||||
else:
|
||||
show_tags = request.session.get("insights_category_explorer_show_tags", True)
|
||||
|
||||
if "show_entities" in request.GET:
|
||||
show_entities = request.GET["show_entities"] == "on"
|
||||
request.session["insights_category_explorer_show_entities"] = show_entities
|
||||
else:
|
||||
show_entities = request.session.get(
|
||||
"insights_category_explorer_show_entities", False
|
||||
)
|
||||
|
||||
if "showing" in request.GET:
|
||||
showing = request.GET["showing"]
|
||||
request.session["insights_category_explorer_showing"] = showing
|
||||
@@ -190,7 +198,9 @@ def category_overview(request):
|
||||
transactions = get_transactions(request, include_silent=True)
|
||||
|
||||
total_table = get_categories_totals(
|
||||
transactions_queryset=transactions, ignore_empty=False
|
||||
transactions_queryset=transactions,
|
||||
ignore_empty=False,
|
||||
show_entities=show_entities,
|
||||
)
|
||||
|
||||
return render(
|
||||
@@ -200,6 +210,7 @@ def category_overview(request):
|
||||
"total_table": total_table,
|
||||
"view_type": view_type,
|
||||
"show_tags": show_tags,
|
||||
"show_entities": show_entities,
|
||||
"showing": showing,
|
||||
},
|
||||
)
|
||||
@@ -239,10 +250,14 @@ def late_transactions(request):
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def emergency_fund(request):
|
||||
transactions_currency_queryset = Transaction.objects.filter(
|
||||
is_paid=True, account__is_archived=False, account__is_asset=False
|
||||
).order_by(
|
||||
"account__currency__name",
|
||||
transactions_currency_queryset = (
|
||||
Transaction.objects.filter(
|
||||
is_paid=True, account__is_archived=False, account__is_asset=False
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
.order_by(
|
||||
"account__currency__name",
|
||||
)
|
||||
)
|
||||
currency_net_worth = calculate_currency_totals(
|
||||
transactions_queryset=transactions_currency_queryset, ignore_empty=False
|
||||
@@ -262,6 +277,7 @@ def emergency_fund(request):
|
||||
category__mute=False,
|
||||
mute=False,
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
.values("reference_date", "account__currency")
|
||||
.annotate(monthly_total=Sum("amount"))
|
||||
)
|
||||
|
||||
@@ -107,9 +107,15 @@ def transactions_list(request, month: int, year: int):
|
||||
@require_http_methods(["GET"])
|
||||
def monthly_summary(request, month: int, year: int):
|
||||
# Base queryset with all required filters
|
||||
base_queryset = Transaction.objects.filter(
|
||||
reference_date__year=year, reference_date__month=month, account__is_asset=False
|
||||
).exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
|
||||
base_queryset = (
|
||||
Transaction.objects.filter(
|
||||
reference_date__year=year,
|
||||
reference_date__month=month,
|
||||
account__is_asset=False,
|
||||
)
|
||||
.exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
)
|
||||
|
||||
data = calculate_currency_totals(base_queryset, ignore_empty=True)
|
||||
percentages = calculate_percentage_distribution(data)
|
||||
@@ -165,10 +171,14 @@ def monthly_account_summary(request, month: int, year: int):
|
||||
@require_http_methods(["GET"])
|
||||
def monthly_currency_summary(request, month: int, year: int):
|
||||
# Base queryset with all required filters
|
||||
base_queryset = Transaction.objects.filter(
|
||||
reference_date__year=year,
|
||||
reference_date__month=month,
|
||||
).exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
|
||||
base_queryset = (
|
||||
Transaction.objects.filter(
|
||||
reference_date__year=year,
|
||||
reference_date__month=month,
|
||||
)
|
||||
.exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
)
|
||||
|
||||
currency_data = calculate_currency_totals(base_queryset.all(), ignore_empty=True)
|
||||
currency_percentages = calculate_percentage_distribution(currency_data)
|
||||
|
||||
@@ -20,17 +20,18 @@ from apps.transactions.utils.calculations import (
|
||||
@require_http_methods(["GET"])
|
||||
def net_worth(request):
|
||||
if "view_type" in request.GET:
|
||||
print(request.GET["view_type"])
|
||||
view_type = request.GET["view_type"]
|
||||
request.session["networth_view_type"] = view_type
|
||||
else:
|
||||
view_type = request.session.get("networth_view_type", "current")
|
||||
|
||||
if view_type == "current":
|
||||
transactions_currency_queryset = Transaction.objects.filter(
|
||||
is_paid=True, account__is_archived=False
|
||||
).order_by(
|
||||
"account__currency__name",
|
||||
transactions_currency_queryset = (
|
||||
Transaction.objects.filter(is_paid=True, account__is_archived=False)
|
||||
.order_by(
|
||||
"account__currency__name",
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
)
|
||||
transactions_account_queryset = Transaction.objects.filter(
|
||||
is_paid=True, account__is_archived=False
|
||||
@@ -39,10 +40,12 @@ def net_worth(request):
|
||||
"account__name",
|
||||
)
|
||||
else:
|
||||
transactions_currency_queryset = Transaction.objects.filter(
|
||||
account__is_archived=False
|
||||
).order_by(
|
||||
"account__currency__name",
|
||||
transactions_currency_queryset = (
|
||||
Transaction.objects.filter(account__is_archived=False)
|
||||
.order_by(
|
||||
"account__currency__name",
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
)
|
||||
transactions_account_queryset = Transaction.objects.filter(
|
||||
account__is_archived=False
|
||||
|
||||
@@ -60,26 +60,20 @@ class TransactionsFilter(django_filters.FilterSet):
|
||||
label=_("Currencies"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
)
|
||||
category = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name="category__name",
|
||||
queryset=TransactionCategory.objects.all(),
|
||||
to_field_name="name",
|
||||
category = django_filters.MultipleChoiceFilter(
|
||||
label=_("Categories"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
method="filter_category",
|
||||
)
|
||||
tags = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name="tags__name",
|
||||
queryset=TransactionTag.objects.all(),
|
||||
to_field_name="name",
|
||||
tags = django_filters.MultipleChoiceFilter(
|
||||
label=_("Tags"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
method="filter_tags",
|
||||
)
|
||||
entities = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name="entities__name",
|
||||
queryset=TransactionEntity.objects.all(),
|
||||
to_field_name="name",
|
||||
entities = django_filters.MultipleChoiceFilter(
|
||||
label=_("Entities"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
method="filter_entities",
|
||||
)
|
||||
is_paid = django_filters.MultipleChoiceFilter(
|
||||
choices=SITUACAO_CHOICES,
|
||||
@@ -125,6 +119,7 @@ class TransactionsFilter(django_filters.FilterSet):
|
||||
"is_paid",
|
||||
"category",
|
||||
"tags",
|
||||
"entities",
|
||||
"date_start",
|
||||
"date_end",
|
||||
"reference_date_start",
|
||||
@@ -186,6 +181,93 @@ class TransactionsFilter(django_filters.FilterSet):
|
||||
self.form.fields["date_end"].widget = AirDatePickerInput()
|
||||
|
||||
self.form.fields["account"].queryset = Account.objects.all()
|
||||
self.form.fields["category"].queryset = TransactionCategory.objects.all()
|
||||
self.form.fields["tags"].queryset = TransactionTag.objects.all()
|
||||
self.form.fields["entities"].queryset = TransactionEntity.objects.all()
|
||||
category_choices = list(
|
||||
TransactionCategory.objects.values_list("name", "name").order_by("name")
|
||||
)
|
||||
custom_choices = [
|
||||
("any", _("Categorized")),
|
||||
("uncategorized", _("Uncategorized")),
|
||||
]
|
||||
self.form.fields["category"].choices = custom_choices + category_choices
|
||||
tag_choices = list(
|
||||
TransactionTag.objects.values_list("name", "name").order_by("name")
|
||||
)
|
||||
custom_tag_choices = [("any", _("Tagged")), ("untagged", _("Untagged"))]
|
||||
self.form.fields["tags"].choices = custom_tag_choices + tag_choices
|
||||
entity_choices = list(
|
||||
TransactionEntity.objects.values_list("name", "name").order_by("name")
|
||||
)
|
||||
custom_entity_choices = [
|
||||
("any", _("Any entity")),
|
||||
("no_entity", _("No entity")),
|
||||
]
|
||||
self.form.fields["entities"].choices = custom_entity_choices + entity_choices
|
||||
|
||||
@staticmethod
|
||||
def filter_category(queryset, name, value):
|
||||
if not value:
|
||||
return queryset
|
||||
|
||||
value = list(value)
|
||||
|
||||
if "any" in value:
|
||||
return queryset.filter(category__isnull=False)
|
||||
|
||||
q = Q()
|
||||
if "uncategorized" in value:
|
||||
q |= Q(category__isnull=True)
|
||||
value.remove("uncategorized")
|
||||
|
||||
if value:
|
||||
q |= Q(category__name__in=value)
|
||||
|
||||
if q.children:
|
||||
return queryset.filter(q)
|
||||
|
||||
return queryset
|
||||
|
||||
@staticmethod
|
||||
def filter_tags(queryset, name, value):
|
||||
if not value:
|
||||
return queryset
|
||||
|
||||
value = list(value)
|
||||
|
||||
if "any" in value:
|
||||
return queryset.filter(tags__isnull=False).distinct()
|
||||
|
||||
q = Q()
|
||||
if "untagged" in value:
|
||||
q |= Q(tags__isnull=True)
|
||||
value.remove("untagged")
|
||||
|
||||
if value:
|
||||
q |= Q(tags__name__in=value)
|
||||
|
||||
if q.children:
|
||||
return queryset.filter(q).distinct()
|
||||
|
||||
return queryset
|
||||
|
||||
@staticmethod
|
||||
def filter_entities(queryset, name, value):
|
||||
if not value:
|
||||
return queryset
|
||||
|
||||
value = list(value)
|
||||
|
||||
if "any" in value:
|
||||
return queryset.filter(entities__isnull=False).distinct()
|
||||
|
||||
q = Q()
|
||||
if "no_entity" in value:
|
||||
q |= Q(entities__isnull=True)
|
||||
value.remove("no_entity")
|
||||
|
||||
if value:
|
||||
q |= Q(entities__name__in=value)
|
||||
|
||||
if q.children:
|
||||
return queryset.filter(q).distinct()
|
||||
|
||||
return queryset
|
||||
|
||||
@@ -589,7 +589,10 @@ def transaction_all_currency_summary(request):
|
||||
|
||||
f = TransactionsFilter(request.GET, queryset=transactions)
|
||||
|
||||
currency_data = calculate_currency_totals(f.qs.all(), ignore_empty=True)
|
||||
currency_data = calculate_currency_totals(
|
||||
f.qs.exclude(account__in=request.user.untracked_accounts.all()),
|
||||
ignore_empty=True,
|
||||
)
|
||||
currency_percentages = calculate_percentage_distribution(currency_data)
|
||||
|
||||
context = {
|
||||
|
||||
@@ -89,6 +89,8 @@ class UserSettingsForm(forms.ModelForm):
|
||||
("AA", _("Default")),
|
||||
("DC", "1.234,50"),
|
||||
("CD", "1,234.50"),
|
||||
("SD", "1 234.50"),
|
||||
("SC", "1 234,50"),
|
||||
]
|
||||
|
||||
date_format = forms.ChoiceField(
|
||||
|
||||
@@ -17,6 +17,11 @@ urlpatterns = [
|
||||
views.toggle_sound_playing,
|
||||
name="toggle_sound_playing",
|
||||
),
|
||||
path(
|
||||
"user/toggle-sidebar/",
|
||||
views.toggle_sidebar_status,
|
||||
name="toggle_sidebar_status",
|
||||
),
|
||||
path(
|
||||
"user/settings/",
|
||||
views.update_settings,
|
||||
|
||||
@@ -116,6 +116,21 @@ def update_settings(request):
|
||||
return render(request, "users/fragments/user_settings.html", {"form": form})
|
||||
|
||||
|
||||
@only_htmx
|
||||
@htmx_login_required
|
||||
def toggle_sidebar_status(request):
|
||||
if request.session["sidebar_status"] == "floating":
|
||||
request.session["sidebar_status"] = "fixed"
|
||||
elif request.session["sidebar_status"] == "fixed":
|
||||
request.session["sidebar_status"] = "floating"
|
||||
else:
|
||||
request.session["sidebar_status"] = "fixed"
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
)
|
||||
|
||||
|
||||
@htmx_login_required
|
||||
@is_superuser
|
||||
@require_http_methods(["GET"])
|
||||
|
||||
@@ -95,6 +95,7 @@ def yearly_overview_by_currency(request, year: int):
|
||||
transactions = (
|
||||
Transaction.objects.filter(**filter_params)
|
||||
.exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
.order_by("account__currency__name")
|
||||
)
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-07-22 06:17+0000\n"
|
||||
"Last-Translator: seraphblade2010 <marc.butenhoff@web.de>\n"
|
||||
"Language-Team: German <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -31,8 +31,8 @@ msgstr "Gruppe Name"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Aktualisierung"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Aktualisierung"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr "Neuer Saldo"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Kategorie"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -128,7 +128,7 @@ msgstr "Kontengruppe"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Kontengruppen"
|
||||
|
||||
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
"Archivierte Konten werden weder angezeigt, noch zum Nettovermögen gezählt"
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -185,19 +185,19 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Konto"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Konten"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr ""
|
||||
"Die Umrechnungs-Währung darf nicht mit der Haupt-Währung des Kontos "
|
||||
@@ -235,7 +235,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Kontengruppe erfolgreich gelöscht"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -260,6 +260,14 @@ msgstr "Konto erfolgreich aktualisiert"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Konto erfolgreich gelöscht"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Saldenaktualisierung"
|
||||
@@ -311,7 +319,7 @@ msgid "Shared with users"
|
||||
msgstr "Mit Nutzern geteilt"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Fehler bei der Erstellung einer neuen Instanz"
|
||||
|
||||
@@ -356,7 +364,7 @@ msgstr ""
|
||||
"Privat: Nur für den Besitzer und geteilte Nutzer sichtbar.<br/>Öffentlich: "
|
||||
"Sichtbar für alle Nutzer. Nur bearbeitbar durch Besitzer."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
@@ -451,12 +459,13 @@ msgstr "Fehler"
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Cache erfolgreich geleert"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Heute"
|
||||
|
||||
@@ -470,8 +479,10 @@ msgstr "Löschen"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Zurücksetzen"
|
||||
|
||||
@@ -513,11 +524,11 @@ msgstr "Dezimalstellen"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Währungen"
|
||||
|
||||
@@ -549,7 +560,7 @@ msgstr "Automatisch"
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Umrechnungskurse"
|
||||
|
||||
@@ -557,27 +568,27 @@ msgstr "Umrechnungskurse"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Start- und Zielwährung dürfen nicht identisch sein."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "An"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "Alle X Stunden"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "Nicht an"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Dienstname"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Diensttyp"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -586,31 +597,31 @@ msgstr "Diensttyp"
|
||||
msgid "Active"
|
||||
msgstr "Aktiv"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr "API-Schlüssel"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API-Schlüssel für den Dienst (falls benötigt)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr "Intervalltyp"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr "Intervall"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Letzter erfolgreicher Abruf"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr "Zielwährungen"
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -618,11 +629,11 @@ msgstr ""
|
||||
"Währung auswählen, dessen Umrechnungskurs abgerufen werden sollen. Für jede "
|
||||
"Währung wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr "Zielkonten"
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -630,33 +641,33 @@ msgstr ""
|
||||
"Konten auswählen, für die Umrechungskurse abgerufen werden solen. Für jedes "
|
||||
"Konto wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
#, fuzzy
|
||||
#| msgid "Edit exchange rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Umrechnungskurs bearbeiten"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Umrechnungskurs-Dienst"
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Umrechnungskurs-Dienste"
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "\"Jede X Stunden\"-Intervalltyp benötigt eine positive Ganzzahl."
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "\"Jede X Stunden\"-Intervall muss zwischen 1 und 24 liegen."
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -664,7 +675,7 @@ msgstr ""
|
||||
"Ungültiges Stundenformat. Nutze kommagetrennte Stunden (0-23) und/oder "
|
||||
"Zeiträume (z.B. \"1-5,8,10-12\")."
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -825,15 +836,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr "Eintrag erfolgreich gelöscht"
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr "Nutzer"
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -841,28 +852,29 @@ msgid "Transactions"
|
||||
msgstr "Transaktionen"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr "Kategorien"
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entitäten"
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -870,7 +882,7 @@ msgstr "Wiederkehrende Transaktionen"
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -879,12 +891,12 @@ msgstr "Ratenzahlungs-Pläne"
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr "Automatische Umrechnungskurse"
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr "Regeln"
|
||||
@@ -924,7 +936,7 @@ msgstr "Aktion der Transaktions-Regel bearbeiten"
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Aktualisierung oder Erstellung von Transaktions-Aktionen"
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -956,7 +968,7 @@ msgstr "Datei auswählen"
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr "Import"
|
||||
|
||||
@@ -1025,10 +1037,10 @@ msgid "Run deleted successfully"
|
||||
msgstr "Vorgang erfolgreich gelöscht"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr "Unkategorisiert"
|
||||
|
||||
@@ -1293,7 +1305,7 @@ msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1308,26 +1320,55 @@ msgstr "Inhalt"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Transaktionstyp"
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr "Datum von"
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr "Bis"
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr "Referenzdatum von"
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr "Betrag Minimum"
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr "Betrag Maximum"
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
#, fuzzy
|
||||
#| msgid "Categories"
|
||||
msgid "Categorized"
|
||||
msgstr "Kategorien"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#, fuzzy
|
||||
#| msgid "Untagged"
|
||||
msgid "Tagged"
|
||||
msgstr "Unmarkiert"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr "Unmarkiert"
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
#, fuzzy
|
||||
#| msgid "Add entity"
|
||||
msgid "Any entity"
|
||||
msgstr "Entität hinzufügen"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#, fuzzy
|
||||
#| msgid "No entities"
|
||||
msgid "No entity"
|
||||
msgstr "Keine Entitäten"
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr "Mehr"
|
||||
@@ -1439,7 +1480,7 @@ msgstr "Entität"
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Einnahme"
|
||||
@@ -1451,7 +1492,7 @@ msgstr "Einnahme"
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr "Ausgabe"
|
||||
|
||||
@@ -1487,12 +1528,12 @@ msgstr "Keine Kategorie"
|
||||
msgid "No description"
|
||||
msgstr "Keine Beschreibung"
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr "Jährlich"
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr "Monatlich"
|
||||
|
||||
@@ -1592,7 +1633,7 @@ msgid "Quick Transaction"
|
||||
msgstr "Schnelle Transaktion"
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1684,11 +1725,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Ratenzahlungs-Plan erfolgreich gelöscht"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr "Objekt erfolgreich hinzugefügt"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Objekt erfolgreich aktualisiert"
|
||||
|
||||
@@ -1803,24 +1844,26 @@ msgid "This account is deactivated"
|
||||
msgstr "Dieses Konto ist deaktiviert"
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr "Standard"
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Datumsformat"
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Datums- und Zeitformat"
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Zahlenformat"
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1831,25 +1874,25 @@ msgstr ""
|
||||
"angezeigt werden.\n"
|
||||
"Hilf mit WYGIWYH in deine Sprache zu übersetzten: %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr "Neues Passwort"
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Leer lassen um Passwort zu belassen."
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Bestätige das neue Passwort"
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr "Abwählen um den Nutzer zu deaktivieren. Besser als gleich zu löschen."
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -1857,35 +1900,35 @@ msgstr ""
|
||||
"Anwählen damit der Nutzer alle Berechtigungen hat, ohne diese explizit "
|
||||
"hinzuzufügen."
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr "Diese E-Mail-Adresse wird bereits von jemand anders benutzt."
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "Die eingegebenen Passwörter stimmen nicht überein."
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Bitte bestätige dein neues Passwort."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Bitte gebe erst dein neues Passwort ein."
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr "Du kannst deinen Nutzer nicht hier deaktivieren."
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr "Sie können die Adminberechtigungen nicht vom letzten Admin entfernen."
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr "Du kannst deinen eigenen Superuser-Status nicht hier entfernen."
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits."
|
||||
|
||||
@@ -1910,7 +1953,7 @@ msgid "All Transactions"
|
||||
msgstr "Alle Transaktionen"
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr "Kalender"
|
||||
|
||||
@@ -2005,7 +2048,7 @@ msgstr "Bearbeiten"
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2032,7 +2075,7 @@ msgstr "Löschen"
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2062,7 +2105,7 @@ msgstr "Bist du sicher?"
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2084,7 +2127,7 @@ msgstr "Dies kann nicht rückgängig gemacht werden!"
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2165,7 +2208,15 @@ msgstr "Konto bearbeiten"
|
||||
msgid "Is Asset"
|
||||
msgstr "Ist Vermögenswert"
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr "Keine Konten"
|
||||
|
||||
@@ -2223,7 +2274,7 @@ msgid "Muted"
|
||||
msgstr "Ausgeblendet"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr "Keine Kategorien"
|
||||
|
||||
@@ -2232,13 +2283,14 @@ msgid "Pick a month"
|
||||
msgstr "Monat auswählen"
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr "Schließen"
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr "Suche"
|
||||
|
||||
@@ -2247,35 +2299,42 @@ msgid "Select"
|
||||
msgstr "Auswahl"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr "Anzeigen auf Zusammenfassungen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
#, fuzzy
|
||||
#| msgid "Controlled by category"
|
||||
msgid "Controlled by account"
|
||||
msgstr "Gesteuert durch Kategorie"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr "Gesteuert durch Kategorie"
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr "Verstecken bei Zusammenfassungen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Als schnelle Transaktion hinzufügen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplikat"
|
||||
@@ -2456,7 +2515,7 @@ msgstr "Keine Einträge für diesen DCA"
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr "Versuche einen hinzuzufügen"
|
||||
|
||||
@@ -2559,7 +2618,7 @@ msgid "Edit exchange rate"
|
||||
msgstr "Umrechnungskurs bearbeiten"
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2583,7 +2642,7 @@ msgstr "Kein Umrechnungskurs"
|
||||
|
||||
#: 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:54
|
||||
msgid "Page navigation"
|
||||
msgstr "Seitennavigation"
|
||||
|
||||
@@ -2616,7 +2675,7 @@ msgid "No services configured"
|
||||
msgstr "Keine Dienste konfiguriert"
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr "Exportieren und Wiederherstellen"
|
||||
|
||||
@@ -2714,72 +2773,72 @@ msgstr "Navigation umschalten"
|
||||
msgid "Overview"
|
||||
msgstr "Übersicht"
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr "Nettovermögen"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Aktuell"
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr "Einblicke"
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr "Papierkorb"
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr "Tools"
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr "\"Dollar Cost Average\"-Tracker"
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr "Einzelpreis-Rechner"
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr "Währungs-Umrechner"
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr "Verwaltung"
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr "Automatisierung"
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr "Nur benutzen, wenn du weißt was du tust"
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr "Django Admin"
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr "Rechner"
|
||||
|
||||
@@ -2856,7 +2915,7 @@ msgstr "Tabelle"
|
||||
msgid "Bars"
|
||||
msgstr "Balken"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
@@ -2864,22 +2923,30 @@ msgstr ""
|
||||
"Transaktionsbeträge, die mit mehreren Tags verknüpft sind, werden für jeden "
|
||||
"Tag einmal gezählt"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Transaction amounts associated with multiple tags will be counted once "
|
||||
#| "for each tag"
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
"Transaktionsbeträge, die mit mehreren Tags verknüpft sind, werden für jeden "
|
||||
"Tag einmal gezählt"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
#, fuzzy
|
||||
#| msgid "final total"
|
||||
msgid "Final total"
|
||||
msgstr "Gesamtbilanz"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Gesamt"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr "Unmarkiert"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#, fuzzy
|
||||
#| msgid "final total"
|
||||
msgid "Final Total"
|
||||
@@ -3089,26 +3156,30 @@ msgstr "Verteilung"
|
||||
msgid "Summary"
|
||||
msgstr "Zusammenfassung"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr "Transaktionen filtern"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr "Sortieren nach"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr "Älteste zuerst"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr "Neueste zuerst"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr "Transaktionen filtern"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr "Sortieren nach"
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3324,7 +3395,7 @@ msgstr "Bearbeitung"
|
||||
msgid "transactions"
|
||||
msgstr "Transaktionen"
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr "Keine Transaktionen gefunden"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -30,8 +30,8 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
@@ -44,7 +44,7 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -81,22 +81,22 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
@@ -127,7 +127,7 @@ msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -167,7 +167,7 @@ msgstr ""
|
||||
msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -181,19 +181,19 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr ""
|
||||
|
||||
@@ -229,7 +229,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -254,6 +254,14 @@ msgstr ""
|
||||
msgid "Account deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr ""
|
||||
@@ -303,7 +311,7 @@ msgid "Shared with users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr ""
|
||||
|
||||
@@ -344,7 +352,7 @@ msgid ""
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@@ -439,12 +447,13 @@ msgstr ""
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr ""
|
||||
|
||||
@@ -458,8 +467,10 @@ msgstr ""
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
@@ -501,11 +512,11 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr ""
|
||||
|
||||
@@ -537,7 +548,7 @@ msgstr ""
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
@@ -545,27 +556,27 @@ msgstr ""
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -574,77 +585,77 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
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:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
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:154
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -801,15 +812,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -817,28 +828,29 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -846,7 +858,7 @@ msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -855,12 +867,12 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr ""
|
||||
@@ -900,7 +912,7 @@ msgstr ""
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -930,7 +942,7 @@ msgstr ""
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -999,10 +1011,10 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1260,7 +1272,7 @@ msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1275,26 +1287,47 @@ msgstr ""
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
msgid "Categorized"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
msgid "No entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr ""
|
||||
@@ -1394,7 +1427,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
@@ -1406,7 +1439,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
@@ -1442,12 +1475,12 @@ msgstr ""
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
@@ -1546,7 +1579,7 @@ msgid "Quick Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1638,11 +1671,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1757,24 +1790,26 @@ msgid "This account is deactivated"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1782,59 +1817,59 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
@@ -1859,7 +1894,7 @@ msgid "All Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@@ -1954,7 +1989,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -1981,7 +2016,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2011,7 +2046,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2033,7 +2068,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2114,7 +2149,15 @@ msgstr ""
|
||||
msgid "Is Asset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -2172,7 +2215,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2181,13 +2224,14 @@ msgid "Pick a month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
@@ -2196,35 +2240,40 @@ msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
msgid "Controlled by account"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
@@ -2405,7 +2454,7 @@ msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr ""
|
||||
|
||||
@@ -2507,7 +2556,7 @@ msgid "Edit exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2531,7 +2580,7 @@ msgstr ""
|
||||
|
||||
#: 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:54
|
||||
msgid "Page navigation"
|
||||
msgstr ""
|
||||
|
||||
@@ -2564,7 +2613,7 @@ msgid "No services configured"
|
||||
msgstr ""
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -2660,72 +2709,72 @@ msgstr ""
|
||||
msgid "Overview"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
@@ -2799,26 +2848,28 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
msgid "Final total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
@@ -3023,26 +3074,30 @@ msgstr ""
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3250,7 +3305,7 @@ msgstr ""
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr ""
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"PO-Revision-Date: 2025-08-08 06:17+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-08-17 08:17+0000\n"
|
||||
"Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/"
|
||||
"app/nl/>\n"
|
||||
@@ -31,8 +31,8 @@ msgstr "Groepsnaam"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Bijwerken"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Bijwerken"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr "Nieuw saldo"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Categorie"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Labels"
|
||||
@@ -128,7 +128,7 @@ msgstr "Accountgroep"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Accountgroepen"
|
||||
|
||||
@@ -172,7 +172,7 @@ msgstr ""
|
||||
"Gearchiveerde rekeningen worden niet weergegeven en tellen niet mee voor je "
|
||||
"\"Netto Waarde\""
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -186,19 +186,19 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Rekening"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Rekeningen"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr ""
|
||||
"Eenheid wisselgeld kan niet dezelfde zijn als de munteenheid van de rekening."
|
||||
@@ -235,7 +235,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Rekeninggroep succesvol verwijderd"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -260,6 +260,14 @@ msgstr "Rekening succesvol bijgewerkt"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Rekening succesvol verwijderd"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr "Account wordt nu bijgehouden"
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr "Account wordt nu niet meer bijgehouden"
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Saldi afstemming"
|
||||
@@ -309,7 +317,7 @@ msgid "Shared with users"
|
||||
msgstr "Gedeeld met gebruikers"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Fout bij het aanmaken van een nieuwe instantie"
|
||||
|
||||
@@ -355,7 +363,7 @@ msgstr ""
|
||||
"bewerkbaar door de eigenaar.<br/>Publiek: Weergegeven voor alle gebruikers. "
|
||||
"Alleen bewerkbaar door de eigenaar."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Opslaan"
|
||||
|
||||
@@ -450,12 +458,13 @@ msgstr "Fout"
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Cache succesvol gewist"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Vandaag"
|
||||
|
||||
@@ -469,8 +478,10 @@ msgstr "Verwijder"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Leegmaken"
|
||||
|
||||
@@ -512,11 +523,11 @@ msgstr "Cijfers na de komma"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Munteenheden"
|
||||
|
||||
@@ -548,7 +559,7 @@ msgstr "Automatisch"
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Wisselkoersen"
|
||||
|
||||
@@ -556,27 +567,27 @@ msgstr "Wisselkoersen"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "Op"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "Elke X Uren"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "Niet op"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Dienstnaam"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Soort Dienst"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -585,31 +596,31 @@ msgstr "Soort Dienst"
|
||||
msgid "Active"
|
||||
msgstr "Actief"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr "API Sleutel"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API sleutel voor de dienst (indien verplicht)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr "Soort Interval"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr "Interval"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Laatste Succesvolle Ophaling"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr "Doel Munteenheden"
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -617,11 +628,11 @@ msgstr ""
|
||||
"Selecteer munteenheden om wisselkoersen voor op te halen. De koersen worden "
|
||||
"voor elke munteenheid opgehaald ten opzichte van de ingestelde wisselkoers."
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr "Naar rekeningen"
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -630,33 +641,33 @@ msgstr ""
|
||||
"opgehaald voor de munteenheid van elke rekening ten opzichte van de "
|
||||
"ingestelde wisselkoers."
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#, fuzzy
|
||||
#| msgid "Edit exchange rate"
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Wisselkoers bewerken"
|
||||
msgstr "Enkele Wisselkoers"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
"Maak één wisselkoers aan en houd deze bijgewerkt. Voorkomt een overvolle "
|
||||
"database."
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Wisselkoersdienst"
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Wisselkoersdiensten"
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "Voor het intervaltype ‘Elke X uur’ is een positief geheel getal nodig."
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "Het interval ‘Elke X uur’ moet tussen 1 en 24 liggen."
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -664,7 +675,7 @@ msgstr ""
|
||||
"Ongeldige urennotatie. Gebruik door komma's gescheiden uren (0-23) en/of "
|
||||
"reeksen (bijv. ‘1-5,8,10-12’)."
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -824,15 +835,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr "Invoer succesvol verwijderd"
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr "Gebruikers"
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -840,28 +851,29 @@ msgid "Transactions"
|
||||
msgstr "Verrichtingen"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr "Categorieën"
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Bedrijven"
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -869,7 +881,7 @@ msgstr "Terugkerende Verrichtingen"
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -878,12 +890,12 @@ msgstr "Afbetalingsplannen"
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr "Automatische Wisselkoersen"
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr "Regels"
|
||||
@@ -923,7 +935,7 @@ msgstr "Bewerk verrichtingsactie"
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Bewerk of maak verrichtingsregel acties"
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -955,7 +967,7 @@ msgstr "Selecteer een bestand"
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr "Importeer"
|
||||
|
||||
@@ -1024,10 +1036,10 @@ msgid "Run deleted successfully"
|
||||
msgstr "Run met succes verwijderd"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr "Ongecategoriseerd"
|
||||
|
||||
@@ -1287,7 +1299,7 @@ msgstr "Verrichting Bijwerken Of Maken succesvol verwijderd"
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1302,26 +1314,47 @@ msgstr "Inhoud"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Soort transactie"
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr "Datum vanaf"
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr "Tot"
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr "Referentiedatum vanaf"
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr "Minimum bedrag"
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr "Maximaal bedrag"
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
msgid "Categorized"
|
||||
msgstr "Gecategoriseerd"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr "Gelabeld"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr "Niet gelabeld"
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
msgid "Any entity"
|
||||
msgstr "Elk bedrijf"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
msgid "No entity"
|
||||
msgstr "Geen bedrijf"
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr "Meer"
|
||||
@@ -1427,7 +1460,7 @@ msgstr "Bedrijf"
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Ontvangsten Transactie"
|
||||
@@ -1439,7 +1472,7 @@ msgstr "Ontvangsten Transactie"
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr "Uitgave"
|
||||
|
||||
@@ -1475,12 +1508,12 @@ msgstr "Geen categorie"
|
||||
msgid "No description"
|
||||
msgstr "Geen Beschrijving"
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr "Jaarlijks"
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr "Maandelijks"
|
||||
|
||||
@@ -1579,7 +1612,7 @@ msgid "Quick Transaction"
|
||||
msgstr "Snelle verrichting"
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1671,11 +1704,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Afbetalingsplan succesvol verwijderd"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr "Item succesvol toegevoegd"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Item succesvol bijgewerkt"
|
||||
|
||||
@@ -1790,24 +1823,26 @@ msgid "This account is deactivated"
|
||||
msgstr "Deze gebruiker is gedeactiveerd"
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr "Standaard"
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Datumnotatie"
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Tijdsnotatie"
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Schrijfwijze Nummers"
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1818,19 +1853,19 @@ msgstr ""
|
||||
"weergegeven\n"
|
||||
"Overweeg om WYGIWYH te helpen vertalen naar jouw taal op %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr "Nieuw Wachtwoord"
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Laat leeg om het huidige wachtwoord te behouden."
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Bevestig Nieuw Wachtwoord"
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
@@ -1838,7 +1873,7 @@ msgstr ""
|
||||
"Geeft aan of deze gebruiker als actief moet worden behandeld. Deselecteer "
|
||||
"dit in plaats van accounts te verwijderen."
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -1846,35 +1881,35 @@ msgstr ""
|
||||
"Geeft aan dat deze gebruiker alle rechten heeft zonder ze expliciet toe te "
|
||||
"kennen."
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr "Dit e-mailadres wordt al gebruikt door een ander account."
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "De twee wachtwoordvelden komen niet overeen."
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Bevestig je nieuwe wachtwoord."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Geef eerst het nieuwe wachtwoord op."
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr "Je kunt je eigen account niet deactiveren met dit formulier."
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr "Kan de status van de laatste Hoofdadmin niet verwijderen."
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr "Je kunt je eigen hoofdadminrechten niet verwijderen met dit formulier."
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "Er bestaat al een gebruiker met dit e-mailadres."
|
||||
|
||||
@@ -1899,7 +1934,7 @@ msgid "All Transactions"
|
||||
msgstr "Alle Verrichtingen"
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr "Kalender"
|
||||
|
||||
@@ -1994,7 +2029,7 @@ msgstr "Bewerken"
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2021,7 +2056,7 @@ msgstr "Verwijderen"
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2051,7 +2086,7 @@ msgstr "Weet je het zeker?"
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2073,7 +2108,7 @@ msgstr "Je kunt dit niet meer terugdraaien!"
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2154,7 +2189,15 @@ msgstr "Rekening bewerken"
|
||||
msgid "Is Asset"
|
||||
msgstr "Is Vermogen"
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr "Gevolgd"
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr "Niet gevolgd"
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr "Geen rekeningen"
|
||||
|
||||
@@ -2212,7 +2255,7 @@ msgid "Muted"
|
||||
msgstr "Gedempt"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr "Geen categorieën"
|
||||
|
||||
@@ -2221,13 +2264,14 @@ msgid "Pick a month"
|
||||
msgstr "Kies een maand"
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr "Sluiten"
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr "Zoeken"
|
||||
|
||||
@@ -2236,35 +2280,40 @@ msgid "Select"
|
||||
msgstr "Selecteer"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr "Toon op samenvattingen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
msgid "Controlled by account"
|
||||
msgstr "Gecontroleerd door account"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr "Gecontroleerd door categorie"
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr "Verbergen in samenvattingen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Toevoegen als snelle transactie"
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr "Ga naar vorige maand"
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr "Ga naar volgende maand"
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr "Ga naar vandaag"
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliceren"
|
||||
@@ -2445,7 +2494,7 @@ msgstr "Geen idems in deze DCA"
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr "Probeer er een toe te voegen"
|
||||
|
||||
@@ -2547,7 +2596,7 @@ msgid "Edit exchange rate"
|
||||
msgstr "Wisselkoers bewerken"
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2571,7 +2620,7 @@ msgstr "Geen wisselkoersen"
|
||||
|
||||
#: 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:54
|
||||
msgid "Page navigation"
|
||||
msgstr "Paginanavigatie"
|
||||
|
||||
@@ -2604,7 +2653,7 @@ msgid "No services configured"
|
||||
msgstr "Geen diensten ingesteld"
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr "Exporteren en Herstellen"
|
||||
|
||||
@@ -2701,72 +2750,72 @@ msgstr "Navigatie Knop"
|
||||
msgid "Overview"
|
||||
msgstr "Overzicht"
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr "Netto Waarde"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Huidige"
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr "Inzichten"
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr "Prullenbak"
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr "Hulpmiddelen"
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr "Dollar Kostgemiddelde Tracker"
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr "Eenheidsprijs berekenen"
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr "Valuta omrekenen"
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr "Beheer"
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr "Automatisatie"
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr "Gebruik dit alleen als je weet wat je doet"
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr "Django Beheerder"
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr "is beschikbaar"
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr "Rekenmachine"
|
||||
|
||||
@@ -2844,7 +2893,7 @@ msgstr "Tabel"
|
||||
msgid "Bars"
|
||||
msgstr "Balken"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
@@ -2852,20 +2901,24 @@ msgstr ""
|
||||
"Transactiebedragen die gekoppeld zijn aan meerdere tags worden één keer "
|
||||
"geteld voor elke tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
"Transactiebedragen die gekoppeld zijn aan meerdere tags en bedrijven worden "
|
||||
"één keer geteld voor elke tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
msgid "Final total"
|
||||
msgstr "Eindtotaal"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Totaal"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr "Niet gelabeld"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr "Eindtotaal"
|
||||
|
||||
@@ -3073,26 +3126,30 @@ msgstr "Verdeling"
|
||||
msgid "Summary"
|
||||
msgstr "Samenvatting"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filter verrichtingen"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr "Sorteer op"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr "Oudste eerst"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr "Nieuwste eerst"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filter verrichtingen"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr "Sorteer op"
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3306,7 +3363,7 @@ msgstr "Bewerking"
|
||||
msgid "transactions"
|
||||
msgstr "verrichtingen"
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr "Geen Verrichtingen gevonden"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-04-13 08:16+0000\n"
|
||||
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
|
||||
"Language-Team: Portuguese <https://translations.herculino.com/projects/"
|
||||
@@ -31,8 +31,8 @@ msgstr "Nome do grupo"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Atualizar"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Atualizar"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr "Novo saldo"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Categoria"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -128,7 +128,7 @@ msgstr "Grupo da Conta"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Grupos da Conta"
|
||||
|
||||
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
"Contas arquivadas não aparecem nem contam para o seu patrimônio líquido"
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -185,19 +185,19 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Conta"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Contas"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr "A moeda de câmbio não pode ser a mesma que a moeda principal da conta."
|
||||
|
||||
@@ -233,7 +233,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Grupo de Conta apagado com sucesso"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -258,6 +258,14 @@ msgstr "Conta atualizada com sucesso"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Conta apagada com sucesso"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Reconciliação do saldo"
|
||||
@@ -309,7 +317,7 @@ msgid "Shared with users"
|
||||
msgstr "Compartilhado com os usuários"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Erro criando nova instância"
|
||||
|
||||
@@ -355,7 +363,7 @@ msgstr ""
|
||||
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
|
||||
"usuários. Somente editável pelo proprietário."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Salvar"
|
||||
|
||||
@@ -450,12 +458,13 @@ msgstr "Erro"
|
||||
msgid "Info"
|
||||
msgstr "Informação"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Cache limpo com sucesso"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Hoje"
|
||||
|
||||
@@ -469,8 +478,10 @@ msgstr "Remover"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
@@ -512,11 +523,11 @@ msgstr "Casas Decimais"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Moedas"
|
||||
|
||||
@@ -548,7 +559,7 @@ msgstr "Automático"
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Taxas de Câmbio"
|
||||
|
||||
@@ -556,27 +567,27 @@ msgstr "Taxas de Câmbio"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "As moedas De e Para não podem ser as mesmas."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "Em"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "A cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "Não em"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Nome do Serviço"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Serviço"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -585,31 +596,31 @@ msgstr "Tipo de Serviço"
|
||||
msgid "Active"
|
||||
msgstr "Ativo"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr "Chave de API"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "Chave de API para o serviço (se necessário)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr "Tipo de Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr "Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Última execução bem-sucedida"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr "Moedas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -617,11 +628,11 @@ 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:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr "Contas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -630,34 +641,34 @@ msgstr ""
|
||||
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
|
||||
"definida."
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
#, fuzzy
|
||||
#| msgid "Edit exchange rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Editar taxa de câmbio"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Serviço de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Serviços de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo."
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "Intervalo do tipo 'A cada X horas' requerer um número entre 1 e 24."
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -665,7 +676,7 @@ msgstr ""
|
||||
"Formato inválido de hora. Use uma lista de horas separada por vírgulas "
|
||||
"(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -824,15 +835,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr "Entrada apagada com sucesso"
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr "Usuários"
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -840,28 +851,29 @@ msgid "Transactions"
|
||||
msgstr "Transações"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr "Categorias"
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entidades"
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -869,7 +881,7 @@ msgstr "Transações Recorrentes"
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -878,12 +890,12 @@ msgstr "Parcelamentos"
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr "Taxas de Câmbio Automáticas"
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr "Regras"
|
||||
@@ -923,7 +935,7 @@ msgstr "Ação de editar de transação"
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Ações de atualizar ou criar transação"
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -955,7 +967,7 @@ msgstr "Selecione um arquivo"
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
@@ -1024,10 +1036,10 @@ msgid "Run deleted successfully"
|
||||
msgstr "Importação apagada com sucesso"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
@@ -1287,7 +1299,7 @@ msgstr "Ação Atualizar ou Criar Transação apagada com sucesso"
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1302,26 +1314,53 @@ msgstr "Conteúdo"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Tipo de Transação"
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr "Data de"
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr "Até"
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr "Data de Referência de"
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr "Quantia miníma"
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr "Quantia máxima"
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
#, fuzzy
|
||||
#| msgid "Categories"
|
||||
msgid "Categorized"
|
||||
msgstr "Categorias"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
#, fuzzy
|
||||
#| msgid "Add entity"
|
||||
msgid "Any entity"
|
||||
msgstr "Adicionar entidade"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#, fuzzy
|
||||
#| msgid "No entities"
|
||||
msgid "No entity"
|
||||
msgstr "Sem entidades"
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr "Mais"
|
||||
@@ -1430,7 +1469,7 @@ msgstr "Entidade"
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Renda"
|
||||
@@ -1442,7 +1481,7 @@ msgstr "Renda"
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr "Despesa"
|
||||
|
||||
@@ -1478,12 +1517,12 @@ msgstr "Sem categoria"
|
||||
msgid "No description"
|
||||
msgstr "Sem descrição"
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr "Anual"
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr "Mensal"
|
||||
|
||||
@@ -1584,7 +1623,7 @@ msgid "Quick Transaction"
|
||||
msgstr "Editar Transação"
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
#, fuzzy
|
||||
@@ -1678,13 +1717,13 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Parcelamento apagado com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#, fuzzy
|
||||
#| msgid "Rule added successfully"
|
||||
msgid "Item added successfully"
|
||||
msgstr "Regra adicionada com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#, fuzzy
|
||||
#| msgid "Rule updated successfully"
|
||||
msgid "Item updated successfully"
|
||||
@@ -1803,24 +1842,26 @@ msgid "This account is deactivated"
|
||||
msgstr "Essa conta está desativada"
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr "Padrão"
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Formato de Data"
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Formato de Data e Hora"
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Formato de Número"
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1831,61 +1872,61 @@ msgstr ""
|
||||
"são exibidos\n"
|
||||
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
#, fuzzy
|
||||
#| msgid "Password"
|
||||
msgid "New Password"
|
||||
msgstr "Senha"
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
#, fuzzy
|
||||
#| msgid "A value for this field already exists in the rule."
|
||||
msgid "A user with this email address already exists."
|
||||
@@ -1912,7 +1953,7 @@ msgid "All Transactions"
|
||||
msgstr "Todas as transações"
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr "Calendário"
|
||||
|
||||
@@ -2007,7 +2048,7 @@ msgstr "Editar"
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2034,7 +2075,7 @@ msgstr "Apagar"
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2064,7 +2105,7 @@ msgstr "Tem certeza?"
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2086,7 +2127,7 @@ msgstr "Você não será capaz de reverter isso!"
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2167,7 +2208,15 @@ msgstr "Editar conta"
|
||||
msgid "Is Asset"
|
||||
msgstr "É ativo"
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr "Nenhuma conta"
|
||||
|
||||
@@ -2225,7 +2274,7 @@ msgid "Muted"
|
||||
msgstr "Silenciada"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr "Nenhum categoria"
|
||||
|
||||
@@ -2234,13 +2283,14 @@ msgid "Pick a month"
|
||||
msgstr "Escolha um mês"
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
@@ -2249,39 +2299,46 @@ msgid "Select"
|
||||
msgstr "Selecionar"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
#, fuzzy
|
||||
#| msgid "No category"
|
||||
msgid "Controlled by account"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
#, fuzzy
|
||||
#| msgid "No category"
|
||||
msgid "Controlled by category"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#, fuzzy
|
||||
#| msgid "Add recurring transaction"
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Adicionar transação recorrente"
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicar"
|
||||
@@ -2462,7 +2519,7 @@ msgstr "Nenhuma entrada neste CMP"
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr "Tente adicionar uma"
|
||||
|
||||
@@ -2565,7 +2622,7 @@ msgid "Edit exchange rate"
|
||||
msgstr "Editar taxa de câmbio"
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2589,7 +2646,7 @@ msgstr "Nenhuma taxa de câmbio"
|
||||
|
||||
#: 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:54
|
||||
msgid "Page navigation"
|
||||
msgstr "Navegação por página"
|
||||
|
||||
@@ -2622,7 +2679,7 @@ msgid "No services configured"
|
||||
msgstr "Nenhum serviço configurado"
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr "Exportar e Restaurar"
|
||||
|
||||
@@ -2720,72 +2777,72 @@ msgstr "Alternar navegação"
|
||||
msgid "Overview"
|
||||
msgstr "Visão Geral"
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr "Patrimônio"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Atual"
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr "Insights"
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr "Lixeira"
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr "Rastreador de Custo Médio Ponderado"
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr "Calculadora de preço unitário"
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr "Conversor de Moeda"
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr "Gerenciar"
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr "Automação"
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr "Só use isso se você souber o que está fazendo"
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr "Django Admin"
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr "Calculadora"
|
||||
|
||||
@@ -2863,28 +2920,30 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
#, fuzzy
|
||||
#| msgid "final total"
|
||||
msgid "Final total"
|
||||
msgstr "total final"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr "Total Final"
|
||||
|
||||
@@ -3092,26 +3151,30 @@ msgstr "Distribuição"
|
||||
msgid "Summary"
|
||||
msgstr "Resumo"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filtrar transações"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr "Ordernar por"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr "Mais antigas primeiro"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr "Mais novas primeiro"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filtrar transações"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr "Ordernar por"
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3328,7 +3391,7 @@ msgstr "Editando"
|
||||
msgid "transactions"
|
||||
msgstr "transações"
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr "Nenhuma transação encontrada"
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"PO-Revision-Date: 2025-08-08 04:17+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-08-17 08:17+0000\n"
|
||||
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://translations.herculino.com/"
|
||||
"projects/wygiwyh/app/pt_BR/>\n"
|
||||
@@ -31,8 +31,8 @@ msgstr "Nome do grupo"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Atualizar"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Atualizar"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr "Novo saldo"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Categoria"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -128,7 +128,7 @@ msgstr "Grupo da Conta"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Grupos da Conta"
|
||||
|
||||
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
"Contas arquivadas não aparecem nem contam para o seu patrimônio líquido"
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -185,19 +185,19 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Conta"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Contas"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr "A moeda de câmbio não pode ser a mesma que a moeda principal da conta."
|
||||
|
||||
@@ -233,7 +233,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Grupo de Conta apagado com sucesso"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -258,6 +258,14 @@ msgstr "Conta atualizada com sucesso"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Conta apagada com sucesso"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr "A conta agora está sendo acompanhada"
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr "A conta agora não está mais sendo acompanhada"
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Reconciliação do saldo"
|
||||
@@ -307,7 +315,7 @@ msgid "Shared with users"
|
||||
msgstr "Compartilhado com os usuários"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Erro criando nova instância"
|
||||
|
||||
@@ -353,7 +361,7 @@ msgstr ""
|
||||
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
|
||||
"usuários. Somente editável pelo proprietário."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Salvar"
|
||||
|
||||
@@ -448,12 +456,13 @@ msgstr "Erro"
|
||||
msgid "Info"
|
||||
msgstr "Informação"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Cache limpo com sucesso"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Hoje"
|
||||
|
||||
@@ -467,8 +476,10 @@ msgstr "Remover"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
@@ -510,11 +521,11 @@ msgstr "Casas Decimais"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Moedas"
|
||||
|
||||
@@ -546,7 +557,7 @@ msgstr "Automático"
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Taxas de Câmbio"
|
||||
|
||||
@@ -554,27 +565,27 @@ msgstr "Taxas de Câmbio"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "As moedas De e Para não podem ser as mesmas."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "Em"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "A cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "Não em"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Nome do Serviço"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Serviço"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -583,31 +594,31 @@ msgstr "Tipo de Serviço"
|
||||
msgid "Active"
|
||||
msgstr "Ativo"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr "Chave de API"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "Chave de API para o serviço (se necessário)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr "Tipo de Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr "Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Última execução bem-sucedida"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr "Moedas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -615,11 +626,11 @@ 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:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr "Contas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -628,34 +639,34 @@ msgstr ""
|
||||
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
|
||||
"definida."
|
||||
|
||||
#: apps/currencies/models.py:154
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Taxa de câmbio única"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
"Cria uma taxa de câmbio e mantenha-a atualizada. Evita a poluição do banco "
|
||||
"de dados."
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Serviço de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Serviços de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo."
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "Intervalo do tipo 'A cada X horas' requerer um número entre 1 e 24."
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -663,7 +674,7 @@ msgstr ""
|
||||
"Formato inválido de hora. Use uma lista de horas separada por vírgulas "
|
||||
"(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -822,15 +833,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr "Entrada apagada com sucesso"
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr "Usuários"
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -838,28 +849,29 @@ msgid "Transactions"
|
||||
msgstr "Transações"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr "Categorias"
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entidades"
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -867,7 +879,7 @@ msgstr "Transações Recorrentes"
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -876,12 +888,12 @@ msgstr "Parcelamentos"
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr "Taxas de Câmbio Automáticas"
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr "Regras"
|
||||
@@ -921,7 +933,7 @@ msgstr "Ação de editar de transação"
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Ações de atualizar ou criar transação"
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -953,7 +965,7 @@ msgstr "Selecione um arquivo"
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
@@ -1022,10 +1034,10 @@ msgid "Run deleted successfully"
|
||||
msgstr "Importação apagada com sucesso"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
@@ -1285,7 +1297,7 @@ msgstr "Ação Atualizar ou Criar Transação apagada com sucesso"
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1300,26 +1312,47 @@ msgstr "Conteúdo"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Tipo de Transação"
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr "Data de"
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr "Até"
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr "Data de Referência de"
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr "Quantia miníma"
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr "Quantia máxima"
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
msgid "Categorized"
|
||||
msgstr "Categorizada"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr "Com tag"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr "Sem tag"
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
msgid "Any entity"
|
||||
msgstr "Qualquer entidade"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
msgid "No entity"
|
||||
msgstr "Sem entidade"
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr "Mais"
|
||||
@@ -1424,7 +1457,7 @@ msgstr "Entidade"
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Renda"
|
||||
@@ -1436,7 +1469,7 @@ msgstr "Renda"
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr "Despesa"
|
||||
|
||||
@@ -1472,12 +1505,12 @@ msgstr "Sem categoria"
|
||||
msgid "No description"
|
||||
msgstr "Sem descrição"
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr "Anual"
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr "Mensal"
|
||||
|
||||
@@ -1576,7 +1609,7 @@ msgid "Quick Transaction"
|
||||
msgstr "Transação Rápida"
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1668,11 +1701,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Parcelamento apagado com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr "Item adicionado com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Item atualizado com sucesso"
|
||||
|
||||
@@ -1787,24 +1820,26 @@ msgid "This account is deactivated"
|
||||
msgstr "Essa conta está desativada"
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr "Padrão"
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Formato de Data"
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Formato de Data e Hora"
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Formato de Número"
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1815,19 +1850,19 @@ msgstr ""
|
||||
"são exibidos\n"
|
||||
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr "Nova senha"
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Deixe em branco para usar a senha atual."
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Confirmar nova senha"
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
@@ -1835,7 +1870,7 @@ msgstr ""
|
||||
"Designa se esse usuário deve ser tratado como ativo. Desmarque essa opção em "
|
||||
"vez de excluir usuários."
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -1843,37 +1878,37 @@ msgstr ""
|
||||
"Designa que esse usuário tem todas as permissões sem atribuí-las "
|
||||
"explicitamente."
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr "Esse endereço de e-mail já está sendo usado por outra conta."
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "Os dois campos de senha não coincidem."
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Confirme sua nova senha."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Digite a nova senha primeiro."
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr "Não é possível desativar sua própria conta usando esse formulário."
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr "Não é possível remover o status do último superusuário."
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
"Não é possível remover seu próprio status de superusuário usando esse "
|
||||
"formulário."
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "Já existe um usuário com esse endereço de e-mail."
|
||||
|
||||
@@ -1898,7 +1933,7 @@ msgid "All Transactions"
|
||||
msgstr "Todas as transações"
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr "Calendário"
|
||||
|
||||
@@ -1993,7 +2028,7 @@ msgstr "Editar"
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2020,7 +2055,7 @@ msgstr "Apagar"
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2050,7 +2085,7 @@ msgstr "Tem certeza?"
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2072,7 +2107,7 @@ msgstr "Você não será capaz de reverter isso!"
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2153,7 +2188,15 @@ msgstr "Editar conta"
|
||||
msgid "Is Asset"
|
||||
msgstr "É ativo"
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr "Acompanhar"
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr "Parar de acompanhar"
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr "Nenhuma conta"
|
||||
|
||||
@@ -2211,7 +2254,7 @@ msgid "Muted"
|
||||
msgstr "Silenciada"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr "Nenhum categoria"
|
||||
|
||||
@@ -2220,13 +2263,14 @@ msgid "Pick a month"
|
||||
msgstr "Escolha um mês"
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
@@ -2235,35 +2279,40 @@ msgid "Select"
|
||||
msgstr "Selecionar"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr "Mostrar nos sumários"
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
msgid "Controlled by account"
|
||||
msgstr "Controlado pela conta"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr "Controlado pela categoria"
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr "Esconder dos sumários"
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Adicionar como transação rápida"
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr "Mover para o mês anterior"
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr "Mover para o mês seguinte"
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr "Mover para hoje"
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicar"
|
||||
@@ -2444,7 +2493,7 @@ msgstr "Nenhuma entrada neste CMP"
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr "Tente adicionar uma"
|
||||
|
||||
@@ -2547,7 +2596,7 @@ msgid "Edit exchange rate"
|
||||
msgstr "Editar taxa de câmbio"
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2571,7 +2620,7 @@ msgstr "Nenhuma taxa de câmbio"
|
||||
|
||||
#: 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:54
|
||||
msgid "Page navigation"
|
||||
msgstr "Navegação por página"
|
||||
|
||||
@@ -2604,7 +2653,7 @@ msgid "No services configured"
|
||||
msgstr "Nenhum serviço configurado"
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr "Exportar e Restaurar"
|
||||
|
||||
@@ -2702,72 +2751,72 @@ msgstr "Alternar navegação"
|
||||
msgid "Overview"
|
||||
msgstr "Visão Geral"
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr "Patrimônio"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Atual"
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr "Insights"
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr "Lixeira"
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr "Rastreador de Custo Médio Ponderado"
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr "Calculadora de preço unitário"
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr "Conversor de Moeda"
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr "Gerenciar"
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr "Automação"
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr "Só use isso se você souber o que está fazendo"
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr "Django Admin"
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr "está disponível"
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr "Calculadora"
|
||||
|
||||
@@ -2843,7 +2892,7 @@ msgstr "Tabela"
|
||||
msgid "Bars"
|
||||
msgstr "Barras"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
@@ -2851,20 +2900,24 @@ msgstr ""
|
||||
"Os valores das transações associadas a várias tags serão contados uma vez "
|
||||
"para cada tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
"Os valores das transações associadas a várias tags e entidades serão "
|
||||
"contados uma vez para cada tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
msgid "Final total"
|
||||
msgstr "Total final"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr "Sem tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr "Total Final"
|
||||
|
||||
@@ -3072,26 +3125,30 @@ msgstr "Distribuição"
|
||||
msgid "Summary"
|
||||
msgstr "Resumo"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filtrar transações"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr "Ordernar por"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr "Mais antigas primeiro"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr "Mais novas primeiro"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr "Filtrar transações"
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr "Ordernar por"
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3302,7 +3359,7 @@ msgstr "Editando"
|
||||
msgid "transactions"
|
||||
msgstr "transações"
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr "Nenhuma transação encontrada"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-04-14 06:16+0000\n"
|
||||
"Last-Translator: Emil <emil.bjorkroth@gmail.com>\n"
|
||||
"Language-Team: Swedish <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -31,8 +31,8 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Uppdatera"
|
||||
|
||||
@@ -45,7 +45,7 @@ msgstr "Uppdatera"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
@@ -128,7 +128,7 @@ msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr ""
|
||||
|
||||
@@ -168,7 +168,7 @@ msgstr ""
|
||||
msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -182,19 +182,19 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr ""
|
||||
|
||||
@@ -230,7 +230,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -255,6 +255,14 @@ msgstr ""
|
||||
msgid "Account deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr ""
|
||||
@@ -304,7 +312,7 @@ msgid "Shared with users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr ""
|
||||
|
||||
@@ -345,7 +353,7 @@ msgid ""
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@@ -440,12 +448,13 @@ msgstr ""
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr ""
|
||||
|
||||
@@ -459,8 +468,10 @@ msgstr ""
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
@@ -502,11 +513,11 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr ""
|
||||
|
||||
@@ -538,7 +549,7 @@ msgstr ""
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
@@ -546,27 +557,27 @@ msgstr ""
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -575,77 +586,77 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
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:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
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:154
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -802,15 +813,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -818,28 +829,29 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -847,7 +859,7 @@ msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -856,12 +868,12 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr ""
|
||||
@@ -901,7 +913,7 @@ msgstr ""
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -931,7 +943,7 @@ msgstr ""
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -1000,10 +1012,10 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1261,7 +1273,7 @@ msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1276,26 +1288,47 @@ msgstr ""
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
msgid "Categorized"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
msgid "No entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr ""
|
||||
@@ -1395,7 +1428,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
@@ -1407,7 +1440,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
@@ -1443,12 +1476,12 @@ msgstr ""
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
@@ -1547,7 +1580,7 @@ msgid "Quick Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1639,11 +1672,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1758,24 +1791,26 @@ msgid "This account is deactivated"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1783,59 +1818,59 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
@@ -1860,7 +1895,7 @@ msgid "All Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@@ -1955,7 +1990,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -1982,7 +2017,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2012,7 +2047,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2034,7 +2069,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2115,7 +2150,15 @@ msgstr ""
|
||||
msgid "Is Asset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -2173,7 +2216,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2182,13 +2225,14 @@ msgid "Pick a month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
@@ -2197,35 +2241,40 @@ msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
msgid "Controlled by account"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
@@ -2406,7 +2455,7 @@ msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr ""
|
||||
|
||||
@@ -2508,7 +2557,7 @@ msgid "Edit exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2532,7 +2581,7 @@ msgstr ""
|
||||
|
||||
#: 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:54
|
||||
msgid "Page navigation"
|
||||
msgstr ""
|
||||
|
||||
@@ -2565,7 +2614,7 @@ msgid "No services configured"
|
||||
msgstr ""
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -2661,72 +2710,72 @@ msgstr ""
|
||||
msgid "Overview"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
@@ -2800,26 +2849,28 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
msgid "Final total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
@@ -3024,26 +3075,30 @@ msgstr ""
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3251,7 +3306,7 @@ msgstr ""
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-08 02:41+0000\n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"PO-Revision-Date: 2025-05-12 14:16+0000\n"
|
||||
"Last-Translator: Felix <xnovaua@gmail.com>\n"
|
||||
"Language-Team: Ukrainian <https://translations.herculino.com/projects/"
|
||||
@@ -32,8 +32,8 @@ msgstr "Назва групи"
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Оновлення"
|
||||
|
||||
@@ -46,7 +46,7 @@ msgstr "Оновлення"
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -83,22 +83,22 @@ msgstr "Новий баланс"
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
msgid "Category"
|
||||
msgstr "Категорія"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
#: templates/insights/fragments/category_overview/index.html:36
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Мітки"
|
||||
@@ -129,7 +129,7 @@ msgstr "Група рахунків"
|
||||
|
||||
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
|
||||
#: templates/account_groups/pages/index.html:4
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
|
||||
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
|
||||
msgid "Account Groups"
|
||||
msgstr "Групи рахунків"
|
||||
|
||||
@@ -172,7 +172,7 @@ msgstr ""
|
||||
"Заархівовані рахунки не відображаються і не враховуються у вашій чистій "
|
||||
"вартості"
|
||||
|
||||
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
@@ -186,19 +186,19 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Рахунок"
|
||||
|
||||
#: apps/accounts/models.py:71 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
|
||||
#: templates/accounts/fragments/list.html:5
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
|
||||
#: templates/includes/sidebar.html:182
|
||||
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
|
||||
#: templates/includes/sidebar.html:206
|
||||
#: templates/monthly_overview/pages/overview.html:94
|
||||
#: templates/transactions/fragments/summary.html:12
|
||||
#: templates/transactions/pages/transactions.html:81
|
||||
#: templates/transactions/pages/transactions.html:137
|
||||
msgid "Accounts"
|
||||
msgstr "Рахунки"
|
||||
|
||||
#: apps/accounts/models.py:84
|
||||
#: apps/accounts/models.py:93
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr "Валюта обміну не може збігатися з основною валютою рахунку."
|
||||
|
||||
@@ -234,7 +234,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Групу рахунків успішно видалено"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:169 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/rules/views.py:187 apps/transactions/views/categories.py:192
|
||||
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
|
||||
msgid "Ownership taken successfully"
|
||||
@@ -259,6 +259,14 @@ msgstr "Рахунок успішно оновлено"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Рахунок успішно видалено"
|
||||
|
||||
#: apps/accounts/views/accounts.py:165
|
||||
msgid "Account is now tracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/accounts.py:168
|
||||
msgid "Account is now untracked"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Звірка балансу"
|
||||
@@ -310,7 +318,7 @@ msgid "Shared with users"
|
||||
msgstr "Поділитися з користувачами"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Помилка створення нового екземпляра"
|
||||
|
||||
@@ -356,7 +364,7 @@ msgstr ""
|
||||
"доступом. Редагувати може лише власник.<br/> Public: Відображається для всіх "
|
||||
"користувачів. Редагувати може лише власник."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
msgid "Save"
|
||||
msgstr "Зберегти"
|
||||
|
||||
@@ -455,12 +463,13 @@ msgstr "Помилка"
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: apps/common/views.py:111
|
||||
#: apps/common/views.py:118
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Кеш успішно очищено"
|
||||
|
||||
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
|
||||
#: apps/common/widgets/datepicker.py:266
|
||||
#: templates/common/fragments/month_year_picker.html:53
|
||||
msgid "Today"
|
||||
msgstr "Сьогодні"
|
||||
|
||||
@@ -474,8 +483,10 @@ msgstr "Видалити"
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:174
|
||||
#: templates/monthly_overview/pages/overview.html:172
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/monthly_overview/pages/overview.html:215
|
||||
#: templates/monthly_overview/pages/overview.html:227
|
||||
#: templates/transactions/pages/transactions.html:89
|
||||
#: templates/transactions/pages/transactions.html:101
|
||||
msgid "Clear"
|
||||
msgstr "Чисто"
|
||||
|
||||
@@ -517,11 +528,11 @@ msgstr "Десяткові знаки"
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
|
||||
#: templates/includes/sidebar.html:196
|
||||
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
|
||||
#: templates/includes/sidebar.html:220
|
||||
#: templates/monthly_overview/pages/overview.html:81
|
||||
#: templates/transactions/fragments/summary.html:8
|
||||
#: templates/transactions/pages/transactions.html:68
|
||||
#: templates/transactions/pages/transactions.html:124
|
||||
msgid "Currencies"
|
||||
msgstr "Валюти"
|
||||
|
||||
@@ -553,7 +564,7 @@ msgstr ""
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Обмінні курси"
|
||||
|
||||
@@ -561,27 +572,27 @@ msgstr "Обмінні курси"
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Валюти «Від» і «До» не можуть бути однаковими."
|
||||
|
||||
#: apps/currencies/models.py:104
|
||||
#: apps/currencies/models.py:105
|
||||
msgid "On"
|
||||
msgstr "On"
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Every X hours"
|
||||
msgstr "Кожні Х годин"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:107
|
||||
msgid "Not on"
|
||||
msgstr "Not on"
|
||||
|
||||
#: apps/currencies/models.py:108
|
||||
#: apps/currencies/models.py:109
|
||||
msgid "Service Name"
|
||||
msgstr "Назва сервісу"
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Service Type"
|
||||
msgstr "Тип сервісу"
|
||||
|
||||
#: apps/currencies/models.py:112 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -590,79 +601,79 @@ msgstr "Тип сервісу"
|
||||
msgid "Active"
|
||||
msgstr "Активний"
|
||||
|
||||
#: apps/currencies/models.py:117
|
||||
#: apps/currencies/models.py:118
|
||||
msgid "API Key"
|
||||
msgstr "Ключ API"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:119
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API-ключ для сервісу (якщо потрібно)"
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "Interval Type"
|
||||
msgstr "Тип інтервалу"
|
||||
|
||||
#: apps/currencies/models.py:127
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Interval"
|
||||
msgstr "Інтервал"
|
||||
|
||||
#: apps/currencies/models.py:130
|
||||
#: apps/currencies/models.py:131
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Остання успішна вибірка"
|
||||
|
||||
#: apps/currencies/models.py:135
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:137
|
||||
#: apps/currencies/models.py:138
|
||||
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:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:147
|
||||
#: apps/currencies/models.py:148
|
||||
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:154
|
||||
#: apps/currencies/models.py:155
|
||||
#, fuzzy
|
||||
#| msgid "Exchange Rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Обмінний курс"
|
||||
|
||||
#: apps/currencies/models.py:157
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:164
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:215
|
||||
#: apps/currencies/models.py:216
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:224
|
||||
#: apps/currencies/models.py:225
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:238
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:249
|
||||
#: apps/currencies/models.py:250
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -819,15 +830,15 @@ msgid "Entry deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
|
||||
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
|
||||
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
|
||||
#: templates/includes/sidebar.html:160
|
||||
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
|
||||
#: templates/includes/sidebar.html:184
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:39
|
||||
#: templates/transactions/pages/transactions.html:5
|
||||
@@ -835,28 +846,29 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:186
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
|
||||
#: templates/includes/sidebar.html:174
|
||||
#: templates/includes/sidebar.html:198
|
||||
#: templates/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
|
||||
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
|
||||
#: templates/includes/sidebar.html:95
|
||||
#: templates/includes/sidebar.html:120
|
||||
#: templates/recurring_transactions/fragments/list.html:5
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
@@ -864,7 +876,7 @@ msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
|
||||
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
|
||||
#: templates/includes/sidebar.html:89
|
||||
#: templates/includes/sidebar.html:114
|
||||
#: templates/installment_plans/fragments/list.html:5
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -873,12 +885,12 @@ msgstr ""
|
||||
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
|
||||
#: templates/exchange_rates_services/fragments/list.html:6
|
||||
#: templates/exchange_rates_services/pages/index.html:4
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
|
||||
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
|
||||
msgid "Automatic Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
|
||||
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
|
||||
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
|
||||
#: templates/rules/pages/index.html:4
|
||||
msgid "Rules"
|
||||
msgstr ""
|
||||
@@ -918,7 +930,7 @@ msgstr ""
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:176
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -948,7 +960,7 @@ msgstr ""
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
|
||||
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
@@ -1017,10 +1029,10 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167
|
||||
#: templates/insights/fragments/category_overview/index.html:73
|
||||
#: templates/insights/fragments/category_overview/index.html:284
|
||||
#: templates/insights/fragments/category_overview/index.html:313
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1278,7 +1290,7 @@ msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/insights/fragments/category_overview/index.html:61
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1293,26 +1305,49 @@ msgstr ""
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:91
|
||||
#: apps/transactions/filters.py:85
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:101
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:111
|
||||
#: apps/transactions/filters.py:105
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:116
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Amount max"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
#, fuzzy
|
||||
#| msgid "Category"
|
||||
msgid "Categorized"
|
||||
msgstr "Категорія"
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:195
|
||||
#: templates/insights/fragments/category_overview/index.html:181
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:201
|
||||
msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
msgid "No entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
msgid "More"
|
||||
msgstr ""
|
||||
@@ -1412,7 +1447,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:54
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:10
|
||||
#: templates/cotton/ui/transactions_fab.html:10
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/insights/fragments/category_overview/index.html:79
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
@@ -1424,7 +1459,7 @@ msgstr ""
|
||||
#: templates/calendar_view/fragments/list.html:58
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:18
|
||||
#: templates/cotton/ui/transactions_fab.html:19
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:80
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
@@ -1460,12 +1495,12 @@ msgstr ""
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
|
||||
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:456 apps/users/models.py:464
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
|
||||
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
@@ -1564,7 +1599,7 @@ msgid "Quick Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
|
||||
#: templates/includes/sidebar.html:83
|
||||
#: templates/includes/sidebar.html:108
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:11
|
||||
msgid "Quick Transactions"
|
||||
@@ -1656,11 +1691,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
msgid "Item added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:184
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
msgid "Item updated successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1777,24 +1812,26 @@ msgid "This account is deactivated"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
|
||||
#: templates/monthly_overview/pages/overview.html:153
|
||||
#: templates/transactions/pages/transactions.html:28
|
||||
#: templates/monthly_overview/pages/overview.html:140
|
||||
#: templates/monthly_overview/pages/overview.html:186
|
||||
#: templates/transactions/pages/transactions.html:14
|
||||
#: templates/transactions/pages/transactions.html:60
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:146
|
||||
#: apps/users/forms.py:148
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1802,59 +1839,59 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:155
|
||||
#: apps/users/forms.py:157
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:158
|
||||
#: apps/users/forms.py:160
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:161
|
||||
#: apps/users/forms.py:163
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:247
|
||||
#: apps/users/forms.py:249
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:255
|
||||
#: apps/users/forms.py:257
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:261
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:279
|
||||
#: apps/users/forms.py:281
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:292
|
||||
#: apps/users/forms.py:294
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:298
|
||||
#: apps/users/forms.py:300
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:395
|
||||
#: apps/users/forms.py:397
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
@@ -1879,7 +1916,7 @@ msgid "All Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:470 templates/includes/navbar.html:33
|
||||
#: templates/includes/sidebar.html:48
|
||||
#: templates/includes/sidebar.html:73
|
||||
msgid "Calendar"
|
||||
msgstr ""
|
||||
|
||||
@@ -1974,7 +2011,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2001,7 +2038,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:186
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2031,7 +2068,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:187
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2053,7 +2090,7 @@ msgstr ""
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:188
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2134,7 +2171,15 @@ msgstr ""
|
||||
msgid "Is Asset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
msgid "No accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -2192,7 +2237,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2201,13 +2246,14 @@ msgid "Pick a month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
|
||||
#: templates/includes/sidebar.html:28
|
||||
#: templates/includes/sidebar.html:53
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/config/search.html:6
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:13
|
||||
#: templates/monthly_overview/pages/overview.html:177
|
||||
#: templates/monthly_overview/pages/overview.html:160
|
||||
#: templates/transactions/pages/transactions.html:34
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
@@ -2216,35 +2262,40 @@ msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
msgid "Show on summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
msgid "Controlled by account"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
msgid "Controlled by category"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
msgid "Add as quick transaction"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:167
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:168
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
@@ -2425,7 +2476,7 @@ msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:125
|
||||
#: templates/monthly_overview/fragments/list.html:47
|
||||
#: templates/transactions/fragments/list_all.html:40
|
||||
#: templates/transactions/fragments/list_all.html:47
|
||||
msgid "Try adding one"
|
||||
msgstr ""
|
||||
|
||||
@@ -2527,7 +2578,7 @@ msgid "Edit exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: templates/exchange_rates/fragments/list.html:25
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
|
||||
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
|
||||
#: templates/installment_plans/fragments/list.html:21
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:105
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:107
|
||||
@@ -2551,7 +2602,7 @@ msgstr ""
|
||||
|
||||
#: 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:54
|
||||
msgid "Page navigation"
|
||||
msgstr ""
|
||||
|
||||
@@ -2584,7 +2635,7 @@ msgid "No services configured"
|
||||
msgstr ""
|
||||
|
||||
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
|
||||
#: templates/includes/sidebar.html:223
|
||||
#: templates/includes/sidebar.html:247
|
||||
msgid "Export and Restore"
|
||||
msgstr ""
|
||||
|
||||
@@ -2680,72 +2731,72 @@ msgstr ""
|
||||
msgid "Overview"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
|
||||
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
|
||||
msgid "Net Worth"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
|
||||
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
|
||||
#: templates/insights/pages/index.html:5
|
||||
msgid "Insights"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
|
||||
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
|
||||
msgid "Trash Can"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
|
||||
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
|
||||
msgid "Tools"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
|
||||
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
|
||||
msgid "Dollar Cost Average Tracker"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
|
||||
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
|
||||
#: templates/mini_tools/unit_price_calculator.html:5
|
||||
#: templates/mini_tools/unit_price_calculator.html:10
|
||||
msgid "Unit Price Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
|
||||
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:8
|
||||
#: templates/mini_tools/currency_converter/currency_converter.html:15
|
||||
msgid "Currency Converter"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
|
||||
#: templates/includes/sidebar.html:147
|
||||
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
|
||||
#: templates/includes/sidebar.html:171
|
||||
msgid "Management"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
|
||||
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
|
||||
msgid "Automation"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
|
||||
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
|
||||
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
|
||||
msgid "Only use this if you know what you're doing"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
|
||||
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
|
||||
msgid "Django Admin"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
|
||||
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
|
||||
msgid "is available"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
|
||||
#: templates/includes/sidebar.html:266
|
||||
#: templates/includes/sidebar.html:290
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
@@ -2819,26 +2870,28 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#: templates/insights/fragments/category_overview/index.html:52
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags and entities will be "
|
||||
"counted once for each tag"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
msgid "Final total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
@@ -3043,26 +3096,30 @@ msgstr ""
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/transactions/pages/transactions.html:17
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:148
|
||||
#: templates/transactions/pages/transactions.html:23
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:155
|
||||
#: templates/transactions/pages/transactions.html:30
|
||||
#: templates/monthly_overview/pages/overview.html:141
|
||||
#: templates/monthly_overview/pages/overview.html:195
|
||||
#: templates/transactions/pages/transactions.html:15
|
||||
#: templates/transactions/pages/transactions.html:69
|
||||
msgid "Oldest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:157
|
||||
#: templates/transactions/pages/transactions.html:32
|
||||
#: templates/monthly_overview/pages/overview.html:142
|
||||
#: templates/monthly_overview/pages/overview.html:204
|
||||
#: templates/transactions/pages/transactions.html:16
|
||||
#: templates/transactions/pages/transactions.html:78
|
||||
msgid "Newest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:151
|
||||
#: templates/transactions/pages/transactions.html:25
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:176
|
||||
#: templates/transactions/pages/transactions.html:50
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:40
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:9
|
||||
msgid "By currency"
|
||||
@@ -3270,7 +3327,7 @@ msgstr ""
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:39
|
||||
#: templates/transactions/fragments/list_all.html:46
|
||||
msgid "No transactions found"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -71,6 +71,17 @@
|
||||
hx-get="{% url 'account_share_settings' pk=account.id %}">
|
||||
<i class="fa-solid fa-share fa-fw"></i></a>
|
||||
{% endif %}
|
||||
<a class="btn btn-secondary btn-sm"
|
||||
role="button"
|
||||
hx-get="{% url 'account_toggle_untracked' pk=account.id %}"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% if account.is_untracked_by %}{% translate "Track" %}{% else %}{% translate "Untrack" %}{% endif %}">
|
||||
{% if account.is_untracked_by %}
|
||||
<i class="fa-solid fa-eye fa-fw"></i>
|
||||
{% else %}
|
||||
<i class="fa-solid fa-eye-slash fa-fw"></i>
|
||||
{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
<td class="col">{{ account.name }}</td>
|
||||
|
||||
@@ -5,47 +5,51 @@
|
||||
{% block title %}{% translate 'Pick a month' %}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% regroup month_year_data by year as years_list %}
|
||||
{% regroup month_year_data by year as years_list %}
|
||||
|
||||
<ul class="nav nav-pills nav-fill" id="yearTabs" role="tablist">
|
||||
{% for x in years_list %}
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link{% if x.grouper == current_year %} active{% endif %}"
|
||||
id="{{ x.grouper }}"
|
||||
data-bs-toggle="tab"
|
||||
data-bs-target="#{{ x.grouper }}-pane"
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-controls="{{ x.grouper }}-pane"
|
||||
aria-selected="{% if x.grouper == current_year %}true{% else %}false{% endif %}">
|
||||
{{ x.grouper }}
|
||||
</button>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="tab-content" id="yearTabsContent" hx-boost="true">
|
||||
{% for x in years_list %}
|
||||
<div class="tab-pane fade{% if x.grouper == current_year %} show active{% endif %} mt-2"
|
||||
id="{{ x.grouper }}-pane"
|
||||
role="tabpanel"
|
||||
aria-labelledby="{{ x.grouper }}"
|
||||
tabindex="0">
|
||||
<ul class="list-group list-group-flush" id="month-year-list">
|
||||
{% for month_data in x.list %}
|
||||
<li class="list-group-item tw:hover:bg-zinc-900
|
||||
{% if month_data.month == current_month and month_data.year == current_year %} disabled bg-primary{% endif %}"
|
||||
{% if month_data.month == current_month and month_data.year == current_year %}aria-disabled="true"{% endif %}>
|
||||
<div class="d-flex justify-content-between">
|
||||
<a class="text-decoration-none stretched-link {% if month_data.month == current_month and month_data.year == current_year %} text-black{% endif %}"
|
||||
href={{ month_data.url }}>
|
||||
{{ month_data.month|month_name }}</a>
|
||||
<span class="badge text-bg-secondary">{{ month_data.transaction_count }}</span>
|
||||
</div>
|
||||
|
||||
<ul class="nav nav-pills nav-fill" id="yearTabs" role="tablist">
|
||||
{% for x in years_list %}
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link{% if x.grouper == current_year %} active{% endif %}"
|
||||
id="{{ x.grouper }}"
|
||||
data-bs-toggle="tab"
|
||||
data-bs-target="#{{ x.grouper }}-pane"
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-controls="{{ x.grouper }}-pane"
|
||||
aria-selected="{% if x.grouper == current_year %}true{% else %}false{% endif %}">
|
||||
{{ x.grouper }}
|
||||
</button>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="tab-content" id="yearTabsContent" hx-boost="true">
|
||||
{% for x in years_list %}
|
||||
<div class="tab-pane fade{% if x.grouper == current_year %} show active{% endif %} mt-2"
|
||||
id="{{ x.grouper }}-pane"
|
||||
role="tabpanel"
|
||||
aria-labelledby="{{ x.grouper }}"
|
||||
tabindex="0">
|
||||
<ul class="list-group list-group-flush" id="month-year-list">
|
||||
{% for month_data in x.list %}
|
||||
<li class="list-group-item tw:hover:bg-zinc-900
|
||||
{% if month_data.month == current_month and month_data.year == current_year %} disabled bg-primary{% endif %}"
|
||||
{% if month_data.month == current_month and month_data.year == current_year %}aria-disabled="true"{% endif %}>
|
||||
<div class="d-flex justify-content-between">
|
||||
<a class="text-decoration-none stretched-link {% if month_data.month == current_month and month_data.year == current_year %} text-black{% endif %}"
|
||||
href={{ month_data.url }}>
|
||||
{{ month_data.month|month_name }}</a>
|
||||
<span class="badge text-bg-secondary">{{ month_data.transaction_count }}</span>
|
||||
</div>
|
||||
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<hr>
|
||||
<div class="w-full text-end">
|
||||
<a class="btn btn-outline-primary btn-sm" href="{{ today_url }}" role="button" hx-boost="true">{% trans 'Today' %}</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
3
app/templates/common/placeholder.html
Normal file
3
app/templates/common/placeholder.html
Normal file
@@ -0,0 +1,3 @@
|
||||
{#This is here so we can add dynamic Tailwind classes that will be required via JS/hyperscript but Tailwind has no knowledge of#}
|
||||
<div class="tw:lg:w-[15vw]"></div>
|
||||
<div class="tw:lg:ml-[16vw]"></div>
|
||||
@@ -1,6 +1,6 @@
|
||||
<li>
|
||||
<div class="d-flex align-items-center">
|
||||
<span class="text-muted small fw-bold text-uppercase tw:lg:hidden tw:lg:group-hover:inline me-2">{{ title }}</span>
|
||||
<span class="sidebar-menu-header text-muted small fw-bold text-uppercase me-2">{{ title }}</span>
|
||||
<hr class="flex-grow-1"/>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% load active_link %}
|
||||
<li>
|
||||
<a href="{% url url %}"
|
||||
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
|
||||
class="tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
|
||||
{% if tooltip %}
|
||||
data-bs-placement="right"
|
||||
data-bs-toggle="tooltip"
|
||||
@@ -9,6 +9,6 @@
|
||||
{% endif %}>
|
||||
<i class="{{ icon }} fa-fw"></i>
|
||||
<span
|
||||
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
|
||||
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<li>
|
||||
<a href="{{ url }}"
|
||||
hx-boost="false"
|
||||
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
|
||||
class="tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
|
||||
{% if tooltip %}
|
||||
data-bs-placement="right"
|
||||
data-bs-toggle="tooltip"
|
||||
@@ -11,6 +11,6 @@
|
||||
|
||||
<i class="{{ icon }} fa-fw"></i>
|
||||
<span
|
||||
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
|
||||
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-lg col-12 {% if transaction.category.mute or transaction.mute %}tw:brightness-80{% endif %}">
|
||||
<div class="col-lg col-12 {% if transaction.account.is_untracked_by or transaction.category.mute or transaction.mute %}tw:brightness-80{% endif %}">
|
||||
{# Date#}
|
||||
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
|
||||
<div class="col-auto pe-1"><i class="fa-solid fa-calendar fa-fw me-1 fa-xs"></i></div>
|
||||
@@ -91,7 +91,7 @@
|
||||
{% endwith %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-auto col-12 text-lg-end align-self-end {% if transaction.category.mute or transaction.mute %}tw:brightness-80{% endif %}">
|
||||
<div class="col-lg-auto col-12 text-lg-end align-self-end {% if transaction.account.is_untracked_by or transaction.category.mute or transaction.mute %}tw:brightness-80{% endif %}">
|
||||
<div class="main-amount mb-2 mb-lg-0">
|
||||
<c-amount.display
|
||||
:amount="transaction.amount"
|
||||
@@ -120,8 +120,8 @@
|
||||
<div>
|
||||
{# Item actions#}
|
||||
<div
|
||||
class="transaction-actions tw:absolute! tw:right-[15px] tw:top-[50%] tw:md:right-auto tw:md:left-1/2 tw:md:top-0 tw:md:-translate-x-1/2 tw:-translate-y-1/2 tw:invisible tw:group-hover/transaction:visible d-flex flex-row card">
|
||||
<div class="card-body p-1 shadow-lg d-flex flex-column flex-md-row gap-1">
|
||||
class="transaction-actions tw:absolute! tw:left-1/2 tw:top-0 tw:-translate-x-1/2 tw:-translate-y-1/2 tw:invisible tw:group-hover/transaction:visible d-flex flex-row card">
|
||||
<div class="card-body p-1 shadow-lg d-flex flex-row gap-1">
|
||||
{% if not transaction.deleted %}
|
||||
<a class="btn btn-secondary btn-sm transaction-action"
|
||||
role="button"
|
||||
@@ -146,16 +146,26 @@
|
||||
<i class="fa-solid fa-ellipsis fa-fw"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-md-start">
|
||||
{% if transaction.category.mute %}
|
||||
<li>
|
||||
<a class="dropdown-item disabled d-flex align-items-center" aria-disabled="true">
|
||||
<i class="fa-solid fa-eye fa-fw me-2"></i>
|
||||
<div>
|
||||
{% translate 'Show on summaries' %}
|
||||
<div class="d-block text-body-secondary tw:text-xs tw:font-medium">{% translate 'Controlled by category' %}</div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
{% if transaction.account.is_untracked_by %}
|
||||
<li>
|
||||
<a class="dropdown-item disabled d-flex align-items-center" aria-disabled="true">
|
||||
<i class="fa-solid fa-eye fa-fw me-2"></i>
|
||||
<div>
|
||||
{% translate 'Show on summaries' %}
|
||||
<div class="d-block text-body-secondary tw:text-xs tw:font-medium">{% translate 'Controlled by account' %}</div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
{% elif transaction.category.mute %}
|
||||
<li>
|
||||
<a class="dropdown-item disabled d-flex align-items-center" aria-disabled="true">
|
||||
<i class="fa-solid fa-eye fa-fw me-2"></i>
|
||||
<div>
|
||||
{% translate 'Show on summaries' %}
|
||||
<div class="d-block text-body-secondary tw:text-xs tw:font-medium">{% translate 'Controlled by category' %}</div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
{% elif transaction.mute %}
|
||||
<li><a class="dropdown-item" href="#" hx-get="{% url 'transaction_mute' transaction_id=transaction.id %}" hx-target="closest .transaction" hx-swap="outerHTML"><i class="fa-solid fa-eye fa-fw me-2"></i>{% translate 'Show on summaries' %}</a></li>
|
||||
{% else %}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
{% block body %}
|
||||
<div class="container p-3">
|
||||
<form method="post" action="{% url 'export_form' %}" id="export-form" class="show-loading px-1" _="on submit trigger hide_offcanvas" target="_blank">
|
||||
<form hx-post="{% url 'export_form' %}" hx-ext="htmx-download" hx-swap="none" id="export-form" class="show-loading px-1" target="_blank">
|
||||
{% crispy form %}
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@@ -11,7 +11,7 @@ init
|
||||
end
|
||||
|
||||
on htmx:afterSettle
|
||||
call initTooltips(event.detail.target)
|
||||
call initTooltips(body)
|
||||
end
|
||||
|
||||
on tooltips
|
||||
|
||||
@@ -5,31 +5,56 @@
|
||||
{% load static %}
|
||||
|
||||
<div
|
||||
class="tw:group tw:lg:w-16 tw:lg:hover:w-112 tw:transition-all tw:duration-100 tw:fixed tw:top-0 tw:start-0 tw:h-full tw:z-1020">
|
||||
class="sidebar {% if request.session.sidebar_status == 'floating' %}tw:group sidebar-floating{% elif request.session.sidebar_status == 'fixed' %}sidebar-fixed{% else %}tw:group sidebar-floating{% endif %}"
|
||||
id="sidebar-container">
|
||||
<nav
|
||||
id="sidebar"
|
||||
hx-boost="true"
|
||||
data-bs-scroll="true"
|
||||
class="offcanvas-lg offcanvas-start d-lg-flex flex-column position-fixed top-0 start-0 h-100 bg-body-tertiary shadow-sm tw:z-1020 tw:lg:w-16 tw:lg:group-hover:w-104 tw:transition-all tw:duration-100 tw:overflow-hidden">
|
||||
<div
|
||||
class="tw:hidden tw:lg:group-hover:block tw:absolute tw:top-0 tw:left-104 tw:w-8 tw:h-full tw:bg-transparent tw:pointer-events-auto tw:z-10"></div>
|
||||
class="offcanvas-lg offcanvas-start d-lg-flex flex-column position-fixed top-0 start-0 h-100 bg-body-tertiary shadow-sm tw:z-1020">
|
||||
|
||||
<a href="{% url 'index' %}" class="d-none d-lg-flex tw:justify-start p-3 text-decoration-none">
|
||||
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
|
||||
<span class="fs-4 fw-bold ms-3 tw:lg:invisible tw:lg:group-hover:visible">WYGIWYH</span>
|
||||
</a>
|
||||
{# <div>#}
|
||||
{# <a href="{% url 'index' %}" class="d-none d-lg-flex tw:justify-start p-3 text-decoration-none sidebar-title">#}
|
||||
{# <img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>#}
|
||||
{# <span class="fs-4 fw-bold ms-3">WYGIWYH</span>#}
|
||||
{# </a>#}
|
||||
{##}
|
||||
{##}
|
||||
{# </div>#}
|
||||
|
||||
<div class="d-none d-lg-flex tw:justify-between tw:items-center tw:border-b tw:border-gray-600 tw:lg:flex">
|
||||
<a href="{% url 'index' %}" class="m-0 d-none d-lg-flex tw:justify-start p-3 text-decoration-none sidebar-title">
|
||||
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
|
||||
<span class="fs-4 fw-bold ms-3">WYGIWYH</span>
|
||||
</a>
|
||||
|
||||
<button
|
||||
id="sidebar-toggle-btn"
|
||||
class="text-secondary-emphasis tw:rounded-full tw:w-12 tw:h-12 tw:flex tw:items-center tw:justify-center tw:transition-all tw:duration-300"
|
||||
hx-get="{% url 'toggle_sidebar_status' %}"
|
||||
_="on click
|
||||
toggle .sidebar-floating on #sidebar-container
|
||||
toggle .tw\:group on #sidebar-container
|
||||
toggle .sidebar-fixed on #sidebar-container
|
||||
end
|
||||
"
|
||||
>
|
||||
<i class="fa-solid fa-thumbtack fa-sm"></i>
|
||||
<i class="fa-solid fa-thumbtack-slash fa-sm"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="offcanvas-header">
|
||||
<a href="{% url 'index' %}" class="offcanvas-title d-flex tw:justify-start text-decoration-none">
|
||||
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
|
||||
<span class="fs-4 fw-bold ms-3 tw:lg:invisible tw:lg:group-hover:visible">WYGIWYH</span>
|
||||
<span class="fs-4 fw-bold ms-3">WYGIWYH</span>
|
||||
</a>
|
||||
<button type="button" class="btn-close" data-bs-target="#sidebar" data-bs-dismiss="offcanvas"
|
||||
aria-label={% translate 'Close' %}></button>
|
||||
</div>
|
||||
<hr class="m-0">
|
||||
|
||||
<ul class="list-unstyled p-3 d-flex flex-column gap-0 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
|
||||
<ul class="list-unstyled p-3 d-flex flex-column gap-0 tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
|
||||
style="animation-duration: 100ms">
|
||||
|
||||
<c-components.sidebar-menu-item
|
||||
@@ -127,10 +152,10 @@
|
||||
data-bs-target="#collapsible-panel"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapsible-panel"
|
||||
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views='tags_index||entities_index||categories_index||accounts_index||account_groups_index||currencies_index||exchange_rates_index||rules_index||import_profiles_index||automatic_exchange_rates_index||export_index||users_index' css_class="sidebar-active" %}">
|
||||
class="sidebar-menu-item tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views='tags_index||entities_index||categories_index||accounts_index||account_groups_index||currencies_index||exchange_rates_index||rules_index||import_profiles_index||automatic_exchange_rates_index||export_index||users_index' css_class="sidebar-active" %}">
|
||||
<i class="fa-solid fa-toolbox fa-fw"></i>
|
||||
<span
|
||||
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">
|
||||
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">
|
||||
{% translate 'Management' %}
|
||||
</span>
|
||||
</div>
|
||||
@@ -138,16 +163,15 @@
|
||||
|
||||
<div class="mt-auto p-2 w-100">
|
||||
<div id="collapsible-panel"
|
||||
class="p-0 collapse tw:absolute tw:bottom-0 tw:left-0 tw:w-full tw:z-30 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:max-h-dvh">
|
||||
<div class="tw:h-dvh tw:backdrop-blur-3xl">
|
||||
<!-- Header -->
|
||||
class="p-0 collapse tw:absolute tw:bottom-0 tw:left-0 tw:w-full tw:z-30 tw:max-h-dvh">
|
||||
<div class="tw:h-dvh tw:backdrop-blur-3xl tw:flex tw:flex-col">
|
||||
<div
|
||||
class="tw:flex tw:justify-between tw:items-center tw:p-4 tw:border-b tw:border-gray-600 tw:lg:hidden tw:lg:group-hover:flex">
|
||||
<h5 class="tw:text-lg tw:font-semibold tw:text-gray-800 tw:lg:invisible tw:lg:group-hover:visible">
|
||||
class="tw:justify-between tw:items-center tw:p-4 tw:border-b tw:border-gray-600 sidebar-submenu-header">
|
||||
<h5 class="tw:text-lg tw:font-semibold tw:text-gray-800 m-0">
|
||||
{% trans 'Management' %}
|
||||
</h5>
|
||||
|
||||
<button type="button" class="btn-close tw:lg:hidden tw:lg:group-hover:inline" aria-label="Close"
|
||||
<button type="button" class="btn-close" aria-label="Close"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapsible-panel"
|
||||
aria-expanded="true"
|
||||
@@ -155,7 +179,7 @@
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<ul class="list-unstyled p-3 d-flex flex-column gap-1 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
|
||||
<ul class="list-unstyled p-3 d-flex flex-column gap-1 tw:lg:group-hover:animate-[disable-pointer-events] tw:flex-1"
|
||||
style="animation-duration: 100ms">
|
||||
<c-components.sidebar-menu-header title="{% translate 'Transactions' %}"></c-components.sidebar-menu-header>
|
||||
<c-components.sidebar-menu-item
|
||||
@@ -261,7 +285,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="btn-group w-100" role="group">
|
||||
<div class="btn-group w-100 sidebar-item" role="group">
|
||||
<button type="button" class="btn btn-secondary btn-sm" data-bs-toggle="tooltip"
|
||||
data-bs-title="{% trans "Calculator" %}"
|
||||
_="on click trigger show on #calculator">
|
||||
@@ -273,17 +297,24 @@
|
||||
<div>
|
||||
<hr class="my-1">
|
||||
<div
|
||||
class="ps-4 pe-2 py-2 d-flex align-items-center text-body-secondary text-decoration-none justify-content-between tw:text-wrap tw:lg:text-nowrap">
|
||||
<div>
|
||||
<i class="fa-solid fa-circle-user"></i>
|
||||
<strong class="ms-2 tw:lg:invisible tw:lg:group-hover:visible">{{ user.email }}</strong>
|
||||
class="ps-4 pe-2 py-2 d-flex align-items-center text-decoration-none justify-content-between">
|
||||
|
||||
<div class="d-flex align-items-center" style="min-width: 0;">
|
||||
<i class="fa-solid fa-circle-user text-body-secondary"></i>
|
||||
|
||||
<strong class="mx-2 text-body-secondary text-truncate sidebar-invisible">
|
||||
{{ user.email }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="tw:lg:invisible tw:lg:group-hover:visible">
|
||||
|
||||
<div class="sidebar-invisible">
|
||||
{% include 'includes/navbar/user_menu.html' %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div
|
||||
class="tw:hidden tw:lg:group-hover:block tw:absolute tw:top-0 tw:left-104 tw:w-16 tw:h-full tw:bg-transparent"></div>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% load i18n %}
|
||||
|
||||
<div hx-get="{% url 'category_overview' %}" hx-trigger="updated from:window" class="show-loading" hx-swap="outerHTML"
|
||||
hx-include="#picker-form, #picker-type, #view-type, #show-tags, #showing">
|
||||
hx-include="#picker-form, #picker-type, #view-type, #show-tags, #showing, #show-entities">
|
||||
<div class="h-100 text-center mb-4">
|
||||
<div class="btn-group gap-3" role="group" id="view-type" _="on change trigger updated">
|
||||
<input type="radio" class="btn-check"
|
||||
@@ -25,19 +25,34 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-3 mb-1 d-flex flex-column flex-md-row justify-content-between">
|
||||
<div class="form-check form-switch" id="show-tags">
|
||||
<div class="d-flex gap-4">
|
||||
{% if view_type == 'table' %}
|
||||
<input type="hidden" name="show_tags" value="off">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="show-tags-switch" name="show_tags"
|
||||
_="on change trigger updated" {% if show_tags %}checked{% endif %}>
|
||||
{% spaceless %}
|
||||
<label class="form-check-label" for="show-tags-switch">
|
||||
{% trans 'Tags' %}
|
||||
</label>
|
||||
<c-ui.help-icon
|
||||
content="{% trans 'Transaction amounts associated with multiple tags will be counted once for each tag' %}"
|
||||
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
|
||||
{% endspaceless %}
|
||||
<div class="form-check form-switch" id="show-tags">
|
||||
<input type="hidden" name="show_tags" value="off">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="show-tags-switch" name="show_tags"
|
||||
_="on change trigger updated" {% if show_tags %}checked{% endif %}>
|
||||
{% spaceless %}
|
||||
<label class="form-check-label" for="show-tags-switch">
|
||||
{% trans 'Tags' %}
|
||||
</label>
|
||||
<c-ui.help-icon
|
||||
content="{% trans 'Transaction amounts associated with multiple tags will be counted once for each tag' %}"
|
||||
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
|
||||
{% endspaceless %}
|
||||
</div>
|
||||
<div class="form-check form-switch" id="show-entities" {% if not show_tags %}style="display: none;"{% endif %}>
|
||||
<input type="hidden" name="show_entities" value="off">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="show-entities-switch" name="show_entities"
|
||||
_="on change trigger updated" {% if show_entities %}checked{% endif %}>
|
||||
{% spaceless %}
|
||||
<label class="form-check-label" for="show-entities-switch">
|
||||
{% trans 'Entities' %}
|
||||
</label>
|
||||
<c-ui.help-icon
|
||||
content="{% trans 'Transaction amounts associated with multiple tags and entities will be counted once for each tag' %}"
|
||||
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
|
||||
{% endspaceless %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="btn-group btn-group-sm" role="group" id="showing" _="on change trigger updated">
|
||||
@@ -250,6 +265,100 @@
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Entity rows -->
|
||||
{% if show_entities %}
|
||||
{% for entity_id, entity in tag.entities.items %}
|
||||
<tr class="table-row-nested-2">
|
||||
<td class="ps-5">
|
||||
<i class="fa-solid fa-user-group fa-fw me-2 text-muted"></i>{{ entity.name }}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.income_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.income_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.income_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.income_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_income != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_income"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.expense_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.expense_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.expense_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.expense_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_expense != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_expense"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.total_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.total_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_final != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_final"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
{% include 'includes/mobile_navbar.html' %}
|
||||
{% include 'includes/sidebar.html' %}
|
||||
|
||||
<main class="tw:p-4 tw:lg:ml-16">
|
||||
<main class="tw:p-4">
|
||||
{% settings "DEMO" as demo_mode %}
|
||||
{% if demo_mode %}
|
||||
<div class="px-3 m-0" id="demo-mode-alert" hx-preserve>
|
||||
|
||||
@@ -44,12 +44,12 @@
|
||||
</div>
|
||||
</div>
|
||||
{# Action buttons#}
|
||||
{# <div class="col-12 col-xl-8">#}
|
||||
{# <c-ui.quick-transactions-buttons#}
|
||||
{# :year="year"#}
|
||||
{# :month="month"#}
|
||||
{# ></c-ui.quick-transactions-buttons>#}
|
||||
{# </div>#}
|
||||
{# <div class="col-12 col-xl-8">#}
|
||||
{# <c-ui.quick-transactions-buttons#}
|
||||
{# :year="year"#}
|
||||
{# :month="month"#}
|
||||
{# ></c-ui.quick-transactions-buttons>#}
|
||||
{# </div>#}
|
||||
</div>
|
||||
{# Monthly summary#}
|
||||
<div class="row gx-xl-4 gy-3">
|
||||
@@ -133,59 +133,101 @@
|
||||
|
||||
</div>
|
||||
<div class="col-12 col-xl-8 order-2 order-xl-1">
|
||||
<div class="row mb-1">
|
||||
<div class="col-sm-6 col-12">
|
||||
{# Filter transactions button #}
|
||||
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle" type="button"
|
||||
data-bs-toggle="collapse" data-bs-target="#collapse-filter" aria-expanded="false"
|
||||
aria-controls="collapse-filter">
|
||||
<i class="fa-solid fa-filter fa-fw me-2"></i>{% translate 'Filter transactions' %}
|
||||
|
||||
<div class="my-3">
|
||||
{# Hidden select to hold the order value and preserve the original update trigger #}
|
||||
<select name="order" id="order" class="d-none" _="on change trigger updated on window">
|
||||
<option value="default" {% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
|
||||
<option value="older" {% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
|
||||
<option value="newer" {% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
|
||||
</select>
|
||||
|
||||
{# Main control bar with filter, search, and ordering #}
|
||||
<div class="input-group">
|
||||
|
||||
<button class="btn btn-secondary position-relative" type="button"
|
||||
data-bs-toggle="collapse" data-bs-target="#collapse-filter"
|
||||
aria-expanded="false" aria-controls="collapse-filter" id="filter-button" hx-preserve
|
||||
title="{% translate 'Filter transactions' %}">
|
||||
<i class="fa-solid fa-filter fa-fw"></i>
|
||||
</button>
|
||||
</div>
|
||||
{# Ordering button#}
|
||||
<div class="col-sm-6 col-12 tw:content-center my-3 my-sm-0">
|
||||
<div class="text-sm-end" _="on change trigger updated on window">
|
||||
<label for="order">{% translate "Order by" %}</label>
|
||||
<select
|
||||
class="tw:border-0 tw:focus-visible:outline-0 w-full pe-2 tw:leading-normal text-bg-tertiary tw:font-medium rounded bg-body text-body"
|
||||
name="order" id="order">
|
||||
<option value="default"
|
||||
{% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
|
||||
<option value="older"
|
||||
{% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
|
||||
<option value="newer"
|
||||
{% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{# Filter transactions form#}
|
||||
<div class="collapse" id="collapse-filter" hx-preserve>
|
||||
<div class="card card-body">
|
||||
<form _="on change or submit or search trigger updated on window end
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
<button class="btn btn-outline-danger btn-sm"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="search" class="my-3">
|
||||
<label class="w-100">
|
||||
<input type="search" class="form-control" placeholder="{% translate 'Search' %}" hx-preserve
|
||||
|
||||
{# Search box #}
|
||||
<label for="quick-search">
|
||||
</label>
|
||||
<input type="search"
|
||||
class="form-control"
|
||||
placeholder="{% translate 'Search' %}"
|
||||
hx-preserve
|
||||
id="quick-search"
|
||||
_="on input or search or htmx:afterSwap from window
|
||||
if my value is empty
|
||||
trigger toggle on <.transactions-divider-collapse/>
|
||||
else
|
||||
trigger show on <.transactions-divider-collapse/>
|
||||
end
|
||||
show <.transactions-divider-title/> when my value is empty
|
||||
show <.transaction/> in <#transactions-list/>
|
||||
when its textContent.toLowerCase() contains my value.toLowerCase()">
|
||||
</label>
|
||||
if my value is empty
|
||||
trigger toggle on <.transactions-divider-collapse/>
|
||||
else
|
||||
trigger show on <.transactions-divider-collapse/>
|
||||
end
|
||||
show <.transactions-divider-title/> when my value is empty
|
||||
show <.transaction/> in <#transactions-list/>
|
||||
when its textContent.toLowerCase() contains my value.toLowerCase()">
|
||||
|
||||
{# Order by icon dropdown #}
|
||||
<button class="btn btn-secondary dropdown-toggle dropdown-toggle-no-icon" type="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false"
|
||||
title="{% translate 'Order by' %}">
|
||||
<i class="fa-solid fa-sort fa-fw"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'default' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'default'
|
||||
then trigger change on #order">
|
||||
{% translate 'Default' %}
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'older' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'older'
|
||||
then trigger change on #order">
|
||||
{% translate 'Oldest first' %}
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'newer' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'newer'
|
||||
then trigger change on #order">
|
||||
{% translate 'Newest first' %}
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{# Filter transactions form #}
|
||||
<div class="collapse" id="collapse-filter" hx-preserve>
|
||||
<div class="card card-body">
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-danger btn-sm tw:w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
|
||||
<form _="on change or submit or search trigger updated on window
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter" class="mt-3">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-danger btn-sm tw:w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{# Transactions list#}
|
||||
<div id="transactions"
|
||||
|
||||
@@ -5,121 +5,128 @@
|
||||
|
||||
<div id="transactions-list">
|
||||
{% for x in transactions_by_date %}
|
||||
<div id="{{ x.grouper|slugify }}"
|
||||
_="on htmx:afterSettle from #transactions if sessionStorage.getItem(my id) is null then sessionStorage.setItem(my id, 'true')">
|
||||
<div class="mt-3 mb-1 w-100 tw:text-base border-bottom bg-body">
|
||||
<div id="{{ x.grouper|slugify }}" class="transactions-divider"
|
||||
_="on htmx:afterSwap from #transactions if sessionStorage.getItem(my id) is null then sessionStorage.setItem(my id, 'true')">
|
||||
<div class="mt-3 mb-1 w-100 tw:text-base border-bottom bg-body transactions-divider-title">
|
||||
<a class="text-decoration-none d-inline-block w-100"
|
||||
role="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#c-{{ x.grouper|slugify }}-collapse"
|
||||
id="c-{{ x.grouper|slugify }}-collapsible"
|
||||
aria-expanded="true"
|
||||
aria-expanded="false"
|
||||
aria-controls="c-{{ x.grouper|slugify }}-collapse">
|
||||
{{ x.grouper }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="collapse" id="c-{{ x.grouper|slugify }}-collapse"
|
||||
<div class="collapse transactions-divider-collapse" id="c-{{ x.grouper|slugify }}-collapse"
|
||||
_="on shown.bs.collapse sessionStorage.setItem(the closest parent @id, 'true')
|
||||
on hidden.bs.collapse sessionStorage.setItem(the closest parent @id, 'false')
|
||||
on htmx:afterSettle from #transactions
|
||||
on htmx:afterSettle from #transactions or toggle
|
||||
set state to sessionStorage.getItem(the closest parent @id)
|
||||
if state is 'true' or state is null
|
||||
add .show to me
|
||||
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to true
|
||||
end">
|
||||
else
|
||||
remove .show from me
|
||||
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to false
|
||||
end
|
||||
on show
|
||||
add .show to me
|
||||
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to true">
|
||||
<div class="d-flex flex-column">
|
||||
{% for transaction in x.list %}
|
||||
<c-transaction.item :transaction="transaction"></c-transaction.item>
|
||||
<c-transaction.item
|
||||
:transaction="transaction"></c-transaction.item>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% empty %}
|
||||
<c-msg.empty
|
||||
title="{% translate "No transactions found" %}"
|
||||
subtitle="{% translate "Try adding one" %}"></c-msg.empty>
|
||||
{% endfor %}
|
||||
title="{% translate "No transactions found" %}"
|
||||
subtitle="{% translate "Try adding one" %}"></c-msg.empty>
|
||||
{% endfor %}
|
||||
|
||||
{% if page_obj.has_other_pages %}
|
||||
<div class="mt-auto">
|
||||
<input value="{{ page_obj.number }}" name="page" type="hidden" id="page">
|
||||
<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 'transactions_all_list' %}{% endif %}"
|
||||
hx-vals='{"page": 1}'
|
||||
hx-include="#filter, #order"
|
||||
hx-target="#transactions-list"
|
||||
aria-label="Primeira página"
|
||||
hx-swap="show:top">
|
||||
<span aria-hidden="true">«</span>
|
||||
</a>
|
||||
</li>
|
||||
{% for page_number in page_obj.paginator.page_range %}
|
||||
{% comment %}
|
||||
<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 'transactions_all_list' %}{% endif %}"
|
||||
hx-vals='{"page": 1}'
|
||||
hx-include="#filter, #order"
|
||||
hx-target="#transactions-list"
|
||||
aria-label="Primeira página"
|
||||
hx-swap="show:top">
|
||||
<span aria-hidden="true">«</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 'transactions_all_list' %}"
|
||||
hx-vals='{"page": {{ page_number }}}'
|
||||
hx-include="#filter, #order"
|
||||
hx-target="#transactions-list"
|
||||
hx-swap="show:top">
|
||||
{{ page_number }}
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% 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 'transactions_all_list' %}"
|
||||
hx-vals='{"page": {{ page_number }}}'
|
||||
hx-include="#filter, #order"
|
||||
hx-target="#transactions-list"
|
||||
hx-swap="show:top">
|
||||
{{ page_number }}
|
||||
</a>
|
||||
</li>
|
||||
{% 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 'transactions_all_list' %}" hx-target="#transactions-list"
|
||||
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
|
||||
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 'transactions_all_list' %}{% endif %}"
|
||||
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
|
||||
hx-include="#filter, #order"
|
||||
hx-swap="show:top"
|
||||
hx-target="#transactions-list"
|
||||
aria-label="Next">
|
||||
<span aria-hidden="true">»</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
{% 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 'transactions_all_list' %}" hx-target="#transactions-list"
|
||||
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
|
||||
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 'transactions_all_list' %}{% endif %}"
|
||||
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
|
||||
hx-include="#filter, #order"
|
||||
hx-swap="show:top"
|
||||
hx-target="#transactions-list"
|
||||
aria-label="Next">
|
||||
<span aria-hidden="true">»</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
{% endif %}
|
||||
{# Floating bar#}
|
||||
{# Floating bar#}
|
||||
<c-ui.transactions-action-bar></c-ui.transactions-action-bar>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -8,45 +8,101 @@
|
||||
<div class="container px-md-3 py-3 column-gap-5">
|
||||
<div class="row gx-xl-4 gy-3">
|
||||
<div class="col-12 col-xl-8 order-2 order-xl-1">
|
||||
<div class="row mb-1">
|
||||
<div class="col-sm-6 col-12">
|
||||
{# Filter transactions button #}
|
||||
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle" type="button"
|
||||
data-bs-toggle="collapse" data-bs-target="#collapse-filter" aria-expanded="false"
|
||||
aria-controls="collapse-filter">
|
||||
<i class="fa-solid fa-filter fa-fw me-2"></i>{% translate 'Filter transactions' %}
|
||||
<div class="mb-3">
|
||||
{# Hidden select to hold the order value and preserve the original update trigger #}
|
||||
<select name="order" id="order" class="d-none" _="on change trigger updated on window">
|
||||
<option value="default" {% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
|
||||
<option value="older" {% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
|
||||
<option value="newer" {% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
|
||||
</select>
|
||||
|
||||
{# Main control bar with filter, search, and ordering #}
|
||||
<div class="input-group">
|
||||
|
||||
<button class="btn btn-secondary position-relative" type="button"
|
||||
data-bs-toggle="collapse" data-bs-target="#collapse-filter"
|
||||
aria-expanded="false" aria-controls="collapse-filter" id="filter-button" hx-preserve
|
||||
title="{% translate 'Filter transactions' %}">
|
||||
<i class="fa-solid fa-filter fa-fw"></i>
|
||||
</button>
|
||||
|
||||
{# Search box #}
|
||||
<label for="quick-search">
|
||||
</label>
|
||||
<input type="search"
|
||||
class="form-control"
|
||||
placeholder="{% translate 'Search' %}"
|
||||
hx-preserve
|
||||
id="quick-search"
|
||||
_="on input or search or htmx:afterSwap from window
|
||||
if my value is empty
|
||||
trigger toggle on <.transactions-divider-collapse/>
|
||||
else
|
||||
trigger show on <.transactions-divider-collapse/>
|
||||
end
|
||||
show <.transactions-divider-title/> when my value is empty
|
||||
show <.transaction/> in <#transactions-list/>
|
||||
when its textContent.toLowerCase() contains my value.toLowerCase()">
|
||||
|
||||
{# Order by icon dropdown #}
|
||||
<button class="btn btn-secondary dropdown-toggle dropdown-toggle-no-icon" type="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false"
|
||||
title="{% translate 'Order by' %}">
|
||||
<i class="fa-solid fa-sort fa-fw"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'default' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'default'
|
||||
then trigger change on #order">
|
||||
{% translate 'Default' %}
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'older' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'older'
|
||||
then trigger change on #order">
|
||||
{% translate 'Oldest first' %}
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button class="dropdown-item {% if order == 'newer' %}active{% endif %}" type="button"
|
||||
_="on click remove .active from .dropdown-item in the closest <ul/>
|
||||
then add .active to me
|
||||
then set the value of #order to 'newer'
|
||||
then trigger change on #order">
|
||||
{% translate 'Newest first' %}
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{# Ordering button#}
|
||||
<div class="col-sm-6 col-12 tw:content-center my-3 my-sm-0">
|
||||
<div class="text-sm-end" _="on change trigger updated on window">
|
||||
<label for="order">{% translate "Order by" %}</label>
|
||||
<select
|
||||
class="tw:border-0 tw:focus-visible:outline-0 w-full pe-2 tw:leading-normal text-bg-tertiary tw:font-medium rounded bg-body text-body"
|
||||
name="order" id="order">
|
||||
<option value="default"
|
||||
{% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
|
||||
<option value="older"
|
||||
{% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
|
||||
<option value="newer"
|
||||
{% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
|
||||
</select>
|
||||
|
||||
{# Filter transactions form #}
|
||||
<div class="collapse" id="collapse-filter" hx-preserve>
|
||||
<div class="card card-body">
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-danger btn-sm tw:w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
|
||||
<form _="on change or submit or search trigger updated on window
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter" class="mt-3">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
|
||||
<div class="text-end">
|
||||
<button class="btn btn-outline-danger btn-sm tw:w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{# Filter transactions form#}
|
||||
<div class="collapse" id="collapse-filter">
|
||||
<div class="card card-body">
|
||||
<form _="on change or submit or search trigger updated on window end
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
<button class="btn btn-outline-danger btn-sm"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="transactions"
|
||||
class="show-loading"
|
||||
hx-get="{% url 'transactions_all_list' %}"
|
||||
|
||||
@@ -1,2 +1,66 @@
|
||||
import htmx from "htmx.org";
|
||||
|
||||
window.htmx = htmx;
|
||||
|
||||
htmx.defineExtension('htmx-download', {
|
||||
onEvent: function (name, evt) {
|
||||
|
||||
if (name === 'htmx:beforeRequest') {
|
||||
// Set the responseType to 'arraybuffer' to handle binary data
|
||||
evt.detail.xhr.responseType = 'arraybuffer';
|
||||
}
|
||||
|
||||
if (name === 'htmx:beforeSwap') {
|
||||
const xhr = evt.detail.xhr;
|
||||
|
||||
if (xhr.status === 200) {
|
||||
// Parse headers
|
||||
const headers = {};
|
||||
const headerStr = xhr.getAllResponseHeaders();
|
||||
const headerArr = headerStr.trim().split(/[\r\n]+/);
|
||||
headerArr.forEach((line) => {
|
||||
const parts = line.split(": ");
|
||||
const header = parts.shift().toLowerCase();
|
||||
const value = parts.join(": ");
|
||||
headers[header] = value;
|
||||
});
|
||||
|
||||
// Extract filename
|
||||
let filename = 'downloaded_file.xlsx';
|
||||
if (headers['content-disposition']) {
|
||||
const filenameMatch = headers['content-disposition'].match(/filename\*?=(?:UTF-8'')?"?([^;\n"]+)/i);
|
||||
if (filenameMatch && filenameMatch[1]) {
|
||||
filename = decodeURIComponent(filenameMatch[1].replace(/['"]/g, ''));
|
||||
}
|
||||
}
|
||||
|
||||
// Determine MIME type
|
||||
const mimetype = headers['content-type'] || 'application/octet-stream';
|
||||
|
||||
// Create Blob
|
||||
const blob = new Blob([xhr.response], {type: mimetype});
|
||||
const url = URL.createObjectURL(blob);
|
||||
|
||||
// Trigger download
|
||||
const link = document.createElement("a");
|
||||
link.style.display = "none";
|
||||
link.href = url;
|
||||
link.download = filename;
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
|
||||
// Cleanup
|
||||
setTimeout(() => {
|
||||
URL.revokeObjectURL(url);
|
||||
link.remove();
|
||||
}, 100);
|
||||
|
||||
} else {
|
||||
console.warn(`[htmx-download] Unexpected response status: ${xhr.status}`);
|
||||
}
|
||||
|
||||
// Prevent htmx from swapping content
|
||||
evt.detail.shouldSwap = false;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -49,3 +49,7 @@ $theme-colors: map.merge(
|
||||
.offcanvas-size-sm {
|
||||
--#{$prefix}offcanvas-width: min(95vw, 250px) !important;
|
||||
}
|
||||
|
||||
.dropdown-toggle.dropdown-toggle-no-icon::after {
|
||||
display:none;
|
||||
}
|
||||
|
||||
@@ -85,3 +85,7 @@ select[multiple] {
|
||||
[data-bs-toggle="collapse"][aria-expanded="true"] .fa-chevron-down {
|
||||
transform: rotate(-180deg);
|
||||
}
|
||||
|
||||
div:where(.swal2-container) {
|
||||
z-index: 1100 !important;
|
||||
}
|
||||
|
||||
@@ -3,9 +3,139 @@
|
||||
@custom-variant hover (&:hover);
|
||||
|
||||
.sidebar-active {
|
||||
@apply tw:bg-gray-700 tw:text-white;
|
||||
@apply tw:bg-gray-700 tw:text-white;
|
||||
}
|
||||
|
||||
.sidebar-item:not(.sidebar-active) {
|
||||
@apply tw:text-gray-300 tw:hover:text-white;
|
||||
}
|
||||
|
||||
@layer components {
|
||||
.sidebar {
|
||||
@apply tw:z-1020 tw:fixed tw:top-0 tw:start-0 tw:h-full tw:transition-all tw:duration-100;
|
||||
}
|
||||
|
||||
.sidebar-floating {
|
||||
/* Establishes the hover group and sets the collapsed/hover widths for the container */
|
||||
@apply tw:lg:w-16 tw:lg:hover:w-112;
|
||||
}
|
||||
|
||||
.sidebar-floating #sidebar {
|
||||
/* Sets the collapsed/hover widths for the inner navigation element */
|
||||
@apply tw:lg:w-16 tw:lg:group-hover:w-104 tw:transition-all tw:duration-100 tw:overflow-hidden;
|
||||
}
|
||||
|
||||
.sidebar-floating + main {
|
||||
/* Adjusts the main content margin to account for the collapsed sidebar */
|
||||
@apply tw:lg:ml-16 tw:transition-all tw:duration-100;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-item span {
|
||||
/* Hides the text labels and reveals them only on hover */
|
||||
@apply tw:lg:invisible tw:lg:group-hover:visible;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-invisible {
|
||||
/* Hides the text labels and reveals them only on hover */
|
||||
@apply tw:lg:invisible tw:lg:group-hover:visible;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-menu-header {
|
||||
/* Hides the menu headers and reveals them only on hover */
|
||||
@apply tw:lg:hidden tw:lg:group-hover:inline;
|
||||
}
|
||||
|
||||
.sidebar-floating #sidebar-toggle-btn .fa-thumbtack-slash {
|
||||
/* Hides the 'pin' icon in the floating state */
|
||||
@apply tw:hidden!;
|
||||
}
|
||||
|
||||
.sidebar-floating #sidebar-toggle-btn .fa-thumbtack {
|
||||
/* Shows the 'expand' icon in the floating state */
|
||||
@apply tw:inline-block!;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-title span {
|
||||
@apply tw:lg:invisible tw:lg:group-hover:visible
|
||||
}
|
||||
|
||||
.sidebar-submenu-header {
|
||||
@apply tw:flex;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-submenu-header {
|
||||
@apply tw:lg:hidden tw:lg:group-hover:flex;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-submenu-header h5 {
|
||||
@apply tw:lg:invisible tw:lg:group-hover:visible;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-submenu-header button {
|
||||
@apply tw:lg:hidden tw:lg:group-hover:inline;
|
||||
}
|
||||
|
||||
.sidebar-floating .list-unstyled {
|
||||
@apply tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden;
|
||||
}
|
||||
|
||||
.sidebar-floating .sidebar-item {
|
||||
@apply tw:text-wrap tw:lg:text-nowrap ;
|
||||
}
|
||||
|
||||
|
||||
/* --- STATE 2: Fixed (Permanently Expanded) --- */
|
||||
.sidebar-fixed {
|
||||
/* Sets the fixed, expanded width for the container */
|
||||
@apply tw:lg:w-[17%] tw:transition-all tw:duration-100;
|
||||
}
|
||||
|
||||
.sidebar-fixed #sidebar {
|
||||
/* Sets the fixed, expanded width for the inner navigation */
|
||||
@apply tw:lg:w-[17%] tw:transition-all tw:duration-100;
|
||||
}
|
||||
|
||||
.sidebar-fixed + main {
|
||||
/* Adjusts the main content margin to account for the expanded sidebar */
|
||||
@apply tw:lg:ml-[17%] tw:transition-all tw:duration-100;
|
||||
|
||||
/* Using 16vw to account for padding/margins */
|
||||
}
|
||||
|
||||
.sidebar-fixed .sidebar-item {
|
||||
@apply tw:text-wrap;
|
||||
}
|
||||
|
||||
.sidebar-fixed .sidebar-item span {
|
||||
/* Ensures text labels are always visible */
|
||||
@apply tw:lg:visible;
|
||||
}
|
||||
|
||||
.sidebar-fixed .sidebar-menu-header {
|
||||
/* Ensures menu headers are always visible */
|
||||
@apply tw:lg:inline;
|
||||
}
|
||||
|
||||
.sidebar-fixed #sidebar-toggle-btn .fa-thumbtack-slash {
|
||||
/* Shows the 'pin' icon in the fixed state */
|
||||
@apply tw:inline-block!;
|
||||
}
|
||||
|
||||
.sidebar-fixed #sidebar-toggle-btn .fa-thumbtack {
|
||||
/* Hides the 'expand' icon in the fixed state */
|
||||
@apply tw:hidden!;
|
||||
}
|
||||
|
||||
.sidebar-fixed .sidebar-title span {
|
||||
@apply tw:lg:visible;
|
||||
}
|
||||
|
||||
.sidebar-fixed .sidebar-submenu-header {
|
||||
/* Ensures menu headers are always visible */
|
||||
@apply tw:lg:flex;
|
||||
}
|
||||
|
||||
.sidebar-fixed .list-unstyled {
|
||||
@apply tw:overflow-y-auto tw:overflow-x-hidden;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user