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.to_field_name = kwargs.pop("to_field_name", "pk")
self.create_field = kwargs.pop("create_field", None) 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()) 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) self.widget = TomSelect(clear_button=True, create=True)
super().__init__(queryset=self.queryset, *args, **kwargs)
self._created_instance = None
def to_python(self, value): def to_python(self, value):
if value in self.empty_values: if value in self.empty_values:
return None return None
@@ -53,14 +52,19 @@ class DynamicModelChoiceField(forms.ModelChoiceField):
else: else:
raise self.model.DoesNotExist raise self.model.DoesNotExist
except self.model.DoesNotExist: except self.model.DoesNotExist:
try: if self.create_field:
with transaction.atomic(): try:
instance, _ = self.model.objects.update_or_create( with transaction.atomic():
**{self.create_field: value} 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 else:
return instance
except Exception as e:
raise ValidationError( raise ValidationError(
self.error_messages["invalid_choice"], code="invalid_choice" self.error_messages["invalid_choice"], code="invalid_choice"
) )

View File

@@ -1,4 +1,5 @@
from django.forms import widgets, SelectMultiple from django.forms import widgets, SelectMultiple
from django.urls import reverse
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@@ -129,3 +130,28 @@ class TomSelect(widgets.Select):
class TomSelectMultiple(SelectMultiple, TomSelect): class TomSelectMultiple(SelectMultiple, TomSelect):
pass 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.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 import forms
from django.utils.translation import gettext_lazy as _ 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.crispy.submit import NoClassSubmit
from apps.common.widgets.datepicker import AirDatePickerInput from apps.common.widgets.datepicker import AirDatePickerInput
from apps.common.widgets.decimal import ArbitraryDecimalDisplayNumberInput from apps.common.widgets.decimal import ArbitraryDecimalDisplayNumberInput
from apps.common.widgets.tom_select import TomSelect from apps.common.widgets.tom_select import TomSelect
from apps.dca.models import DCAStrategy, DCAEntry 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): class DCAStrategyForm(forms.ModelForm):
@@ -53,6 +61,75 @@ class DCAStrategyForm(forms.ModelForm):
class DCAEntryForm(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: class Meta:
model = DCAEntry model = DCAEntry
fields = [ fields = [
@@ -60,13 +137,19 @@ class DCAEntryForm(forms.ModelForm):
"amount_paid", "amount_paid",
"amount_received", "amount_received",
"notes", "notes",
"expense_transaction",
"income_transaction",
] ]
widgets = { widgets = {
"notes": forms.Textarea(attrs={"rows": 3}), "notes": forms.Textarea(attrs={"rows": 3}),
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
strategy = kwargs.pop("strategy", None)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.strategy = strategy if strategy else self.instance.strategy
self.helper = FormHelper() self.helper = FormHelper()
self.helper.form_tag = False self.helper.form_tag = False
self.helper.layout = Layout( self.helper.layout = Layout(
@@ -75,18 +158,66 @@ class DCAEntryForm(forms.ModelForm):
Column("amount_paid", css_class="form-group col-md-6"), Column("amount_paid", css_class="form-group col-md-6"),
Column("amount_received", 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", "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: 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( self.helper.layout.append(
FormActions( FormActions(
NoClassSubmit( NoClassSubmit(
@@ -95,7 +226,6 @@ class DCAEntryForm(forms.ModelForm):
), ),
) )
else: else:
# self.fields["amount"].widget = ArbitraryDecimalDisplayNumberInput()
self.helper.layout.append( self.helper.layout.append(
FormActions( FormActions(
NoClassSubmit( NoClassSubmit(
@@ -107,3 +237,118 @@ class DCAEntryForm(forms.ModelForm):
self.fields["amount_paid"].widget = ArbitraryDecimalDisplayNumberInput() self.fields["amount_paid"].widget = ArbitraryDecimalDisplayNumberInput()
self.fields["amount_received"].widget = ArbitraryDecimalDisplayNumberInput() self.fields["amount_received"].widget = ArbitraryDecimalDisplayNumberInput()
self.fields["date"].widget = AirDatePickerInput(clear_button=False) 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): def strategy_entry_add(request, strategy_id):
strategy = get_object_or_404(DCAStrategy, id=strategy_id) strategy = get_object_or_404(DCAStrategy, id=strategy_id)
if request.method == "POST": if request.method == "POST":
form = DCAEntryForm(request.POST) form = DCAEntryForm(request.POST, strategy=strategy)
if form.is_valid(): if form.is_valid():
entry = form.save(commit=False) entry = form.save()
entry.strategy = strategy
entry.save()
messages.success(request, _("Entry added successfully")) messages.success(request, _("Entry added successfully"))
return HttpResponse( return HttpResponse(
@@ -169,7 +167,7 @@ def strategy_entry_add(request, strategy_id):
}, },
) )
else: else:
form = DCAEntryForm() form = DCAEntryForm(strategy=strategy)
return render( return render(
request, request,

View File

@@ -92,6 +92,8 @@ def transactions_list(request, month: int, year: int):
"account__currency", "account__currency",
"installment_plan", "installment_plan",
"entities", "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_created)
@receiver(transaction_updated) @receiver(transaction_updated)
def transaction_changed_receiver(sender: Transaction, signal, **kwargs): 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( check_for_transaction_rules.defer(
instance_id=sender.id, instance_id=sender.id,
signal=( signal=(

View File

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

View File

@@ -86,6 +86,16 @@ urlpatterns = [
views.transactions_bulk_edit, views.transactions_bulk_edit,
name="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( path(
"transaction/<int:transaction_id>/clone/", "transaction/<int:transaction_id>/clone/",
views.transaction_clone, views.transaction_clone,

View File

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

View File

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

View File

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

View File

@@ -44,13 +44,16 @@
{# Description#} {# Description#}
<div class="mb-2 mb-lg-1 text-white tw-text-base"> <div class="mb-2 mb-lg-1 text-white tw-text-base">
{% spaceless %} {% spaceless %}
<span>{{ transaction.description }}</span> <span class="{% if transaction.description %}me-2{% endif %}">{{ transaction.description }}</span>
{% if transaction.installment_plan and transaction.installment_id %} {% if transaction.installment_plan and transaction.installment_id %}
<span <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 %} {% endif %}
{% if transaction.recurring_transaction %} {% 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 %} {% endif %}
{% endspaceless %} {% endspaceless %}
</div> </div>

View File

@@ -3,71 +3,84 @@ import * as Popper from "@popperjs/core";
window.TomSelect = function createDynamicTomSelect(element) { window.TomSelect = function createDynamicTomSelect(element) {
// Basic configuration // Basic configuration
const config = { const config = {
plugins: {}, plugins: {},
// Extract 'create' option from data attribute // Extract 'create' option from data attribute
create: element.dataset.create === 'true', create: element.dataset.create === 'true',
copyClassesToDropdown: true, copyClassesToDropdown: true,
allowEmptyOption: element.dataset.allowEmptyOption === 'true', allowEmptyOption: element.dataset.allowEmptyOption === 'true',
render: { render: {
no_results: function () { no_results: function () {
return `<div class="no-results">${element.dataset.txtNoResults || 'No results...'}</div>`; 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 () { onInitialize: function () {
this.popper = Popper.createPopper(this.control, this.dropdown, { this.popper = Popper.createPopper(this.control, this.dropdown, {
placement: "bottom-start", placement: "bottom-start",
modifiers: [ modifiers: [
{ {
name: "sameWidth", name: "sameWidth",
enabled: true, enabled: true,
fn: ({state}) => { fn: ({state}) => {
state.styles.popper.width = `${state.rects.reference.width}px`; 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 () { onDropdownOpen: function () {
this.popper.update(); this.popper.update();
} }
}; };
if (element.dataset.checkboxes === 'true') { if (element.dataset.checkboxes === 'true') {
config.plugins.checkbox_options = { config.plugins.checkbox_options = {
'checkedClassNames': ['ts-checked'], 'checkedClassNames': ['ts-checked'],
'uncheckedClassNames': ['ts-unchecked'], 'uncheckedClassNames': ['ts-unchecked'],
}; };
} }
if (element.dataset.clearButton === 'true') { if (element.dataset.clearButton === 'true') {
config.plugins.clear_button = { config.plugins.clear_button = {
'title': element.dataset.txtClear || 'Clear', 'title': element.dataset.txtClear || 'Clear',
}; };
} }
if (element.dataset.removeButton === 'true') { if (element.dataset.removeButton === 'true') {
config.plugins.remove_button = { config.plugins.remove_button = {
'title': element.dataset.txtRemove || 'Remove', 'title': element.dataset.txtRemove || 'Remove',
}; };
} }
// Create and return the TomSelect instance if (element.dataset.load) {
return new TomSelect(element, config); 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);
}; };