Merge pull request #163 from eitchtee/dca_improvements

feat(dca): link transactions to DCA
This commit is contained in:
Herculino Trotta
2025-02-15 00:43:07 -03:00
committed by GitHub
14 changed files with 961 additions and 473 deletions

View File

@@ -12,15 +12,14 @@ class DynamicModelChoiceField(forms.ModelChoiceField):
self.to_field_name = kwargs.pop("to_field_name", "pk")
self.create_field = kwargs.pop("create_field", None)
if not self.create_field:
raise ValueError("The 'create_field' parameter is required.")
self.queryset = kwargs.pop("queryset", model.objects.all())
super().__init__(queryset=self.queryset, *args, **kwargs)
self._created_instance = None
self.widget = TomSelect(clear_button=True, create=True)
super().__init__(queryset=self.queryset, *args, **kwargs)
self._created_instance = None
def to_python(self, value):
if value in self.empty_values:
return None
@@ -53,14 +52,19 @@ class DynamicModelChoiceField(forms.ModelChoiceField):
else:
raise self.model.DoesNotExist
except self.model.DoesNotExist:
try:
with transaction.atomic():
instance, _ = self.model.objects.update_or_create(
**{self.create_field: value}
if self.create_field:
try:
with transaction.atomic():
instance, _ = self.model.objects.update_or_create(
**{self.create_field: value}
)
self._created_instance = instance
return instance
except Exception as e:
raise ValidationError(
self.error_messages["invalid_choice"], code="invalid_choice"
)
self._created_instance = instance
return instance
except Exception as e:
else:
raise ValidationError(
self.error_messages["invalid_choice"], code="invalid_choice"
)

View File

@@ -1,4 +1,5 @@
from django.forms import widgets, SelectMultiple
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
@@ -129,3 +130,28 @@ class TomSelect(widgets.Select):
class TomSelectMultiple(SelectMultiple, TomSelect):
pass
class TransactionSelect(TomSelect):
def __init__(self, income: bool = True, expense: bool = True, *args, **kwargs):
super().__init__(*args, **kwargs)
self.load_income = income
self.load_expense = expense
self.create = False
def build_attrs(self, base_attrs, extra_attrs=None):
attrs = super().build_attrs(base_attrs, extra_attrs)
if self.load_income and self.load_expense:
attrs["data-load"] = reverse("transactions_search")
elif self.load_income and not self.load_expense:
attrs["data-load"] = reverse(
"transactions_search", kwargs={"filter_type": "income"}
)
elif self.load_expense and not self.load_income:
attrs["data-load"] = reverse(
"transactions_search", kwargs={"filter_type": "expenses"}
)
return attrs

View File

@@ -1,14 +1,22 @@
from crispy_forms.bootstrap import FormActions
from crispy_bootstrap5.bootstrap5 import Switch, BS5Accordion
from crispy_forms.bootstrap import FormActions, AccordionGroup
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Row, Column
from crispy_forms.layout import Layout, Row, Column, HTML
from django import forms
from django.utils.translation import gettext_lazy as _
from apps.accounts.models import Account
from apps.common.widgets.crispy.submit import NoClassSubmit
from apps.common.widgets.datepicker import AirDatePickerInput
from apps.common.widgets.decimal import ArbitraryDecimalDisplayNumberInput
from apps.common.widgets.tom_select import TomSelect
from apps.dca.models import DCAStrategy, DCAEntry
from apps.common.widgets.tom_select import TransactionSelect
from apps.transactions.models import Transaction, TransactionTag, TransactionCategory
from apps.common.fields.forms.dynamic_select import (
DynamicModelChoiceField,
DynamicModelMultipleChoiceField,
)
class DCAStrategyForm(forms.ModelForm):
@@ -53,6 +61,75 @@ class DCAStrategyForm(forms.ModelForm):
class DCAEntryForm(forms.ModelForm):
create_transaction = forms.BooleanField(
label=_("Create transaction"), initial=False, required=False
)
from_account = forms.ModelChoiceField(
queryset=Account.objects.filter(is_archived=False),
label=_("From Account"),
widget=TomSelect(clear_button=False, group_by="group"),
required=False,
)
to_account = forms.ModelChoiceField(
queryset=Account.objects.filter(is_archived=False),
label=_("To Account"),
widget=TomSelect(clear_button=False, group_by="group"),
required=False,
)
from_category = DynamicModelChoiceField(
create_field="name",
model=TransactionCategory,
required=False,
label=_("Category"),
queryset=TransactionCategory.objects.filter(active=True),
)
to_category = DynamicModelChoiceField(
create_field="name",
model=TransactionCategory,
required=False,
label=_("Category"),
queryset=TransactionCategory.objects.filter(active=True),
)
from_tags = DynamicModelMultipleChoiceField(
model=TransactionTag,
to_field_name="name",
create_field="name",
required=False,
label=_("Tags"),
queryset=TransactionTag.objects.filter(active=True),
)
to_tags = DynamicModelMultipleChoiceField(
model=TransactionTag,
to_field_name="name",
create_field="name",
required=False,
label=_("Tags"),
queryset=TransactionTag.objects.filter(active=True),
)
expense_transaction = DynamicModelChoiceField(
model=Transaction,
to_field_name="id",
label=_("Expense Transaction"),
required=False,
queryset=Transaction.objects.none(),
widget=TransactionSelect(clear_button=True, income=False, expense=True),
help_text=_("Type to search for a transaction to link to this entry"),
)
income_transaction = DynamicModelChoiceField(
model=Transaction,
to_field_name="id",
label=_("Income Transaction"),
required=False,
queryset=Transaction.objects.none(),
widget=TransactionSelect(clear_button=True, income=True, expense=False),
help_text=_("Type to search for a transaction to link to this entry"),
)
class Meta:
model = DCAEntry
fields = [
@@ -60,13 +137,19 @@ class DCAEntryForm(forms.ModelForm):
"amount_paid",
"amount_received",
"notes",
"expense_transaction",
"income_transaction",
]
widgets = {
"notes": forms.Textarea(attrs={"rows": 3}),
}
def __init__(self, *args, **kwargs):
strategy = kwargs.pop("strategy", None)
super().__init__(*args, **kwargs)
self.strategy = strategy if strategy else self.instance.strategy
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.layout = Layout(
@@ -75,18 +158,66 @@ class DCAEntryForm(forms.ModelForm):
Column("amount_paid", css_class="form-group col-md-6"),
Column("amount_received", css_class="form-group col-md-6"),
),
Row(
Column("expense_transaction", css_class="form-group col-md-6"),
Column("income_transaction", css_class="form-group col-md-6"),
),
"notes",
BS5Accordion(
AccordionGroup(
_("Create transaction"),
Switch("create_transaction"),
Row(
Column(
Row(
Column(
"from_account",
css_class="form-group col-md-6 mb-0",
),
css_class="form-row",
),
Row(
Column(
"from_category",
css_class="form-group col-md-6 mb-0",
),
Column(
"from_tags", css_class="form-group col-md-6 mb-0"
),
css_class="form-row",
),
),
css_class="p-1 mx-1 my-3 border rounded-3",
),
Row(
Column(
Row(
Column(
"to_account",
css_class="form-group col-md-6 mb-0",
),
css_class="form-row",
),
Row(
Column(
"to_category", css_class="form-group col-md-6 mb-0"
),
Column("to_tags", css_class="form-group col-md-6 mb-0"),
css_class="form-row",
),
),
css_class="p-1 mx-1 my-3 border rounded-3",
),
active=False,
),
AccordionGroup(
_("Link transaction"),
"income_transaction",
"expense_transaction",
),
flush=False,
always_open=False,
css_class="mb-3",
),
)
if self.instance and self.instance.pk:
# decimal_places = self.instance.account.currency.decimal_places
# self.fields["amount"].widget = ArbitraryDecimalDisplayNumberInput(
# decimal_places=decimal_places
# )
self.helper.layout.append(
FormActions(
NoClassSubmit(
@@ -95,7 +226,6 @@ class DCAEntryForm(forms.ModelForm):
),
)
else:
# self.fields["amount"].widget = ArbitraryDecimalDisplayNumberInput()
self.helper.layout.append(
FormActions(
NoClassSubmit(
@@ -107,3 +237,118 @@ class DCAEntryForm(forms.ModelForm):
self.fields["amount_paid"].widget = ArbitraryDecimalDisplayNumberInput()
self.fields["amount_received"].widget = ArbitraryDecimalDisplayNumberInput()
self.fields["date"].widget = AirDatePickerInput(clear_button=False)
expense_transaction = None
income_transaction = None
if self.instance and self.instance.pk:
# Edit mode - get from instance
expense_transaction = self.instance.expense_transaction
income_transaction = self.instance.income_transaction
elif self.data.get("expense_transaction"):
# Form validation - get from submitted data
try:
expense_transaction = Transaction.objects.get(
id=self.data["expense_transaction"]
)
income_transaction = Transaction.objects.get(
id=self.data["income_transaction"]
)
except Transaction.DoesNotExist:
pass
# If we have a current transaction, ensure it's in the queryset
if income_transaction:
self.fields["income_transaction"].queryset = Transaction.objects.filter(
id=income_transaction.id
)
if expense_transaction:
self.fields["expense_transaction"].queryset = Transaction.objects.filter(
id=expense_transaction.id
)
def clean(self):
cleaned_data = super().clean()
if cleaned_data.get("create_transaction"):
from_account = cleaned_data.get("from_account")
to_account = cleaned_data.get("to_account")
if not from_account and not to_account:
raise forms.ValidationError(
{
"from_account": _("You must provide an account."),
"to_account": _("You must provide an account."),
}
)
elif not from_account and to_account:
raise forms.ValidationError(
{"from_account": _("You must provide an account.")}
)
elif not to_account and from_account:
raise forms.ValidationError(
{"to_account": _("You must provide an account.")}
)
if from_account == to_account:
raise forms.ValidationError(
_("From and To accounts must be different.")
)
return cleaned_data
def save(self, **kwargs):
instance = super().save(commit=False)
if self.cleaned_data.get("create_transaction"):
from_account = self.cleaned_data["from_account"]
to_account = self.cleaned_data["to_account"]
from_amount = instance.amount_paid
to_amount = instance.amount_received
date = instance.date
description = _("DCA for %(strategy_name)s") % {
"strategy_name": self.strategy.name
}
from_category = self.cleaned_data.get("from_category")
to_category = self.cleaned_data.get("to_category")
notes = self.cleaned_data.get("notes")
# Create "From" transaction
from_transaction = Transaction.objects.create(
account=from_account,
type=Transaction.Type.EXPENSE,
is_paid=True,
date=date,
amount=from_amount,
description=description,
category=from_category,
notes=notes,
)
from_transaction.tags.set(self.cleaned_data.get("from_tags", []))
# Create "To" transaction
to_transaction = Transaction.objects.create(
account=to_account,
type=Transaction.Type.INCOME,
is_paid=True,
date=date,
amount=to_amount,
description=description,
category=to_category,
notes=notes,
)
to_transaction.tags.set(self.cleaned_data.get("to_tags", []))
instance.expense_transaction = from_transaction
instance.income_transaction = to_transaction
else:
if instance.expense_transaction:
instance.expense_transaction.amount = instance.amount_paid
instance.expense_transaction.save()
if instance.income_transaction:
instance.income_transaction.amount = instance.amount_received
instance.income_transaction.save()
instance.strategy = self.strategy
instance.save()
return instance

View File

@@ -155,11 +155,9 @@ def strategy_detail(request, strategy_id):
def strategy_entry_add(request, strategy_id):
strategy = get_object_or_404(DCAStrategy, id=strategy_id)
if request.method == "POST":
form = DCAEntryForm(request.POST)
form = DCAEntryForm(request.POST, strategy=strategy)
if form.is_valid():
entry = form.save(commit=False)
entry.strategy = strategy
entry.save()
entry = form.save()
messages.success(request, _("Entry added successfully"))
return HttpResponse(
@@ -169,7 +167,7 @@ def strategy_entry_add(request, strategy_id):
},
)
else:
form = DCAEntryForm()
form = DCAEntryForm(strategy=strategy)
return render(
request,

View File

@@ -92,6 +92,8 @@ def transactions_list(request, month: int, year: int):
"account__currency",
"installment_plan",
"entities",
"dca_expense_entries",
"dca_income_entries",
)
)

View File

@@ -11,6 +11,13 @@ from apps.rules.tasks import check_for_transaction_rules
@receiver(transaction_created)
@receiver(transaction_updated)
def transaction_changed_receiver(sender: Transaction, signal, **kwargs):
for dca_entry in sender.dca_expense_entries.all():
dca_entry.amount_paid = sender.amount
dca_entry.save()
for dca_entry in sender.dca_income_entries.all():
dca_entry.amount_received = sender.amount
dca_entry.save()
check_for_transaction_rules.defer(
instance_id=sender.id,
signal=(

View File

@@ -320,10 +320,10 @@ class Transaction(models.Model):
type_display = self.get_type_display()
frmt_date = date(self.date, "SHORT_DATE_FORMAT")
account = self.account
tags = ", ".join([x.name for x in self.tags.all()]) or _("No Tags")
category = self.category or _("No Category")
tags = ", ".join([x.name for x in self.tags.all()]) or _("No tags")
category = self.category or _("No category")
amount = localize_number(drop_trailing_zeros(self.amount))
description = self.description or _("No Description")
description = self.description or _("No description")
return f"[{frmt_date}][{type_display}][{account}] {description}{category}{tags}{amount}"

View File

@@ -86,6 +86,16 @@ urlpatterns = [
views.transactions_bulk_edit,
name="transactions_bulk_edit",
),
path(
"transactions/json/search/",
views.get_recent_transactions,
name="transactions_search",
),
path(
"transactions/json/search/<str:filter_type>/",
views.get_recent_transactions,
name="transactions_search",
),
path(
"transaction/<int:transaction_id>/clone/",
views.transaction_clone,

View File

@@ -4,14 +4,14 @@ from copy import deepcopy
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.http import HttpResponse
from django.db.models import Q
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from django.utils.translation import gettext_lazy as _, ngettext_lazy
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
from apps.common.utils.dicts import remove_falsey_entries
from apps.rules.signals import transaction_created, transaction_updated
from apps.transactions.filters import TransactionsFilter
from apps.transactions.forms import (
@@ -363,6 +363,8 @@ def transaction_all_list(request):
"account__currency",
"installment_plan",
"entities",
"dca_expense_entries",
"dca_income_entries",
).all()
transactions = default_order(transactions, order=order)
@@ -395,6 +397,9 @@ def transaction_all_summary(request):
"account__exchange_currency",
"account__currency",
"installment_plan",
"entities",
"dca_expense_entries",
"dca_income_entries",
).all()
f = TransactionsFilter(request.GET, queryset=transactions)
@@ -426,6 +431,9 @@ def transaction_all_account_summary(request):
"account__exchange_currency",
"account__currency",
"installment_plan",
"entities",
"dca_expense_entries",
"dca_income_entries",
).all()
f = TransactionsFilter(request.GET, queryset=transactions)
@@ -453,6 +461,9 @@ def transaction_all_currency_summary(request):
"account__exchange_currency",
"account__currency",
"installment_plan",
"entities",
"dca_expense_entries",
"dca_income_entries",
).all()
f = TransactionsFilter(request.GET, queryset=transactions)
@@ -484,6 +495,9 @@ def transactions_trash_can_index(request):
return render(request, "transactions/pages/trash.html")
@only_htmx
@login_required
@require_http_methods(["GET"])
def transactions_trash_can_list(request):
transactions = Transaction.deleted_objects.prefetch_related(
"account",
@@ -493,6 +507,10 @@ def transactions_trash_can_list(request):
"account__exchange_currency",
"account__currency",
"installment_plan",
"entities",
"entities",
"dca_expense_entries",
"dca_income_entries",
).all()
return render(
@@ -500,3 +518,43 @@ def transactions_trash_can_list(request):
"transactions/fragments/trash_list.html",
{"transactions": transactions},
)
@login_required
@require_http_methods(["GET"])
def get_recent_transactions(request, filter_type=None):
"""Return the 100 most recent non-deleted transactions with optional search."""
# Get search term from query params
search_term = request.GET.get("q", "").strip()
# Base queryset with selected fields
queryset = (
Transaction.objects.filter(deleted=False)
.select_related("account", "category")
.order_by("-created_at")
)
if filter_type:
if filter_type == "expenses":
queryset = queryset.filter(type=Transaction.Type.EXPENSE)
elif filter_type == "income":
queryset = queryset.filter(type=Transaction.Type.INCOME)
# Apply search if provided
if search_term:
queryset = queryset.filter(
Q(description__icontains=search_term)
| Q(notes__icontains=search_term)
| Q(internal_note__icontains=search_term)
| Q(tags__name__icontains=search_term)
| Q(category__name__icontains=search_term)
)
# Prepare data for JSON response
data = []
for t in queryset:
data.append({"text": str(t), "value": str(t.id)})
print(data)
return JsonResponse(data, safe=False)

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-09 17:27-0300\n"
"POT-Creation-Date: 2025-02-15 00:38-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -24,7 +24,7 @@ msgstr ""
#: apps/accounts/forms.py:40 apps/accounts/forms.py:96
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/currencies/forms.py:142 apps/dca/forms.py:41 apps/dca/forms.py:93
#: 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:45 apps/rules/forms.py:87
#: apps/rules/forms.py:359 apps/transactions/forms.py:190
#: apps/transactions/forms.py:257 apps/transactions/forms.py:581
@@ -34,9 +34,9 @@ msgid "Update"
msgstr ""
#: apps/accounts/forms.py:48 apps/accounts/forms.py:104
#: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:61
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
#: apps/dca/forms.py:49 apps/dca/forms.py:102 apps/import_app/forms.py:42
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
#: apps/rules/forms.py:53 apps/rules/forms.py:95 apps/rules/forms.py:367
#: apps/transactions/forms.py:174 apps/transactions/forms.py:199
#: apps/transactions/forms.py:589 apps/transactions/forms.py:632
@@ -68,30 +68,32 @@ msgstr ""
msgid "New balance"
msgstr ""
#: apps/accounts/forms.py:119 apps/rules/forms.py:168 apps/rules/forms.py:183
#: apps/rules/models.py:32 apps/rules/models.py:280
#: apps/transactions/forms.py:39 apps/transactions/forms.py:291
#: apps/transactions/forms.py:298 apps/transactions/forms.py:478
#: apps/transactions/forms.py:723 apps/transactions/models.py:159
#: apps/transactions/models.py:328 apps/transactions/models.py:508
#: apps/accounts/forms.py:119 apps/dca/forms.py:85 apps/dca/forms.py:92
#: apps/rules/forms.py:168 apps/rules/forms.py:183 apps/rules/models.py:32
#: apps/rules/models.py:280 apps/transactions/forms.py:39
#: apps/transactions/forms.py:291 apps/transactions/forms.py:298
#: apps/transactions/forms.py:478 apps/transactions/forms.py:723
#: apps/transactions/models.py:203 apps/transactions/models.py:378
#: apps/transactions/models.py:558
msgid "Category"
msgstr ""
#: apps/accounts/forms.py:126 apps/rules/forms.py:171 apps/rules/forms.py:180
#: apps/rules/models.py:33 apps/rules/models.py:284
#: apps/transactions/filters.py:74 apps/transactions/forms.py:47
#: apps/transactions/forms.py:307 apps/transactions/forms.py:315
#: apps/transactions/forms.py:471 apps/transactions/forms.py:716
#: apps/transactions/models.py:165 apps/transactions/models.py:330
#: apps/transactions/models.py:512 templates/includes/navbar.html:105
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
#: apps/accounts/forms.py:126 apps/dca/forms.py:101 apps/dca/forms.py:109
#: apps/rules/forms.py:171 apps/rules/forms.py:180 apps/rules/models.py:33
#: apps/rules/models.py:284 apps/transactions/filters.py:74
#: apps/transactions/forms.py:47 apps/transactions/forms.py:307
#: apps/transactions/forms.py:315 apps/transactions/forms.py:471
#: apps/transactions/forms.py:716 apps/transactions/models.py:209
#: apps/transactions/models.py:380 apps/transactions/models.py:562
#: templates/includes/navbar.html:105 templates/tags/fragments/list.html:5
#: templates/tags/pages/index.html:4
msgid "Tags"
msgstr ""
#: apps/accounts/models.py:9 apps/accounts/models.py:21 apps/dca/models.py:14
#: apps/import_app/models.py:14 apps/rules/models.py:10
#: apps/transactions/models.py:67 apps/transactions/models.py:87
#: apps/transactions/models.py:106
#: apps/transactions/models.py:111 apps/transactions/models.py:131
#: apps/transactions/models.py:150
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -153,8 +155,8 @@ msgstr ""
#: apps/accounts/models.py:59 apps/rules/forms.py:160 apps/rules/forms.py:173
#: apps/rules/models.py:24 apps/rules/models.py:236
#: apps/transactions/forms.py:59 apps/transactions/forms.py:463
#: apps/transactions/forms.py:708 apps/transactions/models.py:132
#: apps/transactions/models.py:288 apps/transactions/models.py:490
#: apps/transactions/forms.py:708 apps/transactions/models.py:176
#: apps/transactions/models.py:338 apps/transactions/models.py:540
msgid "Account"
msgstr ""
@@ -232,13 +234,13 @@ msgstr ""
msgid "Either 'date' or 'reference_date' must be provided."
msgstr ""
#: apps/common/fields/forms/dynamic_select.py:127
#: apps/common/fields/forms/dynamic_select.py:163
#: apps/common/fields/forms/dynamic_select.py:131
#: apps/common/fields/forms/dynamic_select.py:167
msgid "Error creating new instance"
msgstr ""
#: apps/common/fields/forms/grouped_select.py:24
#: apps/common/widgets/tom_select.py:91 apps/common/widgets/tom_select.py:94
#: apps/common/widgets/tom_select.py:92 apps/common/widgets/tom_select.py:95
msgid "Ungrouped"
msgstr ""
@@ -337,18 +339,18 @@ msgstr ""
msgid "Now"
msgstr ""
#: apps/common/widgets/tom_select.py:10
#: apps/common/widgets/tom_select.py:11
msgid "Remove"
msgstr ""
#: apps/common/widgets/tom_select.py:14
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:17
msgid "Clear"
msgstr ""
#: apps/common/widgets/tom_select.py:15
#: apps/common/widgets/tom_select.py:16
msgid "No results..."
msgstr ""
@@ -363,7 +365,7 @@ msgstr ""
#: apps/currencies/forms.py:69 apps/dca/models.py:156 apps/rules/forms.py:163
#: apps/rules/forms.py:176 apps/rules/models.py:27 apps/rules/models.py:248
#: apps/transactions/forms.py:63 apps/transactions/forms.py:319
#: apps/transactions/models.py:142
#: apps/transactions/models.py:186
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
@@ -442,8 +444,8 @@ msgstr ""
msgid "Service Type"
msgstr ""
#: apps/currencies/models.py:107 apps/transactions/models.py:71
#: apps/transactions/models.py:90 apps/transactions/models.py:109
#: apps/currencies/models.py:107 apps/transactions/models.py:115
#: apps/transactions/models.py:134 apps/transactions/models.py:153
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
@@ -559,6 +561,48 @@ msgstr ""
msgid "Services queued successfully"
msgstr ""
#: apps/dca/forms.py:65 apps/dca/forms.py:164
msgid "Create transaction"
msgstr ""
#: apps/dca/forms.py:70 apps/transactions/forms.py:266
msgid "From Account"
msgstr ""
#: apps/dca/forms.py:76 apps/transactions/forms.py:271
msgid "To Account"
msgstr ""
#: apps/dca/forms.py:116 apps/dca/models.py:169
msgid "Expense Transaction"
msgstr ""
#: apps/dca/forms.py:120 apps/dca/forms.py:130
msgid "Type to search for a transaction to link to this entry"
msgstr ""
#: apps/dca/forms.py:126 apps/dca/models.py:177
msgid "Income Transaction"
msgstr ""
#: apps/dca/forms.py:210
msgid "Link transaction"
msgstr ""
#: apps/dca/forms.py:279 apps/dca/forms.py:280 apps/dca/forms.py:285
#: apps/dca/forms.py:289
msgid "You must provide an account."
msgstr ""
#: apps/dca/forms.py:294 apps/transactions/forms.py:413
msgid "From and To accounts must be different."
msgstr ""
#: apps/dca/forms.py:308
#, python-format
msgid "DCA for %(strategy_name)s"
msgstr ""
#: apps/dca/models.py:17
msgid "Target Currency"
msgstr ""
@@ -569,8 +613,8 @@ msgstr ""
#: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/forms.py:167
#: apps/rules/forms.py:182 apps/rules/models.py:31 apps/rules/models.py:264
#: apps/transactions/forms.py:333 apps/transactions/models.py:155
#: apps/transactions/models.py:337 apps/transactions/models.py:518
#: apps/transactions/forms.py:333 apps/transactions/models.py:199
#: apps/transactions/models.py:387 apps/transactions/models.py:568
msgid "Notes"
msgstr ""
@@ -594,14 +638,6 @@ msgstr ""
msgid "Amount Received"
msgstr ""
#: apps/dca/models.py:169
msgid "Expense Transaction"
msgstr ""
#: apps/dca/models.py:177
msgid "Income Transaction"
msgstr ""
#: apps/dca/models.py:184
msgid "DCA Entry"
msgstr ""
@@ -622,15 +658,15 @@ msgstr ""
msgid "DCA strategy deleted successfully"
msgstr ""
#: apps/dca/views.py:163
#: apps/dca/views.py:161
msgid "Entry added successfully"
msgstr ""
#: apps/dca/views.py:190
#: apps/dca/views.py:188
msgid "Entry updated successfully"
msgstr ""
#: apps/dca/views.py:216
#: apps/dca/views.py:214
msgid "Entry deleted successfully"
msgstr ""
@@ -741,14 +777,14 @@ msgid "Operator"
msgstr ""
#: apps/rules/forms.py:161 apps/rules/forms.py:174 apps/rules/models.py:25
#: apps/rules/models.py:240 apps/transactions/models.py:139
#: apps/transactions/models.py:293 apps/transactions/models.py:496
#: apps/rules/models.py:240 apps/transactions/models.py:183
#: apps/transactions/models.py:343 apps/transactions/models.py:546
msgid "Type"
msgstr ""
#: apps/rules/forms.py:162 apps/rules/forms.py:175 apps/rules/models.py:26
#: apps/rules/models.py:244 apps/transactions/filters.py:23
#: apps/transactions/models.py:141 templates/cotton/transaction/item.html:21
#: apps/transactions/models.py:185 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
@@ -758,40 +794,40 @@ msgstr ""
#: apps/rules/forms.py:164 apps/rules/forms.py:177 apps/rules/models.py:28
#: apps/rules/models.py:252 apps/transactions/forms.py:66
#: apps/transactions/forms.py:322 apps/transactions/forms.py:492
#: apps/transactions/models.py:143 apps/transactions/models.py:311
#: apps/transactions/models.py:520
#: apps/transactions/models.py:187 apps/transactions/models.py:361
#: apps/transactions/models.py:570
msgid "Reference Date"
msgstr ""
#: apps/rules/forms.py:165 apps/rules/forms.py:178 apps/rules/models.py:29
#: apps/rules/models.py:256 apps/transactions/models.py:148
#: apps/transactions/models.py:501
#: apps/rules/models.py:256 apps/transactions/models.py:192
#: apps/transactions/models.py:551
msgid "Amount"
msgstr ""
#: apps/rules/forms.py:166 apps/rules/forms.py:179 apps/rules/models.py:11
#: apps/rules/models.py:30 apps/rules/models.py:260
#: apps/transactions/forms.py:325 apps/transactions/models.py:153
#: apps/transactions/models.py:295 apps/transactions/models.py:504
#: apps/transactions/forms.py:325 apps/transactions/models.py:197
#: apps/transactions/models.py:345 apps/transactions/models.py:554
msgid "Description"
msgstr ""
#: apps/rules/forms.py:169 apps/rules/forms.py:184 apps/rules/models.py:268
#: apps/transactions/models.py:192
#: apps/transactions/models.py:236
msgid "Internal Note"
msgstr ""
#: apps/rules/forms.py:170 apps/rules/forms.py:185 apps/rules/models.py:272
#: apps/transactions/models.py:194
#: apps/transactions/models.py:238
msgid "Internal ID"
msgstr ""
#: apps/rules/forms.py:172 apps/rules/forms.py:181 apps/rules/models.py:34
#: apps/rules/models.py:276 apps/transactions/filters.py:81
#: apps/transactions/forms.py:55 apps/transactions/forms.py:486
#: apps/transactions/forms.py:731 apps/transactions/models.py:117
#: apps/transactions/models.py:170 apps/transactions/models.py:333
#: apps/transactions/models.py:515 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:731 apps/transactions/models.py:161
#: apps/transactions/models.py:214 apps/transactions/models.py:383
#: apps/transactions/models.py:565 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:107
msgid "Entities"
msgstr ""
@@ -974,14 +1010,6 @@ msgstr ""
msgid "More"
msgstr ""
#: apps/transactions/forms.py:266
msgid "From Account"
msgstr ""
#: apps/transactions/forms.py:271
msgid "To Account"
msgstr ""
#: apps/transactions/forms.py:278
msgid "From Amount"
msgstr ""
@@ -995,10 +1023,6 @@ msgstr ""
msgid "Transfer"
msgstr ""
#: apps/transactions/forms.py:413
msgid "From and To accounts must be different."
msgstr ""
#: apps/transactions/forms.py:610
msgid "Tag name"
msgstr ""
@@ -1019,44 +1043,44 @@ msgstr ""
msgid "End date should be after the start date"
msgstr ""
#: apps/transactions/models.py:68
#: apps/transactions/models.py:112
msgid "Mute"
msgstr ""
#: apps/transactions/models.py:73
#: apps/transactions/models.py:117
msgid ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
msgstr ""
#: apps/transactions/models.py:78
#: apps/transactions/models.py:122
msgid "Transaction Category"
msgstr ""
#: apps/transactions/models.py:79
#: apps/transactions/models.py:123
msgid "Transaction Categories"
msgstr ""
#: apps/transactions/models.py:92
#: apps/transactions/models.py:136
msgid ""
"Deactivated tags won't be able to be selected when creating new transactions"
msgstr ""
#: apps/transactions/models.py:97 apps/transactions/models.py:98
#: apps/transactions/models.py:141 apps/transactions/models.py:142
msgid "Transaction Tags"
msgstr ""
#: apps/transactions/models.py:111
#: apps/transactions/models.py:155
msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
msgstr ""
#: apps/transactions/models.py:116
#: apps/transactions/models.py:160
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:126
#: apps/transactions/models.py:170
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1066,7 +1090,7 @@ msgstr ""
msgid "Income"
msgstr ""
#: apps/transactions/models.py:127
#: apps/transactions/models.py:171
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1075,27 +1099,27 @@ msgstr ""
msgid "Expense"
msgstr ""
#: apps/transactions/models.py:181 apps/transactions/models.py:340
#: apps/transactions/models.py:225 apps/transactions/models.py:390
msgid "Installment Plan"
msgstr ""
#: apps/transactions/models.py:190 apps/transactions/models.py:541
#: apps/transactions/models.py:234 apps/transactions/models.py:591
msgid "Recurring Transaction"
msgstr ""
#: apps/transactions/models.py:198
#: apps/transactions/models.py:242
msgid "Deleted"
msgstr ""
#: apps/transactions/models.py:203
#: apps/transactions/models.py:247
msgid "Deleted At"
msgstr ""
#: apps/transactions/models.py:211
#: apps/transactions/models.py:255
msgid "Transaction"
msgstr ""
#: apps/transactions/models.py:212 templates/includes/navbar.html:54
#: apps/transactions/models.py:256 templates/includes/navbar.html:54
#: templates/includes/navbar.html:101
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -1103,95 +1127,107 @@ msgstr ""
msgid "Transactions"
msgstr ""
#: apps/transactions/models.py:282
#: apps/transactions/models.py:323 templates/tags/fragments/table.html:53
msgid "No tags"
msgstr ""
#: apps/transactions/models.py:324
msgid "No category"
msgstr ""
#: apps/transactions/models.py:326
msgid "No description"
msgstr ""
#: apps/transactions/models.py:332
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:283 apps/users/models.py:26
#: apps/transactions/models.py:333 apps/users/models.py:26
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr ""
#: apps/transactions/models.py:284
#: apps/transactions/models.py:334
msgid "Weekly"
msgstr ""
#: apps/transactions/models.py:285
#: apps/transactions/models.py:335
msgid "Daily"
msgstr ""
#: apps/transactions/models.py:298
#: apps/transactions/models.py:348
msgid "Number of Installments"
msgstr ""
#: apps/transactions/models.py:303
#: apps/transactions/models.py:353
msgid "Installment Start"
msgstr ""
#: apps/transactions/models.py:304
#: apps/transactions/models.py:354
msgid "The installment number to start counting from"
msgstr ""
#: apps/transactions/models.py:309 apps/transactions/models.py:524
#: apps/transactions/models.py:359 apps/transactions/models.py:574
msgid "Start Date"
msgstr ""
#: apps/transactions/models.py:313 apps/transactions/models.py:525
#: apps/transactions/models.py:363 apps/transactions/models.py:575
msgid "End Date"
msgstr ""
#: apps/transactions/models.py:318
#: apps/transactions/models.py:368
msgid "Recurrence"
msgstr ""
#: apps/transactions/models.py:321
#: apps/transactions/models.py:371
msgid "Installment Amount"
msgstr ""
#: apps/transactions/models.py:341 templates/includes/navbar.html:69
#: apps/transactions/models.py:391 templates/includes/navbar.html:69
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
msgstr ""
#: apps/transactions/models.py:483
#: apps/transactions/models.py:533
msgid "day(s)"
msgstr ""
#: apps/transactions/models.py:484
#: apps/transactions/models.py:534
msgid "week(s)"
msgstr ""
#: apps/transactions/models.py:485
#: apps/transactions/models.py:535
msgid "month(s)"
msgstr ""
#: apps/transactions/models.py:486
#: apps/transactions/models.py:536
msgid "year(s)"
msgstr ""
#: apps/transactions/models.py:488
#: apps/transactions/models.py:538
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr ""
#: apps/transactions/models.py:527
#: apps/transactions/models.py:577
msgid "Recurrence Type"
msgstr ""
#: apps/transactions/models.py:530
#: apps/transactions/models.py:580
msgid "Recurrence Interval"
msgstr ""
#: apps/transactions/models.py:534
#: apps/transactions/models.py:584
msgid "Last Generated Date"
msgstr ""
#: apps/transactions/models.py:537
#: apps/transactions/models.py:587
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:542 templates/includes/navbar.html:71
#: apps/transactions/models.py:592 templates/includes/navbar.html:71
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -1207,35 +1243,35 @@ msgstr ""
msgid "%(value)s is not a non-negative number"
msgstr ""
#: apps/transactions/views/actions.py:23
#: apps/transactions/views/actions.py:24
#, python-format
msgid "%(count)s transaction marked as paid"
msgid_plural "%(count)s transactions marked as paid"
msgstr[0] ""
msgstr[1] ""
#: apps/transactions/views/actions.py:47
#: apps/transactions/views/actions.py:48
#, python-format
msgid "%(count)s transaction marked as not paid"
msgid_plural "%(count)s transactions marked as not paid"
msgstr[0] ""
msgstr[1] ""
#: apps/transactions/views/actions.py:71
#: apps/transactions/views/actions.py:72
#, python-format
msgid "%(count)s transaction deleted successfully"
msgid_plural "%(count)s transactions deleted successfully"
msgstr[0] ""
msgstr[1] ""
#: apps/transactions/views/actions.py:95
#: apps/transactions/views/actions.py:96
#, python-format
msgid "%(count)s transaction restored successfully"
msgid_plural "%(count)s transactions restored successfully"
msgstr[0] ""
msgstr[1] ""
#: apps/transactions/views/actions.py:130
#: apps/transactions/views/actions.py:131
#, python-format
msgid "%(count)s transaction duplicated successfully"
msgid_plural "%(count)s transactions duplicated successfully"
@@ -1496,7 +1532,7 @@ msgstr ""
#: templates/account_groups/fragments/list.html:36
#: templates/accounts/fragments/list.html:41
#: templates/categories/fragments/table.html:29
#: templates/cotton/transaction/item.html:127
#: templates/cotton/transaction/item.html:130
#: templates/cotton/ui/transactions_action_bar.html:49
#: templates/currencies/fragments/list.html:37
#: templates/dca/fragments/strategy/details.html:67
@@ -1518,8 +1554,8 @@ msgstr ""
#: templates/account_groups/fragments/list.html:43
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:161
#: templates/cotton/transaction/item.html:145
#: templates/cotton/transaction/item.html:164
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:86
#: templates/currencies/fragments/list.html:44
@@ -1544,8 +1580,8 @@ msgstr ""
#: templates/account_groups/fragments/list.html:47
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:146
#: templates/cotton/transaction/item.html:165
#: templates/cotton/transaction/item.html:149
#: templates/cotton/transaction/item.html:168
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:88
#: templates/currencies/fragments/list.html:48
@@ -1573,8 +1609,8 @@ msgstr ""
#: templates/account_groups/fragments/list.html:48
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:147
#: templates/cotton/transaction/item.html:166
#: templates/cotton/transaction/item.html:150
#: templates/cotton/transaction/item.html:169
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/currencies/fragments/list.html:49
@@ -1595,8 +1631,8 @@ msgstr ""
#: templates/account_groups/fragments/list.html:49
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:148
#: templates/cotton/transaction/item.html:167
#: templates/cotton/transaction/item.html:151
#: templates/cotton/transaction/item.html:170
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:48
@@ -1647,7 +1683,7 @@ msgstr ""
msgid "Is Asset"
msgstr ""
#: templates/accounts/fragments/list.html:70
#: templates/accounts/fragments/list.html:69
msgid "No accounts"
msgstr ""
@@ -1725,12 +1761,16 @@ msgstr ""
msgid "Select"
msgstr ""
#: templates/cotton/transaction/item.html:134
#: templates/cotton/transaction/item.html:56
msgid "DCA"
msgstr ""
#: templates/cotton/transaction/item.html:137
#: templates/cotton/ui/transactions_action_bar.html:78
msgid "Duplicate"
msgstr ""
#: templates/cotton/transaction/item.html:155
#: templates/cotton/transaction/item.html:158
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
msgid "Restore"
msgstr ""
@@ -2575,10 +2615,6 @@ msgstr ""
msgid "Edit tag"
msgstr ""
#: templates/tags/fragments/table.html:53
msgid "No tags"
msgstr ""
#: templates/transactions/fragments/add.html:5
#: templates/transactions/pages/add.html:5
msgid "New transaction"

View File

@@ -2,13 +2,13 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-09 17:27-0300\n"
"POT-Creation-Date: 2025-02-15 00:42-0300\n"
"PO-Revision-Date: 2025-02-12 06:58+0100\n"
"Last-Translator: Dimitri Decrock <dimitri@fam-decrock.eu>\n"
"Language-Team: \n"
@@ -25,7 +25,7 @@ msgstr "Groepsnaam"
#: apps/accounts/forms.py:40 apps/accounts/forms.py:96
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/currencies/forms.py:142 apps/dca/forms.py:41 apps/dca/forms.py:93
#: 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:45 apps/rules/forms.py:87
#: apps/rules/forms.py:359 apps/transactions/forms.py:190
#: apps/transactions/forms.py:257 apps/transactions/forms.py:581
@@ -35,9 +35,9 @@ msgid "Update"
msgstr "Bijwerken"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:104
#: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:61
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
#: apps/dca/forms.py:49 apps/dca/forms.py:102 apps/import_app/forms.py:42
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
#: apps/rules/forms.py:53 apps/rules/forms.py:95 apps/rules/forms.py:367
#: apps/transactions/forms.py:174 apps/transactions/forms.py:199
#: apps/transactions/forms.py:589 apps/transactions/forms.py:632
@@ -69,30 +69,32 @@ msgstr "Groep"
msgid "New balance"
msgstr "Nieuw saldo"
#: apps/accounts/forms.py:119 apps/rules/forms.py:168 apps/rules/forms.py:183
#: apps/rules/models.py:32 apps/rules/models.py:280
#: apps/transactions/forms.py:39 apps/transactions/forms.py:291
#: apps/transactions/forms.py:298 apps/transactions/forms.py:478
#: apps/transactions/forms.py:723 apps/transactions/models.py:159
#: apps/transactions/models.py:328 apps/transactions/models.py:508
#: apps/accounts/forms.py:119 apps/dca/forms.py:85 apps/dca/forms.py:92
#: apps/rules/forms.py:168 apps/rules/forms.py:183 apps/rules/models.py:32
#: apps/rules/models.py:280 apps/transactions/forms.py:39
#: apps/transactions/forms.py:291 apps/transactions/forms.py:298
#: apps/transactions/forms.py:478 apps/transactions/forms.py:723
#: apps/transactions/models.py:203 apps/transactions/models.py:378
#: apps/transactions/models.py:558
msgid "Category"
msgstr "Categorie"
#: apps/accounts/forms.py:126 apps/rules/forms.py:171 apps/rules/forms.py:180
#: apps/rules/models.py:33 apps/rules/models.py:284
#: apps/transactions/filters.py:74 apps/transactions/forms.py:47
#: apps/transactions/forms.py:307 apps/transactions/forms.py:315
#: apps/transactions/forms.py:471 apps/transactions/forms.py:716
#: apps/transactions/models.py:165 apps/transactions/models.py:330
#: apps/transactions/models.py:512 templates/includes/navbar.html:105
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
#: apps/accounts/forms.py:126 apps/dca/forms.py:101 apps/dca/forms.py:109
#: apps/rules/forms.py:171 apps/rules/forms.py:180 apps/rules/models.py:33
#: apps/rules/models.py:284 apps/transactions/filters.py:74
#: apps/transactions/forms.py:47 apps/transactions/forms.py:307
#: apps/transactions/forms.py:315 apps/transactions/forms.py:471
#: apps/transactions/forms.py:716 apps/transactions/models.py:209
#: apps/transactions/models.py:380 apps/transactions/models.py:562
#: templates/includes/navbar.html:105 templates/tags/fragments/list.html:5
#: templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Labels"
#: apps/accounts/models.py:9 apps/accounts/models.py:21 apps/dca/models.py:14
#: apps/import_app/models.py:14 apps/rules/models.py:10
#: apps/transactions/models.py:67 apps/transactions/models.py:87
#: apps/transactions/models.py:106
#: apps/transactions/models.py:111 apps/transactions/models.py:131
#: apps/transactions/models.py:150
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -158,8 +160,8 @@ msgstr ""
#: apps/accounts/models.py:59 apps/rules/forms.py:160 apps/rules/forms.py:173
#: apps/rules/models.py:24 apps/rules/models.py:236
#: apps/transactions/forms.py:59 apps/transactions/forms.py:463
#: apps/transactions/forms.py:708 apps/transactions/models.py:132
#: apps/transactions/models.py:288 apps/transactions/models.py:490
#: apps/transactions/forms.py:708 apps/transactions/models.py:176
#: apps/transactions/models.py:338 apps/transactions/models.py:540
msgid "Account"
msgstr "Rekening"
@@ -238,13 +240,13 @@ msgstr "Ongeldige bedrijfsgegevens. Geef een ID of naam op."
msgid "Either 'date' or 'reference_date' must be provided."
msgstr "'datum' of 'referentiedatum' moet worden opgegeven."
#: apps/common/fields/forms/dynamic_select.py:127
#: apps/common/fields/forms/dynamic_select.py:163
#: apps/common/fields/forms/dynamic_select.py:131
#: apps/common/fields/forms/dynamic_select.py:167
msgid "Error creating new instance"
msgstr "Fout bij het aanmaken van een nieuwe instantie"
#: apps/common/fields/forms/grouped_select.py:24
#: apps/common/widgets/tom_select.py:91 apps/common/widgets/tom_select.py:94
#: apps/common/widgets/tom_select.py:92 apps/common/widgets/tom_select.py:95
msgid "Ungrouped"
msgstr "Niet gegroepeerd"
@@ -343,18 +345,18 @@ msgstr "Vandaag"
msgid "Now"
msgstr "Nu"
#: apps/common/widgets/tom_select.py:10
#: apps/common/widgets/tom_select.py:11
msgid "Remove"
msgstr "Verwijder"
#: apps/common/widgets/tom_select.py:14
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:17
msgid "Clear"
msgstr "Leegmaken"
#: apps/common/widgets/tom_select.py:15
#: apps/common/widgets/tom_select.py:16
msgid "No results..."
msgstr "Geen resultaten..."
@@ -369,7 +371,7 @@ msgstr "Achtervoegsel"
#: apps/currencies/forms.py:69 apps/dca/models.py:156 apps/rules/forms.py:163
#: apps/rules/forms.py:176 apps/rules/models.py:27 apps/rules/models.py:248
#: apps/transactions/forms.py:63 apps/transactions/forms.py:319
#: apps/transactions/models.py:142
#: apps/transactions/models.py:186
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
@@ -448,8 +450,8 @@ msgstr "Dienstnaam"
msgid "Service Type"
msgstr "Soort Dienst"
#: apps/currencies/models.py:107 apps/transactions/models.py:71
#: apps/transactions/models.py:90 apps/transactions/models.py:109
#: apps/currencies/models.py:107 apps/transactions/models.py:115
#: apps/transactions/models.py:134 apps/transactions/models.py:153
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
@@ -574,6 +576,53 @@ msgstr "Dienst succesvol verwijderd"
msgid "Services queued successfully"
msgstr "Diensten succesvol in de wachtrij geplaatst"
#: apps/dca/forms.py:65 apps/dca/forms.py:164
#, fuzzy
#| msgid "Deleted transactions"
msgid "Create transaction"
msgstr "Verwijderde verrichtingen"
#: apps/dca/forms.py:70 apps/transactions/forms.py:266
msgid "From Account"
msgstr "Van rekening"
#: apps/dca/forms.py:76 apps/transactions/forms.py:271
msgid "To Account"
msgstr "Naar rekening"
#: apps/dca/forms.py:116 apps/dca/models.py:169
msgid "Expense Transaction"
msgstr "Uitgave Transactie"
#: apps/dca/forms.py:120 apps/dca/forms.py:130
msgid "Type to search for a transaction to link to this entry"
msgstr ""
#: apps/dca/forms.py:126 apps/dca/models.py:177
msgid "Income Transaction"
msgstr "Ontvangsten Transactie"
#: apps/dca/forms.py:210
#, fuzzy
#| msgid "Edit transaction"
msgid "Link transaction"
msgstr "Bewerk verrichting"
#: apps/dca/forms.py:279 apps/dca/forms.py:280 apps/dca/forms.py:285
#: apps/dca/forms.py:289
msgid "You must provide an account."
msgstr ""
#: apps/dca/forms.py:294 apps/transactions/forms.py:413
msgid "From and To accounts must be different."
msgstr "Van en Naar rekening moeten verschillend zijn."
#: apps/dca/forms.py:308
#, fuzzy, python-format
#| msgid "DCA Strategies"
msgid "DCA for %(strategy_name)s"
msgstr "DCA Strategieën"
#: apps/dca/models.py:17
msgid "Target Currency"
msgstr "Doel Munteenheid"
@@ -584,8 +633,8 @@ msgstr "Betaal Munteenheid"
#: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/forms.py:167
#: apps/rules/forms.py:182 apps/rules/models.py:31 apps/rules/models.py:264
#: apps/transactions/forms.py:333 apps/transactions/models.py:155
#: apps/transactions/models.py:337 apps/transactions/models.py:518
#: apps/transactions/forms.py:333 apps/transactions/models.py:199
#: apps/transactions/models.py:387 apps/transactions/models.py:568
msgid "Notes"
msgstr "Opmerkingen"
@@ -609,14 +658,6 @@ msgstr "Betaald bedrag"
msgid "Amount Received"
msgstr "Ontvangen bedrag"
#: apps/dca/models.py:169
msgid "Expense Transaction"
msgstr "Uitgave Transactie"
#: apps/dca/models.py:177
msgid "Income Transaction"
msgstr "Ontvangsten Transactie"
#: apps/dca/models.py:184
msgid "DCA Entry"
msgstr "DCA Instap"
@@ -637,15 +678,15 @@ msgstr "Strategie voor DCA succesvol bijgewerkt"
msgid "DCA strategy deleted successfully"
msgstr "Strategie voor DCA succesvol verwijderd"
#: apps/dca/views.py:163
#: apps/dca/views.py:161
msgid "Entry added successfully"
msgstr "Item succesvol toegevoegd"
#: apps/dca/views.py:190
#: apps/dca/views.py:188
msgid "Entry updated successfully"
msgstr "Item succesvol bijgewerkt"
#: apps/dca/views.py:216
#: apps/dca/views.py:214
msgid "Entry deleted successfully"
msgstr "Item succesvol verwijderd"
@@ -756,14 +797,14 @@ msgid "Operator"
msgstr "Operator"
#: apps/rules/forms.py:161 apps/rules/forms.py:174 apps/rules/models.py:25
#: apps/rules/models.py:240 apps/transactions/models.py:139
#: apps/transactions/models.py:293 apps/transactions/models.py:496
#: apps/rules/models.py:240 apps/transactions/models.py:183
#: apps/transactions/models.py:343 apps/transactions/models.py:546
msgid "Type"
msgstr "Soort"
#: apps/rules/forms.py:162 apps/rules/forms.py:175 apps/rules/models.py:26
#: apps/rules/models.py:244 apps/transactions/filters.py:23
#: apps/transactions/models.py:141 templates/cotton/transaction/item.html:21
#: apps/transactions/models.py:185 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
@@ -773,40 +814,40 @@ msgstr "Betaald"
#: apps/rules/forms.py:164 apps/rules/forms.py:177 apps/rules/models.py:28
#: apps/rules/models.py:252 apps/transactions/forms.py:66
#: apps/transactions/forms.py:322 apps/transactions/forms.py:492
#: apps/transactions/models.py:143 apps/transactions/models.py:311
#: apps/transactions/models.py:520
#: apps/transactions/models.py:187 apps/transactions/models.py:361
#: apps/transactions/models.py:570
msgid "Reference Date"
msgstr "Referentiedatum"
#: apps/rules/forms.py:165 apps/rules/forms.py:178 apps/rules/models.py:29
#: apps/rules/models.py:256 apps/transactions/models.py:148
#: apps/transactions/models.py:501
#: apps/rules/models.py:256 apps/transactions/models.py:192
#: apps/transactions/models.py:551
msgid "Amount"
msgstr "Bedrag"
#: apps/rules/forms.py:166 apps/rules/forms.py:179 apps/rules/models.py:11
#: apps/rules/models.py:30 apps/rules/models.py:260
#: apps/transactions/forms.py:325 apps/transactions/models.py:153
#: apps/transactions/models.py:295 apps/transactions/models.py:504
#: apps/transactions/forms.py:325 apps/transactions/models.py:197
#: apps/transactions/models.py:345 apps/transactions/models.py:554
msgid "Description"
msgstr "Beschrijving"
#: apps/rules/forms.py:169 apps/rules/forms.py:184 apps/rules/models.py:268
#: apps/transactions/models.py:192
#: apps/transactions/models.py:236
msgid "Internal Note"
msgstr "Interne opmerking"
#: apps/rules/forms.py:170 apps/rules/forms.py:185 apps/rules/models.py:272
#: apps/transactions/models.py:194
#: apps/transactions/models.py:238
msgid "Internal ID"
msgstr "Interne ID"
#: apps/rules/forms.py:172 apps/rules/forms.py:181 apps/rules/models.py:34
#: apps/rules/models.py:276 apps/transactions/filters.py:81
#: apps/transactions/forms.py:55 apps/transactions/forms.py:486
#: apps/transactions/forms.py:731 apps/transactions/models.py:117
#: apps/transactions/models.py:170 apps/transactions/models.py:333
#: apps/transactions/models.py:515 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:731 apps/transactions/models.py:161
#: apps/transactions/models.py:214 apps/transactions/models.py:383
#: apps/transactions/models.py:565 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:107
msgid "Entities"
msgstr "Bedrijven"
@@ -992,14 +1033,6 @@ msgstr "Maximaal bedrag"
msgid "More"
msgstr "Meer"
#: apps/transactions/forms.py:266
msgid "From Account"
msgstr "Van rekening"
#: apps/transactions/forms.py:271
msgid "To Account"
msgstr "Naar rekening"
#: apps/transactions/forms.py:278
msgid "From Amount"
msgstr "Van Bedrag"
@@ -1013,10 +1046,6 @@ msgstr "Naar Bedrag"
msgid "Transfer"
msgstr "Overschrijving"
#: apps/transactions/forms.py:413
msgid "From and To accounts must be different."
msgstr "Van en Naar rekening moeten verschillend zijn."
#: apps/transactions/forms.py:610
msgid "Tag name"
msgstr "Labelnaam"
@@ -1037,11 +1066,11 @@ msgstr "Gedempte categorieën tellen niet mee voor je maandtotaal"
msgid "End date should be after the start date"
msgstr "De einddatum moet na de begindatum vallen"
#: apps/transactions/models.py:68
#: apps/transactions/models.py:112
msgid "Mute"
msgstr "Gedempt"
#: apps/transactions/models.py:73
#: apps/transactions/models.py:117
msgid ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
@@ -1049,26 +1078,26 @@ msgstr ""
"Gedeactiveerde categorieën kunnen niet worden geselecteerd bij het maken van "
"nieuwe transacties"
#: apps/transactions/models.py:78
#: apps/transactions/models.py:122
msgid "Transaction Category"
msgstr "Transactie categorie"
#: apps/transactions/models.py:79
#: apps/transactions/models.py:123
msgid "Transaction Categories"
msgstr "Transactie categorieën"
#: apps/transactions/models.py:92
#: apps/transactions/models.py:136
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:97 apps/transactions/models.py:98
#: apps/transactions/models.py:141 apps/transactions/models.py:142
msgid "Transaction Tags"
msgstr "Verrichting Labels"
#: apps/transactions/models.py:111
#: apps/transactions/models.py:155
msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
@@ -1076,11 +1105,11 @@ msgstr ""
"Gedeactiveerde bedrijven kunnen niet worden geselecteerd bij het maken van "
"nieuwe verrichtingen"
#: apps/transactions/models.py:116
#: apps/transactions/models.py:160
msgid "Entity"
msgstr "Bedrijf"
#: apps/transactions/models.py:126
#: apps/transactions/models.py:170
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1090,7 +1119,7 @@ msgstr "Bedrijf"
msgid "Income"
msgstr "Ontvangsten Transactie"
#: apps/transactions/models.py:127
#: apps/transactions/models.py:171
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1099,27 +1128,27 @@ msgstr "Ontvangsten Transactie"
msgid "Expense"
msgstr "Uitgave Transactie"
#: apps/transactions/models.py:181 apps/transactions/models.py:340
#: apps/transactions/models.py:225 apps/transactions/models.py:390
msgid "Installment Plan"
msgstr "Afbetalingsplan"
#: apps/transactions/models.py:190 apps/transactions/models.py:541
#: apps/transactions/models.py:234 apps/transactions/models.py:591
msgid "Recurring Transaction"
msgstr "Terugkerende verrichting"
#: apps/transactions/models.py:198
#: apps/transactions/models.py:242
msgid "Deleted"
msgstr "Verwijderd"
#: apps/transactions/models.py:203
#: apps/transactions/models.py:247
msgid "Deleted At"
msgstr "Verwijderd Op"
#: apps/transactions/models.py:211
#: apps/transactions/models.py:255
msgid "Transaction"
msgstr "Verrichting"
#: apps/transactions/models.py:212 templates/includes/navbar.html:54
#: apps/transactions/models.py:256 templates/includes/navbar.html:54
#: templates/includes/navbar.html:101
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -1127,95 +1156,111 @@ msgstr "Verrichting"
msgid "Transactions"
msgstr "Verrichtingen"
#: apps/transactions/models.py:282
#: apps/transactions/models.py:323 templates/tags/fragments/table.html:53
msgid "No tags"
msgstr "Geen labels"
#: apps/transactions/models.py:324
#, fuzzy
#| msgid "No categories"
msgid "No category"
msgstr "Geen categorieën"
#: apps/transactions/models.py:326
#, fuzzy
#| msgid "Description"
msgid "No description"
msgstr "Beschrijving"
#: apps/transactions/models.py:332
msgid "Yearly"
msgstr "Jaarlijks"
#: apps/transactions/models.py:283 apps/users/models.py:26
#: apps/transactions/models.py:333 apps/users/models.py:26
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr "Maandelijks"
#: apps/transactions/models.py:284
#: apps/transactions/models.py:334
msgid "Weekly"
msgstr "Wekelijks"
#: apps/transactions/models.py:285
#: apps/transactions/models.py:335
msgid "Daily"
msgstr "Dagelijks"
#: apps/transactions/models.py:298
#: apps/transactions/models.py:348
msgid "Number of Installments"
msgstr "Aantal aflossingen"
#: apps/transactions/models.py:303
#: apps/transactions/models.py:353
msgid "Installment Start"
msgstr "Begin afbetaling"
#: apps/transactions/models.py:304
#: apps/transactions/models.py:354
msgid "The installment number to start counting from"
msgstr "Het nummer van de aflevering om mee te beginnen"
#: apps/transactions/models.py:309 apps/transactions/models.py:524
#: apps/transactions/models.py:359 apps/transactions/models.py:574
msgid "Start Date"
msgstr "Startdatum"
#: apps/transactions/models.py:313 apps/transactions/models.py:525
#: apps/transactions/models.py:363 apps/transactions/models.py:575
msgid "End Date"
msgstr "Einddatum"
#: apps/transactions/models.py:318
#: apps/transactions/models.py:368
msgid "Recurrence"
msgstr "Terugkeerpatroon"
#: apps/transactions/models.py:321
#: apps/transactions/models.py:371
msgid "Installment Amount"
msgstr "Termijnbedrag"
#: apps/transactions/models.py:341 templates/includes/navbar.html:69
#: apps/transactions/models.py:391 templates/includes/navbar.html:69
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
msgstr "Afbetalingsplannen"
#: apps/transactions/models.py:483
#: apps/transactions/models.py:533
msgid "day(s)"
msgstr "dag(en)"
#: apps/transactions/models.py:484
#: apps/transactions/models.py:534
msgid "week(s)"
msgstr "we(e)k(en)"
#: apps/transactions/models.py:485
#: apps/transactions/models.py:535
msgid "month(s)"
msgstr "maand(en)"
#: apps/transactions/models.py:486
#: apps/transactions/models.py:536
msgid "year(s)"
msgstr "ja(a)r(en)"
#: apps/transactions/models.py:488
#: apps/transactions/models.py:538
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr "Gepauzeerd"
#: apps/transactions/models.py:527
#: apps/transactions/models.py:577
msgid "Recurrence Type"
msgstr "Type Terugkeerpatroon"
#: apps/transactions/models.py:530
#: apps/transactions/models.py:580
msgid "Recurrence Interval"
msgstr "Terugkeer Interval"
#: apps/transactions/models.py:534
#: apps/transactions/models.py:584
msgid "Last Generated Date"
msgstr "Laatste Gegenereerde Datum"
#: apps/transactions/models.py:537
#: apps/transactions/models.py:587
msgid "Last Generated Reference Date"
msgstr "Laatste Gegenereerde Referentiedatum"
#: apps/transactions/models.py:542 templates/includes/navbar.html:71
#: apps/transactions/models.py:592 templates/includes/navbar.html:71
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -1231,35 +1276,35 @@ msgstr "%(value)s heeft te veel decimalen. Het maximum is 30."
msgid "%(value)s is not a non-negative number"
msgstr "%(value)s is geen niet-negatief getal"
#: apps/transactions/views/actions.py:23
#: apps/transactions/views/actions.py:24
#, python-format
msgid "%(count)s transaction marked as paid"
msgid_plural "%(count)s transactions marked as paid"
msgstr[0] "%(count)s verrichting gemarkeerd als betaald"
msgstr[1] "%(count)s verrichtingen gemarkeerd als betaald"
#: apps/transactions/views/actions.py:47
#: apps/transactions/views/actions.py:48
#, python-format
msgid "%(count)s transaction marked as not paid"
msgid_plural "%(count)s transactions marked as not paid"
msgstr[0] "%(count)s verrichting gemarkeerd als niet betaald"
msgstr[1] "%(count)s verrichtingen gemarkeerd als niet betaald"
#: apps/transactions/views/actions.py:71
#: apps/transactions/views/actions.py:72
#, python-format
msgid "%(count)s transaction deleted successfully"
msgid_plural "%(count)s transactions deleted successfully"
msgstr[0] "%(count)s verrichting succesvol verwijderd"
msgstr[1] "%(count)s verrichtingen succesvol verwijderd"
#: apps/transactions/views/actions.py:95
#: apps/transactions/views/actions.py:96
#, python-format
msgid "%(count)s transaction restored successfully"
msgid_plural "%(count)s transactions restored successfully"
msgstr[0] "%(count)s verrichting succesvol hersteld"
msgstr[1] "%(count)s verrichtingen succesvol hersteld"
#: apps/transactions/views/actions.py:130
#: apps/transactions/views/actions.py:131
#, python-format
msgid "%(count)s transaction duplicated successfully"
msgid_plural "%(count)s transactions duplicated successfully"
@@ -1520,7 +1565,7 @@ msgstr "Acties"
#: templates/account_groups/fragments/list.html:36
#: templates/accounts/fragments/list.html:41
#: templates/categories/fragments/table.html:29
#: templates/cotton/transaction/item.html:127
#: templates/cotton/transaction/item.html:130
#: templates/cotton/ui/transactions_action_bar.html:49
#: templates/currencies/fragments/list.html:37
#: templates/dca/fragments/strategy/details.html:67
@@ -1542,8 +1587,8 @@ msgstr "Bijwerken"
#: templates/account_groups/fragments/list.html:43
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:161
#: templates/cotton/transaction/item.html:145
#: templates/cotton/transaction/item.html:164
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:86
#: templates/currencies/fragments/list.html:44
@@ -1568,8 +1613,8 @@ msgstr "Verwijderen"
#: templates/account_groups/fragments/list.html:47
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:146
#: templates/cotton/transaction/item.html:165
#: templates/cotton/transaction/item.html:149
#: templates/cotton/transaction/item.html:168
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:88
#: templates/currencies/fragments/list.html:48
@@ -1597,8 +1642,8 @@ msgstr "Weet je het zeker?"
#: templates/account_groups/fragments/list.html:48
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:147
#: templates/cotton/transaction/item.html:166
#: templates/cotton/transaction/item.html:150
#: templates/cotton/transaction/item.html:169
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/currencies/fragments/list.html:49
@@ -1619,8 +1664,8 @@ msgstr "Je kunt dit niet meer terugdraaien!"
#: templates/account_groups/fragments/list.html:49
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:148
#: templates/cotton/transaction/item.html:167
#: templates/cotton/transaction/item.html:151
#: templates/cotton/transaction/item.html:170
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:48
@@ -1671,7 +1716,7 @@ msgstr "Rekening bewerken"
msgid "Is Asset"
msgstr "Is Vermogen"
#: templates/accounts/fragments/list.html:70
#: templates/accounts/fragments/list.html:69
msgid "No accounts"
msgstr "Geen rekeningen"
@@ -1749,12 +1794,16 @@ msgstr "Zoeken"
msgid "Select"
msgstr "Selecteer"
#: templates/cotton/transaction/item.html:134
#: templates/cotton/transaction/item.html:56
msgid "DCA"
msgstr ""
#: templates/cotton/transaction/item.html:137
#: templates/cotton/ui/transactions_action_bar.html:78
msgid "Duplicate"
msgstr "Dupliceren"
#: templates/cotton/transaction/item.html:155
#: templates/cotton/transaction/item.html:158
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
msgid "Restore"
msgstr "Herstel"
@@ -2610,10 +2659,6 @@ msgstr "Label toevoegen"
msgid "Edit tag"
msgstr "Label bewerken"
#: templates/tags/fragments/table.html:53
msgid "No tags"
msgstr "Geen labels"
#: templates/transactions/fragments/add.html:5
#: templates/transactions/pages/add.html:5
msgid "New transaction"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-09 17:27-0300\n"
"PO-Revision-Date: 2025-02-09 17:30-0300\n"
"POT-Creation-Date: 2025-02-15 00:38-0300\n"
"PO-Revision-Date: 2025-02-15 00:39-0300\n"
"Last-Translator: Herculino Trotta\n"
"Language-Team: \n"
"Language: pt_BR\n"
@@ -25,7 +25,7 @@ msgstr "Nome do grupo"
#: apps/accounts/forms.py:40 apps/accounts/forms.py:96
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
#: apps/currencies/forms.py:142 apps/dca/forms.py:41 apps/dca/forms.py:93
#: 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:45 apps/rules/forms.py:87
#: apps/rules/forms.py:359 apps/transactions/forms.py:190
#: apps/transactions/forms.py:257 apps/transactions/forms.py:581
@@ -35,9 +35,9 @@ msgid "Update"
msgstr "Atualizar"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:104
#: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:61
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
#: apps/currencies/forms.py:99 apps/currencies/forms.py:150
#: apps/dca/forms.py:49 apps/dca/forms.py:102 apps/import_app/forms.py:42
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
#: apps/rules/forms.py:53 apps/rules/forms.py:95 apps/rules/forms.py:367
#: apps/transactions/forms.py:174 apps/transactions/forms.py:199
#: apps/transactions/forms.py:589 apps/transactions/forms.py:632
@@ -69,30 +69,32 @@ msgstr "Grupo da Conta"
msgid "New balance"
msgstr "Novo saldo"
#: apps/accounts/forms.py:119 apps/rules/forms.py:168 apps/rules/forms.py:183
#: apps/rules/models.py:32 apps/rules/models.py:280
#: apps/transactions/forms.py:39 apps/transactions/forms.py:291
#: apps/transactions/forms.py:298 apps/transactions/forms.py:478
#: apps/transactions/forms.py:723 apps/transactions/models.py:159
#: apps/transactions/models.py:328 apps/transactions/models.py:508
#: apps/accounts/forms.py:119 apps/dca/forms.py:85 apps/dca/forms.py:92
#: apps/rules/forms.py:168 apps/rules/forms.py:183 apps/rules/models.py:32
#: apps/rules/models.py:280 apps/transactions/forms.py:39
#: apps/transactions/forms.py:291 apps/transactions/forms.py:298
#: apps/transactions/forms.py:478 apps/transactions/forms.py:723
#: apps/transactions/models.py:203 apps/transactions/models.py:378
#: apps/transactions/models.py:558
msgid "Category"
msgstr "Categoria"
#: apps/accounts/forms.py:126 apps/rules/forms.py:171 apps/rules/forms.py:180
#: apps/rules/models.py:33 apps/rules/models.py:284
#: apps/transactions/filters.py:74 apps/transactions/forms.py:47
#: apps/transactions/forms.py:307 apps/transactions/forms.py:315
#: apps/transactions/forms.py:471 apps/transactions/forms.py:716
#: apps/transactions/models.py:165 apps/transactions/models.py:330
#: apps/transactions/models.py:512 templates/includes/navbar.html:105
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
#: apps/accounts/forms.py:126 apps/dca/forms.py:101 apps/dca/forms.py:109
#: apps/rules/forms.py:171 apps/rules/forms.py:180 apps/rules/models.py:33
#: apps/rules/models.py:284 apps/transactions/filters.py:74
#: apps/transactions/forms.py:47 apps/transactions/forms.py:307
#: apps/transactions/forms.py:315 apps/transactions/forms.py:471
#: apps/transactions/forms.py:716 apps/transactions/models.py:209
#: apps/transactions/models.py:380 apps/transactions/models.py:562
#: templates/includes/navbar.html:105 templates/tags/fragments/list.html:5
#: templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Tags"
#: apps/accounts/models.py:9 apps/accounts/models.py:21 apps/dca/models.py:14
#: apps/import_app/models.py:14 apps/rules/models.py:10
#: apps/transactions/models.py:67 apps/transactions/models.py:87
#: apps/transactions/models.py:106
#: apps/transactions/models.py:111 apps/transactions/models.py:131
#: apps/transactions/models.py:150
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -157,8 +159,8 @@ msgstr ""
#: apps/accounts/models.py:59 apps/rules/forms.py:160 apps/rules/forms.py:173
#: apps/rules/models.py:24 apps/rules/models.py:236
#: apps/transactions/forms.py:59 apps/transactions/forms.py:463
#: apps/transactions/forms.py:708 apps/transactions/models.py:132
#: apps/transactions/models.py:288 apps/transactions/models.py:490
#: apps/transactions/forms.py:708 apps/transactions/models.py:176
#: apps/transactions/models.py:338 apps/transactions/models.py:540
msgid "Account"
msgstr "Conta"
@@ -236,13 +238,13 @@ msgstr "Dados da entidade inválidos. Forneça um ID ou nome."
msgid "Either 'date' or 'reference_date' must be provided."
msgstr "É necessário fornecer “date” ou “reference_date”."
#: apps/common/fields/forms/dynamic_select.py:127
#: apps/common/fields/forms/dynamic_select.py:163
#: apps/common/fields/forms/dynamic_select.py:131
#: apps/common/fields/forms/dynamic_select.py:167
msgid "Error creating new instance"
msgstr "Erro criando nova instância"
#: apps/common/fields/forms/grouped_select.py:24
#: apps/common/widgets/tom_select.py:91 apps/common/widgets/tom_select.py:94
#: apps/common/widgets/tom_select.py:92 apps/common/widgets/tom_select.py:95
msgid "Ungrouped"
msgstr "Não agrupado"
@@ -341,18 +343,18 @@ msgstr "Hoje"
msgid "Now"
msgstr "Agora"
#: apps/common/widgets/tom_select.py:10
#: apps/common/widgets/tom_select.py:11
msgid "Remove"
msgstr "Remover"
#: apps/common/widgets/tom_select.py:14
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:17
msgid "Clear"
msgstr "Limpar"
#: apps/common/widgets/tom_select.py:15
#: apps/common/widgets/tom_select.py:16
msgid "No results..."
msgstr "Sem resultados..."
@@ -367,7 +369,7 @@ msgstr "Sufixo"
#: apps/currencies/forms.py:69 apps/dca/models.py:156 apps/rules/forms.py:163
#: apps/rules/forms.py:176 apps/rules/models.py:27 apps/rules/models.py:248
#: apps/transactions/forms.py:63 apps/transactions/forms.py:319
#: apps/transactions/models.py:142
#: apps/transactions/models.py:186
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
#: templates/exchange_rates_services/fragments/table.html:10
@@ -446,8 +448,8 @@ msgstr "Nome do Serviço"
msgid "Service Type"
msgstr "Tipo de Serviço"
#: apps/currencies/models.py:107 apps/transactions/models.py:71
#: apps/transactions/models.py:90 apps/transactions/models.py:109
#: apps/currencies/models.py:107 apps/transactions/models.py:115
#: apps/transactions/models.py:134 apps/transactions/models.py:153
#: templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
@@ -573,6 +575,48 @@ msgstr "Serviço apagado com sucesso"
msgid "Services queued successfully"
msgstr "Serviços marcados para execução com sucesso"
#: apps/dca/forms.py:65 apps/dca/forms.py:164
msgid "Create transaction"
msgstr "Criar transação"
#: apps/dca/forms.py:70 apps/transactions/forms.py:266
msgid "From Account"
msgstr "Conta de origem"
#: apps/dca/forms.py:76 apps/transactions/forms.py:271
msgid "To Account"
msgstr "Conta de destino"
#: apps/dca/forms.py:116 apps/dca/models.py:169
msgid "Expense Transaction"
msgstr "Transação de saída"
#: apps/dca/forms.py:120 apps/dca/forms.py:130
msgid "Type to search for a transaction to link to this entry"
msgstr "Digite para buscar uma transação para conectar à esta entrada"
#: apps/dca/forms.py:126 apps/dca/models.py:177
msgid "Income Transaction"
msgstr "Transação de entrada"
#: apps/dca/forms.py:210
msgid "Link transaction"
msgstr "Conectar transação"
#: apps/dca/forms.py:279 apps/dca/forms.py:280 apps/dca/forms.py:285
#: apps/dca/forms.py:289
msgid "You must provide an account."
msgstr "Você deve informar uma conta."
#: apps/dca/forms.py:294 apps/transactions/forms.py:413
msgid "From and To accounts must be different."
msgstr "As contas De e Para devem ser diferentes."
#: apps/dca/forms.py:308
#, python-format
msgid "DCA for %(strategy_name)s"
msgstr "CMP para %(strategy_name)s"
#: apps/dca/models.py:17
msgid "Target Currency"
msgstr "Moeda de destino"
@@ -583,8 +627,8 @@ msgstr "Moeda de pagamento"
#: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/forms.py:167
#: apps/rules/forms.py:182 apps/rules/models.py:31 apps/rules/models.py:264
#: apps/transactions/forms.py:333 apps/transactions/models.py:155
#: apps/transactions/models.py:337 apps/transactions/models.py:518
#: apps/transactions/forms.py:333 apps/transactions/models.py:199
#: apps/transactions/models.py:387 apps/transactions/models.py:568
msgid "Notes"
msgstr "Notas"
@@ -608,14 +652,6 @@ msgstr "Quantia paga"
msgid "Amount Received"
msgstr "Quantia recebida"
#: apps/dca/models.py:169
msgid "Expense Transaction"
msgstr "Transação de saída"
#: apps/dca/models.py:177
msgid "Income Transaction"
msgstr "Transação de entrada"
#: apps/dca/models.py:184
msgid "DCA Entry"
msgstr "Entrada CMP"
@@ -636,15 +672,15 @@ msgstr "Estratégia CMP atualizada com sucesso"
msgid "DCA strategy deleted successfully"
msgstr "Estratégia CMP apagada com sucesso"
#: apps/dca/views.py:163
#: apps/dca/views.py:161
msgid "Entry added successfully"
msgstr "Entrada adicionada com sucesso"
#: apps/dca/views.py:190
#: apps/dca/views.py:188
msgid "Entry updated successfully"
msgstr "Entrada atualizada com sucesso"
#: apps/dca/views.py:216
#: apps/dca/views.py:214
msgid "Entry deleted successfully"
msgstr "Entrada apagada com sucesso"
@@ -755,14 +791,14 @@ msgid "Operator"
msgstr "Operador"
#: apps/rules/forms.py:161 apps/rules/forms.py:174 apps/rules/models.py:25
#: apps/rules/models.py:240 apps/transactions/models.py:139
#: apps/transactions/models.py:293 apps/transactions/models.py:496
#: apps/rules/models.py:240 apps/transactions/models.py:183
#: apps/transactions/models.py:343 apps/transactions/models.py:546
msgid "Type"
msgstr "Tipo"
#: apps/rules/forms.py:162 apps/rules/forms.py:175 apps/rules/models.py:26
#: apps/rules/models.py:244 apps/transactions/filters.py:23
#: apps/transactions/models.py:141 templates/cotton/transaction/item.html:21
#: apps/transactions/models.py:185 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
@@ -772,40 +808,40 @@ msgstr "Pago"
#: apps/rules/forms.py:164 apps/rules/forms.py:177 apps/rules/models.py:28
#: apps/rules/models.py:252 apps/transactions/forms.py:66
#: apps/transactions/forms.py:322 apps/transactions/forms.py:492
#: apps/transactions/models.py:143 apps/transactions/models.py:311
#: apps/transactions/models.py:520
#: apps/transactions/models.py:187 apps/transactions/models.py:361
#: apps/transactions/models.py:570
msgid "Reference Date"
msgstr "Data de Referência"
#: apps/rules/forms.py:165 apps/rules/forms.py:178 apps/rules/models.py:29
#: apps/rules/models.py:256 apps/transactions/models.py:148
#: apps/transactions/models.py:501
#: apps/rules/models.py:256 apps/transactions/models.py:192
#: apps/transactions/models.py:551
msgid "Amount"
msgstr "Quantia"
#: apps/rules/forms.py:166 apps/rules/forms.py:179 apps/rules/models.py:11
#: apps/rules/models.py:30 apps/rules/models.py:260
#: apps/transactions/forms.py:325 apps/transactions/models.py:153
#: apps/transactions/models.py:295 apps/transactions/models.py:504
#: apps/transactions/forms.py:325 apps/transactions/models.py:197
#: apps/transactions/models.py:345 apps/transactions/models.py:554
msgid "Description"
msgstr "Descrição"
#: apps/rules/forms.py:169 apps/rules/forms.py:184 apps/rules/models.py:268
#: apps/transactions/models.py:192
#: apps/transactions/models.py:236
msgid "Internal Note"
msgstr "Nota Interna"
#: apps/rules/forms.py:170 apps/rules/forms.py:185 apps/rules/models.py:272
#: apps/transactions/models.py:194
#: apps/transactions/models.py:238
msgid "Internal ID"
msgstr "ID Interna"
#: apps/rules/forms.py:172 apps/rules/forms.py:181 apps/rules/models.py:34
#: apps/rules/models.py:276 apps/transactions/filters.py:81
#: apps/transactions/forms.py:55 apps/transactions/forms.py:486
#: apps/transactions/forms.py:731 apps/transactions/models.py:117
#: apps/transactions/models.py:170 apps/transactions/models.py:333
#: apps/transactions/models.py:515 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:731 apps/transactions/models.py:161
#: apps/transactions/models.py:214 apps/transactions/models.py:383
#: apps/transactions/models.py:565 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:107
msgid "Entities"
msgstr "Entidades"
@@ -990,14 +1026,6 @@ msgstr "Quantia máxima"
msgid "More"
msgstr "Mais"
#: apps/transactions/forms.py:266
msgid "From Account"
msgstr "Conta de origem"
#: apps/transactions/forms.py:271
msgid "To Account"
msgstr "Conta de destino"
#: apps/transactions/forms.py:278
msgid "From Amount"
msgstr "Quantia de origem"
@@ -1011,10 +1039,6 @@ msgstr "Quantia de destino"
msgid "Transfer"
msgstr "Transferir"
#: apps/transactions/forms.py:413
msgid "From and To accounts must be different."
msgstr "As contas De e Para devem ser diferentes."
#: apps/transactions/forms.py:610
msgid "Tag name"
msgstr "Nome da Tag"
@@ -1035,11 +1059,11 @@ msgstr "As categorias silenciadas não serão contabilizadas em seu total mensal
msgid "End date should be after the start date"
msgstr "Data final deve ser após data inicial"
#: apps/transactions/models.py:68
#: apps/transactions/models.py:112
msgid "Mute"
msgstr "Silenciada"
#: apps/transactions/models.py:73
#: apps/transactions/models.py:117
msgid ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
@@ -1047,25 +1071,25 @@ msgstr ""
"As categorias desativadas não poderão ser selecionadas ao criar novas "
"transações"
#: apps/transactions/models.py:78
#: apps/transactions/models.py:122
msgid "Transaction Category"
msgstr "Categoria da Transação"
#: apps/transactions/models.py:79
#: apps/transactions/models.py:123
msgid "Transaction Categories"
msgstr "Categorias da Trasanção"
#: apps/transactions/models.py:92
#: apps/transactions/models.py:136
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:97 apps/transactions/models.py:98
#: apps/transactions/models.py:141 apps/transactions/models.py:142
msgid "Transaction Tags"
msgstr "Tags da Transação"
#: apps/transactions/models.py:111
#: apps/transactions/models.py:155
msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
@@ -1073,11 +1097,11 @@ msgstr ""
"As entidades desativadas não poderão ser selecionadas ao criar novas "
"transações"
#: apps/transactions/models.py:116
#: apps/transactions/models.py:160
msgid "Entity"
msgstr "Entidade"
#: apps/transactions/models.py:126
#: apps/transactions/models.py:170
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1087,7 +1111,7 @@ msgstr "Entidade"
msgid "Income"
msgstr "Renda"
#: apps/transactions/models.py:127
#: apps/transactions/models.py:171
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1096,27 +1120,27 @@ msgstr "Renda"
msgid "Expense"
msgstr "Despesa"
#: apps/transactions/models.py:181 apps/transactions/models.py:340
#: apps/transactions/models.py:225 apps/transactions/models.py:390
msgid "Installment Plan"
msgstr "Parcelamento"
#: apps/transactions/models.py:190 apps/transactions/models.py:541
#: apps/transactions/models.py:234 apps/transactions/models.py:591
msgid "Recurring Transaction"
msgstr "Transação Recorrente"
#: apps/transactions/models.py:198
#: apps/transactions/models.py:242
msgid "Deleted"
msgstr "Apagado"
#: apps/transactions/models.py:203
#: apps/transactions/models.py:247
msgid "Deleted At"
msgstr "Apagado Em"
#: apps/transactions/models.py:211
#: apps/transactions/models.py:255
msgid "Transaction"
msgstr "Transação"
#: apps/transactions/models.py:212 templates/includes/navbar.html:54
#: apps/transactions/models.py:256 templates/includes/navbar.html:54
#: templates/includes/navbar.html:101
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -1124,95 +1148,107 @@ msgstr "Transação"
msgid "Transactions"
msgstr "Transações"
#: apps/transactions/models.py:282
#: apps/transactions/models.py:323 templates/tags/fragments/table.html:53
msgid "No tags"
msgstr "Nenhuma tag"
#: apps/transactions/models.py:324
msgid "No category"
msgstr "Sem categoria"
#: apps/transactions/models.py:326
msgid "No description"
msgstr "Sem descrição"
#: apps/transactions/models.py:332
msgid "Yearly"
msgstr "Anual"
#: apps/transactions/models.py:283 apps/users/models.py:26
#: apps/transactions/models.py:333 apps/users/models.py:26
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr "Mensal"
#: apps/transactions/models.py:284
#: apps/transactions/models.py:334
msgid "Weekly"
msgstr "Semanal"
#: apps/transactions/models.py:285
#: apps/transactions/models.py:335
msgid "Daily"
msgstr "Diária"
#: apps/transactions/models.py:298
#: apps/transactions/models.py:348
msgid "Number of Installments"
msgstr "Número de Parcelas"
#: apps/transactions/models.py:303
#: apps/transactions/models.py:353
msgid "Installment Start"
msgstr "Parcela inicial"
#: apps/transactions/models.py:304
#: apps/transactions/models.py:354
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:309 apps/transactions/models.py:524
#: apps/transactions/models.py:359 apps/transactions/models.py:574
msgid "Start Date"
msgstr "Data de Início"
#: apps/transactions/models.py:313 apps/transactions/models.py:525
#: apps/transactions/models.py:363 apps/transactions/models.py:575
msgid "End Date"
msgstr "Data Final"
#: apps/transactions/models.py:318
#: apps/transactions/models.py:368
msgid "Recurrence"
msgstr "Recorrência"
#: apps/transactions/models.py:321
#: apps/transactions/models.py:371
msgid "Installment Amount"
msgstr "Valor da Parcela"
#: apps/transactions/models.py:341 templates/includes/navbar.html:69
#: apps/transactions/models.py:391 templates/includes/navbar.html:69
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
msgstr "Parcelamentos"
#: apps/transactions/models.py:483
#: apps/transactions/models.py:533
msgid "day(s)"
msgstr "dia(s)"
#: apps/transactions/models.py:484
#: apps/transactions/models.py:534
msgid "week(s)"
msgstr "semana(s)"
#: apps/transactions/models.py:485
#: apps/transactions/models.py:535
msgid "month(s)"
msgstr "mês(es)"
#: apps/transactions/models.py:486
#: apps/transactions/models.py:536
msgid "year(s)"
msgstr "ano(s)"
#: apps/transactions/models.py:488
#: apps/transactions/models.py:538
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr "Pausado"
#: apps/transactions/models.py:527
#: apps/transactions/models.py:577
msgid "Recurrence Type"
msgstr "Tipo de recorrência"
#: apps/transactions/models.py:530
#: apps/transactions/models.py:580
msgid "Recurrence Interval"
msgstr "Intervalo de recorrência"
#: apps/transactions/models.py:534
#: apps/transactions/models.py:584
msgid "Last Generated Date"
msgstr "Última data gerada"
#: apps/transactions/models.py:537
#: apps/transactions/models.py:587
msgid "Last Generated Reference Date"
msgstr "Última data de referência gerada"
#: apps/transactions/models.py:542 templates/includes/navbar.html:71
#: apps/transactions/models.py:592 templates/includes/navbar.html:71
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -1228,35 +1264,35 @@ msgstr "%(value)s tem muitas casas decimais. O máximo é 30."
msgid "%(value)s is not a non-negative number"
msgstr "%(value)s não é um número positivo"
#: apps/transactions/views/actions.py:23
#: apps/transactions/views/actions.py:24
#, python-format
msgid "%(count)s transaction marked as paid"
msgid_plural "%(count)s transactions marked as paid"
msgstr[0] "%(count)s transação marcada como paga"
msgstr[1] "%(count)s transações marcadas como paga"
#: apps/transactions/views/actions.py:47
#: apps/transactions/views/actions.py:48
#, python-format
msgid "%(count)s transaction marked as not paid"
msgid_plural "%(count)s transactions marked as not paid"
msgstr[0] "%(count)s transação marcada como não paga"
msgstr[1] "%(count)s transações marcadas como não paga"
#: apps/transactions/views/actions.py:71
#: apps/transactions/views/actions.py:72
#, python-format
msgid "%(count)s transaction deleted successfully"
msgid_plural "%(count)s transactions deleted successfully"
msgstr[0] "%(count)s transação apagada com sucesso"
msgstr[1] "%(count)s transações apagadas com sucesso"
#: apps/transactions/views/actions.py:95
#: apps/transactions/views/actions.py:96
#, python-format
msgid "%(count)s transaction restored successfully"
msgid_plural "%(count)s transactions restored successfully"
msgstr[0] "%(count)s transação restaurada com sucesso"
msgstr[1] "%(count)s transações restauradas com sucesso"
#: apps/transactions/views/actions.py:130
#: apps/transactions/views/actions.py:131
#, python-format
msgid "%(count)s transaction duplicated successfully"
msgid_plural "%(count)s transactions duplicated successfully"
@@ -1517,7 +1553,7 @@ msgstr "Ações"
#: templates/account_groups/fragments/list.html:36
#: templates/accounts/fragments/list.html:41
#: templates/categories/fragments/table.html:29
#: templates/cotton/transaction/item.html:127
#: templates/cotton/transaction/item.html:130
#: templates/cotton/ui/transactions_action_bar.html:49
#: templates/currencies/fragments/list.html:37
#: templates/dca/fragments/strategy/details.html:67
@@ -1539,8 +1575,8 @@ msgstr "Editar"
#: templates/account_groups/fragments/list.html:43
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:161
#: templates/cotton/transaction/item.html:145
#: templates/cotton/transaction/item.html:164
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:86
#: templates/currencies/fragments/list.html:44
@@ -1565,8 +1601,8 @@ msgstr "Apagar"
#: templates/account_groups/fragments/list.html:47
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:146
#: templates/cotton/transaction/item.html:165
#: templates/cotton/transaction/item.html:149
#: templates/cotton/transaction/item.html:168
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:88
#: templates/currencies/fragments/list.html:48
@@ -1594,8 +1630,8 @@ msgstr "Tem certeza?"
#: templates/account_groups/fragments/list.html:48
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:147
#: templates/cotton/transaction/item.html:166
#: templates/cotton/transaction/item.html:150
#: templates/cotton/transaction/item.html:169
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/currencies/fragments/list.html:49
@@ -1616,8 +1652,8 @@ msgstr "Você não será capaz de reverter isso!"
#: templates/account_groups/fragments/list.html:49
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:148
#: templates/cotton/transaction/item.html:167
#: templates/cotton/transaction/item.html:151
#: templates/cotton/transaction/item.html:170
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:48
@@ -1668,7 +1704,7 @@ msgstr "Editar conta"
msgid "Is Asset"
msgstr "É ativo"
#: templates/accounts/fragments/list.html:70
#: templates/accounts/fragments/list.html:69
msgid "No accounts"
msgstr "Nenhuma conta"
@@ -1746,12 +1782,16 @@ msgstr "Buscar"
msgid "Select"
msgstr "Selecionar"
#: templates/cotton/transaction/item.html:134
#: templates/cotton/transaction/item.html:56
msgid "DCA"
msgstr "CMP"
#: templates/cotton/transaction/item.html:137
#: templates/cotton/ui/transactions_action_bar.html:78
msgid "Duplicate"
msgstr "Duplicar"
#: templates/cotton/transaction/item.html:155
#: templates/cotton/transaction/item.html:158
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
msgid "Restore"
msgstr "Restaurar"
@@ -2605,10 +2645,6 @@ msgstr "Adicionar tag"
msgid "Edit tag"
msgstr "Editar tag"
#: templates/tags/fragments/table.html:53
msgid "No tags"
msgstr "Nenhuma tag"
#: templates/transactions/fragments/add.html:5
#: templates/transactions/pages/add.html:5
msgid "New transaction"
@@ -2678,6 +2714,11 @@ msgstr "Visão Anual"
msgid "Year"
msgstr "Ano"
#, fuzzy
#~| msgid "Tags"
#~ msgid "No Tags"
#~ msgstr "Tags"
#, fuzzy
#~| msgid "Start Date"
#~ msgid "Search Date"

View File

@@ -44,13 +44,16 @@
{# Description#}
<div class="mb-2 mb-lg-1 text-white tw-text-base">
{% spaceless %}
<span>{{ transaction.description }}</span>
<span class="{% if transaction.description %}me-2{% endif %}">{{ transaction.description }}</span>
{% if transaction.installment_plan and transaction.installment_id %}
<span
class="badge text-bg-secondary ms-2">{{ transaction.installment_id }}/{{ transaction.installment_plan.installment_total_number }}</span>
class="badge text-bg-secondary">{{ transaction.installment_id }}/{{ transaction.installment_plan.installment_total_number }}</span>
{% endif %}
{% if transaction.recurring_transaction %}
<span class="text-primary tw-text-xs ms-2"><i class="fa-solid fa-arrows-rotate fa-fw"></i></span>
<span class="text-primary tw-text-xs"><i class="fa-solid fa-arrows-rotate fa-fw"></i></span>
{% endif %}
{% if transaction.dca_expense_entries.all or transaction.dca_income_entries.all %}
<span class="badge text-bg-secondary">{% trans 'DCA' %}</span>
{% endif %}
{% endspaceless %}
</div>

View File

@@ -3,71 +3,84 @@ import * as Popper from "@popperjs/core";
window.TomSelect = function createDynamicTomSelect(element) {
// Basic configuration
const config = {
plugins: {},
// Basic configuration
const config = {
plugins: {},
// Extract 'create' option from data attribute
create: element.dataset.create === 'true',
copyClassesToDropdown: true,
allowEmptyOption: element.dataset.allowEmptyOption === 'true',
render: {
no_results: function () {
return `<div class="no-results">${element.dataset.txtNoResults || 'No results...'}</div>`;
// Extract 'create' option from data attribute
create: element.dataset.create === 'true',
copyClassesToDropdown: true,
allowEmptyOption: element.dataset.allowEmptyOption === 'true',
render: {
no_results: function () {
return `<div class="no-results">${element.dataset.txtNoResults || 'No results...'}</div>`;
},
option_create: function (data, escape) {
return `<div class="create">${element.dataset.txtCreate || 'Add'} <strong>${escape(data.input)}</strong>&hellip;</div>`;
},
},
option_create: function(data, escape) {
return `<div class="create">${element.dataset.txtCreate || 'Add'} <strong>${escape(data.input)}</strong>&hellip;</div>`;
},
},
onInitialize: function () {
this.popper = Popper.createPopper(this.control, this.dropdown, {
placement: "bottom-start",
modifiers: [
{
name: "sameWidth",
enabled: true,
fn: ({state}) => {
state.styles.popper.width = `${state.rects.reference.width}px`;
onInitialize: function () {
this.popper = Popper.createPopper(this.control, this.dropdown, {
placement: "bottom-start",
modifiers: [
{
name: "sameWidth",
enabled: true,
fn: ({state}) => {
state.styles.popper.width = `${state.rects.reference.width}px`;
},
phase: "beforeWrite",
requires: ["computeStyles"],
},
phase: "beforeWrite",
requires: ["computeStyles"],
},
{
name: 'flip',
options: {
fallbackPlacements: ['top-start'],
{
name: 'flip',
options: {
fallbackPlacements: ['top-start'],
},
},
},
]
]
});
});
},
onDropdownOpen: function () {
this.popper.update();
}
};
},
onDropdownOpen: function () {
this.popper.update();
}
};
if (element.dataset.checkboxes === 'true') {
config.plugins.checkbox_options = {
if (element.dataset.checkboxes === 'true') {
config.plugins.checkbox_options = {
'checkedClassNames': ['ts-checked'],
'uncheckedClassNames': ['ts-unchecked'],
};
}
}
if (element.dataset.clearButton === 'true') {
config.plugins.clear_button = {
if (element.dataset.clearButton === 'true') {
config.plugins.clear_button = {
'title': element.dataset.txtClear || 'Clear',
};
}
}
if (element.dataset.removeButton === 'true') {
config.plugins.remove_button = {
if (element.dataset.removeButton === 'true') {
config.plugins.remove_button = {
'title': element.dataset.txtRemove || 'Remove',
};
}
}
// Create and return the TomSelect instance
return new TomSelect(element, config);
if (element.dataset.load) {
config.load = function (query, callback) {
let url = element.dataset.load + '?q=' + encodeURIComponent(query);
fetch(url)
.then(response => response.json())
.then(json => {
callback(json);
}).catch(() => {
callback();
});
};
}
// Create and return the TomSelect instance
return new TomSelect(element, config);
};