Compare commits

..
Author SHA1 Message Date
Herculino Trotta 2f99021d0b feat: initial commit 2025-08-07 22:55:25 -03:00
52 changed files with 1955 additions and 3255 deletions
@@ -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),
),
]
+2 -11
View File
@@ -1,11 +1,11 @@
from django.conf import settings from django.conf import settings
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.db.models import Q
from django.utils.translation import gettext_lazy as _ 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.transactions.models import Transaction
from apps.common.models import SharedObject, SharedObjectManager
class AccountGroup(SharedObject): class AccountGroup(SharedObject):
@@ -62,11 +62,6 @@ class Account(SharedObject):
verbose_name=_("Archived"), verbose_name=_("Archived"),
help_text=_("Archived accounts don't show up nor count towards your net worth"), 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() objects = SharedObjectManager()
all_objects = models.Manager() # Unfiltered manager all_objects = models.Manager() # Unfiltered manager
@@ -80,10 +75,6 @@ class Account(SharedObject):
def __str__(self): def __str__(self):
return self.name return self.name
def is_untracked_by(self):
user = get_current_user()
return self.untracked_by.filter(pk=user.pk).exists()
def clean(self): def clean(self):
super().clean() super().clean()
if self.exchange_currency == self.currency: if self.exchange_currency == self.currency:
-5
View File
@@ -31,11 +31,6 @@ urlpatterns = [
views.account_take_ownership, views.account_take_ownership,
name="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/", views.account_groups_index, name="account_groups_index"),
path("account-groups/list/", views.account_groups_list, name="account_groups_list"), path("account-groups/list/", views.account_groups_list, name="account_groups_list"),
path("account-groups/add/", views.account_group_add, name="account_group_add"), path("account-groups/add/", views.account_group_add, name="account_group_add"),
-20
View File
@@ -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 @only_htmx
@login_required @login_required
@require_http_methods(["GET"]) @require_http_methods(["GET"])
-1
View File
@@ -138,7 +138,6 @@ class RecurringTransactionSerializer(serializers.ModelSerializer):
def update(self, instance, validated_data): def update(self, instance, validated_data):
instance = super().update(instance, validated_data) instance = super().update(instance, validated_data)
instance.update_unpaid_transactions() instance.update_unpaid_transactions()
instance.generate_upcoming_transactions()
return instance return instance
@@ -139,6 +139,7 @@ class DynamicModelMultipleChoiceField(forms.ModelMultipleChoiceField):
instance.save() instance.save()
return instance return instance
except Exception as e: except Exception as e:
print(e)
raise ValidationError(_("Error creating new instance")) raise ValidationError(_("Error creating new instance"))
def clean(self, value): def clean(self, value):
+3 -10
View File
@@ -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): def get_format(format_type=None, lang=None, use_l10n=None):
user = get_current_user() user = get_current_user()
if ( if user and user.is_authenticated and hasattr(user, "settings") and use_l10n:
user
and user.is_authenticated
and hasattr(user, "settings")
and use_l10n is not False
):
user_settings = user.settings user_settings = user.settings
if format_type == "THOUSAND_SEPARATOR": if format_type == "THOUSAND_SEPARATOR":
number_format = getattr(user_settings, "number_format", None) number_format = getattr(user_settings, "number_format", None)
@@ -18,13 +13,11 @@ def get_format(format_type=None, lang=None, use_l10n=None):
return "." return "."
elif number_format == "CD": elif number_format == "CD":
return "," return ","
elif number_format == "SD" or number_format == "SC":
return " "
elif format_type == "DECIMAL_SEPARATOR": elif format_type == "DECIMAL_SEPARATOR":
number_format = getattr(user_settings, "number_format", None) number_format = getattr(user_settings, "number_format", None)
if number_format == "DC" or number_format == "SC": if number_format == "DC":
return "," return ","
elif number_format == "CD" or number_format == "SD": elif number_format == "CD":
return "." return "."
elif format_type == "SHORT_DATE_FORMAT": elif format_type == "SHORT_DATE_FORMAT":
date_format = getattr(user_settings, "date_format", None) date_format = getattr(user_settings, "date_format", None)
-7
View File
@@ -91,12 +91,6 @@ def month_year_picker(request):
for date in all_months for date in all_months
] ]
today_url = (
reverse(url, kwargs={"month": current_date.month, "year": current_date.year})
if url
else ""
)
return render( return render(
request, request,
"common/fragments/month_year_picker.html", "common/fragments/month_year_picker.html",
@@ -104,7 +98,6 @@ def month_year_picker(request):
"month_year_data": result, "month_year_data": result,
"current_month": current_month, "current_month": current_month,
"current_year": current_year, "current_year": current_year,
"today_url": today_url,
}, },
) )
+2 -1
View File
@@ -35,7 +35,8 @@ class ArbitraryDecimalDisplayNumberInput(forms.TextInput):
self.attrs.update( self.attrs.update(
{ {
"x-data": "", "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'))", "x-on:keyup": "$el.dispatchEvent(new Event('input'))",
} }
) )
+24 -61
View File
@@ -4,7 +4,13 @@ from datetime import timedelta
from django.db.models import QuerySet from django.db.models import QuerySet
from django.utils import timezone 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 from apps.currencies.models import ExchangeRateService, ExchangeRate, Currency
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -12,12 +18,11 @@ logger = logging.getLogger(__name__)
# Map service types to provider classes # Map service types to provider classes
PROVIDER_MAPPING = { PROVIDER_MAPPING = {
"coingecko_free": providers.CoinGeckoFreeProvider, "synth_finance": SynthFinanceProvider,
"coingecko_pro": providers.CoinGeckoProProvider, "synth_finance_stock": SynthFinanceStockProvider,
"transitive": providers.TransitiveRateProvider, "coingecko_free": CoinGeckoFreeProvider,
"frankfurter": providers.FrankfurterProvider, "coingecko_pro": CoinGeckoProProvider,
"twelvedata": providers.TwelveDataProvider, "transitive": TransitiveRateProvider,
"twelvedatamarkets": providers.TwelveDataMarketsProvider,
} }
@@ -198,63 +203,21 @@ class ExchangeRateFetcher:
if provider.rates_inverted: if provider.rates_inverted:
# If rates are inverted, we need to swap currencies # If rates are inverted, we need to swap currencies
if service.singleton: ExchangeRate.objects.create(
# Try to get the last automatically created exchange rate from_currency=to_currency,
exchange_rate = ( to_currency=from_currency,
ExchangeRate.objects.filter( rate=rate,
automatic=True, date=timezone.now(),
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()
processed_pairs.add((to_currency.id, from_currency.id)) processed_pairs.add((to_currency.id, from_currency.id))
else: else:
# If rates are not inverted, we can use them as is # If rates are not inverted, we can use them as is
if service.singleton: ExchangeRate.objects.create(
# Try to get the last automatically created exchange rate from_currency=from_currency,
exchange_rate = ( to_currency=to_currency,
ExchangeRate.objects.filter( rate=rate,
automatic=True, date=timezone.now(),
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()
processed_pairs.add((from_currency.id, to_currency.id)) processed_pairs.add((from_currency.id, to_currency.id))
service.last_fetch = timezone.now() service.last_fetch = timezone.now()
+129 -326
View File
@@ -13,6 +13,70 @@ from apps.currencies.exchange_rates.base import ExchangeRateProvider
logger = logging.getLogger(__name__) 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): class CoinGeckoFreeProvider(ExchangeRateProvider):
"""Implementation for CoinGecko Free API""" """Implementation for CoinGecko Free API"""
@@ -88,6 +152,71 @@ class CoinGeckoProProvider(CoinGeckoFreeProvider):
self.session.headers.update({"x-cg-pro-api-key": api_key}) 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): class TransitiveRateProvider(ExchangeRateProvider):
"""Calculates exchange rates through paths of existing rates""" """Calculates exchange rates through paths of existing rates"""
@@ -177,329 +306,3 @@ class TransitiveRateProvider(ExchangeRateProvider):
queue.append((neighbor, path + [neighbor], current_rate * rate)) queue.append((neighbor, path + [neighbor], current_rate * rate))
return None, None 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
-2
View File
@@ -114,7 +114,6 @@ class ExchangeRateServiceForm(forms.ModelForm):
"fetch_interval", "fetch_interval",
"target_currencies", "target_currencies",
"target_accounts", "target_accounts",
"singleton",
] ]
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@@ -127,7 +126,6 @@ class ExchangeRateServiceForm(forms.ModelForm):
"name", "name",
"service_type", "service_type",
Switch("is_active"), Switch("is_active"),
Switch("singleton"),
"api_key", "api_key",
Row( Row(
Column("interval_type", css_class="form-group col-md-6"), 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'),
),
]
+2 -13
View File
@@ -70,8 +70,6 @@ class ExchangeRate(models.Model):
) )
date = models.DateTimeField(verbose_name=_("Date and Time")) date = models.DateTimeField(verbose_name=_("Date and Time"))
automatic = models.BooleanField(verbose_name=_("Auto"), default=False)
class Meta: class Meta:
verbose_name = _("Exchange Rate") verbose_name = _("Exchange Rate")
verbose_name_plural = _("Exchange Rates") verbose_name_plural = _("Exchange Rates")
@@ -94,12 +92,11 @@ class ExchangeRateService(models.Model):
"""Configuration for exchange rate services""" """Configuration for exchange rate services"""
class ServiceType(models.TextChoices): 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_FREE = "coingecko_free", "CoinGecko (Demo/Free)"
COINGECKO_PRO = "coingecko_pro", "CoinGecko (Pro)" COINGECKO_PRO = "coingecko_pro", "CoinGecko (Pro)"
TRANSITIVE = "transitive", "Transitive (Calculated from Existing Rates)" TRANSITIVE = "transitive", "Transitive (Calculated from Existing Rates)"
FRANKFURTER = "frankfurter", "Frankfurter"
TWELVEDATA = "twelvedata", "TwelveData"
TWELVEDATA_MARKETS = "twelvedatamarkets", "TwelveData Markets"
class IntervalType(models.TextChoices): class IntervalType(models.TextChoices):
ON = "on", _("On") ON = "on", _("On")
@@ -151,14 +148,6 @@ class ExchangeRateService(models.Model):
blank=True, 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: class Meta:
verbose_name = _("Exchange Rate Service") verbose_name = _("Exchange Rate Service")
verbose_name_plural = _("Exchange Rate Services") verbose_name_plural = _("Exchange Rate Services")
+1 -173
View File
@@ -9,9 +9,7 @@ from apps.currencies.models import Currency
from apps.currencies.utils.convert import convert from apps.currencies.utils.convert import convert
def get_categories_totals( def get_categories_totals(transactions_queryset, ignore_empty=False):
transactions_queryset, ignore_empty=False, show_entities=False
):
# First get the category totals as before # First get the category totals as before
category_currency_metrics = ( category_currency_metrics = (
transactions_queryset.values( transactions_queryset.values(
@@ -242,7 +240,6 @@ def get_categories_totals(
result[category_id]["tags"][tag_key] = { result[category_id]["tags"][tag_key] = {
"name": tag_name, "name": tag_name,
"currencies": {}, "currencies": {},
"entities": {},
} }
currency_id = tag_metric["account__currency"] currency_id = tag_metric["account__currency"]
@@ -322,173 +319,4 @@ def get_categories_totals(
currency_id currency_id
] = tag_currency_data ] = 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 return result
+1 -8
View File
@@ -13,9 +13,7 @@ from apps.insights.forms import (
) )
def get_transactions( def get_transactions(request, include_unpaid=True, include_silent=False):
request, include_unpaid=True, include_silent=False, include_untracked_accounts=False
):
transactions = Transaction.objects.all() transactions = Transaction.objects.all()
filter_type = request.GET.get("type", None) 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) 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 return transactions
+6 -22
View File
@@ -74,7 +74,7 @@ def index(request):
def sankey_by_account(request): def sankey_by_account(request):
# Get filtered transactions # Get filtered transactions
transactions = get_transactions(request, include_untracked_accounts=True) transactions = get_transactions(request)
# Generate Sankey data # Generate Sankey data
sankey_data = generate_sankey_data_by_account(transactions) sankey_data = generate_sankey_data_by_account(transactions)
@@ -180,14 +180,6 @@ def category_overview(request):
else: else:
show_tags = request.session.get("insights_category_explorer_show_tags", True) 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: if "showing" in request.GET:
showing = request.GET["showing"] showing = request.GET["showing"]
request.session["insights_category_explorer_showing"] = showing request.session["insights_category_explorer_showing"] = showing
@@ -198,9 +190,7 @@ def category_overview(request):
transactions = get_transactions(request, include_silent=True) transactions = get_transactions(request, include_silent=True)
total_table = get_categories_totals( total_table = get_categories_totals(
transactions_queryset=transactions, transactions_queryset=transactions, ignore_empty=False
ignore_empty=False,
show_entities=show_entities,
) )
return render( return render(
@@ -210,7 +200,6 @@ def category_overview(request):
"total_table": total_table, "total_table": total_table,
"view_type": view_type, "view_type": view_type,
"show_tags": show_tags, "show_tags": show_tags,
"show_entities": show_entities,
"showing": showing, "showing": showing,
}, },
) )
@@ -250,14 +239,10 @@ def late_transactions(request):
@login_required @login_required
@require_http_methods(["GET"]) @require_http_methods(["GET"])
def emergency_fund(request): def emergency_fund(request):
transactions_currency_queryset = ( transactions_currency_queryset = Transaction.objects.filter(
Transaction.objects.filter( is_paid=True, account__is_archived=False, account__is_asset=False
is_paid=True, account__is_archived=False, account__is_asset=False ).order_by(
) "account__currency__name",
.exclude(account__in=request.user.untracked_accounts.all())
.order_by(
"account__currency__name",
)
) )
currency_net_worth = calculate_currency_totals( currency_net_worth = calculate_currency_totals(
transactions_queryset=transactions_currency_queryset, ignore_empty=False transactions_queryset=transactions_currency_queryset, ignore_empty=False
@@ -277,7 +262,6 @@ def emergency_fund(request):
category__mute=False, category__mute=False,
mute=False, mute=False,
) )
.exclude(account__in=request.user.untracked_accounts.all())
.values("reference_date", "account__currency") .values("reference_date", "account__currency")
.annotate(monthly_total=Sum("amount")) .annotate(monthly_total=Sum("amount"))
) )
+7 -17
View File
@@ -107,15 +107,9 @@ def transactions_list(request, month: int, year: int):
@require_http_methods(["GET"]) @require_http_methods(["GET"])
def monthly_summary(request, month: int, year: int): def monthly_summary(request, month: int, year: int):
# Base queryset with all required filters # Base queryset with all required filters
base_queryset = ( base_queryset = Transaction.objects.filter(
Transaction.objects.filter( reference_date__year=year, reference_date__month=month, account__is_asset=False
reference_date__year=year, ).exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
reference_date__month=month,
account__is_asset=False,
)
.exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
.exclude(account__in=request.user.untracked_accounts.all())
)
data = calculate_currency_totals(base_queryset, ignore_empty=True) data = calculate_currency_totals(base_queryset, ignore_empty=True)
percentages = calculate_percentage_distribution(data) percentages = calculate_percentage_distribution(data)
@@ -171,14 +165,10 @@ def monthly_account_summary(request, month: int, year: int):
@require_http_methods(["GET"]) @require_http_methods(["GET"])
def monthly_currency_summary(request, month: int, year: int): def monthly_currency_summary(request, month: int, year: int):
# Base queryset with all required filters # Base queryset with all required filters
base_queryset = ( base_queryset = Transaction.objects.filter(
Transaction.objects.filter( reference_date__year=year,
reference_date__year=year, reference_date__month=month,
reference_date__month=month, ).exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
)
.exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
.exclude(account__in=request.user.untracked_accounts.all())
)
currency_data = calculate_currency_totals(base_queryset.all(), ignore_empty=True) currency_data = calculate_currency_totals(base_queryset.all(), ignore_empty=True)
currency_percentages = calculate_percentage_distribution(currency_data) currency_percentages = calculate_percentage_distribution(currency_data)
+9 -12
View File
@@ -20,18 +20,17 @@ from apps.transactions.utils.calculations import (
@require_http_methods(["GET"]) @require_http_methods(["GET"])
def net_worth(request): def net_worth(request):
if "view_type" in request.GET: if "view_type" in request.GET:
print(request.GET["view_type"])
view_type = request.GET["view_type"] view_type = request.GET["view_type"]
request.session["networth_view_type"] = view_type request.session["networth_view_type"] = view_type
else: else:
view_type = request.session.get("networth_view_type", "current") view_type = request.session.get("networth_view_type", "current")
if view_type == "current": if view_type == "current":
transactions_currency_queryset = ( transactions_currency_queryset = Transaction.objects.filter(
Transaction.objects.filter(is_paid=True, account__is_archived=False) is_paid=True, account__is_archived=False
.order_by( ).order_by(
"account__currency__name", "account__currency__name",
)
.exclude(account__in=request.user.untracked_accounts.all())
) )
transactions_account_queryset = Transaction.objects.filter( transactions_account_queryset = Transaction.objects.filter(
is_paid=True, account__is_archived=False is_paid=True, account__is_archived=False
@@ -40,12 +39,10 @@ def net_worth(request):
"account__name", "account__name",
) )
else: else:
transactions_currency_queryset = ( transactions_currency_queryset = Transaction.objects.filter(
Transaction.objects.filter(account__is_archived=False) account__is_archived=False
.order_by( ).order_by(
"account__currency__name", "account__currency__name",
)
.exclude(account__in=request.user.untracked_accounts.all())
) )
transactions_account_queryset = Transaction.objects.filter( transactions_account_queryset = Transaction.objects.filter(
account__is_archived=False account__is_archived=False
+15 -97
View File
@@ -60,20 +60,26 @@ class TransactionsFilter(django_filters.FilterSet):
label=_("Currencies"), label=_("Currencies"),
widget=TomSelectMultiple(checkboxes=True, remove_button=True), 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"), label=_("Categories"),
widget=TomSelectMultiple(checkboxes=True, remove_button=True), 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"), label=_("Tags"),
widget=TomSelectMultiple(checkboxes=True, remove_button=True), 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"), label=_("Entities"),
widget=TomSelectMultiple(checkboxes=True, remove_button=True), widget=TomSelectMultiple(checkboxes=True, remove_button=True),
method="filter_entities",
) )
is_paid = django_filters.MultipleChoiceFilter( is_paid = django_filters.MultipleChoiceFilter(
choices=SITUACAO_CHOICES, choices=SITUACAO_CHOICES,
@@ -119,7 +125,6 @@ class TransactionsFilter(django_filters.FilterSet):
"is_paid", "is_paid",
"category", "category",
"tags", "tags",
"entities",
"date_start", "date_start",
"date_end", "date_end",
"reference_date_start", "reference_date_start",
@@ -181,93 +186,6 @@ class TransactionsFilter(django_filters.FilterSet):
self.form.fields["date_end"].widget = AirDatePickerInput() self.form.fields["date_end"].widget = AirDatePickerInput()
self.form.fields["account"].queryset = Account.objects.all() self.form.fields["account"].queryset = Account.objects.all()
category_choices = list( self.form.fields["category"].queryset = TransactionCategory.objects.all()
TransactionCategory.objects.values_list("name", "name").order_by("name") self.form.fields["tags"].queryset = TransactionTag.objects.all()
) self.form.fields["entities"].queryset = TransactionEntity.objects.all()
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
-1
View File
@@ -1085,6 +1085,5 @@ class RecurringTransactionForm(forms.ModelForm):
instance.create_upcoming_transactions() instance.create_upcoming_transactions()
else: else:
instance.update_unpaid_transactions() instance.update_unpaid_transactions()
instance.generate_upcoming_transactions()
return instance return instance
+1 -4
View File
@@ -589,10 +589,7 @@ def transaction_all_currency_summary(request):
f = TransactionsFilter(request.GET, queryset=transactions) f = TransactionsFilter(request.GET, queryset=transactions)
currency_data = calculate_currency_totals( currency_data = calculate_currency_totals(f.qs.all(), ignore_empty=True)
f.qs.exclude(account__in=request.user.untracked_accounts.all()),
ignore_empty=True,
)
currency_percentages = calculate_percentage_distribution(currency_data) currency_percentages = calculate_percentage_distribution(currency_data)
context = { context = {
-2
View File
@@ -89,8 +89,6 @@ class UserSettingsForm(forms.ModelForm):
("AA", _("Default")), ("AA", _("Default")),
("DC", "1.234,50"), ("DC", "1.234,50"),
("CD", "1,234.50"), ("CD", "1,234.50"),
("SD", "1 234.50"),
("SC", "1 234,50"),
] ]
date_format = forms.ChoiceField( date_format = forms.ChoiceField(
+1
View File
@@ -4,6 +4,7 @@ from . import views
urlpatterns = [ urlpatterns = [
path("", views.index, name="index"), path("", views.index, name="index"),
path("setup/", views.setup, name="setup"),
path("login/", views.UserLoginView.as_view(), name="login"), path("login/", views.UserLoginView.as_view(), name="login"),
# path("login/fallback/", views.UserLoginView.as_view(), name="fallback_login"), # path("login/fallback/", views.UserLoginView.as_view(), name="fallback_login"),
path("logout/", views.logout_view, name="logout"), path("logout/", views.logout_view, name="logout"),
+24
View File
@@ -21,6 +21,8 @@ from apps.users.forms import (
) )
from apps.users.models import UserSettings from apps.users.models import UserSettings
from apps.common.decorators.demo import disabled_on_demo 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): def logout_view(request):
@@ -48,6 +50,28 @@ def index(request):
return redirect(reverse("monthly_index")) 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): class UserLoginView(LoginView):
form_class = LoginForm form_class = LoginForm
template_name = "users/login.html" template_name = "users/login.html"
-1
View File
@@ -95,7 +95,6 @@ def yearly_overview_by_currency(request, year: int):
transactions = ( transactions = (
Transaction.objects.filter(**filter_params) Transaction.objects.filter(**filter_params)
.exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True)) .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") .order_by("account__currency__name")
) )
+105 -195
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-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" "PO-Revision-Date: 2025-07-22 06:17+0000\n"
"Last-Translator: seraphblade2010 <marc.butenhoff@web.de>\n" "Last-Translator: seraphblade2010 <marc.butenhoff@web.de>\n"
"Language-Team: German <https://translations.herculino.com/projects/wygiwyh/" "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/accounts/forms.py:40 apps/accounts/forms.py:98
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91 #: 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/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/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421 #: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836 #: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903 #: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:217 #: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:379 #: apps/users/forms.py:377
msgid "Update" msgid "Update"
msgstr "Aktualisierung" msgstr "Aktualisierung"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106 #: apps/accounts/forms.py:48 apps/accounts/forms.py:106
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61 #: 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/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/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:189 apps/transactions/forms.py:213
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801 #: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876 #: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065 #: 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/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr "Neuer Saldo"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935 #: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501 #: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951 #: 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:63
#: templates/insights/fragments/category_overview/index.html:528 #: templates/insights/fragments/category_overview/index.html:419
msgid "Category" msgid "Category"
msgstr "Kategorie" msgstr "Kategorie"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109 #: 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/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/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:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479 #: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928 #: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503 #: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957 #: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168 #: 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 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "Tags" msgstr "Tags"
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
msgstr "" msgstr ""
"Archivierte Konten werden weder angezeigt, noch zum Nettovermögen gezählt" "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/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276 #: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920 #: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -185,7 +185,7 @@ msgstr ""
msgid "Account" msgid "Account"
msgstr "Konto" 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 #: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5 #: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117 #: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
@@ -197,7 +197,7 @@ msgstr "Konto"
msgid "Accounts" msgid "Accounts"
msgstr "Konten" 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." msgid "Exchange currency cannot be the same as the account's main currency."
msgstr "" msgstr ""
"Die Umrechnungs-Währung darf nicht mit der Haupt-Währung des Kontos " "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" msgstr "Kontengruppe erfolgreich gelöscht"
#: apps/accounts/views/account_groups.py:135 #: 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/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154 #: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully" msgid "Ownership taken successfully"
@@ -260,14 +260,6 @@ msgstr "Konto erfolgreich aktualisiert"
msgid "Account deleted successfully" msgid "Account deleted successfully"
msgstr "Konto erfolgreich gelöscht" 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 #: apps/accounts/views/balance.py:77
msgid "Balance reconciliation" msgid "Balance reconciliation"
msgstr "Saldenaktualisierung" msgstr "Saldenaktualisierung"
@@ -300,7 +292,7 @@ msgstr "Entität mit dieser ID existiert nicht."
msgid "Invalid entity data. Provide an ID or name." msgid "Invalid entity data. Provide an ID or name."
msgstr "Ungültige Entitäts-Daten. Gib eine ID oder einen Namen an." 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." msgid "Either 'date' or 'reference_date' must be provided."
msgstr "Entweder \"Datum\" oder \"Referenzdatum\" müssen angegeben werden." msgstr "Entweder \"Datum\" oder \"Referenzdatum\" müssen angegeben werden."
@@ -319,7 +311,7 @@ msgid "Shared with users"
msgstr "Mit Nutzern geteilt" msgstr "Mit Nutzern geteilt"
#: apps/common/fields/forms/dynamic_select.py:71 #: 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" msgid "Error creating new instance"
msgstr "Fehler bei der Erstellung einer neuen Instanz" 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: " "Privat: Nur für den Besitzer und geteilte Nutzer sichtbar.<br/>Öffentlich: "
"Sichtbar für alle Nutzer. Nur bearbeitbar durch Besitzer." "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" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
@@ -459,13 +451,12 @@ msgstr "Fehler"
msgid "Info" msgid "Info"
msgstr "Info" msgstr "Info"
#: apps/common/views.py:118 #: apps/common/views.py:111
msgid "Cache cleared successfully" msgid "Cache cleared successfully"
msgstr "Cache erfolgreich geleert" msgstr "Cache erfolgreich geleert"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208 #: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266 #: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today" msgid "Today"
msgstr "Heute" msgstr "Heute"
@@ -542,7 +533,7 @@ msgstr "Startwährung"
msgid "To Currency" msgid "To Currency"
msgstr "Zielwährung" 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" msgid "Exchange Rate"
msgstr "Umrechnungskurs" msgstr "Umrechnungskurs"
@@ -550,43 +541,38 @@ msgstr "Umrechnungskurs"
msgid "Date and Time" msgid "Date and Time"
msgstr "Datum und Uhrzeit" msgstr "Datum und Uhrzeit"
#: apps/currencies/models.py:73 apps/users/models.py:12 #: apps/currencies/models.py:75 apps/export_app/forms.py:68
#: apps/users/models.py:497
msgid "Auto"
msgstr "Automatisch"
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6 #: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202 #: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "Umrechnungskurse" msgstr "Umrechnungskurse"
#: apps/currencies/models.py:89 #: apps/currencies/models.py:87
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Start- und Zielwährung dürfen nicht identisch sein." msgstr "Start- und Zielwährung dürfen nicht identisch sein."
#: apps/currencies/models.py:105 #: apps/currencies/models.py:102
msgid "On" msgid "On"
msgstr "An" msgstr "An"
#: apps/currencies/models.py:106 #: apps/currencies/models.py:103
msgid "Every X hours" msgid "Every X hours"
msgstr "Alle X Stunden" msgstr "Alle X Stunden"
#: apps/currencies/models.py:107 #: apps/currencies/models.py:104
msgid "Not on" msgid "Not on"
msgstr "Nicht an" msgstr "Nicht an"
#: apps/currencies/models.py:109 #: apps/currencies/models.py:106
msgid "Service Name" msgid "Service Name"
msgstr "Dienstname" msgstr "Dienstname"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:108
msgid "Service Type" msgid "Service Type"
msgstr "Diensttyp" 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 #: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21 #: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21 #: templates/entities/fragments/list.html:21
@@ -595,31 +581,31 @@ msgstr "Diensttyp"
msgid "Active" msgid "Active"
msgstr "Aktiv" msgstr "Aktiv"
#: apps/currencies/models.py:118 #: apps/currencies/models.py:115
msgid "API Key" msgid "API Key"
msgstr "API-Schlüssel" msgstr "API-Schlüssel"
#: apps/currencies/models.py:119 #: apps/currencies/models.py:116
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "API-Schlüssel für den Dienst (falls benötigt)" msgstr "API-Schlüssel für den Dienst (falls benötigt)"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:121
msgid "Interval Type" msgid "Interval Type"
msgstr "Intervalltyp" msgstr "Intervalltyp"
#: apps/currencies/models.py:128 #: apps/currencies/models.py:125
msgid "Interval" msgid "Interval"
msgstr "Intervall" msgstr "Intervall"
#: apps/currencies/models.py:131 #: apps/currencies/models.py:128
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Letzter erfolgreicher Abruf" msgstr "Letzter erfolgreicher Abruf"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:133
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Zielwährungen" msgstr "Zielwährungen"
#: apps/currencies/models.py:138 #: apps/currencies/models.py:135
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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 auswählen, dessen Umrechnungskurs abgerufen werden sollen. Für jede "
"Währung wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen." "Währung wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
#: apps/currencies/models.py:146 #: apps/currencies/models.py:143
msgid "Target Accounts" msgid "Target Accounts"
msgstr "Zielkonten" msgstr "Zielkonten"
#: apps/currencies/models.py:148 #: apps/currencies/models.py:145
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "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 " "Konten auswählen, für die Umrechungskurse abgerufen werden solen. Für jedes "
"Konto wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen." "Konto wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
#: apps/currencies/models.py:155 #: apps/currencies/models.py:152
#, 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
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Umrechnungskurs-Dienst" msgstr "Umrechnungskurs-Dienst"
#: apps/currencies/models.py:164 #: apps/currencies/models.py:153
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Umrechnungskurs-Dienste" msgstr "Umrechnungskurs-Dienste"
#: apps/currencies/models.py:216 #: apps/currencies/models.py:205
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "\"Jede X Stunden\"-Intervalltyp benötigt eine positive Ganzzahl." 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." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "\"Jede X Stunden\"-Intervall muss zwischen 1 und 24 liegen." msgstr "\"Jede X Stunden\"-Intervall muss zwischen 1 und 24 liegen."
#: apps/currencies/models.py:239 #: apps/currencies/models.py:228
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -673,7 +649,7 @@ msgstr ""
"Ungültiges Stundenformat. Nutze kommagetrennte Stunden (0-23) und/oder " "Ungültiges Stundenformat. Nutze kommagetrennte Stunden (0-23) und/oder "
"Zeiträume (z.B. \"1-5,8,10-12\")." "Zeiträume (z.B. \"1-5,8,10-12\")."
#: apps/currencies/models.py:250 #: apps/currencies/models.py:239
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -850,7 +826,7 @@ msgid "Transactions"
msgstr "Transaktionen" msgstr "Transaktionen"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134 #: 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/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162 #: templates/includes/sidebar.html:162
msgid "Categories" msgid "Categories"
@@ -858,7 +834,7 @@ msgstr "Kategorien"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136 #: 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/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:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943 #: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329 #: 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 #: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174 #: templates/includes/sidebar.html:174
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities" msgid "Entities"
msgstr "Entitäten" msgstr "Entitäten"
@@ -934,7 +909,7 @@ msgstr "Aktion der Transaktions-Regel bearbeiten"
msgid "Update or create transaction actions" msgid "Update or create transaction actions"
msgstr "Aktualisierung oder Erstellung von Transaktions-Aktionen" 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/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5 #: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24 #: templates/export_app/pages/index.html:24
@@ -1035,10 +1010,10 @@ msgid "Run deleted successfully"
msgstr "Vorgang erfolgreich gelöscht" msgstr "Vorgang erfolgreich gelöscht"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36 #: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189 #: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:88 #: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:393 #: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:422 #: templates/insights/fragments/category_overview/index.html:313
msgid "Uncategorized" msgid "Uncategorized"
msgstr "Unkategorisiert" msgstr "Unkategorisiert"
@@ -1303,7 +1278,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20 #: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47 #: 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/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8 #: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12 #: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1318,55 +1293,26 @@ msgstr "Inhalt"
msgid "Transaction Type" msgid "Transaction Type"
msgstr "Transaktionstyp" msgstr "Transaktionstyp"
#: apps/transactions/filters.py:85 #: apps/transactions/filters.py:91
msgid "Date from" msgid "Date from"
msgstr "Datum von" 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" msgid "Until"
msgstr "Bis" msgstr "Bis"
#: apps/transactions/filters.py:95 #: apps/transactions/filters.py:101
msgid "Reference date from" msgid "Reference date from"
msgstr "Referenzdatum von" msgstr "Referenzdatum von"
#: apps/transactions/filters.py:105 #: apps/transactions/filters.py:111
msgid "Amount min" msgid "Amount min"
msgstr "Betrag Minimum" msgstr "Betrag Minimum"
#: apps/transactions/filters.py:110 #: apps/transactions/filters.py:116
msgid "Amount max" msgid "Amount max"
msgstr "Betrag Maximum" 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 #: apps/transactions/forms.py:173
msgid "More" msgid "More"
msgstr "Mehr" msgstr "Mehr"
@@ -1478,7 +1424,7 @@ msgstr "Entität"
#: templates/calendar_view/fragments/list.html:54 #: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10 #: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.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 #: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income" msgid "Income"
msgstr "Einnahme" msgstr "Einnahme"
@@ -1490,7 +1436,7 @@ msgstr "Einnahme"
#: templates/calendar_view/fragments/list.html:58 #: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18 #: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19 #: 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" msgid "Expense"
msgstr "Ausgabe" msgstr "Ausgabe"
@@ -1736,8 +1682,8 @@ msgid "Item deleted successfully"
msgstr "Objekt erfolgreich gelöscht" msgstr "Objekt erfolgreich gelöscht"
#: apps/transactions/views/quick_transactions.py:155 #: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:53 #: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:149 #: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully" msgid "Transaction added successfully"
msgstr "Transaktion erfolgreich hinzugefügt" msgstr "Transaktion erfolgreich hinzugefügt"
@@ -1777,30 +1723,30 @@ msgstr "Tag erfolgreich aktualisiert"
msgid "Tag deleted successfully" msgid "Tag deleted successfully"
msgstr "Tag erfolgreich gelöscht" msgstr "Tag erfolgreich gelöscht"
#: apps/transactions/views/transactions.py:183 #: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully" msgid "Transaction updated successfully"
msgstr "Transaktion erfolgreich aktualisiert" msgstr "Transaktion erfolgreich aktualisiert"
#: apps/transactions/views/transactions.py:233 #: apps/transactions/views/transactions.py:232
#, python-format #, python-format
msgid "%(count)s transaction updated successfully" msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully" msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "%(count)s Transaktion erfolgreich aktualisiert" msgstr[0] "%(count)s Transaktion erfolgreich aktualisiert"
msgstr[1] "%(count)s Transaktionen 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" msgid "Transaction duplicated successfully"
msgstr "Transaktion erfolgreich duplisiert" msgstr "Transaktion erfolgreich duplisiert"
#: apps/transactions/views/transactions.py:311 #: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully" msgid "Transaction deleted successfully"
msgstr "Transaktion erfolgreich gelöscht" msgstr "Transaktion erfolgreich gelöscht"
#: apps/transactions/views/transactions.py:329 #: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully" msgid "Transaction restored successfully"
msgstr "Transaktion erfolgreich wiederhergestellt" msgstr "Transaktion erfolgreich wiederhergestellt"
#: apps/transactions/views/transactions.py:355 #: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully" msgid "Transfer added successfully"
msgstr "Transfer erfolgreich hinzugefügt" msgstr "Transfer erfolgreich hinzugefügt"
@@ -1847,19 +1793,19 @@ msgstr "Dieses Konto ist deaktiviert"
msgid "Default" msgid "Default"
msgstr "Standard" 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" msgid "Date Format"
msgstr "Datumsformat" 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" msgid "Datetime Format"
msgstr "Datums- und Zeitformat" 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" msgid "Number Format"
msgstr "Zahlenformat" msgstr "Zahlenformat"
#: apps/users/forms.py:148 #: apps/users/forms.py:146
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -1870,25 +1816,25 @@ msgstr ""
"angezeigt werden.\n" "angezeigt werden.\n"
"Hilf mit WYGIWYH in deine Sprache zu übersetzten: %(translation_link)s" "Hilf mit WYGIWYH in deine Sprache zu übersetzten: %(translation_link)s"
#: apps/users/forms.py:157 #: apps/users/forms.py:155
msgid "New Password" msgid "New Password"
msgstr "Neues Passwort" msgstr "Neues Passwort"
#: apps/users/forms.py:160 #: apps/users/forms.py:158
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Leer lassen um Passwort zu belassen." msgstr "Leer lassen um Passwort zu belassen."
#: apps/users/forms.py:163 #: apps/users/forms.py:161
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Bestätige das neue Passwort" 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "Abwählen um den Nutzer zu deaktivieren. Besser als gleich zu löschen." 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 "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -1896,38 +1842,42 @@ msgstr ""
"Anwählen damit der Nutzer alle Berechtigungen hat, ohne diese explizit " "Anwählen damit der Nutzer alle Berechtigungen hat, ohne diese explizit "
"hinzuzufügen." "hinzuzufügen."
#: apps/users/forms.py:249 #: apps/users/forms.py:247
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "Diese E-Mail-Adresse wird bereits von jemand anders benutzt." 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." msgid "The two password fields didn't match."
msgstr "Die eingegebenen Passwörter stimmen nicht überein." msgstr "Die eingegebenen Passwörter stimmen nicht überein."
#: apps/users/forms.py:259 #: apps/users/forms.py:257
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "Bitte bestätige dein neues Passwort." msgstr "Bitte bestätige dein neues Passwort."
#: apps/users/forms.py:261 #: apps/users/forms.py:259
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "Bitte gebe erst dein neues Passwort ein." 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." msgid "You cannot deactivate your own account using this form."
msgstr "Du kannst deinen Nutzer nicht hier deaktivieren." 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." msgid "Cannot remove status from the last superuser."
msgstr "Sie können die Adminberechtigungen nicht vom letzten Admin entfernen." 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." msgid "You cannot remove your own superuser status using this form."
msgstr "Du kannst deinen eigenen Superuser-Status nicht hier entfernen." 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." msgid "A user with this email address already exists."
msgstr "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits." 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 #: apps/users/models.py:465 templates/includes/navbar.html:29
msgid "Yearly by currency" msgid "Yearly by currency"
msgstr "Jährlich nach Währung" msgstr "Jährlich nach Währung"
@@ -2044,7 +1994,7 @@ msgstr "Bearbeiten"
#: templates/accounts/fragments/list.html:48 #: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36 #: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136 #: 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/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90 #: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44 #: templates/currencies/fragments/list.html:44
@@ -2071,7 +2021,7 @@ msgstr "Löschen"
#: templates/accounts/fragments/list.html:52 #: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41 #: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140 #: 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/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92 #: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48 #: templates/currencies/fragments/list.html:48
@@ -2101,7 +2051,7 @@ msgstr "Bist du sicher?"
#: templates/accounts/fragments/list.html:53 #: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42 #: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141 #: 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/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93 #: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49 #: 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/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43 #: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142 #: 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/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82 #: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50 #: templates/dca/fragments/strategy/list.html:50
@@ -2204,15 +2154,7 @@ msgstr "Konto bearbeiten"
msgid "Is Asset" msgid "Is Asset"
msgstr "Ist Vermögenswert" msgstr "Ist Vermögenswert"
#: templates/accounts/fragments/list.html:78 #: templates/accounts/fragments/list.html:87
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
msgid "No accounts" msgid "No accounts"
msgstr "Keine Konten" msgstr "Keine Konten"
@@ -2270,7 +2212,7 @@ msgid "Muted"
msgstr "Ausgeblendet" msgstr "Ausgeblendet"
#: templates/categories/fragments/table.html:75 #: 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" msgid "No categories"
msgstr "Keine Kategorien" msgstr "Keine Kategorien"
@@ -2294,42 +2236,23 @@ msgid "Select"
msgstr "Auswahl" msgstr "Auswahl"
#: templates/cotton/transaction/item.html:154 #: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:164 #: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries" msgid "Show on summaries"
msgstr "Anzeigen auf Zusammenfassungen" msgstr "Anzeigen auf Zusammenfassungen"
#: templates/cotton/transaction/item.html:155 #: 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" msgid "Controlled by category"
msgstr "Gesteuert durch Kategorie" msgstr "Gesteuert durch Kategorie"
#: templates/cotton/transaction/item.html:172 #: templates/cotton/transaction/item.html:162
msgid "Hide from summaries" msgid "Hide from summaries"
msgstr "Verstecken bei Zusammenfassungen" msgstr "Verstecken bei Zusammenfassungen"
#: templates/cotton/transaction/item.html:174 #: templates/cotton/transaction/item.html:164
msgid "Add as quick transaction" msgid "Add as quick transaction"
msgstr "Als schnelle Transaktion hinzufügen" msgstr "Als schnelle Transaktion hinzufügen"
#: templates/cotton/transaction/item.html:176 #: templates/cotton/transaction/item.html:166
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/ui/transactions_action_bar.html:82 #: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate" msgid "Duplicate"
msgstr "Duplikat" msgstr "Duplikat"
@@ -2773,7 +2696,7 @@ msgid "Net Worth"
msgstr "Nettovermögen" msgstr "Nettovermögen"
#: templates/includes/navbar.html:45 #: 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 #: templates/net_worth/net_worth.html:22
msgid "Current" msgid "Current"
msgstr "Aktuell" msgstr "Aktuell"
@@ -2910,7 +2833,7 @@ msgstr "Tabelle"
msgid "Bars" msgid "Bars"
msgstr "Balken" msgstr "Balken"
#: templates/insights/fragments/category_overview/index.html:39 #: templates/insights/fragments/category_overview/index.html:38
msgid "" msgid ""
"Transaction amounts associated with multiple tags will be counted once for " "Transaction amounts associated with multiple tags will be counted once for "
"each tag" "each tag"
@@ -2918,30 +2841,22 @@ msgstr ""
"Transaktionsbeträge, die mit mehreren Tags verknüpft sind, werden für jeden " "Transaktionsbeträge, die mit mehreren Tags verknüpft sind, werden für jeden "
"Tag einmal gezählt" "Tag einmal gezählt"
#: templates/insights/fragments/category_overview/index.html:52 #: templates/insights/fragments/category_overview/index.html:54
#, fuzzy
#| msgid ""
#| "Transaction amounts associated with multiple tags will be counted once "
#| "for each tag"
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
"Transaktionsbeträge, die mit mehreren Tags verknüpft sind, werden für jeden "
"Tag einmal gezählt"
#: templates/insights/fragments/category_overview/index.html:69
#, fuzzy #, fuzzy
#| msgid "final total" #| msgid "final total"
msgid "Final total" msgid "Final total"
msgstr "Gesamtbilanz" 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 #: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total" msgid "Total"
msgstr "Gesamt" 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 #, fuzzy
#| msgid "final total" #| msgid "final total"
msgid "Final Total" msgid "Final Total"
@@ -3475,11 +3390,6 @@ msgstr "endet mit"
msgid "Yearly Overview" msgid "Yearly Overview"
msgstr "Jährliche Übersicht" msgstr "Jährliche Übersicht"
#, fuzzy
#~| msgid "Automation"
#~ msgid "Automatic"
#~ msgstr "Automatisierung"
#~ msgid "Profile" #~ msgid "Profile"
#~ msgstr "Profil" #~ msgstr "Profil"
+105 -172
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -24,27 +24,27 @@ msgstr ""
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98 #: apps/accounts/forms.py:40 apps/accounts/forms.py:98
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91 #: 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/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/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421 #: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836 #: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903 #: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:217 #: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:379 #: apps/users/forms.py:377
msgid "Update" msgid "Update"
msgstr "" msgstr ""
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106 #: apps/accounts/forms.py:48 apps/accounts/forms.py:106
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61 #: 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/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/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:189 apps/transactions/forms.py:213
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801 #: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876 #: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065 #: 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/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -81,22 +81,22 @@ msgstr ""
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935 #: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501 #: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951 #: 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:63
#: templates/insights/fragments/category_overview/index.html:528 #: templates/insights/fragments/category_overview/index.html:419
msgid "Category" msgid "Category"
msgstr "" msgstr ""
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109 #: 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/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/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:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479 #: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928 #: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503 #: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957 #: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168 #: 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 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "" msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
msgid "Archived accounts don't show up nor count towards your net worth" msgid "Archived accounts don't show up nor count towards your net worth"
msgstr "" 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/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276 #: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920 #: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -181,7 +181,7 @@ msgstr ""
msgid "Account" msgid "Account"
msgstr "" 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 #: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5 #: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117 #: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
@@ -193,7 +193,7 @@ msgstr ""
msgid "Accounts" msgid "Accounts"
msgstr "" msgstr ""
#: apps/accounts/models.py:93 #: apps/accounts/models.py:84
msgid "Exchange currency cannot be the same as the account's main currency." msgid "Exchange currency cannot be the same as the account's main currency."
msgstr "" msgstr ""
@@ -229,7 +229,7 @@ msgid "Account Group deleted successfully"
msgstr "" msgstr ""
#: apps/accounts/views/account_groups.py:135 #: 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/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154 #: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully" msgid "Ownership taken successfully"
@@ -254,14 +254,6 @@ msgstr ""
msgid "Account deleted successfully" msgid "Account deleted successfully"
msgstr "" 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 #: apps/accounts/views/balance.py:77
msgid "Balance reconciliation" msgid "Balance reconciliation"
msgstr "" msgstr ""
@@ -294,7 +286,7 @@ msgstr ""
msgid "Invalid entity data. Provide an ID or name." msgid "Invalid entity data. Provide an ID or name."
msgstr "" msgstr ""
#: apps/api/serializers/transactions.py:192 #: apps/api/serializers/transactions.py:191
msgid "Either 'date' or 'reference_date' must be provided." msgid "Either 'date' or 'reference_date' must be provided."
msgstr "" msgstr ""
@@ -311,7 +303,7 @@ msgid "Shared with users"
msgstr "" msgstr ""
#: apps/common/fields/forms/dynamic_select.py:71 #: 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" msgid "Error creating new instance"
msgstr "" msgstr ""
@@ -352,7 +344,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner." "owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr "" msgstr ""
#: apps/common/forms.py:80 apps/users/forms.py:142 #: apps/common/forms.py:80 apps/users/forms.py:140
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@@ -447,13 +439,12 @@ msgstr ""
msgid "Info" msgid "Info"
msgstr "" msgstr ""
#: apps/common/views.py:118 #: apps/common/views.py:111
msgid "Cache cleared successfully" msgid "Cache cleared successfully"
msgstr "" msgstr ""
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208 #: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266 #: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today" msgid "Today"
msgstr "" msgstr ""
@@ -530,7 +521,7 @@ msgstr ""
msgid "To Currency" msgid "To Currency"
msgstr "" msgstr ""
#: apps/currencies/models.py:69 apps/currencies/models.py:76 #: apps/currencies/models.py:69 apps/currencies/models.py:74
msgid "Exchange Rate" msgid "Exchange Rate"
msgstr "" msgstr ""
@@ -538,43 +529,38 @@ msgstr ""
msgid "Date and Time" msgid "Date and Time"
msgstr "" msgstr ""
#: apps/currencies/models.py:73 apps/users/models.py:12 #: apps/currencies/models.py:75 apps/export_app/forms.py:68
#: apps/users/models.py:497
msgid "Auto"
msgstr ""
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6 #: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202 #: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "" msgstr ""
#: apps/currencies/models.py:89 #: apps/currencies/models.py:87
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "" msgstr ""
#: apps/currencies/models.py:105 #: apps/currencies/models.py:102
msgid "On" msgid "On"
msgstr "" msgstr ""
#: apps/currencies/models.py:106 #: apps/currencies/models.py:103
msgid "Every X hours" msgid "Every X hours"
msgstr "" msgstr ""
#: apps/currencies/models.py:107 #: apps/currencies/models.py:104
msgid "Not on" msgid "Not on"
msgstr "" msgstr ""
#: apps/currencies/models.py:109 #: apps/currencies/models.py:106
msgid "Service Name" msgid "Service Name"
msgstr "" msgstr ""
#: apps/currencies/models.py:111 #: apps/currencies/models.py:108
msgid "Service Type" msgid "Service Type"
msgstr "" 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 #: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21 #: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21 #: templates/entities/fragments/list.html:21
@@ -583,77 +569,69 @@ msgstr ""
msgid "Active" msgid "Active"
msgstr "" msgstr ""
#: apps/currencies/models.py:118 #: apps/currencies/models.py:115
msgid "API Key" msgid "API Key"
msgstr "" msgstr ""
#: apps/currencies/models.py:119 #: apps/currencies/models.py:116
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "" msgstr ""
#: apps/currencies/models.py:124 #: apps/currencies/models.py:121
msgid "Interval Type" msgid "Interval Type"
msgstr "" msgstr ""
#: apps/currencies/models.py:128 #: apps/currencies/models.py:125
msgid "Interval" msgid "Interval"
msgstr "" msgstr ""
#: apps/currencies/models.py:131 #: apps/currencies/models.py:128
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "" msgstr ""
#: apps/currencies/models.py:136 #: apps/currencies/models.py:133
msgid "Target Currencies" msgid "Target Currencies"
msgstr "" msgstr ""
#: apps/currencies/models.py:138 #: apps/currencies/models.py:135
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:146 #: apps/currencies/models.py:143
msgid "Target Accounts" msgid "Target Accounts"
msgstr "" msgstr ""
#: apps/currencies/models.py:148 #: apps/currencies/models.py:145
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:155 #: apps/currencies/models.py:152
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
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "" msgstr ""
#: apps/currencies/models.py:164 #: apps/currencies/models.py:153
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "" msgstr ""
#: apps/currencies/models.py:216 #: apps/currencies/models.py:205
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
#: apps/currencies/models.py:225 #: apps/currencies/models.py:214
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "" msgstr ""
#: apps/currencies/models.py:239 #: apps/currencies/models.py:228
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
msgstr "" msgstr ""
#: apps/currencies/models.py:250 #: apps/currencies/models.py:239
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -826,7 +804,7 @@ msgid "Transactions"
msgstr "" msgstr ""
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134 #: 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/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162 #: templates/includes/sidebar.html:162
msgid "Categories" msgid "Categories"
@@ -834,7 +812,7 @@ msgstr ""
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136 #: 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/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:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943 #: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329 #: 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 #: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174 #: templates/includes/sidebar.html:174
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities" msgid "Entities"
msgstr "" msgstr ""
@@ -910,7 +887,7 @@ msgstr ""
msgid "Update or create transaction actions" msgid "Update or create transaction actions"
msgstr "" 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/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5 #: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24 #: templates/export_app/pages/index.html:24
@@ -1009,10 +986,10 @@ msgid "Run deleted successfully"
msgstr "" msgstr ""
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36 #: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189 #: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:88 #: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:393 #: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:422 #: templates/insights/fragments/category_overview/index.html:313
msgid "Uncategorized" msgid "Uncategorized"
msgstr "" msgstr ""
@@ -1270,7 +1247,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20 #: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47 #: 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/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8 #: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12 #: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1285,47 +1262,26 @@ msgstr ""
msgid "Transaction Type" msgid "Transaction Type"
msgstr "" msgstr ""
#: apps/transactions/filters.py:85 #: apps/transactions/filters.py:91
msgid "Date from" msgid "Date from"
msgstr "" msgstr ""
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100 #: apps/transactions/filters.py:96 apps/transactions/filters.py:106
msgid "Until" msgid "Until"
msgstr "" msgstr ""
#: apps/transactions/filters.py:95 #: apps/transactions/filters.py:101
msgid "Reference date from" msgid "Reference date from"
msgstr "" msgstr ""
#: apps/transactions/filters.py:105 #: apps/transactions/filters.py:111
msgid "Amount min" msgid "Amount min"
msgstr "" msgstr ""
#: apps/transactions/filters.py:110 #: apps/transactions/filters.py:116
msgid "Amount max" msgid "Amount max"
msgstr "" 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 #: apps/transactions/forms.py:173
msgid "More" msgid "More"
msgstr "" msgstr ""
@@ -1425,7 +1381,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:54 #: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10 #: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.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 #: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income" msgid "Income"
msgstr "" msgstr ""
@@ -1437,7 +1393,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:58 #: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18 #: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19 #: 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" msgid "Expense"
msgstr "" msgstr ""
@@ -1682,8 +1638,8 @@ msgid "Item deleted successfully"
msgstr "" msgstr ""
#: apps/transactions/views/quick_transactions.py:155 #: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:53 #: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:149 #: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully" msgid "Transaction added successfully"
msgstr "" msgstr ""
@@ -1723,30 +1679,30 @@ msgstr ""
msgid "Tag deleted successfully" msgid "Tag deleted successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:183 #: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully" msgid "Transaction updated successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:233 #: apps/transactions/views/transactions.py:232
#, python-format #, python-format
msgid "%(count)s transaction updated successfully" msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully" msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: apps/transactions/views/transactions.py:269 #: apps/transactions/views/transactions.py:268
msgid "Transaction duplicated successfully" msgid "Transaction duplicated successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:311 #: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully" msgid "Transaction deleted successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:329 #: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully" msgid "Transaction restored successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:355 #: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully" msgid "Transfer added successfully"
msgstr "" msgstr ""
@@ -1793,19 +1749,19 @@ msgstr ""
msgid "Default" msgid "Default"
msgstr "" msgstr ""
#: apps/users/forms.py:97 apps/users/models.py:484 #: apps/users/forms.py:95 apps/users/models.py:484
msgid "Date Format" msgid "Date Format"
msgstr "" msgstr ""
#: apps/users/forms.py:102 apps/users/models.py:489 #: apps/users/forms.py:100 apps/users/models.py:489
msgid "Datetime Format" msgid "Datetime Format"
msgstr "" msgstr ""
#: apps/users/forms.py:108 apps/users/models.py:492 #: apps/users/forms.py:106 apps/users/models.py:492
msgid "Number Format" msgid "Number Format"
msgstr "" msgstr ""
#: apps/users/forms.py:148 #: apps/users/forms.py:146
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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" "Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr "" msgstr ""
#: apps/users/forms.py:157 #: apps/users/forms.py:155
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:160 #: apps/users/forms.py:158
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "" msgstr ""
#: apps/users/forms.py:163 #: apps/users/forms.py:161
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:175 apps/users/forms.py:336 #: apps/users/forms.py:173 apps/users/forms.py:334
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:178 apps/users/forms.py:339 #: apps/users/forms.py:176 apps/users/forms.py:337
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:249 #: apps/users/forms.py:247
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
#: apps/users/forms.py:257 #: apps/users/forms.py:255
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "" msgstr ""
#: apps/users/forms.py:259 #: apps/users/forms.py:257
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "" msgstr ""
#: apps/users/forms.py:261 #: apps/users/forms.py:259
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "" msgstr ""
#: apps/users/forms.py:281 #: apps/users/forms.py:279
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:294 #: apps/users/forms.py:292
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:300 #: apps/users/forms.py:298
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:397 #: apps/users/forms.py:395
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "" msgstr ""
#: apps/users/models.py:12 apps/users/models.py:497
msgid "Auto"
msgstr ""
#: apps/users/models.py:465 templates/includes/navbar.html:29 #: apps/users/models.py:465 templates/includes/navbar.html:29
msgid "Yearly by currency" msgid "Yearly by currency"
msgstr "" msgstr ""
@@ -1985,7 +1945,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:48 #: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36 #: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136 #: 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/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90 #: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44 #: templates/currencies/fragments/list.html:44
@@ -2012,7 +1972,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:52 #: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41 #: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140 #: 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/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92 #: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48 #: templates/currencies/fragments/list.html:48
@@ -2042,7 +2002,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:53 #: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42 #: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141 #: 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/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93 #: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49 #: templates/currencies/fragments/list.html:49
@@ -2064,7 +2024,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:54 #: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43 #: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142 #: 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/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82 #: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50 #: templates/dca/fragments/strategy/list.html:50
@@ -2145,15 +2105,7 @@ msgstr ""
msgid "Is Asset" msgid "Is Asset"
msgstr "" msgstr ""
#: templates/accounts/fragments/list.html:78 #: templates/accounts/fragments/list.html:87
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
msgid "No accounts" msgid "No accounts"
msgstr "" msgstr ""
@@ -2211,7 +2163,7 @@ msgid "Muted"
msgstr "" msgstr ""
#: templates/categories/fragments/table.html:75 #: 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" msgid "No categories"
msgstr "" msgstr ""
@@ -2235,40 +2187,23 @@ msgid "Select"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:154 #: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:164 #: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries" msgid "Show on summaries"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:155 #: templates/cotton/transaction/item.html:155
msgid "Controlled by account"
msgstr ""
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category" msgid "Controlled by category"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:172 #: templates/cotton/transaction/item.html:162
msgid "Hide from summaries" msgid "Hide from summaries"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:174 #: templates/cotton/transaction/item.html:164
msgid "Add as quick transaction" msgid "Add as quick transaction"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:176 #: templates/cotton/transaction/item.html:166
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/ui/transactions_action_bar.html:82 #: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -2709,7 +2644,7 @@ msgid "Net Worth"
msgstr "" msgstr ""
#: templates/includes/navbar.html:45 #: 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 #: templates/net_worth/net_worth.html:22
msgid "Current" msgid "Current"
msgstr "" msgstr ""
@@ -2843,28 +2778,26 @@ msgstr ""
msgid "Bars" msgid "Bars"
msgstr "" msgstr ""
#: templates/insights/fragments/category_overview/index.html:39 #: templates/insights/fragments/category_overview/index.html:38
msgid "" msgid ""
"Transaction amounts associated with multiple tags will be counted once for " "Transaction amounts associated with multiple tags will be counted once for "
"each tag" "each tag"
msgstr "" msgstr ""
#: templates/insights/fragments/category_overview/index.html:52 #: templates/insights/fragments/category_overview/index.html:54
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:69
msgid "Final total" msgid "Final total"
msgstr "" 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 #: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total" msgid "Total"
msgstr "" 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" msgid "Final Total"
msgstr "" msgstr ""
+106 -182
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-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" "PO-Revision-Date: 2025-07-21 18:17+0000\n"
"Last-Translator: afermar <adrian.fm@protonmail.com>\n" "Last-Translator: afermar <adrian.fm@protonmail.com>\n"
"Language-Team: Spanish <https://translations.herculino.com/projects/wygiwyh/" "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/accounts/forms.py:40 apps/accounts/forms.py:98
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91 #: 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/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/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421 #: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836 #: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903 #: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:217 #: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:379 #: apps/users/forms.py:377
msgid "Update" msgid "Update"
msgstr "Actualizar" msgstr "Actualizar"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106 #: apps/accounts/forms.py:48 apps/accounts/forms.py:106
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61 #: 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/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/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:189 apps/transactions/forms.py:213
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801 #: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876 #: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065 #: 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/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr "Nuevo balance"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935 #: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501 #: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951 #: 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:63
#: templates/insights/fragments/category_overview/index.html:528 #: templates/insights/fragments/category_overview/index.html:419
msgid "Category" msgid "Category"
msgstr "Categoría" msgstr "Categoría"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109 #: 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/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/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:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479 #: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928 #: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503 #: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957 #: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168 #: 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 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "Etiquetas" msgstr "Etiquetas"
@@ -169,7 +169,7 @@ msgstr "Archivado"
msgid "Archived accounts don't show up nor count towards your net worth" 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" 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/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276 #: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920 #: 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" msgid "Account"
msgstr "Cuenta" 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 #: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5 #: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117 #: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
@@ -195,7 +195,7 @@ msgstr "Cuenta"
msgid "Accounts" msgid "Accounts"
msgstr "Cuentas" 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." msgid "Exchange currency cannot be the same as the account's main currency."
msgstr "" msgstr ""
"La moneda de cambio no puede ser la misma que la moneda principal de la " "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" msgstr "Grupo de Cuenta eliminado exitosamente"
#: apps/accounts/views/account_groups.py:135 #: 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/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154 #: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully" msgid "Ownership taken successfully"
@@ -258,14 +258,6 @@ msgstr "Cuenta actualizada exitosamente"
msgid "Account deleted successfully" msgid "Account deleted successfully"
msgstr "Cuenta borrada exitosamente" 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 #: apps/accounts/views/balance.py:77
msgid "Balance reconciliation" msgid "Balance reconciliation"
msgstr "Conciliación de saldos" 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." msgid "Invalid entity data. Provide an ID or name."
msgstr "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 #, fuzzy
msgid "Either 'date' or 'reference_date' must be provided." msgid "Either 'date' or 'reference_date' must be provided."
msgstr "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" msgstr "Compartido con los usuarios"
#: apps/common/fields/forms/dynamic_select.py:71 #: 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 #, fuzzy
msgid "Error creating new instance" msgid "Error creating new instance"
msgstr "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 " "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." "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" msgid "Save"
msgstr "Guardar" msgstr "Guardar"
@@ -467,14 +459,13 @@ msgstr "Error"
msgid "Info" msgid "Info"
msgstr "Información" msgstr "Información"
#: apps/common/views.py:118 #: apps/common/views.py:111
#, fuzzy #, fuzzy
msgid "Cache cleared successfully" msgid "Cache cleared successfully"
msgstr "Cache cleared successfully" msgstr "Cache cleared successfully"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208 #: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266 #: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today" msgid "Today"
msgstr "Hoy" msgstr "Hoy"
@@ -551,7 +542,7 @@ msgstr "De Moneda"
msgid "To Currency" msgid "To Currency"
msgstr "A Moneda" 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" msgid "Exchange Rate"
msgstr "Tipo de cambio" msgstr "Tipo de cambio"
@@ -559,44 +550,38 @@ msgstr "Tipo de cambio"
msgid "Date and Time" msgid "Date and Time"
msgstr "Fecha y Hora" msgstr "Fecha y Hora"
#: apps/currencies/models.py:73 apps/users/models.py:12 #: apps/currencies/models.py:75 apps/export_app/forms.py:68
#: apps/users/models.py:497
#, fuzzy
msgid "Auto"
msgstr "Auto"
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6 #: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202 #: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "Tipos de cambio" msgstr "Tipos de cambio"
#: apps/currencies/models.py:89 #: apps/currencies/models.py:87
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Las monedas de origen y destino no pueden ser la misma." msgstr "Las monedas de origen y destino no pueden ser la misma."
#: apps/currencies/models.py:105 #: apps/currencies/models.py:102
msgid "On" msgid "On"
msgstr "Encendido" msgstr "Encendido"
#: apps/currencies/models.py:106 #: apps/currencies/models.py:103
msgid "Every X hours" msgid "Every X hours"
msgstr "Cada X horas" msgstr "Cada X horas"
#: apps/currencies/models.py:107 #: apps/currencies/models.py:104
msgid "Not on" msgid "Not on"
msgstr "No Encendido" msgstr "No Encendido"
#: apps/currencies/models.py:109 #: apps/currencies/models.py:106
msgid "Service Name" msgid "Service Name"
msgstr "Nombre del Servicio" msgstr "Nombre del Servicio"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:108
msgid "Service Type" msgid "Service Type"
msgstr "Tipo de Servicio" 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 #: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21 #: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21 #: templates/entities/fragments/list.html:21
@@ -605,37 +590,37 @@ msgstr "Tipo de Servicio"
msgid "Active" msgid "Active"
msgstr "Activo" msgstr "Activo"
#: apps/currencies/models.py:118 #: apps/currencies/models.py:115
#, fuzzy #, fuzzy
msgid "API Key" msgid "API Key"
msgstr "API Key" msgstr "API Key"
#: apps/currencies/models.py:119 #: apps/currencies/models.py:116
#, fuzzy #, fuzzy
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "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 #, fuzzy
msgid "Interval Type" msgid "Interval Type"
msgstr "Interval Type" msgstr "Interval Type"
#: apps/currencies/models.py:128 #: apps/currencies/models.py:125
#, fuzzy #, fuzzy
msgid "Interval" msgid "Interval"
msgstr "Interval" msgstr "Interval"
#: apps/currencies/models.py:131 #: apps/currencies/models.py:128
#, fuzzy #, fuzzy
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Last Successful Fetch" msgstr "Last Successful Fetch"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:133
#, fuzzy #, fuzzy
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Target Currencies" msgstr "Target Currencies"
#: apps/currencies/models.py:138 #: apps/currencies/models.py:135
#, fuzzy #, fuzzy
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "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 " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
#: apps/currencies/models.py:146 #: apps/currencies/models.py:143
#, fuzzy #, fuzzy
msgid "Target Accounts" msgid "Target Accounts"
msgstr "Target Accounts" msgstr "Target Accounts"
#: apps/currencies/models.py:148 #: apps/currencies/models.py:145
#, fuzzy #, fuzzy
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "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 " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
#: apps/currencies/models.py:155 #: apps/currencies/models.py:152
#, 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
#, fuzzy #, fuzzy
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Exchange Rate Service" msgstr "Exchange Rate Service"
#: apps/currencies/models.py:164 #: apps/currencies/models.py:153
#, fuzzy #, fuzzy
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Exchange Rate Services" msgstr "Exchange Rate Services"
#: apps/currencies/models.py:216 #: apps/currencies/models.py:205
#, fuzzy #, fuzzy
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "'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 #, fuzzy
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "'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 #, fuzzy
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "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., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
#: apps/currencies/models.py:250 #: apps/currencies/models.py:239
#, fuzzy #, fuzzy
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
@@ -909,7 +885,7 @@ msgid "Transactions"
msgstr "Transactions" msgstr "Transactions"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134 #: 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/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162 #: templates/includes/sidebar.html:162
#, fuzzy #, fuzzy
@@ -918,7 +894,7 @@ msgstr "Categories"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136 #: 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/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:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943 #: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329 #: 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 #: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174 #: templates/includes/sidebar.html:174
#: templates/insights/fragments/category_overview/index.html:49
#, fuzzy #, fuzzy
msgid "Entities" msgid "Entities"
msgstr "Entities" msgstr "Entities"
@@ -1007,7 +982,7 @@ msgstr "Edit transaction action"
msgid "Update or create transaction actions" msgid "Update or create transaction actions"
msgstr "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/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5 #: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24 #: templates/export_app/pages/index.html:24
@@ -1128,10 +1103,10 @@ msgid "Run deleted successfully"
msgstr "Run deleted successfully" msgstr "Run deleted successfully"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36 #: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189 #: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:88 #: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:393 #: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:422 #: templates/insights/fragments/category_overview/index.html:313
#, fuzzy #, fuzzy
msgid "Uncategorized" msgid "Uncategorized"
msgstr "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 #: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47 #: 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/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8 #: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12 #: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1460,55 +1435,31 @@ msgstr "Content"
msgid "Transaction Type" msgid "Transaction Type"
msgstr "Transaction Type" msgstr "Transaction Type"
#: apps/transactions/filters.py:85 #: apps/transactions/filters.py:91
#, fuzzy #, fuzzy
msgid "Date from" msgid "Date from"
msgstr "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 #, fuzzy
msgid "Until" msgid "Until"
msgstr "Until" msgstr "Until"
#: apps/transactions/filters.py:95 #: apps/transactions/filters.py:101
#, fuzzy #, fuzzy
msgid "Reference date from" msgid "Reference date from"
msgstr "Reference date from" msgstr "Reference date from"
#: apps/transactions/filters.py:105 #: apps/transactions/filters.py:111
#, fuzzy #, fuzzy
msgid "Amount min" msgid "Amount min"
msgstr "Amount min" msgstr "Amount min"
#: apps/transactions/filters.py:110 #: apps/transactions/filters.py:116
#, fuzzy #, fuzzy
msgid "Amount max" msgid "Amount max"
msgstr "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 #: apps/transactions/forms.py:173
#, fuzzy #, fuzzy
msgid "More" msgid "More"
@@ -1633,7 +1584,7 @@ msgstr "Entity"
#: templates/calendar_view/fragments/list.html:54 #: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10 #: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.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 #: templates/monthly_overview/fragments/monthly_summary.html:39
#, fuzzy #, fuzzy
msgid "Income" msgid "Income"
@@ -1646,7 +1597,7 @@ msgstr "Income"
#: templates/calendar_view/fragments/list.html:58 #: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18 #: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19 #: templates/cotton/ui/transactions_fab.html:19
#: templates/insights/fragments/category_overview/index.html:80 #: templates/insights/fragments/category_overview/index.html:65
#, fuzzy #, fuzzy
msgid "Expense" msgid "Expense"
msgstr "Expense" msgstr "Expense"
@@ -1937,8 +1888,8 @@ msgid "Item deleted successfully"
msgstr "Rule deleted successfully" msgstr "Rule deleted successfully"
#: apps/transactions/views/quick_transactions.py:155 #: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:53 #: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:149 #: apps/transactions/views/transactions.py:148
#, fuzzy #, fuzzy
msgid "Transaction added successfully" msgid "Transaction added successfully"
msgstr "Transaction added successfully" msgstr "Transaction added successfully"
@@ -1988,34 +1939,34 @@ msgstr "Tag updated successfully"
msgid "Tag deleted successfully" msgid "Tag deleted successfully"
msgstr "Tag deleted successfully" msgstr "Tag deleted successfully"
#: apps/transactions/views/transactions.py:183 #: apps/transactions/views/transactions.py:182
#, fuzzy #, fuzzy
msgid "Transaction updated successfully" msgid "Transaction updated successfully"
msgstr "Transaction updated successfully" msgstr "Transaction updated successfully"
#: apps/transactions/views/transactions.py:233 #: apps/transactions/views/transactions.py:232
#, fuzzy, python-format #, fuzzy, python-format
msgid "%(count)s transaction updated successfully" msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully" msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "%(count)s transaction updated successfully" msgstr[0] "%(count)s transaction updated successfully"
msgstr[1] "%(count)s transactions updated successfully" msgstr[1] "%(count)s transactions updated successfully"
#: apps/transactions/views/transactions.py:269 #: apps/transactions/views/transactions.py:268
#, fuzzy #, fuzzy
msgid "Transaction duplicated successfully" msgid "Transaction duplicated successfully"
msgstr "Transaction duplicated successfully" msgstr "Transaction duplicated successfully"
#: apps/transactions/views/transactions.py:311 #: apps/transactions/views/transactions.py:310
#, fuzzy #, fuzzy
msgid "Transaction deleted successfully" msgid "Transaction deleted successfully"
msgstr "Transaction deleted successfully" msgstr "Transaction deleted successfully"
#: apps/transactions/views/transactions.py:329 #: apps/transactions/views/transactions.py:328
#, fuzzy #, fuzzy
msgid "Transaction restored successfully" msgid "Transaction restored successfully"
msgstr "Transaction restored successfully" msgstr "Transaction restored successfully"
#: apps/transactions/views/transactions.py:355 #: apps/transactions/views/transactions.py:354
#, fuzzy #, fuzzy
msgid "Transfer added successfully" msgid "Transfer added successfully"
msgstr "Transfer added successfully" msgstr "Transfer added successfully"
@@ -2073,22 +2024,22 @@ msgstr "This account is deactivated"
msgid "Default" msgid "Default"
msgstr "Default" msgstr "Default"
#: apps/users/forms.py:97 apps/users/models.py:484 #: apps/users/forms.py:95 apps/users/models.py:484
#, fuzzy #, fuzzy
msgid "Date Format" msgid "Date Format"
msgstr "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 #, fuzzy
msgid "Datetime Format" msgid "Datetime Format"
msgstr "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 #, fuzzy
msgid "Number Format" msgid "Number Format"
msgstr "Number Format" msgstr "Number Format"
#: apps/users/forms.py:148 #: apps/users/forms.py:146
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -2099,20 +2050,20 @@ msgstr ""
"y las fechas\n" "y las fechas\n"
"Ayude a traducir WYGIWYH a su idioma en %(translation_link)s" "Ayude a traducir WYGIWYH a su idioma en %(translation_link)s"
#: apps/users/forms.py:157 #: apps/users/forms.py:155
#, fuzzy #, fuzzy
msgid "New Password" msgid "New Password"
msgstr "Password" msgstr "Password"
#: apps/users/forms.py:160 #: apps/users/forms.py:158
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Deje en blanco para mantener la contraseña actual." msgstr "Deje en blanco para mantener la contraseña actual."
#: apps/users/forms.py:163 #: apps/users/forms.py:161
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Confirmar nueva contraseña" 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
@@ -2120,7 +2071,7 @@ msgstr ""
"Establece si este usuario debe ser tratado como activo. Desmarque esta " "Establece si este usuario debe ser tratado como activo. Desmarque esta "
"opción en lugar de borrar cuentas." "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 "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -2128,39 +2079,44 @@ msgstr ""
"Establece que este usuario tiene todos los permisos sin asignárselos " "Establece que este usuario tiene todos los permisos sin asignárselos "
"expresamente." "expresamente."
#: apps/users/forms.py:249 #: apps/users/forms.py:247
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "Esta dirección de correo es usada por otra cuenta." 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." msgid "The two password fields didn't match."
msgstr "Los dos campos de contraseñas no coinciden." 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." msgid "Please confirm your new password."
msgstr "Por favor, confirme su nueva contraseña." 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." msgid "Please enter the new password first."
msgstr "Por favor, introduzca su nueva contraseña." 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." msgid "You cannot deactivate your own account using this form."
msgstr "No puede desactivar su propia cuenta usando este formulario." 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." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:300 #: apps/users/forms.py:298
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:397 #: apps/users/forms.py:395
#, fuzzy #, fuzzy
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "A value for this field already exists in the rule." 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 #: apps/users/models.py:465 templates/includes/navbar.html:29
#, fuzzy #, fuzzy
msgid "Yearly by currency" msgid "Yearly by currency"
@@ -2295,7 +2251,7 @@ msgstr "Edit"
#: templates/accounts/fragments/list.html:48 #: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36 #: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136 #: 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/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90 #: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44 #: templates/currencies/fragments/list.html:44
@@ -2323,7 +2279,7 @@ msgstr "Delete"
#: templates/accounts/fragments/list.html:52 #: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41 #: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140 #: 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/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92 #: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48 #: templates/currencies/fragments/list.html:48
@@ -2354,7 +2310,7 @@ msgstr "Are you sure?"
#: templates/accounts/fragments/list.html:53 #: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42 #: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141 #: 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/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93 #: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49 #: 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/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43 #: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142 #: 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/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82 #: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50 #: templates/dca/fragments/strategy/list.html:50
@@ -2470,15 +2426,7 @@ msgstr "Edit account"
msgid "Is Asset" msgid "Is Asset"
msgstr "Is Asset" msgstr "Is Asset"
#: templates/accounts/fragments/list.html:78 #: templates/accounts/fragments/list.html:87
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
#, fuzzy #, fuzzy
msgid "No accounts" msgid "No accounts"
msgstr "No accounts" msgstr "No accounts"
@@ -2550,7 +2498,7 @@ msgid "Muted"
msgstr "Muted" msgstr "Muted"
#: templates/categories/fragments/table.html:75 #: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:538 #: templates/insights/fragments/category_overview/index.html:429
#, fuzzy #, fuzzy
msgid "No categories" msgid "No categories"
msgstr "No categories" msgstr "No categories"
@@ -2579,44 +2527,26 @@ msgid "Select"
msgstr "Select" msgstr "Select"
#: templates/cotton/transaction/item.html:154 #: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:164 #: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries" msgid "Show on summaries"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:155 #: templates/cotton/transaction/item.html:155
#, fuzzy #, fuzzy
msgid "Controlled by account"
msgstr "No category"
#: templates/cotton/transaction/item.html:165
#, fuzzy
msgid "Controlled by category" msgid "Controlled by category"
msgstr "No category" msgstr "No category"
#: templates/cotton/transaction/item.html:172 #: templates/cotton/transaction/item.html:162
msgid "Hide from summaries" msgid "Hide from summaries"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:174 #: templates/cotton/transaction/item.html:164
#, fuzzy #, fuzzy
#| msgid "Add quick transaction" #| msgid "Add quick transaction"
msgid "Add as quick transaction" msgid "Add as quick transaction"
msgstr "Agregar transacción rápida" msgstr "Agregar transacción rápida"
#: templates/cotton/transaction/item.html:176 #: templates/cotton/transaction/item.html:166
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/ui/transactions_action_bar.html:82 #: templates/cotton/ui/transactions_action_bar.html:82
#, fuzzy #, fuzzy
msgid "Duplicate" msgid "Duplicate"
@@ -3153,7 +3083,7 @@ msgid "Net Worth"
msgstr "Net Worth" msgstr "Net Worth"
#: templates/includes/navbar.html:45 #: 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 #: templates/net_worth/net_worth.html:22
#, fuzzy #, fuzzy
msgid "Current" msgid "Current"
@@ -3313,30 +3243,28 @@ msgstr ""
msgid "Bars" msgid "Bars"
msgstr "" msgstr ""
#: templates/insights/fragments/category_overview/index.html:39 #: templates/insights/fragments/category_overview/index.html:38
msgid "" msgid ""
"Transaction amounts associated with multiple tags will be counted once for " "Transaction amounts associated with multiple tags will be counted once for "
"each tag" "each tag"
msgstr "" msgstr ""
#: templates/insights/fragments/category_overview/index.html:52 #: templates/insights/fragments/category_overview/index.html:54
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:69
#, fuzzy #, fuzzy
msgid "Final total" msgid "Final total"
msgstr "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 #: templates/monthly_overview/fragments/monthly_summary.html:167
#, fuzzy #, fuzzy
msgid "Total" msgid "Total"
msgstr "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 #, fuzzy
msgid "Final Total" msgid "Final Total"
msgstr "final total" msgstr "final total"
@@ -3929,10 +3857,6 @@ msgstr "ends with"
msgid "Yearly Overview" msgid "Yearly Overview"
msgstr "Yearly Overview" msgstr "Yearly Overview"
#, fuzzy
#~ msgid "Automatic"
#~ msgstr "Automation"
#, fuzzy #, fuzzy
#~ msgid "Profile" #~ msgid "Profile"
#~ msgstr "Import Profiles" #~ msgstr "Import Profiles"
File diff suppressed because it is too large Load Diff
+110 -188
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-17 06:55+0000\n" "POT-Creation-Date: 2025-08-06 16:21+0000\n"
"PO-Revision-Date: 2025-08-16 11:17+0000\n" "PO-Revision-Date: 2025-07-28 17:17+0000\n"
"Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n" "Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n"
"Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/" "Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/"
"app/nl/>\n" "app/nl/>\n"
@@ -25,27 +25,27 @@ msgstr "Groepsnaam"
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98 #: apps/accounts/forms.py:40 apps/accounts/forms.py:98
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91 #: 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/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/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421 #: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836 #: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903 #: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:217 #: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:379 #: apps/users/forms.py:377
msgid "Update" msgid "Update"
msgstr "Bijwerken" msgstr "Bijwerken"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106 #: apps/accounts/forms.py:48 apps/accounts/forms.py:106
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61 #: 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/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/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:189 apps/transactions/forms.py:213
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801 #: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876 #: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065 #: 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/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr "Nieuw saldo"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935 #: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501 #: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951 #: 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:63
#: templates/insights/fragments/category_overview/index.html:528 #: templates/insights/fragments/category_overview/index.html:419
msgid "Category" msgid "Category"
msgstr "Categorie" msgstr "Categorie"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109 #: 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/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/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:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479 #: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928 #: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503 #: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957 #: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168 #: 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 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "Labels" msgstr "Labels"
@@ -172,7 +172,7 @@ msgstr ""
"Gearchiveerde rekeningen worden niet weergegeven en tellen niet mee voor je " "Gearchiveerde rekeningen worden niet weergegeven en tellen niet mee voor je "
"\"Netto Waarde\"" "\"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/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276 #: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920 #: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -186,7 +186,7 @@ msgstr ""
msgid "Account" msgid "Account"
msgstr "Rekening" 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 #: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5 #: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117 #: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
@@ -198,7 +198,7 @@ msgstr "Rekening"
msgid "Accounts" msgid "Accounts"
msgstr "Rekeningen" 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." msgid "Exchange currency cannot be the same as the account's main currency."
msgstr "" msgstr ""
"Eenheid wisselgeld kan niet dezelfde zijn als de munteenheid van de rekening." "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" msgstr "Rekeninggroep succesvol verwijderd"
#: apps/accounts/views/account_groups.py:135 #: 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/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154 #: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully" msgid "Ownership taken successfully"
@@ -260,14 +260,6 @@ msgstr "Rekening succesvol bijgewerkt"
msgid "Account deleted successfully" msgid "Account deleted successfully"
msgstr "Rekening succesvol verwijderd" 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 #: apps/accounts/views/balance.py:77
msgid "Balance reconciliation" msgid "Balance reconciliation"
msgstr "Saldi afstemming" msgstr "Saldi afstemming"
@@ -300,7 +292,7 @@ msgstr "Bedrijf met dit ID bestaat niet."
msgid "Invalid entity data. Provide an ID or name." msgid "Invalid entity data. Provide an ID or name."
msgstr "Ongeldige bedrijfsgegevens. Geef een ID of naam op." 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." msgid "Either 'date' or 'reference_date' must be provided."
msgstr "'datum' of 'referentiedatum' moet worden opgegeven." msgstr "'datum' of 'referentiedatum' moet worden opgegeven."
@@ -317,7 +309,7 @@ msgid "Shared with users"
msgstr "Gedeeld met gebruikers" msgstr "Gedeeld met gebruikers"
#: apps/common/fields/forms/dynamic_select.py:71 #: 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" msgid "Error creating new instance"
msgstr "Fout bij het aanmaken van een nieuwe instantie" msgstr "Fout bij het aanmaken van een nieuwe instantie"
@@ -363,7 +355,7 @@ msgstr ""
"bewerkbaar door de eigenaar.<br/>Publiek: Weergegeven voor alle gebruikers. " "bewerkbaar door de eigenaar.<br/>Publiek: Weergegeven voor alle gebruikers. "
"Alleen bewerkbaar door de eigenaar." "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" msgid "Save"
msgstr "Opslaan" msgstr "Opslaan"
@@ -458,13 +450,12 @@ msgstr "Fout"
msgid "Info" msgid "Info"
msgstr "Info" msgstr "Info"
#: apps/common/views.py:118 #: apps/common/views.py:111
msgid "Cache cleared successfully" msgid "Cache cleared successfully"
msgstr "Cache succesvol gewist" msgstr "Cache succesvol gewist"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208 #: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266 #: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today" msgid "Today"
msgstr "Vandaag" msgstr "Vandaag"
@@ -541,7 +532,7 @@ msgstr "Van Munteenheid"
msgid "To Currency" msgid "To Currency"
msgstr "Naar Munteenheid" 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" msgid "Exchange Rate"
msgstr "Wisselkoers" msgstr "Wisselkoers"
@@ -549,43 +540,38 @@ msgstr "Wisselkoers"
msgid "Date and Time" msgid "Date and Time"
msgstr "Datum en Tijd" msgstr "Datum en Tijd"
#: apps/currencies/models.py:73 apps/users/models.py:12 #: apps/currencies/models.py:75 apps/export_app/forms.py:68
#: apps/users/models.py:497
msgid "Auto"
msgstr "Automatisch"
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6 #: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202 #: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "Wisselkoersen" msgstr "Wisselkoersen"
#: apps/currencies/models.py:89 #: apps/currencies/models.py:87
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn." msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn."
#: apps/currencies/models.py:105 #: apps/currencies/models.py:102
msgid "On" msgid "On"
msgstr "Op" msgstr "Op"
#: apps/currencies/models.py:106 #: apps/currencies/models.py:103
msgid "Every X hours" msgid "Every X hours"
msgstr "Elke X Uren" msgstr "Elke X Uren"
#: apps/currencies/models.py:107 #: apps/currencies/models.py:104
msgid "Not on" msgid "Not on"
msgstr "Niet op" msgstr "Niet op"
#: apps/currencies/models.py:109 #: apps/currencies/models.py:106
msgid "Service Name" msgid "Service Name"
msgstr "Dienstnaam" msgstr "Dienstnaam"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:108
msgid "Service Type" msgid "Service Type"
msgstr "Soort Dienst" 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 #: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21 #: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21 #: templates/entities/fragments/list.html:21
@@ -594,31 +580,31 @@ msgstr "Soort Dienst"
msgid "Active" msgid "Active"
msgstr "Actief" msgstr "Actief"
#: apps/currencies/models.py:118 #: apps/currencies/models.py:115
msgid "API Key" msgid "API Key"
msgstr "API Sleutel" msgstr "API Sleutel"
#: apps/currencies/models.py:119 #: apps/currencies/models.py:116
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "API sleutel voor de dienst (indien verplicht)" msgstr "API sleutel voor de dienst (indien verplicht)"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:121
msgid "Interval Type" msgid "Interval Type"
msgstr "Soort Interval" msgstr "Soort Interval"
#: apps/currencies/models.py:128 #: apps/currencies/models.py:125
msgid "Interval" msgid "Interval"
msgstr "Interval" msgstr "Interval"
#: apps/currencies/models.py:131 #: apps/currencies/models.py:128
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Laatste Succesvolle Ophaling" msgstr "Laatste Succesvolle Ophaling"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:133
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Doel Munteenheden" msgstr "Doel Munteenheden"
#: apps/currencies/models.py:138 #: apps/currencies/models.py:135
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
@@ -626,11 +612,11 @@ msgstr ""
"Selecteer munteenheden om wisselkoersen voor op te halen. De koersen worden " "Selecteer munteenheden om wisselkoersen voor op te halen. De koersen worden "
"voor elke munteenheid opgehaald ten opzichte van de ingestelde wisselkoers." "voor elke munteenheid opgehaald ten opzichte van de ingestelde wisselkoers."
#: apps/currencies/models.py:146 #: apps/currencies/models.py:143
msgid "Target Accounts" msgid "Target Accounts"
msgstr "Naar rekeningen" msgstr "Naar rekeningen"
#: apps/currencies/models.py:148 #: apps/currencies/models.py:145
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
@@ -639,33 +625,23 @@ msgstr ""
"opgehaald voor de munteenheid van elke rekening ten opzichte van de " "opgehaald voor de munteenheid van elke rekening ten opzichte van de "
"ingestelde wisselkoers." "ingestelde wisselkoers."
#: apps/currencies/models.py:155 #: apps/currencies/models.py:152
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
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Wisselkoersdienst" msgstr "Wisselkoersdienst"
#: apps/currencies/models.py:164 #: apps/currencies/models.py:153
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Wisselkoersdiensten" msgstr "Wisselkoersdiensten"
#: apps/currencies/models.py:216 #: apps/currencies/models.py:205
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "Voor het intervaltype Elke X uur is een positief geheel getal nodig." 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." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Het interval Elke X uur moet tussen 1 en 24 liggen." msgstr "Het interval Elke X uur moet tussen 1 en 24 liggen."
#: apps/currencies/models.py:239 #: apps/currencies/models.py:228
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -673,7 +649,7 @@ msgstr ""
"Ongeldige urennotatie. Gebruik door komma's gescheiden uren (0-23) en/of " "Ongeldige urennotatie. Gebruik door komma's gescheiden uren (0-23) en/of "
"reeksen (bijv. 1-5,8,10-12)." "reeksen (bijv. 1-5,8,10-12)."
#: apps/currencies/models.py:250 #: apps/currencies/models.py:239
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -849,7 +825,7 @@ msgid "Transactions"
msgstr "Verrichtingen" msgstr "Verrichtingen"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134 #: 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/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162 #: templates/includes/sidebar.html:162
msgid "Categories" msgid "Categories"
@@ -857,7 +833,7 @@ msgstr "Categorieën"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136 #: 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/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:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943 #: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329 #: 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 #: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174 #: templates/includes/sidebar.html:174
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities" msgid "Entities"
msgstr "Bedrijven" msgstr "Bedrijven"
@@ -933,7 +908,7 @@ msgstr "Bewerk verrichtingsactie"
msgid "Update or create transaction actions" msgid "Update or create transaction actions"
msgstr "Bewerk of maak verrichtingsregel acties" 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/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5 #: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24 #: templates/export_app/pages/index.html:24
@@ -1034,10 +1009,10 @@ msgid "Run deleted successfully"
msgstr "Run met succes verwijderd" msgstr "Run met succes verwijderd"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36 #: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189 #: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:88 #: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:393 #: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:422 #: templates/insights/fragments/category_overview/index.html:313
msgid "Uncategorized" msgid "Uncategorized"
msgstr "Ongecategoriseerd" msgstr "Ongecategoriseerd"
@@ -1297,7 +1272,7 @@ msgstr "Verrichting Bijwerken Of Maken succesvol verwijderd"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20 #: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47 #: 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/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8 #: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12 #: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1312,47 +1287,26 @@ msgstr "Inhoud"
msgid "Transaction Type" msgid "Transaction Type"
msgstr "Soort transactie" msgstr "Soort transactie"
#: apps/transactions/filters.py:85 #: apps/transactions/filters.py:91
msgid "Date from" msgid "Date from"
msgstr "Datum vanaf" 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" msgid "Until"
msgstr "Tot" msgstr "Tot"
#: apps/transactions/filters.py:95 #: apps/transactions/filters.py:101
msgid "Reference date from" msgid "Reference date from"
msgstr "Referentiedatum vanaf" msgstr "Referentiedatum vanaf"
#: apps/transactions/filters.py:105 #: apps/transactions/filters.py:111
msgid "Amount min" msgid "Amount min"
msgstr "Minimum bedrag" msgstr "Minimum bedrag"
#: apps/transactions/filters.py:110 #: apps/transactions/filters.py:116
msgid "Amount max" msgid "Amount max"
msgstr "Maximaal bedrag" 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 #: apps/transactions/forms.py:173
msgid "More" msgid "More"
msgstr "Meer" 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" msgstr "Gedempte categorieën worden niet weergegeven in maandoverzichten"
#: apps/transactions/forms.py:1046 #: apps/transactions/forms.py:1046
#, fuzzy
#| msgid "Filter transactions"
msgid "future transactions" msgid "future transactions"
msgstr "toekomstige verrichtingen" msgstr "Filter verrichtingen"
#: apps/transactions/forms.py:1076 #: apps/transactions/forms.py:1076
msgid "End date should be after the start date" msgid "End date should be after the start date"
@@ -1458,7 +1414,7 @@ msgstr "Bedrijf"
#: templates/calendar_view/fragments/list.html:54 #: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10 #: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.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 #: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income" msgid "Income"
msgstr "Ontvangsten Transactie" msgstr "Ontvangsten Transactie"
@@ -1470,7 +1426,7 @@ msgstr "Ontvangsten Transactie"
#: templates/calendar_view/fragments/list.html:58 #: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18 #: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19 #: 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" msgid "Expense"
msgstr "Uitgave" msgstr "Uitgave"
@@ -1590,7 +1546,7 @@ msgstr "Terugkeer Interval"
#: apps/transactions/models.py:726 #: apps/transactions/models.py:726
msgid "Keep at most" msgid "Keep at most"
msgstr "Bewaar maximaal" msgstr ""
#: apps/transactions/models.py:730 #: apps/transactions/models.py:730
msgid "Last Generated Date" msgid "Last Generated Date"
@@ -1715,8 +1671,8 @@ msgid "Item deleted successfully"
msgstr "Item succesvol verwijderd" msgstr "Item succesvol verwijderd"
#: apps/transactions/views/quick_transactions.py:155 #: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:53 #: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:149 #: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully" msgid "Transaction added successfully"
msgstr "Verrichting succesvol toegevoegd" msgstr "Verrichting succesvol toegevoegd"
@@ -1756,30 +1712,30 @@ msgstr "Label succesvol bijgewerkt"
msgid "Tag deleted successfully" msgid "Tag deleted successfully"
msgstr "Label succesvol verwijderd" msgstr "Label succesvol verwijderd"
#: apps/transactions/views/transactions.py:183 #: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully" msgid "Transaction updated successfully"
msgstr "Verrichting succesvol bijgewerkt" msgstr "Verrichting succesvol bijgewerkt"
#: apps/transactions/views/transactions.py:233 #: apps/transactions/views/transactions.py:232
#, python-format #, python-format
msgid "%(count)s transaction updated successfully" msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully" msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "%(count)s verrichting succesvol bijgewerkt" msgstr[0] "%(count)s verrichting succesvol bijgewerkt"
msgstr[1] "%(count)s verrichtingen 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" msgid "Transaction duplicated successfully"
msgstr "Verrichting succesvol gedupliceerd" msgstr "Verrichting succesvol gedupliceerd"
#: apps/transactions/views/transactions.py:311 #: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully" msgid "Transaction deleted successfully"
msgstr "Verrichting succesvol verwijderd" msgstr "Verrichting succesvol verwijderd"
#: apps/transactions/views/transactions.py:329 #: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully" msgid "Transaction restored successfully"
msgstr "Verrichting succesvol hersteld" msgstr "Verrichting succesvol hersteld"
#: apps/transactions/views/transactions.py:355 #: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully" msgid "Transfer added successfully"
msgstr "Transactie succesvol toegevoegd" msgstr "Transactie succesvol toegevoegd"
@@ -1826,19 +1782,19 @@ msgstr "Deze gebruiker is gedeactiveerd"
msgid "Default" msgid "Default"
msgstr "Standaard" 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" msgid "Date Format"
msgstr "Datumnotatie" 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" msgid "Datetime Format"
msgstr "Tijdsnotatie" 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" msgid "Number Format"
msgstr "Schrijfwijze Nummers" msgstr "Schrijfwijze Nummers"
#: apps/users/forms.py:148 #: apps/users/forms.py:146
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -1849,19 +1805,19 @@ msgstr ""
"weergegeven\n" "weergegeven\n"
"Overweeg om WYGIWYH te helpen vertalen naar jouw taal op %(translation_link)s" "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" msgid "New Password"
msgstr "Nieuw Wachtwoord" msgstr "Nieuw Wachtwoord"
#: apps/users/forms.py:160 #: apps/users/forms.py:158
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Laat leeg om het huidige wachtwoord te behouden." msgstr "Laat leeg om het huidige wachtwoord te behouden."
#: apps/users/forms.py:163 #: apps/users/forms.py:161
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Bevestig Nieuw Wachtwoord" 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
@@ -1869,7 +1825,7 @@ msgstr ""
"Geeft aan of deze gebruiker als actief moet worden behandeld. Deselecteer " "Geeft aan of deze gebruiker als actief moet worden behandeld. Deselecteer "
"dit in plaats van accounts te verwijderen." "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 "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -1877,38 +1833,42 @@ msgstr ""
"Geeft aan dat deze gebruiker alle rechten heeft zonder ze expliciet toe te " "Geeft aan dat deze gebruiker alle rechten heeft zonder ze expliciet toe te "
"kennen." "kennen."
#: apps/users/forms.py:249 #: apps/users/forms.py:247
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "Dit e-mailadres wordt al gebruikt door een ander 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." msgid "The two password fields didn't match."
msgstr "De twee wachtwoordvelden komen niet overeen." msgstr "De twee wachtwoordvelden komen niet overeen."
#: apps/users/forms.py:259 #: apps/users/forms.py:257
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "Bevestig je nieuwe wachtwoord." msgstr "Bevestig je nieuwe wachtwoord."
#: apps/users/forms.py:261 #: apps/users/forms.py:259
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "Geef eerst het nieuwe wachtwoord op." 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." msgid "You cannot deactivate your own account using this form."
msgstr "Je kunt je eigen account niet deactiveren met dit formulier." 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." msgid "Cannot remove status from the last superuser."
msgstr "Kan de status van de laatste Hoofdadmin niet verwijderen." 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." msgid "You cannot remove your own superuser status using this form."
msgstr "Je kunt je eigen hoofdadminrechten niet verwijderen met dit formulier." 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." msgid "A user with this email address already exists."
msgstr "Er bestaat al een gebruiker met dit e-mailadres." 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 #: apps/users/models.py:465 templates/includes/navbar.html:29
msgid "Yearly by currency" msgid "Yearly by currency"
msgstr "Jaarlijks per munteenheid" msgstr "Jaarlijks per munteenheid"
@@ -2025,7 +1985,7 @@ msgstr "Bewerken"
#: templates/accounts/fragments/list.html:48 #: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36 #: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136 #: 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/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90 #: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44 #: templates/currencies/fragments/list.html:44
@@ -2052,7 +2012,7 @@ msgstr "Verwijderen"
#: templates/accounts/fragments/list.html:52 #: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41 #: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140 #: 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/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92 #: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48 #: templates/currencies/fragments/list.html:48
@@ -2082,7 +2042,7 @@ msgstr "Weet je het zeker?"
#: templates/accounts/fragments/list.html:53 #: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42 #: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141 #: 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/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93 #: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49 #: templates/currencies/fragments/list.html:49
@@ -2104,7 +2064,7 @@ msgstr "Je kunt dit niet meer terugdraaien!"
#: templates/accounts/fragments/list.html:54 #: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43 #: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142 #: 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/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82 #: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50 #: templates/dca/fragments/strategy/list.html:50
@@ -2185,15 +2145,7 @@ msgstr "Rekening bewerken"
msgid "Is Asset" msgid "Is Asset"
msgstr "Is Vermogen" msgstr "Is Vermogen"
#: templates/accounts/fragments/list.html:78 #: templates/accounts/fragments/list.html:87
msgid "Track"
msgstr "Gevolgd"
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr "Niet gevolgd"
#: templates/accounts/fragments/list.html:98
msgid "No accounts" msgid "No accounts"
msgstr "Geen rekeningen" msgstr "Geen rekeningen"
@@ -2251,7 +2203,7 @@ msgid "Muted"
msgstr "Gedempt" msgstr "Gedempt"
#: templates/categories/fragments/table.html:75 #: 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" msgid "No categories"
msgstr "Geen categorieën" msgstr "Geen categorieën"
@@ -2275,40 +2227,23 @@ msgid "Select"
msgstr "Selecteer" msgstr "Selecteer"
#: templates/cotton/transaction/item.html:154 #: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:164 #: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries" msgid "Show on summaries"
msgstr "Toon op samenvattingen" msgstr "Toon op samenvattingen"
#: templates/cotton/transaction/item.html:155 #: templates/cotton/transaction/item.html:155
msgid "Controlled by account"
msgstr "Gecontroleerd door account"
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category" msgid "Controlled by category"
msgstr "Gecontroleerd door categorie" msgstr "Gecontroleerd door categorie"
#: templates/cotton/transaction/item.html:172 #: templates/cotton/transaction/item.html:162
msgid "Hide from summaries" msgid "Hide from summaries"
msgstr "Verbergen in samenvattingen" msgstr "Verbergen in samenvattingen"
#: templates/cotton/transaction/item.html:174 #: templates/cotton/transaction/item.html:164
msgid "Add as quick transaction" msgid "Add as quick transaction"
msgstr "Toevoegen als snelle transactie" msgstr "Toevoegen als snelle transactie"
#: templates/cotton/transaction/item.html:176 #: templates/cotton/transaction/item.html:166
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/ui/transactions_action_bar.html:82 #: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate" msgid "Duplicate"
msgstr "Dupliceren" msgstr "Dupliceren"
@@ -2750,7 +2685,7 @@ msgid "Net Worth"
msgstr "Netto Waarde" msgstr "Netto Waarde"
#: templates/includes/navbar.html:45 #: 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 #: templates/net_worth/net_worth.html:22
msgid "Current" msgid "Current"
msgstr "Huidige" msgstr "Huidige"
@@ -2888,7 +2823,7 @@ msgstr "Tabel"
msgid "Bars" msgid "Bars"
msgstr "Balken" msgstr "Balken"
#: templates/insights/fragments/category_overview/index.html:39 #: templates/insights/fragments/category_overview/index.html:38
msgid "" msgid ""
"Transaction amounts associated with multiple tags will be counted once for " "Transaction amounts associated with multiple tags will be counted once for "
"each tag" "each tag"
@@ -2896,28 +2831,20 @@ msgstr ""
"Transactiebedragen die gekoppeld zijn aan meerdere tags worden één keer " "Transactiebedragen die gekoppeld zijn aan meerdere tags worden één keer "
"geteld voor elke tag" "geteld voor elke tag"
#: templates/insights/fragments/category_overview/index.html:52 #: templates/insights/fragments/category_overview/index.html:54
#, 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
msgid "Final total" msgid "Final total"
msgstr "Eindtotaal" 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 #: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total" msgid "Total"
msgstr "Totaal" 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" msgid "Final Total"
msgstr "Eindtotaal" msgstr "Eindtotaal"
@@ -3437,11 +3364,6 @@ msgstr "Aanmelden met"
msgid "Yearly Overview" msgid "Yearly Overview"
msgstr "Jaaroverzicht" msgstr "Jaaroverzicht"
#, fuzzy
#~| msgid "Automation"
#~ msgid "Automatic"
#~ msgstr "Automatisatie"
#~ msgid "Profile" #~ msgid "Profile"
#~ msgstr "Profiel" #~ msgstr "Profiel"
+105 -187
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-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" "PO-Revision-Date: 2025-04-13 08:16+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n" "Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Portuguese <https://translations.herculino.com/projects/" "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/accounts/forms.py:40 apps/accounts/forms.py:98
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91 #: 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/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/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421 #: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836 #: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903 #: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:217 #: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:379 #: apps/users/forms.py:377
msgid "Update" msgid "Update"
msgstr "Atualizar" msgstr "Atualizar"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106 #: apps/accounts/forms.py:48 apps/accounts/forms.py:106
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61 #: 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/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/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:189 apps/transactions/forms.py:213
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801 #: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876 #: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065 #: 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/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr "Novo saldo"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935 #: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501 #: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951 #: 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:63
#: templates/insights/fragments/category_overview/index.html:528 #: templates/insights/fragments/category_overview/index.html:419
msgid "Category" msgid "Category"
msgstr "Categoria" msgstr "Categoria"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109 #: 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/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/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:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479 #: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928 #: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503 #: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957 #: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168 #: 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 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "Tags" msgstr "Tags"
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
msgstr "" msgstr ""
"Contas arquivadas não aparecem nem contam para o seu patrimônio líquido" "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/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276 #: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920 #: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -185,7 +185,7 @@ msgstr ""
msgid "Account" msgid "Account"
msgstr "Conta" 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 #: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5 #: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117 #: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
@@ -197,7 +197,7 @@ msgstr "Conta"
msgid "Accounts" msgid "Accounts"
msgstr "Contas" 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." 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." 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" msgstr "Grupo de Conta apagado com sucesso"
#: apps/accounts/views/account_groups.py:135 #: 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/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154 #: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully" msgid "Ownership taken successfully"
@@ -258,14 +258,6 @@ msgstr "Conta atualizada com sucesso"
msgid "Account deleted successfully" msgid "Account deleted successfully"
msgstr "Conta apagada com sucesso" 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 #: apps/accounts/views/balance.py:77
msgid "Balance reconciliation" msgid "Balance reconciliation"
msgstr "Reconciliação do saldo" 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." msgid "Invalid entity data. Provide an ID or name."
msgstr "Dados da entidade inválidos. Forneça um ID ou nome." 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." msgid "Either 'date' or 'reference_date' must be provided."
msgstr "É necessário fornecer “date” ou “reference_date”." msgstr "É necessário fornecer “date” ou “reference_date”."
@@ -317,7 +309,7 @@ msgid "Shared with users"
msgstr "Compartilhado com os usuários" msgstr "Compartilhado com os usuários"
#: apps/common/fields/forms/dynamic_select.py:71 #: 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" msgid "Error creating new instance"
msgstr "Erro criando nova instância" msgstr "Erro criando nova instância"
@@ -363,7 +355,7 @@ msgstr ""
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os " "Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
"usuários. Somente editável pelo proprietário." "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" msgid "Save"
msgstr "Salvar" msgstr "Salvar"
@@ -458,13 +450,12 @@ msgstr "Erro"
msgid "Info" msgid "Info"
msgstr "Informação" msgstr "Informação"
#: apps/common/views.py:118 #: apps/common/views.py:111
msgid "Cache cleared successfully" msgid "Cache cleared successfully"
msgstr "Cache limpo com sucesso" msgstr "Cache limpo com sucesso"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208 #: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266 #: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today" msgid "Today"
msgstr "Hoje" msgstr "Hoje"
@@ -541,7 +532,7 @@ msgstr "Moeda de origem"
msgid "To Currency" msgid "To Currency"
msgstr "Moeda de destino" 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" msgid "Exchange Rate"
msgstr "Taxa de Câmbio" msgstr "Taxa de Câmbio"
@@ -549,43 +540,38 @@ msgstr "Taxa de Câmbio"
msgid "Date and Time" msgid "Date and Time"
msgstr "Data e Tempo" msgstr "Data e Tempo"
#: apps/currencies/models.py:73 apps/users/models.py:12 #: apps/currencies/models.py:75 apps/export_app/forms.py:68
#: apps/users/models.py:497
msgid "Auto"
msgstr "Automático"
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6 #: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202 #: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "Taxas de Câmbio" msgstr "Taxas de Câmbio"
#: apps/currencies/models.py:89 #: apps/currencies/models.py:87
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "As moedas De e Para não podem ser as mesmas." msgstr "As moedas De e Para não podem ser as mesmas."
#: apps/currencies/models.py:105 #: apps/currencies/models.py:102
msgid "On" msgid "On"
msgstr "Em" msgstr "Em"
#: apps/currencies/models.py:106 #: apps/currencies/models.py:103
msgid "Every X hours" msgid "Every X hours"
msgstr "A cada X horas" msgstr "A cada X horas"
#: apps/currencies/models.py:107 #: apps/currencies/models.py:104
msgid "Not on" msgid "Not on"
msgstr "Não em" msgstr "Não em"
#: apps/currencies/models.py:109 #: apps/currencies/models.py:106
msgid "Service Name" msgid "Service Name"
msgstr "Nome do Serviço" msgstr "Nome do Serviço"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:108
msgid "Service Type" msgid "Service Type"
msgstr "Tipo de Serviço" 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 #: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21 #: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21 #: templates/entities/fragments/list.html:21
@@ -594,31 +580,31 @@ msgstr "Tipo de Serviço"
msgid "Active" msgid "Active"
msgstr "Ativo" msgstr "Ativo"
#: apps/currencies/models.py:118 #: apps/currencies/models.py:115
msgid "API Key" msgid "API Key"
msgstr "Chave de API" msgstr "Chave de API"
#: apps/currencies/models.py:119 #: apps/currencies/models.py:116
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "Chave de API para o serviço (se necessário)" msgstr "Chave de API para o serviço (se necessário)"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:121
msgid "Interval Type" msgid "Interval Type"
msgstr "Tipo de Intervalo" msgstr "Tipo de Intervalo"
#: apps/currencies/models.py:128 #: apps/currencies/models.py:125
msgid "Interval" msgid "Interval"
msgstr "Intervalo" msgstr "Intervalo"
#: apps/currencies/models.py:131 #: apps/currencies/models.py:128
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Última execução bem-sucedida" msgstr "Última execução bem-sucedida"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:133
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Moedas-alvo" msgstr "Moedas-alvo"
#: apps/currencies/models.py:138 #: apps/currencies/models.py:135
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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 " "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." "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" msgid "Target Accounts"
msgstr "Contas-alvo" msgstr "Contas-alvo"
#: apps/currencies/models.py:148 #: apps/currencies/models.py:145
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "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 " "serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
"definida." "definida."
#: apps/currencies/models.py:155 #: apps/currencies/models.py:152
#, 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
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Serviço de Taxa de Câmbio" msgstr "Serviço de Taxa de Câmbio"
#: apps/currencies/models.py:164 #: apps/currencies/models.py:153
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Serviços de Taxa de Câmbio" 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." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo." "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." 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." 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 "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -674,7 +650,7 @@ msgstr ""
"Formato inválido de hora. Use uma lista de horas separada por vírgulas " "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')." "(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
#: apps/currencies/models.py:250 #: apps/currencies/models.py:239
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -849,7 +825,7 @@ msgid "Transactions"
msgstr "Transações" msgstr "Transações"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134 #: 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/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162 #: templates/includes/sidebar.html:162
msgid "Categories" msgid "Categories"
@@ -857,7 +833,7 @@ msgstr "Categorias"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136 #: 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/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:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943 #: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329 #: 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 #: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174 #: templates/includes/sidebar.html:174
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities" msgid "Entities"
msgstr "Entidades" msgstr "Entidades"
@@ -933,7 +908,7 @@ msgstr "Ação de editar de transação"
msgid "Update or create transaction actions" msgid "Update or create transaction actions"
msgstr "Ações de atualizar ou criar transação" msgstr "Ações de atualizar ou criar transação"
#: apps/export_app/forms.py: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/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5 #: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24 #: templates/export_app/pages/index.html:24
@@ -1034,10 +1009,10 @@ msgid "Run deleted successfully"
msgstr "Importação apagada com sucesso" msgstr "Importação apagada com sucesso"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36 #: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189 #: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:88 #: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:393 #: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:422 #: templates/insights/fragments/category_overview/index.html:313
msgid "Uncategorized" msgid "Uncategorized"
msgstr "Sem categoria" 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 #: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47 #: 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/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8 #: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12 #: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1312,53 +1287,26 @@ msgstr "Conteúdo"
msgid "Transaction Type" msgid "Transaction Type"
msgstr "Tipo de Transação" msgstr "Tipo de Transação"
#: apps/transactions/filters.py:85 #: apps/transactions/filters.py:91
msgid "Date from" msgid "Date from"
msgstr "Data de" 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" msgid "Until"
msgstr "Até" msgstr "Até"
#: apps/transactions/filters.py:95 #: apps/transactions/filters.py:101
msgid "Reference date from" msgid "Reference date from"
msgstr "Data de Referência de" msgstr "Data de Referência de"
#: apps/transactions/filters.py:105 #: apps/transactions/filters.py:111
msgid "Amount min" msgid "Amount min"
msgstr "Quantia miníma" msgstr "Quantia miníma"
#: apps/transactions/filters.py:110 #: apps/transactions/filters.py:116
msgid "Amount max" msgid "Amount max"
msgstr "Quantia máxima" 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 #: apps/transactions/forms.py:173
msgid "More" msgid "More"
msgstr "Mais" msgstr "Mais"
@@ -1467,7 +1415,7 @@ msgstr "Entidade"
#: templates/calendar_view/fragments/list.html:54 #: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10 #: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.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 #: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income" msgid "Income"
msgstr "Renda" msgstr "Renda"
@@ -1479,7 +1427,7 @@ msgstr "Renda"
#: templates/calendar_view/fragments/list.html:58 #: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18 #: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19 #: 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" msgid "Expense"
msgstr "Despesa" msgstr "Despesa"
@@ -1734,8 +1682,8 @@ msgid "Item deleted successfully"
msgstr "Regra apagada com sucesso" msgstr "Regra apagada com sucesso"
#: apps/transactions/views/quick_transactions.py:155 #: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:53 #: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:149 #: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully" msgid "Transaction added successfully"
msgstr "Transação adicionada com sucesso" msgstr "Transação adicionada com sucesso"
@@ -1775,30 +1723,30 @@ msgstr "Tag atualizada com sucesso"
msgid "Tag deleted successfully" msgid "Tag deleted successfully"
msgstr "Tag apagada com sucesso" msgstr "Tag apagada com sucesso"
#: apps/transactions/views/transactions.py:183 #: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully" msgid "Transaction updated successfully"
msgstr "Transação atualizada com sucesso" msgstr "Transação atualizada com sucesso"
#: apps/transactions/views/transactions.py:233 #: apps/transactions/views/transactions.py:232
#, python-format #, python-format
msgid "%(count)s transaction updated successfully" msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully" msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "%(count)s transação atualizada com sucesso" msgstr[0] "%(count)s transação atualizada com sucesso"
msgstr[1] "%(count)s transações atualizadas 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" msgid "Transaction duplicated successfully"
msgstr "Transação duplicada com sucesso" msgstr "Transação duplicada com sucesso"
#: apps/transactions/views/transactions.py:311 #: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully" msgid "Transaction deleted successfully"
msgstr "Transação apagada com sucesso" msgstr "Transação apagada com sucesso"
#: apps/transactions/views/transactions.py:329 #: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully" msgid "Transaction restored successfully"
msgstr "Transação restaurada com sucesso" msgstr "Transação restaurada com sucesso"
#: apps/transactions/views/transactions.py:355 #: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully" msgid "Transfer added successfully"
msgstr "Transferência adicionada com sucesso" msgstr "Transferência adicionada com sucesso"
@@ -1845,19 +1793,19 @@ msgstr "Essa conta está desativada"
msgid "Default" msgid "Default"
msgstr "Padrão" 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" msgid "Date Format"
msgstr "Formato de Data" 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" msgid "Datetime Format"
msgstr "Formato de Data e Hora" 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" msgid "Number Format"
msgstr "Formato de Número" msgstr "Formato de Número"
#: apps/users/forms.py:148 #: apps/users/forms.py:146
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -1868,66 +1816,70 @@ msgstr ""
"são exibidos\n" "são exibidos\n"
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s" "Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
#: apps/users/forms.py:157 #: apps/users/forms.py:155
#, fuzzy #, fuzzy
#| msgid "Password" #| msgid "Password"
msgid "New Password" msgid "New Password"
msgstr "Senha" msgstr "Senha"
#: apps/users/forms.py:160 #: apps/users/forms.py:158
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "" msgstr ""
#: apps/users/forms.py:163 #: apps/users/forms.py:161
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:175 apps/users/forms.py:336 #: apps/users/forms.py:173 apps/users/forms.py:334
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:178 apps/users/forms.py:339 #: apps/users/forms.py:176 apps/users/forms.py:337
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:249 #: apps/users/forms.py:247
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
#: apps/users/forms.py:257 #: apps/users/forms.py:255
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "" msgstr ""
#: apps/users/forms.py:259 #: apps/users/forms.py:257
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "" msgstr ""
#: apps/users/forms.py:261 #: apps/users/forms.py:259
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "" msgstr ""
#: apps/users/forms.py:281 #: apps/users/forms.py:279
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:294 #: apps/users/forms.py:292
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:300 #: apps/users/forms.py:298
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:397 #: apps/users/forms.py:395
#, fuzzy #, fuzzy
#| msgid "A value for this field already exists in the rule." #| msgid "A value for this field already exists in the rule."
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "Já existe um valor para esse campo na regra." 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 #: apps/users/models.py:465 templates/includes/navbar.html:29
msgid "Yearly by currency" msgid "Yearly by currency"
msgstr "Anual por moeda" msgstr "Anual por moeda"
@@ -2044,7 +1996,7 @@ msgstr "Editar"
#: templates/accounts/fragments/list.html:48 #: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36 #: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136 #: 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/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90 #: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44 #: templates/currencies/fragments/list.html:44
@@ -2071,7 +2023,7 @@ msgstr "Apagar"
#: templates/accounts/fragments/list.html:52 #: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41 #: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140 #: 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/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92 #: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48 #: templates/currencies/fragments/list.html:48
@@ -2101,7 +2053,7 @@ msgstr "Tem certeza?"
#: templates/accounts/fragments/list.html:53 #: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42 #: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141 #: 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/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93 #: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49 #: 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/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43 #: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142 #: 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/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82 #: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50 #: templates/dca/fragments/strategy/list.html:50
@@ -2204,15 +2156,7 @@ msgstr "Editar conta"
msgid "Is Asset" msgid "Is Asset"
msgstr "É ativo" msgstr "É ativo"
#: templates/accounts/fragments/list.html:78 #: templates/accounts/fragments/list.html:87
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
msgid "No accounts" msgid "No accounts"
msgstr "Nenhuma conta" msgstr "Nenhuma conta"
@@ -2270,7 +2214,7 @@ msgid "Muted"
msgstr "Silenciada" msgstr "Silenciada"
#: templates/categories/fragments/table.html:75 #: 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" msgid "No categories"
msgstr "Nenhum categoria" msgstr "Nenhum categoria"
@@ -2294,46 +2238,27 @@ msgid "Select"
msgstr "Selecionar" msgstr "Selecionar"
#: templates/cotton/transaction/item.html:154 #: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:164 #: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries" msgid "Show on summaries"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:155 #: templates/cotton/transaction/item.html:155
#, fuzzy #, fuzzy
#| msgid "No category" #| msgid "No category"
msgid "Controlled by account"
msgstr "Sem categoria"
#: templates/cotton/transaction/item.html:165
#, fuzzy
#| msgid "No category"
msgid "Controlled by category" msgid "Controlled by category"
msgstr "Sem categoria" msgstr "Sem categoria"
#: templates/cotton/transaction/item.html:172 #: templates/cotton/transaction/item.html:162
msgid "Hide from summaries" msgid "Hide from summaries"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:174 #: templates/cotton/transaction/item.html:164
#, fuzzy #, fuzzy
#| msgid "Add recurring transaction" #| msgid "Add recurring transaction"
msgid "Add as quick transaction" msgid "Add as quick transaction"
msgstr "Adicionar transação recorrente" msgstr "Adicionar transação recorrente"
#: templates/cotton/transaction/item.html:176 #: templates/cotton/transaction/item.html:166
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/ui/transactions_action_bar.html:82 #: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate" msgid "Duplicate"
msgstr "Duplicar" msgstr "Duplicar"
@@ -2777,7 +2702,7 @@ msgid "Net Worth"
msgstr "Patrimônio" msgstr "Patrimônio"
#: templates/includes/navbar.html:45 #: 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 #: templates/net_worth/net_worth.html:22
msgid "Current" msgid "Current"
msgstr "Atual" msgstr "Atual"
@@ -2915,30 +2840,28 @@ msgstr ""
msgid "Bars" msgid "Bars"
msgstr "" msgstr ""
#: templates/insights/fragments/category_overview/index.html:39 #: templates/insights/fragments/category_overview/index.html:38
msgid "" msgid ""
"Transaction amounts associated with multiple tags will be counted once for " "Transaction amounts associated with multiple tags will be counted once for "
"each tag" "each tag"
msgstr "" msgstr ""
#: templates/insights/fragments/category_overview/index.html:52 #: templates/insights/fragments/category_overview/index.html:54
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:69
#, fuzzy #, fuzzy
#| msgid "final total" #| msgid "final total"
msgid "Final total" msgid "Final total"
msgstr "total final" 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 #: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total" msgid "Total"
msgstr "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" msgid "Final Total"
msgstr "Total Final" msgstr "Total Final"
@@ -3471,11 +3394,6 @@ msgstr "termina em"
msgid "Yearly Overview" msgid "Yearly Overview"
msgstr "Visão Anual" msgstr "Visão Anual"
#, fuzzy
#~| msgid "Automation"
#~ msgid "Automatic"
#~ msgstr "Automação"
#, fuzzy #, fuzzy
#~| msgid "Import Profiles" #~| msgid "Import Profiles"
#~ msgid "Profile" #~ msgid "Profile"
+106 -186
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-17 06:55+0000\n" "POT-Creation-Date: 2025-08-06 16:21+0000\n"
"PO-Revision-Date: 2025-08-16 04:17+0000\n" "PO-Revision-Date: 2025-08-06 18:17+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n" "Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translations.herculino.com/" "Language-Team: Portuguese (Brazil) <https://translations.herculino.com/"
"projects/wygiwyh/app/pt_BR/>\n" "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/accounts/forms.py:40 apps/accounts/forms.py:98
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91 #: 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/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/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421 #: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836 #: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903 #: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:217 #: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:379 #: apps/users/forms.py:377
msgid "Update" msgid "Update"
msgstr "Atualizar" msgstr "Atualizar"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106 #: apps/accounts/forms.py:48 apps/accounts/forms.py:106
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61 #: 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/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/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:189 apps/transactions/forms.py:213
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801 #: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876 #: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065 #: 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/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr "Novo saldo"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935 #: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501 #: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951 #: 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:63
#: templates/insights/fragments/category_overview/index.html:528 #: templates/insights/fragments/category_overview/index.html:419
msgid "Category" msgid "Category"
msgstr "Categoria" msgstr "Categoria"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109 #: 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/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/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:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479 #: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928 #: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503 #: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957 #: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168 #: 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 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "Tags" msgstr "Tags"
@@ -171,7 +171,7 @@ msgid "Archived accounts don't show up nor count towards your net worth"
msgstr "" msgstr ""
"Contas arquivadas não aparecem nem contam para o seu patrimônio líquido" "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/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276 #: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920 #: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -185,7 +185,7 @@ msgstr ""
msgid "Account" msgid "Account"
msgstr "Conta" 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 #: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5 #: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117 #: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
@@ -197,7 +197,7 @@ msgstr "Conta"
msgid "Accounts" msgid "Accounts"
msgstr "Contas" 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." 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." 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" msgstr "Grupo de Conta apagado com sucesso"
#: apps/accounts/views/account_groups.py:135 #: 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/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154 #: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully" msgid "Ownership taken successfully"
@@ -258,14 +258,6 @@ msgstr "Conta atualizada com sucesso"
msgid "Account deleted successfully" msgid "Account deleted successfully"
msgstr "Conta apagada com sucesso" 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 #: apps/accounts/views/balance.py:77
msgid "Balance reconciliation" msgid "Balance reconciliation"
msgstr "Reconciliação do saldo" 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." msgid "Invalid entity data. Provide an ID or name."
msgstr "Dados da entidade inválidos. Forneça um ID ou nome." 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." msgid "Either 'date' or 'reference_date' must be provided."
msgstr "É necessário fornecer “date” ou “reference_date”." msgstr "É necessário fornecer “date” ou “reference_date”."
@@ -315,7 +307,7 @@ msgid "Shared with users"
msgstr "Compartilhado com os usuários" msgstr "Compartilhado com os usuários"
#: apps/common/fields/forms/dynamic_select.py:71 #: 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" msgid "Error creating new instance"
msgstr "Erro criando nova instância" msgstr "Erro criando nova instância"
@@ -361,7 +353,7 @@ msgstr ""
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os " "Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
"usuários. Somente editável pelo proprietário." "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" msgid "Save"
msgstr "Salvar" msgstr "Salvar"
@@ -456,13 +448,12 @@ msgstr "Erro"
msgid "Info" msgid "Info"
msgstr "Informação" msgstr "Informação"
#: apps/common/views.py:118 #: apps/common/views.py:111
msgid "Cache cleared successfully" msgid "Cache cleared successfully"
msgstr "Cache limpo com sucesso" msgstr "Cache limpo com sucesso"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208 #: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266 #: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today" msgid "Today"
msgstr "Hoje" msgstr "Hoje"
@@ -539,7 +530,7 @@ msgstr "Moeda de origem"
msgid "To Currency" msgid "To Currency"
msgstr "Moeda de destino" 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" msgid "Exchange Rate"
msgstr "Taxa de Câmbio" msgstr "Taxa de Câmbio"
@@ -547,43 +538,38 @@ msgstr "Taxa de Câmbio"
msgid "Date and Time" msgid "Date and Time"
msgstr "Data e Tempo" msgstr "Data e Tempo"
#: apps/currencies/models.py:73 apps/users/models.py:12 #: apps/currencies/models.py:75 apps/export_app/forms.py:68
#: apps/users/models.py:497
msgid "Auto"
msgstr "Automático"
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6 #: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202 #: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "Taxas de Câmbio" msgstr "Taxas de Câmbio"
#: apps/currencies/models.py:89 #: apps/currencies/models.py:87
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "As moedas De e Para não podem ser as mesmas." msgstr "As moedas De e Para não podem ser as mesmas."
#: apps/currencies/models.py:105 #: apps/currencies/models.py:102
msgid "On" msgid "On"
msgstr "Em" msgstr "Em"
#: apps/currencies/models.py:106 #: apps/currencies/models.py:103
msgid "Every X hours" msgid "Every X hours"
msgstr "A cada X horas" msgstr "A cada X horas"
#: apps/currencies/models.py:107 #: apps/currencies/models.py:104
msgid "Not on" msgid "Not on"
msgstr "Não em" msgstr "Não em"
#: apps/currencies/models.py:109 #: apps/currencies/models.py:106
msgid "Service Name" msgid "Service Name"
msgstr "Nome do Serviço" msgstr "Nome do Serviço"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:108
msgid "Service Type" msgid "Service Type"
msgstr "Tipo de Serviço" 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 #: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21 #: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21 #: templates/entities/fragments/list.html:21
@@ -592,31 +578,31 @@ msgstr "Tipo de Serviço"
msgid "Active" msgid "Active"
msgstr "Ativo" msgstr "Ativo"
#: apps/currencies/models.py:118 #: apps/currencies/models.py:115
msgid "API Key" msgid "API Key"
msgstr "Chave de API" msgstr "Chave de API"
#: apps/currencies/models.py:119 #: apps/currencies/models.py:116
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "Chave de API para o serviço (se necessário)" msgstr "Chave de API para o serviço (se necessário)"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:121
msgid "Interval Type" msgid "Interval Type"
msgstr "Tipo de Intervalo" msgstr "Tipo de Intervalo"
#: apps/currencies/models.py:128 #: apps/currencies/models.py:125
msgid "Interval" msgid "Interval"
msgstr "Intervalo" msgstr "Intervalo"
#: apps/currencies/models.py:131 #: apps/currencies/models.py:128
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Última execução bem-sucedida" msgstr "Última execução bem-sucedida"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:133
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Moedas-alvo" msgstr "Moedas-alvo"
#: apps/currencies/models.py:138 #: apps/currencies/models.py:135
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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 " "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." "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" msgid "Target Accounts"
msgstr "Contas-alvo" msgstr "Contas-alvo"
#: apps/currencies/models.py:148 #: apps/currencies/models.py:145
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "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 " "serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
"definida." "definida."
#: apps/currencies/models.py:155 #: apps/currencies/models.py:152
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
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Serviço de Taxa de Câmbio" msgstr "Serviço de Taxa de Câmbio"
#: apps/currencies/models.py:164 #: apps/currencies/models.py:153
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Serviços de Taxa de Câmbio" 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." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo." "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." 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." 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 "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -672,7 +648,7 @@ msgstr ""
"Formato inválido de hora. Use uma lista de horas separada por vírgulas " "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')." "(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
#: apps/currencies/models.py:250 #: apps/currencies/models.py:239
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -847,7 +823,7 @@ msgid "Transactions"
msgstr "Transações" msgstr "Transações"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134 #: 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/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162 #: templates/includes/sidebar.html:162
msgid "Categories" msgid "Categories"
@@ -855,7 +831,7 @@ msgstr "Categorias"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136 #: 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/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:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943 #: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329 #: 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 #: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174 #: templates/includes/sidebar.html:174
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities" msgid "Entities"
msgstr "Entidades" msgstr "Entidades"
@@ -931,7 +906,7 @@ msgstr "Ação de editar de transação"
msgid "Update or create transaction actions" msgid "Update or create transaction actions"
msgstr "Ações de atualizar ou criar transação" msgstr "Ações de atualizar ou criar transação"
#: apps/export_app/forms.py: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/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5 #: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24 #: templates/export_app/pages/index.html:24
@@ -1032,10 +1007,10 @@ msgid "Run deleted successfully"
msgstr "Importação apagada com sucesso" msgstr "Importação apagada com sucesso"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36 #: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189 #: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:88 #: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:393 #: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:422 #: templates/insights/fragments/category_overview/index.html:313
msgid "Uncategorized" msgid "Uncategorized"
msgstr "Sem categoria" 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 #: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47 #: 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/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8 #: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12 #: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1310,47 +1285,26 @@ msgstr "Conteúdo"
msgid "Transaction Type" msgid "Transaction Type"
msgstr "Tipo de Transação" msgstr "Tipo de Transação"
#: apps/transactions/filters.py:85 #: apps/transactions/filters.py:91
msgid "Date from" msgid "Date from"
msgstr "Data de" 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" msgid "Until"
msgstr "Até" msgstr "Até"
#: apps/transactions/filters.py:95 #: apps/transactions/filters.py:101
msgid "Reference date from" msgid "Reference date from"
msgstr "Data de Referência de" msgstr "Data de Referência de"
#: apps/transactions/filters.py:105 #: apps/transactions/filters.py:111
msgid "Amount min" msgid "Amount min"
msgstr "Quantia miníma" msgstr "Quantia miníma"
#: apps/transactions/filters.py:110 #: apps/transactions/filters.py:116
msgid "Amount max" msgid "Amount max"
msgstr "Quantia máxima" 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 #: apps/transactions/forms.py:173
msgid "More" msgid "More"
msgstr "Mais" msgstr "Mais"
@@ -1455,7 +1409,7 @@ msgstr "Entidade"
#: templates/calendar_view/fragments/list.html:54 #: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10 #: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.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 #: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income" msgid "Income"
msgstr "Renda" msgstr "Renda"
@@ -1467,7 +1421,7 @@ msgstr "Renda"
#: templates/calendar_view/fragments/list.html:58 #: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18 #: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19 #: 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" msgid "Expense"
msgstr "Despesa" msgstr "Despesa"
@@ -1712,8 +1666,8 @@ msgid "Item deleted successfully"
msgstr "Item apagado com sucesso" msgstr "Item apagado com sucesso"
#: apps/transactions/views/quick_transactions.py:155 #: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:53 #: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:149 #: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully" msgid "Transaction added successfully"
msgstr "Transação adicionada com sucesso" msgstr "Transação adicionada com sucesso"
@@ -1753,30 +1707,30 @@ msgstr "Tag atualizada com sucesso"
msgid "Tag deleted successfully" msgid "Tag deleted successfully"
msgstr "Tag apagada com sucesso" msgstr "Tag apagada com sucesso"
#: apps/transactions/views/transactions.py:183 #: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully" msgid "Transaction updated successfully"
msgstr "Transação atualizada com sucesso" msgstr "Transação atualizada com sucesso"
#: apps/transactions/views/transactions.py:233 #: apps/transactions/views/transactions.py:232
#, python-format #, python-format
msgid "%(count)s transaction updated successfully" msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully" msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "%(count)s transação atualizada com sucesso" msgstr[0] "%(count)s transação atualizada com sucesso"
msgstr[1] "%(count)s transações atualizadas 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" msgid "Transaction duplicated successfully"
msgstr "Transação duplicada com sucesso" msgstr "Transação duplicada com sucesso"
#: apps/transactions/views/transactions.py:311 #: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully" msgid "Transaction deleted successfully"
msgstr "Transação apagada com sucesso" msgstr "Transação apagada com sucesso"
#: apps/transactions/views/transactions.py:329 #: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully" msgid "Transaction restored successfully"
msgstr "Transação restaurada com sucesso" msgstr "Transação restaurada com sucesso"
#: apps/transactions/views/transactions.py:355 #: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully" msgid "Transfer added successfully"
msgstr "Transferência adicionada com sucesso" msgstr "Transferência adicionada com sucesso"
@@ -1823,19 +1777,19 @@ msgstr "Essa conta está desativada"
msgid "Default" msgid "Default"
msgstr "Padrão" 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" msgid "Date Format"
msgstr "Formato de Data" 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" msgid "Datetime Format"
msgstr "Formato de Data e Hora" 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" msgid "Number Format"
msgstr "Formato de Número" msgstr "Formato de Número"
#: apps/users/forms.py:148 #: apps/users/forms.py:146
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -1846,19 +1800,19 @@ msgstr ""
"são exibidos\n" "são exibidos\n"
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s" "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" msgid "New Password"
msgstr "Nova senha" msgstr "Nova senha"
#: apps/users/forms.py:160 #: apps/users/forms.py:158
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Deixe em branco para usar a senha atual." msgstr "Deixe em branco para usar a senha atual."
#: apps/users/forms.py:163 #: apps/users/forms.py:161
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Confirmar nova senha" 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
@@ -1866,7 +1820,7 @@ msgstr ""
"Designa se esse usuário deve ser tratado como ativo. Desmarque essa opção em " "Designa se esse usuário deve ser tratado como ativo. Desmarque essa opção em "
"vez de excluir usuários." "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 "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -1874,40 +1828,44 @@ msgstr ""
"Designa que esse usuário tem todas as permissões sem atribuí-las " "Designa que esse usuário tem todas as permissões sem atribuí-las "
"explicitamente." "explicitamente."
#: apps/users/forms.py:249 #: apps/users/forms.py:247
msgid "This email address is already in use by another account." 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." 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." msgid "The two password fields didn't match."
msgstr "Os dois campos de senha não coincidem." 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." msgid "Please confirm your new password."
msgstr "Confirme sua nova senha." msgstr "Confirme sua nova senha."
#: apps/users/forms.py:261 #: apps/users/forms.py:259
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "Digite a nova senha primeiro." 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." msgid "You cannot deactivate your own account using this form."
msgstr "Não é possível desativar sua própria conta usando esse formulário." 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." msgid "Cannot remove status from the last superuser."
msgstr "Não é possível remover o status do último superusuário." 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." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
"Não é possível remover seu próprio status de superusuário usando esse " "Não é possível remover seu próprio status de superusuário usando esse "
"formulário." "formulário."
#: apps/users/forms.py:397 #: apps/users/forms.py:395
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "Já existe um usuário com esse endereço de e-mail." 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 #: apps/users/models.py:465 templates/includes/navbar.html:29
msgid "Yearly by currency" msgid "Yearly by currency"
msgstr "Anual por moeda" msgstr "Anual por moeda"
@@ -2024,7 +1982,7 @@ msgstr "Editar"
#: templates/accounts/fragments/list.html:48 #: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36 #: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136 #: 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/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90 #: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44 #: templates/currencies/fragments/list.html:44
@@ -2051,7 +2009,7 @@ msgstr "Apagar"
#: templates/accounts/fragments/list.html:52 #: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41 #: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140 #: 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/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92 #: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48 #: templates/currencies/fragments/list.html:48
@@ -2081,7 +2039,7 @@ msgstr "Tem certeza?"
#: templates/accounts/fragments/list.html:53 #: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42 #: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141 #: 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/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93 #: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49 #: 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/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43 #: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142 #: 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/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82 #: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50 #: templates/dca/fragments/strategy/list.html:50
@@ -2184,15 +2142,7 @@ msgstr "Editar conta"
msgid "Is Asset" msgid "Is Asset"
msgstr "É ativo" msgstr "É ativo"
#: templates/accounts/fragments/list.html:78 #: templates/accounts/fragments/list.html:87
msgid "Track"
msgstr "Acompanhar"
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr "Parar de acompanhar"
#: templates/accounts/fragments/list.html:98
msgid "No accounts" msgid "No accounts"
msgstr "Nenhuma conta" msgstr "Nenhuma conta"
@@ -2250,7 +2200,7 @@ msgid "Muted"
msgstr "Silenciada" msgstr "Silenciada"
#: templates/categories/fragments/table.html:75 #: 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" msgid "No categories"
msgstr "Nenhum categoria" msgstr "Nenhum categoria"
@@ -2274,40 +2224,23 @@ msgid "Select"
msgstr "Selecionar" msgstr "Selecionar"
#: templates/cotton/transaction/item.html:154 #: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:164 #: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries" msgid "Show on summaries"
msgstr "Mostrar nos sumários" msgstr "Mostrar nos sumários"
#: templates/cotton/transaction/item.html:155 #: templates/cotton/transaction/item.html:155
msgid "Controlled by account"
msgstr "Controlado pela conta"
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category" msgid "Controlled by category"
msgstr "Controlado pela categoria" msgstr "Controlado pela categoria"
#: templates/cotton/transaction/item.html:172 #: templates/cotton/transaction/item.html:162
msgid "Hide from summaries" msgid "Hide from summaries"
msgstr "Esconder dos sumários" msgstr "Esconder dos sumários"
#: templates/cotton/transaction/item.html:174 #: templates/cotton/transaction/item.html:164
msgid "Add as quick transaction" msgid "Add as quick transaction"
msgstr "Adicionar como transação rápida" msgstr "Adicionar como transação rápida"
#: templates/cotton/transaction/item.html:176 #: templates/cotton/transaction/item.html:166
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/ui/transactions_action_bar.html:82 #: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate" msgid "Duplicate"
msgstr "Duplicar" msgstr "Duplicar"
@@ -2751,7 +2684,7 @@ msgid "Net Worth"
msgstr "Patrimônio" msgstr "Patrimônio"
#: templates/includes/navbar.html:45 #: 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 #: templates/net_worth/net_worth.html:22
msgid "Current" msgid "Current"
msgstr "Atual" msgstr "Atual"
@@ -2887,7 +2820,7 @@ msgstr "Tabela"
msgid "Bars" msgid "Bars"
msgstr "Barras" msgstr "Barras"
#: templates/insights/fragments/category_overview/index.html:39 #: templates/insights/fragments/category_overview/index.html:38
msgid "" msgid ""
"Transaction amounts associated with multiple tags will be counted once for " "Transaction amounts associated with multiple tags will be counted once for "
"each tag" "each tag"
@@ -2895,28 +2828,20 @@ msgstr ""
"Os valores das transações associadas a várias tags serão contados uma vez " "Os valores das transações associadas a várias tags serão contados uma vez "
"para cada tag" "para cada tag"
#: templates/insights/fragments/category_overview/index.html:52 #: templates/insights/fragments/category_overview/index.html:54
#, 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
msgid "Final total" msgid "Final total"
msgstr "Total final" 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 #: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total" msgid "Total"
msgstr "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" msgid "Final Total"
msgstr "Total Final" msgstr "Total Final"
@@ -3433,11 +3358,6 @@ msgstr "Login com"
msgid "Yearly Overview" msgid "Yearly Overview"
msgstr "Visão Anual" msgstr "Visão Anual"
#, fuzzy
#~| msgid "Automation"
#~ msgid "Automatic"
#~ msgstr "Automação"
#~ msgid "Profile" #~ msgid "Profile"
#~ msgstr "Perfil" #~ msgstr "Perfil"
+105 -172
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-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" "PO-Revision-Date: 2025-04-14 06:16+0000\n"
"Last-Translator: Emil <emil.bjorkroth@gmail.com>\n" "Last-Translator: Emil <emil.bjorkroth@gmail.com>\n"
"Language-Team: Swedish <https://translations.herculino.com/projects/wygiwyh/" "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/accounts/forms.py:40 apps/accounts/forms.py:98
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91 #: 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/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/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421 #: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836 #: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903 #: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:217 #: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:379 #: apps/users/forms.py:377
msgid "Update" msgid "Update"
msgstr "Uppdatera" msgstr "Uppdatera"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106 #: apps/accounts/forms.py:48 apps/accounts/forms.py:106
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61 #: 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/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/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:189 apps/transactions/forms.py:213
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801 #: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876 #: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065 #: 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/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -82,22 +82,22 @@ msgstr ""
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935 #: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501 #: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951 #: 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:63
#: templates/insights/fragments/category_overview/index.html:528 #: templates/insights/fragments/category_overview/index.html:419
msgid "Category" msgid "Category"
msgstr "" msgstr ""
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109 #: 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/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/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:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479 #: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928 #: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503 #: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957 #: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168 #: 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 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "" msgstr ""
@@ -168,7 +168,7 @@ msgstr ""
msgid "Archived accounts don't show up nor count towards your net worth" msgid "Archived accounts don't show up nor count towards your net worth"
msgstr "" 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/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276 #: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920 #: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -182,7 +182,7 @@ msgstr ""
msgid "Account" msgid "Account"
msgstr "" 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 #: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5 #: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117 #: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
@@ -194,7 +194,7 @@ msgstr ""
msgid "Accounts" msgid "Accounts"
msgstr "" msgstr ""
#: apps/accounts/models.py:93 #: apps/accounts/models.py:84
msgid "Exchange currency cannot be the same as the account's main currency." msgid "Exchange currency cannot be the same as the account's main currency."
msgstr "" msgstr ""
@@ -230,7 +230,7 @@ msgid "Account Group deleted successfully"
msgstr "" msgstr ""
#: apps/accounts/views/account_groups.py:135 #: 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/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154 #: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully" msgid "Ownership taken successfully"
@@ -255,14 +255,6 @@ msgstr ""
msgid "Account deleted successfully" msgid "Account deleted successfully"
msgstr "" 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 #: apps/accounts/views/balance.py:77
msgid "Balance reconciliation" msgid "Balance reconciliation"
msgstr "" msgstr ""
@@ -295,7 +287,7 @@ msgstr ""
msgid "Invalid entity data. Provide an ID or name." msgid "Invalid entity data. Provide an ID or name."
msgstr "" msgstr ""
#: apps/api/serializers/transactions.py:192 #: apps/api/serializers/transactions.py:191
msgid "Either 'date' or 'reference_date' must be provided." msgid "Either 'date' or 'reference_date' must be provided."
msgstr "" msgstr ""
@@ -312,7 +304,7 @@ msgid "Shared with users"
msgstr "" msgstr ""
#: apps/common/fields/forms/dynamic_select.py:71 #: 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" msgid "Error creating new instance"
msgstr "" msgstr ""
@@ -353,7 +345,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner." "owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr "" msgstr ""
#: apps/common/forms.py:80 apps/users/forms.py:142 #: apps/common/forms.py:80 apps/users/forms.py:140
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@@ -448,13 +440,12 @@ msgstr ""
msgid "Info" msgid "Info"
msgstr "" msgstr ""
#: apps/common/views.py:118 #: apps/common/views.py:111
msgid "Cache cleared successfully" msgid "Cache cleared successfully"
msgstr "" msgstr ""
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208 #: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266 #: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today" msgid "Today"
msgstr "" msgstr ""
@@ -531,7 +522,7 @@ msgstr ""
msgid "To Currency" msgid "To Currency"
msgstr "" msgstr ""
#: apps/currencies/models.py:69 apps/currencies/models.py:76 #: apps/currencies/models.py:69 apps/currencies/models.py:74
msgid "Exchange Rate" msgid "Exchange Rate"
msgstr "" msgstr ""
@@ -539,43 +530,38 @@ msgstr ""
msgid "Date and Time" msgid "Date and Time"
msgstr "" msgstr ""
#: apps/currencies/models.py:73 apps/users/models.py:12 #: apps/currencies/models.py:75 apps/export_app/forms.py:68
#: apps/users/models.py:497
msgid "Auto"
msgstr ""
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6 #: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202 #: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "" msgstr ""
#: apps/currencies/models.py:89 #: apps/currencies/models.py:87
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "" msgstr ""
#: apps/currencies/models.py:105 #: apps/currencies/models.py:102
msgid "On" msgid "On"
msgstr "" msgstr ""
#: apps/currencies/models.py:106 #: apps/currencies/models.py:103
msgid "Every X hours" msgid "Every X hours"
msgstr "" msgstr ""
#: apps/currencies/models.py:107 #: apps/currencies/models.py:104
msgid "Not on" msgid "Not on"
msgstr "" msgstr ""
#: apps/currencies/models.py:109 #: apps/currencies/models.py:106
msgid "Service Name" msgid "Service Name"
msgstr "" msgstr ""
#: apps/currencies/models.py:111 #: apps/currencies/models.py:108
msgid "Service Type" msgid "Service Type"
msgstr "" 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 #: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21 #: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21 #: templates/entities/fragments/list.html:21
@@ -584,77 +570,69 @@ msgstr ""
msgid "Active" msgid "Active"
msgstr "" msgstr ""
#: apps/currencies/models.py:118 #: apps/currencies/models.py:115
msgid "API Key" msgid "API Key"
msgstr "" msgstr ""
#: apps/currencies/models.py:119 #: apps/currencies/models.py:116
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "" msgstr ""
#: apps/currencies/models.py:124 #: apps/currencies/models.py:121
msgid "Interval Type" msgid "Interval Type"
msgstr "" msgstr ""
#: apps/currencies/models.py:128 #: apps/currencies/models.py:125
msgid "Interval" msgid "Interval"
msgstr "" msgstr ""
#: apps/currencies/models.py:131 #: apps/currencies/models.py:128
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "" msgstr ""
#: apps/currencies/models.py:136 #: apps/currencies/models.py:133
msgid "Target Currencies" msgid "Target Currencies"
msgstr "" msgstr ""
#: apps/currencies/models.py:138 #: apps/currencies/models.py:135
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:146 #: apps/currencies/models.py:143
msgid "Target Accounts" msgid "Target Accounts"
msgstr "" msgstr ""
#: apps/currencies/models.py:148 #: apps/currencies/models.py:145
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:155 #: apps/currencies/models.py:152
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
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "" msgstr ""
#: apps/currencies/models.py:164 #: apps/currencies/models.py:153
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "" msgstr ""
#: apps/currencies/models.py:216 #: apps/currencies/models.py:205
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
#: apps/currencies/models.py:225 #: apps/currencies/models.py:214
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "" msgstr ""
#: apps/currencies/models.py:239 #: apps/currencies/models.py:228
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
msgstr "" msgstr ""
#: apps/currencies/models.py:250 #: apps/currencies/models.py:239
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -827,7 +805,7 @@ msgid "Transactions"
msgstr "" msgstr ""
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134 #: 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/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162 #: templates/includes/sidebar.html:162
msgid "Categories" msgid "Categories"
@@ -835,7 +813,7 @@ msgstr ""
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136 #: 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/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:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943 #: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329 #: 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 #: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174 #: templates/includes/sidebar.html:174
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities" msgid "Entities"
msgstr "" msgstr ""
@@ -911,7 +888,7 @@ msgstr ""
msgid "Update or create transaction actions" msgid "Update or create transaction actions"
msgstr "" 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/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5 #: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24 #: templates/export_app/pages/index.html:24
@@ -1010,10 +987,10 @@ msgid "Run deleted successfully"
msgstr "" msgstr ""
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36 #: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189 #: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:88 #: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:393 #: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:422 #: templates/insights/fragments/category_overview/index.html:313
msgid "Uncategorized" msgid "Uncategorized"
msgstr "" msgstr ""
@@ -1271,7 +1248,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20 #: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47 #: 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/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8 #: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12 #: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1286,47 +1263,26 @@ msgstr ""
msgid "Transaction Type" msgid "Transaction Type"
msgstr "" msgstr ""
#: apps/transactions/filters.py:85 #: apps/transactions/filters.py:91
msgid "Date from" msgid "Date from"
msgstr "" msgstr ""
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100 #: apps/transactions/filters.py:96 apps/transactions/filters.py:106
msgid "Until" msgid "Until"
msgstr "" msgstr ""
#: apps/transactions/filters.py:95 #: apps/transactions/filters.py:101
msgid "Reference date from" msgid "Reference date from"
msgstr "" msgstr ""
#: apps/transactions/filters.py:105 #: apps/transactions/filters.py:111
msgid "Amount min" msgid "Amount min"
msgstr "" msgstr ""
#: apps/transactions/filters.py:110 #: apps/transactions/filters.py:116
msgid "Amount max" msgid "Amount max"
msgstr "" 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 #: apps/transactions/forms.py:173
msgid "More" msgid "More"
msgstr "" msgstr ""
@@ -1426,7 +1382,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:54 #: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10 #: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.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 #: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income" msgid "Income"
msgstr "" msgstr ""
@@ -1438,7 +1394,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:58 #: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18 #: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19 #: 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" msgid "Expense"
msgstr "" msgstr ""
@@ -1683,8 +1639,8 @@ msgid "Item deleted successfully"
msgstr "" msgstr ""
#: apps/transactions/views/quick_transactions.py:155 #: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:53 #: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:149 #: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully" msgid "Transaction added successfully"
msgstr "" msgstr ""
@@ -1724,30 +1680,30 @@ msgstr ""
msgid "Tag deleted successfully" msgid "Tag deleted successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:183 #: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully" msgid "Transaction updated successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:233 #: apps/transactions/views/transactions.py:232
#, python-format #, python-format
msgid "%(count)s transaction updated successfully" msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully" msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: apps/transactions/views/transactions.py:269 #: apps/transactions/views/transactions.py:268
msgid "Transaction duplicated successfully" msgid "Transaction duplicated successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:311 #: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully" msgid "Transaction deleted successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:329 #: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully" msgid "Transaction restored successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:355 #: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully" msgid "Transfer added successfully"
msgstr "" msgstr ""
@@ -1794,19 +1750,19 @@ msgstr ""
msgid "Default" msgid "Default"
msgstr "" msgstr ""
#: apps/users/forms.py:97 apps/users/models.py:484 #: apps/users/forms.py:95 apps/users/models.py:484
msgid "Date Format" msgid "Date Format"
msgstr "" msgstr ""
#: apps/users/forms.py:102 apps/users/models.py:489 #: apps/users/forms.py:100 apps/users/models.py:489
msgid "Datetime Format" msgid "Datetime Format"
msgstr "" msgstr ""
#: apps/users/forms.py:108 apps/users/models.py:492 #: apps/users/forms.py:106 apps/users/models.py:492
msgid "Number Format" msgid "Number Format"
msgstr "" msgstr ""
#: apps/users/forms.py:148 #: apps/users/forms.py:146
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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" "Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr "" msgstr ""
#: apps/users/forms.py:157 #: apps/users/forms.py:155
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:160 #: apps/users/forms.py:158
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "" msgstr ""
#: apps/users/forms.py:163 #: apps/users/forms.py:161
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:175 apps/users/forms.py:336 #: apps/users/forms.py:173 apps/users/forms.py:334
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:178 apps/users/forms.py:339 #: apps/users/forms.py:176 apps/users/forms.py:337
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:249 #: apps/users/forms.py:247
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
#: apps/users/forms.py:257 #: apps/users/forms.py:255
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "" msgstr ""
#: apps/users/forms.py:259 #: apps/users/forms.py:257
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "" msgstr ""
#: apps/users/forms.py:261 #: apps/users/forms.py:259
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "" msgstr ""
#: apps/users/forms.py:281 #: apps/users/forms.py:279
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:294 #: apps/users/forms.py:292
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:300 #: apps/users/forms.py:298
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:397 #: apps/users/forms.py:395
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "" msgstr ""
#: apps/users/models.py:12 apps/users/models.py:497
msgid "Auto"
msgstr ""
#: apps/users/models.py:465 templates/includes/navbar.html:29 #: apps/users/models.py:465 templates/includes/navbar.html:29
msgid "Yearly by currency" msgid "Yearly by currency"
msgstr "" msgstr ""
@@ -1986,7 +1946,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:48 #: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36 #: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136 #: 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/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90 #: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44 #: templates/currencies/fragments/list.html:44
@@ -2013,7 +1973,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:52 #: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41 #: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140 #: 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/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92 #: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48 #: templates/currencies/fragments/list.html:48
@@ -2043,7 +2003,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:53 #: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42 #: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141 #: 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/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93 #: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49 #: templates/currencies/fragments/list.html:49
@@ -2065,7 +2025,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:54 #: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43 #: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142 #: 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/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82 #: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50 #: templates/dca/fragments/strategy/list.html:50
@@ -2146,15 +2106,7 @@ msgstr ""
msgid "Is Asset" msgid "Is Asset"
msgstr "" msgstr ""
#: templates/accounts/fragments/list.html:78 #: templates/accounts/fragments/list.html:87
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
msgid "No accounts" msgid "No accounts"
msgstr "" msgstr ""
@@ -2212,7 +2164,7 @@ msgid "Muted"
msgstr "" msgstr ""
#: templates/categories/fragments/table.html:75 #: 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" msgid "No categories"
msgstr "" msgstr ""
@@ -2236,40 +2188,23 @@ msgid "Select"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:154 #: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:164 #: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries" msgid "Show on summaries"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:155 #: templates/cotton/transaction/item.html:155
msgid "Controlled by account"
msgstr ""
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category" msgid "Controlled by category"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:172 #: templates/cotton/transaction/item.html:162
msgid "Hide from summaries" msgid "Hide from summaries"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:174 #: templates/cotton/transaction/item.html:164
msgid "Add as quick transaction" msgid "Add as quick transaction"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:176 #: templates/cotton/transaction/item.html:166
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/ui/transactions_action_bar.html:82 #: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -2710,7 +2645,7 @@ msgid "Net Worth"
msgstr "" msgstr ""
#: templates/includes/navbar.html:45 #: 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 #: templates/net_worth/net_worth.html:22
msgid "Current" msgid "Current"
msgstr "" msgstr ""
@@ -2844,28 +2779,26 @@ msgstr ""
msgid "Bars" msgid "Bars"
msgstr "" msgstr ""
#: templates/insights/fragments/category_overview/index.html:39 #: templates/insights/fragments/category_overview/index.html:38
msgid "" msgid ""
"Transaction amounts associated with multiple tags will be counted once for " "Transaction amounts associated with multiple tags will be counted once for "
"each tag" "each tag"
msgstr "" msgstr ""
#: templates/insights/fragments/category_overview/index.html:52 #: templates/insights/fragments/category_overview/index.html:54
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:69
msgid "Final total" msgid "Final total"
msgstr "" 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 #: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total" msgid "Total"
msgstr "" 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" msgid "Final Total"
msgstr "" msgstr ""
+105 -176
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-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" "PO-Revision-Date: 2025-05-12 14:16+0000\n"
"Last-Translator: Felix <xnovaua@gmail.com>\n" "Last-Translator: Felix <xnovaua@gmail.com>\n"
"Language-Team: Ukrainian <https://translations.herculino.com/projects/" "Language-Team: Ukrainian <https://translations.herculino.com/projects/"
@@ -26,27 +26,27 @@ msgstr "Назва групи"
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98 #: apps/accounts/forms.py:40 apps/accounts/forms.py:98
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91 #: 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/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/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421 #: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836 #: apps/transactions/forms.py:793 apps/transactions/forms.py:836
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903 #: apps/transactions/forms.py:868 apps/transactions/forms.py:903
#: apps/transactions/forms.py:1057 apps/users/forms.py:217 #: apps/transactions/forms.py:1057 apps/users/forms.py:215
#: apps/users/forms.py:379 #: apps/users/forms.py:377
msgid "Update" msgid "Update"
msgstr "Оновлення" msgstr "Оновлення"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106 #: apps/accounts/forms.py:48 apps/accounts/forms.py:106
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61 #: 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/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/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:189 apps/transactions/forms.py:213
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801 #: apps/transactions/forms.py:383 apps/transactions/forms.py:801
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876 #: apps/transactions/forms.py:844 apps/transactions/forms.py:876
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065 #: 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/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9 #: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9 #: templates/categories/fragments/list.html:9
@@ -83,22 +83,22 @@ msgstr "Новий баланс"
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935 #: apps/transactions/forms.py:674 apps/transactions/forms.py:935
#: apps/transactions/models.py:318 apps/transactions/models.py:501 #: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:951 #: 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:63
#: templates/insights/fragments/category_overview/index.html:528 #: templates/insights/fragments/category_overview/index.html:419
msgid "Category" msgid "Category"
msgstr "Категорія" msgstr "Категорія"
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109 #: 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/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/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:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479 #: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928 #: apps/transactions/forms.py:667 apps/transactions/forms.py:928
#: apps/transactions/models.py:324 apps/transactions/models.py:503 #: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:957 #: apps/transactions/models.py:705 apps/transactions/models.py:957
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:168 #: 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 #: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags" msgid "Tags"
msgstr "Мітки" 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/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276 #: apps/transactions/forms.py:62 apps/transactions/forms.py:276
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920 #: apps/transactions/forms.py:659 apps/transactions/forms.py:920
@@ -186,7 +186,7 @@ msgstr ""
msgid "Account" msgid "Account"
msgstr "Рахунок" 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 #: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5 #: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117 #: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
@@ -198,7 +198,7 @@ msgstr "Рахунок"
msgid "Accounts" msgid "Accounts"
msgstr "Рахунки" msgstr "Рахунки"
#: apps/accounts/models.py:93 #: apps/accounts/models.py:84
msgid "Exchange currency cannot be the same as the account's main currency." msgid "Exchange currency cannot be the same as the account's main currency."
msgstr "Валюта обміну не може збігатися з основною валютою рахунку." msgstr "Валюта обміну не може збігатися з основною валютою рахунку."
@@ -234,7 +234,7 @@ msgid "Account Group deleted successfully"
msgstr "Групу рахунків успішно видалено" msgstr "Групу рахунків успішно видалено"
#: apps/accounts/views/account_groups.py:135 #: 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/rules/views.py:187 apps/transactions/views/categories.py:192
#: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154 #: apps/transactions/views/entities.py:154 apps/transactions/views/tags.py:154
msgid "Ownership taken successfully" msgid "Ownership taken successfully"
@@ -259,14 +259,6 @@ msgstr "Рахунок успішно оновлено"
msgid "Account deleted successfully" msgid "Account deleted successfully"
msgstr "Рахунок успішно видалено" 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 #: apps/accounts/views/balance.py:77
msgid "Balance reconciliation" msgid "Balance reconciliation"
msgstr "Звірка балансу" msgstr "Звірка балансу"
@@ -299,7 +291,7 @@ msgstr "Об'єкт з таким ідентифікатором не існує
msgid "Invalid entity data. Provide an ID or name." msgid "Invalid entity data. Provide an ID or name."
msgstr "Невірні дані про об'єкт. Вкажіть ідентифікатор або ім'я." msgstr "Невірні дані про об'єкт. Вкажіть ідентифікатор або ім'я."
#: apps/api/serializers/transactions.py:192 #: apps/api/serializers/transactions.py:191
msgid "Either 'date' or 'reference_date' must be provided." msgid "Either 'date' or 'reference_date' must be provided."
msgstr "Необхідно вказати або 'date', або 'reference_date'." msgstr "Необхідно вказати або 'date', або 'reference_date'."
@@ -318,7 +310,7 @@ msgid "Shared with users"
msgstr "Поділитися з користувачами" msgstr "Поділитися з користувачами"
#: apps/common/fields/forms/dynamic_select.py:71 #: 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" msgid "Error creating new instance"
msgstr "Помилка створення нового екземпляра" msgstr "Помилка створення нового екземпляра"
@@ -364,7 +356,7 @@ msgstr ""
"доступом. Редагувати може лише власник.<br/> Public: Відображається для всіх " "доступом. Редагувати може лише власник.<br/> Public: Відображається для всіх "
"користувачів. Редагувати може лише власник." "користувачів. Редагувати може лише власник."
#: apps/common/forms.py:80 apps/users/forms.py:142 #: apps/common/forms.py:80 apps/users/forms.py:140
msgid "Save" msgid "Save"
msgstr "Зберегти" msgstr "Зберегти"
@@ -463,13 +455,12 @@ msgstr "Помилка"
msgid "Info" msgid "Info"
msgstr "Info" msgstr "Info"
#: apps/common/views.py:118 #: apps/common/views.py:111
msgid "Cache cleared successfully" msgid "Cache cleared successfully"
msgstr "Кеш успішно очищено" msgstr "Кеш успішно очищено"
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208 #: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266 #: apps/common/widgets/datepicker.py:266
#: templates/common/fragments/month_year_picker.html:53
msgid "Today" msgid "Today"
msgstr "Сьогодні" msgstr "Сьогодні"
@@ -546,7 +537,7 @@ msgstr "З валюти"
msgid "To Currency" msgid "To Currency"
msgstr "У валюту" msgstr "У валюту"
#: apps/currencies/models.py:69 apps/currencies/models.py:76 #: apps/currencies/models.py:69 apps/currencies/models.py:74
msgid "Exchange Rate" msgid "Exchange Rate"
msgstr "Обмінний курс" msgstr "Обмінний курс"
@@ -554,43 +545,38 @@ msgstr "Обмінний курс"
msgid "Date and Time" msgid "Date and Time"
msgstr "Дата і час" msgstr "Дата і час"
#: apps/currencies/models.py:73 apps/users/models.py:12 #: apps/currencies/models.py:75 apps/export_app/forms.py:68
#: apps/users/models.py:497
msgid "Auto"
msgstr ""
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6 #: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
#: templates/exchange_rates/pages/index.html:4 #: templates/exchange_rates/pages/index.html:4
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:202 #: templates/includes/navbar.html:129 templates/includes/sidebar.html:202
msgid "Exchange Rates" msgid "Exchange Rates"
msgstr "Обмінні курси" msgstr "Обмінні курси"
#: apps/currencies/models.py:89 #: apps/currencies/models.py:87
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Валюти «Від» і «До» не можуть бути однаковими." msgstr "Валюти «Від» і «До» не можуть бути однаковими."
#: apps/currencies/models.py:105 #: apps/currencies/models.py:102
msgid "On" msgid "On"
msgstr "On" msgstr "On"
#: apps/currencies/models.py:106 #: apps/currencies/models.py:103
msgid "Every X hours" msgid "Every X hours"
msgstr "Кожні Х годин" msgstr "Кожні Х годин"
#: apps/currencies/models.py:107 #: apps/currencies/models.py:104
msgid "Not on" msgid "Not on"
msgstr "Not on" msgstr "Not on"
#: apps/currencies/models.py:109 #: apps/currencies/models.py:106
msgid "Service Name" msgid "Service Name"
msgstr "Назва сервісу" msgstr "Назва сервісу"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:108
msgid "Service Type" msgid "Service Type"
msgstr "Тип сервісу" 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 #: apps/transactions/models.py:238 apps/transactions/models.py:262
#: templates/categories/fragments/list.html:21 #: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21 #: templates/entities/fragments/list.html:21
@@ -599,79 +585,69 @@ msgstr "Тип сервісу"
msgid "Active" msgid "Active"
msgstr "Активний" msgstr "Активний"
#: apps/currencies/models.py:118 #: apps/currencies/models.py:115
msgid "API Key" msgid "API Key"
msgstr "Ключ API" msgstr "Ключ API"
#: apps/currencies/models.py:119 #: apps/currencies/models.py:116
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "API-ключ для сервісу (якщо потрібно)" msgstr "API-ключ для сервісу (якщо потрібно)"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:121
msgid "Interval Type" msgid "Interval Type"
msgstr "Тип інтервалу" msgstr "Тип інтервалу"
#: apps/currencies/models.py:128 #: apps/currencies/models.py:125
msgid "Interval" msgid "Interval"
msgstr "Інтервал" msgstr "Інтервал"
#: apps/currencies/models.py:131 #: apps/currencies/models.py:128
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Остання успішна вибірка" msgstr "Остання успішна вибірка"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:133
msgid "Target Currencies" msgid "Target Currencies"
msgstr "" msgstr ""
#: apps/currencies/models.py:138 #: apps/currencies/models.py:135
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:146 #: apps/currencies/models.py:143
msgid "Target Accounts" msgid "Target Accounts"
msgstr "" msgstr ""
#: apps/currencies/models.py:148 #: apps/currencies/models.py:145
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:155 #: apps/currencies/models.py:152
#, 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
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "" msgstr ""
#: apps/currencies/models.py:164 #: apps/currencies/models.py:153
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "" msgstr ""
#: apps/currencies/models.py:216 #: apps/currencies/models.py:205
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
#: apps/currencies/models.py:225 #: apps/currencies/models.py:214
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "" msgstr ""
#: apps/currencies/models.py:239 #: apps/currencies/models.py:228
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
msgstr "" msgstr ""
#: apps/currencies/models.py:250 #: apps/currencies/models.py:239
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -844,7 +820,7 @@ msgid "Transactions"
msgstr "" msgstr ""
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134 #: 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/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162 #: templates/includes/sidebar.html:162
msgid "Categories" msgid "Categories"
@@ -852,7 +828,7 @@ msgstr ""
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136 #: 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/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:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943 #: apps/transactions/forms.py:682 apps/transactions/forms.py:943
#: apps/transactions/models.py:273 apps/transactions/models.py:329 #: 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 #: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113 #: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174 #: templates/includes/sidebar.html:174
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities" msgid "Entities"
msgstr "" msgstr ""
@@ -928,7 +903,7 @@ msgstr ""
msgid "Update or create transaction actions" msgid "Update or create transaction actions"
msgstr "" 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/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5 #: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24 #: templates/export_app/pages/index.html:24
@@ -1027,10 +1002,10 @@ msgid "Run deleted successfully"
msgstr "" msgstr ""
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36 #: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189 #: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:88 #: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:393 #: templates/insights/fragments/category_overview/index.html:284
#: templates/insights/fragments/category_overview/index.html:422 #: templates/insights/fragments/category_overview/index.html:313
msgid "Uncategorized" msgid "Uncategorized"
msgstr "" msgstr ""
@@ -1288,7 +1263,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20 #: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:47 #: 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/net_worth/net_worth.html:32
#: templates/transactions/widgets/paid_toggle_button.html:8 #: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12 #: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1303,49 +1278,26 @@ msgstr ""
msgid "Transaction Type" msgid "Transaction Type"
msgstr "" msgstr ""
#: apps/transactions/filters.py:85 #: apps/transactions/filters.py:91
msgid "Date from" msgid "Date from"
msgstr "" msgstr ""
#: apps/transactions/filters.py:90 apps/transactions/filters.py:100 #: apps/transactions/filters.py:96 apps/transactions/filters.py:106
msgid "Until" msgid "Until"
msgstr "" msgstr ""
#: apps/transactions/filters.py:95 #: apps/transactions/filters.py:101
msgid "Reference date from" msgid "Reference date from"
msgstr "" msgstr ""
#: apps/transactions/filters.py:105 #: apps/transactions/filters.py:111
msgid "Amount min" msgid "Amount min"
msgstr "" msgstr ""
#: apps/transactions/filters.py:110 #: apps/transactions/filters.py:116
msgid "Amount max" msgid "Amount max"
msgstr "" 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 #: apps/transactions/forms.py:173
msgid "More" msgid "More"
msgstr "" msgstr ""
@@ -1445,7 +1397,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:54 #: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10 #: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/cotton/ui/transactions_fab.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 #: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income" msgid "Income"
msgstr "" msgstr ""
@@ -1457,7 +1409,7 @@ msgstr ""
#: templates/calendar_view/fragments/list.html:58 #: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18 #: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/cotton/ui/transactions_fab.html:19 #: 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" msgid "Expense"
msgstr "" msgstr ""
@@ -1704,8 +1656,8 @@ msgid "Item deleted successfully"
msgstr "Рахунок успішно видалено" msgstr "Рахунок успішно видалено"
#: apps/transactions/views/quick_transactions.py:155 #: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:53 #: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:149 #: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully" msgid "Transaction added successfully"
msgstr "" msgstr ""
@@ -1745,30 +1697,30 @@ msgstr ""
msgid "Tag deleted successfully" msgid "Tag deleted successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:183 #: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully" msgid "Transaction updated successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:233 #: apps/transactions/views/transactions.py:232
#, python-format #, python-format
msgid "%(count)s transaction updated successfully" msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully" msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: apps/transactions/views/transactions.py:269 #: apps/transactions/views/transactions.py:268
msgid "Transaction duplicated successfully" msgid "Transaction duplicated successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:311 #: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully" msgid "Transaction deleted successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:329 #: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully" msgid "Transaction restored successfully"
msgstr "" msgstr ""
#: apps/transactions/views/transactions.py:355 #: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully" msgid "Transfer added successfully"
msgstr "" msgstr ""
@@ -1815,19 +1767,19 @@ msgstr ""
msgid "Default" msgid "Default"
msgstr "" msgstr ""
#: apps/users/forms.py:97 apps/users/models.py:484 #: apps/users/forms.py:95 apps/users/models.py:484
msgid "Date Format" msgid "Date Format"
msgstr "" msgstr ""
#: apps/users/forms.py:102 apps/users/models.py:489 #: apps/users/forms.py:100 apps/users/models.py:489
msgid "Datetime Format" msgid "Datetime Format"
msgstr "" msgstr ""
#: apps/users/forms.py:108 apps/users/models.py:492 #: apps/users/forms.py:106 apps/users/models.py:492
msgid "Number Format" msgid "Number Format"
msgstr "" msgstr ""
#: apps/users/forms.py:148 #: apps/users/forms.py:146
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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" "Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr "" msgstr ""
#: apps/users/forms.py:157 #: apps/users/forms.py:155
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:160 #: apps/users/forms.py:158
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "" msgstr ""
#: apps/users/forms.py:163 #: apps/users/forms.py:161
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:175 apps/users/forms.py:336 #: apps/users/forms.py:173 apps/users/forms.py:334
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:178 apps/users/forms.py:339 #: apps/users/forms.py:176 apps/users/forms.py:337
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:249 #: apps/users/forms.py:247
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
#: apps/users/forms.py:257 #: apps/users/forms.py:255
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "" msgstr ""
#: apps/users/forms.py:259 #: apps/users/forms.py:257
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "" msgstr ""
#: apps/users/forms.py:261 #: apps/users/forms.py:259
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "" msgstr ""
#: apps/users/forms.py:281 #: apps/users/forms.py:279
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:294 #: apps/users/forms.py:292
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:300 #: apps/users/forms.py:298
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:397 #: apps/users/forms.py:395
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "" msgstr ""
#: apps/users/models.py:12 apps/users/models.py:497
msgid "Auto"
msgstr ""
#: apps/users/models.py:465 templates/includes/navbar.html:29 #: apps/users/models.py:465 templates/includes/navbar.html:29
msgid "Yearly by currency" msgid "Yearly by currency"
msgstr "" msgstr ""
@@ -2007,7 +1963,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:48 #: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36 #: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:136 #: 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/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:90 #: templates/cotton/ui/transactions_action_bar.html:90
#: templates/currencies/fragments/list.html:44 #: templates/currencies/fragments/list.html:44
@@ -2034,7 +1990,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:52 #: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41 #: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:140 #: 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/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:92 #: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:48 #: templates/currencies/fragments/list.html:48
@@ -2064,7 +2020,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:53 #: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42 #: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:141 #: 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/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:93 #: templates/cotton/ui/transactions_action_bar.html:93
#: templates/currencies/fragments/list.html:49 #: templates/currencies/fragments/list.html:49
@@ -2086,7 +2042,7 @@ msgstr ""
#: templates/accounts/fragments/list.html:54 #: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43 #: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:142 #: 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/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82 #: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50 #: templates/dca/fragments/strategy/list.html:50
@@ -2167,15 +2123,7 @@ msgstr ""
msgid "Is Asset" msgid "Is Asset"
msgstr "" msgstr ""
#: templates/accounts/fragments/list.html:78 #: templates/accounts/fragments/list.html:87
msgid "Track"
msgstr ""
#: templates/accounts/fragments/list.html:78
msgid "Untrack"
msgstr ""
#: templates/accounts/fragments/list.html:98
msgid "No accounts" msgid "No accounts"
msgstr "" msgstr ""
@@ -2233,7 +2181,7 @@ msgid "Muted"
msgstr "" msgstr ""
#: templates/categories/fragments/table.html:75 #: 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" msgid "No categories"
msgstr "" msgstr ""
@@ -2257,40 +2205,23 @@ msgid "Select"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:154 #: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:164 #: templates/cotton/transaction/item.html:160
#: templates/cotton/transaction/item.html:170
msgid "Show on summaries" msgid "Show on summaries"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:155 #: templates/cotton/transaction/item.html:155
msgid "Controlled by account"
msgstr ""
#: templates/cotton/transaction/item.html:165
msgid "Controlled by category" msgid "Controlled by category"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:172 #: templates/cotton/transaction/item.html:162
msgid "Hide from summaries" msgid "Hide from summaries"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:174 #: templates/cotton/transaction/item.html:164
msgid "Add as quick transaction" msgid "Add as quick transaction"
msgstr "" msgstr ""
#: templates/cotton/transaction/item.html:176 #: templates/cotton/transaction/item.html:166
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/ui/transactions_action_bar.html:82 #: templates/cotton/ui/transactions_action_bar.html:82
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
@@ -2731,7 +2662,7 @@ msgid "Net Worth"
msgstr "" msgstr ""
#: templates/includes/navbar.html:45 #: 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 #: templates/net_worth/net_worth.html:22
msgid "Current" msgid "Current"
msgstr "" msgstr ""
@@ -2865,28 +2796,26 @@ msgstr ""
msgid "Bars" msgid "Bars"
msgstr "" msgstr ""
#: templates/insights/fragments/category_overview/index.html:39 #: templates/insights/fragments/category_overview/index.html:38
msgid "" msgid ""
"Transaction amounts associated with multiple tags will be counted once for " "Transaction amounts associated with multiple tags will be counted once for "
"each tag" "each tag"
msgstr "" msgstr ""
#: templates/insights/fragments/category_overview/index.html:52 #: templates/insights/fragments/category_overview/index.html:54
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:69
msgid "Final total" msgid "Final total"
msgstr "" 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 #: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total" msgid "Total"
msgstr "" 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" msgid "Final Total"
msgstr "" msgstr ""
@@ -71,17 +71,6 @@
hx-get="{% url 'account_share_settings' pk=account.id %}"> hx-get="{% url 'account_share_settings' pk=account.id %}">
<i class="fa-solid fa-share fa-fw"></i></a> <i class="fa-solid fa-share fa-fw"></i></a>
{% endif %} {% 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> </div>
</td> </td>
<td class="col">{{ account.name }}</td> <td class="col">{{ account.name }}</td>
@@ -5,51 +5,47 @@
{% block title %}{% translate 'Pick a month' %}{% endblock %} {% block title %}{% translate 'Pick a month' %}{% endblock %}
{% block body %} {% 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"> <ul class="nav nav-pills nav-fill" id="yearTabs" role="tablist">
{% for x in years_list %} {% for x in years_list %}
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">
<button class="nav-link{% if x.grouper == current_year %} active{% endif %}" <button class="nav-link{% if x.grouper == current_year %} active{% endif %}"
id="{{ x.grouper }}" id="{{ x.grouper }}"
data-bs-toggle="tab" data-bs-toggle="tab"
data-bs-target="#{{ x.grouper }}-pane" data-bs-target="#{{ x.grouper }}-pane"
type="button" type="button"
role="tab" role="tab"
aria-controls="{{ x.grouper }}-pane" aria-controls="{{ x.grouper }}-pane"
aria-selected="{% if x.grouper == current_year %}true{% else %}false{% endif %}"> aria-selected="{% if x.grouper == current_year %}true{% else %}false{% endif %}">
{{ x.grouper }} {{ x.grouper }}
</button> </button>
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
<div class="tab-content" id="yearTabsContent" hx-boost="true"> <div class="tab-content" id="yearTabsContent" hx-boost="true">
{% for x in years_list %} {% for x in years_list %}
<div class="tab-pane fade{% if x.grouper == current_year %} show active{% endif %} mt-2" <div class="tab-pane fade{% if x.grouper == current_year %} show active{% endif %} mt-2"
id="{{ x.grouper }}-pane" id="{{ x.grouper }}-pane"
role="tabpanel" role="tabpanel"
aria-labelledby="{{ x.grouper }}" aria-labelledby="{{ x.grouper }}"
tabindex="0"> tabindex="0">
<ul class="list-group list-group-flush" id="month-year-list"> <ul class="list-group list-group-flush" id="month-year-list">
{% for month_data in x.list %} {% for month_data in x.list %}
<li class="list-group-item tw:hover:bg-zinc-900 <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 %} disabled bg-primary{% endif %}"
{% if month_data.month == current_month and month_data.year == current_year %}aria-disabled="true"{% endif %}> {% if month_data.month == current_month and month_data.year == current_year %}aria-disabled="true"{% endif %}>
<div class="d-flex justify-content-between"> <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 %}" <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 }}> href={{ month_data.url }}>
{{ month_data.month|month_name }}</a> {{ month_data.month|month_name }}</a>
<span class="badge text-bg-secondary">{{ month_data.transaction_count }}</span> <span class="badge text-bg-secondary">{{ month_data.transaction_count }}</span>
</div> </div>
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
</div>
{% endfor %}
</div>
<hr>
<div class="w-full text-end">
<a class="btn btn-outline-primary btn-sm" href="{{ today_url }}" role="button" hx-boost="true">{% trans 'Today' %}</a>
</div> </div>
{% endfor %}
</div>
{% endblock %} {% endblock %}
+14 -24
View File
@@ -33,7 +33,7 @@
</div> </div>
{% endif %} {% endif %}
</div> </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#} {# Date#}
<div class="row mb-2 mb-lg-1 tw:text-gray-400"> <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> <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 %} {% endwith %}
</div> </div>
</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"> <div class="main-amount mb-2 mb-lg-0">
<c-amount.display <c-amount.display
:amount="transaction.amount" :amount="transaction.amount"
@@ -120,8 +120,8 @@
<div> <div>
{# Item actions#} {# Item actions#}
<div <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"> 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-row gap-1"> <div class="card-body p-1 shadow-lg d-flex flex-column flex-md-row gap-1">
{% if not transaction.deleted %} {% if not transaction.deleted %}
<a class="btn btn-secondary btn-sm transaction-action" <a class="btn btn-secondary btn-sm transaction-action"
role="button" role="button"
@@ -146,26 +146,16 @@
<i class="fa-solid fa-ellipsis fa-fw"></i> <i class="fa-solid fa-ellipsis fa-fw"></i>
</button> </button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-md-start"> <ul class="dropdown-menu dropdown-menu-end dropdown-menu-md-start">
{% if transaction.account.is_untracked_by %} {% if transaction.category.mute %}
<li> <li>
<a class="dropdown-item disabled d-flex align-items-center" aria-disabled="true"> <a class="dropdown-item disabled d-flex align-items-center" aria-disabled="true">
<i class="fa-solid fa-eye fa-fw me-2"></i> <i class="fa-solid fa-eye fa-fw me-2"></i>
<div> <div>
{% translate 'Show on summaries' %} {% translate 'Show on summaries' %}
<div class="d-block text-body-secondary tw:text-xs tw:font-medium">{% translate 'Controlled by account' %}</div> <div class="d-block text-body-secondary tw:text-xs tw:font-medium">{% translate 'Controlled by category' %}</div>
</div> </div>
</a> </a>
</li> </li>
{% elif transaction.category.mute %}
<li>
<a class="dropdown-item disabled d-flex align-items-center" aria-disabled="true">
<i class="fa-solid fa-eye fa-fw me-2"></i>
<div>
{% translate 'Show on summaries' %}
<div class="d-block text-body-secondary tw:text-xs tw:font-medium">{% translate 'Controlled by category' %}</div>
</div>
</a>
</li>
{% elif transaction.mute %} {% 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> <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 %} {% else %}
@@ -6,7 +6,7 @@
{% block body %} {% block body %}
<div class="container p-3"> <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 %} {% crispy form %}
</form> </form>
</div> </div>
@@ -11,7 +11,7 @@ init
end end
on htmx:afterSettle on htmx:afterSettle
call initTooltips(body) call initTooltips(event.detail.target)
end end
on tooltips on tooltips
+4 -4
View File
@@ -138,8 +138,8 @@
<div class="mt-auto p-2 w-100"> <div class="mt-auto p-2 w-100">
<div id="collapsible-panel" <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"> 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 tw:flex tw:flex-col"> <div class="tw:h-dvh tw:backdrop-blur-3xl">
<!-- Header --> <!-- Header -->
<div <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"> 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> </button>
</div> </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"> style="animation-duration: 100ms">
<c-components.sidebar-menu-header title="{% translate 'Transactions' %}"></c-components.sidebar-menu-header> <c-components.sidebar-menu-header title="{% translate 'Transactions' %}"></c-components.sidebar-menu-header>
<c-components.sidebar-menu-item <c-components.sidebar-menu-item
@@ -261,7 +261,7 @@
</div> </div>
{% endif %} {% 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" <button type="button" class="btn btn-secondary btn-sm" data-bs-toggle="tooltip"
data-bs-title="{% trans "Calculator" %}" data-bs-title="{% trans "Calculator" %}"
_="on click trigger show on #calculator"> _="on click trigger show on #calculator">
@@ -1,7 +1,7 @@
{% load i18n %} {% load i18n %}
<div hx-get="{% url 'category_overview' %}" hx-trigger="updated from:window" class="show-loading" hx-swap="outerHTML" <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="h-100 text-center mb-4">
<div class="btn-group gap-3" role="group" id="view-type" _="on change trigger updated"> <div class="btn-group gap-3" role="group" id="view-type" _="on change trigger updated">
<input type="radio" class="btn-check" <input type="radio" class="btn-check"
@@ -25,34 +25,19 @@
</div> </div>
</div> </div>
<div class="mt-3 mb-1 d-flex flex-column flex-md-row justify-content-between"> <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' %} {% if view_type == 'table' %}
<div class="form-check form-switch" id="show-tags"> <input type="hidden" name="show_tags" value="off">
<input type="hidden" name="show_tags" value="off"> <input class="form-check-input" type="checkbox" role="switch" id="show-tags-switch" name="show_tags"
<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 %}>
_="on change trigger updated" {% if show_tags %}checked{% endif %}> {% spaceless %}
{% spaceless %} <label class="form-check-label" for="show-tags-switch">
<label class="form-check-label" for="show-tags-switch"> {% trans 'Tags' %}
{% trans 'Tags' %} </label>
</label> <c-ui.help-icon
<c-ui.help-icon content="{% trans 'Transaction amounts associated with multiple tags will be counted once for each tag' %}"
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>
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon> {% endspaceless %}
{% endspaceless %}
</div>
<div class="form-check form-switch" id="show-entities" {% if not show_tags %}style="display: none;"{% endif %}>
<input type="hidden" name="show_entities" value="off">
<input class="form-check-input" type="checkbox" role="switch" id="show-entities-switch" name="show_entities"
_="on change trigger updated" {% if show_entities %}checked{% endif %}>
{% spaceless %}
<label class="form-check-label" for="show-entities-switch">
{% trans 'Entities' %}
</label>
<c-ui.help-icon
content="{% trans 'Transaction amounts associated with multiple tags and entities will be counted once for each tag' %}"
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
{% endspaceless %}
</div>
{% endif %} {% endif %}
</div> </div>
<div class="btn-group btn-group-sm" role="group" id="showing" _="on change trigger updated"> <div class="btn-group btn-group-sm" role="group" id="showing" _="on change trigger updated">
@@ -265,100 +250,6 @@
{% endfor %} {% endfor %}
</td> </td>
</tr> </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 %} {% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
+2
View File
@@ -46,6 +46,8 @@
</div> </div>
{% endif %} {% endif %}
<div class="container" hx-get="{% url 'setup' %}" hx-trigger="load, updated from:window"></div>
<div id="content"> <div id="content">
{% block content %}{% endblock %} {% block content %}{% endblock %}
</div> </div>
+68
View 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>
-64
View File
@@ -1,66 +1,2 @@
import htmx from "htmx.org"; import htmx from "htmx.org";
window.htmx = htmx; 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;
}
},
});
-4
View File
@@ -85,7 +85,3 @@ select[multiple] {
[data-bs-toggle="collapse"][aria-expanded="true"] .fa-chevron-down { [data-bs-toggle="collapse"][aria-expanded="true"] .fa-chevron-down {
transform: rotate(-180deg); transform: rotate(-180deg);
} }
div:where(.swal2-container) {
z-index: 1100 !important;
}