Compare commits

..

55 Commits

Author SHA1 Message Date
Herculino Trotta
a461a33dc2 Merge pull request #256
feat(net-worth): display consolidated amounts for currencies without transactions
2025-05-12 20:45:09 -03:00
Herculino Trotta
1213ffebeb feat(transactions:calculations): add deep_search param to return consolidated amounts for currencies without transactions / sort results by their final total 2025-05-12 20:43:47 -03:00
Herculino Trotta
c5a352cf4d feat(networth): only display consolidated amounts if they're different from the total 2025-05-12 20:33:50 -03:00
Herculino Trotta
cfcca54aa6 fix(networth): consolidated color doesn't reflect consolidated amount 2025-05-12 20:29:43 -03:00
Felix
234f8cd669 locale(Ukrainian): update translation
Currently translated at 14.7% (96 of 651 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/uk/
2025-05-12 14:16:54 +00:00
eitchtee
43184140f0 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-05-11 15:47:57 +00:00
Herculino Trotta
acc325c150 Merge pull request #254
fix(api:accounts): unable to create an account with an account group
2025-05-11 12:47:23 -03:00
Herculino Trotta
46eb471a34 fix(api:transactions): wrong schema definition for TransactionCategory 2025-05-11 12:46:30 -03:00
Herculino Trotta
6dc14c73d6 fix(api:accounts): unable to create an account with an account group
Fixes #253
2025-05-11 12:41:26 -03:00
Felix
f942924e7c locale((Ukrainian)): added translation using Weblate 2025-05-11 06:23:59 +00:00
Dimitri Decrock
aa6019e0a9 locale(Dutch): update translation
Currently translated at 100.0% (651 of 651 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-05-01 09:16:53 +00:00
Herculino Trotta
9dfbd346bc locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (651 of 651 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-04-27 20:17:02 +00:00
Herculino Trotta
73b1d36dfd Merge remote-tracking branch 'weblate/main'
fix
2025-04-27 17:14:20 -03:00
Herculino Trotta
3662fb030a merge conflit 2025-04-27 16:48:38 -03:00
ThomasE
a423ee1032 locale(French): update translation
Currently translated at 46.6% (303 of 650 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-04-27 19:12:34 +00:00
eitchtee
72eb59d24f chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-04-27 19:12:31 +00:00
Herculino Trotta
1a0247e028 Merge pull request #252
fix: duplicate totals when account is shared with owner & prevent SharedObject from being shared with owner
2025-04-27 16:11:49 -03:00
Herculino Trotta
281a0fccda fix: prevent SharedObjects from being shared with their owner
#247
2025-04-27 16:07:54 -03:00
Herculino Trotta
59ce50299a fix(transactions): duplicate totals when account is shared with owner or owner-less and shared
#247
2025-04-27 15:57:55 -03:00
Dimitri Decrock
be89509beb locale(Dutch): update translation
Currently translated at 100.0% (650 of 650 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-04-26 11:16:53 +00:00
H4ndrew
80cded234d locale(French): update translation
Currently translated at 45.3% (295 of 650 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-04-23 09:16:53 +00:00
H4ndrew
030bb63586 locale(French): update translation
Currently translated at 39.3% (256 of 650 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-04-22 13:16:53 +00:00
H4ndrew
66e8fc5884 locale(French): update translation
Currently translated at 36.6% (238 of 650 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-04-22 11:16:53 +00:00
Dimitri Decrock
363047337d locale(Dutch): update translation
Currently translated at 99.8% (649 of 650 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-04-22 05:16:53 +00:00
eitchtee
c7e32d1576 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-04-21 18:45:41 +00:00
Herculino Trotta
157e59a1d1 Merge pull request #250
fix(transactions): save and add similar not initializing dates properly
2025-04-21 15:45:05 -03:00
Herculino Trotta
d9c505ac79 fix(transactions): save and add similar not initializing dates properly
Fixes #248
2025-04-21 15:44:42 -03:00
Herculino Trotta
7274a13f3c Merge pull request #249
fix(accounts): unable to share some accounts; wrong url getting used
2025-04-21 14:33:41 -03:00
Herculino Trotta
5d64665ddd fix(accounts): unable to share some accounts; wrong url getting used 2025-04-21 14:33:11 -03:00
Herculino Trotta
e0d92d15c8 locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (650 of 650 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-04-20 21:16:53 +00:00
eitchtee
48dd658627 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-04-20 18:57:34 +00:00
Herculino Trotta
80dbbd02f0 Merge pull request #246 from eitchtee/dev
feat(transactions): add another transaction (or a similar one)
2025-04-20 15:56:58 -03:00
Herculino Trotta
4b7ca61c29 feat(transactions): add another transaction (or a similar one) right after adding one 2025-04-20 15:55:50 -03:00
eitchtee
b2f04ae1f9 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-04-19 15:30:24 +00:00
Herculino Trotta
f34d4b5e28 Merge pull request #245 from eitchtee/dev
feat(insights:category-overview): pick between Projected/Current/Final totals
2025-04-19 12:28:50 -03:00
Herculino Trotta
d2ebfbd615 feat(insights:category-overview): pick between Projected/Current/Final totals 2025-04-19 12:28:22 -03:00
Herculino Trotta
812abbe488 feat(insights:category-overview): pick between Projected/Current/Final totals 2025-04-19 12:16:21 -03:00
eitchtee
9602a4affc chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-04-19 05:41:07 +00:00
Herculino Trotta
bf548c0747 Merge pull request #244 from eitchtee/dev
feat(insights:category-overview): display tags breakdown alongside categories
2025-04-19 02:40:26 -03:00
Herculino Trotta
55ad2be08b feat(insights:category-overview): display tags breakdown alongside categories 2025-04-19 02:36:38 -03:00
eitchtee
2cd58c2464 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-04-19 05:36:33 +00:00
Herculino Trotta
4675ba9d56 Merge pull request #243
feat(insights:category-overview): select if you want to view table or bar charts, defaults to table
2025-04-19 02:35:55 -03:00
Herculino Trotta
a25c992d5c feat(cotton): convert help icon to cotton template; allow setting custom icon 2025-04-19 02:34:16 -03:00
Herculino Trotta
2eadfe99a5 feat(insights:category-overview): select if you want to view table or bar charts, defaults to table 2025-04-19 00:00:31 -03:00
Herculino Trotta
11086a726f fix(insights): missing page title 2025-04-18 23:59:32 -03:00
Herculino Trotta
cd99b40b0a Merge pull request #242
fix(users): users doesn't activate management menu entry
2025-04-18 15:08:19 -03:00
Herculino Trotta
63aa51dc0d fix(users): users doesn't activate management menu entry 2025-04-18 15:08:00 -03:00
eitchtee
4708c5bc7e chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-04-18 18:05:59 +00:00
Herculino Trotta
5a8462c050 Merge pull request #241
fix(users): disables profile editing on demo mode
2025-04-18 15:05:24 -03:00
Herculino Trotta
6cac02e01f fix(users): disables profile editing on demo mode 2025-04-18 15:04:58 -03:00
Dimitri Decrock
8d12ceeebb locale(Dutch): update translation
Currently translated at 100.0% (643 of 643 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-04-14 08:16:53 +00:00
Emil
4681d3ca1d locale(Swedish): update translation
Currently translated at 0.1% (1 of 643 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/sv/
2025-04-14 06:16:53 +00:00
Dimitri Decrock
60ded03ea9 locale(Dutch): update translation
Currently translated at 96.5% (621 of 643 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-04-14 06:16:53 +00:00
Emil
b20d137dc3 locale((Swedish)): added translation using Weblate 2025-04-14 05:02:06 +00:00
Herculino Trotta
29ca6eed6c locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (643 of 643 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-04-13 23:16:53 +00:00
28 changed files with 8848 additions and 1708 deletions

View File

@@ -51,7 +51,7 @@ urlpatterns = [
),
path(
"account-groups/<int:pk>/share/",
views.account_share,
views.account_group_share,
name="account_group_share_settings",
),
]

View File

@@ -145,7 +145,7 @@ def account_group_take_ownership(request, pk):
@only_htmx
@login_required
@require_http_methods(["GET", "POST"])
def account_share(request, pk):
def account_group_share(request, pk):
obj = get_object_or_404(AccountGroup, id=pk)
if obj.owner and obj.owner != request.user:

View File

@@ -41,7 +41,10 @@ class TransactionCategoryField(serializers.Field):
def get_schema():
return {
"type": "array",
"items": {"type": "string", "description": "TransactionTag ID or name"},
"items": {
"type": "string",
"description": "TransactionCategory ID or name",
},
}

View File

@@ -1,3 +1,4 @@
from django.db.models import Q
from rest_framework import serializers
from rest_framework.permissions import IsAuthenticated
@@ -22,6 +23,7 @@ class AccountSerializer(serializers.ModelSerializer):
write_only=True,
allow_null=True,
)
currency = CurrencySerializer(read_only=True)
currency_id = serializers.PrimaryKeyRelatedField(
queryset=Currency.objects.all(), source="currency", write_only=True
@@ -50,6 +52,13 @@ class AccountSerializer(serializers.ModelSerializer):
"is_asset",
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
request = self.context.get("request")
if request and request.user.is_authenticated:
# Reload the queryset to get an updated version with the requesting user
self.fields["group_id"].queryset = AccountGroup.objects.all()
def create(self, validated_data):
return Account.objects.create(**validated_data)

View File

@@ -2,6 +2,7 @@ from crispy_forms.bootstrap import FormActions
from django import forms
from django.contrib.auth import get_user_model
from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field, Submit, Div, HTML
@@ -81,6 +82,23 @@ class SharedObjectForm(forms.Form):
),
)
def clean(self):
cleaned_data = super().clean()
owner = cleaned_data.get("owner")
shared_with_users = cleaned_data.get("shared_with_users", [])
# Raise validation error if owner is in shared_with_users
if owner and owner in shared_with_users:
self.add_error(
"shared_with_users",
ValidationError(
_("You cannot share this item with its owner."),
code="invalid_share",
),
)
return cleaned_data
def save(self):
instance = self.instance

View File

@@ -10,7 +10,7 @@ from apps.currencies.utils.convert import convert
def get_categories_totals(transactions_queryset, ignore_empty=False):
# Get metrics for each category and currency in a single query
# First get the category totals as before
category_currency_metrics = (
transactions_queryset.values(
"category",
@@ -74,9 +74,65 @@ def get_categories_totals(transactions_queryset, ignore_empty=False):
.order_by("category__name")
)
# Get tag totals within each category with currency details
tag_metrics = transactions_queryset.values(
"category",
"tags",
"tags__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"),
),
)
# Process the results to structure by category
result = {}
# Process category totals first
for metric in category_currency_metrics:
# Skip empty categories if ignore_empty is True
if ignore_empty and all(
@@ -101,7 +157,11 @@ def get_categories_totals(transactions_queryset, ignore_empty=False):
currency_id = metric["account__currency"]
if category_id not in result:
result[category_id] = {"name": metric["category__name"], "currencies": {}}
result[category_id] = {
"name": metric["category__name"],
"currencies": {},
"tags": {}, # Add tags container
}
# Add currency data
currency_data = {
@@ -162,4 +222,101 @@ def get_categories_totals(transactions_queryset, ignore_empty=False):
result[category_id]["currencies"][currency_id] = currency_data
# Process tag totals and add them to the result, including untagged
for tag_metric in tag_metrics:
category_id = tag_metric["category"]
tag_id = tag_metric["tags"] # Will be None for untagged transactions
if category_id in result:
# Initialize the tag container if not exists
if "tags" not in result[category_id]:
result[category_id]["tags"] = {}
# Determine if this is a tagged or untagged transaction
tag_key = tag_id if tag_id is not None else "untagged"
tag_name = tag_metric["tags__name"] if tag_id is not None else None
if tag_key not in result[category_id]["tags"]:
result[category_id]["tags"][tag_key] = {
"name": tag_name,
"currencies": {},
}
currency_id = tag_metric["account__currency"]
# Calculate tag totals
tag_total_current = (
tag_metric["income_current"] - tag_metric["expense_current"]
)
tag_total_projected = (
tag_metric["income_projected"] - tag_metric["expense_projected"]
)
tag_total_income = (
tag_metric["income_current"] + tag_metric["income_projected"]
)
tag_total_expense = (
tag_metric["expense_current"] + tag_metric["expense_projected"]
)
tag_total_final = tag_total_current + tag_total_projected
tag_currency_data = {
"currency": {
"code": tag_metric["account__currency__code"],
"name": tag_metric["account__currency__name"],
"decimal_places": tag_metric["account__currency__decimal_places"],
"prefix": tag_metric["account__currency__prefix"],
"suffix": tag_metric["account__currency__suffix"],
},
"expense_current": tag_metric["expense_current"],
"expense_projected": tag_metric["expense_projected"],
"total_expense": tag_total_expense,
"income_current": tag_metric["income_current"],
"income_projected": tag_metric["income_projected"],
"total_income": tag_total_income,
"total_current": tag_total_current,
"total_projected": tag_total_projected,
"total_final": tag_total_final,
}
# Add exchange currency support for tags
if tag_metric["account__currency__exchange_currency"]:
from_currency = Currency.objects.get(id=currency_id)
exchange_currency = Currency.objects.get(
id=tag_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=tag_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:
tag_currency_data["exchanged"] = exchanged
result[category_id]["tags"][tag_key]["currencies"][
currency_id
] = tag_currency_data
return result

View File

@@ -168,6 +168,24 @@ def category_sum_by_currency(request):
@login_required
@require_http_methods(["GET"])
def category_overview(request):
if "view_type" in request.GET:
view_type = request.GET["view_type"]
request.session["insights_category_explorer_view_type"] = view_type
else:
view_type = request.session.get("insights_category_explorer_view_type", "table")
if "show_tags" in request.GET:
show_tags = request.GET["show_tags"] == "on"
request.session["insights_category_explorer_show_tags"] = show_tags
else:
show_tags = request.session.get("insights_category_explorer_show_tags", True)
if "showing" in request.GET:
showing = request.GET["showing"]
request.session["insights_category_explorer_showing"] = showing
else:
showing = request.session.get("insights_category_explorer_showing", "final")
# Get filtered transactions
transactions = get_transactions(request, include_silent=True)
@@ -178,7 +196,12 @@ def category_overview(request):
return render(
request,
"insights/fragments/category_overview/index.html",
{"total_table": total_table},
{
"total_table": total_table,
"view_type": view_type,
"show_tags": show_tags,
"showing": showing,
},
)

View File

@@ -32,7 +32,7 @@ def net_worth_current(request):
)
currency_net_worth = calculate_currency_totals(
transactions_queryset=transactions_currency_queryset
transactions_queryset=transactions_currency_queryset, deep_search=True
)
account_net_worth = calculate_account_totals(
transactions_queryset=transactions_account_queryset
@@ -137,7 +137,7 @@ def net_worth_projected(request):
)
currency_net_worth = calculate_currency_totals(
transactions_queryset=transactions_currency_queryset
transactions_queryset=transactions_currency_queryset, deep_search=True
)
account_net_worth = calculate_account_totals(
transactions_queryset=transactions_account_queryset

View File

@@ -6,6 +6,7 @@ from crispy_forms.layout import (
Row,
Column,
Field,
Div,
)
from django import forms
from django.db.models import Q
@@ -206,10 +207,21 @@ class TransactionForm(forms.ModelForm):
else:
self.fields["amount"].widget = ArbitraryDecimalDisplayNumberInput()
self.helper.layout.append(
FormActions(
Div(
NoClassSubmit(
"submit", _("Add"), css_class="btn btn-outline-primary w-100"
"submit", _("Add"), css_class="btn btn-outline-primary"
),
NoClassSubmit(
"submit_and_similar",
_("Save and add similar"),
css_class="btn btn-outline-primary",
),
NoClassSubmit(
"submit_and_another",
_("Save and add another"),
css_class="btn btn-outline-primary",
),
css_class="d-grid gap-2",
),
)

View File

@@ -118,13 +118,20 @@ class SoftDeleteManager(models.Manager):
qs = SoftDeleteQuerySet(self.model, using=self._db)
user = get_current_user()
if user and not user.is_anonymous:
return qs.filter(
Q(account__visibility="public")
| Q(account__owner=user)
| Q(account__shared_with=user)
| Q(account__visibility="private", account__owner=None),
deleted=False,
).distinct()
account_ids = (
qs.filter(
Q(account__visibility="public")
| Q(account__owner=user)
| Q(account__shared_with=user)
| Q(account__visibility="private", account__owner=None),
deleted=False,
)
.values_list("account__id", flat=True)
.distinct()
)
return qs.filter(account_id__in=account_ids, deleted=False)
else:
return qs.filter(
deleted=False,

View File

@@ -9,9 +9,11 @@ from apps.currencies.utils.convert import convert
from apps.currencies.models import Currency
def calculate_currency_totals(transactions_queryset, ignore_empty=False):
def calculate_currency_totals(
transactions_queryset, ignore_empty=False, deep_search=False
):
# Prepare the aggregation expressions
currency_totals = (
currency_totals_from_transactions = (
transactions_queryset.values(
"account__currency",
"account__currency__code",
@@ -19,7 +21,14 @@ def calculate_currency_totals(transactions_queryset, ignore_empty=False):
"account__currency__decimal_places",
"account__currency__prefix",
"account__currency__suffix",
"account__currency__exchange_currency",
"account__currency__exchange_currency", # ID of the exchange currency for the account's currency
# Fields for the exchange currency itself (if account.currency.exchange_currency is set)
# These might be null if not set, so handle appropriately.
"account__currency__exchange_currency__code",
"account__currency__exchange_currency__name",
"account__currency__exchange_currency__decimal_places",
"account__currency__exchange_currency__prefix",
"account__currency__exchange_currency__suffix",
)
.annotate(
expense_current=Coalesce(
@@ -72,36 +81,55 @@ def calculate_currency_totals(transactions_queryset, ignore_empty=False):
.order_by()
)
# First pass: Process basic totals and store all currency data
result = {}
currencies_using_exchange = (
{}
) # Track which currencies use which exchange currencies
# currencies_using_exchange maps:
# exchange_currency_id -> list of [
# { "currency_id": original_currency_id, (the currency that was exchanged FROM)
# "exchanged": { field: amount_in_exchange_currency, ... } (the values of original_currency_id converted TO exchange_currency_id)
# }
# ]
currencies_using_exchange = {}
for total in currency_totals:
# Skip empty currencies if ignore_empty is True
if ignore_empty and all(
total[field] == Decimal("0")
for field in [
"expense_current",
"expense_projected",
"income_current",
"income_projected",
]
# --- First Pass: Process transactions from the queryset ---
for total in currency_totals_from_transactions:
if (
ignore_empty
and not deep_search
and all(
total[field] == Decimal("0")
for field in [
"expense_current",
"expense_projected",
"income_current",
"income_projected",
]
)
):
continue
# Calculate derived totals
currency_id = total["account__currency"]
try:
from_currency_obj = Currency.objects.get(id=currency_id)
except Currency.DoesNotExist:
# This should ideally not happen if database is consistent
continue
exchange_currency_for_this_total_id = total[
"account__currency__exchange_currency"
]
exchange_currency_obj_for_this_total = None
if exchange_currency_for_this_total_id:
try:
# Use pre-fetched values if available, otherwise query
exchange_currency_obj_for_this_total = Currency.objects.get(
id=exchange_currency_for_this_total_id
)
except Currency.DoesNotExist:
pass # Exchange currency might not exist or be set
total_current = total["income_current"] - total["expense_current"]
total_projected = total["income_projected"] - total["expense_projected"]
total_final = total_current + total_projected
currency_id = total["account__currency"]
from_currency = Currency.objects.get(id=currency_id)
exchange_currency = (
Currency.objects.get(id=total["account__currency__exchange_currency"])
if total["account__currency__exchange_currency"]
else None
)
currency_data = {
"currency": {
@@ -120,9 +148,16 @@ def calculate_currency_totals(transactions_queryset, ignore_empty=False):
"total_final": total_final,
}
# Add exchanged values if exchange_currency exists
if exchange_currency:
exchanged = {}
if exchange_currency_obj_for_this_total:
exchanged_details = {
"currency": {
"code": exchange_currency_obj_for_this_total.code,
"name": exchange_currency_obj_for_this_total.name,
"decimal_places": exchange_currency_obj_for_this_total.decimal_places,
"prefix": exchange_currency_obj_for_this_total.prefix,
"suffix": exchange_currency_obj_for_this_total.suffix,
}
}
for field in [
"expense_current",
"expense_projected",
@@ -132,50 +167,142 @@ def calculate_currency_totals(transactions_queryset, ignore_empty=False):
"total_projected",
"total_final",
]:
amount, prefix, suffix, decimal_places = convert(
amount=currency_data[field],
from_currency=from_currency,
to_currency=exchange_currency,
amount_to_convert = currency_data[field]
converted_val, _, _, _ = convert(
amount=amount_to_convert,
from_currency=from_currency_obj,
to_currency=exchange_currency_obj_for_this_total,
)
exchanged_details[field] = (
converted_val if converted_val is not None else Decimal("0")
)
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:
currency_data["exchanged"] = exchanged
# Track which currencies are using which exchange currencies
if exchange_currency.id not in currencies_using_exchange:
currencies_using_exchange[exchange_currency.id] = []
currencies_using_exchange[exchange_currency.id].append(
{"currency_id": currency_id, "exchanged": exchanged}
)
currency_data["exchanged"] = exchanged_details
if exchange_currency_obj_for_this_total.id not in currencies_using_exchange:
currencies_using_exchange[exchange_currency_obj_for_this_total.id] = []
currencies_using_exchange[exchange_currency_obj_for_this_total.id].append(
{"currency_id": currency_id, "exchanged": exchanged_details}
)
result[currency_id] = currency_data
# Second pass: Add consolidated totals for currencies that are used as exchange currencies
for currency_id, currency_data in result.items():
if currency_id in currencies_using_exchange:
consolidated = {
"currency": currency_data["currency"].copy(),
"expense_current": currency_data["expense_current"],
"expense_projected": currency_data["expense_projected"],
"income_current": currency_data["income_current"],
"income_projected": currency_data["income_projected"],
"total_current": currency_data["total_current"],
"total_projected": currency_data["total_projected"],
"total_final": currency_data["total_final"],
}
# --- Deep Search: Add transaction-less currencies that are exchange targets ---
if deep_search:
# Iteratively add exchange targets that might not have had direct transactions
# Start with known exchange targets from the first pass
queue = list(currencies_using_exchange.keys())
processed_for_deep_add = set(
result.keys()
) # Track currencies already in result or added by this deep search step
# Add exchanged values from all currencies using this as exchange currency
for using_currency in currencies_using_exchange[currency_id]:
exchanged = using_currency["exchanged"]
while queue:
target_id = queue.pop(0)
if target_id in processed_for_deep_add:
continue
processed_for_deep_add.add(target_id)
if (
target_id not in result
): # If this exchange target had no direct transactions
try:
db_currency = Currency.objects.get(id=target_id)
except Currency.DoesNotExist:
continue
# Initialize data for this transaction-less exchange target currency
currency_data_for_db_currency = {
"currency": {
"code": db_currency.code,
"name": db_currency.name,
"decimal_places": db_currency.decimal_places,
"prefix": db_currency.prefix,
"suffix": db_currency.suffix,
},
"expense_current": Decimal("0"),
"expense_projected": Decimal("0"),
"income_current": Decimal("0"),
"income_projected": Decimal("0"),
"total_current": Decimal("0"),
"total_projected": Decimal("0"),
"total_final": Decimal("0"),
}
# If this newly added transaction-less currency ALSO has an exchange_currency set for itself
if db_currency.exchange_currency:
exchanged_details_for_db_currency = {
"currency": {
"code": db_currency.exchange_currency.code,
"name": db_currency.exchange_currency.name,
"decimal_places": db_currency.exchange_currency.decimal_places,
"prefix": db_currency.exchange_currency.prefix,
"suffix": db_currency.exchange_currency.suffix,
}
}
for field in [
"expense_current",
"expense_projected",
"income_current",
"income_projected",
"total_current",
"total_projected",
"total_final",
]:
converted_val, _, _, _ = convert(
Decimal("0"), db_currency, db_currency.exchange_currency
)
exchanged_details_for_db_currency[field] = (
converted_val if converted_val is not None else Decimal("0")
)
currency_data_for_db_currency["exchanged"] = (
exchanged_details_for_db_currency
)
# Ensure its own exchange_currency is registered in currencies_using_exchange
# and add it to the queue if it hasn't been processed yet for deep add.
target_id_for_this_db_curr = db_currency.exchange_currency.id
if target_id_for_this_db_curr not in currencies_using_exchange:
currencies_using_exchange[target_id_for_this_db_curr] = []
# Avoid adding duplicate entries
already_present_in_cue = any(
entry["currency_id"] == db_currency.id
for entry in currencies_using_exchange[
target_id_for_this_db_curr
]
)
if not already_present_in_cue:
currencies_using_exchange[target_id_for_this_db_curr].append(
{
"currency_id": db_currency.id,
"exchanged": exchanged_details_for_db_currency,
}
)
if target_id_for_this_db_curr not in processed_for_deep_add:
queue.append(target_id_for_this_db_curr)
result[db_currency.id] = currency_data_for_db_currency
# --- Second Pass: Calculate consolidated totals for all currencies in result ---
for currency_id_consolidated, data_consolidated_currency in result.items():
consolidated_data = {
"currency": data_consolidated_currency["currency"].copy(),
"expense_current": data_consolidated_currency["expense_current"],
"expense_projected": data_consolidated_currency["expense_projected"],
"income_current": data_consolidated_currency["income_current"],
"income_projected": data_consolidated_currency["income_projected"],
"total_current": data_consolidated_currency["total_current"],
"total_projected": data_consolidated_currency["total_projected"],
"total_final": data_consolidated_currency["total_final"],
}
if currency_id_consolidated in currencies_using_exchange:
for original_currency_info in currencies_using_exchange[
currency_id_consolidated
]:
exchanged_values_from_original = original_currency_info["exchanged"]
for field in [
"expense_current",
"expense_projected",
@@ -185,10 +312,25 @@ def calculate_currency_totals(transactions_queryset, ignore_empty=False):
"total_projected",
"total_final",
]:
if field in exchanged:
consolidated[field] += exchanged[field]
if field in exchanged_values_from_original:
consolidated_data[field] += exchanged_values_from_original[
field
]
result[currency_id]["consolidated"] = consolidated
result[currency_id_consolidated]["consolidated"] = consolidated_data
# Sort currencies by their final_total or consolidated final_total, descending
result = {
k: v
for k, v in sorted(
result.items(),
reverse=True,
key=lambda item: max(
item[1].get("total_final", Decimal("0")),
item[1].get("consolidated", {}).get("total_final", Decimal("0")),
),
)
}
return result

View File

@@ -43,16 +43,71 @@ def transaction_add(request):
year=year,
).date()
update = False
if request.method == "POST":
form = TransactionForm(request.POST)
if form.is_valid():
form.save()
saved_instance = form.save()
messages.success(request, _("Transaction added successfully"))
return HttpResponse(
status=204,
headers={"HX-Trigger": "updated, hide_offcanvas"},
)
if "submit" in request.POST:
return HttpResponse(
status=204,
headers={"HX-Trigger": "updated, hide_offcanvas"},
)
elif "submit_and_another" in request.POST:
form = TransactionForm(
initial={
"date": expected_date,
"type": transaction_type,
},
)
update = True
elif "submit_and_similar" in request.POST:
initial_data = {}
# Define fields to copy from the SAVED instance
direct_fields_to_copy = [
"account", # ForeignKey -> will copy the ID
"type", # ChoiceField -> will copy the value
"is_paid", # BooleanField -> will copy True/False
"date", # DateField -> will copy the date object
"reference_date", # DateField -> will copy the date object
"amount", # DecimalField -> will copy the decimal
"description", # CharField -> will copy the string
"notes", # TextField -> will copy the string
"category", # ForeignKey -> will copy the ID
]
m2m_fields_to_copy = [
"tags", # ManyToManyField -> will copy list of IDs
"entities", # ManyToManyField -> will copy list of IDs
]
# Copy direct fields from the saved instance
for field_name in direct_fields_to_copy:
value = getattr(saved_instance, field_name, None)
if value is not None:
# Handle ForeignKey: use the pk
if hasattr(value, "pk"):
initial_data[field_name] = value.pk
# Handle Date/DateTime/Decimal/Boolean/etc.: use the Python object directly
else:
initial_data[field_name] = (
value # This correctly handles date objects!
)
# Copy M2M fields: provide a list of related object pks
for field_name in m2m_fields_to_copy:
m2m_manager = getattr(saved_instance, field_name)
initial_data[field_name] = list(
m2m_manager.values_list("name", flat=True)
)
# Create a new form instance pre-filled with the correctly typed initial data
form = TransactionForm(initial=initial_data)
update = True # Signal HTMX to update the form area
else:
form = TransactionForm(
initial={
@@ -61,11 +116,15 @@ def transaction_add(request):
},
)
return render(
response = render(
request,
"transactions/fragments/add.html",
{"form": form},
)
if update:
response["HX-Trigger"] = "updated"
return response
@login_required

View File

@@ -20,6 +20,7 @@ from apps.users.forms import (
UserAddForm,
)
from apps.users.models import UserSettings
from apps.common.decorators.demo import disabled_on_demo
def logout_view(request):
@@ -168,6 +169,7 @@ def user_add(request):
@only_htmx
@htmx_login_required
@disabled_on_demo
@require_http_methods(["GET", "POST"])
def user_edit(request, pk):
user = get_object_or_404(get_user_model(), id=pk)

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-04-13 22:01+0000\n"
"POT-Creation-Date: 2025-05-11 15:47+0000\n"
"PO-Revision-Date: 2025-04-13 02:40+0000\n"
"Last-Translator: Prefill add-on <noreply-addon-prefill@weblate.org>\n"
"Language-Team: German <https://translations.herculino.com/projects/wygiwyh/"
@@ -27,10 +27,10 @@ msgstr "Gruppe Name"
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:202
#: apps/transactions/forms.py:269 apps/transactions/forms.py:629
#: apps/transactions/forms.py:672 apps/transactions/forms.py:704
#: apps/transactions/forms.py:739 apps/transactions/forms.py:891
#: apps/rules/forms.py:365 apps/transactions/forms.py:203
#: apps/transactions/forms.py:281 apps/transactions/forms.py:641
#: apps/transactions/forms.py:684 apps/transactions/forms.py:716
#: apps/transactions/forms.py:751 apps/transactions/forms.py:903
#: apps/users/forms.py:210 apps/users/forms.py:372
msgid "Update"
msgstr "Aktualisierung"
@@ -40,10 +40,10 @@ msgstr "Aktualisierung"
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
#: apps/transactions/forms.py:187 apps/transactions/forms.py:211
#: apps/transactions/forms.py:637 apps/transactions/forms.py:680
#: apps/transactions/forms.py:712 apps/transactions/forms.py:747
#: apps/transactions/forms.py:899 apps/users/forms.py:218
#: apps/transactions/forms.py:188 apps/transactions/forms.py:212
#: apps/transactions/forms.py:649 apps/transactions/forms.py:692
#: apps/transactions/forms.py:724 apps/transactions/forms.py:759
#: apps/transactions/forms.py:911 apps/users/forms.py:218
#: apps/users/forms.py:380 templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -74,12 +74,12 @@ msgstr "Neuer Saldo"
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
#: apps/rules/models.py:38 apps/rules/models.py:286
#: apps/transactions/forms.py:40 apps/transactions/forms.py:303
#: apps/transactions/forms.py:310 apps/transactions/forms.py:510
#: apps/transactions/forms.py:771 apps/transactions/models.py:305
#: apps/transactions/models.py:488 apps/transactions/models.py:688
#: templates/insights/fragments/category_overview/index.html:10
#: templates/insights/fragments/category_overview/index.html:215
#: apps/transactions/forms.py:41 apps/transactions/forms.py:315
#: apps/transactions/forms.py:322 apps/transactions/forms.py:522
#: apps/transactions/forms.py:783 apps/transactions/models.py:312
#: apps/transactions/models.py:495 apps/transactions/models.py:695
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
msgid "Category"
msgstr "Kategorie"
@@ -87,19 +87,20 @@ msgstr "Kategorie"
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:48 apps/transactions/forms.py:319
#: apps/transactions/forms.py:327 apps/transactions/forms.py:503
#: apps/transactions/forms.py:764 apps/transactions/models.py:311
#: apps/transactions/models.py:490 apps/transactions/models.py:692
#: templates/includes/navbar.html:108 templates/tags/fragments/list.html:5
#: templates/tags/pages/index.html:4
#: apps/transactions/forms.py:49 apps/transactions/forms.py:331
#: apps/transactions/forms.py:339 apps/transactions/forms.py:515
#: apps/transactions/forms.py:776 apps/transactions/models.py:318
#: apps/transactions/models.py:497 apps/transactions/models.py:699
#: templates/includes/navbar.html:108
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Tags"
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:198 apps/transactions/models.py:223
#: apps/transactions/models.py:247
#: apps/transactions/models.py:205 apps/transactions/models.py:230
#: apps/transactions/models.py:254
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -164,9 +165,9 @@ msgstr ""
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:60 apps/transactions/forms.py:495
#: apps/transactions/forms.py:756 apps/transactions/models.py:278
#: apps/transactions/models.py:448 apps/transactions/models.py:670
#: apps/transactions/forms.py:61 apps/transactions/forms.py:507
#: apps/transactions/forms.py:768 apps/transactions/models.py:285
#: apps/transactions/models.py:455 apps/transactions/models.py:677
msgid "Account"
msgstr "Konto"
@@ -260,19 +261,19 @@ msgstr "Eine Kategorie mit dieser ID existiert nicht."
msgid "Invalid category data. Provide an ID or name."
msgstr "Ungültige Kategorie-Daten. Gib eine ID oder einen Namen an."
#: apps/api/fields/transactions.py:67
#: apps/api/fields/transactions.py:70
msgid "Tag with this ID does not exist."
msgstr "Tag mit dieser ID existiert nicht."
#: apps/api/fields/transactions.py:77
#: apps/api/fields/transactions.py:80
msgid "Invalid tag data. Provide an ID or name."
msgstr "Ungültige Tag-Daten. Gib eine ID oder einen Namen an."
#: apps/api/fields/transactions.py:102
#: apps/api/fields/transactions.py:105
msgid "Entity with this ID does not exist."
msgstr "Entität mit dieser ID existiert nicht."
#: apps/api/fields/transactions.py:112
#: apps/api/fields/transactions.py:115
msgid "Invalid entity data. Provide an ID or name."
msgstr "Ungültige Entitäts-Daten. Gib eine ID oder einen Namen an."
@@ -300,11 +301,11 @@ msgstr "Ungültiges Datumsformat. Nutze JJJJ-MM."
msgid "Invalid date format. Use YYYY-MM."
msgstr "Ungültiges Datumsformat. Nutze JJJJ-MM."
#: apps/common/forms.py:24
#: apps/common/forms.py:25
msgid "Owner"
msgstr "Besitzer"
#: apps/common/forms.py:27
#: apps/common/forms.py:28
msgid ""
"The owner of this object, if empty all users can see, edit and take "
"ownership."
@@ -312,19 +313,19 @@ msgstr ""
"Der Besitzer dieses Objekts, falls leer können alle Nutzer es sehen, "
"bearbeiten und die Besitzeigenschaft übernehmen."
#: apps/common/forms.py:34
#: apps/common/forms.py:35
msgid "Shared with users"
msgstr "Mit Nutzern geteilt"
#: apps/common/forms.py:35
#: apps/common/forms.py:36
msgid "Select users to share this object with"
msgstr "Nutzer auswählen, mit dem das Objekt geteilt werden soll"
#: apps/common/forms.py:40
#: apps/common/forms.py:41
msgid "Visibility"
msgstr "Sichtbarkeit"
#: apps/common/forms.py:42
#: apps/common/forms.py:43
msgid ""
"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."
@@ -332,10 +333,14 @@ msgstr ""
"Privat: Nur für den Besitzer und geteilte Nutzer sichtbar.<br/>Öffentlich: "
"Sichtbar für alle Nutzer. Nur bearbeitbar durch Besitzer."
#: apps/common/forms.py:79 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:135
msgid "Save"
msgstr "Speichern"
#: apps/common/forms.py:95
msgid "You cannot share this item with its owner."
msgstr ""
#: apps/common/models.py:29
msgid "Private"
msgstr "Privat"
@@ -461,8 +466,8 @@ msgstr "Suffix"
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
#: apps/transactions/forms.py:64 apps/transactions/forms.py:331
#: apps/transactions/models.py:288
#: apps/transactions/forms.py:65 apps/transactions/forms.py:343
#: apps/transactions/models.py:295
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
@@ -543,8 +548,8 @@ msgstr "Dienstname"
msgid "Service Type"
msgstr "Diensttyp"
#: apps/currencies/models.py:110 apps/transactions/models.py:202
#: apps/transactions/models.py:226 apps/transactions/models.py:250
#: apps/currencies/models.py:110 apps/transactions/models.py:209
#: apps/transactions/models.py:233 apps/transactions/models.py:257
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
@@ -672,11 +677,11 @@ msgstr "Dienst erfolgreich in die Warteschlange eingereiht"
msgid "Create transaction"
msgstr "Erstelle Transaktion"
#: apps/dca/forms.py:70 apps/transactions/forms.py:278
#: apps/dca/forms.py:70 apps/transactions/forms.py:290
msgid "From Account"
msgstr "Startkonto"
#: apps/dca/forms.py:76 apps/transactions/forms.py:283
#: apps/dca/forms.py:76 apps/transactions/forms.py:295
msgid "To Account"
msgstr "Zielkonto"
@@ -703,7 +708,7 @@ msgstr "Verknüpfe Transaktion"
msgid "You must provide an account."
msgstr "Du musst ein Konto angeben."
#: apps/dca/forms.py:312 apps/transactions/forms.py:445
#: apps/dca/forms.py:312 apps/transactions/forms.py:457
msgid "From and To accounts must be different."
msgstr "Start- und Zielkonten müssen unterschiedlich sein."
@@ -722,8 +727,8 @@ msgstr "Startwährung"
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
#: apps/transactions/forms.py:347 apps/transactions/models.py:301
#: apps/transactions/models.py:497 apps/transactions/models.py:698
#: apps/transactions/forms.py:359 apps/transactions/models.py:308
#: apps/transactions/models.py:504 apps/transactions/models.py:705
msgid "Notes"
msgstr "Notizen"
@@ -786,7 +791,7 @@ msgid "Users"
msgstr "Nutzer"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:362 templates/includes/navbar.html:57
#: apps/transactions/models.py:369 templates/includes/navbar.html:57
#: templates/includes/navbar.html:104
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -803,23 +808,23 @@ msgstr "Kategorien"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/transactions/forms.py:56 apps/transactions/forms.py:518
#: apps/transactions/forms.py:779 apps/transactions/models.py:261
#: apps/transactions/models.py:316 apps/transactions/models.py:493
#: apps/transactions/models.py:695 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:57 apps/transactions/forms.py:530
#: apps/transactions/forms.py:791 apps/transactions/models.py:268
#: apps/transactions/models.py:323 apps/transactions/models.py:500
#: apps/transactions/models.py:702 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:110
msgid "Entities"
msgstr "Entitäten"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:732 templates/includes/navbar.html:74
#: apps/transactions/models.py:739 templates/includes/navbar.html:74
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr "Wiederkehrende Transaktionen"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:511 templates/includes/navbar.html:72
#: apps/transactions/models.py:518 templates/includes/navbar.html:72
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -974,9 +979,9 @@ msgstr "Vorgang erfolgreich gelöscht"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:19
#: templates/insights/fragments/category_overview/index.html:87
#: templates/insights/fragments/category_overview/index.html:116
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:285
#: templates/insights/fragments/category_overview/index.html:314
msgid "Uncategorized"
msgstr "Unkategorisiert"
@@ -1058,14 +1063,14 @@ msgid "Operator"
msgstr "Bediener"
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:285
#: apps/transactions/models.py:453 apps/transactions/models.py:676
#: apps/rules/models.py:246 apps/transactions/models.py:292
#: apps/transactions/models.py:460 apps/transactions/models.py:683
msgid "Type"
msgstr "Typ"
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:287 templates/cotton/transaction/item.html:21
#: apps/transactions/models.py:294 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
@@ -1073,33 +1078,33 @@ msgid "Paid"
msgstr "Bezahlt"
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
#: apps/rules/models.py:258 apps/transactions/forms.py:68
#: apps/transactions/forms.py:334 apps/transactions/forms.py:524
#: apps/transactions/models.py:289 apps/transactions/models.py:471
#: apps/transactions/models.py:700
#: apps/rules/models.py:258 apps/transactions/forms.py:69
#: apps/transactions/forms.py:346 apps/transactions/forms.py:536
#: apps/transactions/models.py:296 apps/transactions/models.py:478
#: apps/transactions/models.py:707
msgid "Reference Date"
msgstr "Referenzdatum"
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:294
#: apps/transactions/models.py:681 templates/insights/fragments/sankey.html:95
#: apps/rules/models.py:262 apps/transactions/models.py:301
#: apps/transactions/models.py:688 templates/insights/fragments/sankey.html:95
msgid "Amount"
msgstr "Betrag"
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
#: apps/rules/models.py:36 apps/rules/models.py:266
#: apps/transactions/forms.py:338 apps/transactions/models.py:299
#: apps/transactions/models.py:455 apps/transactions/models.py:684
#: apps/transactions/forms.py:350 apps/transactions/models.py:306
#: apps/transactions/models.py:462 apps/transactions/models.py:691
msgid "Description"
msgstr "Beschreibung"
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:338
#: apps/transactions/models.py:345
msgid "Internal Note"
msgstr "Interne Notiz"
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:340
#: apps/transactions/models.py:347
msgid "Internal ID"
msgstr "Interne ID"
@@ -1234,6 +1239,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -1267,48 +1273,56 @@ msgstr "Betrag Minimum"
msgid "Amount max"
msgstr "Betrag Maximum"
#: apps/transactions/forms.py:171
#: apps/transactions/forms.py:172
msgid "More"
msgstr "Mehr"
#: apps/transactions/forms.py:290
#: apps/transactions/forms.py:216
msgid "Save and add similar"
msgstr ""
#: apps/transactions/forms.py:221
msgid "Save and add another"
msgstr ""
#: apps/transactions/forms.py:302
msgid "From Amount"
msgstr "Startbetrag"
#: apps/transactions/forms.py:295
#: apps/transactions/forms.py:307
msgid "To Amount"
msgstr "Zielbetrag"
#: apps/transactions/forms.py:412
#: apps/transactions/forms.py:424
#: templates/cotton/ui/quick_transactions_buttons.html:40
msgid "Transfer"
msgstr "Transfer"
#: apps/transactions/forms.py:658
#: apps/transactions/forms.py:670
msgid "Tag name"
msgstr "Tagname"
#: apps/transactions/forms.py:690
#: apps/transactions/forms.py:702
msgid "Entity name"
msgstr "Entitätsname"
#: apps/transactions/forms.py:722
#: apps/transactions/forms.py:734
msgid "Category name"
msgstr "Kategoriename"
#: apps/transactions/forms.py:724
#: apps/transactions/forms.py:736
msgid "Muted categories won't count towards your monthly total"
msgstr "Ausgeblendete Kategorien zählen nicht zu deiner Monatsübersicht"
#: apps/transactions/forms.py:910
#: apps/transactions/forms.py:922
msgid "End date should be after the start date"
msgstr "Enddatum sollte hinter dem Startdatum liegen"
#: apps/transactions/models.py:199
#: apps/transactions/models.py:206
msgid "Mute"
msgstr "Deaktivieren"
#: apps/transactions/models.py:204
#: apps/transactions/models.py:211
msgid ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
@@ -1316,26 +1330,26 @@ msgstr ""
"Ausgeblendete Kategorien können bei der Erstellung neuer Transaktionen nicht "
"ausgewählt werden"
#: apps/transactions/models.py:212
#: apps/transactions/models.py:219
msgid "Transaction Category"
msgstr "Transaktionskategorie"
#: apps/transactions/models.py:213
#: apps/transactions/models.py:220
msgid "Transaction Categories"
msgstr "Transaktionskategorien"
#: apps/transactions/models.py:228
#: apps/transactions/models.py:235
msgid ""
"Deactivated tags won't be able to be selected when creating new transactions"
msgstr ""
"Deaktivierte Tags können bei der Erstellung neuer Transaktionen nicht "
"ausgewählt werden"
#: apps/transactions/models.py:236 apps/transactions/models.py:237
#: apps/transactions/models.py:243 apps/transactions/models.py:244
msgid "Transaction Tags"
msgstr "Tranksaktionstags"
#: apps/transactions/models.py:252
#: apps/transactions/models.py:259
msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
@@ -1343,151 +1357,151 @@ msgstr ""
"Deaktivierte Entitäten können bei der Erstellung neuer Transaktionen nicht "
"ausgewählt werden"
#: apps/transactions/models.py:260
#: apps/transactions/models.py:267
msgid "Entity"
msgstr "Entität"
#: apps/transactions/models.py:272
#: apps/transactions/models.py:279
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/insights/fragments/category_overview/index.html:11
#: templates/insights/fragments/category_overview/index.html:64
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr "Einnahme"
#: apps/transactions/models.py:273
#: apps/transactions/models.py:280
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/insights/fragments/category_overview/index.html:12
#: templates/insights/fragments/category_overview/index.html:65
msgid "Expense"
msgstr "Ausgabe"
#: apps/transactions/models.py:327 apps/transactions/models.py:510
#: apps/transactions/models.py:334 apps/transactions/models.py:517
msgid "Installment Plan"
msgstr "Ratenzahlungs-Plan"
#: apps/transactions/models.py:336 apps/transactions/models.py:731
#: apps/transactions/models.py:343 apps/transactions/models.py:738
msgid "Recurring Transaction"
msgstr "Wiederkehrende Transaktion"
#: apps/transactions/models.py:344
#: apps/transactions/models.py:351
msgid "Deleted"
msgstr "Gelöscht"
#: apps/transactions/models.py:349
#: apps/transactions/models.py:356
msgid "Deleted At"
msgstr "Gelöscht am"
#: apps/transactions/models.py:361
#: apps/transactions/models.py:368
msgid "Transaction"
msgstr "Transaktion"
#: apps/transactions/models.py:433 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:440 templates/tags/fragments/table.html:71
msgid "No tags"
msgstr "Keine Tags"
#: apps/transactions/models.py:434
#: apps/transactions/models.py:441
msgid "No category"
msgstr "Keine Kategorie"
#: apps/transactions/models.py:436
#: apps/transactions/models.py:443
msgid "No description"
msgstr "Keine Beschreibung"
#: apps/transactions/models.py:442
#: apps/transactions/models.py:449
msgid "Yearly"
msgstr "Jährlich"
#: apps/transactions/models.py:443 apps/users/models.py:26
#: apps/transactions/models.py:450 apps/users/models.py:26
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr "Monatlich"
#: apps/transactions/models.py:444
#: apps/transactions/models.py:451
msgid "Weekly"
msgstr "Wöchentlich"
#: apps/transactions/models.py:445
#: apps/transactions/models.py:452
msgid "Daily"
msgstr "Täglich"
#: apps/transactions/models.py:458
#: apps/transactions/models.py:465
msgid "Number of Installments"
msgstr "Anzahl von Ratenzahlungen"
#: apps/transactions/models.py:463
#: apps/transactions/models.py:470
msgid "Installment Start"
msgstr "Start der Ratenzahlung"
#: apps/transactions/models.py:464
#: apps/transactions/models.py:471
msgid "The installment number to start counting from"
msgstr ""
"Die Zahl mit der bei der Zählung der Ratenzahlungen begonnen werden soll"
#: apps/transactions/models.py:469 apps/transactions/models.py:704
#: apps/transactions/models.py:476 apps/transactions/models.py:711
msgid "Start Date"
msgstr "Startdatum"
#: apps/transactions/models.py:473 apps/transactions/models.py:705
#: apps/transactions/models.py:480 apps/transactions/models.py:712
msgid "End Date"
msgstr "Enddatum"
#: apps/transactions/models.py:478
#: apps/transactions/models.py:485
msgid "Recurrence"
msgstr "Regelmäßigkeit"
#: apps/transactions/models.py:481
#: apps/transactions/models.py:488
msgid "Installment Amount"
msgstr "Ratenzahlungs-Wert"
#: apps/transactions/models.py:500 apps/transactions/models.py:721
#: apps/transactions/models.py:507 apps/transactions/models.py:728
msgid "Add description to transactions"
msgstr "Beschreibung zu Transaktionen hinzufügen"
#: apps/transactions/models.py:503 apps/transactions/models.py:724
#: apps/transactions/models.py:510 apps/transactions/models.py:731
msgid "Add notes to transactions"
msgstr "Notizen zu Transaktionen hinzufügen"
#: apps/transactions/models.py:663
#: apps/transactions/models.py:670
msgid "day(s)"
msgstr "Tag(e)"
#: apps/transactions/models.py:664
#: apps/transactions/models.py:671
msgid "week(s)"
msgstr "Woche(n)"
#: apps/transactions/models.py:665
#: apps/transactions/models.py:672
msgid "month(s)"
msgstr "Monat(e)"
#: apps/transactions/models.py:666
#: apps/transactions/models.py:673
msgid "year(s)"
msgstr "Jahr(e)"
#: apps/transactions/models.py:668
#: apps/transactions/models.py:675
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr "Pausiert"
#: apps/transactions/models.py:707
#: apps/transactions/models.py:714
msgid "Recurrence Type"
msgstr "Regelmäßigkeit"
#: apps/transactions/models.py:710
#: apps/transactions/models.py:717
msgid "Recurrence Interval"
msgstr "Wiederholungsintervall"
#: apps/transactions/models.py:714
#: apps/transactions/models.py:721
msgid "Last Generated Date"
msgstr "Letztes generiertes Datum"
#: apps/transactions/models.py:717
#: apps/transactions/models.py:724
msgid "Last Generated Reference Date"
msgstr "Letztes generiertes Referenzdatum"
@@ -1612,35 +1626,35 @@ msgstr "Tag erfolgreich aktualisiert"
msgid "Tag deleted successfully"
msgstr "Tag erfolgreich gelöscht"
#: apps/transactions/views/transactions.py:50
#: apps/transactions/views/transactions.py:89
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully"
msgstr "Transaktion erfolgreich hinzugefügt"
#: apps/transactions/views/transactions.py:123
#: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully"
msgstr "Transaktion erfolgreich aktualisiert"
#: apps/transactions/views/transactions.py:173
#: apps/transactions/views/transactions.py:232
#, python-format
msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "%(count)s Transaktion erfolgreich aktualisiert"
msgstr[1] "%(count)s Transaktionen erfolgreich aktualisiert"
#: apps/transactions/views/transactions.py:209
#: apps/transactions/views/transactions.py:268
msgid "Transaction duplicated successfully"
msgstr "Transaktion erfolgreich duplisiert"
#: apps/transactions/views/transactions.py:251
#: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully"
msgstr "Transaktion erfolgreich gelöscht"
#: apps/transactions/views/transactions.py:269
#: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully"
msgstr "Transaktion erfolgreich wiederhergestellt"
#: apps/transactions/views/transactions.py:295
#: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully"
msgstr "Transfer erfolgreich hinzugefügt"
@@ -1806,33 +1820,33 @@ msgstr "Zeitzone"
msgid "Start page"
msgstr "Startseite"
#: apps/users/views.py:67
#: apps/users/views.py:68
msgid "Transaction amounts are now hidden"
msgstr "Beträge sind nun versteckt"
#: apps/users/views.py:70
#: apps/users/views.py:71
msgid "Transaction amounts are now displayed"
msgstr "Beträge werden angezeigt"
#: apps/users/views.py:88
#: apps/users/views.py:89
msgid "Sounds are now muted"
msgstr "Sounds sind stummgeschaltet"
#: apps/users/views.py:91
#: apps/users/views.py:92
msgid "Sounds will now play"
msgstr "Sounds werden wiedergegeben"
#: apps/users/views.py:107
#: apps/users/views.py:108
msgid "Your settings have been updated"
msgstr "Deine Einstellungen wurden aktualisiert"
#: apps/users/views.py:151
#: apps/users/views.py:152
#, fuzzy
#| msgid "Rule added successfully"
msgid "Item added successfully"
msgstr "Regel erfolgreich hinzugefügt"
#: apps/users/views.py:182
#: apps/users/views.py:184
#, fuzzy
#| msgid "Rule updated successfully"
msgid "Item updated successfully"
@@ -2106,7 +2120,7 @@ msgid "Muted"
msgstr "Ausgeblendet"
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:225
#: templates/insights/fragments/category_overview/index.html:430
msgid "No categories"
msgstr "Keine Kategorien"
@@ -2568,10 +2582,11 @@ msgid "Net Worth"
msgstr "Nettovermögen"
#: templates/includes/navbar.html:44
#: templates/insights/fragments/category_overview/index.html:50
msgid "Current"
msgstr "Aktuell"
#: templates/includes/navbar.html:50
#: templates/includes/navbar.html:50 templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Einblicke"
@@ -2692,12 +2707,36 @@ msgstr "Einnahmen/Ausgaben nach Konto"
msgid "Income/Expense by Currency"
msgstr "Einnahmen/Ausgaben nach Währung"
#: templates/insights/fragments/category_overview/index.html:13
#: templates/insights/fragments/category_overview/index.html:14
msgid "Table"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:24
msgid "Bars"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:38
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:54
#, fuzzy
#| msgid "final total"
msgid "Final total"
msgstr "Gesamtbilanz"
#: templates/insights/fragments/category_overview/index.html:66
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr "Gesamt"
#: templates/insights/fragments/category_overview/index.html:202
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:407
#, fuzzy
#| msgid "final total"
msgid "Final Total"
@@ -2748,53 +2787,53 @@ msgstr "Von"
msgid "Percentage"
msgstr "Prozent"
#: templates/insights/pages/index.html:35
#: templates/insights/pages/index.html:37
msgid "Month"
msgstr "Monat"
#: templates/insights/pages/index.html:38
#: templates/insights/pages/index.html:40
#: templates/yearly_overview/pages/overview_by_account.html:61
#: templates/yearly_overview/pages/overview_by_currency.html:63
msgid "Year"
msgstr "Jahr"
#: templates/insights/pages/index.html:43
#: templates/insights/pages/index.html:45
msgid "Month Range"
msgstr "Monats-Zeitraum"
#: templates/insights/pages/index.html:48
#: templates/insights/pages/index.html:50
msgid "Year Range"
msgstr "Jahres-Zeitraum"
#: templates/insights/pages/index.html:53
#: templates/insights/pages/index.html:55
msgid "Date Range"
msgstr "Datums-Zeitraum"
#: templates/insights/pages/index.html:81
#: templates/insights/pages/index.html:83
msgid "Account Flow"
msgstr "Kontofluss"
#: templates/insights/pages/index.html:88
#: templates/insights/pages/index.html:90
msgid "Currency Flow"
msgstr "Währungsfluss"
#: templates/insights/pages/index.html:95
#: templates/insights/pages/index.html:97
msgid "Category Explorer"
msgstr "Kategorien-Explorer"
#: templates/insights/pages/index.html:102
#: templates/insights/pages/index.html:104
msgid "Categories Overview"
msgstr "Kategorien-Übersicht"
#: templates/insights/pages/index.html:109
#: templates/insights/pages/index.html:111
msgid "Late Transactions"
msgstr "Verspätete Transaktionen"
#: templates/insights/pages/index.html:115
#: templates/insights/pages/index.html:117
msgid "Latest Transactions"
msgstr "Letzte Transaktionen"
#: templates/insights/pages/index.html:121
#: templates/insights/pages/index.html:123
msgid "Emergency Fund"
msgstr "Notfall-Budget"
@@ -3207,6 +3246,11 @@ msgstr "Use the credentials below to login"
msgid "Yearly Overview"
msgstr "Jährliche Übersicht"
#, fuzzy
#~| msgid "No tags"
#~ msgid "Show tags"
#~ msgstr "Keine Tags"
#, fuzzy
#~| msgid "Management"
#~ msgid "Loan Payment"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-04-13 22:01+0000\n"
"POT-Creation-Date: 2025-05-11 15:47+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -26,10 +26,10 @@ msgstr ""
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:202
#: apps/transactions/forms.py:269 apps/transactions/forms.py:629
#: apps/transactions/forms.py:672 apps/transactions/forms.py:704
#: apps/transactions/forms.py:739 apps/transactions/forms.py:891
#: apps/rules/forms.py:365 apps/transactions/forms.py:203
#: apps/transactions/forms.py:281 apps/transactions/forms.py:641
#: apps/transactions/forms.py:684 apps/transactions/forms.py:716
#: apps/transactions/forms.py:751 apps/transactions/forms.py:903
#: apps/users/forms.py:210 apps/users/forms.py:372
msgid "Update"
msgstr ""
@@ -39,10 +39,10 @@ msgstr ""
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
#: apps/transactions/forms.py:187 apps/transactions/forms.py:211
#: apps/transactions/forms.py:637 apps/transactions/forms.py:680
#: apps/transactions/forms.py:712 apps/transactions/forms.py:747
#: apps/transactions/forms.py:899 apps/users/forms.py:218
#: apps/transactions/forms.py:188 apps/transactions/forms.py:212
#: apps/transactions/forms.py:649 apps/transactions/forms.py:692
#: apps/transactions/forms.py:724 apps/transactions/forms.py:759
#: apps/transactions/forms.py:911 apps/users/forms.py:218
#: apps/users/forms.py:380 templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -73,12 +73,12 @@ msgstr ""
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
#: apps/rules/models.py:38 apps/rules/models.py:286
#: apps/transactions/forms.py:40 apps/transactions/forms.py:303
#: apps/transactions/forms.py:310 apps/transactions/forms.py:510
#: apps/transactions/forms.py:771 apps/transactions/models.py:305
#: apps/transactions/models.py:488 apps/transactions/models.py:688
#: templates/insights/fragments/category_overview/index.html:10
#: templates/insights/fragments/category_overview/index.html:215
#: apps/transactions/forms.py:41 apps/transactions/forms.py:315
#: apps/transactions/forms.py:322 apps/transactions/forms.py:522
#: apps/transactions/forms.py:783 apps/transactions/models.py:312
#: apps/transactions/models.py:495 apps/transactions/models.py:695
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
msgid "Category"
msgstr ""
@@ -86,19 +86,20 @@ msgstr ""
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:48 apps/transactions/forms.py:319
#: apps/transactions/forms.py:327 apps/transactions/forms.py:503
#: apps/transactions/forms.py:764 apps/transactions/models.py:311
#: apps/transactions/models.py:490 apps/transactions/models.py:692
#: templates/includes/navbar.html:108 templates/tags/fragments/list.html:5
#: templates/tags/pages/index.html:4
#: apps/transactions/forms.py:49 apps/transactions/forms.py:331
#: apps/transactions/forms.py:339 apps/transactions/forms.py:515
#: apps/transactions/forms.py:776 apps/transactions/models.py:318
#: apps/transactions/models.py:497 apps/transactions/models.py:699
#: templates/includes/navbar.html:108
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr ""
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:198 apps/transactions/models.py:223
#: apps/transactions/models.py:247
#: apps/transactions/models.py:205 apps/transactions/models.py:230
#: apps/transactions/models.py:254
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -160,9 +161,9 @@ msgstr ""
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:60 apps/transactions/forms.py:495
#: apps/transactions/forms.py:756 apps/transactions/models.py:278
#: apps/transactions/models.py:448 apps/transactions/models.py:670
#: apps/transactions/forms.py:61 apps/transactions/forms.py:507
#: apps/transactions/forms.py:768 apps/transactions/models.py:285
#: apps/transactions/models.py:455 apps/transactions/models.py:677
msgid "Account"
msgstr ""
@@ -254,19 +255,19 @@ msgstr ""
msgid "Invalid category data. Provide an ID or name."
msgstr ""
#: apps/api/fields/transactions.py:67
#: apps/api/fields/transactions.py:70
msgid "Tag with this ID does not exist."
msgstr ""
#: apps/api/fields/transactions.py:77
#: apps/api/fields/transactions.py:80
msgid "Invalid tag data. Provide an ID or name."
msgstr ""
#: apps/api/fields/transactions.py:102
#: apps/api/fields/transactions.py:105
msgid "Entity with this ID does not exist."
msgstr ""
#: apps/api/fields/transactions.py:112
#: apps/api/fields/transactions.py:115
msgid "Invalid entity data. Provide an ID or name."
msgstr ""
@@ -292,38 +293,42 @@ msgstr ""
msgid "Invalid date format. Use YYYY-MM."
msgstr ""
#: apps/common/forms.py:24
#: apps/common/forms.py:25
msgid "Owner"
msgstr ""
#: apps/common/forms.py:27
#: apps/common/forms.py:28
msgid ""
"The owner of this object, if empty all users can see, edit and take "
"ownership."
msgstr ""
#: apps/common/forms.py:34
#: apps/common/forms.py:35
msgid "Shared with users"
msgstr ""
#: apps/common/forms.py:35
#: apps/common/forms.py:36
msgid "Select users to share this object with"
msgstr ""
#: apps/common/forms.py:40
#: apps/common/forms.py:41
msgid "Visibility"
msgstr ""
#: apps/common/forms.py:42
#: apps/common/forms.py:43
msgid ""
"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."
msgstr ""
#: apps/common/forms.py:79 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:135
msgid "Save"
msgstr ""
#: apps/common/forms.py:95
msgid "You cannot share this item with its owner."
msgstr ""
#: apps/common/models.py:29
msgid "Private"
msgstr ""
@@ -449,8 +454,8 @@ msgstr ""
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
#: apps/transactions/forms.py:64 apps/transactions/forms.py:331
#: apps/transactions/models.py:288
#: apps/transactions/forms.py:65 apps/transactions/forms.py:343
#: apps/transactions/models.py:295
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
@@ -531,8 +536,8 @@ msgstr ""
msgid "Service Type"
msgstr ""
#: apps/currencies/models.py:110 apps/transactions/models.py:202
#: apps/transactions/models.py:226 apps/transactions/models.py:250
#: apps/currencies/models.py:110 apps/transactions/models.py:209
#: apps/transactions/models.py:233 apps/transactions/models.py:257
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
@@ -652,11 +657,11 @@ msgstr ""
msgid "Create transaction"
msgstr ""
#: apps/dca/forms.py:70 apps/transactions/forms.py:278
#: apps/dca/forms.py:70 apps/transactions/forms.py:290
msgid "From Account"
msgstr ""
#: apps/dca/forms.py:76 apps/transactions/forms.py:283
#: apps/dca/forms.py:76 apps/transactions/forms.py:295
msgid "To Account"
msgstr ""
@@ -681,7 +686,7 @@ msgstr ""
msgid "You must provide an account."
msgstr ""
#: apps/dca/forms.py:312 apps/transactions/forms.py:445
#: apps/dca/forms.py:312 apps/transactions/forms.py:457
msgid "From and To accounts must be different."
msgstr ""
@@ -700,8 +705,8 @@ msgstr ""
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
#: apps/transactions/forms.py:347 apps/transactions/models.py:301
#: apps/transactions/models.py:497 apps/transactions/models.py:698
#: apps/transactions/forms.py:359 apps/transactions/models.py:308
#: apps/transactions/models.py:504 apps/transactions/models.py:705
msgid "Notes"
msgstr ""
@@ -764,7 +769,7 @@ msgid "Users"
msgstr ""
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:362 templates/includes/navbar.html:57
#: apps/transactions/models.py:369 templates/includes/navbar.html:57
#: templates/includes/navbar.html:104
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -781,23 +786,23 @@ msgstr ""
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/transactions/forms.py:56 apps/transactions/forms.py:518
#: apps/transactions/forms.py:779 apps/transactions/models.py:261
#: apps/transactions/models.py:316 apps/transactions/models.py:493
#: apps/transactions/models.py:695 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:57 apps/transactions/forms.py:530
#: apps/transactions/forms.py:791 apps/transactions/models.py:268
#: apps/transactions/models.py:323 apps/transactions/models.py:500
#: apps/transactions/models.py:702 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:110
msgid "Entities"
msgstr ""
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:732 templates/includes/navbar.html:74
#: apps/transactions/models.py:739 templates/includes/navbar.html:74
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr ""
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:511 templates/includes/navbar.html:72
#: apps/transactions/models.py:518 templates/includes/navbar.html:72
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -950,9 +955,9 @@ msgstr ""
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:19
#: templates/insights/fragments/category_overview/index.html:87
#: templates/insights/fragments/category_overview/index.html:116
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:285
#: templates/insights/fragments/category_overview/index.html:314
msgid "Uncategorized"
msgstr ""
@@ -1034,14 +1039,14 @@ msgid "Operator"
msgstr ""
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:285
#: apps/transactions/models.py:453 apps/transactions/models.py:676
#: apps/rules/models.py:246 apps/transactions/models.py:292
#: apps/transactions/models.py:460 apps/transactions/models.py:683
msgid "Type"
msgstr ""
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:287 templates/cotton/transaction/item.html:21
#: apps/transactions/models.py:294 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
@@ -1049,33 +1054,33 @@ msgid "Paid"
msgstr ""
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
#: apps/rules/models.py:258 apps/transactions/forms.py:68
#: apps/transactions/forms.py:334 apps/transactions/forms.py:524
#: apps/transactions/models.py:289 apps/transactions/models.py:471
#: apps/transactions/models.py:700
#: apps/rules/models.py:258 apps/transactions/forms.py:69
#: apps/transactions/forms.py:346 apps/transactions/forms.py:536
#: apps/transactions/models.py:296 apps/transactions/models.py:478
#: apps/transactions/models.py:707
msgid "Reference Date"
msgstr ""
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:294
#: apps/transactions/models.py:681 templates/insights/fragments/sankey.html:95
#: apps/rules/models.py:262 apps/transactions/models.py:301
#: apps/transactions/models.py:688 templates/insights/fragments/sankey.html:95
msgid "Amount"
msgstr ""
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
#: apps/rules/models.py:36 apps/rules/models.py:266
#: apps/transactions/forms.py:338 apps/transactions/models.py:299
#: apps/transactions/models.py:455 apps/transactions/models.py:684
#: apps/transactions/forms.py:350 apps/transactions/models.py:306
#: apps/transactions/models.py:462 apps/transactions/models.py:691
msgid "Description"
msgstr ""
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:338
#: apps/transactions/models.py:345
msgid "Internal Note"
msgstr ""
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:340
#: apps/transactions/models.py:347
msgid "Internal ID"
msgstr ""
@@ -1203,6 +1208,7 @@ msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -1236,220 +1242,228 @@ msgstr ""
msgid "Amount max"
msgstr ""
#: apps/transactions/forms.py:171
#: apps/transactions/forms.py:172
msgid "More"
msgstr ""
#: apps/transactions/forms.py:290
#: apps/transactions/forms.py:216
msgid "Save and add similar"
msgstr ""
#: apps/transactions/forms.py:221
msgid "Save and add another"
msgstr ""
#: apps/transactions/forms.py:302
msgid "From Amount"
msgstr ""
#: apps/transactions/forms.py:295
#: apps/transactions/forms.py:307
msgid "To Amount"
msgstr ""
#: apps/transactions/forms.py:412
#: apps/transactions/forms.py:424
#: templates/cotton/ui/quick_transactions_buttons.html:40
msgid "Transfer"
msgstr ""
#: apps/transactions/forms.py:658
#: apps/transactions/forms.py:670
msgid "Tag name"
msgstr ""
#: apps/transactions/forms.py:690
#: apps/transactions/forms.py:702
msgid "Entity name"
msgstr ""
#: apps/transactions/forms.py:722
#: apps/transactions/forms.py:734
msgid "Category name"
msgstr ""
#: apps/transactions/forms.py:724
#: apps/transactions/forms.py:736
msgid "Muted categories won't count towards your monthly total"
msgstr ""
#: apps/transactions/forms.py:910
#: apps/transactions/forms.py:922
msgid "End date should be after the start date"
msgstr ""
#: apps/transactions/models.py:199
#: apps/transactions/models.py:206
msgid "Mute"
msgstr ""
#: apps/transactions/models.py:204
#: apps/transactions/models.py:211
msgid ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
msgstr ""
#: apps/transactions/models.py:212
#: apps/transactions/models.py:219
msgid "Transaction Category"
msgstr ""
#: apps/transactions/models.py:213
#: apps/transactions/models.py:220
msgid "Transaction Categories"
msgstr ""
#: apps/transactions/models.py:228
#: apps/transactions/models.py:235
msgid ""
"Deactivated tags won't be able to be selected when creating new transactions"
msgstr ""
#: apps/transactions/models.py:236 apps/transactions/models.py:237
#: apps/transactions/models.py:243 apps/transactions/models.py:244
msgid "Transaction Tags"
msgstr ""
#: apps/transactions/models.py:252
#: apps/transactions/models.py:259
msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
msgstr ""
#: apps/transactions/models.py:260
#: apps/transactions/models.py:267
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:272
#: apps/transactions/models.py:279
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/insights/fragments/category_overview/index.html:11
#: templates/insights/fragments/category_overview/index.html:64
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr ""
#: apps/transactions/models.py:273
#: apps/transactions/models.py:280
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/insights/fragments/category_overview/index.html:12
#: templates/insights/fragments/category_overview/index.html:65
msgid "Expense"
msgstr ""
#: apps/transactions/models.py:327 apps/transactions/models.py:510
#: apps/transactions/models.py:334 apps/transactions/models.py:517
msgid "Installment Plan"
msgstr ""
#: apps/transactions/models.py:336 apps/transactions/models.py:731
#: apps/transactions/models.py:343 apps/transactions/models.py:738
msgid "Recurring Transaction"
msgstr ""
#: apps/transactions/models.py:344
#: apps/transactions/models.py:351
msgid "Deleted"
msgstr ""
#: apps/transactions/models.py:349
#: apps/transactions/models.py:356
msgid "Deleted At"
msgstr ""
#: apps/transactions/models.py:361
#: apps/transactions/models.py:368
msgid "Transaction"
msgstr ""
#: apps/transactions/models.py:433 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:440 templates/tags/fragments/table.html:71
msgid "No tags"
msgstr ""
#: apps/transactions/models.py:434
#: apps/transactions/models.py:441
msgid "No category"
msgstr ""
#: apps/transactions/models.py:436
#: apps/transactions/models.py:443
msgid "No description"
msgstr ""
#: apps/transactions/models.py:442
#: apps/transactions/models.py:449
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:443 apps/users/models.py:26
#: apps/transactions/models.py:450 apps/users/models.py:26
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr ""
#: apps/transactions/models.py:444
#: apps/transactions/models.py:451
msgid "Weekly"
msgstr ""
#: apps/transactions/models.py:445
#: apps/transactions/models.py:452
msgid "Daily"
msgstr ""
#: apps/transactions/models.py:458
#: apps/transactions/models.py:465
msgid "Number of Installments"
msgstr ""
#: apps/transactions/models.py:463
#: apps/transactions/models.py:470
msgid "Installment Start"
msgstr ""
#: apps/transactions/models.py:464
#: apps/transactions/models.py:471
msgid "The installment number to start counting from"
msgstr ""
#: apps/transactions/models.py:469 apps/transactions/models.py:704
#: apps/transactions/models.py:476 apps/transactions/models.py:711
msgid "Start Date"
msgstr ""
#: apps/transactions/models.py:473 apps/transactions/models.py:705
#: apps/transactions/models.py:480 apps/transactions/models.py:712
msgid "End Date"
msgstr ""
#: apps/transactions/models.py:478
#: apps/transactions/models.py:485
msgid "Recurrence"
msgstr ""
#: apps/transactions/models.py:481
#: apps/transactions/models.py:488
msgid "Installment Amount"
msgstr ""
#: apps/transactions/models.py:500 apps/transactions/models.py:721
#: apps/transactions/models.py:507 apps/transactions/models.py:728
msgid "Add description to transactions"
msgstr ""
#: apps/transactions/models.py:503 apps/transactions/models.py:724
#: apps/transactions/models.py:510 apps/transactions/models.py:731
msgid "Add notes to transactions"
msgstr ""
#: apps/transactions/models.py:663
#: apps/transactions/models.py:670
msgid "day(s)"
msgstr ""
#: apps/transactions/models.py:664
#: apps/transactions/models.py:671
msgid "week(s)"
msgstr ""
#: apps/transactions/models.py:665
#: apps/transactions/models.py:672
msgid "month(s)"
msgstr ""
#: apps/transactions/models.py:666
#: apps/transactions/models.py:673
msgid "year(s)"
msgstr ""
#: apps/transactions/models.py:668
#: apps/transactions/models.py:675
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr ""
#: apps/transactions/models.py:707
#: apps/transactions/models.py:714
msgid "Recurrence Type"
msgstr ""
#: apps/transactions/models.py:710
#: apps/transactions/models.py:717
msgid "Recurrence Interval"
msgstr ""
#: apps/transactions/models.py:714
#: apps/transactions/models.py:721
msgid "Last Generated Date"
msgstr ""
#: apps/transactions/models.py:717
#: apps/transactions/models.py:724
msgid "Last Generated Reference Date"
msgstr ""
@@ -1574,35 +1588,35 @@ msgstr ""
msgid "Tag deleted successfully"
msgstr ""
#: apps/transactions/views/transactions.py:50
#: apps/transactions/views/transactions.py:89
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully"
msgstr ""
#: apps/transactions/views/transactions.py:123
#: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully"
msgstr ""
#: apps/transactions/views/transactions.py:173
#: apps/transactions/views/transactions.py:232
#, python-format
msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully"
msgstr[0] ""
msgstr[1] ""
#: apps/transactions/views/transactions.py:209
#: apps/transactions/views/transactions.py:268
msgid "Transaction duplicated successfully"
msgstr ""
#: apps/transactions/views/transactions.py:251
#: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully"
msgstr ""
#: apps/transactions/views/transactions.py:269
#: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully"
msgstr ""
#: apps/transactions/views/transactions.py:295
#: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully"
msgstr ""
@@ -1764,31 +1778,31 @@ msgstr ""
msgid "Start page"
msgstr ""
#: apps/users/views.py:67
#: apps/users/views.py:68
msgid "Transaction amounts are now hidden"
msgstr ""
#: apps/users/views.py:70
#: apps/users/views.py:71
msgid "Transaction amounts are now displayed"
msgstr ""
#: apps/users/views.py:88
#: apps/users/views.py:89
msgid "Sounds are now muted"
msgstr ""
#: apps/users/views.py:91
#: apps/users/views.py:92
msgid "Sounds will now play"
msgstr ""
#: apps/users/views.py:107
#: apps/users/views.py:108
msgid "Your settings have been updated"
msgstr ""
#: apps/users/views.py:151
#: apps/users/views.py:152
msgid "Item added successfully"
msgstr ""
#: apps/users/views.py:182
#: apps/users/views.py:184
msgid "Item updated successfully"
msgstr ""
@@ -2060,7 +2074,7 @@ msgid "Muted"
msgstr ""
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:225
#: templates/insights/fragments/category_overview/index.html:430
msgid "No categories"
msgstr ""
@@ -2519,10 +2533,11 @@ msgid "Net Worth"
msgstr ""
#: templates/includes/navbar.html:44
#: templates/insights/fragments/category_overview/index.html:50
msgid "Current"
msgstr ""
#: templates/includes/navbar.html:50
#: templates/includes/navbar.html:50 templates/insights/pages/index.html:5
msgid "Insights"
msgstr ""
@@ -2636,12 +2651,34 @@ msgstr ""
msgid "Income/Expense by Currency"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:13
#: templates/insights/fragments/category_overview/index.html:14
msgid "Table"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:24
msgid "Bars"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:38
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:54
msgid "Final total"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:66
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:202
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:407
msgid "Final Total"
msgstr ""
@@ -2689,53 +2726,53 @@ msgstr ""
msgid "Percentage"
msgstr ""
#: templates/insights/pages/index.html:35
#: templates/insights/pages/index.html:37
msgid "Month"
msgstr ""
#: templates/insights/pages/index.html:38
#: templates/insights/pages/index.html:40
#: templates/yearly_overview/pages/overview_by_account.html:61
#: templates/yearly_overview/pages/overview_by_currency.html:63
msgid "Year"
msgstr ""
#: templates/insights/pages/index.html:43
#: templates/insights/pages/index.html:45
msgid "Month Range"
msgstr ""
#: templates/insights/pages/index.html:48
#: templates/insights/pages/index.html:50
msgid "Year Range"
msgstr ""
#: templates/insights/pages/index.html:53
#: templates/insights/pages/index.html:55
msgid "Date Range"
msgstr ""
#: templates/insights/pages/index.html:81
#: templates/insights/pages/index.html:83
msgid "Account Flow"
msgstr ""
#: templates/insights/pages/index.html:88
#: templates/insights/pages/index.html:90
msgid "Currency Flow"
msgstr ""
#: templates/insights/pages/index.html:95
#: templates/insights/pages/index.html:97
msgid "Category Explorer"
msgstr ""
#: templates/insights/pages/index.html:102
#: templates/insights/pages/index.html:104
msgid "Categories Overview"
msgstr ""
#: templates/insights/pages/index.html:109
#: templates/insights/pages/index.html:111
msgid "Late Transactions"
msgstr ""
#: templates/insights/pages/index.html:115
#: templates/insights/pages/index.html:117
msgid "Latest Transactions"
msgstr ""
#: templates/insights/pages/index.html:121
#: templates/insights/pages/index.html:123
msgid "Emergency Fund"
msgstr ""

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-04-13 22:01+0000\n"
"POT-Creation-Date: 2025-05-11 15:47+0000\n"
"PO-Revision-Date: 2025-04-13 02:40+0000\n"
"Last-Translator: Prefill add-on <noreply-addon-prefill@weblate.org>\n"
"Language-Team: Spanish <https://translations.herculino.com/projects/wygiwyh/"
@@ -28,10 +28,10 @@ msgstr "Group name"
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:202
#: apps/transactions/forms.py:269 apps/transactions/forms.py:629
#: apps/transactions/forms.py:672 apps/transactions/forms.py:704
#: apps/transactions/forms.py:739 apps/transactions/forms.py:891
#: apps/rules/forms.py:365 apps/transactions/forms.py:203
#: apps/transactions/forms.py:281 apps/transactions/forms.py:641
#: apps/transactions/forms.py:684 apps/transactions/forms.py:716
#: apps/transactions/forms.py:751 apps/transactions/forms.py:903
#: apps/users/forms.py:210 apps/users/forms.py:372
#, fuzzy
msgid "Update"
@@ -42,10 +42,10 @@ msgstr "Update"
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
#: apps/transactions/forms.py:187 apps/transactions/forms.py:211
#: apps/transactions/forms.py:637 apps/transactions/forms.py:680
#: apps/transactions/forms.py:712 apps/transactions/forms.py:747
#: apps/transactions/forms.py:899 apps/users/forms.py:218
#: apps/transactions/forms.py:188 apps/transactions/forms.py:212
#: apps/transactions/forms.py:649 apps/transactions/forms.py:692
#: apps/transactions/forms.py:724 apps/transactions/forms.py:759
#: apps/transactions/forms.py:911 apps/users/forms.py:218
#: apps/users/forms.py:380 templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -79,12 +79,12 @@ msgstr "New balance"
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
#: apps/rules/models.py:38 apps/rules/models.py:286
#: apps/transactions/forms.py:40 apps/transactions/forms.py:303
#: apps/transactions/forms.py:310 apps/transactions/forms.py:510
#: apps/transactions/forms.py:771 apps/transactions/models.py:305
#: apps/transactions/models.py:488 apps/transactions/models.py:688
#: templates/insights/fragments/category_overview/index.html:10
#: templates/insights/fragments/category_overview/index.html:215
#: apps/transactions/forms.py:41 apps/transactions/forms.py:315
#: apps/transactions/forms.py:322 apps/transactions/forms.py:522
#: apps/transactions/forms.py:783 apps/transactions/models.py:312
#: apps/transactions/models.py:495 apps/transactions/models.py:695
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
#, fuzzy
msgid "Category"
msgstr "Category"
@@ -93,20 +93,21 @@ msgstr "Category"
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:48 apps/transactions/forms.py:319
#: apps/transactions/forms.py:327 apps/transactions/forms.py:503
#: apps/transactions/forms.py:764 apps/transactions/models.py:311
#: apps/transactions/models.py:490 apps/transactions/models.py:692
#: templates/includes/navbar.html:108 templates/tags/fragments/list.html:5
#: templates/tags/pages/index.html:4
#: apps/transactions/forms.py:49 apps/transactions/forms.py:331
#: apps/transactions/forms.py:339 apps/transactions/forms.py:515
#: apps/transactions/forms.py:776 apps/transactions/models.py:318
#: apps/transactions/models.py:497 apps/transactions/models.py:699
#: templates/includes/navbar.html:108
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
#, fuzzy
msgid "Tags"
msgstr "Tags"
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:198 apps/transactions/models.py:223
#: apps/transactions/models.py:247
#: apps/transactions/models.py:205 apps/transactions/models.py:230
#: apps/transactions/models.py:254
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -179,9 +180,9 @@ msgstr "Archived accounts don't show up nor count towards your net worth"
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:60 apps/transactions/forms.py:495
#: apps/transactions/forms.py:756 apps/transactions/models.py:278
#: apps/transactions/models.py:448 apps/transactions/models.py:670
#: apps/transactions/forms.py:61 apps/transactions/forms.py:507
#: apps/transactions/forms.py:768 apps/transactions/models.py:285
#: apps/transactions/models.py:455 apps/transactions/models.py:677
#, fuzzy
msgid "Account"
msgstr "Account"
@@ -290,22 +291,22 @@ msgstr "Category with this ID does not exist."
msgid "Invalid category data. Provide an ID or name."
msgstr "Invalid category data. Provide an ID or name."
#: apps/api/fields/transactions.py:67
#: apps/api/fields/transactions.py:70
#, fuzzy
msgid "Tag with this ID does not exist."
msgstr "Tag with this ID does not exist."
#: apps/api/fields/transactions.py:77
#: apps/api/fields/transactions.py:80
#, fuzzy
msgid "Invalid tag data. Provide an ID or name."
msgstr "Invalid tag data. Provide an ID or name."
#: apps/api/fields/transactions.py:102
#: apps/api/fields/transactions.py:105
#, fuzzy
msgid "Entity with this ID does not exist."
msgstr "Entity with this ID does not exist."
#: apps/api/fields/transactions.py:112
#: apps/api/fields/transactions.py:115
#, fuzzy
msgid "Invalid entity data. Provide an ID or name."
msgstr "Invalid entity data. Provide an ID or name."
@@ -337,12 +338,12 @@ msgstr "Invalid date format. Use YYYY-MM or YYYY-MM-DD."
msgid "Invalid date format. Use YYYY-MM."
msgstr "Invalid date format. Use YYYY-MM."
#: apps/common/forms.py:24
#: apps/common/forms.py:25
#, fuzzy
msgid "Owner"
msgstr "Owner"
#: apps/common/forms.py:27
#: apps/common/forms.py:28
#, fuzzy
msgid ""
"The owner of this object, if empty all users can see, edit and take "
@@ -351,22 +352,22 @@ msgstr ""
"The owner of this object, if empty all users can see, edit and take "
"ownership."
#: apps/common/forms.py:34
#: apps/common/forms.py:35
#, fuzzy
msgid "Shared with users"
msgstr "Shared with users"
#: apps/common/forms.py:35
#: apps/common/forms.py:36
#, fuzzy
msgid "Select users to share this object with"
msgstr "Select users to share this object with"
#: apps/common/forms.py:40
#: apps/common/forms.py:41
#, fuzzy
msgid "Visibility"
msgstr "Visibility"
#: apps/common/forms.py:42
#: apps/common/forms.py:43
#, fuzzy
msgid ""
"Private: Only shown for the owner and shared users. Only editable by the "
@@ -375,11 +376,15 @@ msgstr ""
"Private: Only shown for the owner and shared users. Only editable by the "
"owner.<br/>Public: Shown for all users. Only editable by the owner."
#: apps/common/forms.py:79 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:135
#, fuzzy
msgid "Save"
msgstr "Save"
#: apps/common/forms.py:95
msgid "You cannot share this item with its owner."
msgstr ""
#: apps/common/models.py:29
#, fuzzy
msgid "Private"
@@ -524,8 +529,8 @@ msgstr "Suffix"
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
#: apps/transactions/forms.py:64 apps/transactions/forms.py:331
#: apps/transactions/models.py:288
#: apps/transactions/forms.py:65 apps/transactions/forms.py:343
#: apps/transactions/models.py:295
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
@@ -623,8 +628,8 @@ msgstr "Service Name"
msgid "Service Type"
msgstr "Service Type"
#: apps/currencies/models.py:110 apps/transactions/models.py:202
#: apps/transactions/models.py:226 apps/transactions/models.py:250
#: apps/currencies/models.py:110 apps/transactions/models.py:209
#: apps/transactions/models.py:233 apps/transactions/models.py:257
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
@@ -779,12 +784,12 @@ msgstr "Services queued successfully"
msgid "Create transaction"
msgstr "Create transaction"
#: apps/dca/forms.py:70 apps/transactions/forms.py:278
#: apps/dca/forms.py:70 apps/transactions/forms.py:290
#, fuzzy
msgid "From Account"
msgstr "From Account"
#: apps/dca/forms.py:76 apps/transactions/forms.py:283
#: apps/dca/forms.py:76 apps/transactions/forms.py:295
#, fuzzy
msgid "To Account"
msgstr "To Account"
@@ -815,7 +820,7 @@ msgstr "Link transaction"
msgid "You must provide an account."
msgstr "You must provide an account."
#: apps/dca/forms.py:312 apps/transactions/forms.py:445
#: apps/dca/forms.py:312 apps/transactions/forms.py:457
#, fuzzy
msgid "From and To accounts must be different."
msgstr "From and To accounts must be different."
@@ -837,8 +842,8 @@ msgstr "Payment Currency"
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
#: apps/transactions/forms.py:347 apps/transactions/models.py:301
#: apps/transactions/models.py:497 apps/transactions/models.py:698
#: apps/transactions/forms.py:359 apps/transactions/models.py:308
#: apps/transactions/models.py:504 apps/transactions/models.py:705
#, fuzzy
msgid "Notes"
msgstr "Notes"
@@ -916,7 +921,7 @@ msgid "Users"
msgstr "Users"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:362 templates/includes/navbar.html:57
#: apps/transactions/models.py:369 templates/includes/navbar.html:57
#: templates/includes/navbar.html:104
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -935,17 +940,17 @@ msgstr "Categories"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/transactions/forms.py:56 apps/transactions/forms.py:518
#: apps/transactions/forms.py:779 apps/transactions/models.py:261
#: apps/transactions/models.py:316 apps/transactions/models.py:493
#: apps/transactions/models.py:695 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:57 apps/transactions/forms.py:530
#: apps/transactions/forms.py:791 apps/transactions/models.py:268
#: apps/transactions/models.py:323 apps/transactions/models.py:500
#: apps/transactions/models.py:702 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:110
#, fuzzy
msgid "Entities"
msgstr "Entities"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:732 templates/includes/navbar.html:74
#: apps/transactions/models.py:739 templates/includes/navbar.html:74
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
#, fuzzy
@@ -953,7 +958,7 @@ msgid "Recurring Transactions"
msgstr "Recurring Transactions"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:511 templates/includes/navbar.html:72
#: apps/transactions/models.py:518 templates/includes/navbar.html:72
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
#, fuzzy
@@ -1139,9 +1144,9 @@ msgstr "Run deleted successfully"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:19
#: templates/insights/fragments/category_overview/index.html:87
#: templates/insights/fragments/category_overview/index.html:116
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:285
#: templates/insights/fragments/category_overview/index.html:314
#, fuzzy
msgid "Uncategorized"
msgstr "Uncategorized"
@@ -1237,15 +1242,15 @@ msgid "Operator"
msgstr "Operator"
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:285
#: apps/transactions/models.py:453 apps/transactions/models.py:676
#: apps/rules/models.py:246 apps/transactions/models.py:292
#: apps/transactions/models.py:460 apps/transactions/models.py:683
#, fuzzy
msgid "Type"
msgstr "Type"
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:287 templates/cotton/transaction/item.html:21
#: apps/transactions/models.py:294 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
@@ -1254,37 +1259,37 @@ msgid "Paid"
msgstr "Paid"
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
#: apps/rules/models.py:258 apps/transactions/forms.py:68
#: apps/transactions/forms.py:334 apps/transactions/forms.py:524
#: apps/transactions/models.py:289 apps/transactions/models.py:471
#: apps/transactions/models.py:700
#: apps/rules/models.py:258 apps/transactions/forms.py:69
#: apps/transactions/forms.py:346 apps/transactions/forms.py:536
#: apps/transactions/models.py:296 apps/transactions/models.py:478
#: apps/transactions/models.py:707
#, fuzzy
msgid "Reference Date"
msgstr "Reference Date"
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:294
#: apps/transactions/models.py:681 templates/insights/fragments/sankey.html:95
#: apps/rules/models.py:262 apps/transactions/models.py:301
#: apps/transactions/models.py:688 templates/insights/fragments/sankey.html:95
#, fuzzy
msgid "Amount"
msgstr "Amount"
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
#: apps/rules/models.py:36 apps/rules/models.py:266
#: apps/transactions/forms.py:338 apps/transactions/models.py:299
#: apps/transactions/models.py:455 apps/transactions/models.py:684
#: apps/transactions/forms.py:350 apps/transactions/models.py:306
#: apps/transactions/models.py:462 apps/transactions/models.py:691
#, fuzzy
msgid "Description"
msgstr "Description"
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:338
#: apps/transactions/models.py:345
#, fuzzy
msgid "Internal Note"
msgstr "Internal Note"
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:340
#: apps/transactions/models.py:347
#, fuzzy
msgid "Internal ID"
msgstr "Internal ID"
@@ -1445,6 +1450,7 @@ msgstr "Update or Create Transaction action deleted successfully"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
#, fuzzy
@@ -1486,58 +1492,66 @@ msgstr "Amount min"
msgid "Amount max"
msgstr "Amount max"
#: apps/transactions/forms.py:171
#: apps/transactions/forms.py:172
#, fuzzy
msgid "More"
msgstr "More"
#: apps/transactions/forms.py:290
#: apps/transactions/forms.py:216
msgid "Save and add similar"
msgstr ""
#: apps/transactions/forms.py:221
msgid "Save and add another"
msgstr ""
#: apps/transactions/forms.py:302
#, fuzzy
msgid "From Amount"
msgstr "From Amount"
#: apps/transactions/forms.py:295
#: apps/transactions/forms.py:307
#, fuzzy
msgid "To Amount"
msgstr "To Amount"
#: apps/transactions/forms.py:412
#: apps/transactions/forms.py:424
#: templates/cotton/ui/quick_transactions_buttons.html:40
#, fuzzy
msgid "Transfer"
msgstr "Transfer"
#: apps/transactions/forms.py:658
#: apps/transactions/forms.py:670
#, fuzzy
msgid "Tag name"
msgstr "Tag name"
#: apps/transactions/forms.py:690
#: apps/transactions/forms.py:702
#, fuzzy
msgid "Entity name"
msgstr "Entity name"
#: apps/transactions/forms.py:722
#: apps/transactions/forms.py:734
#, fuzzy
msgid "Category name"
msgstr "Category name"
#: apps/transactions/forms.py:724
#: apps/transactions/forms.py:736
#, fuzzy
msgid "Muted categories won't count towards your monthly total"
msgstr "Muted categories won't count towards your monthly total"
#: apps/transactions/forms.py:910
#: apps/transactions/forms.py:922
#, fuzzy
msgid "End date should be after the start date"
msgstr "End date should be after the start date"
#: apps/transactions/models.py:199
#: apps/transactions/models.py:206
#, fuzzy
msgid "Mute"
msgstr "Mute"
#: apps/transactions/models.py:204
#: apps/transactions/models.py:211
#, fuzzy
msgid ""
"Deactivated categories won't be able to be selected when creating new "
@@ -1546,29 +1560,29 @@ msgstr ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
#: apps/transactions/models.py:212
#: apps/transactions/models.py:219
#, fuzzy
msgid "Transaction Category"
msgstr "Transaction Category"
#: apps/transactions/models.py:213
#: apps/transactions/models.py:220
#, fuzzy
msgid "Transaction Categories"
msgstr "Transaction Categories"
#: apps/transactions/models.py:228
#: apps/transactions/models.py:235
#, fuzzy
msgid ""
"Deactivated tags won't be able to be selected when creating new transactions"
msgstr ""
"Deactivated tags won't be able to be selected when creating new transactions"
#: apps/transactions/models.py:236 apps/transactions/models.py:237
#: apps/transactions/models.py:243 apps/transactions/models.py:244
#, fuzzy
msgid "Transaction Tags"
msgstr "Transaction Tags"
#: apps/transactions/models.py:252
#: apps/transactions/models.py:259
#, fuzzy
msgid ""
"Deactivated entities won't be able to be selected when creating new "
@@ -1577,182 +1591,182 @@ msgstr ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
#: apps/transactions/models.py:260
#: apps/transactions/models.py:267
#, fuzzy
msgid "Entity"
msgstr "Entity"
#: apps/transactions/models.py:272
#: apps/transactions/models.py:279
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/insights/fragments/category_overview/index.html:11
#: templates/insights/fragments/category_overview/index.html:64
#: templates/monthly_overview/fragments/monthly_summary.html:39
#, fuzzy
msgid "Income"
msgstr "Income"
#: apps/transactions/models.py:273
#: apps/transactions/models.py:280
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/insights/fragments/category_overview/index.html:12
#: templates/insights/fragments/category_overview/index.html:65
#, fuzzy
msgid "Expense"
msgstr "Expense"
#: apps/transactions/models.py:327 apps/transactions/models.py:510
#: apps/transactions/models.py:334 apps/transactions/models.py:517
#, fuzzy
msgid "Installment Plan"
msgstr "Installment Plan"
#: apps/transactions/models.py:336 apps/transactions/models.py:731
#: apps/transactions/models.py:343 apps/transactions/models.py:738
#, fuzzy
msgid "Recurring Transaction"
msgstr "Recurring Transaction"
#: apps/transactions/models.py:344
#: apps/transactions/models.py:351
#, fuzzy
msgid "Deleted"
msgstr "Deleted"
#: apps/transactions/models.py:349
#: apps/transactions/models.py:356
#, fuzzy
msgid "Deleted At"
msgstr "Deleted At"
#: apps/transactions/models.py:361
#: apps/transactions/models.py:368
#, fuzzy
msgid "Transaction"
msgstr "Transaction"
#: apps/transactions/models.py:433 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:440 templates/tags/fragments/table.html:71
#, fuzzy
msgid "No tags"
msgstr "No tags"
#: apps/transactions/models.py:434
#: apps/transactions/models.py:441
#, fuzzy
msgid "No category"
msgstr "No category"
#: apps/transactions/models.py:436
#: apps/transactions/models.py:443
#, fuzzy
msgid "No description"
msgstr "No description"
#: apps/transactions/models.py:442
#: apps/transactions/models.py:449
#, fuzzy
msgid "Yearly"
msgstr "Yearly"
#: apps/transactions/models.py:443 apps/users/models.py:26
#: apps/transactions/models.py:450 apps/users/models.py:26
#: templates/includes/navbar.html:26
#, fuzzy
msgid "Monthly"
msgstr "Monthly"
#: apps/transactions/models.py:444
#: apps/transactions/models.py:451
#, fuzzy
msgid "Weekly"
msgstr "Weekly"
#: apps/transactions/models.py:445
#: apps/transactions/models.py:452
#, fuzzy
msgid "Daily"
msgstr "Daily"
#: apps/transactions/models.py:458
#: apps/transactions/models.py:465
#, fuzzy
msgid "Number of Installments"
msgstr "Number of Installments"
#: apps/transactions/models.py:463
#: apps/transactions/models.py:470
#, fuzzy
msgid "Installment Start"
msgstr "Installment Start"
#: apps/transactions/models.py:464
#: apps/transactions/models.py:471
#, fuzzy
msgid "The installment number to start counting from"
msgstr "The installment number to start counting from"
#: apps/transactions/models.py:469 apps/transactions/models.py:704
#: apps/transactions/models.py:476 apps/transactions/models.py:711
#, fuzzy
msgid "Start Date"
msgstr "Start Date"
#: apps/transactions/models.py:473 apps/transactions/models.py:705
#: apps/transactions/models.py:480 apps/transactions/models.py:712
#, fuzzy
msgid "End Date"
msgstr "End Date"
#: apps/transactions/models.py:478
#: apps/transactions/models.py:485
#, fuzzy
msgid "Recurrence"
msgstr "Recurrence"
#: apps/transactions/models.py:481
#: apps/transactions/models.py:488
#, fuzzy
msgid "Installment Amount"
msgstr "Installment Amount"
#: apps/transactions/models.py:500 apps/transactions/models.py:721
#: apps/transactions/models.py:507 apps/transactions/models.py:728
#, fuzzy
msgid "Add description to transactions"
msgstr "Add description to transactions"
#: apps/transactions/models.py:503 apps/transactions/models.py:724
#: apps/transactions/models.py:510 apps/transactions/models.py:731
#, fuzzy
msgid "Add notes to transactions"
msgstr "Add notes to transactions"
#: apps/transactions/models.py:663
#: apps/transactions/models.py:670
#, fuzzy
msgid "day(s)"
msgstr "day(s)"
#: apps/transactions/models.py:664
#: apps/transactions/models.py:671
#, fuzzy
msgid "week(s)"
msgstr "week(s)"
#: apps/transactions/models.py:665
#: apps/transactions/models.py:672
#, fuzzy
msgid "month(s)"
msgstr "month(s)"
#: apps/transactions/models.py:666
#: apps/transactions/models.py:673
#, fuzzy
msgid "year(s)"
msgstr "year(s)"
#: apps/transactions/models.py:668
#: apps/transactions/models.py:675
#: templates/recurring_transactions/fragments/list.html:24
#, fuzzy
msgid "Paused"
msgstr "Paused"
#: apps/transactions/models.py:707
#: apps/transactions/models.py:714
#, fuzzy
msgid "Recurrence Type"
msgstr "Recurrence Type"
#: apps/transactions/models.py:710
#: apps/transactions/models.py:717
#, fuzzy
msgid "Recurrence Interval"
msgstr "Recurrence Interval"
#: apps/transactions/models.py:714
#: apps/transactions/models.py:721
#, fuzzy
msgid "Last Generated Date"
msgstr "Last Generated Date"
#: apps/transactions/models.py:717
#: apps/transactions/models.py:724
#, fuzzy
msgid "Last Generated Reference Date"
msgstr "Last Generated Reference Date"
@@ -1897,40 +1911,40 @@ msgstr "Tag updated successfully"
msgid "Tag deleted successfully"
msgstr "Tag deleted successfully"
#: apps/transactions/views/transactions.py:50
#: apps/transactions/views/transactions.py:89
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
#, fuzzy
msgid "Transaction added successfully"
msgstr "Transaction added successfully"
#: apps/transactions/views/transactions.py:123
#: apps/transactions/views/transactions.py:182
#, fuzzy
msgid "Transaction updated successfully"
msgstr "Transaction updated successfully"
#: apps/transactions/views/transactions.py:173
#: apps/transactions/views/transactions.py:232
#, fuzzy, python-format
msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "%(count)s transaction updated successfully"
msgstr[1] "%(count)s transactions updated successfully"
#: apps/transactions/views/transactions.py:209
#: apps/transactions/views/transactions.py:268
#, fuzzy
msgid "Transaction duplicated successfully"
msgstr "Transaction duplicated successfully"
#: apps/transactions/views/transactions.py:251
#: apps/transactions/views/transactions.py:310
#, fuzzy
msgid "Transaction deleted successfully"
msgstr "Transaction deleted successfully"
#: apps/transactions/views/transactions.py:269
#: apps/transactions/views/transactions.py:328
#, fuzzy
msgid "Transaction restored successfully"
msgstr "Transaction restored successfully"
#: apps/transactions/views/transactions.py:295
#: apps/transactions/views/transactions.py:354
#, fuzzy
msgid "Transfer added successfully"
msgstr "Transfer added successfully"
@@ -2118,37 +2132,37 @@ msgstr "Time Zone"
msgid "Start page"
msgstr "Start page"
#: apps/users/views.py:67
#: apps/users/views.py:68
#, fuzzy
msgid "Transaction amounts are now hidden"
msgstr "Transaction amounts are now hidden"
#: apps/users/views.py:70
#: apps/users/views.py:71
#, fuzzy
msgid "Transaction amounts are now displayed"
msgstr "Transaction amounts are now displayed"
#: apps/users/views.py:88
#: apps/users/views.py:89
#, fuzzy
msgid "Sounds are now muted"
msgstr "Sounds are now muted"
#: apps/users/views.py:91
#: apps/users/views.py:92
#, fuzzy
msgid "Sounds will now play"
msgstr "Sounds will now play"
#: apps/users/views.py:107
#: apps/users/views.py:108
#, fuzzy
msgid "Your settings have been updated"
msgstr "Your settings have been updated"
#: apps/users/views.py:151
#: apps/users/views.py:152
#, fuzzy
msgid "Item added successfully"
msgstr "Rule added successfully"
#: apps/users/views.py:182
#: apps/users/views.py:184
#, fuzzy
msgid "Item updated successfully"
msgstr "Rule updated successfully"
@@ -2454,7 +2468,7 @@ msgid "Muted"
msgstr "Muted"
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:225
#: templates/insights/fragments/category_overview/index.html:430
#, fuzzy
msgid "No categories"
msgstr "No categories"
@@ -3014,11 +3028,12 @@ msgid "Net Worth"
msgstr "Net Worth"
#: templates/includes/navbar.html:44
#: templates/insights/fragments/category_overview/index.html:50
#, fuzzy
msgid "Current"
msgstr "Current"
#: templates/includes/navbar.html:50
#: templates/includes/navbar.html:50 templates/insights/pages/index.html:5
#, fuzzy
msgid "Insights"
msgstr "Insights"
@@ -3157,13 +3172,36 @@ msgstr "Income/Expense by Account"
msgid "Income/Expense by Currency"
msgstr "Income/Expense by Currency"
#: templates/insights/fragments/category_overview/index.html:13
#: templates/insights/fragments/category_overview/index.html:14
msgid "Table"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:24
msgid "Bars"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:38
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:54
#, fuzzy
msgid "Final total"
msgstr "final total"
#: templates/insights/fragments/category_overview/index.html:66
#: templates/monthly_overview/fragments/monthly_summary.html:167
#, fuzzy
msgid "Total"
msgstr "Total"
#: templates/insights/fragments/category_overview/index.html:202
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:407
#, fuzzy
msgid "Final Total"
msgstr "final total"
@@ -3223,64 +3261,64 @@ msgstr "From"
msgid "Percentage"
msgstr "Percentage"
#: templates/insights/pages/index.html:35
#: templates/insights/pages/index.html:37
#, fuzzy
msgid "Month"
msgstr "Month"
#: templates/insights/pages/index.html:38
#: templates/insights/pages/index.html:40
#: templates/yearly_overview/pages/overview_by_account.html:61
#: templates/yearly_overview/pages/overview_by_currency.html:63
#, fuzzy
msgid "Year"
msgstr "Year"
#: templates/insights/pages/index.html:43
#: templates/insights/pages/index.html:45
#, fuzzy
msgid "Month Range"
msgstr "Month Range"
#: templates/insights/pages/index.html:48
#: templates/insights/pages/index.html:50
#, fuzzy
msgid "Year Range"
msgstr "Year Range"
#: templates/insights/pages/index.html:53
#: templates/insights/pages/index.html:55
#, fuzzy
msgid "Date Range"
msgstr "Date Range"
#: templates/insights/pages/index.html:81
#: templates/insights/pages/index.html:83
#, fuzzy
msgid "Account Flow"
msgstr "Account Flow"
#: templates/insights/pages/index.html:88
#: templates/insights/pages/index.html:90
#, fuzzy
msgid "Currency Flow"
msgstr "Currency Flow"
#: templates/insights/pages/index.html:95
#: templates/insights/pages/index.html:97
#, fuzzy
msgid "Category Explorer"
msgstr "Category Explorer"
#: templates/insights/pages/index.html:102
#: templates/insights/pages/index.html:104
#, fuzzy
msgid "Categories Overview"
msgstr "Categories Overview"
#: templates/insights/pages/index.html:109
#: templates/insights/pages/index.html:111
#, fuzzy
msgid "Late Transactions"
msgstr "Late Transactions"
#: templates/insights/pages/index.html:115
#: templates/insights/pages/index.html:117
#, fuzzy
msgid "Latest Transactions"
msgstr "Latest Transactions"
#: templates/insights/pages/index.html:121
#: templates/insights/pages/index.html:123
#, fuzzy
msgid "Emergency Fund"
msgstr "Emergency Fund"
@@ -3767,3 +3805,7 @@ msgstr "Use the credentials below to login"
#, fuzzy
msgid "Yearly Overview"
msgstr "Yearly Overview"
#, fuzzy
#~ msgid "Show tags"
#~ msgstr "No tags"

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-04-13 22:01+0000\n"
"PO-Revision-Date: 2025-04-13 11:16+0000\n"
"POT-Creation-Date: 2025-05-11 15:47+0000\n"
"PO-Revision-Date: 2025-05-01 09:16+0000\n"
"Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n"
"Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/"
"app/nl/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10.4\n"
"X-Generator: Weblate 5.11.1\n"
#: apps/accounts/forms.py:24
msgid "Group name"
@@ -27,10 +27,10 @@ msgstr "Groepsnaam"
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:202
#: apps/transactions/forms.py:269 apps/transactions/forms.py:629
#: apps/transactions/forms.py:672 apps/transactions/forms.py:704
#: apps/transactions/forms.py:739 apps/transactions/forms.py:891
#: apps/rules/forms.py:365 apps/transactions/forms.py:203
#: apps/transactions/forms.py:281 apps/transactions/forms.py:641
#: apps/transactions/forms.py:684 apps/transactions/forms.py:716
#: apps/transactions/forms.py:751 apps/transactions/forms.py:903
#: apps/users/forms.py:210 apps/users/forms.py:372
msgid "Update"
msgstr "Bijwerken"
@@ -40,10 +40,10 @@ msgstr "Bijwerken"
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
#: apps/transactions/forms.py:187 apps/transactions/forms.py:211
#: apps/transactions/forms.py:637 apps/transactions/forms.py:680
#: apps/transactions/forms.py:712 apps/transactions/forms.py:747
#: apps/transactions/forms.py:899 apps/users/forms.py:218
#: apps/transactions/forms.py:188 apps/transactions/forms.py:212
#: apps/transactions/forms.py:649 apps/transactions/forms.py:692
#: apps/transactions/forms.py:724 apps/transactions/forms.py:759
#: apps/transactions/forms.py:911 apps/users/forms.py:218
#: apps/users/forms.py:380 templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -74,12 +74,12 @@ msgstr "Nieuw saldo"
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
#: apps/rules/models.py:38 apps/rules/models.py:286
#: apps/transactions/forms.py:40 apps/transactions/forms.py:303
#: apps/transactions/forms.py:310 apps/transactions/forms.py:510
#: apps/transactions/forms.py:771 apps/transactions/models.py:305
#: apps/transactions/models.py:488 apps/transactions/models.py:688
#: templates/insights/fragments/category_overview/index.html:10
#: templates/insights/fragments/category_overview/index.html:215
#: apps/transactions/forms.py:41 apps/transactions/forms.py:315
#: apps/transactions/forms.py:322 apps/transactions/forms.py:522
#: apps/transactions/forms.py:783 apps/transactions/models.py:312
#: apps/transactions/models.py:495 apps/transactions/models.py:695
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
msgid "Category"
msgstr "Categorie"
@@ -87,19 +87,20 @@ msgstr "Categorie"
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:48 apps/transactions/forms.py:319
#: apps/transactions/forms.py:327 apps/transactions/forms.py:503
#: apps/transactions/forms.py:764 apps/transactions/models.py:311
#: apps/transactions/models.py:490 apps/transactions/models.py:692
#: templates/includes/navbar.html:108 templates/tags/fragments/list.html:5
#: templates/tags/pages/index.html:4
#: apps/transactions/forms.py:49 apps/transactions/forms.py:331
#: apps/transactions/forms.py:339 apps/transactions/forms.py:515
#: apps/transactions/forms.py:776 apps/transactions/models.py:318
#: apps/transactions/models.py:497 apps/transactions/models.py:699
#: templates/includes/navbar.html:108
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Labels"
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:198 apps/transactions/models.py:223
#: apps/transactions/models.py:247
#: apps/transactions/models.py:205 apps/transactions/models.py:230
#: apps/transactions/models.py:254
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -165,9 +166,9 @@ msgstr ""
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:60 apps/transactions/forms.py:495
#: apps/transactions/forms.py:756 apps/transactions/models.py:278
#: apps/transactions/models.py:448 apps/transactions/models.py:670
#: apps/transactions/forms.py:61 apps/transactions/forms.py:507
#: apps/transactions/forms.py:768 apps/transactions/models.py:285
#: apps/transactions/models.py:455 apps/transactions/models.py:677
msgid "Account"
msgstr "Rekening"
@@ -260,19 +261,19 @@ msgstr "De categorie met deze ID bestaat niet."
msgid "Invalid category data. Provide an ID or name."
msgstr "Ongeldige categoriegegevens. Geef een ID of naam op."
#: apps/api/fields/transactions.py:67
#: apps/api/fields/transactions.py:70
msgid "Tag with this ID does not exist."
msgstr "Label met dit ID bestaat niet."
#: apps/api/fields/transactions.py:77
#: apps/api/fields/transactions.py:80
msgid "Invalid tag data. Provide an ID or name."
msgstr "Ongeldige labelgegevens. Geef een ID of naam op."
#: apps/api/fields/transactions.py:102
#: apps/api/fields/transactions.py:105
msgid "Entity with this ID does not exist."
msgstr "Bedrijf met dit ID bestaat niet."
#: apps/api/fields/transactions.py:112
#: apps/api/fields/transactions.py:115
msgid "Invalid entity data. Provide an ID or name."
msgstr "Ongeldige bedrijfsgegevens. Geef een ID of naam op."
@@ -298,11 +299,11 @@ msgstr "Ongeldige datumnotatie. Gebruik JJJJ-MM of JJJJ-MM-DD."
msgid "Invalid date format. Use YYYY-MM."
msgstr "Ongeldige datumnotatie. Gebruik JJJJ-MM."
#: apps/common/forms.py:24
#: apps/common/forms.py:25
msgid "Owner"
msgstr "Eigenaar"
#: apps/common/forms.py:27
#: apps/common/forms.py:28
msgid ""
"The owner of this object, if empty all users can see, edit and take "
"ownership."
@@ -310,19 +311,19 @@ msgstr ""
"De eigenaar van dit object, indien leeg kunnen alle gebruikers dit object "
"zien, bewerken en er eigenaar van worden."
#: apps/common/forms.py:34
#: apps/common/forms.py:35
msgid "Shared with users"
msgstr "Gedeeld met gebruikers"
#: apps/common/forms.py:35
#: apps/common/forms.py:36
msgid "Select users to share this object with"
msgstr "Selecteer gebruikers om dit object mee te delen"
#: apps/common/forms.py:40
#: apps/common/forms.py:41
msgid "Visibility"
msgstr "Zichtbaarheid"
#: apps/common/forms.py:42
#: apps/common/forms.py:43
msgid ""
"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."
@@ -331,10 +332,14 @@ msgstr ""
"bewerkbaar door de eigenaar.<br/>Publiek: Weergegeven voor alle gebruikers. "
"Alleen bewerkbaar door de eigenaar."
#: apps/common/forms.py:79 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:135
msgid "Save"
msgstr "Opslaan"
#: apps/common/forms.py:95
msgid "You cannot share this item with its owner."
msgstr "Je kunt dit item niet delen met zijn eigenaar."
#: apps/common/models.py:29
msgid "Private"
msgstr "Privé"
@@ -460,8 +465,8 @@ msgstr "Achtervoegsel"
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
#: apps/transactions/forms.py:64 apps/transactions/forms.py:331
#: apps/transactions/models.py:288
#: apps/transactions/forms.py:65 apps/transactions/forms.py:343
#: apps/transactions/models.py:295
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
@@ -542,8 +547,8 @@ msgstr "Dienstnaam"
msgid "Service Type"
msgstr "Soort Dienst"
#: apps/currencies/models.py:110 apps/transactions/models.py:202
#: apps/transactions/models.py:226 apps/transactions/models.py:250
#: apps/currencies/models.py:110 apps/transactions/models.py:209
#: apps/transactions/models.py:233 apps/transactions/models.py:257
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
@@ -672,11 +677,11 @@ msgstr "Diensten succesvol in de wachtrij geplaatst"
msgid "Create transaction"
msgstr "Maak verrichtingen"
#: apps/dca/forms.py:70 apps/transactions/forms.py:278
#: apps/dca/forms.py:70 apps/transactions/forms.py:290
msgid "From Account"
msgstr "Van rekening"
#: apps/dca/forms.py:76 apps/transactions/forms.py:283
#: apps/dca/forms.py:76 apps/transactions/forms.py:295
msgid "To Account"
msgstr "Naar rekening"
@@ -702,7 +707,7 @@ msgstr "Koppel verrichting"
msgid "You must provide an account."
msgstr "Je moet een account opgeven."
#: apps/dca/forms.py:312 apps/transactions/forms.py:445
#: apps/dca/forms.py:312 apps/transactions/forms.py:457
msgid "From and To accounts must be different."
msgstr "Van en Naar rekening moeten verschillend zijn."
@@ -721,8 +726,8 @@ msgstr "Betaal Munteenheid"
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
#: apps/transactions/forms.py:347 apps/transactions/models.py:301
#: apps/transactions/models.py:497 apps/transactions/models.py:698
#: apps/transactions/forms.py:359 apps/transactions/models.py:308
#: apps/transactions/models.py:504 apps/transactions/models.py:705
msgid "Notes"
msgstr "Opmerkingen"
@@ -785,7 +790,7 @@ msgid "Users"
msgstr "Gebruikers"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:362 templates/includes/navbar.html:57
#: apps/transactions/models.py:369 templates/includes/navbar.html:57
#: templates/includes/navbar.html:104
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -802,23 +807,23 @@ msgstr "Categorieën"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/transactions/forms.py:56 apps/transactions/forms.py:518
#: apps/transactions/forms.py:779 apps/transactions/models.py:261
#: apps/transactions/models.py:316 apps/transactions/models.py:493
#: apps/transactions/models.py:695 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:57 apps/transactions/forms.py:530
#: apps/transactions/forms.py:791 apps/transactions/models.py:268
#: apps/transactions/models.py:323 apps/transactions/models.py:500
#: apps/transactions/models.py:702 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:110
msgid "Entities"
msgstr "Bedrijven"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:732 templates/includes/navbar.html:74
#: apps/transactions/models.py:739 templates/includes/navbar.html:74
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr "Terugkerende Verrichtingen"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:511 templates/includes/navbar.html:72
#: apps/transactions/models.py:518 templates/includes/navbar.html:72
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -973,9 +978,9 @@ msgstr "Run met succes verwijderd"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:19
#: templates/insights/fragments/category_overview/index.html:87
#: templates/insights/fragments/category_overview/index.html:116
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:285
#: templates/insights/fragments/category_overview/index.html:314
msgid "Uncategorized"
msgstr "Ongecategoriseerd"
@@ -1057,14 +1062,14 @@ msgid "Operator"
msgstr "Operator"
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:285
#: apps/transactions/models.py:453 apps/transactions/models.py:676
#: apps/rules/models.py:246 apps/transactions/models.py:292
#: apps/transactions/models.py:460 apps/transactions/models.py:683
msgid "Type"
msgstr "Soort"
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:287 templates/cotton/transaction/item.html:21
#: apps/transactions/models.py:294 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
@@ -1072,33 +1077,33 @@ msgid "Paid"
msgstr "Betaald"
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
#: apps/rules/models.py:258 apps/transactions/forms.py:68
#: apps/transactions/forms.py:334 apps/transactions/forms.py:524
#: apps/transactions/models.py:289 apps/transactions/models.py:471
#: apps/transactions/models.py:700
#: apps/rules/models.py:258 apps/transactions/forms.py:69
#: apps/transactions/forms.py:346 apps/transactions/forms.py:536
#: apps/transactions/models.py:296 apps/transactions/models.py:478
#: apps/transactions/models.py:707
msgid "Reference Date"
msgstr "Referentiedatum"
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:294
#: apps/transactions/models.py:681 templates/insights/fragments/sankey.html:95
#: apps/rules/models.py:262 apps/transactions/models.py:301
#: apps/transactions/models.py:688 templates/insights/fragments/sankey.html:95
msgid "Amount"
msgstr "Bedrag"
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
#: apps/rules/models.py:36 apps/rules/models.py:266
#: apps/transactions/forms.py:338 apps/transactions/models.py:299
#: apps/transactions/models.py:455 apps/transactions/models.py:684
#: apps/transactions/forms.py:350 apps/transactions/models.py:306
#: apps/transactions/models.py:462 apps/transactions/models.py:691
msgid "Description"
msgstr "Beschrijving"
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:338
#: apps/transactions/models.py:345
msgid "Internal Note"
msgstr "Interne opmerking"
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:340
#: apps/transactions/models.py:347
msgid "Internal ID"
msgstr "Interne ID"
@@ -1228,6 +1233,7 @@ msgstr "Verrichting Bijwerken Of Maken succesvol verwijderd"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -1261,48 +1267,56 @@ msgstr "Minimum bedrag"
msgid "Amount max"
msgstr "Maximaal bedrag"
#: apps/transactions/forms.py:171
#: apps/transactions/forms.py:172
msgid "More"
msgstr "Meer"
#: apps/transactions/forms.py:290
#: apps/transactions/forms.py:216
msgid "Save and add similar"
msgstr "Opslaan en vergelijkbaar toevoegen"
#: apps/transactions/forms.py:221
msgid "Save and add another"
msgstr "Opslaan en een andere toevoegen"
#: apps/transactions/forms.py:302
msgid "From Amount"
msgstr "Van Bedrag"
#: apps/transactions/forms.py:295
#: apps/transactions/forms.py:307
msgid "To Amount"
msgstr "Naar Bedrag"
#: apps/transactions/forms.py:412
#: apps/transactions/forms.py:424
#: templates/cotton/ui/quick_transactions_buttons.html:40
msgid "Transfer"
msgstr "Overschrijving"
#: apps/transactions/forms.py:658
#: apps/transactions/forms.py:670
msgid "Tag name"
msgstr "Labelnaam"
#: apps/transactions/forms.py:690
#: apps/transactions/forms.py:702
msgid "Entity name"
msgstr "Naam van bedrijf"
#: apps/transactions/forms.py:722
#: apps/transactions/forms.py:734
msgid "Category name"
msgstr "Naam van categorie"
#: apps/transactions/forms.py:724
#: apps/transactions/forms.py:736
msgid "Muted categories won't count towards your monthly total"
msgstr "Gedempte categorieën tellen niet mee voor je maandtotaal"
#: apps/transactions/forms.py:910
#: apps/transactions/forms.py:922
msgid "End date should be after the start date"
msgstr "De einddatum moet na de begindatum vallen"
#: apps/transactions/models.py:199
#: apps/transactions/models.py:206
msgid "Mute"
msgstr "Dempen"
#: apps/transactions/models.py:204
#: apps/transactions/models.py:211
msgid ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
@@ -1310,26 +1324,26 @@ msgstr ""
"Gedeactiveerde categorieën kunnen niet worden geselecteerd bij het maken van "
"nieuwe transacties"
#: apps/transactions/models.py:212
#: apps/transactions/models.py:219
msgid "Transaction Category"
msgstr "Transactie categorie"
#: apps/transactions/models.py:213
#: apps/transactions/models.py:220
msgid "Transaction Categories"
msgstr "Transactie categorieën"
#: apps/transactions/models.py:228
#: apps/transactions/models.py:235
msgid ""
"Deactivated tags won't be able to be selected when creating new transactions"
msgstr ""
"Gedeactiveerde labels kunnen niet worden geselecteerd bij het maken van "
"nieuwe verrichtingen"
#: apps/transactions/models.py:236 apps/transactions/models.py:237
#: apps/transactions/models.py:243 apps/transactions/models.py:244
msgid "Transaction Tags"
msgstr "Verrichting Labels"
#: apps/transactions/models.py:252
#: apps/transactions/models.py:259
msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
@@ -1337,150 +1351,150 @@ msgstr ""
"Gedeactiveerde bedrijven kunnen niet worden geselecteerd bij het maken van "
"nieuwe verrichtingen"
#: apps/transactions/models.py:260
#: apps/transactions/models.py:267
msgid "Entity"
msgstr "Bedrijf"
#: apps/transactions/models.py:272
#: apps/transactions/models.py:279
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/insights/fragments/category_overview/index.html:11
#: templates/insights/fragments/category_overview/index.html:64
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr "Ontvangsten Transactie"
#: apps/transactions/models.py:273
#: apps/transactions/models.py:280
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/insights/fragments/category_overview/index.html:12
#: templates/insights/fragments/category_overview/index.html:65
msgid "Expense"
msgstr "Uitgave"
#: apps/transactions/models.py:327 apps/transactions/models.py:510
#: apps/transactions/models.py:334 apps/transactions/models.py:517
msgid "Installment Plan"
msgstr "Afbetalingsplan"
#: apps/transactions/models.py:336 apps/transactions/models.py:731
#: apps/transactions/models.py:343 apps/transactions/models.py:738
msgid "Recurring Transaction"
msgstr "Terugkerende verrichting"
#: apps/transactions/models.py:344
#: apps/transactions/models.py:351
msgid "Deleted"
msgstr "Verwijderd"
#: apps/transactions/models.py:349
#: apps/transactions/models.py:356
msgid "Deleted At"
msgstr "Verwijderd Op"
#: apps/transactions/models.py:361
#: apps/transactions/models.py:368
msgid "Transaction"
msgstr "Verrichting"
#: apps/transactions/models.py:433 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:440 templates/tags/fragments/table.html:71
msgid "No tags"
msgstr "Geen labels"
#: apps/transactions/models.py:434
#: apps/transactions/models.py:441
msgid "No category"
msgstr "Geen categorie"
#: apps/transactions/models.py:436
#: apps/transactions/models.py:443
msgid "No description"
msgstr "Geen Beschrijving"
#: apps/transactions/models.py:442
#: apps/transactions/models.py:449
msgid "Yearly"
msgstr "Jaarlijks"
#: apps/transactions/models.py:443 apps/users/models.py:26
#: apps/transactions/models.py:450 apps/users/models.py:26
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr "Maandelijks"
#: apps/transactions/models.py:444
#: apps/transactions/models.py:451
msgid "Weekly"
msgstr "Wekelijks"
#: apps/transactions/models.py:445
#: apps/transactions/models.py:452
msgid "Daily"
msgstr "Dagelijks"
#: apps/transactions/models.py:458
#: apps/transactions/models.py:465
msgid "Number of Installments"
msgstr "Aantal aflossingen"
#: apps/transactions/models.py:463
#: apps/transactions/models.py:470
msgid "Installment Start"
msgstr "Begin afbetaling"
#: apps/transactions/models.py:464
#: apps/transactions/models.py:471
msgid "The installment number to start counting from"
msgstr "Het nummer van de aflevering om mee te beginnen"
#: apps/transactions/models.py:469 apps/transactions/models.py:704
#: apps/transactions/models.py:476 apps/transactions/models.py:711
msgid "Start Date"
msgstr "Startdatum"
#: apps/transactions/models.py:473 apps/transactions/models.py:705
#: apps/transactions/models.py:480 apps/transactions/models.py:712
msgid "End Date"
msgstr "Einddatum"
#: apps/transactions/models.py:478
#: apps/transactions/models.py:485
msgid "Recurrence"
msgstr "Terugkeerpatroon"
#: apps/transactions/models.py:481
#: apps/transactions/models.py:488
msgid "Installment Amount"
msgstr "Termijnbedrag"
#: apps/transactions/models.py:500 apps/transactions/models.py:721
#: apps/transactions/models.py:507 apps/transactions/models.py:728
msgid "Add description to transactions"
msgstr "Beschrijving toevoegen aan verrichting"
#: apps/transactions/models.py:503 apps/transactions/models.py:724
#: apps/transactions/models.py:510 apps/transactions/models.py:731
msgid "Add notes to transactions"
msgstr "Notities toevoegen aan verrichting"
#: apps/transactions/models.py:663
#: apps/transactions/models.py:670
msgid "day(s)"
msgstr "dag(en)"
#: apps/transactions/models.py:664
#: apps/transactions/models.py:671
msgid "week(s)"
msgstr "we(e)k(en)"
#: apps/transactions/models.py:665
#: apps/transactions/models.py:672
msgid "month(s)"
msgstr "maand(en)"
#: apps/transactions/models.py:666
#: apps/transactions/models.py:673
msgid "year(s)"
msgstr "ja(a)r(en)"
#: apps/transactions/models.py:668
#: apps/transactions/models.py:675
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr "Gepauzeerd"
#: apps/transactions/models.py:707
#: apps/transactions/models.py:714
msgid "Recurrence Type"
msgstr "Type Terugkeerpatroon"
#: apps/transactions/models.py:710
#: apps/transactions/models.py:717
msgid "Recurrence Interval"
msgstr "Terugkeer Interval"
#: apps/transactions/models.py:714
#: apps/transactions/models.py:721
msgid "Last Generated Date"
msgstr "Laatste Gegenereerde Datum"
#: apps/transactions/models.py:717
#: apps/transactions/models.py:724
msgid "Last Generated Reference Date"
msgstr "Laatste Gegenereerde Referentiedatum"
@@ -1605,35 +1619,35 @@ msgstr "Label succesvol bijgewerkt"
msgid "Tag deleted successfully"
msgstr "Label succesvol verwijderd"
#: apps/transactions/views/transactions.py:50
#: apps/transactions/views/transactions.py:89
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully"
msgstr "Verrichting succesvol toegevoegd"
#: apps/transactions/views/transactions.py:123
#: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully"
msgstr "Verrichting succesvol bijgewerkt"
#: apps/transactions/views/transactions.py:173
#: apps/transactions/views/transactions.py:232
#, python-format
msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "%(count)s verrichting succesvol bijgewerkt"
msgstr[1] "%(count)s verrichtingen succesvol bijgewerkt"
#: apps/transactions/views/transactions.py:209
#: apps/transactions/views/transactions.py:268
msgid "Transaction duplicated successfully"
msgstr "Verrichting succesvol gedupliceerd"
#: apps/transactions/views/transactions.py:251
#: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully"
msgstr "Verrichting succesvol verwijderd"
#: apps/transactions/views/transactions.py:269
#: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully"
msgstr "Verrichting succesvol hersteld"
#: apps/transactions/views/transactions.py:295
#: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully"
msgstr "Transactie succesvol toegevoegd"
@@ -1703,64 +1717,64 @@ msgstr ""
"Overweeg om WYGIWYH te helpen vertalen naar jouw taal op %(translation_link)s"
#: apps/users/forms.py:150
#, fuzzy
#| msgid "Password"
msgid "New Password"
msgstr "Wachtwoord"
msgstr "Nieuw Wachtwoord"
#: apps/users/forms.py:153
msgid "Leave blank to keep the current password."
msgstr ""
msgstr "Laat leeg om het huidige wachtwoord te behouden."
#: apps/users/forms.py:156
msgid "Confirm New Password"
msgstr ""
msgstr "Bevestig Nieuw Wachtwoord"
#: apps/users/forms.py:168 apps/users/forms.py:329
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr ""
"Geeft aan of deze gebruiker als actief moet worden behandeld. Deselecteer "
"dit in plaats van accounts te verwijderen."
#: apps/users/forms.py:171 apps/users/forms.py:332
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
"Geeft aan dat deze gebruiker alle rechten heeft zonder ze expliciet toe te "
"kennen."
#: apps/users/forms.py:242
msgid "This email address is already in use by another account."
msgstr ""
msgstr "Dit e-mailadres wordt al gebruikt door een ander account."
#: apps/users/forms.py:250
msgid "The two password fields didn't match."
msgstr ""
msgstr "De twee wachtwoordvelden komen niet overeen."
#: apps/users/forms.py:252
msgid "Please confirm your new password."
msgstr ""
msgstr "Bevestig je nieuwe wachtwoord."
#: apps/users/forms.py:254
msgid "Please enter the new password first."
msgstr ""
msgstr "Geef eerst het nieuwe wachtwoord op."
#: apps/users/forms.py:274
msgid "You cannot deactivate your own account using this form."
msgstr ""
msgstr "Je kunt je eigen account niet deactiveren met dit formulier."
#: apps/users/forms.py:287
msgid "Cannot remove status from the last superuser."
msgstr ""
msgstr "Kan de status van de laatste Hoofdadmin niet verwijderen."
#: apps/users/forms.py:293
msgid "You cannot remove your own superuser status using this form."
msgstr ""
msgstr "Je kunt je eigen hoofdadminrechten niet verwijderen met dit formulier."
#: apps/users/forms.py:390
#, fuzzy
#| msgid "A value for this field already exists in the rule."
msgid "A user with this email address already exists."
msgstr "Een waarde voor dit veld bestaat al in de regel."
msgstr "Er bestaat al een gebruiker met dit e-mailadres."
#: apps/users/models.py:27 templates/includes/navbar.html:28
msgid "Yearly by currency"
@@ -1802,37 +1816,33 @@ msgstr "Tijdszone"
msgid "Start page"
msgstr "Startpagina"
#: apps/users/views.py:67
#: apps/users/views.py:68
msgid "Transaction amounts are now hidden"
msgstr "Verrichtingsbedragen worden nu verborgen"
#: apps/users/views.py:70
#: apps/users/views.py:71
msgid "Transaction amounts are now displayed"
msgstr "Verrichtingsbedragen worden nu weergegeven"
#: apps/users/views.py:88
#: apps/users/views.py:89
msgid "Sounds are now muted"
msgstr "De Geluiden zijn nu gedempt"
#: apps/users/views.py:91
#: apps/users/views.py:92
msgid "Sounds will now play"
msgstr "De geluiden worden nu afgespeeld"
#: apps/users/views.py:107
#: apps/users/views.py:108
msgid "Your settings have been updated"
msgstr "Jouw instellingen zijn bijgewerkt"
#: apps/users/views.py:151
#, fuzzy
#| msgid "Rule added successfully"
#: apps/users/views.py:152
msgid "Item added successfully"
msgstr "Regel succesvol toegevoegd"
msgstr "Item succesvol toegevoegd"
#: apps/users/views.py:182
#, fuzzy
#| msgid "Rule updated successfully"
#: apps/users/views.py:184
msgid "Item updated successfully"
msgstr "Regel succesvol bijgewerkt"
msgstr "Item succesvol bijgewerkt"
#: templates/account_groups/fragments/add.html:5
msgid "Add account group"
@@ -2102,7 +2112,7 @@ msgid "Muted"
msgstr "Gedempt"
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:225
#: templates/insights/fragments/category_overview/index.html:430
msgid "No categories"
msgstr "Geen categorieën"
@@ -2562,10 +2572,11 @@ msgid "Net Worth"
msgstr "Netto Waarde"
#: templates/includes/navbar.html:44
#: templates/insights/fragments/category_overview/index.html:50
msgid "Current"
msgstr "Huidige"
#: templates/includes/navbar.html:50
#: templates/includes/navbar.html:50 templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Inzichten"
@@ -2603,7 +2614,7 @@ msgstr "Automatisatie"
#: templates/includes/navbar.html:145
msgid "Admin"
msgstr ""
msgstr "Admin"
#: templates/includes/navbar.html:154
msgid "Only use this if you know what you're doing"
@@ -2622,10 +2633,8 @@ msgid "Settings"
msgstr "Instellingen"
#: templates/includes/navbar/user_menu.html:19
#, fuzzy
#| msgid "Edit import profile"
msgid "Edit profile"
msgstr "Importprofiel bewerken"
msgstr "Profiel bewerken"
#: templates/includes/navbar/user_menu.html:46
msgid "Clear cache"
@@ -2685,12 +2694,36 @@ msgstr "Inkomsten/uitgaven per rekening"
msgid "Income/Expense by Currency"
msgstr "Inkomsten/uitgaven per Munteenheid"
#: templates/insights/fragments/category_overview/index.html:13
#: templates/insights/fragments/category_overview/index.html:14
msgid "Table"
msgstr "Tabel"
#: templates/insights/fragments/category_overview/index.html:24
msgid "Bars"
msgstr "Balken"
#: templates/insights/fragments/category_overview/index.html:38
msgid ""
"Transaction amounts associated with multiple tags 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:54
msgid "Final total"
msgstr "Eindtotaal"
#: templates/insights/fragments/category_overview/index.html:66
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr "Totaal"
#: templates/insights/fragments/category_overview/index.html:202
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr "Niet gelabeld"
#: templates/insights/fragments/category_overview/index.html:407
msgid "Final Total"
msgstr "Eindtotaal"
@@ -2738,53 +2771,53 @@ msgstr "Van"
msgid "Percentage"
msgstr "Percentage"
#: templates/insights/pages/index.html:35
#: templates/insights/pages/index.html:37
msgid "Month"
msgstr "Maand"
#: templates/insights/pages/index.html:38
#: templates/insights/pages/index.html:40
#: templates/yearly_overview/pages/overview_by_account.html:61
#: templates/yearly_overview/pages/overview_by_currency.html:63
msgid "Year"
msgstr "Jaar"
#: templates/insights/pages/index.html:43
#: templates/insights/pages/index.html:45
msgid "Month Range"
msgstr "Maand Bereik"
#: templates/insights/pages/index.html:48
#: templates/insights/pages/index.html:50
msgid "Year Range"
msgstr "Jaar Bereik"
#: templates/insights/pages/index.html:53
#: templates/insights/pages/index.html:55
msgid "Date Range"
msgstr "Datum Bereik"
#: templates/insights/pages/index.html:81
#: templates/insights/pages/index.html:83
msgid "Account Flow"
msgstr "Rekeningstroom"
#: templates/insights/pages/index.html:88
#: templates/insights/pages/index.html:90
msgid "Currency Flow"
msgstr "Geldstroom"
#: templates/insights/pages/index.html:95
#: templates/insights/pages/index.html:97
msgid "Category Explorer"
msgstr "Categorie Verkenner"
#: templates/insights/pages/index.html:102
#: templates/insights/pages/index.html:104
msgid "Categories Overview"
msgstr "Categorieën Overzicht"
#: templates/insights/pages/index.html:109
#: templates/insights/pages/index.html:111
msgid "Late Transactions"
msgstr "Betalingsachterstanden"
#: templates/insights/pages/index.html:115
#: templates/insights/pages/index.html:117
msgid "Latest Transactions"
msgstr "Laatste Verrichtingen"
#: templates/insights/pages/index.html:121
#: templates/insights/pages/index.html:123
msgid "Emergency Fund"
msgstr "Noodfonds"
@@ -3135,36 +3168,28 @@ msgid "Unchanged"
msgstr "Ongewijzigd"
#: templates/users/fragments/add.html:5
#, fuzzy
#| msgid "Add new"
msgid "Add user"
msgstr "Nieuwe toevoegen"
msgstr "Gebruiker toevoegen"
#: templates/users/fragments/edit.html:5
#, fuzzy
#| msgid "Edit category"
msgid "Edit user"
msgstr "Categorie bewerken"
msgstr "Gebruiker bewerken"
#: templates/users/fragments/list.html:30
#, fuzzy
#| msgid "E-mail"
msgid "Email"
msgstr "E-mailadres"
#: templates/users/fragments/list.html:31
msgid "Superuser"
msgstr ""
msgstr "Hoofdadmin"
#: templates/users/fragments/list.html:51
msgid "Impersonate"
msgstr ""
msgstr "Doe je voor als"
#: templates/users/fragments/list.html:80
#, fuzzy
#| msgid "Users"
msgid "No users"
msgstr "Gebruikers"
msgstr "Geen gebruikers"
#: templates/users/generic/hide_amounts.html:2
msgid "Hide amounts"
@@ -3195,6 +3220,11 @@ msgstr "Gebruik de onderstaande gegevens om in te loggen"
msgid "Yearly Overview"
msgstr "Jaaroverzicht"
#, fuzzy
#~| msgid "No tags"
#~ msgid "Show tags"
#~ msgstr "Geen labels"
#, fuzzy
#~| msgid "From Amount"
#~ msgid "Principal Amount"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-04-13 22:01+0000\n"
"POT-Creation-Date: 2025-05-11 15:47+0000\n"
"PO-Revision-Date: 2025-04-13 08:16+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Portuguese <https://translations.herculino.com/projects/"
@@ -27,10 +27,10 @@ msgstr "Nome do grupo"
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:202
#: apps/transactions/forms.py:269 apps/transactions/forms.py:629
#: apps/transactions/forms.py:672 apps/transactions/forms.py:704
#: apps/transactions/forms.py:739 apps/transactions/forms.py:891
#: apps/rules/forms.py:365 apps/transactions/forms.py:203
#: apps/transactions/forms.py:281 apps/transactions/forms.py:641
#: apps/transactions/forms.py:684 apps/transactions/forms.py:716
#: apps/transactions/forms.py:751 apps/transactions/forms.py:903
#: apps/users/forms.py:210 apps/users/forms.py:372
msgid "Update"
msgstr "Atualizar"
@@ -40,10 +40,10 @@ msgstr "Atualizar"
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
#: apps/transactions/forms.py:187 apps/transactions/forms.py:211
#: apps/transactions/forms.py:637 apps/transactions/forms.py:680
#: apps/transactions/forms.py:712 apps/transactions/forms.py:747
#: apps/transactions/forms.py:899 apps/users/forms.py:218
#: apps/transactions/forms.py:188 apps/transactions/forms.py:212
#: apps/transactions/forms.py:649 apps/transactions/forms.py:692
#: apps/transactions/forms.py:724 apps/transactions/forms.py:759
#: apps/transactions/forms.py:911 apps/users/forms.py:218
#: apps/users/forms.py:380 templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -74,12 +74,12 @@ msgstr "Novo saldo"
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
#: apps/rules/models.py:38 apps/rules/models.py:286
#: apps/transactions/forms.py:40 apps/transactions/forms.py:303
#: apps/transactions/forms.py:310 apps/transactions/forms.py:510
#: apps/transactions/forms.py:771 apps/transactions/models.py:305
#: apps/transactions/models.py:488 apps/transactions/models.py:688
#: templates/insights/fragments/category_overview/index.html:10
#: templates/insights/fragments/category_overview/index.html:215
#: apps/transactions/forms.py:41 apps/transactions/forms.py:315
#: apps/transactions/forms.py:322 apps/transactions/forms.py:522
#: apps/transactions/forms.py:783 apps/transactions/models.py:312
#: apps/transactions/models.py:495 apps/transactions/models.py:695
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
msgid "Category"
msgstr "Categoria"
@@ -87,19 +87,20 @@ msgstr "Categoria"
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:48 apps/transactions/forms.py:319
#: apps/transactions/forms.py:327 apps/transactions/forms.py:503
#: apps/transactions/forms.py:764 apps/transactions/models.py:311
#: apps/transactions/models.py:490 apps/transactions/models.py:692
#: templates/includes/navbar.html:108 templates/tags/fragments/list.html:5
#: templates/tags/pages/index.html:4
#: apps/transactions/forms.py:49 apps/transactions/forms.py:331
#: apps/transactions/forms.py:339 apps/transactions/forms.py:515
#: apps/transactions/forms.py:776 apps/transactions/models.py:318
#: apps/transactions/models.py:497 apps/transactions/models.py:699
#: templates/includes/navbar.html:108
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Tags"
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:198 apps/transactions/models.py:223
#: apps/transactions/models.py:247
#: apps/transactions/models.py:205 apps/transactions/models.py:230
#: apps/transactions/models.py:254
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -164,9 +165,9 @@ msgstr ""
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:60 apps/transactions/forms.py:495
#: apps/transactions/forms.py:756 apps/transactions/models.py:278
#: apps/transactions/models.py:448 apps/transactions/models.py:670
#: apps/transactions/forms.py:61 apps/transactions/forms.py:507
#: apps/transactions/forms.py:768 apps/transactions/models.py:285
#: apps/transactions/models.py:455 apps/transactions/models.py:677
msgid "Account"
msgstr "Conta"
@@ -258,19 +259,19 @@ msgstr "Categoria com esse ID não existe."
msgid "Invalid category data. Provide an ID or name."
msgstr "Dados da categoria inválidos. Forneça um ID ou nome."
#: apps/api/fields/transactions.py:67
#: apps/api/fields/transactions.py:70
msgid "Tag with this ID does not exist."
msgstr "Tag com esse ID não existe."
#: apps/api/fields/transactions.py:77
#: apps/api/fields/transactions.py:80
msgid "Invalid tag data. Provide an ID or name."
msgstr "Dados da tag inválidos. Forneça um ID ou nome."
#: apps/api/fields/transactions.py:102
#: apps/api/fields/transactions.py:105
msgid "Entity with this ID does not exist."
msgstr "Entidade com esse ID não existe."
#: apps/api/fields/transactions.py:112
#: apps/api/fields/transactions.py:115
msgid "Invalid entity data. Provide an ID or name."
msgstr "Dados da entidade inválidos. Forneça um ID ou nome."
@@ -296,11 +297,11 @@ msgstr "Formato de data inválido. Use AAAA-MM ou AAAA-MM-DD."
msgid "Invalid date format. Use YYYY-MM."
msgstr "Formato de data inválido. Use AAAA-MM."
#: apps/common/forms.py:24
#: apps/common/forms.py:25
msgid "Owner"
msgstr "Proprietário"
#: apps/common/forms.py:27
#: apps/common/forms.py:28
msgid ""
"The owner of this object, if empty all users can see, edit and take "
"ownership."
@@ -308,19 +309,19 @@ msgstr ""
"O proprietário desse objeto, se estiver vazio, todos os usuários poderão "
"ver, editar e assumir a propriedade."
#: apps/common/forms.py:34
#: apps/common/forms.py:35
msgid "Shared with users"
msgstr "Compartilhado com os usuários"
#: apps/common/forms.py:35
#: apps/common/forms.py:36
msgid "Select users to share this object with"
msgstr "Selecione os usuários com os quais compartilhar esse objeto"
#: apps/common/forms.py:40
#: apps/common/forms.py:41
msgid "Visibility"
msgstr "Visibilidade"
#: apps/common/forms.py:42
#: apps/common/forms.py:43
msgid ""
"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."
@@ -329,10 +330,14 @@ msgstr ""
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
"usuários. Somente editável pelo proprietário."
#: apps/common/forms.py:79 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:135
msgid "Save"
msgstr "Salvar"
#: apps/common/forms.py:95
msgid "You cannot share this item with its owner."
msgstr ""
#: apps/common/models.py:29
msgid "Private"
msgstr "Privado"
@@ -458,8 +463,8 @@ msgstr "Sufixo"
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
#: apps/transactions/forms.py:64 apps/transactions/forms.py:331
#: apps/transactions/models.py:288
#: apps/transactions/forms.py:65 apps/transactions/forms.py:343
#: apps/transactions/models.py:295
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
@@ -540,8 +545,8 @@ msgstr "Nome do Serviço"
msgid "Service Type"
msgstr "Tipo de Serviço"
#: apps/currencies/models.py:110 apps/transactions/models.py:202
#: apps/transactions/models.py:226 apps/transactions/models.py:250
#: apps/currencies/models.py:110 apps/transactions/models.py:209
#: apps/transactions/models.py:233 apps/transactions/models.py:257
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
@@ -671,11 +676,11 @@ msgstr "Serviços marcados para execução com sucesso"
msgid "Create transaction"
msgstr "Criar transação"
#: apps/dca/forms.py:70 apps/transactions/forms.py:278
#: apps/dca/forms.py:70 apps/transactions/forms.py:290
msgid "From Account"
msgstr "Conta de origem"
#: apps/dca/forms.py:76 apps/transactions/forms.py:283
#: apps/dca/forms.py:76 apps/transactions/forms.py:295
msgid "To Account"
msgstr "Conta de destino"
@@ -700,7 +705,7 @@ msgstr "Conectar transação"
msgid "You must provide an account."
msgstr "Você deve informar uma conta."
#: apps/dca/forms.py:312 apps/transactions/forms.py:445
#: apps/dca/forms.py:312 apps/transactions/forms.py:457
msgid "From and To accounts must be different."
msgstr "As contas De e Para devem ser diferentes."
@@ -719,8 +724,8 @@ msgstr "Moeda de pagamento"
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
#: apps/transactions/forms.py:347 apps/transactions/models.py:301
#: apps/transactions/models.py:497 apps/transactions/models.py:698
#: apps/transactions/forms.py:359 apps/transactions/models.py:308
#: apps/transactions/models.py:504 apps/transactions/models.py:705
msgid "Notes"
msgstr "Notas"
@@ -783,7 +788,7 @@ msgid "Users"
msgstr "Usuários"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:362 templates/includes/navbar.html:57
#: apps/transactions/models.py:369 templates/includes/navbar.html:57
#: templates/includes/navbar.html:104
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -800,23 +805,23 @@ msgstr "Categorias"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/transactions/forms.py:56 apps/transactions/forms.py:518
#: apps/transactions/forms.py:779 apps/transactions/models.py:261
#: apps/transactions/models.py:316 apps/transactions/models.py:493
#: apps/transactions/models.py:695 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:57 apps/transactions/forms.py:530
#: apps/transactions/forms.py:791 apps/transactions/models.py:268
#: apps/transactions/models.py:323 apps/transactions/models.py:500
#: apps/transactions/models.py:702 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:110
msgid "Entities"
msgstr "Entidades"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:732 templates/includes/navbar.html:74
#: apps/transactions/models.py:739 templates/includes/navbar.html:74
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr "Transações Recorrentes"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:511 templates/includes/navbar.html:72
#: apps/transactions/models.py:518 templates/includes/navbar.html:72
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -971,9 +976,9 @@ msgstr "Importação apagada com sucesso"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:19
#: templates/insights/fragments/category_overview/index.html:87
#: templates/insights/fragments/category_overview/index.html:116
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:285
#: templates/insights/fragments/category_overview/index.html:314
msgid "Uncategorized"
msgstr "Sem categoria"
@@ -1055,14 +1060,14 @@ msgid "Operator"
msgstr "Operador"
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:285
#: apps/transactions/models.py:453 apps/transactions/models.py:676
#: apps/rules/models.py:246 apps/transactions/models.py:292
#: apps/transactions/models.py:460 apps/transactions/models.py:683
msgid "Type"
msgstr "Tipo"
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:287 templates/cotton/transaction/item.html:21
#: apps/transactions/models.py:294 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
@@ -1070,33 +1075,33 @@ msgid "Paid"
msgstr "Pago"
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
#: apps/rules/models.py:258 apps/transactions/forms.py:68
#: apps/transactions/forms.py:334 apps/transactions/forms.py:524
#: apps/transactions/models.py:289 apps/transactions/models.py:471
#: apps/transactions/models.py:700
#: apps/rules/models.py:258 apps/transactions/forms.py:69
#: apps/transactions/forms.py:346 apps/transactions/forms.py:536
#: apps/transactions/models.py:296 apps/transactions/models.py:478
#: apps/transactions/models.py:707
msgid "Reference Date"
msgstr "Data de Referência"
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:294
#: apps/transactions/models.py:681 templates/insights/fragments/sankey.html:95
#: apps/rules/models.py:262 apps/transactions/models.py:301
#: apps/transactions/models.py:688 templates/insights/fragments/sankey.html:95
msgid "Amount"
msgstr "Quantia"
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
#: apps/rules/models.py:36 apps/rules/models.py:266
#: apps/transactions/forms.py:338 apps/transactions/models.py:299
#: apps/transactions/models.py:455 apps/transactions/models.py:684
#: apps/transactions/forms.py:350 apps/transactions/models.py:306
#: apps/transactions/models.py:462 apps/transactions/models.py:691
msgid "Description"
msgstr "Descrição"
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:338
#: apps/transactions/models.py:345
msgid "Internal Note"
msgstr "Nota Interna"
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:340
#: apps/transactions/models.py:347
msgid "Internal ID"
msgstr "ID Interna"
@@ -1226,6 +1231,7 @@ msgstr "Ação Atualizar ou Criar Transação apagada com sucesso"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -1259,48 +1265,56 @@ msgstr "Quantia miníma"
msgid "Amount max"
msgstr "Quantia máxima"
#: apps/transactions/forms.py:171
#: apps/transactions/forms.py:172
msgid "More"
msgstr "Mais"
#: apps/transactions/forms.py:290
#: apps/transactions/forms.py:216
msgid "Save and add similar"
msgstr ""
#: apps/transactions/forms.py:221
msgid "Save and add another"
msgstr ""
#: apps/transactions/forms.py:302
msgid "From Amount"
msgstr "Quantia de origem"
#: apps/transactions/forms.py:295
#: apps/transactions/forms.py:307
msgid "To Amount"
msgstr "Quantia de destino"
#: apps/transactions/forms.py:412
#: apps/transactions/forms.py:424
#: templates/cotton/ui/quick_transactions_buttons.html:40
msgid "Transfer"
msgstr "Transferir"
#: apps/transactions/forms.py:658
#: apps/transactions/forms.py:670
msgid "Tag name"
msgstr "Nome da Tag"
#: apps/transactions/forms.py:690
#: apps/transactions/forms.py:702
msgid "Entity name"
msgstr "Nome da entidade"
#: apps/transactions/forms.py:722
#: apps/transactions/forms.py:734
msgid "Category name"
msgstr "Nome da Categoria"
#: apps/transactions/forms.py:724
#: apps/transactions/forms.py:736
msgid "Muted categories won't count towards your monthly total"
msgstr "As categorias silenciadas não serão contabilizadas em seu total mensal"
#: apps/transactions/forms.py:910
#: apps/transactions/forms.py:922
msgid "End date should be after the start date"
msgstr "Data final deve ser após data inicial"
#: apps/transactions/models.py:199
#: apps/transactions/models.py:206
msgid "Mute"
msgstr "Silenciada"
#: apps/transactions/models.py:204
#: apps/transactions/models.py:211
msgid ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
@@ -1308,25 +1322,25 @@ msgstr ""
"As categorias desativadas não poderão ser selecionadas ao criar novas "
"transações"
#: apps/transactions/models.py:212
#: apps/transactions/models.py:219
msgid "Transaction Category"
msgstr "Categoria da Transação"
#: apps/transactions/models.py:213
#: apps/transactions/models.py:220
msgid "Transaction Categories"
msgstr "Categorias da Trasanção"
#: apps/transactions/models.py:228
#: apps/transactions/models.py:235
msgid ""
"Deactivated tags won't be able to be selected when creating new transactions"
msgstr ""
"As tags desativadas não poderão ser selecionadas ao criar novas transações"
#: apps/transactions/models.py:236 apps/transactions/models.py:237
#: apps/transactions/models.py:243 apps/transactions/models.py:244
msgid "Transaction Tags"
msgstr "Tags da Transação"
#: apps/transactions/models.py:252
#: apps/transactions/models.py:259
msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
@@ -1334,150 +1348,150 @@ msgstr ""
"As entidades desativadas não poderão ser selecionadas ao criar novas "
"transações"
#: apps/transactions/models.py:260
#: apps/transactions/models.py:267
msgid "Entity"
msgstr "Entidade"
#: apps/transactions/models.py:272
#: apps/transactions/models.py:279
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/insights/fragments/category_overview/index.html:11
#: templates/insights/fragments/category_overview/index.html:64
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr "Renda"
#: apps/transactions/models.py:273
#: apps/transactions/models.py:280
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/insights/fragments/category_overview/index.html:12
#: templates/insights/fragments/category_overview/index.html:65
msgid "Expense"
msgstr "Despesa"
#: apps/transactions/models.py:327 apps/transactions/models.py:510
#: apps/transactions/models.py:334 apps/transactions/models.py:517
msgid "Installment Plan"
msgstr "Parcelamento"
#: apps/transactions/models.py:336 apps/transactions/models.py:731
#: apps/transactions/models.py:343 apps/transactions/models.py:738
msgid "Recurring Transaction"
msgstr "Transação Recorrente"
#: apps/transactions/models.py:344
#: apps/transactions/models.py:351
msgid "Deleted"
msgstr "Apagado"
#: apps/transactions/models.py:349
#: apps/transactions/models.py:356
msgid "Deleted At"
msgstr "Apagado Em"
#: apps/transactions/models.py:361
#: apps/transactions/models.py:368
msgid "Transaction"
msgstr "Transação"
#: apps/transactions/models.py:433 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:440 templates/tags/fragments/table.html:71
msgid "No tags"
msgstr "Nenhuma tag"
#: apps/transactions/models.py:434
#: apps/transactions/models.py:441
msgid "No category"
msgstr "Sem categoria"
#: apps/transactions/models.py:436
#: apps/transactions/models.py:443
msgid "No description"
msgstr "Sem descrição"
#: apps/transactions/models.py:442
#: apps/transactions/models.py:449
msgid "Yearly"
msgstr "Anual"
#: apps/transactions/models.py:443 apps/users/models.py:26
#: apps/transactions/models.py:450 apps/users/models.py:26
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr "Mensal"
#: apps/transactions/models.py:444
#: apps/transactions/models.py:451
msgid "Weekly"
msgstr "Semanal"
#: apps/transactions/models.py:445
#: apps/transactions/models.py:452
msgid "Daily"
msgstr "Diária"
#: apps/transactions/models.py:458
#: apps/transactions/models.py:465
msgid "Number of Installments"
msgstr "Número de Parcelas"
#: apps/transactions/models.py:463
#: apps/transactions/models.py:470
msgid "Installment Start"
msgstr "Parcela inicial"
#: apps/transactions/models.py:464
#: apps/transactions/models.py:471
msgid "The installment number to start counting from"
msgstr "O número da parcela a partir do qual se inicia a contagem"
#: apps/transactions/models.py:469 apps/transactions/models.py:704
#: apps/transactions/models.py:476 apps/transactions/models.py:711
msgid "Start Date"
msgstr "Data de Início"
#: apps/transactions/models.py:473 apps/transactions/models.py:705
#: apps/transactions/models.py:480 apps/transactions/models.py:712
msgid "End Date"
msgstr "Data Final"
#: apps/transactions/models.py:478
#: apps/transactions/models.py:485
msgid "Recurrence"
msgstr "Recorrência"
#: apps/transactions/models.py:481
#: apps/transactions/models.py:488
msgid "Installment Amount"
msgstr "Valor da Parcela"
#: apps/transactions/models.py:500 apps/transactions/models.py:721
#: apps/transactions/models.py:507 apps/transactions/models.py:728
msgid "Add description to transactions"
msgstr "Adicionar descrição às transações"
#: apps/transactions/models.py:503 apps/transactions/models.py:724
#: apps/transactions/models.py:510 apps/transactions/models.py:731
msgid "Add notes to transactions"
msgstr "Adicionar notas às transações"
#: apps/transactions/models.py:663
#: apps/transactions/models.py:670
msgid "day(s)"
msgstr "dia(s)"
#: apps/transactions/models.py:664
#: apps/transactions/models.py:671
msgid "week(s)"
msgstr "semana(s)"
#: apps/transactions/models.py:665
#: apps/transactions/models.py:672
msgid "month(s)"
msgstr "mês(es)"
#: apps/transactions/models.py:666
#: apps/transactions/models.py:673
msgid "year(s)"
msgstr "ano(s)"
#: apps/transactions/models.py:668
#: apps/transactions/models.py:675
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr "Pausado"
#: apps/transactions/models.py:707
#: apps/transactions/models.py:714
msgid "Recurrence Type"
msgstr "Tipo de recorrência"
#: apps/transactions/models.py:710
#: apps/transactions/models.py:717
msgid "Recurrence Interval"
msgstr "Intervalo de recorrência"
#: apps/transactions/models.py:714
#: apps/transactions/models.py:721
msgid "Last Generated Date"
msgstr "Última data gerada"
#: apps/transactions/models.py:717
#: apps/transactions/models.py:724
msgid "Last Generated Reference Date"
msgstr "Última data de referência gerada"
@@ -1602,35 +1616,35 @@ msgstr "Tag atualizada com sucesso"
msgid "Tag deleted successfully"
msgstr "Tag apagada com sucesso"
#: apps/transactions/views/transactions.py:50
#: apps/transactions/views/transactions.py:89
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully"
msgstr "Transação adicionada com sucesso"
#: apps/transactions/views/transactions.py:123
#: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully"
msgstr "Transação atualizada com sucesso"
#: apps/transactions/views/transactions.py:173
#: apps/transactions/views/transactions.py:232
#, python-format
msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "%(count)s transação atualizada com sucesso"
msgstr[1] "%(count)s transações atualizadas com sucesso"
#: apps/transactions/views/transactions.py:209
#: apps/transactions/views/transactions.py:268
msgid "Transaction duplicated successfully"
msgstr "Transação duplicada com sucesso"
#: apps/transactions/views/transactions.py:251
#: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully"
msgstr "Transação apagada com sucesso"
#: apps/transactions/views/transactions.py:269
#: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully"
msgstr "Transação restaurada com sucesso"
#: apps/transactions/views/transactions.py:295
#: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully"
msgstr "Transferência adicionada com sucesso"
@@ -1799,33 +1813,33 @@ msgstr "Fuso horário"
msgid "Start page"
msgstr "Página inicial"
#: apps/users/views.py:67
#: apps/users/views.py:68
msgid "Transaction amounts are now hidden"
msgstr "Os valores das transações agora estão ocultos"
#: apps/users/views.py:70
#: apps/users/views.py:71
msgid "Transaction amounts are now displayed"
msgstr "Os valores das transações agora estão sendo exibidos"
#: apps/users/views.py:88
#: apps/users/views.py:89
msgid "Sounds are now muted"
msgstr "Os sons agora estão silenciados"
#: apps/users/views.py:91
#: apps/users/views.py:92
msgid "Sounds will now play"
msgstr "Os sons agora serão reproduzidos"
#: apps/users/views.py:107
#: apps/users/views.py:108
msgid "Your settings have been updated"
msgstr "Suas configurações foram atualizadas"
#: apps/users/views.py:151
#: apps/users/views.py:152
#, fuzzy
#| msgid "Rule added successfully"
msgid "Item added successfully"
msgstr "Regra adicionada com sucesso"
#: apps/users/views.py:182
#: apps/users/views.py:184
#, fuzzy
#| msgid "Rule updated successfully"
msgid "Item updated successfully"
@@ -2099,7 +2113,7 @@ msgid "Muted"
msgstr "Silenciada"
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:225
#: templates/insights/fragments/category_overview/index.html:430
msgid "No categories"
msgstr "Nenhum categoria"
@@ -2561,10 +2575,11 @@ msgid "Net Worth"
msgstr "Patrimônio"
#: templates/includes/navbar.html:44
#: templates/insights/fragments/category_overview/index.html:50
msgid "Current"
msgstr "Atual"
#: templates/includes/navbar.html:50
#: templates/includes/navbar.html:50 templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Insights"
@@ -2682,12 +2697,36 @@ msgstr "Gasto/Despesa por Conta"
msgid "Income/Expense by Currency"
msgstr "Gasto/Despesa por Moeda"
#: templates/insights/fragments/category_overview/index.html:13
#: templates/insights/fragments/category_overview/index.html:14
msgid "Table"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:24
msgid "Bars"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:38
msgid ""
"Transaction amounts associated with multiple tags will be counted once for "
"each tag"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:54
#, fuzzy
#| msgid "final total"
msgid "Final total"
msgstr "total final"
#: templates/insights/fragments/category_overview/index.html:66
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr "Total"
#: templates/insights/fragments/category_overview/index.html:202
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr ""
#: templates/insights/fragments/category_overview/index.html:407
msgid "Final Total"
msgstr "Total Final"
@@ -2735,53 +2774,53 @@ msgstr "De"
msgid "Percentage"
msgstr "Porcentagem"
#: templates/insights/pages/index.html:35
#: templates/insights/pages/index.html:37
msgid "Month"
msgstr "Mês"
#: templates/insights/pages/index.html:38
#: templates/insights/pages/index.html:40
#: templates/yearly_overview/pages/overview_by_account.html:61
#: templates/yearly_overview/pages/overview_by_currency.html:63
msgid "Year"
msgstr "Ano"
#: templates/insights/pages/index.html:43
#: templates/insights/pages/index.html:45
msgid "Month Range"
msgstr "Intervalo de Mês"
#: templates/insights/pages/index.html:48
#: templates/insights/pages/index.html:50
msgid "Year Range"
msgstr "Intervalo de Ano"
#: templates/insights/pages/index.html:53
#: templates/insights/pages/index.html:55
msgid "Date Range"
msgstr "Intervalo de Data"
#: templates/insights/pages/index.html:81
#: templates/insights/pages/index.html:83
msgid "Account Flow"
msgstr "Fluxo de Conta"
#: templates/insights/pages/index.html:88
#: templates/insights/pages/index.html:90
msgid "Currency Flow"
msgstr "Fluxo de Moeda"
#: templates/insights/pages/index.html:95
#: templates/insights/pages/index.html:97
msgid "Category Explorer"
msgstr "Explorador de Categoria"
#: templates/insights/pages/index.html:102
#: templates/insights/pages/index.html:104
msgid "Categories Overview"
msgstr "Visão geral das categorias"
#: templates/insights/pages/index.html:109
#: templates/insights/pages/index.html:111
msgid "Late Transactions"
msgstr "Transações Atrasadas"
#: templates/insights/pages/index.html:115
#: templates/insights/pages/index.html:117
msgid "Latest Transactions"
msgstr "Últimas Transações"
#: templates/insights/pages/index.html:121
#: templates/insights/pages/index.html:123
msgid "Emergency Fund"
msgstr "Reserva de Emergência"
@@ -3189,6 +3228,11 @@ msgstr "Use as credenciais abaixo para fazer login"
msgid "Yearly Overview"
msgstr "Visão Anual"
#, fuzzy
#~| msgid "No tags"
#~ msgid "Show tags"
#~ msgstr "Nenhuma tag"
#, fuzzy
#~| msgid "From Amount"
#~ msgid "Principal Amount"

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-04-13 22:01+0000\n"
"PO-Revision-Date: 2025-04-13 08:16+0000\n"
"POT-Creation-Date: 2025-05-11 15:47+0000\n"
"PO-Revision-Date: 2025-04-27 20:17+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translations.herculino.com/"
"projects/wygiwyh/app/pt_BR/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.10.4\n"
"X-Generator: Weblate 5.11\n"
#: apps/accounts/forms.py:24
msgid "Group name"
@@ -27,10 +27,10 @@ msgstr "Nome do grupo"
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:202
#: apps/transactions/forms.py:269 apps/transactions/forms.py:629
#: apps/transactions/forms.py:672 apps/transactions/forms.py:704
#: apps/transactions/forms.py:739 apps/transactions/forms.py:891
#: apps/rules/forms.py:365 apps/transactions/forms.py:203
#: apps/transactions/forms.py:281 apps/transactions/forms.py:641
#: apps/transactions/forms.py:684 apps/transactions/forms.py:716
#: apps/transactions/forms.py:751 apps/transactions/forms.py:903
#: apps/users/forms.py:210 apps/users/forms.py:372
msgid "Update"
msgstr "Atualizar"
@@ -40,10 +40,10 @@ msgstr "Atualizar"
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
#: apps/transactions/forms.py:187 apps/transactions/forms.py:211
#: apps/transactions/forms.py:637 apps/transactions/forms.py:680
#: apps/transactions/forms.py:712 apps/transactions/forms.py:747
#: apps/transactions/forms.py:899 apps/users/forms.py:218
#: apps/transactions/forms.py:188 apps/transactions/forms.py:212
#: apps/transactions/forms.py:649 apps/transactions/forms.py:692
#: apps/transactions/forms.py:724 apps/transactions/forms.py:759
#: apps/transactions/forms.py:911 apps/users/forms.py:218
#: apps/users/forms.py:380 templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -74,12 +74,12 @@ msgstr "Novo saldo"
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
#: apps/rules/models.py:38 apps/rules/models.py:286
#: apps/transactions/forms.py:40 apps/transactions/forms.py:303
#: apps/transactions/forms.py:310 apps/transactions/forms.py:510
#: apps/transactions/forms.py:771 apps/transactions/models.py:305
#: apps/transactions/models.py:488 apps/transactions/models.py:688
#: templates/insights/fragments/category_overview/index.html:10
#: templates/insights/fragments/category_overview/index.html:215
#: apps/transactions/forms.py:41 apps/transactions/forms.py:315
#: apps/transactions/forms.py:322 apps/transactions/forms.py:522
#: apps/transactions/forms.py:783 apps/transactions/models.py:312
#: apps/transactions/models.py:495 apps/transactions/models.py:695
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
msgid "Category"
msgstr "Categoria"
@@ -87,19 +87,20 @@ msgstr "Categoria"
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:48 apps/transactions/forms.py:319
#: apps/transactions/forms.py:327 apps/transactions/forms.py:503
#: apps/transactions/forms.py:764 apps/transactions/models.py:311
#: apps/transactions/models.py:490 apps/transactions/models.py:692
#: templates/includes/navbar.html:108 templates/tags/fragments/list.html:5
#: templates/tags/pages/index.html:4
#: apps/transactions/forms.py:49 apps/transactions/forms.py:331
#: apps/transactions/forms.py:339 apps/transactions/forms.py:515
#: apps/transactions/forms.py:776 apps/transactions/models.py:318
#: apps/transactions/models.py:497 apps/transactions/models.py:699
#: templates/includes/navbar.html:108
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Tags"
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:198 apps/transactions/models.py:223
#: apps/transactions/models.py:247
#: apps/transactions/models.py:205 apps/transactions/models.py:230
#: apps/transactions/models.py:254
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -164,9 +165,9 @@ msgstr ""
#: apps/accounts/models.py:70 apps/rules/forms.py:166 apps/rules/forms.py:179
#: apps/rules/models.py:30 apps/rules/models.py:242
#: apps/transactions/forms.py:60 apps/transactions/forms.py:495
#: apps/transactions/forms.py:756 apps/transactions/models.py:278
#: apps/transactions/models.py:448 apps/transactions/models.py:670
#: apps/transactions/forms.py:61 apps/transactions/forms.py:507
#: apps/transactions/forms.py:768 apps/transactions/models.py:285
#: apps/transactions/models.py:455 apps/transactions/models.py:677
msgid "Account"
msgstr "Conta"
@@ -258,19 +259,19 @@ msgstr "Categoria com esse ID não existe."
msgid "Invalid category data. Provide an ID or name."
msgstr "Dados da categoria inválidos. Forneça um ID ou nome."
#: apps/api/fields/transactions.py:67
#: apps/api/fields/transactions.py:70
msgid "Tag with this ID does not exist."
msgstr "Tag com esse ID não existe."
#: apps/api/fields/transactions.py:77
#: apps/api/fields/transactions.py:80
msgid "Invalid tag data. Provide an ID or name."
msgstr "Dados da tag inválidos. Forneça um ID ou nome."
#: apps/api/fields/transactions.py:102
#: apps/api/fields/transactions.py:105
msgid "Entity with this ID does not exist."
msgstr "Entidade com esse ID não existe."
#: apps/api/fields/transactions.py:112
#: apps/api/fields/transactions.py:115
msgid "Invalid entity data. Provide an ID or name."
msgstr "Dados da entidade inválidos. Forneça um ID ou nome."
@@ -296,11 +297,11 @@ msgstr "Formato de data inválido. Use AAAA-MM ou AAAA-MM-DD."
msgid "Invalid date format. Use YYYY-MM."
msgstr "Formato de data inválido. Use AAAA-MM."
#: apps/common/forms.py:24
#: apps/common/forms.py:25
msgid "Owner"
msgstr "Proprietário"
#: apps/common/forms.py:27
#: apps/common/forms.py:28
msgid ""
"The owner of this object, if empty all users can see, edit and take "
"ownership."
@@ -308,19 +309,19 @@ msgstr ""
"O proprietário desse objeto, se estiver vazio, todos os usuários poderão "
"ver, editar e assumir a propriedade."
#: apps/common/forms.py:34
#: apps/common/forms.py:35
msgid "Shared with users"
msgstr "Compartilhado com os usuários"
#: apps/common/forms.py:35
#: apps/common/forms.py:36
msgid "Select users to share this object with"
msgstr "Selecione os usuários com os quais compartilhar esse objeto"
#: apps/common/forms.py:40
#: apps/common/forms.py:41
msgid "Visibility"
msgstr "Visibilidade"
#: apps/common/forms.py:42
#: apps/common/forms.py:43
msgid ""
"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."
@@ -329,10 +330,14 @@ msgstr ""
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
"usuários. Somente editável pelo proprietário."
#: apps/common/forms.py:79 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:135
msgid "Save"
msgstr "Salvar"
#: apps/common/forms.py:95
msgid "You cannot share this item with its owner."
msgstr "Você não pode compartilhar este item com o seu proprietário."
#: apps/common/models.py:29
msgid "Private"
msgstr "Privado"
@@ -458,8 +463,8 @@ msgstr "Sufixo"
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
#: apps/transactions/forms.py:64 apps/transactions/forms.py:331
#: apps/transactions/models.py:288
#: apps/transactions/forms.py:65 apps/transactions/forms.py:343
#: apps/transactions/models.py:295
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
@@ -540,8 +545,8 @@ msgstr "Nome do Serviço"
msgid "Service Type"
msgstr "Tipo de Serviço"
#: apps/currencies/models.py:110 apps/transactions/models.py:202
#: apps/transactions/models.py:226 apps/transactions/models.py:250
#: apps/currencies/models.py:110 apps/transactions/models.py:209
#: apps/transactions/models.py:233 apps/transactions/models.py:257
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
@@ -671,11 +676,11 @@ msgstr "Serviços marcados para execução com sucesso"
msgid "Create transaction"
msgstr "Criar transação"
#: apps/dca/forms.py:70 apps/transactions/forms.py:278
#: apps/dca/forms.py:70 apps/transactions/forms.py:290
msgid "From Account"
msgstr "Conta de origem"
#: apps/dca/forms.py:76 apps/transactions/forms.py:283
#: apps/dca/forms.py:76 apps/transactions/forms.py:295
msgid "To Account"
msgstr "Conta de destino"
@@ -700,7 +705,7 @@ msgstr "Conectar transação"
msgid "You must provide an account."
msgstr "Você deve informar uma conta."
#: apps/dca/forms.py:312 apps/transactions/forms.py:445
#: apps/dca/forms.py:312 apps/transactions/forms.py:457
msgid "From and To accounts must be different."
msgstr "As contas De e Para devem ser diferentes."
@@ -719,8 +724,8 @@ msgstr "Moeda de pagamento"
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
#: apps/transactions/forms.py:347 apps/transactions/models.py:301
#: apps/transactions/models.py:497 apps/transactions/models.py:698
#: apps/transactions/forms.py:359 apps/transactions/models.py:308
#: apps/transactions/models.py:504 apps/transactions/models.py:705
msgid "Notes"
msgstr "Notas"
@@ -783,7 +788,7 @@ msgid "Users"
msgstr "Usuários"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:362 templates/includes/navbar.html:57
#: apps/transactions/models.py:369 templates/includes/navbar.html:57
#: templates/includes/navbar.html:104
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -800,23 +805,23 @@ msgstr "Categorias"
#: apps/export_app/forms.py:50 apps/export_app/forms.py:136
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
#: apps/rules/models.py:282 apps/transactions/filters.py:81
#: apps/transactions/forms.py:56 apps/transactions/forms.py:518
#: apps/transactions/forms.py:779 apps/transactions/models.py:261
#: apps/transactions/models.py:316 apps/transactions/models.py:493
#: apps/transactions/models.py:695 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:57 apps/transactions/forms.py:530
#: apps/transactions/forms.py:791 apps/transactions/models.py:268
#: apps/transactions/models.py:323 apps/transactions/models.py:500
#: apps/transactions/models.py:702 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:110
msgid "Entities"
msgstr "Entidades"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:732 templates/includes/navbar.html:74
#: apps/transactions/models.py:739 templates/includes/navbar.html:74
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr "Transações Recorrentes"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:511 templates/includes/navbar.html:72
#: apps/transactions/models.py:518 templates/includes/navbar.html:72
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -971,9 +976,9 @@ msgstr "Importação apagada com sucesso"
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
#: apps/insights/utils/sankey.py:167
#: templates/insights/fragments/category_overview/index.html:19
#: templates/insights/fragments/category_overview/index.html:87
#: templates/insights/fragments/category_overview/index.html:116
#: templates/insights/fragments/category_overview/index.html:73
#: templates/insights/fragments/category_overview/index.html:285
#: templates/insights/fragments/category_overview/index.html:314
msgid "Uncategorized"
msgstr "Sem categoria"
@@ -1055,14 +1060,14 @@ msgid "Operator"
msgstr "Operador"
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:285
#: apps/transactions/models.py:453 apps/transactions/models.py:676
#: apps/rules/models.py:246 apps/transactions/models.py:292
#: apps/transactions/models.py:460 apps/transactions/models.py:683
msgid "Type"
msgstr "Tipo"
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:287 templates/cotton/transaction/item.html:21
#: apps/transactions/models.py:294 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
@@ -1070,33 +1075,33 @@ msgid "Paid"
msgstr "Pago"
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
#: apps/rules/models.py:258 apps/transactions/forms.py:68
#: apps/transactions/forms.py:334 apps/transactions/forms.py:524
#: apps/transactions/models.py:289 apps/transactions/models.py:471
#: apps/transactions/models.py:700
#: apps/rules/models.py:258 apps/transactions/forms.py:69
#: apps/transactions/forms.py:346 apps/transactions/forms.py:536
#: apps/transactions/models.py:296 apps/transactions/models.py:478
#: apps/transactions/models.py:707
msgid "Reference Date"
msgstr "Data de Referência"
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:294
#: apps/transactions/models.py:681 templates/insights/fragments/sankey.html:95
#: apps/rules/models.py:262 apps/transactions/models.py:301
#: apps/transactions/models.py:688 templates/insights/fragments/sankey.html:95
msgid "Amount"
msgstr "Quantia"
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
#: apps/rules/models.py:36 apps/rules/models.py:266
#: apps/transactions/forms.py:338 apps/transactions/models.py:299
#: apps/transactions/models.py:455 apps/transactions/models.py:684
#: apps/transactions/forms.py:350 apps/transactions/models.py:306
#: apps/transactions/models.py:462 apps/transactions/models.py:691
msgid "Description"
msgstr "Descrição"
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:338
#: apps/transactions/models.py:345
msgid "Internal Note"
msgstr "Nota Interna"
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:340
#: apps/transactions/models.py:347
msgid "Internal ID"
msgstr "ID Interna"
@@ -1226,6 +1231,7 @@ msgstr "Ação Atualizar ou Criar Transação apagada com sucesso"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:21
#: templates/cotton/transaction/item.html:31 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
msgid "Projected"
@@ -1259,48 +1265,56 @@ msgstr "Quantia miníma"
msgid "Amount max"
msgstr "Quantia máxima"
#: apps/transactions/forms.py:171
#: apps/transactions/forms.py:172
msgid "More"
msgstr "Mais"
#: apps/transactions/forms.py:290
#: apps/transactions/forms.py:216
msgid "Save and add similar"
msgstr "Salvar e adicionar similar"
#: apps/transactions/forms.py:221
msgid "Save and add another"
msgstr "Salvar e adicionar outra"
#: apps/transactions/forms.py:302
msgid "From Amount"
msgstr "Quantia de origem"
#: apps/transactions/forms.py:295
#: apps/transactions/forms.py:307
msgid "To Amount"
msgstr "Quantia de destino"
#: apps/transactions/forms.py:412
#: apps/transactions/forms.py:424
#: templates/cotton/ui/quick_transactions_buttons.html:40
msgid "Transfer"
msgstr "Transferir"
#: apps/transactions/forms.py:658
#: apps/transactions/forms.py:670
msgid "Tag name"
msgstr "Nome da Tag"
#: apps/transactions/forms.py:690
#: apps/transactions/forms.py:702
msgid "Entity name"
msgstr "Nome da entidade"
#: apps/transactions/forms.py:722
#: apps/transactions/forms.py:734
msgid "Category name"
msgstr "Nome da Categoria"
#: apps/transactions/forms.py:724
#: apps/transactions/forms.py:736
msgid "Muted categories won't count towards your monthly total"
msgstr "As categorias silenciadas não serão contabilizadas em seu total mensal"
#: apps/transactions/forms.py:910
#: apps/transactions/forms.py:922
msgid "End date should be after the start date"
msgstr "Data final deve ser após data inicial"
#: apps/transactions/models.py:199
#: apps/transactions/models.py:206
msgid "Mute"
msgstr "Silenciada"
#: apps/transactions/models.py:204
#: apps/transactions/models.py:211
msgid ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
@@ -1308,25 +1322,25 @@ msgstr ""
"As categorias desativadas não poderão ser selecionadas ao criar novas "
"transações"
#: apps/transactions/models.py:212
#: apps/transactions/models.py:219
msgid "Transaction Category"
msgstr "Categoria da Transação"
#: apps/transactions/models.py:213
#: apps/transactions/models.py:220
msgid "Transaction Categories"
msgstr "Categorias da Trasanção"
#: apps/transactions/models.py:228
#: apps/transactions/models.py:235
msgid ""
"Deactivated tags won't be able to be selected when creating new transactions"
msgstr ""
"As tags desativadas não poderão ser selecionadas ao criar novas transações"
#: apps/transactions/models.py:236 apps/transactions/models.py:237
#: apps/transactions/models.py:243 apps/transactions/models.py:244
msgid "Transaction Tags"
msgstr "Tags da Transação"
#: apps/transactions/models.py:252
#: apps/transactions/models.py:259
msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
@@ -1334,150 +1348,150 @@ msgstr ""
"As entidades desativadas não poderão ser selecionadas ao criar novas "
"transações"
#: apps/transactions/models.py:260
#: apps/transactions/models.py:267
msgid "Entity"
msgstr "Entidade"
#: apps/transactions/models.py:272
#: apps/transactions/models.py:279
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
#: templates/calendar_view/fragments/list.html:54
#: templates/cotton/ui/quick_transactions_buttons.html:10
#: templates/insights/fragments/category_overview/index.html:11
#: templates/insights/fragments/category_overview/index.html:64
#: templates/monthly_overview/fragments/monthly_summary.html:39
msgid "Income"
msgstr "Renda"
#: apps/transactions/models.py:273
#: apps/transactions/models.py:280
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
#: templates/calendar_view/fragments/list.html:58
#: templates/cotton/ui/quick_transactions_buttons.html:18
#: templates/insights/fragments/category_overview/index.html:12
#: templates/insights/fragments/category_overview/index.html:65
msgid "Expense"
msgstr "Despesa"
#: apps/transactions/models.py:327 apps/transactions/models.py:510
#: apps/transactions/models.py:334 apps/transactions/models.py:517
msgid "Installment Plan"
msgstr "Parcelamento"
#: apps/transactions/models.py:336 apps/transactions/models.py:731
#: apps/transactions/models.py:343 apps/transactions/models.py:738
msgid "Recurring Transaction"
msgstr "Transação Recorrente"
#: apps/transactions/models.py:344
#: apps/transactions/models.py:351
msgid "Deleted"
msgstr "Apagado"
#: apps/transactions/models.py:349
#: apps/transactions/models.py:356
msgid "Deleted At"
msgstr "Apagado Em"
#: apps/transactions/models.py:361
#: apps/transactions/models.py:368
msgid "Transaction"
msgstr "Transação"
#: apps/transactions/models.py:433 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:440 templates/tags/fragments/table.html:71
msgid "No tags"
msgstr "Nenhuma tag"
#: apps/transactions/models.py:434
#: apps/transactions/models.py:441
msgid "No category"
msgstr "Sem categoria"
#: apps/transactions/models.py:436
#: apps/transactions/models.py:443
msgid "No description"
msgstr "Sem descrição"
#: apps/transactions/models.py:442
#: apps/transactions/models.py:449
msgid "Yearly"
msgstr "Anual"
#: apps/transactions/models.py:443 apps/users/models.py:26
#: apps/transactions/models.py:450 apps/users/models.py:26
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr "Mensal"
#: apps/transactions/models.py:444
#: apps/transactions/models.py:451
msgid "Weekly"
msgstr "Semanal"
#: apps/transactions/models.py:445
#: apps/transactions/models.py:452
msgid "Daily"
msgstr "Diária"
#: apps/transactions/models.py:458
#: apps/transactions/models.py:465
msgid "Number of Installments"
msgstr "Número de Parcelas"
#: apps/transactions/models.py:463
#: apps/transactions/models.py:470
msgid "Installment Start"
msgstr "Parcela inicial"
#: apps/transactions/models.py:464
#: apps/transactions/models.py:471
msgid "The installment number to start counting from"
msgstr "O número da parcela a partir do qual se inicia a contagem"
#: apps/transactions/models.py:469 apps/transactions/models.py:704
#: apps/transactions/models.py:476 apps/transactions/models.py:711
msgid "Start Date"
msgstr "Data de Início"
#: apps/transactions/models.py:473 apps/transactions/models.py:705
#: apps/transactions/models.py:480 apps/transactions/models.py:712
msgid "End Date"
msgstr "Data Final"
#: apps/transactions/models.py:478
#: apps/transactions/models.py:485
msgid "Recurrence"
msgstr "Recorrência"
#: apps/transactions/models.py:481
#: apps/transactions/models.py:488
msgid "Installment Amount"
msgstr "Valor da Parcela"
#: apps/transactions/models.py:500 apps/transactions/models.py:721
#: apps/transactions/models.py:507 apps/transactions/models.py:728
msgid "Add description to transactions"
msgstr "Adicionar descrição às transações"
#: apps/transactions/models.py:503 apps/transactions/models.py:724
#: apps/transactions/models.py:510 apps/transactions/models.py:731
msgid "Add notes to transactions"
msgstr "Adicionar notas às transações"
#: apps/transactions/models.py:663
#: apps/transactions/models.py:670
msgid "day(s)"
msgstr "dia(s)"
#: apps/transactions/models.py:664
#: apps/transactions/models.py:671
msgid "week(s)"
msgstr "semana(s)"
#: apps/transactions/models.py:665
#: apps/transactions/models.py:672
msgid "month(s)"
msgstr "mês(es)"
#: apps/transactions/models.py:666
#: apps/transactions/models.py:673
msgid "year(s)"
msgstr "ano(s)"
#: apps/transactions/models.py:668
#: apps/transactions/models.py:675
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr "Pausado"
#: apps/transactions/models.py:707
#: apps/transactions/models.py:714
msgid "Recurrence Type"
msgstr "Tipo de recorrência"
#: apps/transactions/models.py:710
#: apps/transactions/models.py:717
msgid "Recurrence Interval"
msgstr "Intervalo de recorrência"
#: apps/transactions/models.py:714
#: apps/transactions/models.py:721
msgid "Last Generated Date"
msgstr "Última data gerada"
#: apps/transactions/models.py:717
#: apps/transactions/models.py:724
msgid "Last Generated Reference Date"
msgstr "Última data de referência gerada"
@@ -1602,35 +1616,35 @@ msgstr "Tag atualizada com sucesso"
msgid "Tag deleted successfully"
msgstr "Tag apagada com sucesso"
#: apps/transactions/views/transactions.py:50
#: apps/transactions/views/transactions.py:89
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully"
msgstr "Transação adicionada com sucesso"
#: apps/transactions/views/transactions.py:123
#: apps/transactions/views/transactions.py:182
msgid "Transaction updated successfully"
msgstr "Transação atualizada com sucesso"
#: apps/transactions/views/transactions.py:173
#: apps/transactions/views/transactions.py:232
#, python-format
msgid "%(count)s transaction updated successfully"
msgid_plural "%(count)s transactions updated successfully"
msgstr[0] "%(count)s transação atualizada com sucesso"
msgstr[1] "%(count)s transações atualizadas com sucesso"
#: apps/transactions/views/transactions.py:209
#: apps/transactions/views/transactions.py:268
msgid "Transaction duplicated successfully"
msgstr "Transação duplicada com sucesso"
#: apps/transactions/views/transactions.py:251
#: apps/transactions/views/transactions.py:310
msgid "Transaction deleted successfully"
msgstr "Transação apagada com sucesso"
#: apps/transactions/views/transactions.py:269
#: apps/transactions/views/transactions.py:328
msgid "Transaction restored successfully"
msgstr "Transação restaurada com sucesso"
#: apps/transactions/views/transactions.py:295
#: apps/transactions/views/transactions.py:354
msgid "Transfer added successfully"
msgstr "Transferência adicionada com sucesso"
@@ -1700,64 +1714,66 @@ msgstr ""
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
#: apps/users/forms.py:150
#, fuzzy
#| msgid "Password"
msgid "New Password"
msgstr "Senha"
msgstr "Nova senha"
#: apps/users/forms.py:153
msgid "Leave blank to keep the current password."
msgstr ""
msgstr "Deixe em branco para usar a senha atual."
#: apps/users/forms.py:156
msgid "Confirm New Password"
msgstr ""
msgstr "Confirmar nova senha"
#: apps/users/forms.py:168 apps/users/forms.py:329
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr ""
"Designa se esse usuário deve ser tratado como ativo. Desmarque essa opção em "
"vez de excluir usuários."
#: apps/users/forms.py:171 apps/users/forms.py:332
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
"Designa que esse usuário tem todas as permissões sem atribuí-las "
"explicitamente."
#: apps/users/forms.py:242
msgid "This email address is already in use by another account."
msgstr ""
msgstr "Esse endereço de e-mail já está sendo usado por outra conta."
#: apps/users/forms.py:250
msgid "The two password fields didn't match."
msgstr ""
msgstr "Os dois campos de senha não coincidem."
#: apps/users/forms.py:252
msgid "Please confirm your new password."
msgstr ""
msgstr "Confirme sua nova senha."
#: apps/users/forms.py:254
msgid "Please enter the new password first."
msgstr ""
msgstr "Digite a nova senha primeiro."
#: apps/users/forms.py:274
msgid "You cannot deactivate your own account using this form."
msgstr ""
msgstr "Não é possível desativar sua própria conta usando esse formulário."
#: apps/users/forms.py:287
msgid "Cannot remove status from the last superuser."
msgstr ""
msgstr "Não é possível remover o status do último superusuário."
#: apps/users/forms.py:293
msgid "You cannot remove your own superuser status using this form."
msgstr ""
"Não é possível remover seu próprio status de superusuário usando esse "
"formulário."
#: apps/users/forms.py:390
#, fuzzy
#| msgid "A value for this field already exists in the rule."
msgid "A user with this email address already exists."
msgstr "Já existe um valor para esse campo na regra."
msgstr "Já existe um usuário com esse endereço de e-mail."
#: apps/users/models.py:27 templates/includes/navbar.html:28
msgid "Yearly by currency"
@@ -1799,37 +1815,33 @@ msgstr "Fuso horário"
msgid "Start page"
msgstr "Página inicial"
#: apps/users/views.py:67
#: apps/users/views.py:68
msgid "Transaction amounts are now hidden"
msgstr "Os valores das transações agora estão ocultos"
#: apps/users/views.py:70
#: apps/users/views.py:71
msgid "Transaction amounts are now displayed"
msgstr "Os valores das transações agora estão sendo exibidos"
#: apps/users/views.py:88
#: apps/users/views.py:89
msgid "Sounds are now muted"
msgstr "Os sons agora estão silenciados"
#: apps/users/views.py:91
#: apps/users/views.py:92
msgid "Sounds will now play"
msgstr "Os sons agora serão reproduzidos"
#: apps/users/views.py:107
#: apps/users/views.py:108
msgid "Your settings have been updated"
msgstr "Suas configurações foram atualizadas"
#: apps/users/views.py:151
#, fuzzy
#| msgid "Rule added successfully"
#: apps/users/views.py:152
msgid "Item added successfully"
msgstr "Regra adicionada com sucesso"
msgstr "Item adicionado com sucesso"
#: apps/users/views.py:182
#, fuzzy
#| msgid "Rule updated successfully"
#: apps/users/views.py:184
msgid "Item updated successfully"
msgstr "Regra atualizada com sucesso"
msgstr "Item atualizado com sucesso"
#: templates/account_groups/fragments/add.html:5
msgid "Add account group"
@@ -2099,7 +2111,7 @@ msgid "Muted"
msgstr "Silenciada"
#: templates/categories/fragments/table.html:75
#: templates/insights/fragments/category_overview/index.html:225
#: templates/insights/fragments/category_overview/index.html:430
msgid "No categories"
msgstr "Nenhum categoria"
@@ -2561,10 +2573,11 @@ msgid "Net Worth"
msgstr "Patrimônio"
#: templates/includes/navbar.html:44
#: templates/insights/fragments/category_overview/index.html:50
msgid "Current"
msgstr "Atual"
#: templates/includes/navbar.html:50
#: templates/includes/navbar.html:50 templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Insights"
@@ -2602,7 +2615,7 @@ msgstr "Automação"
#: templates/includes/navbar.html:145
msgid "Admin"
msgstr ""
msgstr "Admin"
#: templates/includes/navbar.html:154
msgid "Only use this if you know what you're doing"
@@ -2621,10 +2634,8 @@ msgid "Settings"
msgstr "Configurações"
#: templates/includes/navbar/user_menu.html:19
#, fuzzy
#| msgid "Edit import profile"
msgid "Edit profile"
msgstr "Editar perfil de importação"
msgstr "Editar perfil"
#: templates/includes/navbar/user_menu.html:46
msgid "Clear cache"
@@ -2682,12 +2693,36 @@ msgstr "Gasto/Despesa por Conta"
msgid "Income/Expense by Currency"
msgstr "Gasto/Despesa por Moeda"
#: templates/insights/fragments/category_overview/index.html:13
#: templates/insights/fragments/category_overview/index.html:14
msgid "Table"
msgstr "Tabela"
#: templates/insights/fragments/category_overview/index.html:24
msgid "Bars"
msgstr "Barras"
#: templates/insights/fragments/category_overview/index.html:38
msgid ""
"Transaction amounts associated with multiple tags 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:54
msgid "Final total"
msgstr "Total final"
#: templates/insights/fragments/category_overview/index.html:66
#: templates/monthly_overview/fragments/monthly_summary.html:167
msgid "Total"
msgstr "Total"
#: templates/insights/fragments/category_overview/index.html:202
#: templates/insights/fragments/category_overview/index.html:166
msgid "Untagged"
msgstr "Sem tag"
#: templates/insights/fragments/category_overview/index.html:407
msgid "Final Total"
msgstr "Total Final"
@@ -2735,53 +2770,53 @@ msgstr "De"
msgid "Percentage"
msgstr "Porcentagem"
#: templates/insights/pages/index.html:35
#: templates/insights/pages/index.html:37
msgid "Month"
msgstr "Mês"
#: templates/insights/pages/index.html:38
#: templates/insights/pages/index.html:40
#: templates/yearly_overview/pages/overview_by_account.html:61
#: templates/yearly_overview/pages/overview_by_currency.html:63
msgid "Year"
msgstr "Ano"
#: templates/insights/pages/index.html:43
#: templates/insights/pages/index.html:45
msgid "Month Range"
msgstr "Intervalo de Mês"
#: templates/insights/pages/index.html:48
#: templates/insights/pages/index.html:50
msgid "Year Range"
msgstr "Intervalo de Ano"
#: templates/insights/pages/index.html:53
#: templates/insights/pages/index.html:55
msgid "Date Range"
msgstr "Intervalo de Data"
#: templates/insights/pages/index.html:81
#: templates/insights/pages/index.html:83
msgid "Account Flow"
msgstr "Fluxo de Conta"
#: templates/insights/pages/index.html:88
#: templates/insights/pages/index.html:90
msgid "Currency Flow"
msgstr "Fluxo de Moeda"
#: templates/insights/pages/index.html:95
#: templates/insights/pages/index.html:97
msgid "Category Explorer"
msgstr "Explorador de Categoria"
#: templates/insights/pages/index.html:102
#: templates/insights/pages/index.html:104
msgid "Categories Overview"
msgstr "Visão geral das categorias"
#: templates/insights/pages/index.html:109
#: templates/insights/pages/index.html:111
msgid "Late Transactions"
msgstr "Transações Atrasadas"
#: templates/insights/pages/index.html:115
#: templates/insights/pages/index.html:117
msgid "Latest Transactions"
msgstr "Últimas Transações"
#: templates/insights/pages/index.html:121
#: templates/insights/pages/index.html:123
msgid "Emergency Fund"
msgstr "Reserva de Emergência"
@@ -3129,36 +3164,28 @@ msgid "Unchanged"
msgstr "Inalterado"
#: templates/users/fragments/add.html:5
#, fuzzy
#| msgid "Add new"
msgid "Add user"
msgstr "Adicionar novo"
msgstr "Adicionar usuário"
#: templates/users/fragments/edit.html:5
#, fuzzy
#| msgid "Edit category"
msgid "Edit user"
msgstr "Editar categoria"
msgstr "Editar usuário"
#: templates/users/fragments/list.html:30
#, fuzzy
#| msgid "E-mail"
msgid "Email"
msgstr "E-mail"
msgstr "Email"
#: templates/users/fragments/list.html:31
msgid "Superuser"
msgstr ""
msgstr "Superusuário"
#: templates/users/fragments/list.html:51
msgid "Impersonate"
msgstr ""
msgstr "Personificar"
#: templates/users/fragments/list.html:80
#, fuzzy
#| msgid "Users"
msgid "No users"
msgstr "Usuários"
msgstr "Nenhum usuário"
#: templates/users/generic/hide_amounts.html:2
msgid "Hide amounts"
@@ -3189,6 +3216,11 @@ msgstr "Use as credenciais abaixo para fazer login"
msgid "Yearly Overview"
msgstr "Visão Anual"
#, fuzzy
#~| msgid "No tags"
#~ msgid "Show tags"
#~ msgstr "Nenhuma tag"
#, fuzzy
#~| msgid "From Amount"
#~ msgid "Principal Amount"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,8 @@
{% spaceless %}
{% load i18n %}
<span class="tw-text-xs text-white-50 mx-1"
data-bs-toggle="tooltip"
data-bs-title="{{ content }}">
<i class="fa-solid fa-circle-question fa-fw"></i>
<i class="{% if not icon %}fa-solid fa-circle-question{% else %}{{ icon }}{% endif %} fa-fw"></i>
</span>
{% endspaceless %}

View File

@@ -3,7 +3,7 @@
{% if icon %}<i class="{{ icon }}"></i>{% else %}<span class="fw-bold">{{ title.0 }}</span>{% endif %}
</div>
<div class="card-body">
<h5 class="tw-text-{{ color }}-400 fw-bold tw-mr-[50px]" {{ attrs }}>{{ title }}{% if help_text %}{% include 'includes/help_icon.html' with content=help_text %}{% endif %}</h5>
<h5 class="tw-text-{{ color }}-400 fw-bold tw-mr-[50px]" {{ attrs }}>{{ title }}{% if help_text %}<c-ui.help-icon :content="help_text" icon=""></c-ui.help-icon>{% endif %}</h5>
{{ slot }}
</div>
</div>

View File

@@ -94,7 +94,7 @@
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle {% active_link views='tags_index||entities_index||categories_index||accounts_index||account_groups_index||currencies_index||exchange_rates_index||rules_index||import_profiles_index||automatic_exchange_rates_index||export_index' %}"
<a class="nav-link dropdown-toggle {% active_link views='tags_index||entities_index||categories_index||accounts_index||account_groups_index||currencies_index||exchange_rates_index||rules_index||import_profiles_index||automatic_exchange_rates_index||export_index||users_index' %}"
href="#" role="button"
data-bs-toggle="dropdown"
aria-expanded="false">

View File

@@ -1,226 +1,431 @@
{% load i18n %}
<div hx-get="{% url 'category_overview' %}" hx-trigger="updated from:window" class="show-loading" hx-swap="outerHTML"
hx-include="#picker-form, #picker-type">
hx-include="#picker-form, #picker-type, #view-type, #show-tags, #showing">
<div class="h-100 text-center mb-4">
<div class="btn-group gap-3" role="group" id="view-type" _="on change trigger updated">
<input type="radio" class="btn-check"
name="view_type"
id="table-view"
autocomplete="off"
value="table"
{% if view_type == "table" %}checked{% endif %}>
<label class="btn btn-outline-primary rounded-5" for="table-view"><i
class="fa-solid fa-table fa-fw me-2"></i>{% trans 'Table' %}</label>
<input type="radio"
class="btn-check"
name="view_type"
id="bars-view"
autocomplete="off"
value="bars"
{% if view_type == "bars" %}checked{% endif %}>
<label class="btn btn-outline-primary rounded-5" for="bars-view"><i
class="fa-solid fa-chart-bar fa-fw me-2"></i>{% trans 'Bars' %}</label>
</div>
</div>
<div class="mt-3 mb-1 d-flex flex-column flex-md-row justify-content-between">
<div class="form-check form-switch" id="show-tags">
{% if view_type == 'table' %}
<input type="hidden" name="show_tags" value="off">
<input class="form-check-input" type="checkbox" role="switch" id="show-tags-switch" name="show_tags"
_="on change trigger updated" {% if show_tags %}checked{% endif %}>
{% spaceless %}
<label class="form-check-label" for="show-tags-switch">
{% trans 'Tags' %}
</label>
<c-ui.help-icon
content="{% trans 'Transaction amounts associated with multiple tags will be counted once for each tag' %}"
icon="fa-solid fa-circle-exclamation"></c-ui.help-icon>
{% endspaceless %}
{% endif %}
</div>
<div class="btn-group btn-group-sm" role="group" id="showing" _="on change trigger updated">
<input type="radio" class="btn-check" name="showing" id="showing-projected" autocomplete="off"
value="projected" {% if showing == 'projected' %}checked{% endif %}>
<label class="btn btn-outline-primary" for="showing-projected">{% trans "Projected" %}</label>
<input type="radio" class="btn-check" name="showing" id="showing-current" autocomplete="off" value="current"
{% if showing == 'current' %}checked{% endif %}>
<label class="btn btn-outline-primary" for="showing-current">{% trans "Current" %}</label>
<input type="radio" class="btn-check" name="showing" id="showing-final" autocomplete="off" value="final"
{% if showing == 'final' %}checked{% endif %}>
<label class="btn btn-outline-primary" for="showing-final">{% trans "Final total" %}</label>
</div>
</div>
{% if total_table %}
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th scope="col">{% trans 'Category' %}</th>
<th scope="col">{% trans 'Income' %}</th>
<th scope="col">{% trans 'Expense' %}</th>
<th scope="col">{% trans 'Total' %}</th>
</tr>
</thead>
<tbody>
{% for category in total_table.values %}
{% if view_type == "table" %}
<div class="table-responsive">
<table class="table table-striped table-hover table-bordered align-middle">
<thead>
<tr>
<th>{% if category.name %}{{ category.name }}{% else %}{% trans 'Uncategorized' %}{% endif %}</th>
<td>
{% for currency in category.currencies.values %}
{% if 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 category.currencies.values %}
{% if 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 category.currencies.values %}
{% if 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>
<th scope="col">{% trans 'Category' %}</th>
<th scope="col">{% trans 'Income' %}</th>
<th scope="col">{% trans 'Expense' %}</th>
<th scope="col">{% trans 'Total' %}</th>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</thead>
<tbody class="table-group-divider">
{% for category in total_table.values %}
<!-- Category row -->
<tr class="table-group-header">
<th>{% if category.name %}{{ category.name }}{% else %}{% trans 'Uncategorized' %}{% endif %}</th>
<td> {# income #}
{% for currency in category.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> {# expenses #}
{% for currency in category.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> {# total #}
{% for currency in category.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>
<div class="mt-4">
<div class="chart-container" _="init call setupChart() end" style="position: relative; height:90vh; width:100%">
<canvas id="categoryChart"></canvas>
<!-- Tag rows -->
{% if show_tags %}
{% for tag_id, tag in category.tags.items %}
{% if tag.name or not tag.name and category.tags.values|length > 1 %}
<tr class="table-row-nested">
<td class="ps-4">
<i class="fa-solid fa-hashtag fa-fw me-2 text-muted"></i>{% if tag.name %}{{ tag.name }}{% else %}{% trans 'Untagged' %}{% endif %}
</td>
<td>
{% for currency in tag.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 tag.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 tag.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>
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</div>
{{ total_table|json_script:"categoryOverviewData" }}
<script>
function setupChart() {
var rawData = JSON.parse(document.getElementById('categoryOverviewData').textContent);
{% elif view_type == "bars" %}
<div>
<div class="chart-container" _="init call setupChart() end" style="position: relative; height:78vh; width:100%">
<canvas id="categoryChart"></canvas>
</div>
</div>
// --- Dynamic Data Processing ---
var categories = [];
var currencyDetails = {}; // Stores details like { BRL: {code: 'BRL', name: 'Real', ...}, ... }
var currencyData = {}; // Stores data arrays like { BRL: [val1, null, val3,...], ... }
{{ total_table|json_script:"categoryOverviewData" }}
{{ showing|json_script:"showingString" }}
// Pass 1: Collect categories and currency details
Object.values(rawData).forEach(cat => {
var categoryName = cat.name === null ? "{% trans 'Uncategorized' %}" : cat.name;
if (!categories.includes(categoryName)) {
categories.push(categoryName);
}
if (cat.currencies) {
Object.values(cat.currencies).forEach(curr => {
var details = curr.currency;
if (details && details.code && !currencyDetails[details.code]) {
var decimals = parseInt(details.decimal_places, 10);
currencyDetails[details.code] = {
code: details.code,
name: details.name || details.code,
prefix: details.prefix || '',
suffix: details.suffix || '',
// Ensure decimal_places is a non-negative integer
decimal_places: !isNaN(decimals) && decimals >= 0 ? decimals : 2
};
}
});
}
});
<script>
function setupChart() {
var rawData = JSON.parse(document.getElementById('categoryOverviewData').textContent);
var showing_string = JSON.parse(document.getElementById('showingString').textContent);
console.log(showing_string)
// Initialize data structure for each currency with nulls
Object.keys(currencyDetails).forEach(code => {
currencyData[code] = new Array(categories.length).fill(null);
});
// --- Dynamic Data Processing ---
var categories = [];
var currencyDetails = {}; // Stores details like { BRL: {code: 'BRL', name: 'Real', ...}, ... }
var currencyData = {}; // Stores data arrays like { BRL: [val1, null, val3,...], ... }
// Pass 2: Populate data arrays (store all valid numbers now)
Object.values(rawData).forEach(cat => {
var categoryName = cat.name === null ? "{% trans 'Uncategorized' %}" : cat.name;
var catIndex = categories.indexOf(categoryName);
if (catIndex === -1) return;
// Pass 1: Collect categories and currency details
Object.values(rawData).forEach(cat => {
var categoryName = cat.name === null ? "{% trans 'Uncategorized' %}" : cat.name;
if (!categories.includes(categoryName)) {
categories.push(categoryName);
}
if (cat.currencies) {
Object.values(cat.currencies).forEach(curr => {
var details = curr.currency;
if (details && details.code && !currencyDetails[details.code]) {
var decimals = parseInt(details.decimal_places, 10);
currencyDetails[details.code] = {
code: details.code,
name: details.name || details.code,
prefix: details.prefix || '',
suffix: details.suffix || '',
// Ensure decimal_places is a non-negative integer
decimal_places: !isNaN(decimals) && decimals >= 0 ? decimals : 2
};
}
});
}
});
if (cat.currencies) {
Object.values(cat.currencies).forEach(curr => {
var code = curr.currency?.code;
if (code && currencyData[code]) {
var value = parseFloat(curr.total_final);
// Store the number if it's valid, otherwise keep null
currencyData[code][catIndex] = !isNaN(value) ? value : null;
}
});
}
});
// Initialize data structure for each currency with nulls
Object.keys(currencyDetails).forEach(code => {
currencyData[code] = new Array(categories.length).fill(null);
});
// --- Dynamic Chart Configuration ---
var datasets = Object.keys(currencyDetails).map((code, index) => {
return {
label: currencyDetails[code].name, // Use currency name for the legend label
data: currencyData[code],
currencyCode: code, // Store code for easy lookup in tooltip
borderWidth: 1
};
});
// Pass 2: Populate data arrays (store all valid numbers now)
Object.values(rawData).forEach(cat => {
var categoryName = cat.name === null ? "{% trans 'Uncategorized' %}" : cat.name;
var catIndex = categories.indexOf(categoryName);
if (catIndex === -1) return;
new Chart(document.getElementById('categoryChart'),
{
type: 'bar',
data: {
labels: categories,
datasets: datasets
},
options: {
indexAxis: 'y',
responsive: true,
interaction: {
intersect: false,
mode: 'nearest',
axis: "y"
},
maintainAspectRatio: false,
plugins: {
title: {
display: false
},
tooltip: {
callbacks: {
label: function (context) {
const dataset = context.dataset;
const currencyCode = dataset.currencyCode;
const details = currencyDetails[currencyCode];
const value = context.parsed.x; // Use 'x' because indexAxis is 'y'
if (cat.currencies) {
Object.values(cat.currencies).forEach(curr => {
var code = curr.currency?.code;
if (code && currencyData[code]) {
if (showing_string == 'current') {
var value = parseFloat(curr.total_current);
} else if (showing_string == 'projected') {
var value = parseFloat(curr.total_projected);
} else {
var value = parseFloat(curr.total_final);
}
if (value === null || value === undefined || !details) {
// Display the category name if the value is null/undefined
return null;
}
// Store the number if it's valid, otherwise keep null
currencyData[code][catIndex] = !isNaN(value) ? value : null;
}
});
}
});
let formattedValue = '';
try {
// Use Intl.NumberFormat for ALL values, configured with locale and exact decimal places
formattedValue = new Intl.NumberFormat(undefined, {
minimumFractionDigits: details.decimal_places,
maximumFractionDigits: details.decimal_places,
// Do NOT use style: 'currency' here, as we add prefix/suffix manually
}).format(value);
} catch (e) {
formattedValue = value.toFixed(details.decimal_places);
}
// --- Dynamic Chart Configuration ---
var datasets = Object.keys(currencyDetails).map((code, index) => {
return {
label: currencyDetails[code].name, // Use currency name for the legend label
data: currencyData[code],
currencyCode: code, // Store code for easy lookup in tooltip
borderWidth: 1
};
});
// Return label with currency name and formatted value including prefix/suffix
return `${details.prefix}${formattedValue}${details.suffix}`;
}
}
},
legend: {
position: 'top',
}
},
scales: {
x: {
stacked: true,
type: 'linear',
title: {
display: true,
text: '{% trans 'Final Total' %}'
},
ticks: {
// Format ticks using the detected locale
callback: function (value, index, ticks) {
return value.toLocaleString();
}
}
},
y: {
stacked: true,
title: {
display: false,
text: '{% trans 'Category' %}'
}
}
}
}
});
}
</script>
new Chart(document.getElementById('categoryChart'),
{
type: 'bar',
data: {
labels: categories,
datasets: datasets
},
options: {
indexAxis: 'y',
responsive: true,
interaction: {
intersect: false,
mode: 'nearest',
axis: "y"
},
maintainAspectRatio: false,
plugins: {
title: {
display: false
},
tooltip: {
callbacks: {
label: function (context) {
const dataset = context.dataset;
const currencyCode = dataset.currencyCode;
const details = currencyDetails[currencyCode];
const value = context.parsed.x; // Use 'x' because indexAxis is 'y'
if (value === null || value === undefined || !details) {
// Display the category name if the value is null/undefined
return null;
}
let formattedValue = '';
try {
// Use Intl.NumberFormat for ALL values, configured with locale and exact decimal places
formattedValue = new Intl.NumberFormat(undefined, {
minimumFractionDigits: details.decimal_places,
maximumFractionDigits: details.decimal_places,
// Do NOT use style: 'currency' here, as we add prefix/suffix manually
}).format(value);
} catch (e) {
formattedValue = value.toFixed(details.decimal_places);
}
// Return label with currency name and formatted value including prefix/suffix
return `${details.prefix}${formattedValue}${details.suffix}`;
}
}
},
legend: {
position: 'top',
}
},
scales: {
x: {
stacked: true,
type: 'linear',
title: {
display: true,
text: '{% trans 'Final Total' %}'
},
ticks: {
// Format ticks using the detected locale
callback: function (value, index, ticks) {
return value.toLocaleString();
}
}
},
y: {
stacked: true,
title: {
display: false,
text: '{% trans 'Category' %}'
}
}
}
}
});
}
</script>
{% endif %}
{% else %}
<c-msg.empty title="{% translate "No categories" %}"></c-msg.empty>
{% endif %}

View File

@@ -2,6 +2,8 @@
{% load crispy_forms_tags %}
{% load i18n %}
{% block title %}{% translate 'Insights' %}{% endblock %}
{% block content %}
<div class="container-fluid">
<div class="row my-3 h-100">

View File

@@ -46,7 +46,7 @@
color="grey"></c-amount.display>
</div>
{% endif %}
{% if currency.consolidated %}
{% if currency.consolidated and currency.consolidated.total_final != currency.total_final %}
<div class="d-flex align-items-baseline w-100">
<div class="account-name text-start font-monospace tw-text-gray-300">
<span class="hierarchy-line-icon"></span>{% trans 'Consolidated' %}</div>
@@ -57,7 +57,7 @@
:prefix="currency.consolidated.currency.prefix"
:suffix="currency.consolidated.currency.suffix"
:decimal_places="currency.consolidated.currency.decimal_places"
color="{% if currency.total_final > 0 %}green{% elif currency.total_final < 0 %}red{% endif %}"
color="{% if currency.consolidated.total_final > 0 %}green{% elif currency.consolidated.total_final < 0 %}red{% endif %}"
text-end></c-amount.display>
</div>
</div>