mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-02-25 08:54:52 +01:00
Compare commits
1 Commits
0.16.0
...
feat/setup
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f99021d0b |
@@ -1,20 +0,0 @@
|
||||
# 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.common.middleware.thread_local import get_current_user
|
||||
from apps.common.models import SharedObject, SharedObjectManager
|
||||
from apps.transactions.models import Transaction
|
||||
from apps.common.models import SharedObject, SharedObjectManager
|
||||
|
||||
|
||||
class AccountGroup(SharedObject):
|
||||
@@ -62,11 +62,6 @@ 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
|
||||
@@ -80,10 +75,6 @@ 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,11 +31,6 @@ 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,26 +155,6 @@ 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"])
|
||||
|
||||
@@ -138,7 +138,6 @@ class RecurringTransactionSerializer(serializers.ModelSerializer):
|
||||
def update(self, instance, validated_data):
|
||||
instance = super().update(instance, validated_data)
|
||||
instance.update_unpaid_transactions()
|
||||
instance.generate_upcoming_transactions()
|
||||
return instance
|
||||
|
||||
|
||||
|
||||
@@ -139,6 +139,7 @@ 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,12 +5,7 @@ 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 is not False
|
||||
):
|
||||
if user and user.is_authenticated and hasattr(user, "settings") and use_l10n:
|
||||
user_settings = user.settings
|
||||
if format_type == "THOUSAND_SEPARATOR":
|
||||
number_format = getattr(user_settings, "number_format", None)
|
||||
@@ -18,13 +13,11 @@ 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" or number_format == "SC":
|
||||
if number_format == "DC":
|
||||
return ","
|
||||
elif number_format == "CD" or number_format == "SD":
|
||||
elif number_format == "CD":
|
||||
return "."
|
||||
elif format_type == "SHORT_DATE_FORMAT":
|
||||
date_format = getattr(user_settings, "date_format", None)
|
||||
|
||||
@@ -91,12 +91,6 @@ 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",
|
||||
@@ -104,7 +98,6 @@ def month_year_picker(request):
|
||||
"month_year_data": result,
|
||||
"current_month": current_month,
|
||||
"current_year": current_year,
|
||||
"today_url": today_url,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@@ -35,7 +35,8 @@ class ArbitraryDecimalDisplayNumberInput(forms.TextInput):
|
||||
self.attrs.update(
|
||||
{
|
||||
"x-data": "",
|
||||
"x-mask:dynamic": f"$money($input, '{get_format('DECIMAL_SEPARATOR')}', '{get_format('THOUSAND_SEPARATOR')}', '30')",
|
||||
"x-mask:dynamic": f"$money($input, '{get_format('DECIMAL_SEPARATOR')}', "
|
||||
f"'{get_format('THOUSAND_SEPARATOR')}', '30')",
|
||||
"x-on:keyup": "$el.dispatchEvent(new Event('input'))",
|
||||
}
|
||||
)
|
||||
|
||||
@@ -4,7 +4,13 @@ from datetime import timedelta
|
||||
from django.db.models import QuerySet
|
||||
from django.utils import timezone
|
||||
|
||||
import apps.currencies.exchange_rates.providers as providers
|
||||
from apps.currencies.exchange_rates.providers import (
|
||||
SynthFinanceProvider,
|
||||
SynthFinanceStockProvider,
|
||||
CoinGeckoFreeProvider,
|
||||
CoinGeckoProProvider,
|
||||
TransitiveRateProvider,
|
||||
)
|
||||
from apps.currencies.models import ExchangeRateService, ExchangeRate, Currency
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -12,12 +18,11 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
# Map service types to provider classes
|
||||
PROVIDER_MAPPING = {
|
||||
"coingecko_free": providers.CoinGeckoFreeProvider,
|
||||
"coingecko_pro": providers.CoinGeckoProProvider,
|
||||
"transitive": providers.TransitiveRateProvider,
|
||||
"frankfurter": providers.FrankfurterProvider,
|
||||
"twelvedata": providers.TwelveDataProvider,
|
||||
"twelvedatamarkets": providers.TwelveDataMarketsProvider,
|
||||
"synth_finance": SynthFinanceProvider,
|
||||
"synth_finance_stock": SynthFinanceStockProvider,
|
||||
"coingecko_free": CoinGeckoFreeProvider,
|
||||
"coingecko_pro": CoinGeckoProProvider,
|
||||
"transitive": TransitiveRateProvider,
|
||||
}
|
||||
|
||||
|
||||
@@ -198,63 +203,21 @@ class ExchangeRateFetcher:
|
||||
|
||||
if provider.rates_inverted:
|
||||
# If rates are inverted, we need to swap currencies
|
||||
if service.singleton:
|
||||
# Try to get the last automatically created exchange rate
|
||||
exchange_rate = (
|
||||
ExchangeRate.objects.filter(
|
||||
automatic=True,
|
||||
from_currency=to_currency,
|
||||
to_currency=from_currency,
|
||||
)
|
||||
.order_by("-date")
|
||||
.first()
|
||||
)
|
||||
else:
|
||||
exchange_rate = None
|
||||
|
||||
if not exchange_rate:
|
||||
ExchangeRate.objects.create(
|
||||
automatic=True,
|
||||
from_currency=to_currency,
|
||||
to_currency=from_currency,
|
||||
rate=rate,
|
||||
date=timezone.now(),
|
||||
)
|
||||
else:
|
||||
exchange_rate.rate = rate
|
||||
exchange_rate.date = timezone.now()
|
||||
exchange_rate.save()
|
||||
|
||||
ExchangeRate.objects.create(
|
||||
from_currency=to_currency,
|
||||
to_currency=from_currency,
|
||||
rate=rate,
|
||||
date=timezone.now(),
|
||||
)
|
||||
processed_pairs.add((to_currency.id, from_currency.id))
|
||||
else:
|
||||
# If rates are not inverted, we can use them as is
|
||||
if service.singleton:
|
||||
# Try to get the last automatically created exchange rate
|
||||
exchange_rate = (
|
||||
ExchangeRate.objects.filter(
|
||||
automatic=True,
|
||||
from_currency=from_currency,
|
||||
to_currency=to_currency,
|
||||
)
|
||||
.order_by("-date")
|
||||
.first()
|
||||
)
|
||||
else:
|
||||
exchange_rate = None
|
||||
|
||||
if not exchange_rate:
|
||||
ExchangeRate.objects.create(
|
||||
automatic=True,
|
||||
from_currency=from_currency,
|
||||
to_currency=to_currency,
|
||||
rate=rate,
|
||||
date=timezone.now(),
|
||||
)
|
||||
else:
|
||||
exchange_rate.rate = rate
|
||||
exchange_rate.date = timezone.now()
|
||||
exchange_rate.save()
|
||||
|
||||
ExchangeRate.objects.create(
|
||||
from_currency=from_currency,
|
||||
to_currency=to_currency,
|
||||
rate=rate,
|
||||
date=timezone.now(),
|
||||
)
|
||||
processed_pairs.add((from_currency.id, to_currency.id))
|
||||
|
||||
service.last_fetch = timezone.now()
|
||||
|
||||
@@ -13,6 +13,70 @@ 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"""
|
||||
|
||||
@@ -88,6 +152,71 @@ 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"""
|
||||
|
||||
@@ -177,329 +306,3 @@ 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
|
||||
|
||||
@@ -114,7 +114,6 @@ class ExchangeRateServiceForm(forms.ModelForm):
|
||||
"fetch_interval",
|
||||
"target_currencies",
|
||||
"target_accounts",
|
||||
"singleton",
|
||||
]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -127,7 +126,6 @@ class ExchangeRateServiceForm(forms.ModelForm):
|
||||
"name",
|
||||
"service_type",
|
||||
Switch("is_active"),
|
||||
Switch("singleton"),
|
||||
"api_key",
|
||||
Row(
|
||||
Column("interval_type", css_class="form-group col-md-6"),
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 5.2.4 on 2025-08-08 02:18
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0014_alter_currency_options'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='exchangerate',
|
||||
name='automatic',
|
||||
field=models.BooleanField(default=False, verbose_name='Automatic'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exchangerateservice',
|
||||
name='singleton',
|
||||
field=models.BooleanField(default=False, help_text='Create one exchange rate and keep updating it. Avoids database clutter.', verbose_name='Single exchange rate'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 5.2.4 on 2025-08-08 02:38
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0015_exchangerate_automatic_exchangerateservice_singleton'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='exchangerate',
|
||||
name='automatic',
|
||||
field=models.BooleanField(default=False, verbose_name='Auto'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# 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'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# 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'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# 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'),
|
||||
),
|
||||
]
|
||||
@@ -1,51 +0,0 @@
|
||||
# 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),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# 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'),
|
||||
),
|
||||
]
|
||||
@@ -70,8 +70,6 @@ class ExchangeRate(models.Model):
|
||||
)
|
||||
date = models.DateTimeField(verbose_name=_("Date and Time"))
|
||||
|
||||
automatic = models.BooleanField(verbose_name=_("Auto"), default=False)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Exchange Rate")
|
||||
verbose_name_plural = _("Exchange Rates")
|
||||
@@ -94,12 +92,11 @@ 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")
|
||||
@@ -151,14 +148,6 @@ class ExchangeRateService(models.Model):
|
||||
blank=True,
|
||||
)
|
||||
|
||||
singleton = models.BooleanField(
|
||||
verbose_name=_("Single exchange rate"),
|
||||
default=False,
|
||||
help_text=_(
|
||||
"Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Exchange Rate Service")
|
||||
verbose_name_plural = _("Exchange Rate Services")
|
||||
|
||||
@@ -9,9 +9,7 @@ from apps.currencies.models import Currency
|
||||
from apps.currencies.utils.convert import convert
|
||||
|
||||
|
||||
def get_categories_totals(
|
||||
transactions_queryset, ignore_empty=False, show_entities=False
|
||||
):
|
||||
def get_categories_totals(transactions_queryset, ignore_empty=False):
|
||||
# First get the category totals as before
|
||||
category_currency_metrics = (
|
||||
transactions_queryset.values(
|
||||
@@ -242,7 +240,6 @@ def get_categories_totals(
|
||||
result[category_id]["tags"][tag_key] = {
|
||||
"name": tag_name,
|
||||
"currencies": {},
|
||||
"entities": {},
|
||||
}
|
||||
|
||||
currency_id = tag_metric["account__currency"]
|
||||
@@ -322,173 +319,4 @@ def get_categories_totals(
|
||||
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,9 +13,7 @@ from apps.insights.forms import (
|
||||
)
|
||||
|
||||
|
||||
def get_transactions(
|
||||
request, include_unpaid=True, include_silent=False, include_untracked_accounts=False
|
||||
):
|
||||
def get_transactions(request, include_unpaid=True, include_silent=False):
|
||||
transactions = Transaction.objects.all()
|
||||
|
||||
filter_type = request.GET.get("type", None)
|
||||
@@ -97,9 +95,4 @@ def get_transactions(
|
||||
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, include_untracked_accounts=True)
|
||||
transactions = get_transactions(request)
|
||||
|
||||
# Generate Sankey data
|
||||
sankey_data = generate_sankey_data_by_account(transactions)
|
||||
@@ -180,14 +180,6 @@ 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
|
||||
@@ -198,9 +190,7 @@ def category_overview(request):
|
||||
transactions = get_transactions(request, include_silent=True)
|
||||
|
||||
total_table = get_categories_totals(
|
||||
transactions_queryset=transactions,
|
||||
ignore_empty=False,
|
||||
show_entities=show_entities,
|
||||
transactions_queryset=transactions, ignore_empty=False
|
||||
)
|
||||
|
||||
return render(
|
||||
@@ -210,7 +200,6 @@ def category_overview(request):
|
||||
"total_table": total_table,
|
||||
"view_type": view_type,
|
||||
"show_tags": show_tags,
|
||||
"show_entities": show_entities,
|
||||
"showing": showing,
|
||||
},
|
||||
)
|
||||
@@ -250,14 +239,10 @@ 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
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
.order_by(
|
||||
"account__currency__name",
|
||||
)
|
||||
transactions_currency_queryset = Transaction.objects.filter(
|
||||
is_paid=True, account__is_archived=False, account__is_asset=False
|
||||
).order_by(
|
||||
"account__currency__name",
|
||||
)
|
||||
currency_net_worth = calculate_currency_totals(
|
||||
transactions_queryset=transactions_currency_queryset, ignore_empty=False
|
||||
@@ -277,7 +262,6 @@ 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,15 +107,9 @@ 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))
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
)
|
||||
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))
|
||||
|
||||
data = calculate_currency_totals(base_queryset, ignore_empty=True)
|
||||
percentages = calculate_percentage_distribution(data)
|
||||
@@ -171,14 +165,10 @@ 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))
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
)
|
||||
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))
|
||||
|
||||
currency_data = calculate_currency_totals(base_queryset.all(), ignore_empty=True)
|
||||
currency_percentages = calculate_percentage_distribution(currency_data)
|
||||
|
||||
@@ -20,18 +20,17 @@ 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",
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
transactions_currency_queryset = Transaction.objects.filter(
|
||||
is_paid=True, account__is_archived=False
|
||||
).order_by(
|
||||
"account__currency__name",
|
||||
)
|
||||
transactions_account_queryset = Transaction.objects.filter(
|
||||
is_paid=True, account__is_archived=False
|
||||
@@ -40,12 +39,10 @@ def net_worth(request):
|
||||
"account__name",
|
||||
)
|
||||
else:
|
||||
transactions_currency_queryset = (
|
||||
Transaction.objects.filter(account__is_archived=False)
|
||||
.order_by(
|
||||
"account__currency__name",
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
transactions_currency_queryset = Transaction.objects.filter(
|
||||
account__is_archived=False
|
||||
).order_by(
|
||||
"account__currency__name",
|
||||
)
|
||||
transactions_account_queryset = Transaction.objects.filter(
|
||||
account__is_archived=False
|
||||
|
||||
@@ -60,20 +60,26 @@ class TransactionsFilter(django_filters.FilterSet):
|
||||
label=_("Currencies"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
)
|
||||
category = django_filters.MultipleChoiceFilter(
|
||||
category = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name="category__name",
|
||||
queryset=TransactionCategory.objects.all(),
|
||||
to_field_name="name",
|
||||
label=_("Categories"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
method="filter_category",
|
||||
)
|
||||
tags = django_filters.MultipleChoiceFilter(
|
||||
tags = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name="tags__name",
|
||||
queryset=TransactionTag.objects.all(),
|
||||
to_field_name="name",
|
||||
label=_("Tags"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
method="filter_tags",
|
||||
)
|
||||
entities = django_filters.MultipleChoiceFilter(
|
||||
entities = django_filters.ModelMultipleChoiceFilter(
|
||||
field_name="entities__name",
|
||||
queryset=TransactionEntity.objects.all(),
|
||||
to_field_name="name",
|
||||
label=_("Entities"),
|
||||
widget=TomSelectMultiple(checkboxes=True, remove_button=True),
|
||||
method="filter_entities",
|
||||
)
|
||||
is_paid = django_filters.MultipleChoiceFilter(
|
||||
choices=SITUACAO_CHOICES,
|
||||
@@ -119,7 +125,6 @@ class TransactionsFilter(django_filters.FilterSet):
|
||||
"is_paid",
|
||||
"category",
|
||||
"tags",
|
||||
"entities",
|
||||
"date_start",
|
||||
"date_end",
|
||||
"reference_date_start",
|
||||
@@ -181,93 +186,6 @@ class TransactionsFilter(django_filters.FilterSet):
|
||||
self.form.fields["date_end"].widget = AirDatePickerInput()
|
||||
|
||||
self.form.fields["account"].queryset = Account.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
|
||||
self.form.fields["category"].queryset = TransactionCategory.objects.all()
|
||||
self.form.fields["tags"].queryset = TransactionTag.objects.all()
|
||||
self.form.fields["entities"].queryset = TransactionEntity.objects.all()
|
||||
|
||||
@@ -1085,6 +1085,5 @@ class RecurringTransactionForm(forms.ModelForm):
|
||||
instance.create_upcoming_transactions()
|
||||
else:
|
||||
instance.update_unpaid_transactions()
|
||||
instance.generate_upcoming_transactions()
|
||||
|
||||
return instance
|
||||
|
||||
@@ -589,10 +589,7 @@ def transaction_all_currency_summary(request):
|
||||
|
||||
f = TransactionsFilter(request.GET, queryset=transactions)
|
||||
|
||||
currency_data = calculate_currency_totals(
|
||||
f.qs.exclude(account__in=request.user.untracked_accounts.all()),
|
||||
ignore_empty=True,
|
||||
)
|
||||
currency_data = calculate_currency_totals(f.qs.all(), ignore_empty=True)
|
||||
currency_percentages = calculate_percentage_distribution(currency_data)
|
||||
|
||||
context = {
|
||||
|
||||
@@ -89,8 +89,6 @@ 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(
|
||||
|
||||
@@ -4,6 +4,7 @@ from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.index, name="index"),
|
||||
path("setup/", views.setup, name="setup"),
|
||||
path("login/", views.UserLoginView.as_view(), name="login"),
|
||||
# path("login/fallback/", views.UserLoginView.as_view(), name="fallback_login"),
|
||||
path("logout/", views.logout_view, name="logout"),
|
||||
|
||||
@@ -21,6 +21,8 @@ from apps.users.forms import (
|
||||
)
|
||||
from apps.users.models import UserSettings
|
||||
from apps.common.decorators.demo import disabled_on_demo
|
||||
from apps.currencies.models import Currency
|
||||
from apps.accounts.models import Account
|
||||
|
||||
|
||||
def logout_view(request):
|
||||
@@ -48,6 +50,28 @@ def index(request):
|
||||
return redirect(reverse("monthly_index"))
|
||||
|
||||
|
||||
@login_required
|
||||
def setup(request):
|
||||
has_currency = Currency.objects.exists()
|
||||
has_account = Account.objects.exists()
|
||||
# return render(
|
||||
# request,
|
||||
# "users/setup/setup.html",
|
||||
# {"has_currency": has_currency, "has_account": has_account},
|
||||
# )
|
||||
if not has_currency or not has_account:
|
||||
return render(
|
||||
request,
|
||||
"users/setup/setup.html",
|
||||
{"has_currency": has_currency, "has_account": has_account},
|
||||
)
|
||||
else:
|
||||
return HttpResponse(
|
||||
status=200,
|
||||
headers={"HX-Reswap": "delete"},
|
||||
)
|
||||
|
||||
|
||||
class UserLoginView(LoginView):
|
||||
form_class = LoginForm
|
||||
template_name = "users/login.html"
|
||||
|
||||
@@ -95,7 +95,6 @@ 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-17 06:55+0000\n"
|
||||
"POT-Creation-Date: 2025-08-06 16:21+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/"
|
||||
@@ -25,27 +25,27 @@ msgstr "Gruppe Name"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: 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:217
|
||||
#: apps/users/forms.py:379
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
msgid "Update"
|
||||
msgstr "Aktualisierung"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: 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:225 apps/users/forms.py:387
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: 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:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
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:69
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: 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:36
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -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:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:70 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,7 +185,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Konto"
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:71 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
|
||||
@@ -197,7 +197,7 @@ msgstr "Konto"
|
||||
msgid "Accounts"
|
||||
msgstr "Konten"
|
||||
|
||||
#: apps/accounts/models.py:93
|
||||
#: apps/accounts/models.py:84
|
||||
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:189 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:169 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,14 +260,6 @@ 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"
|
||||
@@ -300,7 +292,7 @@ msgstr "Entität mit dieser ID existiert nicht."
|
||||
msgid "Invalid entity data. Provide an ID or name."
|
||||
msgstr "Ungültige Entitäts-Daten. Gib eine ID oder einen Namen an."
|
||||
|
||||
#: apps/api/serializers/transactions.py:192
|
||||
#: apps/api/serializers/transactions.py:191
|
||||
msgid "Either 'date' or 'reference_date' must be provided."
|
||||
msgstr "Entweder \"Datum\" oder \"Referenzdatum\" müssen angegeben werden."
|
||||
|
||||
@@ -319,7 +311,7 @@ msgid "Shared with users"
|
||||
msgstr "Mit Nutzern geteilt"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Fehler bei der Erstellung einer neuen Instanz"
|
||||
|
||||
@@ -364,7 +356,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:142
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
@@ -459,13 +451,12 @@ msgstr "Fehler"
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: apps/common/views.py:118
|
||||
#: apps/common/views.py:111
|
||||
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"
|
||||
|
||||
@@ -542,7 +533,7 @@ msgstr "Startwährung"
|
||||
msgid "To Currency"
|
||||
msgstr "Zielwährung"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:74
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Umrechnungskurs"
|
||||
|
||||
@@ -550,43 +541,38 @@ msgstr "Umrechnungskurs"
|
||||
msgid "Date and Time"
|
||||
msgstr "Datum und Uhrzeit"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automatisch"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:75 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
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Umrechnungskurse"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:87
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Start- und Zielwährung dürfen nicht identisch sein."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:102
|
||||
msgid "On"
|
||||
msgstr "An"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:103
|
||||
msgid "Every X hours"
|
||||
msgstr "Alle X Stunden"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:104
|
||||
msgid "Not on"
|
||||
msgstr "Nicht an"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Service Name"
|
||||
msgstr "Dienstname"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:108
|
||||
msgid "Service Type"
|
||||
msgstr "Diensttyp"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:110 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
|
||||
@@ -595,31 +581,31 @@ msgstr "Diensttyp"
|
||||
msgid "Active"
|
||||
msgstr "Aktiv"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "API Key"
|
||||
msgstr "API-Schlüssel"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API-Schlüssel für den Dienst (falls benötigt)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:121
|
||||
msgid "Interval Type"
|
||||
msgstr "Intervalltyp"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "Interval"
|
||||
msgstr "Intervall"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Letzter erfolgreicher Abruf"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Target Currencies"
|
||||
msgstr "Zielwährungen"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:135
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -627,11 +613,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:146
|
||||
#: apps/currencies/models.py:143
|
||||
msgid "Target Accounts"
|
||||
msgstr "Zielkonten"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:145
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -639,33 +625,23 @@ 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:155
|
||||
#, fuzzy
|
||||
#| msgid "Edit exchange rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Umrechnungskurs bearbeiten"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:152
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Umrechnungskurs-Dienst"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:153
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Umrechnungskurs-Dienste"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:205
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "\"Jede X Stunden\"-Intervalltyp benötigt eine positive Ganzzahl."
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:214
|
||||
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:239
|
||||
#: apps/currencies/models.py:228
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -673,7 +649,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:250
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -850,7 +826,7 @@ msgid "Transactions"
|
||||
msgstr "Transaktionen"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
msgid "Categories"
|
||||
@@ -858,7 +834,7 @@ 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:74
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: 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
|
||||
@@ -866,7 +842,6 @@ msgstr "Kategorien"
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entitäten"
|
||||
|
||||
@@ -934,7 +909,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:186
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1035,10 +1010,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 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
|
||||
#: 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
|
||||
msgid "Uncategorized"
|
||||
msgstr "Unkategorisiert"
|
||||
|
||||
@@ -1303,7 +1278,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:61
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1318,55 +1293,26 @@ msgstr "Inhalt"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Transaktionstyp"
|
||||
|
||||
#: apps/transactions/filters.py:85
|
||||
#: apps/transactions/filters.py:91
|
||||
msgid "Date from"
|
||||
msgstr "Datum von"
|
||||
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
msgid "Until"
|
||||
msgstr "Bis"
|
||||
|
||||
#: apps/transactions/filters.py:95
|
||||
#: apps/transactions/filters.py:101
|
||||
msgid "Reference date from"
|
||||
msgstr "Referenzdatum von"
|
||||
|
||||
#: apps/transactions/filters.py:105
|
||||
#: apps/transactions/filters.py:111
|
||||
msgid "Amount min"
|
||||
msgstr "Betrag Minimum"
|
||||
|
||||
#: apps/transactions/filters.py:110
|
||||
#: apps/transactions/filters.py:116
|
||||
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"
|
||||
@@ -1478,7 +1424,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:79
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Einnahme"
|
||||
@@ -1490,7 +1436,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:80
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
msgid "Expense"
|
||||
msgstr "Ausgabe"
|
||||
|
||||
@@ -1736,8 +1682,8 @@ msgid "Item deleted successfully"
|
||||
msgstr "Objekt erfolgreich gelöscht"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:155
|
||||
#: apps/transactions/views/transactions.py:53
|
||||
#: apps/transactions/views/transactions.py:149
|
||||
#: apps/transactions/views/transactions.py:52
|
||||
#: apps/transactions/views/transactions.py:148
|
||||
msgid "Transaction added successfully"
|
||||
msgstr "Transaktion erfolgreich hinzugefügt"
|
||||
|
||||
@@ -1777,30 +1723,30 @@ msgstr "Tag erfolgreich aktualisiert"
|
||||
msgid "Tag deleted successfully"
|
||||
msgstr "Tag erfolgreich gelöscht"
|
||||
|
||||
#: apps/transactions/views/transactions.py:183
|
||||
#: apps/transactions/views/transactions.py:182
|
||||
msgid "Transaction updated successfully"
|
||||
msgstr "Transaktion erfolgreich aktualisiert"
|
||||
|
||||
#: apps/transactions/views/transactions.py:233
|
||||
#: apps/transactions/views/transactions.py:232
|
||||
#, python-format
|
||||
msgid "%(count)s transaction updated successfully"
|
||||
msgid_plural "%(count)s transactions updated successfully"
|
||||
msgstr[0] "%(count)s Transaktion erfolgreich aktualisiert"
|
||||
msgstr[1] "%(count)s Transaktionen erfolgreich aktualisiert"
|
||||
|
||||
#: apps/transactions/views/transactions.py:269
|
||||
#: apps/transactions/views/transactions.py:268
|
||||
msgid "Transaction duplicated successfully"
|
||||
msgstr "Transaktion erfolgreich duplisiert"
|
||||
|
||||
#: apps/transactions/views/transactions.py:311
|
||||
#: apps/transactions/views/transactions.py:310
|
||||
msgid "Transaction deleted successfully"
|
||||
msgstr "Transaktion erfolgreich gelöscht"
|
||||
|
||||
#: apps/transactions/views/transactions.py:329
|
||||
#: apps/transactions/views/transactions.py:328
|
||||
msgid "Transaction restored successfully"
|
||||
msgstr "Transaktion erfolgreich wiederhergestellt"
|
||||
|
||||
#: apps/transactions/views/transactions.py:355
|
||||
#: apps/transactions/views/transactions.py:354
|
||||
msgid "Transfer added successfully"
|
||||
msgstr "Transfer erfolgreich hinzugefügt"
|
||||
|
||||
@@ -1847,19 +1793,19 @@ msgstr "Dieses Konto ist deaktiviert"
|
||||
msgid "Default"
|
||||
msgstr "Standard"
|
||||
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Datumsformat"
|
||||
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Datums- und Zeitformat"
|
||||
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Zahlenformat"
|
||||
|
||||
#: apps/users/forms.py:148
|
||||
#: apps/users/forms.py:146
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1870,25 +1816,25 @@ msgstr ""
|
||||
"angezeigt werden.\n"
|
||||
"Hilf mit WYGIWYH in deine Sprache zu übersetzten: %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:157
|
||||
#: apps/users/forms.py:155
|
||||
msgid "New Password"
|
||||
msgstr "Neues Passwort"
|
||||
|
||||
#: apps/users/forms.py:160
|
||||
#: apps/users/forms.py:158
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Leer lassen um Passwort zu belassen."
|
||||
|
||||
#: apps/users/forms.py:163
|
||||
#: apps/users/forms.py:161
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Bestätige das neue Passwort"
|
||||
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
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:178 apps/users/forms.py:339
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -1896,38 +1842,42 @@ msgstr ""
|
||||
"Anwählen damit der Nutzer alle Berechtigungen hat, ohne diese explizit "
|
||||
"hinzuzufügen."
|
||||
|
||||
#: apps/users/forms.py:249
|
||||
#: apps/users/forms.py:247
|
||||
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:257
|
||||
#: apps/users/forms.py:255
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "Die eingegebenen Passwörter stimmen nicht überein."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:257
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Bitte bestätige dein neues Passwort."
|
||||
|
||||
#: apps/users/forms.py:261
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Bitte gebe erst dein neues Passwort ein."
|
||||
|
||||
#: apps/users/forms.py:281
|
||||
#: apps/users/forms.py:279
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr "Du kannst deinen Nutzer nicht hier deaktivieren."
|
||||
|
||||
#: apps/users/forms.py:294
|
||||
#: apps/users/forms.py:292
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr "Sie können die Adminberechtigungen nicht vom letzten Admin entfernen."
|
||||
|
||||
#: apps/users/forms.py:300
|
||||
#: apps/users/forms.py:298
|
||||
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:397
|
||||
#: apps/users/forms.py:395
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits."
|
||||
|
||||
#: apps/users/models.py:12 apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automatisch"
|
||||
|
||||
#: apps/users/models.py:465 templates/includes/navbar.html:29
|
||||
msgid "Yearly by currency"
|
||||
msgstr "Jährlich nach Währung"
|
||||
@@ -2044,7 +1994,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:192
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2071,7 +2021,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:196
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2101,7 +2051,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:197
|
||||
#: templates/cotton/transaction/item.html:183
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2123,7 +2073,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:198
|
||||
#: templates/cotton/transaction/item.html:184
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2204,15 +2154,7 @@ msgstr "Konto bearbeiten"
|
||||
msgid "Is Asset"
|
||||
msgstr "Ist Vermögenswert"
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
msgid "No accounts"
|
||||
msgstr "Keine Konten"
|
||||
|
||||
@@ -2270,7 +2212,7 @@ msgid "Muted"
|
||||
msgstr "Ausgeblendet"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
msgid "No categories"
|
||||
msgstr "Keine Kategorien"
|
||||
|
||||
@@ -2294,42 +2236,23 @@ msgid "Select"
|
||||
msgstr "Auswahl"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
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:172
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
msgid "Hide from summaries"
|
||||
msgstr "Verstecken bei Zusammenfassungen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Als schnelle Transaktion hinzufügen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplikat"
|
||||
@@ -2773,7 +2696,7 @@ msgid "Net Worth"
|
||||
msgstr "Nettovermögen"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Aktuell"
|
||||
@@ -2910,7 +2833,7 @@ msgstr "Tabelle"
|
||||
msgid "Bars"
|
||||
msgstr "Balken"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
@@ -2918,30 +2841,22 @@ 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: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
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#, fuzzy
|
||||
#| msgid "final total"
|
||||
msgid "Final total"
|
||||
msgstr "Gesamtbilanz"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Gesamt"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr "Unmarkiert"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#, fuzzy
|
||||
#| msgid "final total"
|
||||
msgid "Final Total"
|
||||
@@ -3475,11 +3390,6 @@ msgstr "endet mit"
|
||||
msgid "Yearly Overview"
|
||||
msgstr "Jährliche Übersicht"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Automation"
|
||||
#~ msgid "Automatic"
|
||||
#~ msgstr "Automatisierung"
|
||||
|
||||
#~ msgid "Profile"
|
||||
#~ msgstr "Profil"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+0000\n"
|
||||
"POT-Creation-Date: 2025-08-06 16:21+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"
|
||||
@@ -24,27 +24,27 @@ msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: 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:217
|
||||
#: apps/users/forms.py:379
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: 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:225 apps/users/forms.py:387
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: 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:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
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:69
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: 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:36
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
@@ -167,7 +167,7 @@ msgstr ""
|
||||
msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:70 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,7 +181,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:71 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
|
||||
@@ -193,7 +193,7 @@ msgstr ""
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:93
|
||||
#: apps/accounts/models.py:84
|
||||
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:189 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:169 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,14 +254,6 @@ 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 ""
|
||||
@@ -294,7 +286,7 @@ msgstr ""
|
||||
msgid "Invalid entity data. Provide an ID or name."
|
||||
msgstr ""
|
||||
|
||||
#: apps/api/serializers/transactions.py:192
|
||||
#: apps/api/serializers/transactions.py:191
|
||||
msgid "Either 'date' or 'reference_date' must be provided."
|
||||
msgstr ""
|
||||
|
||||
@@ -311,7 +303,7 @@ msgid "Shared with users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
msgid "Error creating new instance"
|
||||
msgstr ""
|
||||
|
||||
@@ -352,7 +344,7 @@ msgid ""
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@@ -447,13 +439,12 @@ msgstr ""
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/views.py:118
|
||||
#: apps/common/views.py:111
|
||||
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 ""
|
||||
|
||||
@@ -530,7 +521,7 @@ msgstr ""
|
||||
msgid "To Currency"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:74
|
||||
msgid "Exchange Rate"
|
||||
msgstr ""
|
||||
|
||||
@@ -538,43 +529,38 @@ msgstr ""
|
||||
msgid "Date and Time"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:75 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
|
||||
msgid "Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:87
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:102
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:103
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:104
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:108
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:110 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,77 +569,69 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:121
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:135
|
||||
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:146
|
||||
#: apps/currencies/models.py:143
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:145
|
||||
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:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:152
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:153
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:205
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:214
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:228
|
||||
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:250
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -826,7 +804,7 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
msgid "Categories"
|
||||
@@ -834,7 +812,7 @@ 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:74
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: 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
|
||||
@@ -842,7 +820,6 @@ msgstr ""
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
@@ -910,7 +887,7 @@ msgstr ""
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1009,10 +986,10 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: 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
|
||||
#: 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
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1270,7 +1247,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:61
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1285,47 +1262,26 @@ msgstr ""
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:85
|
||||
#: apps/transactions/filters.py:91
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:95
|
||||
#: apps/transactions/filters.py:101
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:105
|
||||
#: apps/transactions/filters.py:111
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:110
|
||||
#: apps/transactions/filters.py:116
|
||||
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 ""
|
||||
@@ -1425,7 +1381,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:79
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
@@ -1437,7 +1393,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:80
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
@@ -1682,8 +1638,8 @@ msgid "Item deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:155
|
||||
#: apps/transactions/views/transactions.py:53
|
||||
#: apps/transactions/views/transactions.py:149
|
||||
#: apps/transactions/views/transactions.py:52
|
||||
#: apps/transactions/views/transactions.py:148
|
||||
msgid "Transaction added successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1723,30 +1679,30 @@ msgstr ""
|
||||
msgid "Tag deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:183
|
||||
#: apps/transactions/views/transactions.py:182
|
||||
msgid "Transaction updated successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:233
|
||||
#: apps/transactions/views/transactions.py:232
|
||||
#, python-format
|
||||
msgid "%(count)s transaction updated successfully"
|
||||
msgid_plural "%(count)s transactions updated successfully"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:269
|
||||
#: apps/transactions/views/transactions.py:268
|
||||
msgid "Transaction duplicated successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:311
|
||||
#: apps/transactions/views/transactions.py:310
|
||||
msgid "Transaction deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:329
|
||||
#: apps/transactions/views/transactions.py:328
|
||||
msgid "Transaction restored successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:355
|
||||
#: apps/transactions/views/transactions.py:354
|
||||
msgid "Transfer added successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1793,19 +1749,19 @@ msgstr ""
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:148
|
||||
#: apps/users/forms.py:146
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1813,62 +1769,66 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:157
|
||||
#: apps/users/forms.py:155
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:160
|
||||
#: apps/users/forms.py:158
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:163
|
||||
#: apps/users/forms.py:161
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:249
|
||||
#: apps/users/forms.py:247
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:255
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:257
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:261
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:281
|
||||
#: apps/users/forms.py:279
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:294
|
||||
#: apps/users/forms.py:292
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:300
|
||||
#: apps/users/forms.py:298
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:397
|
||||
#: apps/users/forms.py:395
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:12 apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:465 templates/includes/navbar.html:29
|
||||
msgid "Yearly by currency"
|
||||
msgstr ""
|
||||
@@ -1985,7 +1945,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:192
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2012,7 +1972,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:196
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2042,7 +2002,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:197
|
||||
#: templates/cotton/transaction/item.html:183
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2064,7 +2024,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:198
|
||||
#: templates/cotton/transaction/item.html:184
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2145,15 +2105,7 @@ msgstr ""
|
||||
msgid "Is Asset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
msgid "No accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -2211,7 +2163,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2235,40 +2187,23 @@ msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
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:172
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
msgid "Add as quick transaction"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
@@ -2709,7 +2644,7 @@ msgid "Net Worth"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
@@ -2843,28 +2778,26 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: 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
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
msgid "Final total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+0000\n"
|
||||
"POT-Creation-Date: 2025-08-06 16:21+0000\n"
|
||||
"PO-Revision-Date: 2025-07-21 18:17+0000\n"
|
||||
"Last-Translator: afermar <adrian.fm@protonmail.com>\n"
|
||||
"Language-Team: Spanish <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -25,27 +25,27 @@ msgstr "Nombre del Grupo"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: 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:217
|
||||
#: apps/users/forms.py:379
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
msgid "Update"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: 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:225 apps/users/forms.py:387
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/categories/fragments/list.html:9
|
||||
@@ -82,22 +82,22 @@ msgstr "Nuevo balance"
|
||||
#: 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:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
msgid "Category"
|
||||
msgstr "Categoría"
|
||||
|
||||
#: 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:69
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: 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:36
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Etiquetas"
|
||||
@@ -169,7 +169,7 @@ msgstr "Archivado"
|
||||
msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr "Las cuentas archivadas no aparecen ni cuentan para su patrimonio neto"
|
||||
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:70 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
|
||||
@@ -183,7 +183,7 @@ msgstr "Las cuentas archivadas no aparecen ni cuentan para su patrimonio neto"
|
||||
msgid "Account"
|
||||
msgstr "Cuenta"
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:71 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
|
||||
@@ -195,7 +195,7 @@ msgstr "Cuenta"
|
||||
msgid "Accounts"
|
||||
msgstr "Cuentas"
|
||||
|
||||
#: apps/accounts/models.py:93
|
||||
#: apps/accounts/models.py:84
|
||||
msgid "Exchange currency cannot be the same as the account's main currency."
|
||||
msgstr ""
|
||||
"La moneda de cambio no puede ser la misma que la moneda principal de la "
|
||||
@@ -233,7 +233,7 @@ msgid "Account Group deleted successfully"
|
||||
msgstr "Grupo de Cuenta eliminado exitosamente"
|
||||
|
||||
#: apps/accounts/views/account_groups.py:135
|
||||
#: apps/accounts/views/accounts.py:189 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:169 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,14 +258,6 @@ msgstr "Cuenta actualizada exitosamente"
|
||||
msgid "Account deleted successfully"
|
||||
msgstr "Cuenta borrada exitosamente"
|
||||
|
||||
#: 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 "Conciliación de saldos"
|
||||
@@ -299,7 +291,7 @@ msgstr "No existe una entidad con este ID."
|
||||
msgid "Invalid entity data. Provide an ID or name."
|
||||
msgstr "Invalid entity data. Provide an ID or name."
|
||||
|
||||
#: apps/api/serializers/transactions.py:192
|
||||
#: apps/api/serializers/transactions.py:191
|
||||
#, fuzzy
|
||||
msgid "Either 'date' or 'reference_date' must be provided."
|
||||
msgstr "Either 'date' or 'reference_date' must be provided."
|
||||
@@ -319,7 +311,7 @@ msgid "Shared with users"
|
||||
msgstr "Compartido con los usuarios"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
#, fuzzy
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Error creating new instance"
|
||||
@@ -371,7 +363,7 @@ msgstr ""
|
||||
"Private: Only shown for the owner and shared users. Only editable by the "
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
|
||||
@@ -467,14 +459,13 @@ msgstr "Error"
|
||||
msgid "Info"
|
||||
msgstr "Información"
|
||||
|
||||
#: apps/common/views.py:118
|
||||
#: apps/common/views.py:111
|
||||
#, fuzzy
|
||||
msgid "Cache cleared successfully"
|
||||
msgstr "Cache cleared successfully"
|
||||
|
||||
#: 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 "Hoy"
|
||||
|
||||
@@ -551,7 +542,7 @@ msgstr "De Moneda"
|
||||
msgid "To Currency"
|
||||
msgstr "A Moneda"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:74
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Tipo de cambio"
|
||||
|
||||
@@ -559,44 +550,38 @@ msgstr "Tipo de cambio"
|
||||
msgid "Date and Time"
|
||||
msgstr "Fecha y Hora"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
#, fuzzy
|
||||
msgid "Auto"
|
||||
msgstr "Auto"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:75 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
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Tipos de cambio"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:87
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Las monedas de origen y destino no pueden ser la misma."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:102
|
||||
msgid "On"
|
||||
msgstr "Encendido"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:103
|
||||
msgid "Every X hours"
|
||||
msgstr "Cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:104
|
||||
msgid "Not on"
|
||||
msgstr "No Encendido"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Service Name"
|
||||
msgstr "Nombre del Servicio"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:108
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Servicio"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:110 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
|
||||
@@ -605,37 +590,37 @@ msgstr "Tipo de Servicio"
|
||||
msgid "Active"
|
||||
msgstr "Activo"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:115
|
||||
#, fuzzy
|
||||
msgid "API Key"
|
||||
msgstr "API Key"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:116
|
||||
#, fuzzy
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API key for the service (if required)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:121
|
||||
#, fuzzy
|
||||
msgid "Interval Type"
|
||||
msgstr "Interval Type"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:125
|
||||
#, fuzzy
|
||||
msgid "Interval"
|
||||
msgstr "Interval"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:128
|
||||
#, fuzzy
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Last Successful Fetch"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:133
|
||||
#, fuzzy
|
||||
msgid "Target Currencies"
|
||||
msgstr "Target Currencies"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:135
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
@@ -644,12 +629,12 @@ msgstr ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
|
||||
#: apps/currencies/models.py:146
|
||||
#: apps/currencies/models.py:143
|
||||
#, fuzzy
|
||||
msgid "Target Accounts"
|
||||
msgstr "Target Accounts"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:145
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
@@ -658,36 +643,27 @@ msgstr ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#, fuzzy
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Edit exchange rate"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:152
|
||||
#, fuzzy
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Exchange Rate Service"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:153
|
||||
#, fuzzy
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Exchange Rate Services"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:205
|
||||
#, fuzzy
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "'Every X hours' interval type requires a positive integer."
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:214
|
||||
#, fuzzy
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "'Every X hours' interval must be between 1 and 24."
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:228
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
@@ -696,7 +672,7 @@ msgstr ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
|
||||
#: apps/currencies/models.py:250
|
||||
#: apps/currencies/models.py:239
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
@@ -909,7 +885,7 @@ msgid "Transactions"
|
||||
msgstr "Transactions"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
#, fuzzy
|
||||
@@ -918,7 +894,7 @@ msgstr "Categories"
|
||||
|
||||
#: 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:74
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: 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
|
||||
@@ -926,7 +902,6 @@ msgstr "Categories"
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
#, fuzzy
|
||||
msgid "Entities"
|
||||
msgstr "Entities"
|
||||
@@ -1007,7 +982,7 @@ msgstr "Edit transaction action"
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr "Update or create transaction actions"
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1128,10 +1103,10 @@ msgid "Run deleted successfully"
|
||||
msgstr "Run deleted successfully"
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: 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
|
||||
#: 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
|
||||
#, fuzzy
|
||||
msgid "Uncategorized"
|
||||
msgstr "Uncategorized"
|
||||
@@ -1442,7 +1417,7 @@ msgstr "Update or Create Transaction action deleted successfully"
|
||||
|
||||
#: 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:61
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1460,55 +1435,31 @@ msgstr "Content"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Transaction Type"
|
||||
|
||||
#: apps/transactions/filters.py:85
|
||||
#: apps/transactions/filters.py:91
|
||||
#, fuzzy
|
||||
msgid "Date from"
|
||||
msgstr "Date from"
|
||||
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
#, fuzzy
|
||||
msgid "Until"
|
||||
msgstr "Until"
|
||||
|
||||
#: apps/transactions/filters.py:95
|
||||
#: apps/transactions/filters.py:101
|
||||
#, fuzzy
|
||||
msgid "Reference date from"
|
||||
msgstr "Reference date from"
|
||||
|
||||
#: apps/transactions/filters.py:105
|
||||
#: apps/transactions/filters.py:111
|
||||
#, fuzzy
|
||||
msgid "Amount min"
|
||||
msgstr "Amount min"
|
||||
|
||||
#: apps/transactions/filters.py:110
|
||||
#: apps/transactions/filters.py:116
|
||||
#, fuzzy
|
||||
msgid "Amount max"
|
||||
msgstr "Amount max"
|
||||
|
||||
#: apps/transactions/filters.py:188
|
||||
#, fuzzy
|
||||
msgid "Categorized"
|
||||
msgstr "Categories"
|
||||
|
||||
#: 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 "Any entity"
|
||||
msgstr "Add entity"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#, fuzzy
|
||||
msgid "No entity"
|
||||
msgstr "No entities"
|
||||
|
||||
#: apps/transactions/forms.py:173
|
||||
#, fuzzy
|
||||
msgid "More"
|
||||
@@ -1633,7 +1584,7 @@ msgstr "Entity"
|
||||
#: 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:79
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
#, fuzzy
|
||||
msgid "Income"
|
||||
@@ -1646,7 +1597,7 @@ msgstr "Income"
|
||||
#: 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:80
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#, fuzzy
|
||||
msgid "Expense"
|
||||
msgstr "Expense"
|
||||
@@ -1937,8 +1888,8 @@ msgid "Item deleted successfully"
|
||||
msgstr "Rule deleted successfully"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:155
|
||||
#: apps/transactions/views/transactions.py:53
|
||||
#: apps/transactions/views/transactions.py:149
|
||||
#: apps/transactions/views/transactions.py:52
|
||||
#: apps/transactions/views/transactions.py:148
|
||||
#, fuzzy
|
||||
msgid "Transaction added successfully"
|
||||
msgstr "Transaction added successfully"
|
||||
@@ -1988,34 +1939,34 @@ msgstr "Tag updated successfully"
|
||||
msgid "Tag deleted successfully"
|
||||
msgstr "Tag deleted successfully"
|
||||
|
||||
#: apps/transactions/views/transactions.py:183
|
||||
#: apps/transactions/views/transactions.py:182
|
||||
#, fuzzy
|
||||
msgid "Transaction updated successfully"
|
||||
msgstr "Transaction updated successfully"
|
||||
|
||||
#: apps/transactions/views/transactions.py:233
|
||||
#: apps/transactions/views/transactions.py:232
|
||||
#, fuzzy, python-format
|
||||
msgid "%(count)s transaction updated successfully"
|
||||
msgid_plural "%(count)s transactions updated successfully"
|
||||
msgstr[0] "%(count)s transaction updated successfully"
|
||||
msgstr[1] "%(count)s transactions updated successfully"
|
||||
|
||||
#: apps/transactions/views/transactions.py:269
|
||||
#: apps/transactions/views/transactions.py:268
|
||||
#, fuzzy
|
||||
msgid "Transaction duplicated successfully"
|
||||
msgstr "Transaction duplicated successfully"
|
||||
|
||||
#: apps/transactions/views/transactions.py:311
|
||||
#: apps/transactions/views/transactions.py:310
|
||||
#, fuzzy
|
||||
msgid "Transaction deleted successfully"
|
||||
msgstr "Transaction deleted successfully"
|
||||
|
||||
#: apps/transactions/views/transactions.py:329
|
||||
#: apps/transactions/views/transactions.py:328
|
||||
#, fuzzy
|
||||
msgid "Transaction restored successfully"
|
||||
msgstr "Transaction restored successfully"
|
||||
|
||||
#: apps/transactions/views/transactions.py:355
|
||||
#: apps/transactions/views/transactions.py:354
|
||||
#, fuzzy
|
||||
msgid "Transfer added successfully"
|
||||
msgstr "Transfer added successfully"
|
||||
@@ -2073,22 +2024,22 @@ msgstr "This account is deactivated"
|
||||
msgid "Default"
|
||||
msgstr "Default"
|
||||
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
#, fuzzy
|
||||
msgid "Date Format"
|
||||
msgstr "Date Format"
|
||||
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
#, fuzzy
|
||||
msgid "Datetime Format"
|
||||
msgstr "Datetime Format"
|
||||
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
#, fuzzy
|
||||
msgid "Number Format"
|
||||
msgstr "Number Format"
|
||||
|
||||
#: apps/users/forms.py:148
|
||||
#: apps/users/forms.py:146
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -2099,20 +2050,20 @@ msgstr ""
|
||||
"y las fechas\n"
|
||||
"Ayude a traducir WYGIWYH a su idioma en %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:157
|
||||
#: apps/users/forms.py:155
|
||||
#, fuzzy
|
||||
msgid "New Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: apps/users/forms.py:160
|
||||
#: apps/users/forms.py:158
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Deje en blanco para mantener la contraseña actual."
|
||||
|
||||
#: apps/users/forms.py:163
|
||||
#: apps/users/forms.py:161
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Confirmar nueva contraseña"
|
||||
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
@@ -2120,7 +2071,7 @@ msgstr ""
|
||||
"Establece si este usuario debe ser tratado como activo. Desmarque esta "
|
||||
"opción en lugar de borrar cuentas."
|
||||
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -2128,39 +2079,44 @@ msgstr ""
|
||||
"Establece que este usuario tiene todos los permisos sin asignárselos "
|
||||
"expresamente."
|
||||
|
||||
#: apps/users/forms.py:249
|
||||
#: apps/users/forms.py:247
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr "Esta dirección de correo es usada por otra cuenta."
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:255
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "Los dos campos de contraseñas no coinciden."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:257
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Por favor, confirme su nueva contraseña."
|
||||
|
||||
#: apps/users/forms.py:261
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Por favor, introduzca su nueva contraseña."
|
||||
|
||||
#: apps/users/forms.py:281
|
||||
#: apps/users/forms.py:279
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr "No puede desactivar su propia cuenta usando este formulario."
|
||||
|
||||
#: apps/users/forms.py:294
|
||||
#: apps/users/forms.py:292
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:300
|
||||
#: apps/users/forms.py:298
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:397
|
||||
#: apps/users/forms.py:395
|
||||
#, fuzzy
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "A value for this field already exists in the rule."
|
||||
|
||||
#: apps/users/models.py:12 apps/users/models.py:497
|
||||
#, fuzzy
|
||||
msgid "Auto"
|
||||
msgstr "Auto"
|
||||
|
||||
#: apps/users/models.py:465 templates/includes/navbar.html:29
|
||||
#, fuzzy
|
||||
msgid "Yearly by currency"
|
||||
@@ -2295,7 +2251,7 @@ msgstr "Edit"
|
||||
#: templates/accounts/fragments/list.html:48
|
||||
#: templates/categories/fragments/table.html:36
|
||||
#: templates/cotton/transaction/item.html:136
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2323,7 +2279,7 @@ msgstr "Delete"
|
||||
#: templates/accounts/fragments/list.html:52
|
||||
#: templates/categories/fragments/table.html:41
|
||||
#: templates/cotton/transaction/item.html:140
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2354,7 +2310,7 @@ msgstr "Are you sure?"
|
||||
#: templates/accounts/fragments/list.html:53
|
||||
#: templates/categories/fragments/table.html:42
|
||||
#: templates/cotton/transaction/item.html:141
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/transaction/item.html:183
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2377,7 +2333,7 @@ msgstr "You won't be able to revert this!"
|
||||
#: templates/accounts/fragments/list.html:54
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/cotton/transaction/item.html:184
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2470,15 +2426,7 @@ msgstr "Edit account"
|
||||
msgid "Is Asset"
|
||||
msgstr "Is Asset"
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
#, fuzzy
|
||||
msgid "No accounts"
|
||||
msgstr "No accounts"
|
||||
@@ -2550,7 +2498,7 @@ msgid "Muted"
|
||||
msgstr "Muted"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
#, fuzzy
|
||||
msgid "No categories"
|
||||
msgstr "No categories"
|
||||
@@ -2579,44 +2527,26 @@ msgid "Select"
|
||||
msgstr "Select"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
msgid "Show on summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:155
|
||||
#, fuzzy
|
||||
msgid "Controlled by account"
|
||||
msgstr "No category"
|
||||
|
||||
#: templates/cotton/transaction/item.html:165
|
||||
#, fuzzy
|
||||
msgid "Controlled by category"
|
||||
msgstr "No category"
|
||||
|
||||
#: templates/cotton/transaction/item.html:172
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#, fuzzy
|
||||
#| msgid "Add quick transaction"
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Agregar transacción rápida"
|
||||
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
#, fuzzy
|
||||
msgid "Duplicate"
|
||||
@@ -3153,7 +3083,7 @@ msgid "Net Worth"
|
||||
msgstr "Net Worth"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
#, fuzzy
|
||||
msgid "Current"
|
||||
@@ -3313,30 +3243,28 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: 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
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#, fuzzy
|
||||
msgid "Final total"
|
||||
msgstr "final total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
#, fuzzy
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
#, fuzzy
|
||||
msgid "Final Total"
|
||||
msgstr "final total"
|
||||
@@ -3929,10 +3857,6 @@ msgstr "ends with"
|
||||
msgid "Yearly Overview"
|
||||
msgstr "Yearly Overview"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Automatic"
|
||||
#~ msgstr "Automation"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Profile"
|
||||
#~ msgstr "Import Profiles"
|
||||
|
||||
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-17 06:55+0000\n"
|
||||
"PO-Revision-Date: 2025-08-16 11:17+0000\n"
|
||||
"POT-Creation-Date: 2025-08-06 16:21+0000\n"
|
||||
"PO-Revision-Date: 2025-07-28 17:17+0000\n"
|
||||
"Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/"
|
||||
"app/nl/>\n"
|
||||
@@ -25,27 +25,27 @@ msgstr "Groepsnaam"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: 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:217
|
||||
#: apps/users/forms.py:379
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
msgid "Update"
|
||||
msgstr "Bijwerken"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: 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:225 apps/users/forms.py:387
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: 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:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
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:69
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: 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:36
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Labels"
|
||||
@@ -172,7 +172,7 @@ msgstr ""
|
||||
"Gearchiveerde rekeningen worden niet weergegeven en tellen niet mee voor je "
|
||||
"\"Netto Waarde\""
|
||||
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:70 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,7 +186,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Rekening"
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:71 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
|
||||
@@ -198,7 +198,7 @@ msgstr "Rekening"
|
||||
msgid "Accounts"
|
||||
msgstr "Rekeningen"
|
||||
|
||||
#: apps/accounts/models.py:93
|
||||
#: apps/accounts/models.py:84
|
||||
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:189 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:169 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,14 +260,6 @@ 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"
|
||||
@@ -300,7 +292,7 @@ msgstr "Bedrijf met dit ID bestaat niet."
|
||||
msgid "Invalid entity data. Provide an ID or name."
|
||||
msgstr "Ongeldige bedrijfsgegevens. Geef een ID of naam op."
|
||||
|
||||
#: apps/api/serializers/transactions.py:192
|
||||
#: apps/api/serializers/transactions.py:191
|
||||
msgid "Either 'date' or 'reference_date' must be provided."
|
||||
msgstr "'datum' of 'referentiedatum' moet worden opgegeven."
|
||||
|
||||
@@ -317,7 +309,7 @@ msgid "Shared with users"
|
||||
msgstr "Gedeeld met gebruikers"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Fout bij het aanmaken van een nieuwe instantie"
|
||||
|
||||
@@ -363,7 +355,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:142
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
msgid "Save"
|
||||
msgstr "Opslaan"
|
||||
|
||||
@@ -458,13 +450,12 @@ msgstr "Fout"
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: apps/common/views.py:118
|
||||
#: apps/common/views.py:111
|
||||
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"
|
||||
|
||||
@@ -541,7 +532,7 @@ msgstr "Van Munteenheid"
|
||||
msgid "To Currency"
|
||||
msgstr "Naar Munteenheid"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:74
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Wisselkoers"
|
||||
|
||||
@@ -549,43 +540,38 @@ msgstr "Wisselkoers"
|
||||
msgid "Date and Time"
|
||||
msgstr "Datum en Tijd"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automatisch"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:75 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
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Wisselkoersen"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:87
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:102
|
||||
msgid "On"
|
||||
msgstr "Op"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:103
|
||||
msgid "Every X hours"
|
||||
msgstr "Elke X Uren"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:104
|
||||
msgid "Not on"
|
||||
msgstr "Niet op"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Service Name"
|
||||
msgstr "Dienstnaam"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:108
|
||||
msgid "Service Type"
|
||||
msgstr "Soort Dienst"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:110 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
|
||||
@@ -594,31 +580,31 @@ msgstr "Soort Dienst"
|
||||
msgid "Active"
|
||||
msgstr "Actief"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "API Key"
|
||||
msgstr "API Sleutel"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API sleutel voor de dienst (indien verplicht)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:121
|
||||
msgid "Interval Type"
|
||||
msgstr "Soort Interval"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "Interval"
|
||||
msgstr "Interval"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Laatste Succesvolle Ophaling"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Target Currencies"
|
||||
msgstr "Doel Munteenheden"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:135
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -626,11 +612,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:146
|
||||
#: apps/currencies/models.py:143
|
||||
msgid "Target Accounts"
|
||||
msgstr "Naar rekeningen"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:145
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -639,33 +625,23 @@ msgstr ""
|
||||
"opgehaald voor de munteenheid van elke rekening ten opzichte van de "
|
||||
"ingestelde wisselkoers."
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Enkele Wisselkoers"
|
||||
|
||||
#: 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:163
|
||||
#: apps/currencies/models.py:152
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Wisselkoersdienst"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:153
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Wisselkoersdiensten"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:205
|
||||
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:225
|
||||
#: apps/currencies/models.py:214
|
||||
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:239
|
||||
#: apps/currencies/models.py:228
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -673,7 +649,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:250
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -849,7 +825,7 @@ msgid "Transactions"
|
||||
msgstr "Verrichtingen"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
msgid "Categories"
|
||||
@@ -857,7 +833,7 @@ 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:74
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: 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
|
||||
@@ -865,7 +841,6 @@ msgstr "Categorieën"
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Bedrijven"
|
||||
|
||||
@@ -933,7 +908,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:186
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1034,10 +1009,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 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
|
||||
#: 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
|
||||
msgid "Uncategorized"
|
||||
msgstr "Ongecategoriseerd"
|
||||
|
||||
@@ -1297,7 +1272,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:61
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1312,47 +1287,26 @@ msgstr "Inhoud"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Soort transactie"
|
||||
|
||||
#: apps/transactions/filters.py:85
|
||||
#: apps/transactions/filters.py:91
|
||||
msgid "Date from"
|
||||
msgstr "Datum vanaf"
|
||||
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
msgid "Until"
|
||||
msgstr "Tot"
|
||||
|
||||
#: apps/transactions/filters.py:95
|
||||
#: apps/transactions/filters.py:101
|
||||
msgid "Reference date from"
|
||||
msgstr "Referentiedatum vanaf"
|
||||
|
||||
#: apps/transactions/filters.py:105
|
||||
#: apps/transactions/filters.py:111
|
||||
msgid "Amount min"
|
||||
msgstr "Minimum bedrag"
|
||||
|
||||
#: apps/transactions/filters.py:110
|
||||
#: apps/transactions/filters.py:116
|
||||
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"
|
||||
@@ -1405,8 +1359,10 @@ msgid "Muted categories won't be displayed on monthly summaries"
|
||||
msgstr "Gedempte categorieën worden niet weergegeven in maandoverzichten"
|
||||
|
||||
#: apps/transactions/forms.py:1046
|
||||
#, fuzzy
|
||||
#| msgid "Filter transactions"
|
||||
msgid "future transactions"
|
||||
msgstr "toekomstige verrichtingen"
|
||||
msgstr "Filter verrichtingen"
|
||||
|
||||
#: apps/transactions/forms.py:1076
|
||||
msgid "End date should be after the start date"
|
||||
@@ -1458,7 +1414,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:79
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Ontvangsten Transactie"
|
||||
@@ -1470,7 +1426,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:80
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
msgid "Expense"
|
||||
msgstr "Uitgave"
|
||||
|
||||
@@ -1590,7 +1546,7 @@ msgstr "Terugkeer Interval"
|
||||
|
||||
#: apps/transactions/models.py:726
|
||||
msgid "Keep at most"
|
||||
msgstr "Bewaar maximaal"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:730
|
||||
msgid "Last Generated Date"
|
||||
@@ -1715,8 +1671,8 @@ msgid "Item deleted successfully"
|
||||
msgstr "Item succesvol verwijderd"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:155
|
||||
#: apps/transactions/views/transactions.py:53
|
||||
#: apps/transactions/views/transactions.py:149
|
||||
#: apps/transactions/views/transactions.py:52
|
||||
#: apps/transactions/views/transactions.py:148
|
||||
msgid "Transaction added successfully"
|
||||
msgstr "Verrichting succesvol toegevoegd"
|
||||
|
||||
@@ -1756,30 +1712,30 @@ msgstr "Label succesvol bijgewerkt"
|
||||
msgid "Tag deleted successfully"
|
||||
msgstr "Label succesvol verwijderd"
|
||||
|
||||
#: apps/transactions/views/transactions.py:183
|
||||
#: apps/transactions/views/transactions.py:182
|
||||
msgid "Transaction updated successfully"
|
||||
msgstr "Verrichting succesvol bijgewerkt"
|
||||
|
||||
#: apps/transactions/views/transactions.py:233
|
||||
#: apps/transactions/views/transactions.py:232
|
||||
#, python-format
|
||||
msgid "%(count)s transaction updated successfully"
|
||||
msgid_plural "%(count)s transactions updated successfully"
|
||||
msgstr[0] "%(count)s verrichting succesvol bijgewerkt"
|
||||
msgstr[1] "%(count)s verrichtingen succesvol bijgewerkt"
|
||||
|
||||
#: apps/transactions/views/transactions.py:269
|
||||
#: apps/transactions/views/transactions.py:268
|
||||
msgid "Transaction duplicated successfully"
|
||||
msgstr "Verrichting succesvol gedupliceerd"
|
||||
|
||||
#: apps/transactions/views/transactions.py:311
|
||||
#: apps/transactions/views/transactions.py:310
|
||||
msgid "Transaction deleted successfully"
|
||||
msgstr "Verrichting succesvol verwijderd"
|
||||
|
||||
#: apps/transactions/views/transactions.py:329
|
||||
#: apps/transactions/views/transactions.py:328
|
||||
msgid "Transaction restored successfully"
|
||||
msgstr "Verrichting succesvol hersteld"
|
||||
|
||||
#: apps/transactions/views/transactions.py:355
|
||||
#: apps/transactions/views/transactions.py:354
|
||||
msgid "Transfer added successfully"
|
||||
msgstr "Transactie succesvol toegevoegd"
|
||||
|
||||
@@ -1826,19 +1782,19 @@ msgstr "Deze gebruiker is gedeactiveerd"
|
||||
msgid "Default"
|
||||
msgstr "Standaard"
|
||||
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Datumnotatie"
|
||||
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Tijdsnotatie"
|
||||
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Schrijfwijze Nummers"
|
||||
|
||||
#: apps/users/forms.py:148
|
||||
#: apps/users/forms.py:146
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1849,19 +1805,19 @@ msgstr ""
|
||||
"weergegeven\n"
|
||||
"Overweeg om WYGIWYH te helpen vertalen naar jouw taal op %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:157
|
||||
#: apps/users/forms.py:155
|
||||
msgid "New Password"
|
||||
msgstr "Nieuw Wachtwoord"
|
||||
|
||||
#: apps/users/forms.py:160
|
||||
#: apps/users/forms.py:158
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Laat leeg om het huidige wachtwoord te behouden."
|
||||
|
||||
#: apps/users/forms.py:163
|
||||
#: apps/users/forms.py:161
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Bevestig Nieuw Wachtwoord"
|
||||
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
@@ -1869,7 +1825,7 @@ msgstr ""
|
||||
"Geeft aan of deze gebruiker als actief moet worden behandeld. Deselecteer "
|
||||
"dit in plaats van accounts te verwijderen."
|
||||
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -1877,38 +1833,42 @@ msgstr ""
|
||||
"Geeft aan dat deze gebruiker alle rechten heeft zonder ze expliciet toe te "
|
||||
"kennen."
|
||||
|
||||
#: apps/users/forms.py:249
|
||||
#: apps/users/forms.py:247
|
||||
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:257
|
||||
#: apps/users/forms.py:255
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "De twee wachtwoordvelden komen niet overeen."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:257
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Bevestig je nieuwe wachtwoord."
|
||||
|
||||
#: apps/users/forms.py:261
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Geef eerst het nieuwe wachtwoord op."
|
||||
|
||||
#: apps/users/forms.py:281
|
||||
#: apps/users/forms.py:279
|
||||
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:294
|
||||
#: apps/users/forms.py:292
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr "Kan de status van de laatste Hoofdadmin niet verwijderen."
|
||||
|
||||
#: apps/users/forms.py:300
|
||||
#: apps/users/forms.py:298
|
||||
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:397
|
||||
#: apps/users/forms.py:395
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "Er bestaat al een gebruiker met dit e-mailadres."
|
||||
|
||||
#: apps/users/models.py:12 apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automatisch"
|
||||
|
||||
#: apps/users/models.py:465 templates/includes/navbar.html:29
|
||||
msgid "Yearly by currency"
|
||||
msgstr "Jaarlijks per munteenheid"
|
||||
@@ -2025,7 +1985,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:192
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2052,7 +2012,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:196
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2082,7 +2042,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:197
|
||||
#: templates/cotton/transaction/item.html:183
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2104,7 +2064,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:198
|
||||
#: templates/cotton/transaction/item.html:184
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2185,15 +2145,7 @@ msgstr "Rekening bewerken"
|
||||
msgid "Is Asset"
|
||||
msgstr "Is Vermogen"
|
||||
|
||||
#: 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
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
msgid "No accounts"
|
||||
msgstr "Geen rekeningen"
|
||||
|
||||
@@ -2251,7 +2203,7 @@ msgid "Muted"
|
||||
msgstr "Gedempt"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
msgid "No categories"
|
||||
msgstr "Geen categorieën"
|
||||
|
||||
@@ -2275,40 +2227,23 @@ msgid "Select"
|
||||
msgstr "Selecteer"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
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:172
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
msgid "Hide from summaries"
|
||||
msgstr "Verbergen in samenvattingen"
|
||||
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Toevoegen als snelle transactie"
|
||||
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr "Ga naar vorige maand"
|
||||
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr "Ga naar volgende maand"
|
||||
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr "Ga naar vandaag"
|
||||
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliceren"
|
||||
@@ -2750,7 +2685,7 @@ msgid "Net Worth"
|
||||
msgstr "Netto Waarde"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Huidige"
|
||||
@@ -2888,7 +2823,7 @@ msgstr "Tabel"
|
||||
msgid "Bars"
|
||||
msgstr "Balken"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
@@ -2896,28 +2831,20 @@ msgstr ""
|
||||
"Transactiebedragen die gekoppeld zijn aan meerdere tags worden één keer "
|
||||
"geteld voor elke tag"
|
||||
|
||||
#: 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 ""
|
||||
"Transactiebedragen die gekoppeld zijn aan meerdere tags worden één keer "
|
||||
"geteld voor elke tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:69
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
msgid "Final total"
|
||||
msgstr "Eindtotaal"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Totaal"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr "Niet gelabeld"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
msgid "Final Total"
|
||||
msgstr "Eindtotaal"
|
||||
|
||||
@@ -3437,11 +3364,6 @@ msgstr "Aanmelden met"
|
||||
msgid "Yearly Overview"
|
||||
msgstr "Jaaroverzicht"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Automation"
|
||||
#~ msgid "Automatic"
|
||||
#~ msgstr "Automatisatie"
|
||||
|
||||
#~ msgid "Profile"
|
||||
#~ msgstr "Profiel"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+0000\n"
|
||||
"POT-Creation-Date: 2025-08-06 16:21+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/"
|
||||
@@ -25,27 +25,27 @@ msgstr "Nome do grupo"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: 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:217
|
||||
#: apps/users/forms.py:379
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
msgid "Update"
|
||||
msgstr "Atualizar"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: 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:225 apps/users/forms.py:387
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: 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:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
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:69
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: 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:36
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -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:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:70 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,7 +185,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Conta"
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:71 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
|
||||
@@ -197,7 +197,7 @@ msgstr "Conta"
|
||||
msgid "Accounts"
|
||||
msgstr "Contas"
|
||||
|
||||
#: apps/accounts/models.py:93
|
||||
#: apps/accounts/models.py:84
|
||||
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:189 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:169 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,14 +258,6 @@ 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"
|
||||
@@ -298,7 +290,7 @@ msgstr "Entidade com esse ID não existe."
|
||||
msgid "Invalid entity data. Provide an ID or name."
|
||||
msgstr "Dados da entidade inválidos. Forneça um ID ou nome."
|
||||
|
||||
#: apps/api/serializers/transactions.py:192
|
||||
#: apps/api/serializers/transactions.py:191
|
||||
msgid "Either 'date' or 'reference_date' must be provided."
|
||||
msgstr "É necessário fornecer “date” ou “reference_date”."
|
||||
|
||||
@@ -317,7 +309,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:142
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Erro criando nova instância"
|
||||
|
||||
@@ -363,7 +355,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:142
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
msgid "Save"
|
||||
msgstr "Salvar"
|
||||
|
||||
@@ -458,13 +450,12 @@ msgstr "Erro"
|
||||
msgid "Info"
|
||||
msgstr "Informação"
|
||||
|
||||
#: apps/common/views.py:118
|
||||
#: apps/common/views.py:111
|
||||
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"
|
||||
|
||||
@@ -541,7 +532,7 @@ msgstr "Moeda de origem"
|
||||
msgid "To Currency"
|
||||
msgstr "Moeda de destino"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:74
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Taxa de Câmbio"
|
||||
|
||||
@@ -549,43 +540,38 @@ msgstr "Taxa de Câmbio"
|
||||
msgid "Date and Time"
|
||||
msgstr "Data e Tempo"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automático"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:75 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
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Taxas de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:87
|
||||
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:105
|
||||
#: apps/currencies/models.py:102
|
||||
msgid "On"
|
||||
msgstr "Em"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:103
|
||||
msgid "Every X hours"
|
||||
msgstr "A cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:104
|
||||
msgid "Not on"
|
||||
msgstr "Não em"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Service Name"
|
||||
msgstr "Nome do Serviço"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:108
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Serviço"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:110 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
|
||||
@@ -594,31 +580,31 @@ msgstr "Tipo de Serviço"
|
||||
msgid "Active"
|
||||
msgstr "Ativo"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "API Key"
|
||||
msgstr "Chave de API"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "Chave de API para o serviço (se necessário)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:121
|
||||
msgid "Interval Type"
|
||||
msgstr "Tipo de Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "Interval"
|
||||
msgstr "Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Última execução bem-sucedida"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Target Currencies"
|
||||
msgstr "Moedas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:135
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -626,11 +612,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:146
|
||||
#: apps/currencies/models.py:143
|
||||
msgid "Target Accounts"
|
||||
msgstr "Contas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:145
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -639,34 +625,24 @@ msgstr ""
|
||||
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
|
||||
"definida."
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#, fuzzy
|
||||
#| msgid "Edit exchange rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Editar taxa de câmbio"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:152
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Serviço de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:153
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Serviços de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:205
|
||||
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:225
|
||||
#: apps/currencies/models.py:214
|
||||
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:239
|
||||
#: apps/currencies/models.py:228
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -674,7 +650,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:250
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -849,7 +825,7 @@ msgid "Transactions"
|
||||
msgstr "Transações"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
msgid "Categories"
|
||||
@@ -857,7 +833,7 @@ 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:74
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: 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
|
||||
@@ -865,7 +841,6 @@ msgstr "Categorias"
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entidades"
|
||||
|
||||
@@ -933,7 +908,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:186
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1034,10 +1009,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 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
|
||||
#: 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
|
||||
msgid "Uncategorized"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
@@ -1297,7 +1272,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:61
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1312,53 +1287,26 @@ msgstr "Conteúdo"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Tipo de Transação"
|
||||
|
||||
#: apps/transactions/filters.py:85
|
||||
#: apps/transactions/filters.py:91
|
||||
msgid "Date from"
|
||||
msgstr "Data de"
|
||||
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
msgid "Until"
|
||||
msgstr "Até"
|
||||
|
||||
#: apps/transactions/filters.py:95
|
||||
#: apps/transactions/filters.py:101
|
||||
msgid "Reference date from"
|
||||
msgstr "Data de Referência de"
|
||||
|
||||
#: apps/transactions/filters.py:105
|
||||
#: apps/transactions/filters.py:111
|
||||
msgid "Amount min"
|
||||
msgstr "Quantia miníma"
|
||||
|
||||
#: apps/transactions/filters.py:110
|
||||
#: apps/transactions/filters.py:116
|
||||
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"
|
||||
@@ -1467,7 +1415,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:79
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Renda"
|
||||
@@ -1479,7 +1427,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:80
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
msgid "Expense"
|
||||
msgstr "Despesa"
|
||||
|
||||
@@ -1734,8 +1682,8 @@ msgid "Item deleted successfully"
|
||||
msgstr "Regra apagada com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:155
|
||||
#: apps/transactions/views/transactions.py:53
|
||||
#: apps/transactions/views/transactions.py:149
|
||||
#: apps/transactions/views/transactions.py:52
|
||||
#: apps/transactions/views/transactions.py:148
|
||||
msgid "Transaction added successfully"
|
||||
msgstr "Transação adicionada com sucesso"
|
||||
|
||||
@@ -1775,30 +1723,30 @@ msgstr "Tag atualizada com sucesso"
|
||||
msgid "Tag deleted successfully"
|
||||
msgstr "Tag apagada com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:183
|
||||
#: apps/transactions/views/transactions.py:182
|
||||
msgid "Transaction updated successfully"
|
||||
msgstr "Transação atualizada com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:233
|
||||
#: apps/transactions/views/transactions.py:232
|
||||
#, python-format
|
||||
msgid "%(count)s transaction updated successfully"
|
||||
msgid_plural "%(count)s transactions updated successfully"
|
||||
msgstr[0] "%(count)s transação atualizada com sucesso"
|
||||
msgstr[1] "%(count)s transações atualizadas com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:269
|
||||
#: apps/transactions/views/transactions.py:268
|
||||
msgid "Transaction duplicated successfully"
|
||||
msgstr "Transação duplicada com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:311
|
||||
#: apps/transactions/views/transactions.py:310
|
||||
msgid "Transaction deleted successfully"
|
||||
msgstr "Transação apagada com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:329
|
||||
#: apps/transactions/views/transactions.py:328
|
||||
msgid "Transaction restored successfully"
|
||||
msgstr "Transação restaurada com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:355
|
||||
#: apps/transactions/views/transactions.py:354
|
||||
msgid "Transfer added successfully"
|
||||
msgstr "Transferência adicionada com sucesso"
|
||||
|
||||
@@ -1845,19 +1793,19 @@ msgstr "Essa conta está desativada"
|
||||
msgid "Default"
|
||||
msgstr "Padrão"
|
||||
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Formato de Data"
|
||||
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Formato de Data e Hora"
|
||||
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Formato de Número"
|
||||
|
||||
#: apps/users/forms.py:148
|
||||
#: apps/users/forms.py:146
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1868,66 +1816,70 @@ msgstr ""
|
||||
"são exibidos\n"
|
||||
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:157
|
||||
#: apps/users/forms.py:155
|
||||
#, fuzzy
|
||||
#| msgid "Password"
|
||||
msgid "New Password"
|
||||
msgstr "Senha"
|
||||
|
||||
#: apps/users/forms.py:160
|
||||
#: apps/users/forms.py:158
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:163
|
||||
#: apps/users/forms.py:161
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:249
|
||||
#: apps/users/forms.py:247
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:255
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:257
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:261
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:281
|
||||
#: apps/users/forms.py:279
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:294
|
||||
#: apps/users/forms.py:292
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:300
|
||||
#: apps/users/forms.py:298
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:397
|
||||
#: apps/users/forms.py:395
|
||||
#, fuzzy
|
||||
#| msgid "A value for this field already exists in the rule."
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "Já existe um valor para esse campo na regra."
|
||||
|
||||
#: apps/users/models.py:12 apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automático"
|
||||
|
||||
#: apps/users/models.py:465 templates/includes/navbar.html:29
|
||||
msgid "Yearly by currency"
|
||||
msgstr "Anual por moeda"
|
||||
@@ -2044,7 +1996,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:192
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2071,7 +2023,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:196
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2101,7 +2053,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:197
|
||||
#: templates/cotton/transaction/item.html:183
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2123,7 +2075,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:198
|
||||
#: templates/cotton/transaction/item.html:184
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2204,15 +2156,7 @@ msgstr "Editar conta"
|
||||
msgid "Is Asset"
|
||||
msgstr "É ativo"
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
msgid "No accounts"
|
||||
msgstr "Nenhuma conta"
|
||||
|
||||
@@ -2270,7 +2214,7 @@ msgid "Muted"
|
||||
msgstr "Silenciada"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
msgid "No categories"
|
||||
msgstr "Nenhum categoria"
|
||||
|
||||
@@ -2294,46 +2238,27 @@ msgid "Select"
|
||||
msgstr "Selecionar"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
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:172
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#, fuzzy
|
||||
#| msgid "Add recurring transaction"
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Adicionar transação recorrente"
|
||||
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicar"
|
||||
@@ -2777,7 +2702,7 @@ msgid "Net Worth"
|
||||
msgstr "Patrimônio"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Atual"
|
||||
@@ -2915,30 +2840,28 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: 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
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
#, fuzzy
|
||||
#| msgid "final total"
|
||||
msgid "Final total"
|
||||
msgstr "total final"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
msgid "Final Total"
|
||||
msgstr "Total Final"
|
||||
|
||||
@@ -3471,11 +3394,6 @@ msgstr "termina em"
|
||||
msgid "Yearly Overview"
|
||||
msgstr "Visão Anual"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Automation"
|
||||
#~ msgid "Automatic"
|
||||
#~ msgstr "Automação"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Import Profiles"
|
||||
#~ msgid "Profile"
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+0000\n"
|
||||
"PO-Revision-Date: 2025-08-16 04:17+0000\n"
|
||||
"POT-Creation-Date: 2025-08-06 16:21+0000\n"
|
||||
"PO-Revision-Date: 2025-08-06 18: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"
|
||||
@@ -25,27 +25,27 @@ msgstr "Nome do grupo"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: 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:217
|
||||
#: apps/users/forms.py:379
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
msgid "Update"
|
||||
msgstr "Atualizar"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: 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:225 apps/users/forms.py:387
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: 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:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
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:69
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: 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:36
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
@@ -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:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:70 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,7 +185,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Conta"
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:71 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
|
||||
@@ -197,7 +197,7 @@ msgstr "Conta"
|
||||
msgid "Accounts"
|
||||
msgstr "Contas"
|
||||
|
||||
#: apps/accounts/models.py:93
|
||||
#: apps/accounts/models.py:84
|
||||
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:189 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:169 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,14 +258,6 @@ 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"
|
||||
@@ -298,7 +290,7 @@ msgstr "Entidade com esse ID não existe."
|
||||
msgid "Invalid entity data. Provide an ID or name."
|
||||
msgstr "Dados da entidade inválidos. Forneça um ID ou nome."
|
||||
|
||||
#: apps/api/serializers/transactions.py:192
|
||||
#: apps/api/serializers/transactions.py:191
|
||||
msgid "Either 'date' or 'reference_date' must be provided."
|
||||
msgstr "É necessário fornecer “date” ou “reference_date”."
|
||||
|
||||
@@ -315,7 +307,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:142
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Erro criando nova instância"
|
||||
|
||||
@@ -361,7 +353,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:142
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
msgid "Save"
|
||||
msgstr "Salvar"
|
||||
|
||||
@@ -456,13 +448,12 @@ msgstr "Erro"
|
||||
msgid "Info"
|
||||
msgstr "Informação"
|
||||
|
||||
#: apps/common/views.py:118
|
||||
#: apps/common/views.py:111
|
||||
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"
|
||||
|
||||
@@ -539,7 +530,7 @@ msgstr "Moeda de origem"
|
||||
msgid "To Currency"
|
||||
msgstr "Moeda de destino"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:74
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Taxa de Câmbio"
|
||||
|
||||
@@ -547,43 +538,38 @@ msgstr "Taxa de Câmbio"
|
||||
msgid "Date and Time"
|
||||
msgstr "Data e Tempo"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automático"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:75 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
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Taxas de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:87
|
||||
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:105
|
||||
#: apps/currencies/models.py:102
|
||||
msgid "On"
|
||||
msgstr "Em"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:103
|
||||
msgid "Every X hours"
|
||||
msgstr "A cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:104
|
||||
msgid "Not on"
|
||||
msgstr "Não em"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Service Name"
|
||||
msgstr "Nome do Serviço"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:108
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Serviço"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:110 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
|
||||
@@ -592,31 +578,31 @@ msgstr "Tipo de Serviço"
|
||||
msgid "Active"
|
||||
msgstr "Ativo"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "API Key"
|
||||
msgstr "Chave de API"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "Chave de API para o serviço (se necessário)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:121
|
||||
msgid "Interval Type"
|
||||
msgstr "Tipo de Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "Interval"
|
||||
msgstr "Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Última execução bem-sucedida"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Target Currencies"
|
||||
msgstr "Moedas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:135
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -624,11 +610,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:146
|
||||
#: apps/currencies/models.py:143
|
||||
msgid "Target Accounts"
|
||||
msgstr "Contas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:145
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -637,34 +623,24 @@ msgstr ""
|
||||
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
|
||||
"definida."
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Taxa de câmbio única"
|
||||
|
||||
#: 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:163
|
||||
#: apps/currencies/models.py:152
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Serviço de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:153
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Serviços de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:205
|
||||
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:225
|
||||
#: apps/currencies/models.py:214
|
||||
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:239
|
||||
#: apps/currencies/models.py:228
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -672,7 +648,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:250
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -847,7 +823,7 @@ msgid "Transactions"
|
||||
msgstr "Transações"
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
msgid "Categories"
|
||||
@@ -855,7 +831,7 @@ 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:74
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: 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
|
||||
@@ -863,7 +839,6 @@ msgstr "Categorias"
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr "Entidades"
|
||||
|
||||
@@ -931,7 +906,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:186
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1032,10 +1007,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 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
|
||||
#: 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
|
||||
msgid "Uncategorized"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
@@ -1295,7 +1270,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:61
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1310,47 +1285,26 @@ msgstr "Conteúdo"
|
||||
msgid "Transaction Type"
|
||||
msgstr "Tipo de Transação"
|
||||
|
||||
#: apps/transactions/filters.py:85
|
||||
#: apps/transactions/filters.py:91
|
||||
msgid "Date from"
|
||||
msgstr "Data de"
|
||||
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
msgid "Until"
|
||||
msgstr "Até"
|
||||
|
||||
#: apps/transactions/filters.py:95
|
||||
#: apps/transactions/filters.py:101
|
||||
msgid "Reference date from"
|
||||
msgstr "Data de Referência de"
|
||||
|
||||
#: apps/transactions/filters.py:105
|
||||
#: apps/transactions/filters.py:111
|
||||
msgid "Amount min"
|
||||
msgstr "Quantia miníma"
|
||||
|
||||
#: apps/transactions/filters.py:110
|
||||
#: apps/transactions/filters.py:116
|
||||
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"
|
||||
@@ -1455,7 +1409,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:79
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr "Renda"
|
||||
@@ -1467,7 +1421,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:80
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
msgid "Expense"
|
||||
msgstr "Despesa"
|
||||
|
||||
@@ -1712,8 +1666,8 @@ msgid "Item deleted successfully"
|
||||
msgstr "Item apagado com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:155
|
||||
#: apps/transactions/views/transactions.py:53
|
||||
#: apps/transactions/views/transactions.py:149
|
||||
#: apps/transactions/views/transactions.py:52
|
||||
#: apps/transactions/views/transactions.py:148
|
||||
msgid "Transaction added successfully"
|
||||
msgstr "Transação adicionada com sucesso"
|
||||
|
||||
@@ -1753,30 +1707,30 @@ msgstr "Tag atualizada com sucesso"
|
||||
msgid "Tag deleted successfully"
|
||||
msgstr "Tag apagada com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:183
|
||||
#: apps/transactions/views/transactions.py:182
|
||||
msgid "Transaction updated successfully"
|
||||
msgstr "Transação atualizada com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:233
|
||||
#: apps/transactions/views/transactions.py:232
|
||||
#, python-format
|
||||
msgid "%(count)s transaction updated successfully"
|
||||
msgid_plural "%(count)s transactions updated successfully"
|
||||
msgstr[0] "%(count)s transação atualizada com sucesso"
|
||||
msgstr[1] "%(count)s transações atualizadas com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:269
|
||||
#: apps/transactions/views/transactions.py:268
|
||||
msgid "Transaction duplicated successfully"
|
||||
msgstr "Transação duplicada com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:311
|
||||
#: apps/transactions/views/transactions.py:310
|
||||
msgid "Transaction deleted successfully"
|
||||
msgstr "Transação apagada com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:329
|
||||
#: apps/transactions/views/transactions.py:328
|
||||
msgid "Transaction restored successfully"
|
||||
msgstr "Transação restaurada com sucesso"
|
||||
|
||||
#: apps/transactions/views/transactions.py:355
|
||||
#: apps/transactions/views/transactions.py:354
|
||||
msgid "Transfer added successfully"
|
||||
msgstr "Transferência adicionada com sucesso"
|
||||
|
||||
@@ -1823,19 +1777,19 @@ msgstr "Essa conta está desativada"
|
||||
msgid "Default"
|
||||
msgstr "Padrão"
|
||||
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr "Formato de Data"
|
||||
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr "Formato de Data e Hora"
|
||||
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr "Formato de Número"
|
||||
|
||||
#: apps/users/forms.py:148
|
||||
#: apps/users/forms.py:146
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1846,19 +1800,19 @@ msgstr ""
|
||||
"são exibidos\n"
|
||||
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
|
||||
|
||||
#: apps/users/forms.py:157
|
||||
#: apps/users/forms.py:155
|
||||
msgid "New Password"
|
||||
msgstr "Nova senha"
|
||||
|
||||
#: apps/users/forms.py:160
|
||||
#: apps/users/forms.py:158
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr "Deixe em branco para usar a senha atual."
|
||||
|
||||
#: apps/users/forms.py:163
|
||||
#: apps/users/forms.py:161
|
||||
msgid "Confirm New Password"
|
||||
msgstr "Confirmar nova senha"
|
||||
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
@@ -1866,7 +1820,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:178 apps/users/forms.py:339
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
@@ -1874,40 +1828,44 @@ msgstr ""
|
||||
"Designa que esse usuário tem todas as permissões sem atribuí-las "
|
||||
"explicitamente."
|
||||
|
||||
#: apps/users/forms.py:249
|
||||
#: apps/users/forms.py:247
|
||||
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:257
|
||||
#: apps/users/forms.py:255
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr "Os dois campos de senha não coincidem."
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:257
|
||||
msgid "Please confirm your new password."
|
||||
msgstr "Confirme sua nova senha."
|
||||
|
||||
#: apps/users/forms.py:261
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please enter the new password first."
|
||||
msgstr "Digite a nova senha primeiro."
|
||||
|
||||
#: apps/users/forms.py:281
|
||||
#: apps/users/forms.py:279
|
||||
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:294
|
||||
#: apps/users/forms.py:292
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr "Não é possível remover o status do último superusuário."
|
||||
|
||||
#: apps/users/forms.py:300
|
||||
#: apps/users/forms.py:298
|
||||
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:397
|
||||
#: apps/users/forms.py:395
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr "Já existe um usuário com esse endereço de e-mail."
|
||||
|
||||
#: apps/users/models.py:12 apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automático"
|
||||
|
||||
#: apps/users/models.py:465 templates/includes/navbar.html:29
|
||||
msgid "Yearly by currency"
|
||||
msgstr "Anual por moeda"
|
||||
@@ -2024,7 +1982,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:192
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2051,7 +2009,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:196
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2081,7 +2039,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:197
|
||||
#: templates/cotton/transaction/item.html:183
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2103,7 +2061,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:198
|
||||
#: templates/cotton/transaction/item.html:184
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2184,15 +2142,7 @@ msgstr "Editar conta"
|
||||
msgid "Is Asset"
|
||||
msgstr "É ativo"
|
||||
|
||||
#: 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
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
msgid "No accounts"
|
||||
msgstr "Nenhuma conta"
|
||||
|
||||
@@ -2250,7 +2200,7 @@ msgid "Muted"
|
||||
msgstr "Silenciada"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
msgid "No categories"
|
||||
msgstr "Nenhum categoria"
|
||||
|
||||
@@ -2274,40 +2224,23 @@ msgid "Select"
|
||||
msgstr "Selecionar"
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
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:172
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
msgid "Hide from summaries"
|
||||
msgstr "Esconder dos sumários"
|
||||
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
msgid "Add as quick transaction"
|
||||
msgstr "Adicionar como transação rápida"
|
||||
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr "Mover para o mês anterior"
|
||||
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr "Mover para o mês seguinte"
|
||||
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr "Mover para hoje"
|
||||
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicar"
|
||||
@@ -2751,7 +2684,7 @@ msgid "Net Worth"
|
||||
msgstr "Patrimônio"
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr "Atual"
|
||||
@@ -2887,7 +2820,7 @@ msgstr "Tabela"
|
||||
msgid "Bars"
|
||||
msgstr "Barras"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
@@ -2895,28 +2828,20 @@ 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: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 ""
|
||||
"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:69
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
msgid "Final total"
|
||||
msgstr "Total final"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr "Sem tag"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
msgid "Final Total"
|
||||
msgstr "Total Final"
|
||||
|
||||
@@ -3433,11 +3358,6 @@ msgstr "Login com"
|
||||
msgid "Yearly Overview"
|
||||
msgstr "Visão Anual"
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Automation"
|
||||
#~ msgid "Automatic"
|
||||
#~ msgstr "Automação"
|
||||
|
||||
#~ msgid "Profile"
|
||||
#~ msgstr "Perfil"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+0000\n"
|
||||
"POT-Creation-Date: 2025-08-06 16:21+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/"
|
||||
@@ -25,27 +25,27 @@ msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: 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:217
|
||||
#: apps/users/forms.py:379
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
msgid "Update"
|
||||
msgstr "Uppdatera"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: 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:225 apps/users/forms.py:387
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: 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:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
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:69
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: 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:36
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
@@ -168,7 +168,7 @@ msgstr ""
|
||||
msgid "Archived accounts don't show up nor count towards your net worth"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:70 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,7 +182,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:71 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
|
||||
@@ -194,7 +194,7 @@ msgstr ""
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:93
|
||||
#: apps/accounts/models.py:84
|
||||
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:189 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:169 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,14 +255,6 @@ 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 ""
|
||||
@@ -295,7 +287,7 @@ msgstr ""
|
||||
msgid "Invalid entity data. Provide an ID or name."
|
||||
msgstr ""
|
||||
|
||||
#: apps/api/serializers/transactions.py:192
|
||||
#: apps/api/serializers/transactions.py:191
|
||||
msgid "Either 'date' or 'reference_date' must be provided."
|
||||
msgstr ""
|
||||
|
||||
@@ -312,7 +304,7 @@ msgid "Shared with users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
msgid "Error creating new instance"
|
||||
msgstr ""
|
||||
|
||||
@@ -353,7 +345,7 @@ msgid ""
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@@ -448,13 +440,12 @@ msgstr ""
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/views.py:118
|
||||
#: apps/common/views.py:111
|
||||
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 ""
|
||||
|
||||
@@ -531,7 +522,7 @@ msgstr ""
|
||||
msgid "To Currency"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:74
|
||||
msgid "Exchange Rate"
|
||||
msgstr ""
|
||||
|
||||
@@ -539,43 +530,38 @@ msgstr ""
|
||||
msgid "Date and Time"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:75 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
|
||||
msgid "Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:87
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:102
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:103
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:104
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:108
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:110 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
|
||||
@@ -584,77 +570,69 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:121
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:135
|
||||
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:146
|
||||
#: apps/currencies/models.py:143
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:145
|
||||
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:155
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:152
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:153
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:205
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:214
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:228
|
||||
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:250
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -827,7 +805,7 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
msgid "Categories"
|
||||
@@ -835,7 +813,7 @@ 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:74
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: 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
|
||||
@@ -843,7 +821,6 @@ msgstr ""
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
@@ -911,7 +888,7 @@ msgstr ""
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1010,10 +987,10 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: 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
|
||||
#: 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
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1271,7 +1248,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:61
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1286,47 +1263,26 @@ msgstr ""
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:85
|
||||
#: apps/transactions/filters.py:91
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:95
|
||||
#: apps/transactions/filters.py:101
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:105
|
||||
#: apps/transactions/filters.py:111
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:110
|
||||
#: apps/transactions/filters.py:116
|
||||
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 ""
|
||||
@@ -1426,7 +1382,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:79
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
@@ -1438,7 +1394,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:80
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
@@ -1683,8 +1639,8 @@ msgid "Item deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:155
|
||||
#: apps/transactions/views/transactions.py:53
|
||||
#: apps/transactions/views/transactions.py:149
|
||||
#: apps/transactions/views/transactions.py:52
|
||||
#: apps/transactions/views/transactions.py:148
|
||||
msgid "Transaction added successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1724,30 +1680,30 @@ msgstr ""
|
||||
msgid "Tag deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:183
|
||||
#: apps/transactions/views/transactions.py:182
|
||||
msgid "Transaction updated successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:233
|
||||
#: apps/transactions/views/transactions.py:232
|
||||
#, python-format
|
||||
msgid "%(count)s transaction updated successfully"
|
||||
msgid_plural "%(count)s transactions updated successfully"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:269
|
||||
#: apps/transactions/views/transactions.py:268
|
||||
msgid "Transaction duplicated successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:311
|
||||
#: apps/transactions/views/transactions.py:310
|
||||
msgid "Transaction deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:329
|
||||
#: apps/transactions/views/transactions.py:328
|
||||
msgid "Transaction restored successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:355
|
||||
#: apps/transactions/views/transactions.py:354
|
||||
msgid "Transfer added successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1794,19 +1750,19 @@ msgstr ""
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:148
|
||||
#: apps/users/forms.py:146
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1814,62 +1770,66 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:157
|
||||
#: apps/users/forms.py:155
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:160
|
||||
#: apps/users/forms.py:158
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:163
|
||||
#: apps/users/forms.py:161
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:249
|
||||
#: apps/users/forms.py:247
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:255
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:257
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:261
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:281
|
||||
#: apps/users/forms.py:279
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:294
|
||||
#: apps/users/forms.py:292
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:300
|
||||
#: apps/users/forms.py:298
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:397
|
||||
#: apps/users/forms.py:395
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:12 apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:465 templates/includes/navbar.html:29
|
||||
msgid "Yearly by currency"
|
||||
msgstr ""
|
||||
@@ -1986,7 +1946,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:192
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
@@ -2013,7 +1973,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:196
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
@@ -2043,7 +2003,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:197
|
||||
#: templates/cotton/transaction/item.html:183
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
@@ -2065,7 +2025,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:198
|
||||
#: templates/cotton/transaction/item.html:184
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2146,15 +2106,7 @@ msgstr ""
|
||||
msgid "Is Asset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
msgid "No accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -2212,7 +2164,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2236,40 +2188,23 @@ msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
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:172
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
msgid "Add as quick transaction"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
@@ -2710,7 +2645,7 @@ msgid "Net Worth"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
@@ -2844,28 +2779,26 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: 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
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
msgid "Final total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-17 06:55+0000\n"
|
||||
"POT-Creation-Date: 2025-08-06 16:21+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/"
|
||||
@@ -26,27 +26,27 @@ msgstr "Назва групи"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: 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:217
|
||||
#: apps/users/forms.py:379
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:215
|
||||
#: apps/users/forms.py:377
|
||||
msgid "Update"
|
||||
msgstr "Оновлення"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: 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:225 apps/users/forms.py:387
|
||||
#: apps/users/forms.py:223 apps/users/forms.py:385
|
||||
#: 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:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:63
|
||||
#: templates/insights/fragments/category_overview/index.html:419
|
||||
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:69
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:74
|
||||
#: 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:36
|
||||
#: templates/insights/fragments/category_overview/index.html:35
|
||||
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
|
||||
msgid "Tags"
|
||||
msgstr "Мітки"
|
||||
@@ -172,7 +172,7 @@ msgstr ""
|
||||
"Заархівовані рахунки не відображаються і не враховуються у вашій чистій "
|
||||
"вартості"
|
||||
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/accounts/models.py:70 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,7 +186,7 @@ msgstr ""
|
||||
msgid "Account"
|
||||
msgstr "Рахунок"
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:20
|
||||
#: apps/accounts/models.py:71 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
|
||||
@@ -198,7 +198,7 @@ msgstr "Рахунок"
|
||||
msgid "Accounts"
|
||||
msgstr "Рахунки"
|
||||
|
||||
#: apps/accounts/models.py:93
|
||||
#: apps/accounts/models.py:84
|
||||
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:189 apps/dca/views.py:129
|
||||
#: apps/accounts/views/accounts.py:169 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,14 +259,6 @@ 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 "Звірка балансу"
|
||||
@@ -299,7 +291,7 @@ msgstr "Об'єкт з таким ідентифікатором не існує
|
||||
msgid "Invalid entity data. Provide an ID or name."
|
||||
msgstr "Невірні дані про об'єкт. Вкажіть ідентифікатор або ім'я."
|
||||
|
||||
#: apps/api/serializers/transactions.py:192
|
||||
#: apps/api/serializers/transactions.py:191
|
||||
msgid "Either 'date' or 'reference_date' must be provided."
|
||||
msgstr "Необхідно вказати або 'date', або 'reference_date'."
|
||||
|
||||
@@ -318,7 +310,7 @@ msgid "Shared with users"
|
||||
msgstr "Поділитися з користувачами"
|
||||
|
||||
#: apps/common/fields/forms/dynamic_select.py:71
|
||||
#: apps/common/fields/forms/dynamic_select.py:142
|
||||
#: apps/common/fields/forms/dynamic_select.py:143
|
||||
msgid "Error creating new instance"
|
||||
msgstr "Помилка створення нового екземпляра"
|
||||
|
||||
@@ -364,7 +356,7 @@ msgstr ""
|
||||
"доступом. Редагувати може лише власник.<br/> Public: Відображається для всіх "
|
||||
"користувачів. Редагувати може лише власник."
|
||||
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:142
|
||||
#: apps/common/forms.py:80 apps/users/forms.py:140
|
||||
msgid "Save"
|
||||
msgstr "Зберегти"
|
||||
|
||||
@@ -463,13 +455,12 @@ msgstr "Помилка"
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: apps/common/views.py:118
|
||||
#: apps/common/views.py:111
|
||||
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 "Сьогодні"
|
||||
|
||||
@@ -546,7 +537,7 @@ msgstr "З валюти"
|
||||
msgid "To Currency"
|
||||
msgstr "У валюту"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:74
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Обмінний курс"
|
||||
|
||||
@@ -554,43 +545,38 @@ msgstr "Обмінний курс"
|
||||
msgid "Date and Time"
|
||||
msgstr "Дата і час"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:75 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
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Обмінні курси"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:87
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Валюти «Від» і «До» не можуть бути однаковими."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:102
|
||||
msgid "On"
|
||||
msgstr "On"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:103
|
||||
msgid "Every X hours"
|
||||
msgstr "Кожні Х годин"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:104
|
||||
msgid "Not on"
|
||||
msgstr "Not on"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:106
|
||||
msgid "Service Name"
|
||||
msgstr "Назва сервісу"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:108
|
||||
msgid "Service Type"
|
||||
msgstr "Тип сервісу"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:110 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
|
||||
@@ -599,79 +585,69 @@ msgstr "Тип сервісу"
|
||||
msgid "Active"
|
||||
msgstr "Активний"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "API Key"
|
||||
msgstr "Ключ API"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API-ключ для сервісу (якщо потрібно)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:121
|
||||
msgid "Interval Type"
|
||||
msgstr "Тип інтервалу"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "Interval"
|
||||
msgstr "Інтервал"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:128
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Остання успішна вибірка"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:135
|
||||
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:146
|
||||
#: apps/currencies/models.py:143
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:145
|
||||
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:155
|
||||
#, fuzzy
|
||||
#| msgid "Exchange Rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Обмінний курс"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:152
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:153
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:205
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:214
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:228
|
||||
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:250
|
||||
#: apps/currencies/models.py:239
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -844,7 +820,7 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
|
||||
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
|
||||
#: apps/transactions/filters.py:67 templates/categories/fragments/list.html:5
|
||||
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
|
||||
#: templates/includes/sidebar.html:162
|
||||
msgid "Categories"
|
||||
@@ -852,7 +828,7 @@ 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:74
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:81
|
||||
#: 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
|
||||
@@ -860,7 +836,6 @@ msgstr ""
|
||||
#: 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/insights/fragments/category_overview/index.html:49
|
||||
msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
@@ -928,7 +903,7 @@ msgstr ""
|
||||
msgid "Update or create transaction actions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:186
|
||||
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
|
||||
#: templates/export_app/fragments/restore.html:5
|
||||
#: templates/export_app/pages/index.html:24
|
||||
@@ -1027,10 +1002,10 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: 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
|
||||
#: 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
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1288,7 +1263,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:61
|
||||
#: templates/insights/fragments/category_overview/index.html:46
|
||||
#: templates/net_worth/net_worth.html:32
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:8
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
|
||||
@@ -1303,49 +1278,26 @@ msgstr ""
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:85
|
||||
#: apps/transactions/filters.py:91
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100
|
||||
#: apps/transactions/filters.py:96 apps/transactions/filters.py:106
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:95
|
||||
#: apps/transactions/filters.py:101
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:105
|
||||
#: apps/transactions/filters.py:111
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:110
|
||||
#: apps/transactions/filters.py:116
|
||||
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 ""
|
||||
@@ -1445,7 +1397,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:79
|
||||
#: templates/insights/fragments/category_overview/index.html:64
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:39
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
@@ -1457,7 +1409,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:80
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
@@ -1704,8 +1656,8 @@ msgid "Item deleted successfully"
|
||||
msgstr "Рахунок успішно видалено"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:155
|
||||
#: apps/transactions/views/transactions.py:53
|
||||
#: apps/transactions/views/transactions.py:149
|
||||
#: apps/transactions/views/transactions.py:52
|
||||
#: apps/transactions/views/transactions.py:148
|
||||
msgid "Transaction added successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1745,30 +1697,30 @@ msgstr ""
|
||||
msgid "Tag deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:183
|
||||
#: apps/transactions/views/transactions.py:182
|
||||
msgid "Transaction updated successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:233
|
||||
#: apps/transactions/views/transactions.py:232
|
||||
#, python-format
|
||||
msgid "%(count)s transaction updated successfully"
|
||||
msgid_plural "%(count)s transactions updated successfully"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:269
|
||||
#: apps/transactions/views/transactions.py:268
|
||||
msgid "Transaction duplicated successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:311
|
||||
#: apps/transactions/views/transactions.py:310
|
||||
msgid "Transaction deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:329
|
||||
#: apps/transactions/views/transactions.py:328
|
||||
msgid "Transaction restored successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/transactions.py:355
|
||||
#: apps/transactions/views/transactions.py:354
|
||||
msgid "Transfer added successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1815,19 +1767,19 @@ msgstr ""
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:97 apps/users/models.py:484
|
||||
#: apps/users/forms.py:95 apps/users/models.py:484
|
||||
msgid "Date Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:102 apps/users/models.py:489
|
||||
#: apps/users/forms.py:100 apps/users/models.py:489
|
||||
msgid "Datetime Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:108 apps/users/models.py:492
|
||||
#: apps/users/forms.py:106 apps/users/models.py:492
|
||||
msgid "Number Format"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:148
|
||||
#: apps/users/forms.py:146
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1835,62 +1787,66 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:157
|
||||
#: apps/users/forms.py:155
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:160
|
||||
#: apps/users/forms.py:158
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:163
|
||||
#: apps/users/forms.py:161
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:175 apps/users/forms.py:336
|
||||
#: apps/users/forms.py:173 apps/users/forms.py:334
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:178 apps/users/forms.py:339
|
||||
#: apps/users/forms.py:176 apps/users/forms.py:337
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:249
|
||||
#: apps/users/forms.py:247
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:257
|
||||
#: apps/users/forms.py:255
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:259
|
||||
#: apps/users/forms.py:257
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:261
|
||||
#: apps/users/forms.py:259
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:281
|
||||
#: apps/users/forms.py:279
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:294
|
||||
#: apps/users/forms.py:292
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:300
|
||||
#: apps/users/forms.py:298
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:397
|
||||
#: apps/users/forms.py:395
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:12 apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/models.py:465 templates/includes/navbar.html:29
|
||||
msgid "Yearly by currency"
|
||||
msgstr ""
|
||||
@@ -2007,7 +1963,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:192
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
#: 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 +1990,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:196
|
||||
#: templates/cotton/transaction/item.html:182
|
||||
#: 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 +2020,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:197
|
||||
#: templates/cotton/transaction/item.html:183
|
||||
#: 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 +2042,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:198
|
||||
#: templates/cotton/transaction/item.html:184
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
@@ -2167,15 +2123,7 @@ msgstr ""
|
||||
msgid "Is Asset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Track"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:78
|
||||
msgid "Untrack"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/list.html:98
|
||||
#: templates/accounts/fragments/list.html:87
|
||||
msgid "No accounts"
|
||||
msgstr ""
|
||||
|
||||
@@ -2233,7 +2181,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:429
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2257,40 +2205,23 @@ msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:154
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
#: templates/cotton/transaction/item.html:170
|
||||
#: templates/cotton/transaction/item.html:160
|
||||
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:172
|
||||
#: templates/cotton/transaction/item.html:162
|
||||
msgid "Hide from summaries"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:174
|
||||
#: templates/cotton/transaction/item.html:164
|
||||
msgid "Add as quick transaction"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:176
|
||||
msgid "Move to previous month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:177
|
||||
msgid "Move to next month"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:178
|
||||
msgid "Move to today"
|
||||
msgstr ""
|
||||
|
||||
#: templates/cotton/transaction/item.html:180
|
||||
#: templates/cotton/transaction/item.html:166
|
||||
#: templates/cotton/ui/transactions_action_bar.html:82
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
@@ -2731,7 +2662,7 @@ msgid "Net Worth"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/navbar.html:45
|
||||
#: templates/insights/fragments/category_overview/index.html:65
|
||||
#: templates/insights/fragments/category_overview/index.html:50
|
||||
#: templates/net_worth/net_worth.html:22
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
@@ -2865,28 +2796,26 @@ msgstr ""
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:39
|
||||
#: templates/insights/fragments/category_overview/index.html:38
|
||||
msgid ""
|
||||
"Transaction amounts associated with multiple tags will be counted once for "
|
||||
"each tag"
|
||||
msgstr ""
|
||||
|
||||
#: 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
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
msgid "Final total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:81
|
||||
#: templates/insights/fragments/category_overview/index.html:66
|
||||
#: templates/monthly_overview/fragments/monthly_summary.html:167
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:166
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:406
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -71,17 +71,6 @@
|
||||
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,51 +5,47 @@
|
||||
{% 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
|
||||
<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>
|
||||
|
||||
</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>
|
||||
{% 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>
|
||||
{% endblock %}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-lg col-12 {% if transaction.account.is_untracked_by or transaction.category.mute or transaction.mute %}tw:brightness-80{% endif %}">
|
||||
<div class="col-lg col-12 {% if 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.account.is_untracked_by or 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.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: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">
|
||||
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">
|
||||
{% if not transaction.deleted %}
|
||||
<a class="btn btn-secondary btn-sm transaction-action"
|
||||
role="button"
|
||||
@@ -146,26 +146,16 @@
|
||||
<i class="fa-solid fa-ellipsis fa-fw"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-md-start">
|
||||
{% 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>
|
||||
{% 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>
|
||||
{% 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 hx-post="{% url 'export_form' %}" hx-ext="htmx-download" hx-swap="none" id="export-form" class="show-loading px-1" target="_blank">
|
||||
<form method="post" action="{% url 'export_form' %}" id="export-form" class="show-loading px-1" _="on submit trigger hide_offcanvas" target="_blank">
|
||||
{% crispy form %}
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@@ -11,7 +11,7 @@ init
|
||||
end
|
||||
|
||||
on htmx:afterSettle
|
||||
call initTooltips(body)
|
||||
call initTooltips(event.detail.target)
|
||||
end
|
||||
|
||||
on tooltips
|
||||
|
||||
@@ -138,8 +138,8 @@
|
||||
|
||||
<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:max-h-dvh">
|
||||
<div class="tw:h-dvh tw:backdrop-blur-3xl tw:flex tw:flex-col">
|
||||
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 -->
|
||||
<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">
|
||||
@@ -155,7 +155,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] tw:flex-1"
|
||||
<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]"
|
||||
style="animation-duration: 100ms">
|
||||
<c-components.sidebar-menu-header title="{% translate 'Transactions' %}"></c-components.sidebar-menu-header>
|
||||
<c-components.sidebar-menu-item
|
||||
@@ -261,7 +261,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="btn-group w-100 sidebar-item" role="group">
|
||||
<div class="btn-group w-100" 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">
|
||||
|
||||
@@ -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, #show-entities">
|
||||
hx-include="#picker-form, #picker-type, #view-type, #show-tags, #showing">
|
||||
<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,34 +25,19 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-3 mb-1 d-flex flex-column flex-md-row justify-content-between">
|
||||
<div class="d-flex gap-4">
|
||||
<div class="form-check form-switch" id="show-tags">
|
||||
{% if view_type == 'table' %}
|
||||
<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>
|
||||
<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 %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="btn-group btn-group-sm" role="group" id="showing" _="on change trigger updated">
|
||||
@@ -265,100 +250,6 @@
|
||||
{% 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 %}
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="container" hx-get="{% url 'setup' %}" hx-trigger="load, updated from:window"></div>
|
||||
|
||||
<div id="content">
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
|
||||
68
app/templates/users/setup/setup.html
Normal file
68
app/templates/users/setup/setup.html
Normal file
@@ -0,0 +1,68 @@
|
||||
{% load i18n %}
|
||||
<div class="card shadow-sm rounded-3">
|
||||
<div class="card-header border-bottom-0 pt-4 px-4">
|
||||
<h5 class="card-title fw-bold"><i class="fas fa-rocket me-2"></i>Let's Get You Set Up</h5>
|
||||
</div>
|
||||
<div class="card-body p-4">
|
||||
<!-- Explanation Text -->
|
||||
<div class="alert alert-info border-0" role="alert">
|
||||
<div class="d-flex align-items-center">
|
||||
<i class="fas fa-info-circle fa-lg me-3"></i>
|
||||
<div>
|
||||
Welcome to <strong>WYGIWYH</strong>! To get started, you need to configure a currency and create your first account. This will establish the foundation for managing your finances.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Task Lists -->
|
||||
<div class="mt-4 border rounded-3 overflow-hidden">
|
||||
<!-- Required Section -->
|
||||
<div class="p-3 text-bg-secondary text-muted text-uppercase fw-bold small">Required Steps</div>
|
||||
<ul class="list-group list-group-flush">
|
||||
<!-- Task 1: Create Currency -->
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center p-3">
|
||||
<div class="d-flex align-items-center">
|
||||
<i class="fa-regular fa-circle{% if has_currency %}-check{% endif %} fa-fw text-primary me-3"></i>
|
||||
<span class="fw-medium {% if has_currency %}tw:line-through{% endif %}">{% trans 'Add' %} {% trans 'Currency' %}</span>
|
||||
</div>
|
||||
<a href="#" class="btn btn-primary btn-sm"
|
||||
role="button"
|
||||
hx-get="{% url 'currency_add' %}"
|
||||
hx-target="#generic-offcanvas">{% trans 'Add' %} <i class="fas fa-arrow-right ms-1"></i></a>
|
||||
</li>
|
||||
<!-- Task 2: Create Account -->
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center p-3">
|
||||
<div class="d-flex align-items-center">
|
||||
<i class="fa-regular fa-circle{% if has_account %}-check{% endif %} fa-fw text-primary me-3"></i>
|
||||
<span class="fw-medium {% if has_account %}tw:line-through{% endif %}">{% trans 'Add' %} {% trans 'Account' %}</span>
|
||||
</div>
|
||||
<a class="btn btn-primary btn-sm"
|
||||
role="button"
|
||||
hx-get="{% url 'account_add' %}"
|
||||
hx-target="#generic-offcanvas">{% trans 'Add' %} <i class="fas fa-arrow-right ms-1"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- Optional Section -->
|
||||
<div class="p-3 text-bg-secondary text-muted text-uppercase fw-bold small border-top">Optional Steps</div>
|
||||
<ul class="list-group list-group-flush">
|
||||
<!-- Task 3: Import Data -->
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center p-3">
|
||||
<div class="d-flex align-items-center">
|
||||
<i class="fas fa-upload fa-fw text-secondary me-3"></i>
|
||||
<span class="fw-medium">Import data from another app</span>
|
||||
</div>
|
||||
<a href="#" class="btn btn-outline-secondary btn-sm">Import</a>
|
||||
</li>
|
||||
<!-- Task 4: Invite Team -->
|
||||
<li class="list-group-item d-flex justify-content-between align-items-center p-3">
|
||||
<div class="d-flex align-items-center">
|
||||
<i class="fas fa-user-plus fa-fw text-secondary me-3"></i>
|
||||
<span class="fw-medium">Invite team members</span>
|
||||
</div>
|
||||
<a href="#" class="btn btn-outline-secondary btn-sm">Invite</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,66 +1,2 @@
|
||||
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;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -85,7 +85,3 @@ select[multiple] {
|
||||
[data-bs-toggle="collapse"][aria-expanded="true"] .fa-chevron-down {
|
||||
transform: rotate(-180deg);
|
||||
}
|
||||
|
||||
div:where(.swal2-container) {
|
||||
z-index: 1100 !important;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user