mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-02-25 17:04:51 +01:00
Compare commits
26 Commits
0.16.2
...
feat/bette
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
64b32316ca | ||
|
|
efe020efb3 | ||
|
|
8c133f92ce | ||
|
|
f3c9d8faea | ||
|
|
8f5204a17b | ||
|
|
2235bdeabb | ||
|
|
d724300513 | ||
|
|
eacafa1def | ||
|
|
c738f5ee29 | ||
|
|
72904266bf | ||
|
|
670bee4325 | ||
|
|
3e2c1184ce | ||
|
|
731f351eef | ||
|
|
b7056e7aa1 | ||
|
|
accceed630 | ||
|
|
76346cb503 | ||
|
|
3df8952ea2 | ||
|
|
9bd067da96 | ||
|
|
1abe9e9f62 | ||
|
|
1a86b5dea4 | ||
|
|
8f2f5a16c2 | ||
|
|
4565dc770b | ||
|
|
23673def09 | ||
|
|
dd2b9ead7e | ||
|
|
2078e9f3e4 | ||
|
|
e6bab57ab4 |
@@ -3,6 +3,7 @@ from crispy_forms.bootstrap import FormActions
|
||||
from crispy_forms.helper import FormHelper
|
||||
from crispy_forms.layout import Layout, Field, Column, Row
|
||||
from django import forms
|
||||
from django.db.models import Q
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from apps.accounts.models import Account
|
||||
@@ -15,6 +16,7 @@ from apps.common.widgets.crispy.submit import NoClassSubmit
|
||||
from apps.common.widgets.tom_select import TomSelect
|
||||
from apps.transactions.models import TransactionCategory, TransactionTag
|
||||
from apps.common.widgets.decimal import ArbitraryDecimalDisplayNumberInput
|
||||
from apps.currencies.models import Currency
|
||||
|
||||
|
||||
class AccountGroupForm(forms.ModelForm):
|
||||
@@ -79,6 +81,18 @@ class AccountForm(forms.ModelForm):
|
||||
|
||||
self.fields["group"].queryset = AccountGroup.objects.all()
|
||||
|
||||
if self.instance.id:
|
||||
qs = Currency.objects.filter(
|
||||
Q(is_archived=False) | Q(accounts=self.instance.id)
|
||||
).distinct()
|
||||
self.fields["currency"].queryset = qs
|
||||
self.fields["exchange_currency"].queryset = qs
|
||||
|
||||
else:
|
||||
qs = Currency.objects.filter(Q(is_archived=False))
|
||||
self.fields["currency"].queryset = qs
|
||||
self.fields["exchange_currency"].queryset = qs
|
||||
|
||||
self.helper = FormHelper()
|
||||
self.helper.form_tag = False
|
||||
self.helper.form_method = "post"
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from copy import deepcopy
|
||||
|
||||
from rest_framework import viewsets
|
||||
|
||||
from apps.api.custom.pagination import CustomPageNumberPagination
|
||||
@@ -30,8 +32,9 @@ class TransactionViewSet(viewsets.ModelViewSet):
|
||||
transaction_created.send(sender=instance)
|
||||
|
||||
def perform_update(self, serializer):
|
||||
old_data = deepcopy(Transaction.objects.get(pk=serializer.data["pk"]))
|
||||
instance = serializer.save()
|
||||
transaction_updated.send(sender=instance)
|
||||
transaction_updated.send(sender=instance, old_data=old_data)
|
||||
|
||||
def partial_update(self, request, *args, **kwargs):
|
||||
kwargs["partial"] = True
|
||||
|
||||
@@ -9,5 +9,8 @@ def truncate_decimal(value, decimal_places):
|
||||
:param decimal_places: The number of decimal places to keep
|
||||
:return: Truncated Decimal value
|
||||
"""
|
||||
if isinstance(value, (int, float)):
|
||||
value = Decimal(str(value))
|
||||
|
||||
multiplier = Decimal(10**decimal_places)
|
||||
return (value * multiplier).to_integral_value(rounding=ROUND_DOWN) / multiplier
|
||||
|
||||
@@ -23,7 +23,7 @@ async def remove_old_jobs(context, timestamp):
|
||||
return await builtin_tasks.remove_old_jobs(
|
||||
context,
|
||||
max_hours=744,
|
||||
remove_error=True,
|
||||
remove_failed=True,
|
||||
remove_cancelled=True,
|
||||
remove_aborted=True,
|
||||
)
|
||||
|
||||
@@ -26,6 +26,7 @@ class CurrencyForm(forms.ModelForm):
|
||||
"suffix",
|
||||
"code",
|
||||
"exchange_currency",
|
||||
"is_archived",
|
||||
]
|
||||
widgets = {
|
||||
"exchange_currency": TomSelect(),
|
||||
@@ -40,6 +41,7 @@ class CurrencyForm(forms.ModelForm):
|
||||
self.helper.layout = Layout(
|
||||
"code",
|
||||
"name",
|
||||
Switch("is_archived"),
|
||||
"decimal_places",
|
||||
"prefix",
|
||||
"suffix",
|
||||
|
||||
18
app/apps/currencies/migrations/0022_currency_is_archived.py
Normal file
18
app/apps/currencies/migrations/0022_currency_is_archived.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-30 00:47
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('currencies', '0021_alter_exchangerateservice_service_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='currency',
|
||||
name='is_archived',
|
||||
field=models.BooleanField(default=False, verbose_name='Archived'),
|
||||
),
|
||||
]
|
||||
@@ -32,6 +32,11 @@ class Currency(models.Model):
|
||||
help_text=_("Default currency for exchange calculations"),
|
||||
)
|
||||
|
||||
is_archived = models.BooleanField(
|
||||
default=False,
|
||||
verbose_name=_("Archived"),
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
@@ -40,12 +40,6 @@ class CurrencyTests(TestCase):
|
||||
with self.assertRaises(ValidationError):
|
||||
currency.full_clean()
|
||||
|
||||
def test_currency_unique_code(self):
|
||||
"""Test that currency codes must be unique"""
|
||||
Currency.objects.create(code="USD", name="US Dollar", decimal_places=2)
|
||||
with self.assertRaises(IntegrityError):
|
||||
Currency.objects.create(code="USD", name="Another Dollar", decimal_places=2)
|
||||
|
||||
def test_currency_unique_name(self):
|
||||
"""Test that currency names must be unique"""
|
||||
Currency.objects.create(code="USD", name="US Dollar", decimal_places=2)
|
||||
|
||||
@@ -12,7 +12,10 @@ from apps.currencies.utils.convert import convert
|
||||
def get_categories_totals(
|
||||
transactions_queryset, ignore_empty=False, show_entities=False
|
||||
):
|
||||
# First get the category totals as before
|
||||
# Step 1: Aggregate transaction data by category and currency.
|
||||
# This query calculates the total current and projected income/expense for each
|
||||
# category by grouping transactions and summing up their amounts based on their
|
||||
# type (income/expense) and payment status (paid/unpaid).
|
||||
category_currency_metrics = (
|
||||
transactions_queryset.values(
|
||||
"category",
|
||||
@@ -76,7 +79,10 @@ def get_categories_totals(
|
||||
.order_by("category__name")
|
||||
)
|
||||
|
||||
# Get tag totals within each category with currency details
|
||||
# Step 2: Aggregate transaction data by tag, category, and currency.
|
||||
# This is similar to the category metrics but adds tags to the grouping,
|
||||
# allowing for a breakdown of totals by tag within each category. It also
|
||||
# handles untagged transactions, where the 'tags' field is None.
|
||||
tag_metrics = transactions_queryset.values(
|
||||
"category",
|
||||
"tags",
|
||||
@@ -131,10 +137,12 @@ def get_categories_totals(
|
||||
),
|
||||
)
|
||||
|
||||
# Process the results to structure by category
|
||||
# Step 3: Initialize the main dictionary to structure the final results.
|
||||
# The data will be organized hierarchically: category -> currency -> tags -> entities.
|
||||
result = {}
|
||||
|
||||
# Process category totals first
|
||||
# Step 4: Process the aggregated category metrics to build the initial result structure.
|
||||
# This loop iterates through each category's metrics and populates the `result` dict.
|
||||
for metric in category_currency_metrics:
|
||||
# Skip empty categories if ignore_empty is True
|
||||
if ignore_empty and all(
|
||||
@@ -185,7 +193,7 @@ def get_categories_totals(
|
||||
"total_final": total_final,
|
||||
}
|
||||
|
||||
# Add exchanged values if exchange_currency exists
|
||||
# Step 4a: Handle currency conversion for category totals if an exchange currency is defined.
|
||||
if metric["account__currency__exchange_currency"]:
|
||||
from_currency = Currency.objects.get(id=currency_id)
|
||||
exchange_currency = Currency.objects.get(
|
||||
@@ -224,7 +232,7 @@ def get_categories_totals(
|
||||
|
||||
result[category_id]["currencies"][currency_id] = currency_data
|
||||
|
||||
# Process tag totals and add them to the result, including untagged
|
||||
# Step 5: Process the aggregated tag metrics and integrate them into the result structure.
|
||||
for tag_metric in tag_metrics:
|
||||
category_id = tag_metric["category"]
|
||||
tag_id = tag_metric["tags"] # Will be None for untagged transactions
|
||||
@@ -281,7 +289,7 @@ def get_categories_totals(
|
||||
"total_final": tag_total_final,
|
||||
}
|
||||
|
||||
# Add exchange currency support for tags
|
||||
# Step 5a: Handle currency conversion for tag totals.
|
||||
if tag_metric["account__currency__exchange_currency"]:
|
||||
from_currency = Currency.objects.get(id=currency_id)
|
||||
exchange_currency = Currency.objects.get(
|
||||
@@ -322,6 +330,7 @@ def get_categories_totals(
|
||||
currency_id
|
||||
] = tag_currency_data
|
||||
|
||||
# Step 6: If requested, aggregate and process entity-level data.
|
||||
if show_entities:
|
||||
entity_metrics = transactions_queryset.values(
|
||||
"category",
|
||||
@@ -389,14 +398,15 @@ def get_categories_totals(
|
||||
tag_id = entity_metric["tags"]
|
||||
entity_id = entity_metric["entities"]
|
||||
|
||||
if not entity_id:
|
||||
continue
|
||||
|
||||
if category_id in result:
|
||||
tag_key = tag_id if tag_id is not None else "untagged"
|
||||
if tag_key in result[category_id]["tags"]:
|
||||
entity_key = entity_id
|
||||
entity_name = entity_metric["entities__name"]
|
||||
entity_key = entity_id if entity_id is not None else "no_entity"
|
||||
entity_name = (
|
||||
entity_metric["entities__name"]
|
||||
if entity_id is not None
|
||||
else None
|
||||
)
|
||||
|
||||
if "entities" not in result[category_id]["tags"][tag_key]:
|
||||
result[category_id]["tags"][tag_key]["entities"] = {}
|
||||
|
||||
@@ -102,4 +102,6 @@ def get_transactions(
|
||||
account__in=request.user.untracked_accounts.all()
|
||||
)
|
||||
|
||||
transactions = transactions.exclude(account__currency__is_archived=True)
|
||||
|
||||
return transactions
|
||||
|
||||
@@ -30,6 +30,7 @@ def calculate_historical_currency_net_worth(queryset):
|
||||
| Q(accounts__visibility="private", accounts__owner=None),
|
||||
accounts__is_archived=False,
|
||||
accounts__isnull=False,
|
||||
is_archived=False,
|
||||
)
|
||||
.values_list("name", flat=True)
|
||||
.distinct()
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
from crispy_bootstrap5.bootstrap5 import Switch, BS5Accordion
|
||||
from crispy_forms.bootstrap import FormActions, AccordionGroup
|
||||
from crispy_forms.helper import FormHelper
|
||||
from crispy_forms.layout import Layout, Field, Row, Column
|
||||
from crispy_forms.layout import Layout, Field, Row, Column, HTML
|
||||
from django import forms
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from apps.common.widgets.crispy.submit import NoClassSubmit
|
||||
from apps.common.widgets.tom_select import TomSelect
|
||||
from apps.common.widgets.crispy.submit import NoClassSubmit
|
||||
from apps.common.widgets.tom_select import TomSelect, TransactionSelect
|
||||
from apps.rules.models import TransactionRule, UpdateOrCreateTransactionRuleAction
|
||||
from apps.rules.models import TransactionRuleAction
|
||||
from apps.common.fields.forms.dynamic_select import DynamicModelChoiceField
|
||||
from apps.transactions.forms import BulkEditTransactionForm
|
||||
from apps.transactions.models import Transaction
|
||||
|
||||
|
||||
class TransactionRuleForm(forms.ModelForm):
|
||||
@@ -40,6 +44,8 @@ class TransactionRuleForm(forms.ModelForm):
|
||||
Column(Switch("on_create")),
|
||||
Column(Switch("on_delete")),
|
||||
),
|
||||
"order",
|
||||
Switch("sequenced"),
|
||||
"description",
|
||||
"trigger",
|
||||
)
|
||||
@@ -65,10 +71,11 @@ class TransactionRuleForm(forms.ModelForm):
|
||||
class TransactionRuleActionForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = TransactionRuleAction
|
||||
fields = ("value", "field")
|
||||
fields = ("value", "field", "order")
|
||||
labels = {
|
||||
"field": _("Set field"),
|
||||
"value": _("To"),
|
||||
"order": _("Order"),
|
||||
}
|
||||
widgets = {"field": TomSelect(clear_button=False)}
|
||||
|
||||
@@ -82,6 +89,7 @@ class TransactionRuleActionForm(forms.ModelForm):
|
||||
self.helper.form_method = "post"
|
||||
# TO-DO: Add helper with available commands
|
||||
self.helper.layout = Layout(
|
||||
"order",
|
||||
"field",
|
||||
"value",
|
||||
)
|
||||
@@ -147,9 +155,11 @@ class UpdateOrCreateTransactionRuleActionForm(forms.ModelForm):
|
||||
"search_category_operator": TomSelect(clear_button=False),
|
||||
"search_internal_note_operator": TomSelect(clear_button=False),
|
||||
"search_internal_id_operator": TomSelect(clear_button=False),
|
||||
"search_mute_operator": TomSelect(clear_button=False),
|
||||
}
|
||||
|
||||
labels = {
|
||||
"order": _("Order"),
|
||||
"search_account_operator": _("Operator"),
|
||||
"search_type_operator": _("Operator"),
|
||||
"search_is_paid_operator": _("Operator"),
|
||||
@@ -163,6 +173,7 @@ class UpdateOrCreateTransactionRuleActionForm(forms.ModelForm):
|
||||
"search_internal_id_operator": _("Operator"),
|
||||
"search_tags_operator": _("Operator"),
|
||||
"search_entities_operator": _("Operator"),
|
||||
"search_mute_operator": _("Operator"),
|
||||
"search_account": _("Account"),
|
||||
"search_type": _("Type"),
|
||||
"search_is_paid": _("Paid"),
|
||||
@@ -176,6 +187,7 @@ class UpdateOrCreateTransactionRuleActionForm(forms.ModelForm):
|
||||
"search_internal_id": _("Internal ID"),
|
||||
"search_tags": _("Tags"),
|
||||
"search_entities": _("Entities"),
|
||||
"search_mute": _("Mute"),
|
||||
"set_account": _("Account"),
|
||||
"set_type": _("Type"),
|
||||
"set_is_paid": _("Paid"),
|
||||
@@ -189,6 +201,7 @@ class UpdateOrCreateTransactionRuleActionForm(forms.ModelForm):
|
||||
"set_category": _("Category"),
|
||||
"set_internal_note": _("Internal Note"),
|
||||
"set_internal_id": _("Internal ID"),
|
||||
"set_mute": _("Mute"),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -200,6 +213,7 @@ class UpdateOrCreateTransactionRuleActionForm(forms.ModelForm):
|
||||
self.helper.form_method = "post"
|
||||
|
||||
self.helper.layout = Layout(
|
||||
"order",
|
||||
BS5Accordion(
|
||||
AccordionGroup(
|
||||
_("Search Criteria"),
|
||||
@@ -224,6 +238,16 @@ class UpdateOrCreateTransactionRuleActionForm(forms.ModelForm):
|
||||
css_class="form-group col-md-8",
|
||||
),
|
||||
),
|
||||
Row(
|
||||
Column(
|
||||
Field("search_mute_operator"),
|
||||
css_class="form-group col-md-4",
|
||||
),
|
||||
Column(
|
||||
Field("search_mute", rows=1),
|
||||
css_class="form-group col-md-8",
|
||||
),
|
||||
),
|
||||
Row(
|
||||
Column(
|
||||
Field("search_account_operator"),
|
||||
@@ -340,6 +364,7 @@ class UpdateOrCreateTransactionRuleActionForm(forms.ModelForm):
|
||||
_("Set Values"),
|
||||
Field("set_type", rows=1),
|
||||
Field("set_is_paid", rows=1),
|
||||
Field("set_mute", rows=1),
|
||||
Field("set_account", rows=1),
|
||||
Field("set_entities", rows=1),
|
||||
Field("set_date", rows=1),
|
||||
@@ -381,3 +406,112 @@ class UpdateOrCreateTransactionRuleActionForm(forms.ModelForm):
|
||||
if commit:
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
|
||||
class DryRunCreatedTransacion(forms.Form):
|
||||
transaction = DynamicModelChoiceField(
|
||||
model=Transaction,
|
||||
to_field_name="id",
|
||||
label=_("Transaction"),
|
||||
required=True,
|
||||
queryset=Transaction.objects.none(),
|
||||
widget=TransactionSelect(clear_button=False, income=True, expense=True),
|
||||
help_text=_("Type to search for a transaction"),
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.helper = FormHelper()
|
||||
self.helper.form_tag = False
|
||||
self.helper.layout = Layout(
|
||||
"transaction",
|
||||
FormActions(
|
||||
NoClassSubmit(
|
||||
"submit", _("Test"), css_class="btn btn-outline-primary w-100"
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
if self.data.get("transaction"):
|
||||
try:
|
||||
transaction = Transaction.objects.get(id=self.data.get("transaction"))
|
||||
except Transaction.DoesNotExist:
|
||||
transaction = None
|
||||
|
||||
if transaction:
|
||||
self.fields["transaction"].queryset = Transaction.objects.filter(
|
||||
id=transaction.id
|
||||
)
|
||||
|
||||
|
||||
class DryRunDeletedTransacion(forms.Form):
|
||||
transaction = DynamicModelChoiceField(
|
||||
model=Transaction,
|
||||
to_field_name="id",
|
||||
label=_("Transaction"),
|
||||
required=True,
|
||||
queryset=Transaction.objects.none(),
|
||||
widget=TransactionSelect(clear_button=False, income=True, expense=True),
|
||||
help_text=_("Type to search for a transaction"),
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.helper = FormHelper()
|
||||
self.helper.form_tag = False
|
||||
self.helper.layout = Layout(
|
||||
"transaction",
|
||||
FormActions(
|
||||
NoClassSubmit(
|
||||
"submit", _("Test"), css_class="btn btn-outline-primary w-100"
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
if self.data.get("transaction"):
|
||||
try:
|
||||
transaction = Transaction.objects.get(id=self.data.get("transaction"))
|
||||
except Transaction.DoesNotExist:
|
||||
transaction = None
|
||||
|
||||
if transaction:
|
||||
self.fields["transaction"].queryset = Transaction.objects.filter(
|
||||
id=transaction.id
|
||||
)
|
||||
|
||||
|
||||
class DryRunUpdatedTransactionForm(BulkEditTransactionForm):
|
||||
transaction = DynamicModelChoiceField(
|
||||
model=Transaction,
|
||||
to_field_name="id",
|
||||
label=_("Transaction"),
|
||||
required=True,
|
||||
queryset=Transaction.objects.none(),
|
||||
widget=TransactionSelect(clear_button=False, income=True, expense=True),
|
||||
help_text=_("Type to search for a transaction"),
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.helper.layout.insert(0, "transaction")
|
||||
self.helper.layout.insert(1, HTML("<hr/>"))
|
||||
|
||||
# Change submit button
|
||||
self.helper.layout[-1] = FormActions(
|
||||
NoClassSubmit(
|
||||
"submit", _("Test"), css_class="btn btn-outline-primary w-100"
|
||||
)
|
||||
)
|
||||
|
||||
if self.data.get("transaction"):
|
||||
try:
|
||||
transaction = Transaction.objects.get(id=self.data.get("transaction"))
|
||||
except Transaction.DoesNotExist:
|
||||
transaction = None
|
||||
|
||||
if transaction:
|
||||
self.fields["transaction"].queryset = Transaction.objects.filter(
|
||||
id=transaction.id
|
||||
)
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
# Generated by Django 5.2 on 2025-08-30 18:48
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("rules", "0014_alter_transactionrule_owner_and_more"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name="transactionruleaction",
|
||||
options={
|
||||
"ordering": ["order"],
|
||||
"verbose_name": "Edit transaction action",
|
||||
"verbose_name_plural": "Edit transaction actions",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name="updateorcreatetransactionruleaction",
|
||||
options={
|
||||
"ordering": ["order"],
|
||||
"verbose_name": "Update or create transaction action",
|
||||
"verbose_name_plural": "Update or create transaction actions",
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="transactionruleaction",
|
||||
name="order",
|
||||
field=models.PositiveIntegerField(default=0, verbose_name="Order"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="updateorcreatetransactionruleaction",
|
||||
name="order",
|
||||
field=models.PositiveIntegerField(default=0, verbose_name="Order"),
|
||||
),
|
||||
]
|
||||
18
app/apps/rules/migrations/0016_transactionrule_sequenced.py
Normal file
18
app/apps/rules/migrations/0016_transactionrule_sequenced.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-31 18:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rules', '0015_alter_transactionruleaction_options_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='transactionrule',
|
||||
name='sequenced',
|
||||
field=models.BooleanField(default=False, verbose_name='Sequenced'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,33 @@
|
||||
# Generated by Django 5.2.5 on 2025-08-31 19:09
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rules', '0016_transactionrule_sequenced'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='updateorcreatetransactionruleaction',
|
||||
name='search_mute',
|
||||
field=models.TextField(blank=True, verbose_name='Search Mute'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='updateorcreatetransactionruleaction',
|
||||
name='search_mute_operator',
|
||||
field=models.CharField(choices=[('exact', 'is exactly'), ('contains', 'contains'), ('startswith', 'starts with'), ('endswith', 'ends with'), ('eq', 'equals'), ('gt', 'greater than'), ('lt', 'less than'), ('gte', 'greater than or equal'), ('lte', 'less than or equal')], default='exact', max_length=10, verbose_name='Mute Operator'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='updateorcreatetransactionruleaction',
|
||||
name='set_mute',
|
||||
field=models.TextField(blank=True, verbose_name='Mute'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='transactionruleaction',
|
||||
name='field',
|
||||
field=models.CharField(choices=[('account', 'Account'), ('type', 'Type'), ('is_paid', 'Paid'), ('date', 'Date'), ('reference_date', 'Reference Date'), ('mute', 'Mute'), ('amount', 'Amount'), ('description', 'Description'), ('notes', 'Notes'), ('category', 'Category'), ('tags', 'Tags'), ('entities', 'Entities'), ('internal_nome', 'Internal Note'), ('internal_id', 'Internal ID')], max_length=50, verbose_name='Field'),
|
||||
),
|
||||
]
|
||||
18
app/apps/rules/migrations/0018_transactionrule_order.py
Normal file
18
app/apps/rules/migrations/0018_transactionrule_order.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.5 on 2025-09-02 14:52
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rules', '0017_updateorcreatetransactionruleaction_search_mute_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='transactionrule',
|
||||
name='order',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='Order'),
|
||||
),
|
||||
]
|
||||
@@ -13,6 +13,11 @@ class TransactionRule(SharedObject):
|
||||
name = models.CharField(max_length=100, verbose_name=_("Name"))
|
||||
description = models.TextField(blank=True, null=True, verbose_name=_("Description"))
|
||||
trigger = models.TextField(verbose_name=_("Trigger"))
|
||||
sequenced = models.BooleanField(
|
||||
verbose_name=_("Sequenced"),
|
||||
default=False,
|
||||
)
|
||||
order = models.PositiveIntegerField(default=0, verbose_name=_("Order"))
|
||||
|
||||
objects = SharedObjectManager()
|
||||
all_objects = models.Manager() # Unfiltered manager
|
||||
@@ -32,12 +37,15 @@ class TransactionRuleAction(models.Model):
|
||||
is_paid = "is_paid", _("Paid")
|
||||
date = "date", _("Date")
|
||||
reference_date = "reference_date", _("Reference Date")
|
||||
mute = "mute", _("Mute")
|
||||
amount = "amount", _("Amount")
|
||||
description = "description", _("Description")
|
||||
notes = "notes", _("Notes")
|
||||
category = "category", _("Category")
|
||||
tags = "tags", _("Tags")
|
||||
entities = "entities", _("Entities")
|
||||
internal_note = "internal_nome", _("Internal Note")
|
||||
internal_id = "internal_id", _("Internal ID")
|
||||
|
||||
rule = models.ForeignKey(
|
||||
TransactionRule,
|
||||
@@ -51,6 +59,7 @@ class TransactionRuleAction(models.Model):
|
||||
verbose_name=_("Field"),
|
||||
)
|
||||
value = models.TextField(verbose_name=_("Value"))
|
||||
order = models.PositiveIntegerField(default=0, verbose_name=_("Order"))
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.rule} - {self.field} - {self.value}"
|
||||
@@ -59,6 +68,11 @@ class TransactionRuleAction(models.Model):
|
||||
verbose_name = _("Edit transaction action")
|
||||
verbose_name_plural = _("Edit transaction actions")
|
||||
unique_together = (("rule", "field"),)
|
||||
ordering = ["order"]
|
||||
|
||||
@property
|
||||
def action_type(self):
|
||||
return "edit_transaction"
|
||||
|
||||
|
||||
class UpdateOrCreateTransactionRuleAction(models.Model):
|
||||
@@ -237,6 +251,17 @@ class UpdateOrCreateTransactionRuleAction(models.Model):
|
||||
verbose_name="Internal ID Operator",
|
||||
)
|
||||
|
||||
search_mute = models.TextField(
|
||||
verbose_name="Search Mute",
|
||||
blank=True,
|
||||
)
|
||||
search_mute_operator = models.CharField(
|
||||
max_length=10,
|
||||
choices=SearchOperator.choices,
|
||||
default=SearchOperator.EXACT,
|
||||
verbose_name="Mute Operator",
|
||||
)
|
||||
|
||||
# Set fields
|
||||
set_account = models.TextField(
|
||||
verbose_name=_("Account"),
|
||||
@@ -290,10 +315,21 @@ class UpdateOrCreateTransactionRuleAction(models.Model):
|
||||
verbose_name=_("Tags"),
|
||||
blank=True,
|
||||
)
|
||||
set_mute = models.TextField(
|
||||
verbose_name=_("Mute"),
|
||||
blank=True,
|
||||
)
|
||||
|
||||
order = models.PositiveIntegerField(default=0, verbose_name=_("Order"))
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Update or create transaction action")
|
||||
verbose_name_plural = _("Update or create transaction actions")
|
||||
ordering = ["order"]
|
||||
|
||||
@property
|
||||
def action_type(self):
|
||||
return "update_or_create_transaction"
|
||||
|
||||
def __str__(self):
|
||||
return f"Update or create transaction action for {self.rule}"
|
||||
@@ -325,6 +361,10 @@ class UpdateOrCreateTransactionRuleAction(models.Model):
|
||||
value = simple.eval(self.search_is_paid)
|
||||
search_query &= add_to_query("is_paid", value, self.search_is_paid_operator)
|
||||
|
||||
if self.search_mute:
|
||||
value = simple.eval(self.search_mute)
|
||||
search_query &= add_to_query("mute", value, self.search_mute_operator)
|
||||
|
||||
if self.search_date:
|
||||
value = simple.eval(self.search_date)
|
||||
search_query &= add_to_query("date", value, self.search_date_operator)
|
||||
|
||||
@@ -9,40 +9,17 @@ from apps.transactions.models import (
|
||||
)
|
||||
from apps.rules.tasks import check_for_transaction_rules
|
||||
from apps.common.middleware.thread_local import get_current_user
|
||||
from apps.rules.utils.transactions import serialize_transaction
|
||||
|
||||
|
||||
@receiver(transaction_created)
|
||||
@receiver(transaction_updated)
|
||||
@receiver(transaction_deleted)
|
||||
def transaction_changed_receiver(sender: Transaction, signal, **kwargs):
|
||||
old_data = kwargs.get("old_data")
|
||||
if signal is transaction_deleted:
|
||||
# Serialize transaction data for processing
|
||||
transaction_data = {
|
||||
"id": sender.id,
|
||||
"account": (sender.account.id, sender.account.name),
|
||||
"account_group": (
|
||||
sender.account.group.id if sender.account.group else None,
|
||||
sender.account.group.name if sender.account.group else None,
|
||||
),
|
||||
"type": str(sender.type),
|
||||
"is_paid": sender.is_paid,
|
||||
"is_asset": sender.account.is_asset,
|
||||
"is_archived": sender.account.is_archived,
|
||||
"category": (
|
||||
sender.category.id if sender.category else None,
|
||||
sender.category.name if sender.category else None,
|
||||
),
|
||||
"date": sender.date.isoformat(),
|
||||
"reference_date": sender.reference_date.isoformat(),
|
||||
"amount": str(sender.amount),
|
||||
"description": sender.description,
|
||||
"notes": sender.notes,
|
||||
"tags": list(sender.tags.values_list("id", "name")),
|
||||
"entities": list(sender.entities.values_list("id", "name")),
|
||||
"deleted": True,
|
||||
"internal_note": sender.internal_note,
|
||||
"internal_id": sender.internal_id,
|
||||
}
|
||||
transaction_data = serialize_transaction(sender, deleted=True)
|
||||
|
||||
check_for_transaction_rules.defer(
|
||||
transaction_data=transaction_data,
|
||||
@@ -59,6 +36,9 @@ def transaction_changed_receiver(sender: Transaction, signal, **kwargs):
|
||||
dca_entry.amount_received = sender.amount
|
||||
dca_entry.save()
|
||||
|
||||
if signal is transaction_updated and old_data:
|
||||
old_data = serialize_transaction(old_data, deleted=False)
|
||||
|
||||
check_for_transaction_rules.defer(
|
||||
instance_id=sender.id,
|
||||
user_id=get_current_user().id,
|
||||
@@ -67,4 +47,5 @@ def transaction_changed_receiver(sender: Transaction, signal, **kwargs):
|
||||
if signal is transaction_created
|
||||
else "transaction_updated"
|
||||
),
|
||||
old_data=old_data,
|
||||
)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -42,6 +42,21 @@ urlpatterns = [
|
||||
views.transaction_rule_take_ownership,
|
||||
name="transaction_rule_take_ownership",
|
||||
),
|
||||
path(
|
||||
"rules/transaction/<int:pk>/dry-run/created/",
|
||||
views.dry_run_rule_created,
|
||||
name="transaction_rule_dry_run_created",
|
||||
),
|
||||
path(
|
||||
"rules/transaction/<int:pk>/dry-run/deleted/",
|
||||
views.dry_run_rule_deleted,
|
||||
name="transaction_rule_dry_run_deleted",
|
||||
),
|
||||
path(
|
||||
"rules/transaction/<int:pk>/dry-run/updated/",
|
||||
views.dry_run_rule_updated,
|
||||
name="transaction_rule_dry_run_updated",
|
||||
),
|
||||
path(
|
||||
"rules/transaction/<int:pk>/share/",
|
||||
views.transaction_rule_share,
|
||||
|
||||
0
app/apps/rules/utils/__init__.py
Normal file
0
app/apps/rules/utils/__init__.py
Normal file
93
app/apps/rules/utils/transactions.py
Normal file
93
app/apps/rules/utils/transactions.py
Normal file
@@ -0,0 +1,93 @@
|
||||
import logging
|
||||
from decimal import Decimal
|
||||
|
||||
from django.db.models import Sum, Value, DecimalField, Case, When, F
|
||||
from django.db.models.functions import Coalesce
|
||||
|
||||
from apps.transactions.models import (
|
||||
Transaction,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TransactionsGetter:
|
||||
def __init__(self, **filters):
|
||||
self.__queryset = Transaction.objects.filter(**filters)
|
||||
|
||||
def exclude(self, **exclude_filters):
|
||||
self.__queryset = self.__queryset.exclude(**exclude_filters)
|
||||
|
||||
return self
|
||||
|
||||
@property
|
||||
def sum(self):
|
||||
return self.__queryset.aggregate(
|
||||
total=Coalesce(
|
||||
Sum("amount"), Value(Decimal("0")), output_field=DecimalField()
|
||||
)
|
||||
)["total"]
|
||||
|
||||
@property
|
||||
def balance(self):
|
||||
return abs(
|
||||
self.__queryset.aggregate(
|
||||
balance=Coalesce(
|
||||
Sum(
|
||||
Case(
|
||||
When(type=Transaction.Type.EXPENSE, then=-F("amount")),
|
||||
default=F("amount"),
|
||||
output_field=DecimalField(),
|
||||
)
|
||||
),
|
||||
Value(Decimal("0")),
|
||||
output_field=DecimalField(),
|
||||
)
|
||||
)["balance"]
|
||||
)
|
||||
|
||||
@property
|
||||
def raw_balance(self):
|
||||
return self.__queryset.aggregate(
|
||||
balance=Coalesce(
|
||||
Sum(
|
||||
Case(
|
||||
When(type=Transaction.Type.EXPENSE, then=-F("amount")),
|
||||
default=F("amount"),
|
||||
output_field=DecimalField(),
|
||||
)
|
||||
),
|
||||
Value(Decimal("0")),
|
||||
output_field=DecimalField(),
|
||||
)
|
||||
)["balance"]
|
||||
|
||||
|
||||
def serialize_transaction(sender: Transaction, deleted: bool):
|
||||
return {
|
||||
"id": sender.id,
|
||||
"account": (sender.account.id, sender.account.name),
|
||||
"account_group": (
|
||||
sender.account.group.id if sender.account.group else None,
|
||||
sender.account.group.name if sender.account.group else None,
|
||||
),
|
||||
"type": str(sender.type),
|
||||
"is_paid": sender.is_paid,
|
||||
"is_asset": sender.account.is_asset,
|
||||
"is_archived": sender.account.is_archived,
|
||||
"category": (
|
||||
sender.category.id if sender.category else None,
|
||||
sender.category.name if sender.category else None,
|
||||
),
|
||||
"date": sender.date.isoformat(),
|
||||
"reference_date": sender.reference_date.isoformat(),
|
||||
"amount": str(sender.amount),
|
||||
"description": sender.description,
|
||||
"notes": sender.notes,
|
||||
"tags": list(sender.tags.values_list("id", "name")),
|
||||
"entities": list(sender.entities.values_list("id", "name")),
|
||||
"deleted": deleted,
|
||||
"internal_note": sender.internal_note,
|
||||
"internal_id": sender.internal_id,
|
||||
"mute": sender.mute,
|
||||
}
|
||||
@@ -1,5 +1,10 @@
|
||||
from itertools import chain
|
||||
|
||||
from copy import deepcopy
|
||||
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.db import transaction
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
@@ -10,6 +15,9 @@ from apps.rules.forms import (
|
||||
TransactionRuleForm,
|
||||
TransactionRuleActionForm,
|
||||
UpdateOrCreateTransactionRuleActionForm,
|
||||
DryRunCreatedTransacion,
|
||||
DryRunDeletedTransacion,
|
||||
DryRunUpdatedTransactionForm,
|
||||
)
|
||||
from apps.rules.models import (
|
||||
TransactionRule,
|
||||
@@ -19,6 +27,11 @@ from apps.rules.models import (
|
||||
from apps.common.models import SharedObject
|
||||
from apps.common.forms import SharedObjectForm
|
||||
from apps.common.decorators.demo import disabled_on_demo
|
||||
from apps.rules.tasks import check_for_transaction_rules
|
||||
from apps.common.middleware.thread_local import get_current_user
|
||||
from apps.rules.signals import transaction_created, transaction_updated
|
||||
from apps.rules.utils.transactions import serialize_transaction
|
||||
from apps.transactions.models import Transaction
|
||||
|
||||
|
||||
@login_required
|
||||
@@ -36,7 +49,7 @@ def rules_index(request):
|
||||
@disabled_on_demo
|
||||
@require_http_methods(["GET"])
|
||||
def rules_list(request):
|
||||
transaction_rules = TransactionRule.objects.all().order_by("id")
|
||||
transaction_rules = TransactionRule.objects.all().order_by("order", "id")
|
||||
return render(
|
||||
request,
|
||||
"rules/fragments/list.html",
|
||||
@@ -140,10 +153,20 @@ def transaction_rule_edit(request, transaction_rule_id):
|
||||
def transaction_rule_view(request, transaction_rule_id):
|
||||
transaction_rule = get_object_or_404(TransactionRule, id=transaction_rule_id)
|
||||
|
||||
edit_actions = transaction_rule.transaction_actions.all()
|
||||
update_or_create_actions = (
|
||||
transaction_rule.update_or_create_transaction_actions.all()
|
||||
)
|
||||
|
||||
all_actions = sorted(
|
||||
chain(edit_actions, update_or_create_actions),
|
||||
key=lambda a: a.order,
|
||||
)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"rules/fragments/transaction_rule/view.html",
|
||||
{"transaction_rule": transaction_rule},
|
||||
{"transaction_rule": transaction_rule, "all_actions": all_actions},
|
||||
)
|
||||
|
||||
|
||||
@@ -406,3 +429,156 @@ def update_or_create_transaction_rule_action_delete(request, pk):
|
||||
"HX-Trigger": "updated, hide_offcanvas",
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@disabled_on_demo
|
||||
@require_http_methods(["GET", "POST"])
|
||||
def dry_run_rule_created(request, pk):
|
||||
rule = get_object_or_404(TransactionRule, id=pk)
|
||||
logs = None
|
||||
results = None
|
||||
|
||||
if request.method == "POST":
|
||||
form = DryRunCreatedTransacion(request.POST)
|
||||
if form.is_valid():
|
||||
try:
|
||||
with transaction.atomic():
|
||||
logs, results = check_for_transaction_rules(
|
||||
instance_id=form.cleaned_data["transaction"].id,
|
||||
signal="transaction_created",
|
||||
dry_run=True,
|
||||
rule_id=rule.id,
|
||||
user_id=get_current_user().id,
|
||||
)
|
||||
logs = "\n".join(logs)
|
||||
|
||||
response = render(
|
||||
request,
|
||||
"rules/fragments/transaction_rule/dry_run/created.html",
|
||||
{"form": form, "rule": rule, "logs": logs, "results": results},
|
||||
)
|
||||
|
||||
raise Exception("ROLLBACK")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return response
|
||||
|
||||
else:
|
||||
form = DryRunCreatedTransacion()
|
||||
|
||||
return render(
|
||||
request,
|
||||
"rules/fragments/transaction_rule/dry_run/created.html",
|
||||
{"form": form, "rule": rule, "logs": logs, "results": results},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@disabled_on_demo
|
||||
@require_http_methods(["GET", "POST"])
|
||||
def dry_run_rule_deleted(request, pk):
|
||||
rule = get_object_or_404(TransactionRule, id=pk)
|
||||
logs = None
|
||||
results = None
|
||||
|
||||
if request.method == "POST":
|
||||
form = DryRunDeletedTransacion(request.POST)
|
||||
if form.is_valid():
|
||||
try:
|
||||
with transaction.atomic():
|
||||
logs, results = check_for_transaction_rules(
|
||||
instance_id=form.cleaned_data["transaction"].id,
|
||||
signal="transaction_deleted",
|
||||
dry_run=True,
|
||||
rule_id=rule.id,
|
||||
user_id=get_current_user().id,
|
||||
)
|
||||
logs = "\n".join(logs)
|
||||
|
||||
response = render(
|
||||
request,
|
||||
"rules/fragments/transaction_rule/dry_run/created.html",
|
||||
{"form": form, "rule": rule, "logs": logs, "results": results},
|
||||
)
|
||||
|
||||
raise Exception("ROLLBACK")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return response
|
||||
|
||||
else:
|
||||
form = DryRunDeletedTransacion()
|
||||
|
||||
return render(
|
||||
request,
|
||||
"rules/fragments/transaction_rule/dry_run/deleted.html",
|
||||
{"form": form, "rule": rule, "logs": logs, "results": results},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@disabled_on_demo
|
||||
@require_http_methods(["GET", "POST"])
|
||||
def dry_run_rule_updated(request, pk):
|
||||
rule = get_object_or_404(TransactionRule, id=pk)
|
||||
logs = None
|
||||
results = None
|
||||
|
||||
if request.method == "POST":
|
||||
form = DryRunUpdatedTransactionForm(request.POST)
|
||||
if form.is_valid():
|
||||
base_transaction = Transaction.objects.get(
|
||||
id=request.POST.get("transaction")
|
||||
)
|
||||
old_data = deepcopy(base_transaction)
|
||||
try:
|
||||
with transaction.atomic():
|
||||
for field_name, value in form.cleaned_data.items():
|
||||
if value or isinstance(
|
||||
value, bool
|
||||
): # Only update fields that have been filled in the form
|
||||
if field_name == "tags":
|
||||
base_transaction.tags.set(value)
|
||||
elif field_name == "entities":
|
||||
base_transaction.entities.set(value)
|
||||
else:
|
||||
setattr(base_transaction, field_name, value)
|
||||
|
||||
base_transaction.save()
|
||||
|
||||
logs, results = check_for_transaction_rules(
|
||||
instance_id=base_transaction.id,
|
||||
signal="transaction_updated",
|
||||
dry_run=True,
|
||||
rule_id=rule.id,
|
||||
user_id=get_current_user().id,
|
||||
old_data=old_data,
|
||||
)
|
||||
logs = "\n".join(logs) if logs else ""
|
||||
|
||||
response = render(
|
||||
request,
|
||||
"rules/fragments/transaction_rule/dry_run/created.html",
|
||||
{"form": form, "rule": rule, "logs": logs, "results": results},
|
||||
)
|
||||
|
||||
# This will rollback the transaction
|
||||
raise Exception("ROLLBACK")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return response
|
||||
else:
|
||||
form = DryRunUpdatedTransactionForm(initial={"is_paid": None, "type": None})
|
||||
|
||||
return render(
|
||||
request,
|
||||
"rules/fragments/transaction_rule/dry_run/updated.html",
|
||||
{"form": form, "rule": rule, "logs": logs, "results": results},
|
||||
)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from copy import deepcopy
|
||||
|
||||
from crispy_bootstrap5.bootstrap5 import Switch, BS5Accordion
|
||||
from crispy_forms.bootstrap import FormActions, AccordionGroup, AppendedText
|
||||
from crispy_forms.helper import FormHelper
|
||||
@@ -239,11 +241,16 @@ class TransactionForm(forms.ModelForm):
|
||||
def save(self, **kwargs):
|
||||
is_new = not self.instance.id
|
||||
|
||||
if not is_new:
|
||||
old_data = deepcopy(Transaction.objects.get(pk=self.instance.id))
|
||||
else:
|
||||
old_data = None
|
||||
|
||||
instance = super().save(**kwargs)
|
||||
if is_new:
|
||||
transaction_created.send(sender=instance)
|
||||
else:
|
||||
transaction_updated.send(sender=instance)
|
||||
transaction_updated.send(sender=instance, old_data=old_data)
|
||||
|
||||
return instance
|
||||
|
||||
@@ -347,11 +354,6 @@ class QuickTransactionForm(forms.ModelForm):
|
||||
Column("entities", css_class="form-group col-md-6 mb-0"),
|
||||
css_class="form-row",
|
||||
),
|
||||
Row(
|
||||
Column(Field("date"), css_class="form-group col-md-6 mb-0"),
|
||||
Column(Field("reference_date"), css_class="form-group col-md-6 mb-0"),
|
||||
css_class="form-row",
|
||||
),
|
||||
"description",
|
||||
Field("amount", inputmode="decimal"),
|
||||
Row(
|
||||
@@ -387,35 +389,115 @@ class QuickTransactionForm(forms.ModelForm):
|
||||
)
|
||||
|
||||
|
||||
class BulkEditTransactionForm(TransactionForm):
|
||||
is_paid = forms.NullBooleanField(required=False)
|
||||
class BulkEditTransactionForm(forms.Form):
|
||||
type = forms.ChoiceField(
|
||||
choices=(Transaction.Type.choices),
|
||||
required=False,
|
||||
label=_("Type"),
|
||||
)
|
||||
is_paid = forms.NullBooleanField(
|
||||
required=False,
|
||||
label=_("Paid"),
|
||||
)
|
||||
account = DynamicModelChoiceField(
|
||||
model=Account,
|
||||
required=False,
|
||||
label=_("Account"),
|
||||
queryset=Account.objects.filter(is_archived=False),
|
||||
widget=TomSelect(clear_button=False, group_by="group"),
|
||||
)
|
||||
date = forms.DateField(
|
||||
label=_("Date"),
|
||||
required=False,
|
||||
widget=AirDatePickerInput(clear_button=False),
|
||||
)
|
||||
reference_date = forms.DateField(
|
||||
widget=AirMonthYearPickerInput(),
|
||||
label=_("Reference Date"),
|
||||
required=False,
|
||||
)
|
||||
amount = forms.DecimalField(
|
||||
max_digits=42,
|
||||
decimal_places=30,
|
||||
required=False,
|
||||
label=_("Amount"),
|
||||
widget=ArbitraryDecimalDisplayNumberInput(),
|
||||
)
|
||||
description = forms.CharField(
|
||||
max_length=500, required=False, label=_("Description")
|
||||
)
|
||||
notes = forms.CharField(
|
||||
required=False,
|
||||
widget=forms.Textarea(attrs={"rows": 3}),
|
||||
label=_("Notes"),
|
||||
)
|
||||
category = DynamicModelChoiceField(
|
||||
create_field="name",
|
||||
model=TransactionCategory,
|
||||
required=False,
|
||||
label=_("Category"),
|
||||
queryset=TransactionCategory.objects.filter(active=True),
|
||||
)
|
||||
tags = DynamicModelMultipleChoiceField(
|
||||
model=TransactionTag,
|
||||
to_field_name="name",
|
||||
create_field="name",
|
||||
required=False,
|
||||
label=_("Tags"),
|
||||
queryset=TransactionTag.objects.filter(active=True),
|
||||
)
|
||||
entities = DynamicModelMultipleChoiceField(
|
||||
model=TransactionEntity,
|
||||
to_field_name="name",
|
||||
create_field="name",
|
||||
required=False,
|
||||
label=_("Entities"),
|
||||
queryset=TransactionEntity.objects.all(),
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
# Make all fields optional
|
||||
for field_name, field in self.fields.items():
|
||||
field.required = False
|
||||
|
||||
del self.helper.layout[-1] # Remove button
|
||||
del self.helper.layout[0:2] # Remove type, is_paid field
|
||||
self.fields["account"].queryset = Account.objects.filter(
|
||||
is_archived=False,
|
||||
)
|
||||
|
||||
self.helper.layout.insert(
|
||||
0,
|
||||
self.fields["category"].queryset = TransactionCategory.objects.filter(
|
||||
active=True
|
||||
)
|
||||
self.fields["tags"].queryset = TransactionTag.objects.filter(active=True)
|
||||
self.fields["entities"].queryset = TransactionEntity.objects.all()
|
||||
|
||||
self.helper = FormHelper()
|
||||
self.helper.form_tag = False
|
||||
self.helper.form_method = "post"
|
||||
self.helper.layout = Layout(
|
||||
Field(
|
||||
"type",
|
||||
template="transactions/widgets/unselectable_income_expense_toggle_buttons.html",
|
||||
),
|
||||
)
|
||||
|
||||
self.helper.layout.insert(
|
||||
1,
|
||||
Field(
|
||||
"is_paid",
|
||||
template="transactions/widgets/unselectable_paid_toggle_button.html",
|
||||
),
|
||||
)
|
||||
|
||||
self.helper.layout.append(
|
||||
Row(
|
||||
Column("account", css_class="form-group col-md-6 mb-0"),
|
||||
Column("entities", css_class="form-group col-md-6 mb-0"),
|
||||
css_class="form-row",
|
||||
),
|
||||
Row(
|
||||
Column(Field("date"), css_class="form-group col-md-6 mb-0"),
|
||||
Column(Field("reference_date"), css_class="form-group col-md-6 mb-0"),
|
||||
css_class="form-row",
|
||||
),
|
||||
"description",
|
||||
Field("amount", inputmode="decimal"),
|
||||
Row(
|
||||
Column("category", css_class="form-group col-md-6 mb-0"),
|
||||
Column("tags", css_class="form-group col-md-6 mb-0"),
|
||||
css_class="form-row",
|
||||
),
|
||||
"notes",
|
||||
FormActions(
|
||||
NoClassSubmit(
|
||||
"submit", _("Update"), css_class="btn btn-outline-primary w-100"
|
||||
@@ -423,6 +505,9 @@ class BulkEditTransactionForm(TransactionForm):
|
||||
),
|
||||
)
|
||||
|
||||
self.fields["amount"].widget = ArbitraryDecimalDisplayNumberInput()
|
||||
self.fields["date"].widget = AirDatePickerInput(clear_button=False)
|
||||
|
||||
|
||||
class TransferForm(forms.Form):
|
||||
from_account = forms.ModelChoiceField(
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import logging
|
||||
from copy import deepcopy
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from django.conf import settings
|
||||
@@ -33,13 +34,13 @@ transaction_deleted = Signal()
|
||||
|
||||
class SoftDeleteQuerySet(models.QuerySet):
|
||||
@staticmethod
|
||||
def _emit_signals(instances, created=False):
|
||||
def _emit_signals(instances, created=False, old_data=None):
|
||||
"""Helper to emit signals for multiple instances"""
|
||||
for instance in instances:
|
||||
for i, instance in enumerate(instances):
|
||||
if created:
|
||||
transaction_created.send(sender=instance)
|
||||
else:
|
||||
transaction_updated.send(sender=instance)
|
||||
transaction_updated.send(sender=instance, old_data=old_data[i])
|
||||
|
||||
def bulk_create(self, objs, emit_signal=True, **kwargs):
|
||||
instances = super().bulk_create(objs, **kwargs)
|
||||
@@ -50,22 +51,25 @@ class SoftDeleteQuerySet(models.QuerySet):
|
||||
return instances
|
||||
|
||||
def bulk_update(self, objs, fields, emit_signal=True, **kwargs):
|
||||
old_data = deepcopy(objs)
|
||||
result = super().bulk_update(objs, fields, **kwargs)
|
||||
|
||||
if emit_signal:
|
||||
self._emit_signals(objs, created=False)
|
||||
self._emit_signals(objs, created=False, old_data=old_data)
|
||||
|
||||
return result
|
||||
|
||||
def update(self, emit_signal=True, **kwargs):
|
||||
# Get instances before update
|
||||
instances = list(self)
|
||||
old_data = deepcopy(instances)
|
||||
|
||||
result = super().update(**kwargs)
|
||||
|
||||
if emit_signal:
|
||||
# Refresh instances to get new values
|
||||
refreshed = self.model.objects.filter(pk__in=[obj.pk for obj in instances])
|
||||
self._emit_signals(refreshed, created=False)
|
||||
self._emit_signals(refreshed, created=False, old_data=old_data)
|
||||
|
||||
return result
|
||||
|
||||
@@ -376,7 +380,7 @@ class Transaction(OwnedObject):
|
||||
db_table = "transactions"
|
||||
default_manager_name = "objects"
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
def clean_fields(self, *args, **kwargs):
|
||||
self.amount = truncate_decimal(
|
||||
value=self.amount, decimal_places=self.account.currency.decimal_places
|
||||
)
|
||||
@@ -386,6 +390,11 @@ class Transaction(OwnedObject):
|
||||
elif not self.reference_date and self.date:
|
||||
self.reference_date = self.date.replace(day=1)
|
||||
|
||||
super().clean_fields(*args, **kwargs)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
# This is not recommended as it will run twice on some cases like form and API saves.
|
||||
# We only do this here because we forgot to independently call it on multiple places.
|
||||
self.full_clean()
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
@@ -443,12 +452,58 @@ class Transaction(OwnedObject):
|
||||
type_display = self.get_type_display()
|
||||
frmt_date = date(self.date, "SHORT_DATE_FORMAT")
|
||||
account = self.account
|
||||
tags = ", ".join([x.name for x in self.tags.all()]) or _("No tags")
|
||||
tags = (
|
||||
", ".join([x.name for x in self.tags.all()])
|
||||
if self.id
|
||||
else None or _("No tags")
|
||||
)
|
||||
category = self.category or _("No category")
|
||||
amount = localize_number(drop_trailing_zeros(self.amount))
|
||||
description = self.description or _("No description")
|
||||
return f"[{frmt_date}][{type_display}][{account}] {description} • {category} • {tags} • {amount}"
|
||||
|
||||
def deepcopy(self, memo=None):
|
||||
"""
|
||||
Creates a deep copy of the transaction instance.
|
||||
|
||||
This method returns a new, unsaved Transaction instance with the same
|
||||
values as the original, including its many-to-many relationships.
|
||||
The primary key and any other unique fields are reset to avoid
|
||||
database integrity errors upon saving.
|
||||
"""
|
||||
if memo is None:
|
||||
memo = {}
|
||||
|
||||
# Create a new instance of the class
|
||||
new_obj = self.__class__()
|
||||
memo[id(self)] = new_obj
|
||||
|
||||
# Copy all concrete fields from the original to the new object
|
||||
for field in self._meta.concrete_fields:
|
||||
# Skip the primary key to allow the database to generate a new one
|
||||
if field.primary_key:
|
||||
continue
|
||||
|
||||
# Reset any unique fields to None to avoid constraint violations
|
||||
if field.unique and field.name == "internal_id":
|
||||
setattr(new_obj, field.name, None)
|
||||
continue
|
||||
|
||||
# Copy the value of the field
|
||||
setattr(new_obj, field.name, getattr(self, field.name))
|
||||
|
||||
# Save the new object to the database to get a primary key
|
||||
new_obj.save()
|
||||
|
||||
# Copy the many-to-many relationships
|
||||
for field in self._meta.many_to_many:
|
||||
source_manager = getattr(self, field.name)
|
||||
destination_manager = getattr(new_obj, field.name)
|
||||
# Set the M2M relationships for the new object
|
||||
destination_manager.set(source_manager.all())
|
||||
|
||||
return new_obj
|
||||
|
||||
|
||||
class InstallmentPlan(models.Model):
|
||||
class Recurrence(models.TextChoices):
|
||||
|
||||
@@ -175,6 +175,6 @@ class RecurringTransactionTests(TestCase):
|
||||
recurrence_type=RecurringTransaction.RecurrenceType.MONTH,
|
||||
recurrence_interval=1,
|
||||
)
|
||||
self.assertFalse(recurring.paused)
|
||||
self.assertFalse(recurring.is_paused)
|
||||
self.assertEqual(recurring.recurrence_interval, 1)
|
||||
self.assertEqual(recurring.account.currency.code, "USD")
|
||||
|
||||
@@ -213,6 +213,7 @@ def transactions_bulk_edit(request):
|
||||
if form.is_valid():
|
||||
# Apply changes from the form to all selected transactions
|
||||
for transaction in transactions:
|
||||
old_data = deepcopy(transaction)
|
||||
for field_name, value in form.cleaned_data.items():
|
||||
if value or isinstance(
|
||||
value, bool
|
||||
@@ -225,7 +226,7 @@ def transactions_bulk_edit(request):
|
||||
setattr(transaction, field_name, value)
|
||||
|
||||
transaction.save()
|
||||
transaction_updated.send(sender=transaction)
|
||||
transaction_updated.send(sender=transaction, old_data=old_data)
|
||||
|
||||
messages.success(
|
||||
request,
|
||||
@@ -373,10 +374,13 @@ def transactions_transfer(request):
|
||||
@require_http_methods(["GET"])
|
||||
def transaction_pay(request, transaction_id):
|
||||
transaction = get_object_or_404(Transaction, pk=transaction_id)
|
||||
old_data = deepcopy(transaction)
|
||||
|
||||
new_is_paid = False if transaction.is_paid else True
|
||||
transaction.is_paid = new_is_paid
|
||||
transaction.save()
|
||||
transaction_updated.send(sender=transaction)
|
||||
|
||||
transaction_updated.send(sender=transaction, old_data=old_data)
|
||||
|
||||
response = render(
|
||||
request,
|
||||
@@ -394,11 +398,12 @@ def transaction_pay(request, transaction_id):
|
||||
@require_http_methods(["GET"])
|
||||
def transaction_mute(request, transaction_id):
|
||||
transaction = get_object_or_404(Transaction, pk=transaction_id)
|
||||
old_data = deepcopy(transaction)
|
||||
|
||||
new_mute = False if transaction.mute else True
|
||||
transaction.mute = new_mute
|
||||
transaction.save()
|
||||
transaction_updated.send(sender=transaction)
|
||||
transaction_updated.send(sender=transaction, old_data=old_data)
|
||||
|
||||
response = render(
|
||||
request,
|
||||
@@ -414,19 +419,20 @@ def transaction_mute(request, transaction_id):
|
||||
@require_http_methods(["GET"])
|
||||
def transaction_change_month(request, transaction_id, change_type):
|
||||
transaction: Transaction = get_object_or_404(Transaction, pk=transaction_id)
|
||||
old_data = deepcopy(transaction)
|
||||
|
||||
if change_type == "next":
|
||||
transaction.reference_date = transaction.reference_date + relativedelta(
|
||||
months=1
|
||||
)
|
||||
transaction.save()
|
||||
transaction_updated.send(sender=transaction)
|
||||
transaction_updated.send(sender=transaction, old_data=old_data)
|
||||
elif change_type == "previous":
|
||||
transaction.reference_date = transaction.reference_date - relativedelta(
|
||||
months=1
|
||||
)
|
||||
transaction.save()
|
||||
transaction_updated.send(sender=transaction)
|
||||
transaction_updated.send(sender=transaction, old_data=old_data)
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
@@ -440,9 +446,11 @@ def transaction_change_month(request, transaction_id, change_type):
|
||||
def transaction_move_to_today(request, transaction_id):
|
||||
transaction: Transaction = get_object_or_404(Transaction, pk=transaction_id)
|
||||
|
||||
old_data = deepcopy(transaction)
|
||||
|
||||
transaction.date = timezone.localdate(timezone.now())
|
||||
transaction.save()
|
||||
transaction_updated.send(sender=transaction)
|
||||
transaction_updated.send(sender=transaction, old_data=old_data)
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
|
||||
@@ -79,7 +79,7 @@ def yearly_overview_by_currency(request, year: int):
|
||||
currency = request.GET.get("currency")
|
||||
|
||||
# Base query filter
|
||||
filter_params = {"reference_date__year": year, "account__is_archived": False}
|
||||
filter_params = {"reference_date__year": year}
|
||||
|
||||
# Add month filter if provided
|
||||
if month:
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"POT-Creation-Date: 2025-08-30 02:09+0000\n"
|
||||
"PO-Revision-Date: 2025-07-22 06:17+0000\n"
|
||||
"Last-Translator: seraphblade2010 <marc.butenhoff@web.de>\n"
|
||||
"Language-Team: German <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -19,32 +19,32 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.12.2\n"
|
||||
|
||||
#: apps/accounts/forms.py:24
|
||||
#: apps/accounts/forms.py:26
|
||||
msgid "Group name"
|
||||
msgstr "Gruppe Name"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/accounts/forms.py:42 apps/accounts/forms.py:118
|
||||
#: apps/currencies/forms.py:55 apps/currencies/forms.py:93
|
||||
#: apps/currencies/forms.py:146 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
|
||||
#: apps/transactions/forms.py:788 apps/transactions/forms.py:831
|
||||
#: apps/transactions/forms.py:863 apps/transactions/forms.py:898
|
||||
#: apps/transactions/forms.py:1052 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Aktualisierung"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/accounts/forms.py:50 apps/accounts/forms.py:126
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:63
|
||||
#: apps/currencies/forms.py:101 apps/currencies/forms.py:154
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/transactions/forms.py:378 apps/transactions/forms.py:796
|
||||
#: apps/transactions/forms.py:839 apps/transactions/forms.py:871
|
||||
#: apps/transactions/forms.py:906 apps/transactions/forms.py:1060
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
@@ -66,34 +66,34 @@ msgstr "Aktualisierung"
|
||||
msgid "Add"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
|
||||
#: apps/accounts/forms.py:59 templates/accounts/fragments/list.html:26
|
||||
msgid "Group"
|
||||
msgstr "Gruppe"
|
||||
|
||||
#: apps/accounts/forms.py:115
|
||||
#: apps/accounts/forms.py:135
|
||||
msgid "New balance"
|
||||
msgstr "Neuer Saldo"
|
||||
|
||||
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/accounts/forms.py:141 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
|
||||
#: apps/rules/models.py:38 apps/rules/models.py:286
|
||||
#: apps/transactions/forms.py:42 apps/transactions/forms.py:256
|
||||
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/forms.py:450 apps/transactions/forms.py:457
|
||||
#: apps/transactions/forms.py:669 apps/transactions/forms.py:930
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:530
|
||||
msgid "Category"
|
||||
msgstr "Kategorie"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/accounts/forms.py:148 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
|
||||
#: apps/transactions/forms.py:662 apps/transactions/forms.py:923
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
@@ -132,7 +132,7 @@ msgstr "Kontengruppe"
|
||||
msgid "Account Groups"
|
||||
msgstr "Kontengruppen"
|
||||
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:39
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:44
|
||||
#: templates/accounts/fragments/list.html:27
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:18
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:20
|
||||
@@ -159,8 +159,10 @@ msgstr ""
|
||||
"Vermögenskonten werden in deinem Nettovermögen berücksichtigt, aber nicht in "
|
||||
"deiner Monatsübersicht."
|
||||
|
||||
#: apps/accounts/models.py:62 templates/accounts/fragments/list.html:30
|
||||
#: apps/accounts/models.py:62 apps/currencies/models.py:37
|
||||
#: templates/accounts/fragments/list.html:30
|
||||
#: templates/categories/fragments/list.html:24
|
||||
#: templates/currencies/fragments/list.html:27
|
||||
#: templates/entities/fragments/list.html:24
|
||||
#: templates/tags/fragments/list.html:24
|
||||
msgid "Archived"
|
||||
@@ -174,7 +176,7 @@ msgstr ""
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
#: apps/transactions/forms.py:654 apps/transactions/forms.py:915
|
||||
#: apps/transactions/models.py:290 apps/transactions/models.py:461
|
||||
#: apps/transactions/models.py:683 apps/transactions/models.py:925
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
@@ -498,9 +500,9 @@ msgstr "Präfix"
|
||||
msgid "Suffix"
|
||||
msgstr "Suffix"
|
||||
|
||||
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/currencies/forms.py:71 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:478
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/dca/fragments/strategy/details.html:52
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
@@ -520,7 +522,7 @@ msgstr "Währungsname"
|
||||
msgid "Decimal Places"
|
||||
msgstr "Dezimalstellen"
|
||||
|
||||
#: apps/currencies/models.py:40 apps/export_app/forms.py:26
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:26
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
@@ -532,63 +534,63 @@ msgstr "Dezimalstellen"
|
||||
msgid "Currencies"
|
||||
msgstr "Währungen"
|
||||
|
||||
#: apps/currencies/models.py:49
|
||||
#: apps/currencies/models.py:54
|
||||
msgid "Currency cannot have itself as exchange currency."
|
||||
msgstr "Die Währung kann nicht ihre eigene Umrechnungswährung sein."
|
||||
|
||||
#: apps/currencies/models.py:60
|
||||
#: apps/currencies/models.py:65
|
||||
msgid "From Currency"
|
||||
msgstr "Startwährung"
|
||||
|
||||
#: apps/currencies/models.py:66
|
||||
#: apps/currencies/models.py:71
|
||||
msgid "To Currency"
|
||||
msgstr "Zielwährung"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:74 apps/currencies/models.py:81
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Umrechnungskurs"
|
||||
|
||||
#: apps/currencies/models.py:71
|
||||
#: apps/currencies/models.py:76
|
||||
msgid "Date and Time"
|
||||
msgstr "Datum und Uhrzeit"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/currencies/models.py:78 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automatisch"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:82 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Umrechnungskurse"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:94
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Start- und Zielwährung dürfen nicht identisch sein."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:110
|
||||
msgid "On"
|
||||
msgstr "An"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Every X hours"
|
||||
msgstr "Alle X Stunden"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Not on"
|
||||
msgstr "Nicht an"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:114
|
||||
msgid "Service Name"
|
||||
msgstr "Dienstname"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "Service Type"
|
||||
msgstr "Diensttyp"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:118 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -597,31 +599,31 @@ msgstr "Diensttyp"
|
||||
msgid "Active"
|
||||
msgstr "Aktiv"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:123
|
||||
msgid "API Key"
|
||||
msgstr "API-Schlüssel"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API-Schlüssel für den Dienst (falls benötigt)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:129
|
||||
msgid "Interval Type"
|
||||
msgstr "Intervalltyp"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Interval"
|
||||
msgstr "Intervall"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Letzter erfolgreicher Abruf"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:141
|
||||
msgid "Target Currencies"
|
||||
msgstr "Zielwährungen"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:143
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -629,11 +631,11 @@ msgstr ""
|
||||
"Währung auswählen, dessen Umrechnungskurs abgerufen werden sollen. Für jede "
|
||||
"Währung wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
|
||||
|
||||
#: apps/currencies/models.py:146
|
||||
#: apps/currencies/models.py:151
|
||||
msgid "Target Accounts"
|
||||
msgstr "Zielkonten"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:153
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -641,33 +643,33 @@ msgstr ""
|
||||
"Konten auswählen, für die Umrechungskurse abgerufen werden solen. Für jedes "
|
||||
"Konto wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:160
|
||||
#, fuzzy
|
||||
#| msgid "Edit exchange rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Umrechnungskurs bearbeiten"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:168
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Umrechnungskurs-Dienst"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:169
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Umrechnungskurs-Dienste"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:221
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "\"Jede X Stunden\"-Intervalltyp benötigt eine positive Ganzzahl."
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:230
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "\"Jede X Stunden\"-Intervall muss zwischen 1 und 24 liegen."
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:244
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -675,7 +677,7 @@ msgstr ""
|
||||
"Ungültiges Stundenformat. Nutze kommagetrennte Stunden (0-23) und/oder "
|
||||
"Zeiträume (z.B. \"1-5,8,10-12\")."
|
||||
|
||||
#: apps/currencies/models.py:250
|
||||
#: apps/currencies/models.py:255
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -727,11 +729,11 @@ msgstr "Dienst erfolgreich in die Warteschlange eingereiht"
|
||||
msgid "Create transaction"
|
||||
msgstr "Erstelle Transaktion"
|
||||
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
|
||||
msgid "From Account"
|
||||
msgstr "Startkonto"
|
||||
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
|
||||
msgid "To Account"
|
||||
msgstr "Zielkonto"
|
||||
|
||||
@@ -758,7 +760,7 @@ msgstr "Verknüpfe Transaktion"
|
||||
msgid "You must provide an account."
|
||||
msgstr "Du musst ein Konto angeben."
|
||||
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:605
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:600
|
||||
msgid "From and To accounts must be different."
|
||||
msgstr "Start- und Zielkonten müssen unterschiedlich sein."
|
||||
|
||||
@@ -777,7 +779,7 @@ msgstr "Startwährung"
|
||||
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
|
||||
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
|
||||
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
|
||||
#: apps/transactions/forms.py:494 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:510 apps/transactions/models.py:711
|
||||
#: apps/transactions/models.py:947
|
||||
msgid "Notes"
|
||||
@@ -862,7 +864,7 @@ msgstr "Kategorien"
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/forms.py:677 apps/transactions/forms.py:938
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
@@ -1039,8 +1041,8 @@ msgstr "Vorgang erfolgreich gelöscht"
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
#: templates/insights/fragments/category_overview/index.html:395
|
||||
#: templates/insights/fragments/category_overview/index.html:424
|
||||
msgid "Uncategorized"
|
||||
msgstr "Unkategorisiert"
|
||||
|
||||
@@ -1140,7 +1142,7 @@ msgstr "Bezahlt"
|
||||
|
||||
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
|
||||
#: apps/rules/models.py:258 apps/transactions/forms.py:70
|
||||
#: apps/transactions/forms.py:486 apps/transactions/forms.py:688
|
||||
#: apps/transactions/forms.py:481 apps/transactions/forms.py:683
|
||||
#: apps/transactions/models.py:301 apps/transactions/models.py:484
|
||||
#: apps/transactions/models.py:713
|
||||
msgid "Reference Date"
|
||||
@@ -1158,7 +1160,7 @@ msgstr "Betrag"
|
||||
|
||||
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:36 apps/rules/models.py:266
|
||||
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
|
||||
#: apps/transactions/forms.py:485 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:468 apps/transactions/models.py:697
|
||||
#: apps/transactions/models.py:945
|
||||
msgid "Description"
|
||||
@@ -1364,6 +1366,7 @@ msgid "Any entity"
|
||||
msgstr "Entität hinzufügen"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: templates/insights/fragments/category_overview/index.html:274
|
||||
#, fuzzy
|
||||
#| msgid "No entities"
|
||||
msgid "No entity"
|
||||
@@ -1381,56 +1384,56 @@ msgstr "Speichern und ähnliches hinzufügen"
|
||||
msgid "Save and add another"
|
||||
msgstr "Speichern und etwas neu hinzufügen"
|
||||
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:506
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:501
|
||||
msgid "Muted transactions won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
"Stummgeschaltete Transaktionen werden nicht in der monatlichen Übersicht "
|
||||
"berücksichtigt"
|
||||
|
||||
#: apps/transactions/forms.py:442
|
||||
#: apps/transactions/forms.py:437
|
||||
msgid "From Amount"
|
||||
msgstr "Startbetrag"
|
||||
|
||||
#: apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:442
|
||||
msgid "To Amount"
|
||||
msgstr "Zielbetrag"
|
||||
|
||||
#: apps/transactions/forms.py:503 apps/transactions/models.py:211
|
||||
#: apps/transactions/forms.py:498 apps/transactions/models.py:211
|
||||
#: apps/transactions/models.py:302 apps/transactions/models.py:935
|
||||
msgid "Mute"
|
||||
msgstr "Deaktivieren"
|
||||
|
||||
#: apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:567
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:40
|
||||
#: templates/cotton/ui/transactions_fab.html:44
|
||||
msgid "Transfer"
|
||||
msgstr "Transfer"
|
||||
|
||||
#: apps/transactions/forms.py:822
|
||||
#: apps/transactions/forms.py:817
|
||||
msgid "Tag name"
|
||||
msgstr "Tagname"
|
||||
|
||||
#: apps/transactions/forms.py:854
|
||||
#: apps/transactions/forms.py:849
|
||||
msgid "Entity name"
|
||||
msgstr "Entitätsname"
|
||||
|
||||
#: apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:881
|
||||
msgid "Category name"
|
||||
msgstr "Kategoriename"
|
||||
|
||||
#: apps/transactions/forms.py:888
|
||||
#: apps/transactions/forms.py:883
|
||||
#, fuzzy
|
||||
#| msgid "Muted categories won't count towards your monthly total"
|
||||
msgid "Muted categories won't be displayed on monthly summaries"
|
||||
msgstr "Ausgeblendete Kategorien zählen nicht zu deiner Monatsübersicht"
|
||||
|
||||
#: apps/transactions/forms.py:1046
|
||||
#: apps/transactions/forms.py:1041
|
||||
#, fuzzy
|
||||
#| msgid "Filter transactions"
|
||||
msgid "future transactions"
|
||||
msgstr "Transaktionen filtern"
|
||||
|
||||
#: apps/transactions/forms.py:1076
|
||||
#: apps/transactions/forms.py:1071
|
||||
msgid "End date should be after the start date"
|
||||
msgstr "Enddatum sollte hinter dem Startdatum liegen"
|
||||
|
||||
@@ -1725,11 +1728,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Ratenzahlungs-Plan erfolgreich gelöscht"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:170
|
||||
msgid "Item added successfully"
|
||||
msgstr "Objekt erfolgreich hinzugefügt"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Objekt erfolgreich aktualisiert"
|
||||
|
||||
@@ -2004,7 +2007,7 @@ msgstr "Kontogruppe bearbeiten"
|
||||
#: templates/account_groups/fragments/list.html:32
|
||||
#: templates/accounts/fragments/list.html:37
|
||||
#: templates/categories/fragments/table.html:24
|
||||
#: templates/currencies/fragments/list.html:33
|
||||
#: templates/currencies/fragments/list.html:34
|
||||
#: templates/dca/fragments/strategy/details.html:63
|
||||
#: templates/entities/fragments/table.html:23
|
||||
#: templates/exchange_rates/fragments/table.html:19
|
||||
@@ -2025,7 +2028,7 @@ msgstr "Aktionen"
|
||||
#: templates/categories/fragments/table.html:29
|
||||
#: templates/cotton/transaction/item.html:129
|
||||
#: templates/cotton/ui/transactions_action_bar.html:52
|
||||
#: templates/currencies/fragments/list.html:37
|
||||
#: templates/currencies/fragments/list.html:38
|
||||
#: templates/dca/fragments/strategy/details.html:67
|
||||
#: templates/dca/fragments/strategy/list.html:36
|
||||
#: templates/entities/fragments/table.html:28
|
||||
@@ -2051,7 +2054,7 @@ msgstr "Bearbeiten"
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
#: templates/currencies/fragments/list.html:45
|
||||
#: templates/dca/fragments/strategy/details.html:75
|
||||
#: templates/dca/fragments/strategy/list.html:44
|
||||
#: templates/entities/fragments/table.html:36
|
||||
@@ -2078,7 +2081,7 @@ msgstr "Löschen"
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/dca/fragments/strategy/details.html:80
|
||||
#: templates/dca/fragments/strategy/list.html:48
|
||||
#: templates/entities/fragments/table.html:40
|
||||
@@ -2108,7 +2111,7 @@ msgstr "Bist du sicher?"
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:81
|
||||
#: templates/dca/fragments/strategy/list.html:49
|
||||
#: templates/entities/fragments/table.html:41
|
||||
@@ -2128,7 +2131,7 @@ msgstr "Dies kann nicht rückgängig gemacht werden!"
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/currencies/fragments/list.html:51
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
#: templates/entities/fragments/table.html:42
|
||||
@@ -2274,7 +2277,7 @@ msgid "Muted"
|
||||
msgstr "Ausgeblendet"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:540
|
||||
msgid "No categories"
|
||||
msgstr "Keine Kategorien"
|
||||
|
||||
@@ -2477,7 +2480,7 @@ msgstr "Währung bearbeiten"
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
#: templates/currencies/fragments/list.html:61
|
||||
#: templates/currencies/fragments/list.html:63
|
||||
msgid "No currencies"
|
||||
msgstr "Keine Währungen"
|
||||
|
||||
@@ -2946,7 +2949,7 @@ msgstr "Gesamtbilanz"
|
||||
msgid "Total"
|
||||
msgstr "Gesamt"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:517
|
||||
#, fuzzy
|
||||
#| msgid "final total"
|
||||
msgid "Final Total"
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"POT-Creation-Date: 2025-08-30 02:09+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -18,32 +18,32 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps/accounts/forms.py:24
|
||||
#: apps/accounts/forms.py:26
|
||||
msgid "Group name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/accounts/forms.py:42 apps/accounts/forms.py:118
|
||||
#: apps/currencies/forms.py:55 apps/currencies/forms.py:93
|
||||
#: apps/currencies/forms.py:146 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
|
||||
#: apps/transactions/forms.py:788 apps/transactions/forms.py:831
|
||||
#: apps/transactions/forms.py:863 apps/transactions/forms.py:898
|
||||
#: apps/transactions/forms.py:1052 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/accounts/forms.py:50 apps/accounts/forms.py:126
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:63
|
||||
#: apps/currencies/forms.py:101 apps/currencies/forms.py:154
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/transactions/forms.py:378 apps/transactions/forms.py:796
|
||||
#: apps/transactions/forms.py:839 apps/transactions/forms.py:871
|
||||
#: apps/transactions/forms.py:906 apps/transactions/forms.py:1060
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
@@ -65,34 +65,34 @@ msgstr ""
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
|
||||
#: apps/accounts/forms.py:59 templates/accounts/fragments/list.html:26
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:115
|
||||
#: apps/accounts/forms.py:135
|
||||
msgid "New balance"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/accounts/forms.py:141 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
|
||||
#: apps/rules/models.py:38 apps/rules/models.py:286
|
||||
#: apps/transactions/forms.py:42 apps/transactions/forms.py:256
|
||||
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/forms.py:450 apps/transactions/forms.py:457
|
||||
#: apps/transactions/forms.py:669 apps/transactions/forms.py:930
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:530
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/accounts/forms.py:148 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
|
||||
#: apps/transactions/forms.py:662 apps/transactions/forms.py:923
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
@@ -131,7 +131,7 @@ msgstr ""
|
||||
msgid "Account Groups"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:39
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:44
|
||||
#: templates/accounts/fragments/list.html:27
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:18
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:20
|
||||
@@ -156,8 +156,10 @@ msgid ""
|
||||
"Asset accounts count towards your Net Worth, but not towards your month."
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:62 templates/accounts/fragments/list.html:30
|
||||
#: apps/accounts/models.py:62 apps/currencies/models.py:37
|
||||
#: templates/accounts/fragments/list.html:30
|
||||
#: templates/categories/fragments/list.html:24
|
||||
#: templates/currencies/fragments/list.html:27
|
||||
#: templates/entities/fragments/list.html:24
|
||||
#: templates/tags/fragments/list.html:24
|
||||
msgid "Archived"
|
||||
@@ -170,7 +172,7 @@ msgstr ""
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
#: apps/transactions/forms.py:654 apps/transactions/forms.py:915
|
||||
#: apps/transactions/models.py:290 apps/transactions/models.py:461
|
||||
#: apps/transactions/models.py:683 apps/transactions/models.py:925
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
@@ -486,9 +488,9 @@ msgstr ""
|
||||
msgid "Suffix"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/currencies/forms.py:71 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:478
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/dca/fragments/strategy/details.html:52
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
@@ -508,7 +510,7 @@ msgstr ""
|
||||
msgid "Decimal Places"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:40 apps/export_app/forms.py:26
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:26
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
@@ -520,63 +522,63 @@ msgstr ""
|
||||
msgid "Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:49
|
||||
#: apps/currencies/models.py:54
|
||||
msgid "Currency cannot have itself as exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:60
|
||||
#: apps/currencies/models.py:65
|
||||
msgid "From Currency"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:66
|
||||
#: apps/currencies/models.py:71
|
||||
msgid "To Currency"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:74 apps/currencies/models.py:81
|
||||
msgid "Exchange Rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:71
|
||||
#: apps/currencies/models.py:76
|
||||
msgid "Date and Time"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/currencies/models.py:78 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:82 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:94
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:110
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:114
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:118 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -585,77 +587,77 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:123
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:129
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:141
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:143
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:146
|
||||
#: apps/currencies/models.py:151
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:153
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:160
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:168
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:169
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:221
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:230
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:244
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:250
|
||||
#: apps/currencies/models.py:255
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -705,11 +707,11 @@ msgstr ""
|
||||
msgid "Create transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
|
||||
msgid "From Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
|
||||
msgid "To Account"
|
||||
msgstr ""
|
||||
|
||||
@@ -734,7 +736,7 @@ msgstr ""
|
||||
msgid "You must provide an account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:605
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:600
|
||||
msgid "From and To accounts must be different."
|
||||
msgstr ""
|
||||
|
||||
@@ -753,7 +755,7 @@ msgstr ""
|
||||
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
|
||||
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
|
||||
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
|
||||
#: apps/transactions/forms.py:494 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:510 apps/transactions/models.py:711
|
||||
#: apps/transactions/models.py:947
|
||||
msgid "Notes"
|
||||
@@ -838,7 +840,7 @@ msgstr ""
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/forms.py:677 apps/transactions/forms.py:938
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
@@ -1013,8 +1015,8 @@ msgstr ""
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
#: templates/insights/fragments/category_overview/index.html:395
|
||||
#: templates/insights/fragments/category_overview/index.html:424
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1114,7 +1116,7 @@ msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
|
||||
#: apps/rules/models.py:258 apps/transactions/forms.py:70
|
||||
#: apps/transactions/forms.py:486 apps/transactions/forms.py:688
|
||||
#: apps/transactions/forms.py:481 apps/transactions/forms.py:683
|
||||
#: apps/transactions/models.py:301 apps/transactions/models.py:484
|
||||
#: apps/transactions/models.py:713
|
||||
msgid "Reference Date"
|
||||
@@ -1132,7 +1134,7 @@ msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:36 apps/rules/models.py:266
|
||||
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
|
||||
#: apps/transactions/forms.py:485 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:468 apps/transactions/models.py:697
|
||||
#: apps/transactions/models.py:945
|
||||
msgid "Description"
|
||||
@@ -1325,6 +1327,7 @@ msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: templates/insights/fragments/category_overview/index.html:274
|
||||
msgid "No entity"
|
||||
msgstr ""
|
||||
|
||||
@@ -1340,50 +1343,50 @@ msgstr ""
|
||||
msgid "Save and add another"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:506
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:501
|
||||
msgid "Muted transactions won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:442
|
||||
#: apps/transactions/forms.py:437
|
||||
msgid "From Amount"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:442
|
||||
msgid "To Amount"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:503 apps/transactions/models.py:211
|
||||
#: apps/transactions/forms.py:498 apps/transactions/models.py:211
|
||||
#: apps/transactions/models.py:302 apps/transactions/models.py:935
|
||||
msgid "Mute"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:567
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:40
|
||||
#: templates/cotton/ui/transactions_fab.html:44
|
||||
msgid "Transfer"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:822
|
||||
#: apps/transactions/forms.py:817
|
||||
msgid "Tag name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:854
|
||||
#: apps/transactions/forms.py:849
|
||||
msgid "Entity name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:881
|
||||
msgid "Category name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:888
|
||||
#: apps/transactions/forms.py:883
|
||||
msgid "Muted categories won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:1046
|
||||
#: apps/transactions/forms.py:1041
|
||||
msgid "future transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:1076
|
||||
#: apps/transactions/forms.py:1071
|
||||
msgid "End date should be after the start date"
|
||||
msgstr ""
|
||||
|
||||
@@ -1671,11 +1674,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:170
|
||||
msgid "Item added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
|
||||
msgid "Item updated successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1945,7 +1948,7 @@ msgstr ""
|
||||
#: templates/account_groups/fragments/list.html:32
|
||||
#: templates/accounts/fragments/list.html:37
|
||||
#: templates/categories/fragments/table.html:24
|
||||
#: templates/currencies/fragments/list.html:33
|
||||
#: templates/currencies/fragments/list.html:34
|
||||
#: templates/dca/fragments/strategy/details.html:63
|
||||
#: templates/entities/fragments/table.html:23
|
||||
#: templates/exchange_rates/fragments/table.html:19
|
||||
@@ -1966,7 +1969,7 @@ msgstr ""
|
||||
#: templates/categories/fragments/table.html:29
|
||||
#: templates/cotton/transaction/item.html:129
|
||||
#: templates/cotton/ui/transactions_action_bar.html:52
|
||||
#: templates/currencies/fragments/list.html:37
|
||||
#: templates/currencies/fragments/list.html:38
|
||||
#: templates/dca/fragments/strategy/details.html:67
|
||||
#: templates/dca/fragments/strategy/list.html:36
|
||||
#: templates/entities/fragments/table.html:28
|
||||
@@ -1992,7 +1995,7 @@ msgstr ""
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
#: templates/currencies/fragments/list.html:45
|
||||
#: templates/dca/fragments/strategy/details.html:75
|
||||
#: templates/dca/fragments/strategy/list.html:44
|
||||
#: templates/entities/fragments/table.html:36
|
||||
@@ -2019,7 +2022,7 @@ msgstr ""
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/dca/fragments/strategy/details.html:80
|
||||
#: templates/dca/fragments/strategy/list.html:48
|
||||
#: templates/entities/fragments/table.html:40
|
||||
@@ -2049,7 +2052,7 @@ msgstr ""
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:81
|
||||
#: templates/dca/fragments/strategy/list.html:49
|
||||
#: templates/entities/fragments/table.html:41
|
||||
@@ -2069,7 +2072,7 @@ msgstr ""
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/currencies/fragments/list.html:51
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
#: templates/entities/fragments/table.html:42
|
||||
@@ -2215,7 +2218,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:540
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2416,7 +2419,7 @@ msgstr ""
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#: templates/currencies/fragments/list.html:61
|
||||
#: templates/currencies/fragments/list.html:63
|
||||
msgid "No currencies"
|
||||
msgstr ""
|
||||
|
||||
@@ -2869,7 +2872,7 @@ msgstr ""
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:517
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"POT-Creation-Date: 2025-08-30 02:09+0000\n"
|
||||
"PO-Revision-Date: 2025-07-21 18:17+0000\n"
|
||||
"Last-Translator: afermar <adrian.fm@protonmail.com>\n"
|
||||
"Language-Team: Spanish <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -19,32 +19,32 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.12.2\n"
|
||||
|
||||
#: apps/accounts/forms.py:24
|
||||
#: apps/accounts/forms.py:26
|
||||
msgid "Group name"
|
||||
msgstr "Nombre del Grupo"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/accounts/forms.py:42 apps/accounts/forms.py:118
|
||||
#: apps/currencies/forms.py:55 apps/currencies/forms.py:93
|
||||
#: apps/currencies/forms.py:146 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
|
||||
#: apps/transactions/forms.py:788 apps/transactions/forms.py:831
|
||||
#: apps/transactions/forms.py:863 apps/transactions/forms.py:898
|
||||
#: apps/transactions/forms.py:1052 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/accounts/forms.py:50 apps/accounts/forms.py:126
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:63
|
||||
#: apps/currencies/forms.py:101 apps/currencies/forms.py:154
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/transactions/forms.py:378 apps/transactions/forms.py:796
|
||||
#: apps/transactions/forms.py:839 apps/transactions/forms.py:871
|
||||
#: apps/transactions/forms.py:906 apps/transactions/forms.py:1060
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
@@ -66,34 +66,34 @@ msgstr "Actualizar"
|
||||
msgid "Add"
|
||||
msgstr "Agregar"
|
||||
|
||||
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
|
||||
#: apps/accounts/forms.py:59 templates/accounts/fragments/list.html:26
|
||||
msgid "Group"
|
||||
msgstr "Grupo"
|
||||
|
||||
#: apps/accounts/forms.py:115
|
||||
#: apps/accounts/forms.py:135
|
||||
msgid "New balance"
|
||||
msgstr "Nuevo balance"
|
||||
|
||||
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/accounts/forms.py:141 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
|
||||
#: apps/rules/models.py:38 apps/rules/models.py:286
|
||||
#: apps/transactions/forms.py:42 apps/transactions/forms.py:256
|
||||
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/forms.py:450 apps/transactions/forms.py:457
|
||||
#: apps/transactions/forms.py:669 apps/transactions/forms.py:930
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:530
|
||||
msgid "Category"
|
||||
msgstr "Categoría"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/accounts/forms.py:148 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
|
||||
#: apps/transactions/forms.py:662 apps/transactions/forms.py:923
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
@@ -132,7 +132,7 @@ msgstr "Grupo de Cuenta"
|
||||
msgid "Account Groups"
|
||||
msgstr "Grupos de Cuentas"
|
||||
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:39
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:44
|
||||
#: templates/accounts/fragments/list.html:27
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:18
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:20
|
||||
@@ -158,8 +158,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Las cuentas de activos computan para su patrimonio neto, pero no para su mes."
|
||||
|
||||
#: apps/accounts/models.py:62 templates/accounts/fragments/list.html:30
|
||||
#: apps/accounts/models.py:62 apps/currencies/models.py:37
|
||||
#: templates/accounts/fragments/list.html:30
|
||||
#: templates/categories/fragments/list.html:24
|
||||
#: templates/currencies/fragments/list.html:27
|
||||
#: templates/entities/fragments/list.html:24
|
||||
#: templates/tags/fragments/list.html:24
|
||||
msgid "Archived"
|
||||
@@ -172,7 +174,7 @@ msgstr "Las cuentas archivadas no aparecen ni cuentan para su patrimonio neto"
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
#: apps/transactions/forms.py:654 apps/transactions/forms.py:915
|
||||
#: apps/transactions/models.py:290 apps/transactions/models.py:461
|
||||
#: apps/transactions/models.py:683 apps/transactions/models.py:925
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
@@ -507,9 +509,9 @@ msgstr "Prefijo"
|
||||
msgid "Suffix"
|
||||
msgstr "Sufijo"
|
||||
|
||||
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/currencies/forms.py:71 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:478
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/dca/fragments/strategy/details.html:52
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
@@ -529,7 +531,7 @@ msgstr "Nombre de la Moneda"
|
||||
msgid "Decimal Places"
|
||||
msgstr "Cantidad de decimales"
|
||||
|
||||
#: apps/currencies/models.py:40 apps/export_app/forms.py:26
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:26
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
@@ -541,64 +543,64 @@ msgstr "Cantidad de decimales"
|
||||
msgid "Currencies"
|
||||
msgstr "Monedas"
|
||||
|
||||
#: apps/currencies/models.py:49
|
||||
#: apps/currencies/models.py:54
|
||||
msgid "Currency cannot have itself as exchange currency."
|
||||
msgstr "La moneda no puede tenerse a sí misma como moneda de cambio."
|
||||
|
||||
#: apps/currencies/models.py:60
|
||||
#: apps/currencies/models.py:65
|
||||
msgid "From Currency"
|
||||
msgstr "De Moneda"
|
||||
|
||||
#: apps/currencies/models.py:66
|
||||
#: apps/currencies/models.py:71
|
||||
msgid "To Currency"
|
||||
msgstr "A Moneda"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:74 apps/currencies/models.py:81
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Tipo de cambio"
|
||||
|
||||
#: apps/currencies/models.py:71
|
||||
#: apps/currencies/models.py:76
|
||||
msgid "Date and Time"
|
||||
msgstr "Fecha y Hora"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/currencies/models.py:78 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
#, fuzzy
|
||||
msgid "Auto"
|
||||
msgstr "Auto"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:82 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Tipos de cambio"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:94
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Las monedas de origen y destino no pueden ser la misma."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:110
|
||||
msgid "On"
|
||||
msgstr "Encendido"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Every X hours"
|
||||
msgstr "Cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Not on"
|
||||
msgstr "No Encendido"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:114
|
||||
msgid "Service Name"
|
||||
msgstr "Nombre del Servicio"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Servicio"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:118 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -607,37 +609,37 @@ msgstr "Tipo de Servicio"
|
||||
msgid "Active"
|
||||
msgstr "Activo"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:123
|
||||
#, fuzzy
|
||||
msgid "API Key"
|
||||
msgstr "API Key"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:124
|
||||
#, fuzzy
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API key for the service (if required)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:129
|
||||
#, fuzzy
|
||||
msgid "Interval Type"
|
||||
msgstr "Interval Type"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:133
|
||||
#, fuzzy
|
||||
msgid "Interval"
|
||||
msgstr "Interval"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:136
|
||||
#, fuzzy
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Last Successful Fetch"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:141
|
||||
#, fuzzy
|
||||
msgid "Target Currencies"
|
||||
msgstr "Target Currencies"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:143
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
@@ -646,12 +648,12 @@ msgstr ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
|
||||
#: apps/currencies/models.py:146
|
||||
#: apps/currencies/models.py:151
|
||||
#, fuzzy
|
||||
msgid "Target Accounts"
|
||||
msgstr "Target Accounts"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:153
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
@@ -660,36 +662,36 @@ msgstr ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:160
|
||||
#, fuzzy
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Edit exchange rate"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:168
|
||||
#, fuzzy
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Exchange Rate Service"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:169
|
||||
#, fuzzy
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Exchange Rate Services"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:221
|
||||
#, fuzzy
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "'Every X hours' interval type requires a positive integer."
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:230
|
||||
#, fuzzy
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "'Every X hours' interval must be between 1 and 24."
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:244
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
@@ -698,7 +700,7 @@ msgstr ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
|
||||
#: apps/currencies/models.py:250
|
||||
#: apps/currencies/models.py:255
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
@@ -762,12 +764,12 @@ msgstr "Services queued successfully"
|
||||
msgid "Create transaction"
|
||||
msgstr "Create transaction"
|
||||
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
|
||||
#, fuzzy
|
||||
msgid "From Account"
|
||||
msgstr "From Account"
|
||||
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
|
||||
#, fuzzy
|
||||
msgid "To Account"
|
||||
msgstr "To Account"
|
||||
@@ -798,7 +800,7 @@ msgstr "Link transaction"
|
||||
msgid "You must provide an account."
|
||||
msgstr "You must provide an account."
|
||||
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:605
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:600
|
||||
#, fuzzy
|
||||
msgid "From and To accounts must be different."
|
||||
msgstr "From and To accounts must be different."
|
||||
@@ -820,7 +822,7 @@ msgstr "Payment Currency"
|
||||
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
|
||||
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
|
||||
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
|
||||
#: apps/transactions/forms.py:494 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:510 apps/transactions/models.py:711
|
||||
#: apps/transactions/models.py:947
|
||||
#, fuzzy
|
||||
@@ -922,7 +924,7 @@ msgstr "Categories"
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/forms.py:677 apps/transactions/forms.py:938
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
@@ -1132,8 +1134,8 @@ msgstr "Run deleted successfully"
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
#: templates/insights/fragments/category_overview/index.html:395
|
||||
#: templates/insights/fragments/category_overview/index.html:424
|
||||
#, fuzzy
|
||||
msgid "Uncategorized"
|
||||
msgstr "Uncategorized"
|
||||
@@ -1249,7 +1251,7 @@ msgstr "Paid"
|
||||
|
||||
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
|
||||
#: apps/rules/models.py:258 apps/transactions/forms.py:70
|
||||
#: apps/transactions/forms.py:486 apps/transactions/forms.py:688
|
||||
#: apps/transactions/forms.py:481 apps/transactions/forms.py:683
|
||||
#: apps/transactions/models.py:301 apps/transactions/models.py:484
|
||||
#: apps/transactions/models.py:713
|
||||
#, fuzzy
|
||||
@@ -1269,7 +1271,7 @@ msgstr "Amount"
|
||||
|
||||
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:36 apps/rules/models.py:266
|
||||
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
|
||||
#: apps/transactions/forms.py:485 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:468 apps/transactions/models.py:697
|
||||
#: apps/transactions/models.py:945
|
||||
#, fuzzy
|
||||
@@ -1507,6 +1509,7 @@ msgid "Any entity"
|
||||
msgstr "Add entity"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: templates/insights/fragments/category_overview/index.html:274
|
||||
#, fuzzy
|
||||
msgid "No entity"
|
||||
msgstr "No entities"
|
||||
@@ -1524,61 +1527,61 @@ msgstr "Guardar y añadir similar"
|
||||
msgid "Save and add another"
|
||||
msgstr "Guardar y añadir otro"
|
||||
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:506
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:501
|
||||
msgid "Muted transactions won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
"Las transacciones silenciadas no se mostrarán en los resúmenes mensuales"
|
||||
|
||||
#: apps/transactions/forms.py:442
|
||||
#: apps/transactions/forms.py:437
|
||||
#, fuzzy
|
||||
msgid "From Amount"
|
||||
msgstr "From Amount"
|
||||
|
||||
#: apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:442
|
||||
#, fuzzy
|
||||
msgid "To Amount"
|
||||
msgstr "To Amount"
|
||||
|
||||
#: apps/transactions/forms.py:503 apps/transactions/models.py:211
|
||||
#: apps/transactions/forms.py:498 apps/transactions/models.py:211
|
||||
#: apps/transactions/models.py:302 apps/transactions/models.py:935
|
||||
#, fuzzy
|
||||
msgid "Mute"
|
||||
msgstr "Mute"
|
||||
|
||||
#: apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:567
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:40
|
||||
#: templates/cotton/ui/transactions_fab.html:44
|
||||
#, fuzzy
|
||||
msgid "Transfer"
|
||||
msgstr "Transfer"
|
||||
|
||||
#: apps/transactions/forms.py:822
|
||||
#: apps/transactions/forms.py:817
|
||||
#, fuzzy
|
||||
msgid "Tag name"
|
||||
msgstr "Tag name"
|
||||
|
||||
#: apps/transactions/forms.py:854
|
||||
#: apps/transactions/forms.py:849
|
||||
#, fuzzy
|
||||
msgid "Entity name"
|
||||
msgstr "Entity name"
|
||||
|
||||
#: apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:881
|
||||
#, fuzzy
|
||||
msgid "Category name"
|
||||
msgstr "Category name"
|
||||
|
||||
#: apps/transactions/forms.py:888
|
||||
#: apps/transactions/forms.py:883
|
||||
#, fuzzy
|
||||
msgid "Muted categories won't be displayed on monthly summaries"
|
||||
msgstr "Muted categories won't count towards your monthly total"
|
||||
|
||||
#: apps/transactions/forms.py:1046
|
||||
#: apps/transactions/forms.py:1041
|
||||
#, fuzzy
|
||||
#| msgid "Filter transactions"
|
||||
msgid "future transactions"
|
||||
msgstr "Filtrar transacciones"
|
||||
|
||||
#: apps/transactions/forms.py:1076
|
||||
#: apps/transactions/forms.py:1071
|
||||
#, fuzzy
|
||||
msgid "End date should be after the start date"
|
||||
msgstr "End date should be after the start date"
|
||||
@@ -1923,12 +1926,12 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Installment Plan deleted successfully"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:170
|
||||
#, fuzzy
|
||||
msgid "Item added successfully"
|
||||
msgstr "Rule added successfully"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
|
||||
#, fuzzy
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Rule updated successfully"
|
||||
@@ -2253,7 +2256,7 @@ msgstr "Edit account group"
|
||||
#: templates/account_groups/fragments/list.html:32
|
||||
#: templates/accounts/fragments/list.html:37
|
||||
#: templates/categories/fragments/table.html:24
|
||||
#: templates/currencies/fragments/list.html:33
|
||||
#: templates/currencies/fragments/list.html:34
|
||||
#: templates/dca/fragments/strategy/details.html:63
|
||||
#: templates/entities/fragments/table.html:23
|
||||
#: templates/exchange_rates/fragments/table.html:19
|
||||
@@ -2275,7 +2278,7 @@ msgstr "Actions"
|
||||
#: templates/categories/fragments/table.html:29
|
||||
#: templates/cotton/transaction/item.html:129
|
||||
#: templates/cotton/ui/transactions_action_bar.html:52
|
||||
#: templates/currencies/fragments/list.html:37
|
||||
#: templates/currencies/fragments/list.html:38
|
||||
#: templates/dca/fragments/strategy/details.html:67
|
||||
#: templates/dca/fragments/strategy/list.html:36
|
||||
#: templates/entities/fragments/table.html:28
|
||||
@@ -2302,7 +2305,7 @@ msgstr "Edit"
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
#: templates/currencies/fragments/list.html:45
|
||||
#: templates/dca/fragments/strategy/details.html:75
|
||||
#: templates/dca/fragments/strategy/list.html:44
|
||||
#: templates/entities/fragments/table.html:36
|
||||
@@ -2330,7 +2333,7 @@ msgstr "Delete"
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/dca/fragments/strategy/details.html:80
|
||||
#: templates/dca/fragments/strategy/list.html:48
|
||||
#: templates/entities/fragments/table.html:40
|
||||
@@ -2361,7 +2364,7 @@ msgstr "Are you sure?"
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:81
|
||||
#: templates/dca/fragments/strategy/list.html:49
|
||||
#: templates/entities/fragments/table.html:41
|
||||
@@ -2382,7 +2385,7 @@ msgstr "You won't be able to revert this!"
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/currencies/fragments/list.html:51
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
#: templates/entities/fragments/table.html:42
|
||||
@@ -2554,7 +2557,7 @@ msgid "Muted"
|
||||
msgstr "Muted"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:540
|
||||
#, fuzzy
|
||||
msgid "No categories"
|
||||
msgstr "No categories"
|
||||
@@ -2791,7 +2794,7 @@ msgstr "Edit currency"
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
#: templates/currencies/fragments/list.html:61
|
||||
#: templates/currencies/fragments/list.html:63
|
||||
#, fuzzy
|
||||
msgid "No currencies"
|
||||
msgstr "No currencies"
|
||||
@@ -3341,7 +3344,7 @@ msgstr "final total"
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:517
|
||||
#, fuzzy
|
||||
msgid "Final Total"
|
||||
msgstr "final total"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"POT-Creation-Date: 2025-08-30 02:09+0000\n"
|
||||
"PO-Revision-Date: 2025-08-18 08:17+0000\n"
|
||||
"Last-Translator: sorcierwax <freakywax@gmail.com>\n"
|
||||
"Language-Team: French <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -19,32 +19,32 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.12.2\n"
|
||||
|
||||
#: apps/accounts/forms.py:24
|
||||
#: apps/accounts/forms.py:26
|
||||
msgid "Group name"
|
||||
msgstr "Nom de groupe"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/accounts/forms.py:42 apps/accounts/forms.py:118
|
||||
#: apps/currencies/forms.py:55 apps/currencies/forms.py:93
|
||||
#: apps/currencies/forms.py:146 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
|
||||
#: apps/transactions/forms.py:788 apps/transactions/forms.py:831
|
||||
#: apps/transactions/forms.py:863 apps/transactions/forms.py:898
|
||||
#: apps/transactions/forms.py:1052 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Mise à jour"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/accounts/forms.py:50 apps/accounts/forms.py:126
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:63
|
||||
#: apps/currencies/forms.py:101 apps/currencies/forms.py:154
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/transactions/forms.py:378 apps/transactions/forms.py:796
|
||||
#: apps/transactions/forms.py:839 apps/transactions/forms.py:871
|
||||
#: apps/transactions/forms.py:906 apps/transactions/forms.py:1060
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
@@ -66,34 +66,34 @@ msgstr "Mise à jour"
|
||||
msgid "Add"
|
||||
msgstr "Ajouter"
|
||||
|
||||
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
|
||||
#: apps/accounts/forms.py:59 templates/accounts/fragments/list.html:26
|
||||
msgid "Group"
|
||||
msgstr "Groupe"
|
||||
|
||||
#: apps/accounts/forms.py:115
|
||||
#: apps/accounts/forms.py:135
|
||||
msgid "New balance"
|
||||
msgstr "Nouveau solde"
|
||||
|
||||
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/accounts/forms.py:141 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
|
||||
#: apps/rules/models.py:38 apps/rules/models.py:286
|
||||
#: apps/transactions/forms.py:42 apps/transactions/forms.py:256
|
||||
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/forms.py:450 apps/transactions/forms.py:457
|
||||
#: apps/transactions/forms.py:669 apps/transactions/forms.py:930
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:530
|
||||
msgid "Category"
|
||||
msgstr "Catégorie"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/accounts/forms.py:148 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
|
||||
#: apps/transactions/forms.py:662 apps/transactions/forms.py:923
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
@@ -132,7 +132,7 @@ msgstr "Groupe de comptes"
|
||||
msgid "Account Groups"
|
||||
msgstr "Groupes de comptes"
|
||||
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:39
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:44
|
||||
#: templates/accounts/fragments/list.html:27
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:18
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:20
|
||||
@@ -158,8 +158,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Les comptes d'actifs contribue à votre Valeur Nette mais pas à votre mois."
|
||||
|
||||
#: apps/accounts/models.py:62 templates/accounts/fragments/list.html:30
|
||||
#: apps/accounts/models.py:62 apps/currencies/models.py:37
|
||||
#: templates/accounts/fragments/list.html:30
|
||||
#: templates/categories/fragments/list.html:24
|
||||
#: templates/currencies/fragments/list.html:27
|
||||
#: templates/entities/fragments/list.html:24
|
||||
#: templates/tags/fragments/list.html:24
|
||||
msgid "Archived"
|
||||
@@ -174,7 +176,7 @@ msgstr ""
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
#: apps/transactions/forms.py:654 apps/transactions/forms.py:915
|
||||
#: apps/transactions/models.py:290 apps/transactions/models.py:461
|
||||
#: apps/transactions/models.py:683 apps/transactions/models.py:925
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
@@ -497,9 +499,9 @@ msgstr "Préfixe"
|
||||
msgid "Suffix"
|
||||
msgstr "Suffixe"
|
||||
|
||||
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/currencies/forms.py:71 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:478
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/dca/fragments/strategy/details.html:52
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
@@ -519,7 +521,7 @@ msgstr "Nom de devise"
|
||||
msgid "Decimal Places"
|
||||
msgstr "Décimales"
|
||||
|
||||
#: apps/currencies/models.py:40 apps/export_app/forms.py:26
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:26
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
@@ -531,63 +533,63 @@ msgstr "Décimales"
|
||||
msgid "Currencies"
|
||||
msgstr "Devises"
|
||||
|
||||
#: apps/currencies/models.py:49
|
||||
#: apps/currencies/models.py:54
|
||||
msgid "Currency cannot have itself as exchange currency."
|
||||
msgstr "La devise ne peut pas être identique à la devise d'échange."
|
||||
|
||||
#: apps/currencies/models.py:60
|
||||
#: apps/currencies/models.py:65
|
||||
msgid "From Currency"
|
||||
msgstr "Devise de départ"
|
||||
|
||||
#: apps/currencies/models.py:66
|
||||
#: apps/currencies/models.py:71
|
||||
msgid "To Currency"
|
||||
msgstr "Devise d'arrivée"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:74 apps/currencies/models.py:81
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Taux de change"
|
||||
|
||||
#: apps/currencies/models.py:71
|
||||
#: apps/currencies/models.py:76
|
||||
msgid "Date and Time"
|
||||
msgstr "Date et Heure"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/currencies/models.py:78 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Auto"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:82 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Taux de changes"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:94
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Les devises de départ et d'arrivée ne peuvent pas être identiques."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:110
|
||||
msgid "On"
|
||||
msgstr "Le"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Every X hours"
|
||||
msgstr "Toutes les X heures"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Not on"
|
||||
msgstr "Pas le"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:114
|
||||
msgid "Service Name"
|
||||
msgstr "Nom du Service"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "Service Type"
|
||||
msgstr "Type de Service"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:118 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -596,31 +598,31 @@ msgstr "Type de Service"
|
||||
msgid "Active"
|
||||
msgstr "Actif"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:123
|
||||
msgid "API Key"
|
||||
msgstr "Clé API"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "Clé API pour le service (si nécessaire)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:129
|
||||
msgid "Interval Type"
|
||||
msgstr "Type d'intervalle"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Interval"
|
||||
msgstr "Intervalle"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Dernière récupération avec succès"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:141
|
||||
msgid "Target Currencies"
|
||||
msgstr "Devises cibles"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:143
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -628,11 +630,11 @@ msgstr ""
|
||||
"Sélectionnez les devises pour récupérer leur taux de changes. Les taux "
|
||||
"seront récupérés pour chaque devises par rapport à leur devise d'échange."
|
||||
|
||||
#: apps/currencies/models.py:146
|
||||
#: apps/currencies/models.py:151
|
||||
msgid "Target Accounts"
|
||||
msgstr "Comptes cibles"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:153
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -640,33 +642,33 @@ msgstr ""
|
||||
"Sélectionnez les comptes pour récupérer leur taux de change. Les taux seront "
|
||||
"récupérés pour chaque compte par rapport à leur devise d'échange."
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:160
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Taux de change unique"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
"Ne créer qu'un seul taux de change et le mettre à jour. Evite d'engorger la "
|
||||
"base de donnée."
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:168
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Service de taux de change"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:169
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Services de taux de change"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:221
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "'Toutes les X heures' l'intervalle requiert un entier positif."
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:230
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "'Toutes les X heures' l'intervalle doit être compris entre 1 et 24."
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:244
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -674,7 +676,7 @@ msgstr ""
|
||||
"Format d'heure invalide. Utilisez les heures séparé par virgule (0-23) et/ou "
|
||||
"une plage (ex : '1-5,8,10-12')."
|
||||
|
||||
#: apps/currencies/models.py:250
|
||||
#: apps/currencies/models.py:255
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -726,11 +728,11 @@ msgstr "Services ajouté à la file avec succès"
|
||||
msgid "Create transaction"
|
||||
msgstr "Créer une transaction"
|
||||
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
|
||||
msgid "From Account"
|
||||
msgstr "Compte originateur"
|
||||
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
|
||||
msgid "To Account"
|
||||
msgstr "Compte bénéficiaire"
|
||||
|
||||
@@ -755,7 +757,7 @@ msgstr "Lié transaction"
|
||||
msgid "You must provide an account."
|
||||
msgstr "Vous devez fournir un compte."
|
||||
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:605
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:600
|
||||
msgid "From and To accounts must be different."
|
||||
msgstr ""
|
||||
"Le compte originateur et le compte bénéficiaire doivent être différent."
|
||||
@@ -775,7 +777,7 @@ msgstr "Devise de paiement"
|
||||
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
|
||||
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
|
||||
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
|
||||
#: apps/transactions/forms.py:494 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:510 apps/transactions/models.py:711
|
||||
#: apps/transactions/models.py:947
|
||||
msgid "Notes"
|
||||
@@ -860,7 +862,7 @@ msgstr "Catégories"
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/forms.py:677 apps/transactions/forms.py:938
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
@@ -1037,8 +1039,8 @@ msgstr "Exécution supprimé avec succès"
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
#: templates/insights/fragments/category_overview/index.html:395
|
||||
#: templates/insights/fragments/category_overview/index.html:424
|
||||
msgid "Uncategorized"
|
||||
msgstr "Sans catégorie"
|
||||
|
||||
@@ -1138,7 +1140,7 @@ msgstr "Payé"
|
||||
|
||||
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
|
||||
#: apps/rules/models.py:258 apps/transactions/forms.py:70
|
||||
#: apps/transactions/forms.py:486 apps/transactions/forms.py:688
|
||||
#: apps/transactions/forms.py:481 apps/transactions/forms.py:683
|
||||
#: apps/transactions/models.py:301 apps/transactions/models.py:484
|
||||
#: apps/transactions/models.py:713
|
||||
msgid "Reference Date"
|
||||
@@ -1156,7 +1158,7 @@ msgstr "Montant"
|
||||
|
||||
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:36 apps/rules/models.py:266
|
||||
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
|
||||
#: apps/transactions/forms.py:485 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:468 apps/transactions/models.py:697
|
||||
#: apps/transactions/models.py:945
|
||||
msgid "Description"
|
||||
@@ -1353,6 +1355,7 @@ msgid "Any entity"
|
||||
msgstr "N'importe quelle entité"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: templates/insights/fragments/category_overview/index.html:274
|
||||
msgid "No entity"
|
||||
msgstr "Pas d'entité"
|
||||
|
||||
@@ -1368,52 +1371,52 @@ msgstr "Enregistrer et ajouter des semblables"
|
||||
msgid "Save and add another"
|
||||
msgstr "Enregistrer et ajouter un autre"
|
||||
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:506
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:501
|
||||
msgid "Muted transactions won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
"Les transactions silencieuses ne sont pas affichées dans les résumés mensuels"
|
||||
|
||||
#: apps/transactions/forms.py:442
|
||||
#: apps/transactions/forms.py:437
|
||||
msgid "From Amount"
|
||||
msgstr "Montant de départ"
|
||||
|
||||
#: apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:442
|
||||
msgid "To Amount"
|
||||
msgstr "Montant d'arrivée"
|
||||
|
||||
#: apps/transactions/forms.py:503 apps/transactions/models.py:211
|
||||
#: apps/transactions/forms.py:498 apps/transactions/models.py:211
|
||||
#: apps/transactions/models.py:302 apps/transactions/models.py:935
|
||||
msgid "Mute"
|
||||
msgstr "Silencieux"
|
||||
|
||||
#: apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:567
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:40
|
||||
#: templates/cotton/ui/transactions_fab.html:44
|
||||
msgid "Transfer"
|
||||
msgstr "Virement"
|
||||
|
||||
#: apps/transactions/forms.py:822
|
||||
#: apps/transactions/forms.py:817
|
||||
msgid "Tag name"
|
||||
msgstr "Libellé de l'étiquette"
|
||||
|
||||
#: apps/transactions/forms.py:854
|
||||
#: apps/transactions/forms.py:849
|
||||
msgid "Entity name"
|
||||
msgstr "Nom d'entité"
|
||||
|
||||
#: apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:881
|
||||
msgid "Category name"
|
||||
msgstr "Nom de catégorie"
|
||||
|
||||
#: apps/transactions/forms.py:888
|
||||
#: apps/transactions/forms.py:883
|
||||
msgid "Muted categories won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
"Les catégories silencieuses ne compteront pas dans votre résumé mensuel"
|
||||
|
||||
#: apps/transactions/forms.py:1046
|
||||
#: apps/transactions/forms.py:1041
|
||||
msgid "future transactions"
|
||||
msgstr "Transactions à venir"
|
||||
|
||||
#: apps/transactions/forms.py:1076
|
||||
#: apps/transactions/forms.py:1071
|
||||
msgid "End date should be after the start date"
|
||||
msgstr "La date de fin doit être ultérieure à la date de début"
|
||||
|
||||
@@ -1707,11 +1710,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Paiement en plusieurs fois supprimé avec succès"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:170
|
||||
msgid "Item added successfully"
|
||||
msgstr "Item ajouté avec succès"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Item mis à jour avec succès"
|
||||
|
||||
@@ -1994,7 +1997,7 @@ msgstr "Editer un groupe de comptes"
|
||||
#: templates/account_groups/fragments/list.html:32
|
||||
#: templates/accounts/fragments/list.html:37
|
||||
#: templates/categories/fragments/table.html:24
|
||||
#: templates/currencies/fragments/list.html:33
|
||||
#: templates/currencies/fragments/list.html:34
|
||||
#: templates/dca/fragments/strategy/details.html:63
|
||||
#: templates/entities/fragments/table.html:23
|
||||
#: templates/exchange_rates/fragments/table.html:19
|
||||
@@ -2015,7 +2018,7 @@ msgstr "Actions"
|
||||
#: templates/categories/fragments/table.html:29
|
||||
#: templates/cotton/transaction/item.html:129
|
||||
#: templates/cotton/ui/transactions_action_bar.html:52
|
||||
#: templates/currencies/fragments/list.html:37
|
||||
#: templates/currencies/fragments/list.html:38
|
||||
#: templates/dca/fragments/strategy/details.html:67
|
||||
#: templates/dca/fragments/strategy/list.html:36
|
||||
#: templates/entities/fragments/table.html:28
|
||||
@@ -2041,7 +2044,7 @@ msgstr "Editer"
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
#: templates/currencies/fragments/list.html:45
|
||||
#: templates/dca/fragments/strategy/details.html:75
|
||||
#: templates/dca/fragments/strategy/list.html:44
|
||||
#: templates/entities/fragments/table.html:36
|
||||
@@ -2068,7 +2071,7 @@ msgstr "Supprimer"
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/dca/fragments/strategy/details.html:80
|
||||
#: templates/dca/fragments/strategy/list.html:48
|
||||
#: templates/entities/fragments/table.html:40
|
||||
@@ -2098,7 +2101,7 @@ msgstr "Êtes-vous sûr ?"
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:81
|
||||
#: templates/dca/fragments/strategy/list.html:49
|
||||
#: templates/entities/fragments/table.html:41
|
||||
@@ -2118,7 +2121,7 @@ msgstr "Cette opération est irréversible, vous ne pourrez pas l'annuler !"
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/currencies/fragments/list.html:51
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
#: templates/entities/fragments/table.html:42
|
||||
@@ -2264,7 +2267,7 @@ msgid "Muted"
|
||||
msgstr "Muet"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:540
|
||||
msgid "No categories"
|
||||
msgstr "Pas de catégories"
|
||||
|
||||
@@ -2465,7 +2468,7 @@ msgstr "Modifier une devise"
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
#: templates/currencies/fragments/list.html:61
|
||||
#: templates/currencies/fragments/list.html:63
|
||||
msgid "No currencies"
|
||||
msgstr "Pas de devises"
|
||||
|
||||
@@ -2930,7 +2933,7 @@ msgstr "Total final"
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:517
|
||||
msgid "Final Total"
|
||||
msgstr "Total final"
|
||||
|
||||
|
||||
3387
app/locale/id/LC_MESSAGES/django.po
Normal file
3387
app/locale/id/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"POT-Creation-Date: 2025-08-30 02:09+0000\n"
|
||||
"PO-Revision-Date: 2025-08-17 08:17+0000\n"
|
||||
"Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -19,32 +19,32 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.12.2\n"
|
||||
|
||||
#: apps/accounts/forms.py:24
|
||||
#: apps/accounts/forms.py:26
|
||||
msgid "Group name"
|
||||
msgstr "Groepsnaam"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/accounts/forms.py:42 apps/accounts/forms.py:118
|
||||
#: apps/currencies/forms.py:55 apps/currencies/forms.py:93
|
||||
#: apps/currencies/forms.py:146 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
|
||||
#: apps/transactions/forms.py:788 apps/transactions/forms.py:831
|
||||
#: apps/transactions/forms.py:863 apps/transactions/forms.py:898
|
||||
#: apps/transactions/forms.py:1052 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Bijwerken"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/accounts/forms.py:50 apps/accounts/forms.py:126
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:63
|
||||
#: apps/currencies/forms.py:101 apps/currencies/forms.py:154
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/transactions/forms.py:378 apps/transactions/forms.py:796
|
||||
#: apps/transactions/forms.py:839 apps/transactions/forms.py:871
|
||||
#: apps/transactions/forms.py:906 apps/transactions/forms.py:1060
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
@@ -66,34 +66,34 @@ msgstr "Bijwerken"
|
||||
msgid "Add"
|
||||
msgstr "Toevoegen"
|
||||
|
||||
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
|
||||
#: apps/accounts/forms.py:59 templates/accounts/fragments/list.html:26
|
||||
msgid "Group"
|
||||
msgstr "Groep"
|
||||
|
||||
#: apps/accounts/forms.py:115
|
||||
#: apps/accounts/forms.py:135
|
||||
msgid "New balance"
|
||||
msgstr "Nieuw saldo"
|
||||
|
||||
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/accounts/forms.py:141 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
|
||||
#: apps/rules/models.py:38 apps/rules/models.py:286
|
||||
#: apps/transactions/forms.py:42 apps/transactions/forms.py:256
|
||||
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/forms.py:450 apps/transactions/forms.py:457
|
||||
#: apps/transactions/forms.py:669 apps/transactions/forms.py:930
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:530
|
||||
msgid "Category"
|
||||
msgstr "Categorie"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/accounts/forms.py:148 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
|
||||
#: apps/transactions/forms.py:662 apps/transactions/forms.py:923
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
@@ -132,7 +132,7 @@ msgstr "Accountgroep"
|
||||
msgid "Account Groups"
|
||||
msgstr "Accountgroepen"
|
||||
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:39
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:44
|
||||
#: templates/accounts/fragments/list.html:27
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:18
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:20
|
||||
@@ -159,8 +159,10 @@ msgstr ""
|
||||
"Vermogensrekeningen tellen mee voor je 'Netto Waarde', maar niet voor je "
|
||||
"maand."
|
||||
|
||||
#: apps/accounts/models.py:62 templates/accounts/fragments/list.html:30
|
||||
#: apps/accounts/models.py:62 apps/currencies/models.py:37
|
||||
#: templates/accounts/fragments/list.html:30
|
||||
#: templates/categories/fragments/list.html:24
|
||||
#: templates/currencies/fragments/list.html:27
|
||||
#: templates/entities/fragments/list.html:24
|
||||
#: templates/tags/fragments/list.html:24
|
||||
msgid "Archived"
|
||||
@@ -175,7 +177,7 @@ msgstr ""
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
#: apps/transactions/forms.py:654 apps/transactions/forms.py:915
|
||||
#: apps/transactions/models.py:290 apps/transactions/models.py:461
|
||||
#: apps/transactions/models.py:683 apps/transactions/models.py:925
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
@@ -497,9 +499,9 @@ msgstr "Voorvoegsel"
|
||||
msgid "Suffix"
|
||||
msgstr "Achtervoegsel"
|
||||
|
||||
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/currencies/forms.py:71 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:478
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/dca/fragments/strategy/details.html:52
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
@@ -519,7 +521,7 @@ msgstr "Munteenheids Naam"
|
||||
msgid "Decimal Places"
|
||||
msgstr "Cijfers na de komma"
|
||||
|
||||
#: apps/currencies/models.py:40 apps/export_app/forms.py:26
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:26
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
@@ -531,63 +533,63 @@ msgstr "Cijfers na de komma"
|
||||
msgid "Currencies"
|
||||
msgstr "Munteenheden"
|
||||
|
||||
#: apps/currencies/models.py:49
|
||||
#: apps/currencies/models.py:54
|
||||
msgid "Currency cannot have itself as exchange currency."
|
||||
msgstr "Munteenheid kan zichzelf niet als ruilmiddel hebben."
|
||||
|
||||
#: apps/currencies/models.py:60
|
||||
#: apps/currencies/models.py:65
|
||||
msgid "From Currency"
|
||||
msgstr "Van Munteenheid"
|
||||
|
||||
#: apps/currencies/models.py:66
|
||||
#: apps/currencies/models.py:71
|
||||
msgid "To Currency"
|
||||
msgstr "Naar Munteenheid"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:74 apps/currencies/models.py:81
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Wisselkoers"
|
||||
|
||||
#: apps/currencies/models.py:71
|
||||
#: apps/currencies/models.py:76
|
||||
msgid "Date and Time"
|
||||
msgstr "Datum en Tijd"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/currencies/models.py:78 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automatisch"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:82 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Wisselkoersen"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:94
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:110
|
||||
msgid "On"
|
||||
msgstr "Op"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Every X hours"
|
||||
msgstr "Elke X Uren"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Not on"
|
||||
msgstr "Niet op"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:114
|
||||
msgid "Service Name"
|
||||
msgstr "Dienstnaam"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "Service Type"
|
||||
msgstr "Soort Dienst"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:118 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -596,31 +598,31 @@ msgstr "Soort Dienst"
|
||||
msgid "Active"
|
||||
msgstr "Actief"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:123
|
||||
msgid "API Key"
|
||||
msgstr "API Sleutel"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API sleutel voor de dienst (indien verplicht)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:129
|
||||
msgid "Interval Type"
|
||||
msgstr "Soort Interval"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Interval"
|
||||
msgstr "Interval"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Laatste Succesvolle Ophaling"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:141
|
||||
msgid "Target Currencies"
|
||||
msgstr "Doel Munteenheden"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:143
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -628,11 +630,11 @@ msgstr ""
|
||||
"Selecteer munteenheden om wisselkoersen voor op te halen. De koersen worden "
|
||||
"voor elke munteenheid opgehaald ten opzichte van de ingestelde wisselkoers."
|
||||
|
||||
#: apps/currencies/models.py:146
|
||||
#: apps/currencies/models.py:151
|
||||
msgid "Target Accounts"
|
||||
msgstr "Naar rekeningen"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:153
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -641,33 +643,33 @@ msgstr ""
|
||||
"opgehaald voor de munteenheid van elke rekening ten opzichte van de "
|
||||
"ingestelde wisselkoers."
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:160
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Enkele Wisselkoers"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
"Maak één wisselkoers aan en houd deze bijgewerkt. Voorkomt een overvolle "
|
||||
"database."
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:168
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Wisselkoersdienst"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:169
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Wisselkoersdiensten"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:221
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr "Voor het intervaltype ‘Elke X uur’ is een positief geheel getal nodig."
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:230
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "Het interval ‘Elke X uur’ moet tussen 1 en 24 liggen."
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:244
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -675,7 +677,7 @@ msgstr ""
|
||||
"Ongeldige urennotatie. Gebruik door komma's gescheiden uren (0-23) en/of "
|
||||
"reeksen (bijv. ‘1-5,8,10-12’)."
|
||||
|
||||
#: apps/currencies/models.py:250
|
||||
#: apps/currencies/models.py:255
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -727,11 +729,11 @@ msgstr "Diensten succesvol in de wachtrij geplaatst"
|
||||
msgid "Create transaction"
|
||||
msgstr "Maak verrichtingen"
|
||||
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
|
||||
msgid "From Account"
|
||||
msgstr "Van rekening"
|
||||
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
|
||||
msgid "To Account"
|
||||
msgstr "Naar rekening"
|
||||
|
||||
@@ -757,7 +759,7 @@ msgstr "Koppel verrichting"
|
||||
msgid "You must provide an account."
|
||||
msgstr "Je moet een account opgeven."
|
||||
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:605
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:600
|
||||
msgid "From and To accounts must be different."
|
||||
msgstr "Van en Naar rekening moeten verschillend zijn."
|
||||
|
||||
@@ -776,7 +778,7 @@ msgstr "Betaal Munteenheid"
|
||||
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
|
||||
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
|
||||
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
|
||||
#: apps/transactions/forms.py:494 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:510 apps/transactions/models.py:711
|
||||
#: apps/transactions/models.py:947
|
||||
msgid "Notes"
|
||||
@@ -861,7 +863,7 @@ msgstr "Categorieën"
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/forms.py:677 apps/transactions/forms.py:938
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
@@ -1038,8 +1040,8 @@ msgstr "Run met succes verwijderd"
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
#: templates/insights/fragments/category_overview/index.html:395
|
||||
#: templates/insights/fragments/category_overview/index.html:424
|
||||
msgid "Uncategorized"
|
||||
msgstr "Ongecategoriseerd"
|
||||
|
||||
@@ -1139,7 +1141,7 @@ msgstr "Betaald"
|
||||
|
||||
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
|
||||
#: apps/rules/models.py:258 apps/transactions/forms.py:70
|
||||
#: apps/transactions/forms.py:486 apps/transactions/forms.py:688
|
||||
#: apps/transactions/forms.py:481 apps/transactions/forms.py:683
|
||||
#: apps/transactions/models.py:301 apps/transactions/models.py:484
|
||||
#: apps/transactions/models.py:713
|
||||
msgid "Reference Date"
|
||||
@@ -1157,7 +1159,7 @@ msgstr "Bedrag"
|
||||
|
||||
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:36 apps/rules/models.py:266
|
||||
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
|
||||
#: apps/transactions/forms.py:485 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:468 apps/transactions/models.py:697
|
||||
#: apps/transactions/models.py:945
|
||||
msgid "Description"
|
||||
@@ -1352,6 +1354,7 @@ msgid "Any entity"
|
||||
msgstr "Elk bedrijf"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: templates/insights/fragments/category_overview/index.html:274
|
||||
msgid "No entity"
|
||||
msgstr "Geen bedrijf"
|
||||
|
||||
@@ -1367,50 +1370,50 @@ msgstr "Opslaan en vergelijkbaar toevoegen"
|
||||
msgid "Save and add another"
|
||||
msgstr "Opslaan en een andere toevoegen"
|
||||
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:506
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:501
|
||||
msgid "Muted transactions won't be displayed on monthly summaries"
|
||||
msgstr "Gedempte transacties worden niet weergegeven in maandoverzichten"
|
||||
|
||||
#: apps/transactions/forms.py:442
|
||||
#: apps/transactions/forms.py:437
|
||||
msgid "From Amount"
|
||||
msgstr "Van Bedrag"
|
||||
|
||||
#: apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:442
|
||||
msgid "To Amount"
|
||||
msgstr "Naar Bedrag"
|
||||
|
||||
#: apps/transactions/forms.py:503 apps/transactions/models.py:211
|
||||
#: apps/transactions/forms.py:498 apps/transactions/models.py:211
|
||||
#: apps/transactions/models.py:302 apps/transactions/models.py:935
|
||||
msgid "Mute"
|
||||
msgstr "Dempen"
|
||||
|
||||
#: apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:567
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:40
|
||||
#: templates/cotton/ui/transactions_fab.html:44
|
||||
msgid "Transfer"
|
||||
msgstr "Overschrijving"
|
||||
|
||||
#: apps/transactions/forms.py:822
|
||||
#: apps/transactions/forms.py:817
|
||||
msgid "Tag name"
|
||||
msgstr "Labelnaam"
|
||||
|
||||
#: apps/transactions/forms.py:854
|
||||
#: apps/transactions/forms.py:849
|
||||
msgid "Entity name"
|
||||
msgstr "Naam van bedrijf"
|
||||
|
||||
#: apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:881
|
||||
msgid "Category name"
|
||||
msgstr "Naam van categorie"
|
||||
|
||||
#: apps/transactions/forms.py:888
|
||||
#: apps/transactions/forms.py:883
|
||||
msgid "Muted categories won't be displayed on monthly summaries"
|
||||
msgstr "Gedempte categorieën worden niet weergegeven in maandoverzichten"
|
||||
|
||||
#: apps/transactions/forms.py:1046
|
||||
#: apps/transactions/forms.py:1041
|
||||
msgid "future transactions"
|
||||
msgstr "toekomstige verrichtingen"
|
||||
|
||||
#: apps/transactions/forms.py:1076
|
||||
#: apps/transactions/forms.py:1071
|
||||
msgid "End date should be after the start date"
|
||||
msgstr "De einddatum moet na de begindatum vallen"
|
||||
|
||||
@@ -1704,11 +1707,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Afbetalingsplan succesvol verwijderd"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:170
|
||||
msgid "Item added successfully"
|
||||
msgstr "Item succesvol toegevoegd"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Item succesvol bijgewerkt"
|
||||
|
||||
@@ -1985,7 +1988,7 @@ msgstr "Rekeningsgroep bewerken"
|
||||
#: templates/account_groups/fragments/list.html:32
|
||||
#: templates/accounts/fragments/list.html:37
|
||||
#: templates/categories/fragments/table.html:24
|
||||
#: templates/currencies/fragments/list.html:33
|
||||
#: templates/currencies/fragments/list.html:34
|
||||
#: templates/dca/fragments/strategy/details.html:63
|
||||
#: templates/entities/fragments/table.html:23
|
||||
#: templates/exchange_rates/fragments/table.html:19
|
||||
@@ -2006,7 +2009,7 @@ msgstr "Acties"
|
||||
#: templates/categories/fragments/table.html:29
|
||||
#: templates/cotton/transaction/item.html:129
|
||||
#: templates/cotton/ui/transactions_action_bar.html:52
|
||||
#: templates/currencies/fragments/list.html:37
|
||||
#: templates/currencies/fragments/list.html:38
|
||||
#: templates/dca/fragments/strategy/details.html:67
|
||||
#: templates/dca/fragments/strategy/list.html:36
|
||||
#: templates/entities/fragments/table.html:28
|
||||
@@ -2032,7 +2035,7 @@ msgstr "Bewerken"
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
#: templates/currencies/fragments/list.html:45
|
||||
#: templates/dca/fragments/strategy/details.html:75
|
||||
#: templates/dca/fragments/strategy/list.html:44
|
||||
#: templates/entities/fragments/table.html:36
|
||||
@@ -2059,7 +2062,7 @@ msgstr "Verwijderen"
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/dca/fragments/strategy/details.html:80
|
||||
#: templates/dca/fragments/strategy/list.html:48
|
||||
#: templates/entities/fragments/table.html:40
|
||||
@@ -2089,7 +2092,7 @@ msgstr "Weet je het zeker?"
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:81
|
||||
#: templates/dca/fragments/strategy/list.html:49
|
||||
#: templates/entities/fragments/table.html:41
|
||||
@@ -2109,7 +2112,7 @@ msgstr "Je kunt dit niet meer terugdraaien!"
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/currencies/fragments/list.html:51
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
#: templates/entities/fragments/table.html:42
|
||||
@@ -2255,7 +2258,7 @@ msgid "Muted"
|
||||
msgstr "Gedempt"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:540
|
||||
msgid "No categories"
|
||||
msgstr "Geen categorieën"
|
||||
|
||||
@@ -2456,7 +2459,7 @@ msgstr "Munteenheid bewerken"
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
#: templates/currencies/fragments/list.html:61
|
||||
#: templates/currencies/fragments/list.html:63
|
||||
msgid "No currencies"
|
||||
msgstr "Geen munteenheden"
|
||||
|
||||
@@ -2918,7 +2921,7 @@ msgstr "Eindtotaal"
|
||||
msgid "Total"
|
||||
msgstr "Totaal"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:517
|
||||
msgid "Final Total"
|
||||
msgstr "Eindtotaal"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"POT-Creation-Date: 2025-08-30 02:09+0000\n"
|
||||
"PO-Revision-Date: 2025-04-13 08:16+0000\n"
|
||||
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
|
||||
"Language-Team: Portuguese <https://translations.herculino.com/projects/"
|
||||
@@ -19,32 +19,32 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.10.4\n"
|
||||
|
||||
#: apps/accounts/forms.py:24
|
||||
#: apps/accounts/forms.py:26
|
||||
msgid "Group name"
|
||||
msgstr "Nome do grupo"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/accounts/forms.py:42 apps/accounts/forms.py:118
|
||||
#: apps/currencies/forms.py:55 apps/currencies/forms.py:93
|
||||
#: apps/currencies/forms.py:146 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
|
||||
#: apps/transactions/forms.py:788 apps/transactions/forms.py:831
|
||||
#: apps/transactions/forms.py:863 apps/transactions/forms.py:898
|
||||
#: apps/transactions/forms.py:1052 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Atualizar"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/accounts/forms.py:50 apps/accounts/forms.py:126
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:63
|
||||
#: apps/currencies/forms.py:101 apps/currencies/forms.py:154
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/transactions/forms.py:378 apps/transactions/forms.py:796
|
||||
#: apps/transactions/forms.py:839 apps/transactions/forms.py:871
|
||||
#: apps/transactions/forms.py:906 apps/transactions/forms.py:1060
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
@@ -66,34 +66,34 @@ msgstr "Atualizar"
|
||||
msgid "Add"
|
||||
msgstr "Adicionar"
|
||||
|
||||
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
|
||||
#: apps/accounts/forms.py:59 templates/accounts/fragments/list.html:26
|
||||
msgid "Group"
|
||||
msgstr "Grupo da Conta"
|
||||
|
||||
#: apps/accounts/forms.py:115
|
||||
#: apps/accounts/forms.py:135
|
||||
msgid "New balance"
|
||||
msgstr "Novo saldo"
|
||||
|
||||
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/accounts/forms.py:141 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
|
||||
#: apps/rules/models.py:38 apps/rules/models.py:286
|
||||
#: apps/transactions/forms.py:42 apps/transactions/forms.py:256
|
||||
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/forms.py:450 apps/transactions/forms.py:457
|
||||
#: apps/transactions/forms.py:669 apps/transactions/forms.py:930
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:530
|
||||
msgid "Category"
|
||||
msgstr "Categoria"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/accounts/forms.py:148 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
|
||||
#: apps/transactions/forms.py:662 apps/transactions/forms.py:923
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
@@ -132,7 +132,7 @@ msgstr "Grupo da Conta"
|
||||
msgid "Account Groups"
|
||||
msgstr "Grupos da Conta"
|
||||
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:39
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:44
|
||||
#: templates/accounts/fragments/list.html:27
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:18
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:20
|
||||
@@ -159,8 +159,10 @@ msgstr ""
|
||||
"As contas de ativos contam para o seu patrimônio líquido, mas não para o seu "
|
||||
"mês."
|
||||
|
||||
#: apps/accounts/models.py:62 templates/accounts/fragments/list.html:30
|
||||
#: apps/accounts/models.py:62 apps/currencies/models.py:37
|
||||
#: templates/accounts/fragments/list.html:30
|
||||
#: templates/categories/fragments/list.html:24
|
||||
#: templates/currencies/fragments/list.html:27
|
||||
#: templates/entities/fragments/list.html:24
|
||||
#: templates/tags/fragments/list.html:24
|
||||
msgid "Archived"
|
||||
@@ -174,7 +176,7 @@ msgstr ""
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
#: apps/transactions/forms.py:654 apps/transactions/forms.py:915
|
||||
#: apps/transactions/models.py:290 apps/transactions/models.py:461
|
||||
#: apps/transactions/models.py:683 apps/transactions/models.py:925
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
@@ -497,9 +499,9 @@ msgstr "Prefixo"
|
||||
msgid "Suffix"
|
||||
msgstr "Sufixo"
|
||||
|
||||
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/currencies/forms.py:71 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:478
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/dca/fragments/strategy/details.html:52
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
@@ -519,7 +521,7 @@ msgstr "Nome da Moeda"
|
||||
msgid "Decimal Places"
|
||||
msgstr "Casas Decimais"
|
||||
|
||||
#: apps/currencies/models.py:40 apps/export_app/forms.py:26
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:26
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
@@ -531,63 +533,63 @@ msgstr "Casas Decimais"
|
||||
msgid "Currencies"
|
||||
msgstr "Moedas"
|
||||
|
||||
#: apps/currencies/models.py:49
|
||||
#: apps/currencies/models.py:54
|
||||
msgid "Currency cannot have itself as exchange currency."
|
||||
msgstr "A moeda não pode ter a si mesma como moeda de câmbio."
|
||||
|
||||
#: apps/currencies/models.py:60
|
||||
#: apps/currencies/models.py:65
|
||||
msgid "From Currency"
|
||||
msgstr "Moeda de origem"
|
||||
|
||||
#: apps/currencies/models.py:66
|
||||
#: apps/currencies/models.py:71
|
||||
msgid "To Currency"
|
||||
msgstr "Moeda de destino"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:74 apps/currencies/models.py:81
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:71
|
||||
#: apps/currencies/models.py:76
|
||||
msgid "Date and Time"
|
||||
msgstr "Data e Tempo"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/currencies/models.py:78 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automático"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:82 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Taxas de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:94
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "As moedas De e Para não podem ser as mesmas."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:110
|
||||
msgid "On"
|
||||
msgstr "Em"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Every X hours"
|
||||
msgstr "A cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Not on"
|
||||
msgstr "Não em"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:114
|
||||
msgid "Service Name"
|
||||
msgstr "Nome do Serviço"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Serviço"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:118 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -596,31 +598,31 @@ msgstr "Tipo de Serviço"
|
||||
msgid "Active"
|
||||
msgstr "Ativo"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:123
|
||||
msgid "API Key"
|
||||
msgstr "Chave de API"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "Chave de API para o serviço (se necessário)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:129
|
||||
msgid "Interval Type"
|
||||
msgstr "Tipo de Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Interval"
|
||||
msgstr "Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Última execução bem-sucedida"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:141
|
||||
msgid "Target Currencies"
|
||||
msgstr "Moedas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:143
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -628,11 +630,11 @@ msgstr ""
|
||||
"Selecione as moedas para as quais deseja obter as taxas de câmbio. As taxas "
|
||||
"serão obtidas para cada moeda em relação à moeda de câmbio definida."
|
||||
|
||||
#: apps/currencies/models.py:146
|
||||
#: apps/currencies/models.py:151
|
||||
msgid "Target Accounts"
|
||||
msgstr "Contas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:153
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -641,34 +643,34 @@ msgstr ""
|
||||
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
|
||||
"definida."
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:160
|
||||
#, fuzzy
|
||||
#| msgid "Edit exchange rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Editar taxa de câmbio"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:168
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Serviço de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:169
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Serviços de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:221
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo."
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:230
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "Intervalo do tipo 'A cada X horas' requerer um número entre 1 e 24."
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:244
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -676,7 +678,7 @@ msgstr ""
|
||||
"Formato inválido de hora. Use uma lista de horas separada por vírgulas "
|
||||
"(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
|
||||
|
||||
#: apps/currencies/models.py:250
|
||||
#: apps/currencies/models.py:255
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -728,11 +730,11 @@ msgstr "Serviços marcados para execução com sucesso"
|
||||
msgid "Create transaction"
|
||||
msgstr "Criar transação"
|
||||
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
|
||||
msgid "From Account"
|
||||
msgstr "Conta de origem"
|
||||
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
|
||||
msgid "To Account"
|
||||
msgstr "Conta de destino"
|
||||
|
||||
@@ -757,7 +759,7 @@ msgstr "Conectar transação"
|
||||
msgid "You must provide an account."
|
||||
msgstr "Você deve informar uma conta."
|
||||
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:605
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:600
|
||||
msgid "From and To accounts must be different."
|
||||
msgstr "As contas De e Para devem ser diferentes."
|
||||
|
||||
@@ -776,7 +778,7 @@ msgstr "Moeda de pagamento"
|
||||
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
|
||||
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
|
||||
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
|
||||
#: apps/transactions/forms.py:494 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:510 apps/transactions/models.py:711
|
||||
#: apps/transactions/models.py:947
|
||||
msgid "Notes"
|
||||
@@ -861,7 +863,7 @@ msgstr "Categorias"
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/forms.py:677 apps/transactions/forms.py:938
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
@@ -1038,8 +1040,8 @@ msgstr "Importação apagada com sucesso"
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
#: templates/insights/fragments/category_overview/index.html:395
|
||||
#: templates/insights/fragments/category_overview/index.html:424
|
||||
msgid "Uncategorized"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
@@ -1139,7 +1141,7 @@ msgstr "Pago"
|
||||
|
||||
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
|
||||
#: apps/rules/models.py:258 apps/transactions/forms.py:70
|
||||
#: apps/transactions/forms.py:486 apps/transactions/forms.py:688
|
||||
#: apps/transactions/forms.py:481 apps/transactions/forms.py:683
|
||||
#: apps/transactions/models.py:301 apps/transactions/models.py:484
|
||||
#: apps/transactions/models.py:713
|
||||
msgid "Reference Date"
|
||||
@@ -1157,7 +1159,7 @@ msgstr "Quantia"
|
||||
|
||||
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:36 apps/rules/models.py:266
|
||||
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
|
||||
#: apps/transactions/forms.py:485 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:468 apps/transactions/models.py:697
|
||||
#: apps/transactions/models.py:945
|
||||
msgid "Description"
|
||||
@@ -1356,6 +1358,7 @@ msgid "Any entity"
|
||||
msgstr "Adicionar entidade"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: templates/insights/fragments/category_overview/index.html:274
|
||||
#, fuzzy
|
||||
#| msgid "No entities"
|
||||
msgid "No entity"
|
||||
@@ -1373,54 +1376,54 @@ msgstr ""
|
||||
msgid "Save and add another"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:506
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:501
|
||||
msgid "Muted transactions won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:442
|
||||
#: apps/transactions/forms.py:437
|
||||
msgid "From Amount"
|
||||
msgstr "Quantia de origem"
|
||||
|
||||
#: apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:442
|
||||
msgid "To Amount"
|
||||
msgstr "Quantia de destino"
|
||||
|
||||
#: apps/transactions/forms.py:503 apps/transactions/models.py:211
|
||||
#: apps/transactions/forms.py:498 apps/transactions/models.py:211
|
||||
#: apps/transactions/models.py:302 apps/transactions/models.py:935
|
||||
msgid "Mute"
|
||||
msgstr "Silenciada"
|
||||
|
||||
#: apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:567
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:40
|
||||
#: templates/cotton/ui/transactions_fab.html:44
|
||||
msgid "Transfer"
|
||||
msgstr "Transferir"
|
||||
|
||||
#: apps/transactions/forms.py:822
|
||||
#: apps/transactions/forms.py:817
|
||||
msgid "Tag name"
|
||||
msgstr "Nome da Tag"
|
||||
|
||||
#: apps/transactions/forms.py:854
|
||||
#: apps/transactions/forms.py:849
|
||||
msgid "Entity name"
|
||||
msgstr "Nome da entidade"
|
||||
|
||||
#: apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:881
|
||||
msgid "Category name"
|
||||
msgstr "Nome da Categoria"
|
||||
|
||||
#: apps/transactions/forms.py:888
|
||||
#: apps/transactions/forms.py:883
|
||||
#, fuzzy
|
||||
#| msgid "Muted categories won't count towards your monthly total"
|
||||
msgid "Muted categories won't be displayed on monthly summaries"
|
||||
msgstr "As categorias silenciadas não serão contabilizadas em seu total mensal"
|
||||
|
||||
#: apps/transactions/forms.py:1046
|
||||
#: apps/transactions/forms.py:1041
|
||||
#, fuzzy
|
||||
#| msgid "Filter transactions"
|
||||
msgid "future transactions"
|
||||
msgstr "Filtrar transações"
|
||||
|
||||
#: apps/transactions/forms.py:1076
|
||||
#: apps/transactions/forms.py:1071
|
||||
msgid "End date should be after the start date"
|
||||
msgstr "Data final deve ser após data inicial"
|
||||
|
||||
@@ -1717,13 +1720,13 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Parcelamento apagado com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:170
|
||||
#, fuzzy
|
||||
#| msgid "Rule added successfully"
|
||||
msgid "Item added successfully"
|
||||
msgstr "Regra adicionada com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
|
||||
#, fuzzy
|
||||
#| msgid "Rule updated successfully"
|
||||
msgid "Item updated successfully"
|
||||
@@ -2004,7 +2007,7 @@ msgstr "Editar grupo de conta"
|
||||
#: templates/account_groups/fragments/list.html:32
|
||||
#: templates/accounts/fragments/list.html:37
|
||||
#: templates/categories/fragments/table.html:24
|
||||
#: templates/currencies/fragments/list.html:33
|
||||
#: templates/currencies/fragments/list.html:34
|
||||
#: templates/dca/fragments/strategy/details.html:63
|
||||
#: templates/entities/fragments/table.html:23
|
||||
#: templates/exchange_rates/fragments/table.html:19
|
||||
@@ -2025,7 +2028,7 @@ msgstr "Ações"
|
||||
#: templates/categories/fragments/table.html:29
|
||||
#: templates/cotton/transaction/item.html:129
|
||||
#: templates/cotton/ui/transactions_action_bar.html:52
|
||||
#: templates/currencies/fragments/list.html:37
|
||||
#: templates/currencies/fragments/list.html:38
|
||||
#: templates/dca/fragments/strategy/details.html:67
|
||||
#: templates/dca/fragments/strategy/list.html:36
|
||||
#: templates/entities/fragments/table.html:28
|
||||
@@ -2051,7 +2054,7 @@ msgstr "Editar"
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
#: templates/currencies/fragments/list.html:45
|
||||
#: templates/dca/fragments/strategy/details.html:75
|
||||
#: templates/dca/fragments/strategy/list.html:44
|
||||
#: templates/entities/fragments/table.html:36
|
||||
@@ -2078,7 +2081,7 @@ msgstr "Apagar"
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/dca/fragments/strategy/details.html:80
|
||||
#: templates/dca/fragments/strategy/list.html:48
|
||||
#: templates/entities/fragments/table.html:40
|
||||
@@ -2108,7 +2111,7 @@ msgstr "Tem certeza?"
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:81
|
||||
#: templates/dca/fragments/strategy/list.html:49
|
||||
#: templates/entities/fragments/table.html:41
|
||||
@@ -2128,7 +2131,7 @@ msgstr "Você não será capaz de reverter isso!"
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/currencies/fragments/list.html:51
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
#: templates/entities/fragments/table.html:42
|
||||
@@ -2274,7 +2277,7 @@ msgid "Muted"
|
||||
msgstr "Silenciada"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:540
|
||||
msgid "No categories"
|
||||
msgstr "Nenhum categoria"
|
||||
|
||||
@@ -2481,7 +2484,7 @@ msgstr "Editar moeda"
|
||||
msgid "Code"
|
||||
msgstr "Código"
|
||||
|
||||
#: templates/currencies/fragments/list.html:61
|
||||
#: templates/currencies/fragments/list.html:63
|
||||
msgid "No currencies"
|
||||
msgstr "Nenhuma moeda"
|
||||
|
||||
@@ -2943,7 +2946,7 @@ msgstr "total final"
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:517
|
||||
msgid "Final Total"
|
||||
msgstr "Total Final"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"POT-Creation-Date: 2025-08-30 02:09+0000\n"
|
||||
"PO-Revision-Date: 2025-08-17 08:17+0000\n"
|
||||
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://translations.herculino.com/"
|
||||
@@ -19,32 +19,32 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.12.2\n"
|
||||
|
||||
#: apps/accounts/forms.py:24
|
||||
#: apps/accounts/forms.py:26
|
||||
msgid "Group name"
|
||||
msgstr "Nome do grupo"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/accounts/forms.py:42 apps/accounts/forms.py:118
|
||||
#: apps/currencies/forms.py:55 apps/currencies/forms.py:93
|
||||
#: apps/currencies/forms.py:146 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
|
||||
#: apps/transactions/forms.py:788 apps/transactions/forms.py:831
|
||||
#: apps/transactions/forms.py:863 apps/transactions/forms.py:898
|
||||
#: apps/transactions/forms.py:1052 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Atualizar"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/accounts/forms.py:50 apps/accounts/forms.py:126
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:63
|
||||
#: apps/currencies/forms.py:101 apps/currencies/forms.py:154
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/transactions/forms.py:378 apps/transactions/forms.py:796
|
||||
#: apps/transactions/forms.py:839 apps/transactions/forms.py:871
|
||||
#: apps/transactions/forms.py:906 apps/transactions/forms.py:1060
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
@@ -66,34 +66,34 @@ msgstr "Atualizar"
|
||||
msgid "Add"
|
||||
msgstr "Adicionar"
|
||||
|
||||
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
|
||||
#: apps/accounts/forms.py:59 templates/accounts/fragments/list.html:26
|
||||
msgid "Group"
|
||||
msgstr "Grupo"
|
||||
|
||||
#: apps/accounts/forms.py:115
|
||||
#: apps/accounts/forms.py:135
|
||||
msgid "New balance"
|
||||
msgstr "Novo saldo"
|
||||
|
||||
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/accounts/forms.py:141 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
|
||||
#: apps/rules/models.py:38 apps/rules/models.py:286
|
||||
#: apps/transactions/forms.py:42 apps/transactions/forms.py:256
|
||||
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/forms.py:450 apps/transactions/forms.py:457
|
||||
#: apps/transactions/forms.py:669 apps/transactions/forms.py:930
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:530
|
||||
msgid "Category"
|
||||
msgstr "Categoria"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/accounts/forms.py:148 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
|
||||
#: apps/transactions/forms.py:662 apps/transactions/forms.py:923
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
@@ -132,7 +132,7 @@ msgstr "Grupo da Conta"
|
||||
msgid "Account Groups"
|
||||
msgstr "Grupos da Conta"
|
||||
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:39
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:44
|
||||
#: templates/accounts/fragments/list.html:27
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:18
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:20
|
||||
@@ -159,8 +159,10 @@ msgstr ""
|
||||
"As contas de ativos contam para o seu patrimônio líquido, mas não para o seu "
|
||||
"mês."
|
||||
|
||||
#: apps/accounts/models.py:62 templates/accounts/fragments/list.html:30
|
||||
#: apps/accounts/models.py:62 apps/currencies/models.py:37
|
||||
#: templates/accounts/fragments/list.html:30
|
||||
#: templates/categories/fragments/list.html:24
|
||||
#: templates/currencies/fragments/list.html:27
|
||||
#: templates/entities/fragments/list.html:24
|
||||
#: templates/tags/fragments/list.html:24
|
||||
msgid "Archived"
|
||||
@@ -174,7 +176,7 @@ msgstr ""
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
#: apps/transactions/forms.py:654 apps/transactions/forms.py:915
|
||||
#: apps/transactions/models.py:290 apps/transactions/models.py:461
|
||||
#: apps/transactions/models.py:683 apps/transactions/models.py:925
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
@@ -495,9 +497,9 @@ msgstr "Prefixo"
|
||||
msgid "Suffix"
|
||||
msgstr "Sufixo"
|
||||
|
||||
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/currencies/forms.py:71 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:478
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/dca/fragments/strategy/details.html:52
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
@@ -517,7 +519,7 @@ msgstr "Nome da Moeda"
|
||||
msgid "Decimal Places"
|
||||
msgstr "Casas Decimais"
|
||||
|
||||
#: apps/currencies/models.py:40 apps/export_app/forms.py:26
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:26
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
@@ -529,63 +531,63 @@ msgstr "Casas Decimais"
|
||||
msgid "Currencies"
|
||||
msgstr "Moedas"
|
||||
|
||||
#: apps/currencies/models.py:49
|
||||
#: apps/currencies/models.py:54
|
||||
msgid "Currency cannot have itself as exchange currency."
|
||||
msgstr "A moeda não pode ter a si mesma como moeda de câmbio."
|
||||
|
||||
#: apps/currencies/models.py:60
|
||||
#: apps/currencies/models.py:65
|
||||
msgid "From Currency"
|
||||
msgstr "Moeda de origem"
|
||||
|
||||
#: apps/currencies/models.py:66
|
||||
#: apps/currencies/models.py:71
|
||||
msgid "To Currency"
|
||||
msgstr "Moeda de destino"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:74 apps/currencies/models.py:81
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:71
|
||||
#: apps/currencies/models.py:76
|
||||
msgid "Date and Time"
|
||||
msgstr "Data e Tempo"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/currencies/models.py:78 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr "Automático"
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:82 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Taxas de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:94
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "As moedas De e Para não podem ser as mesmas."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:110
|
||||
msgid "On"
|
||||
msgstr "Em"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Every X hours"
|
||||
msgstr "A cada X horas"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Not on"
|
||||
msgstr "Não em"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:114
|
||||
msgid "Service Name"
|
||||
msgstr "Nome do Serviço"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "Service Type"
|
||||
msgstr "Tipo de Serviço"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:118 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -594,31 +596,31 @@ msgstr "Tipo de Serviço"
|
||||
msgid "Active"
|
||||
msgstr "Ativo"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:123
|
||||
msgid "API Key"
|
||||
msgstr "Chave de API"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "Chave de API para o serviço (se necessário)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:129
|
||||
msgid "Interval Type"
|
||||
msgstr "Tipo de Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Interval"
|
||||
msgstr "Intervalo"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Última execução bem-sucedida"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:141
|
||||
msgid "Target Currencies"
|
||||
msgstr "Moedas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:143
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
@@ -626,11 +628,11 @@ msgstr ""
|
||||
"Selecione as moedas para as quais deseja obter as taxas de câmbio. As taxas "
|
||||
"serão obtidas para cada moeda em relação à moeda de câmbio definida."
|
||||
|
||||
#: apps/currencies/models.py:146
|
||||
#: apps/currencies/models.py:151
|
||||
msgid "Target Accounts"
|
||||
msgstr "Contas-alvo"
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:153
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
@@ -639,34 +641,34 @@ msgstr ""
|
||||
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
|
||||
"definida."
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:160
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Taxa de câmbio única"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
"Cria uma taxa de câmbio e mantenha-a atualizada. Evita a poluição do banco "
|
||||
"de dados."
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:168
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr "Serviço de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:169
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr "Serviços de Taxa de Câmbio"
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:221
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo."
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:230
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr "Intervalo do tipo 'A cada X horas' requerer um número entre 1 e 24."
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:244
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
@@ -674,7 +676,7 @@ msgstr ""
|
||||
"Formato inválido de hora. Use uma lista de horas separada por vírgulas "
|
||||
"(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
|
||||
|
||||
#: apps/currencies/models.py:250
|
||||
#: apps/currencies/models.py:255
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -726,11 +728,11 @@ msgstr "Serviços marcados para execução com sucesso"
|
||||
msgid "Create transaction"
|
||||
msgstr "Criar transação"
|
||||
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
|
||||
msgid "From Account"
|
||||
msgstr "Conta de origem"
|
||||
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
|
||||
msgid "To Account"
|
||||
msgstr "Conta de destino"
|
||||
|
||||
@@ -755,7 +757,7 @@ msgstr "Conectar transação"
|
||||
msgid "You must provide an account."
|
||||
msgstr "Você deve informar uma conta."
|
||||
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:605
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:600
|
||||
msgid "From and To accounts must be different."
|
||||
msgstr "As contas De e Para devem ser diferentes."
|
||||
|
||||
@@ -774,7 +776,7 @@ msgstr "Moeda de pagamento"
|
||||
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
|
||||
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
|
||||
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
|
||||
#: apps/transactions/forms.py:494 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:510 apps/transactions/models.py:711
|
||||
#: apps/transactions/models.py:947
|
||||
msgid "Notes"
|
||||
@@ -859,7 +861,7 @@ msgstr "Categorias"
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/forms.py:677 apps/transactions/forms.py:938
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
@@ -1036,8 +1038,8 @@ msgstr "Importação apagada com sucesso"
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
#: templates/insights/fragments/category_overview/index.html:395
|
||||
#: templates/insights/fragments/category_overview/index.html:424
|
||||
msgid "Uncategorized"
|
||||
msgstr "Sem categoria"
|
||||
|
||||
@@ -1137,7 +1139,7 @@ msgstr "Pago"
|
||||
|
||||
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
|
||||
#: apps/rules/models.py:258 apps/transactions/forms.py:70
|
||||
#: apps/transactions/forms.py:486 apps/transactions/forms.py:688
|
||||
#: apps/transactions/forms.py:481 apps/transactions/forms.py:683
|
||||
#: apps/transactions/models.py:301 apps/transactions/models.py:484
|
||||
#: apps/transactions/models.py:713
|
||||
msgid "Reference Date"
|
||||
@@ -1155,7 +1157,7 @@ msgstr "Quantia"
|
||||
|
||||
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:36 apps/rules/models.py:266
|
||||
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
|
||||
#: apps/transactions/forms.py:485 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:468 apps/transactions/models.py:697
|
||||
#: apps/transactions/models.py:945
|
||||
msgid "Description"
|
||||
@@ -1350,6 +1352,7 @@ msgid "Any entity"
|
||||
msgstr "Qualquer entidade"
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: templates/insights/fragments/category_overview/index.html:274
|
||||
msgid "No entity"
|
||||
msgstr "Sem entidade"
|
||||
|
||||
@@ -1365,50 +1368,50 @@ msgstr "Salvar e adicionar similar"
|
||||
msgid "Save and add another"
|
||||
msgstr "Salvar e adicionar outra"
|
||||
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:506
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:501
|
||||
msgid "Muted transactions won't be displayed on monthly summaries"
|
||||
msgstr "Transações silenciadas não apareceram nos sumários mensais"
|
||||
|
||||
#: apps/transactions/forms.py:442
|
||||
#: apps/transactions/forms.py:437
|
||||
msgid "From Amount"
|
||||
msgstr "Quantia de origem"
|
||||
|
||||
#: apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:442
|
||||
msgid "To Amount"
|
||||
msgstr "Quantia de destino"
|
||||
|
||||
#: apps/transactions/forms.py:503 apps/transactions/models.py:211
|
||||
#: apps/transactions/forms.py:498 apps/transactions/models.py:211
|
||||
#: apps/transactions/models.py:302 apps/transactions/models.py:935
|
||||
msgid "Mute"
|
||||
msgstr "Silenciada"
|
||||
|
||||
#: apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:567
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:40
|
||||
#: templates/cotton/ui/transactions_fab.html:44
|
||||
msgid "Transfer"
|
||||
msgstr "Transferir"
|
||||
|
||||
#: apps/transactions/forms.py:822
|
||||
#: apps/transactions/forms.py:817
|
||||
msgid "Tag name"
|
||||
msgstr "Nome da Tag"
|
||||
|
||||
#: apps/transactions/forms.py:854
|
||||
#: apps/transactions/forms.py:849
|
||||
msgid "Entity name"
|
||||
msgstr "Nome da entidade"
|
||||
|
||||
#: apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:881
|
||||
msgid "Category name"
|
||||
msgstr "Nome da Categoria"
|
||||
|
||||
#: apps/transactions/forms.py:888
|
||||
#: apps/transactions/forms.py:883
|
||||
msgid "Muted categories won't be displayed on monthly summaries"
|
||||
msgstr "Categorias silenciadas não apareceram nos sumários mensais"
|
||||
|
||||
#: apps/transactions/forms.py:1046
|
||||
#: apps/transactions/forms.py:1041
|
||||
msgid "future transactions"
|
||||
msgstr "transações futuras"
|
||||
|
||||
#: apps/transactions/forms.py:1076
|
||||
#: apps/transactions/forms.py:1071
|
||||
msgid "End date should be after the start date"
|
||||
msgstr "Data final deve ser após data inicial"
|
||||
|
||||
@@ -1701,11 +1704,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr "Parcelamento apagado com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:170
|
||||
msgid "Item added successfully"
|
||||
msgstr "Item adicionado com sucesso"
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
|
||||
msgid "Item updated successfully"
|
||||
msgstr "Item atualizado com sucesso"
|
||||
|
||||
@@ -1984,7 +1987,7 @@ msgstr "Editar grupo de conta"
|
||||
#: templates/account_groups/fragments/list.html:32
|
||||
#: templates/accounts/fragments/list.html:37
|
||||
#: templates/categories/fragments/table.html:24
|
||||
#: templates/currencies/fragments/list.html:33
|
||||
#: templates/currencies/fragments/list.html:34
|
||||
#: templates/dca/fragments/strategy/details.html:63
|
||||
#: templates/entities/fragments/table.html:23
|
||||
#: templates/exchange_rates/fragments/table.html:19
|
||||
@@ -2005,7 +2008,7 @@ msgstr "Ações"
|
||||
#: templates/categories/fragments/table.html:29
|
||||
#: templates/cotton/transaction/item.html:129
|
||||
#: templates/cotton/ui/transactions_action_bar.html:52
|
||||
#: templates/currencies/fragments/list.html:37
|
||||
#: templates/currencies/fragments/list.html:38
|
||||
#: templates/dca/fragments/strategy/details.html:67
|
||||
#: templates/dca/fragments/strategy/list.html:36
|
||||
#: templates/entities/fragments/table.html:28
|
||||
@@ -2031,7 +2034,7 @@ msgstr "Editar"
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
#: templates/currencies/fragments/list.html:45
|
||||
#: templates/dca/fragments/strategy/details.html:75
|
||||
#: templates/dca/fragments/strategy/list.html:44
|
||||
#: templates/entities/fragments/table.html:36
|
||||
@@ -2058,7 +2061,7 @@ msgstr "Apagar"
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/dca/fragments/strategy/details.html:80
|
||||
#: templates/dca/fragments/strategy/list.html:48
|
||||
#: templates/entities/fragments/table.html:40
|
||||
@@ -2088,7 +2091,7 @@ msgstr "Tem certeza?"
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:81
|
||||
#: templates/dca/fragments/strategy/list.html:49
|
||||
#: templates/entities/fragments/table.html:41
|
||||
@@ -2108,7 +2111,7 @@ msgstr "Você não será capaz de reverter isso!"
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/currencies/fragments/list.html:51
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
#: templates/entities/fragments/table.html:42
|
||||
@@ -2254,7 +2257,7 @@ msgid "Muted"
|
||||
msgstr "Silenciada"
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:540
|
||||
msgid "No categories"
|
||||
msgstr "Nenhum categoria"
|
||||
|
||||
@@ -2455,7 +2458,7 @@ msgstr "Editar moeda"
|
||||
msgid "Code"
|
||||
msgstr "Código"
|
||||
|
||||
#: templates/currencies/fragments/list.html:61
|
||||
#: templates/currencies/fragments/list.html:63
|
||||
msgid "No currencies"
|
||||
msgstr "Nenhuma moeda"
|
||||
|
||||
@@ -2917,7 +2920,7 @@ msgstr "Total final"
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:517
|
||||
msgid "Final Total"
|
||||
msgstr "Total Final"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"POT-Creation-Date: 2025-08-30 02:09+0000\n"
|
||||
"PO-Revision-Date: 2025-04-14 06:16+0000\n"
|
||||
"Last-Translator: Emil <emil.bjorkroth@gmail.com>\n"
|
||||
"Language-Team: Swedish <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -19,32 +19,32 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.10.4\n"
|
||||
|
||||
#: apps/accounts/forms.py:24
|
||||
#: apps/accounts/forms.py:26
|
||||
msgid "Group name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/accounts/forms.py:42 apps/accounts/forms.py:118
|
||||
#: apps/currencies/forms.py:55 apps/currencies/forms.py:93
|
||||
#: apps/currencies/forms.py:146 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
|
||||
#: apps/transactions/forms.py:788 apps/transactions/forms.py:831
|
||||
#: apps/transactions/forms.py:863 apps/transactions/forms.py:898
|
||||
#: apps/transactions/forms.py:1052 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Uppdatera"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/accounts/forms.py:50 apps/accounts/forms.py:126
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:63
|
||||
#: apps/currencies/forms.py:101 apps/currencies/forms.py:154
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/transactions/forms.py:378 apps/transactions/forms.py:796
|
||||
#: apps/transactions/forms.py:839 apps/transactions/forms.py:871
|
||||
#: apps/transactions/forms.py:906 apps/transactions/forms.py:1060
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
@@ -66,34 +66,34 @@ msgstr "Uppdatera"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
|
||||
#: apps/accounts/forms.py:59 templates/accounts/fragments/list.html:26
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:115
|
||||
#: apps/accounts/forms.py:135
|
||||
msgid "New balance"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/accounts/forms.py:141 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
|
||||
#: apps/rules/models.py:38 apps/rules/models.py:286
|
||||
#: apps/transactions/forms.py:42 apps/transactions/forms.py:256
|
||||
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/forms.py:450 apps/transactions/forms.py:457
|
||||
#: apps/transactions/forms.py:669 apps/transactions/forms.py:930
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:530
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/accounts/forms.py:148 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
|
||||
#: apps/transactions/forms.py:662 apps/transactions/forms.py:923
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
@@ -132,7 +132,7 @@ msgstr ""
|
||||
msgid "Account Groups"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:39
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:44
|
||||
#: templates/accounts/fragments/list.html:27
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:18
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:20
|
||||
@@ -157,8 +157,10 @@ msgid ""
|
||||
"Asset accounts count towards your Net Worth, but not towards your month."
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:62 templates/accounts/fragments/list.html:30
|
||||
#: apps/accounts/models.py:62 apps/currencies/models.py:37
|
||||
#: templates/accounts/fragments/list.html:30
|
||||
#: templates/categories/fragments/list.html:24
|
||||
#: templates/currencies/fragments/list.html:27
|
||||
#: templates/entities/fragments/list.html:24
|
||||
#: templates/tags/fragments/list.html:24
|
||||
msgid "Archived"
|
||||
@@ -171,7 +173,7 @@ msgstr ""
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
#: apps/transactions/forms.py:654 apps/transactions/forms.py:915
|
||||
#: apps/transactions/models.py:290 apps/transactions/models.py:461
|
||||
#: apps/transactions/models.py:683 apps/transactions/models.py:925
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
@@ -487,9 +489,9 @@ msgstr ""
|
||||
msgid "Suffix"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/currencies/forms.py:71 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:478
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/dca/fragments/strategy/details.html:52
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
@@ -509,7 +511,7 @@ msgstr ""
|
||||
msgid "Decimal Places"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:40 apps/export_app/forms.py:26
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:26
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
@@ -521,63 +523,63 @@ msgstr ""
|
||||
msgid "Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:49
|
||||
#: apps/currencies/models.py:54
|
||||
msgid "Currency cannot have itself as exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:60
|
||||
#: apps/currencies/models.py:65
|
||||
msgid "From Currency"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:66
|
||||
#: apps/currencies/models.py:71
|
||||
msgid "To Currency"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:74 apps/currencies/models.py:81
|
||||
msgid "Exchange Rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:71
|
||||
#: apps/currencies/models.py:76
|
||||
msgid "Date and Time"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/currencies/models.py:78 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:82 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:94
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:110
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:114
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:118 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -586,77 +588,77 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:123
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:129
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:141
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:143
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:146
|
||||
#: apps/currencies/models.py:151
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:153
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:160
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:168
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:169
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:221
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:230
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:244
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:250
|
||||
#: apps/currencies/models.py:255
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -706,11 +708,11 @@ msgstr ""
|
||||
msgid "Create transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
|
||||
msgid "From Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
|
||||
msgid "To Account"
|
||||
msgstr ""
|
||||
|
||||
@@ -735,7 +737,7 @@ msgstr ""
|
||||
msgid "You must provide an account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:605
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:600
|
||||
msgid "From and To accounts must be different."
|
||||
msgstr ""
|
||||
|
||||
@@ -754,7 +756,7 @@ msgstr ""
|
||||
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
|
||||
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
|
||||
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
|
||||
#: apps/transactions/forms.py:494 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:510 apps/transactions/models.py:711
|
||||
#: apps/transactions/models.py:947
|
||||
msgid "Notes"
|
||||
@@ -839,7 +841,7 @@ msgstr ""
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/forms.py:677 apps/transactions/forms.py:938
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
@@ -1014,8 +1016,8 @@ msgstr ""
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
#: templates/insights/fragments/category_overview/index.html:395
|
||||
#: templates/insights/fragments/category_overview/index.html:424
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1115,7 +1117,7 @@ msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
|
||||
#: apps/rules/models.py:258 apps/transactions/forms.py:70
|
||||
#: apps/transactions/forms.py:486 apps/transactions/forms.py:688
|
||||
#: apps/transactions/forms.py:481 apps/transactions/forms.py:683
|
||||
#: apps/transactions/models.py:301 apps/transactions/models.py:484
|
||||
#: apps/transactions/models.py:713
|
||||
msgid "Reference Date"
|
||||
@@ -1133,7 +1135,7 @@ msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:36 apps/rules/models.py:266
|
||||
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
|
||||
#: apps/transactions/forms.py:485 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:468 apps/transactions/models.py:697
|
||||
#: apps/transactions/models.py:945
|
||||
msgid "Description"
|
||||
@@ -1326,6 +1328,7 @@ msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: templates/insights/fragments/category_overview/index.html:274
|
||||
msgid "No entity"
|
||||
msgstr ""
|
||||
|
||||
@@ -1341,50 +1344,50 @@ msgstr ""
|
||||
msgid "Save and add another"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:506
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:501
|
||||
msgid "Muted transactions won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:442
|
||||
#: apps/transactions/forms.py:437
|
||||
msgid "From Amount"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:442
|
||||
msgid "To Amount"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:503 apps/transactions/models.py:211
|
||||
#: apps/transactions/forms.py:498 apps/transactions/models.py:211
|
||||
#: apps/transactions/models.py:302 apps/transactions/models.py:935
|
||||
msgid "Mute"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:567
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:40
|
||||
#: templates/cotton/ui/transactions_fab.html:44
|
||||
msgid "Transfer"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:822
|
||||
#: apps/transactions/forms.py:817
|
||||
msgid "Tag name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:854
|
||||
#: apps/transactions/forms.py:849
|
||||
msgid "Entity name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:881
|
||||
msgid "Category name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:888
|
||||
#: apps/transactions/forms.py:883
|
||||
msgid "Muted categories won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:1046
|
||||
#: apps/transactions/forms.py:1041
|
||||
msgid "future transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:1076
|
||||
#: apps/transactions/forms.py:1071
|
||||
msgid "End date should be after the start date"
|
||||
msgstr ""
|
||||
|
||||
@@ -1672,11 +1675,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:170
|
||||
msgid "Item added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
|
||||
msgid "Item updated successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1946,7 +1949,7 @@ msgstr ""
|
||||
#: templates/account_groups/fragments/list.html:32
|
||||
#: templates/accounts/fragments/list.html:37
|
||||
#: templates/categories/fragments/table.html:24
|
||||
#: templates/currencies/fragments/list.html:33
|
||||
#: templates/currencies/fragments/list.html:34
|
||||
#: templates/dca/fragments/strategy/details.html:63
|
||||
#: templates/entities/fragments/table.html:23
|
||||
#: templates/exchange_rates/fragments/table.html:19
|
||||
@@ -1967,7 +1970,7 @@ msgstr ""
|
||||
#: templates/categories/fragments/table.html:29
|
||||
#: templates/cotton/transaction/item.html:129
|
||||
#: templates/cotton/ui/transactions_action_bar.html:52
|
||||
#: templates/currencies/fragments/list.html:37
|
||||
#: templates/currencies/fragments/list.html:38
|
||||
#: templates/dca/fragments/strategy/details.html:67
|
||||
#: templates/dca/fragments/strategy/list.html:36
|
||||
#: templates/entities/fragments/table.html:28
|
||||
@@ -1993,7 +1996,7 @@ msgstr ""
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
#: templates/currencies/fragments/list.html:45
|
||||
#: templates/dca/fragments/strategy/details.html:75
|
||||
#: templates/dca/fragments/strategy/list.html:44
|
||||
#: templates/entities/fragments/table.html:36
|
||||
@@ -2020,7 +2023,7 @@ msgstr ""
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/dca/fragments/strategy/details.html:80
|
||||
#: templates/dca/fragments/strategy/list.html:48
|
||||
#: templates/entities/fragments/table.html:40
|
||||
@@ -2050,7 +2053,7 @@ msgstr ""
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:81
|
||||
#: templates/dca/fragments/strategy/list.html:49
|
||||
#: templates/entities/fragments/table.html:41
|
||||
@@ -2070,7 +2073,7 @@ msgstr ""
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/currencies/fragments/list.html:51
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
#: templates/entities/fragments/table.html:42
|
||||
@@ -2216,7 +2219,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:540
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2417,7 +2420,7 @@ msgstr ""
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#: templates/currencies/fragments/list.html:61
|
||||
#: templates/currencies/fragments/list.html:63
|
||||
msgid "No currencies"
|
||||
msgstr ""
|
||||
|
||||
@@ -2870,7 +2873,7 @@ msgstr ""
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:517
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-08-22 20:16+0000\n"
|
||||
"POT-Creation-Date: 2025-08-30 02:09+0000\n"
|
||||
"PO-Revision-Date: 2025-05-12 14:16+0000\n"
|
||||
"Last-Translator: Felix <xnovaua@gmail.com>\n"
|
||||
"Language-Team: Ukrainian <https://translations.herculino.com/projects/"
|
||||
@@ -20,32 +20,32 @@ msgstr ""
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.11.3\n"
|
||||
|
||||
#: apps/accounts/forms.py:24
|
||||
#: apps/accounts/forms.py:26
|
||||
msgid "Group name"
|
||||
msgstr "Назва групи"
|
||||
|
||||
#: apps/accounts/forms.py:40 apps/accounts/forms.py:98
|
||||
#: apps/currencies/forms.py:53 apps/currencies/forms.py:91
|
||||
#: apps/currencies/forms.py:144 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/accounts/forms.py:42 apps/accounts/forms.py:118
|
||||
#: apps/currencies/forms.py:55 apps/currencies/forms.py:93
|
||||
#: apps/currencies/forms.py:146 apps/dca/forms.py:49 apps/dca/forms.py:224
|
||||
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
|
||||
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
|
||||
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
|
||||
#: apps/transactions/forms.py:793 apps/transactions/forms.py:836
|
||||
#: apps/transactions/forms.py:868 apps/transactions/forms.py:903
|
||||
#: apps/transactions/forms.py:1057 apps/users/forms.py:217
|
||||
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
|
||||
#: apps/transactions/forms.py:788 apps/transactions/forms.py:831
|
||||
#: apps/transactions/forms.py:863 apps/transactions/forms.py:898
|
||||
#: apps/transactions/forms.py:1052 apps/users/forms.py:217
|
||||
#: apps/users/forms.py:379
|
||||
msgid "Update"
|
||||
msgstr "Оновлення"
|
||||
|
||||
#: apps/accounts/forms.py:48 apps/accounts/forms.py:106
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:61
|
||||
#: apps/currencies/forms.py:99 apps/currencies/forms.py:152
|
||||
#: apps/accounts/forms.py:50 apps/accounts/forms.py:126
|
||||
#: apps/common/widgets/tom_select.py:13 apps/currencies/forms.py:63
|
||||
#: apps/currencies/forms.py:101 apps/currencies/forms.py:154
|
||||
#: apps/dca/forms.py:57 apps/dca/forms.py:232 apps/import_app/forms.py:42
|
||||
#: apps/rules/forms.py:59 apps/rules/forms.py:101 apps/rules/forms.py:373
|
||||
#: apps/transactions/forms.py:189 apps/transactions/forms.py:213
|
||||
#: apps/transactions/forms.py:383 apps/transactions/forms.py:801
|
||||
#: apps/transactions/forms.py:844 apps/transactions/forms.py:876
|
||||
#: apps/transactions/forms.py:911 apps/transactions/forms.py:1065
|
||||
#: apps/transactions/forms.py:378 apps/transactions/forms.py:796
|
||||
#: apps/transactions/forms.py:839 apps/transactions/forms.py:871
|
||||
#: apps/transactions/forms.py:906 apps/transactions/forms.py:1060
|
||||
#: apps/users/forms.py:225 apps/users/forms.py:387
|
||||
#: templates/account_groups/fragments/list.html:9
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
@@ -67,34 +67,34 @@ msgstr "Оновлення"
|
||||
msgid "Add"
|
||||
msgstr "Додати"
|
||||
|
||||
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
|
||||
#: apps/accounts/forms.py:59 templates/accounts/fragments/list.html:26
|
||||
msgid "Group"
|
||||
msgstr "Група"
|
||||
|
||||
#: apps/accounts/forms.py:115
|
||||
#: apps/accounts/forms.py:135
|
||||
msgid "New balance"
|
||||
msgstr "Новий баланс"
|
||||
|
||||
#: apps/accounts/forms.py:121 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/accounts/forms.py:141 apps/dca/forms.py:85 apps/dca/forms.py:92
|
||||
#: apps/insights/forms.py:118 apps/rules/forms.py:174 apps/rules/forms.py:189
|
||||
#: apps/rules/models.py:38 apps/rules/models.py:286
|
||||
#: apps/transactions/forms.py:42 apps/transactions/forms.py:256
|
||||
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
|
||||
#: apps/transactions/forms.py:674 apps/transactions/forms.py:935
|
||||
#: apps/transactions/forms.py:450 apps/transactions/forms.py:457
|
||||
#: apps/transactions/forms.py:669 apps/transactions/forms.py:930
|
||||
#: apps/transactions/models.py:318 apps/transactions/models.py:501
|
||||
#: apps/transactions/models.py:701 apps/transactions/models.py:951
|
||||
#: templates/insights/fragments/category_overview/index.html:78
|
||||
#: templates/insights/fragments/category_overview/index.html:528
|
||||
#: templates/insights/fragments/category_overview/index.html:530
|
||||
msgid "Category"
|
||||
msgstr "Категорія"
|
||||
|
||||
#: apps/accounts/forms.py:128 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/accounts/forms.py:148 apps/dca/forms.py:101 apps/dca/forms.py:109
|
||||
#: apps/export_app/forms.py:44 apps/export_app/forms.py:135
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:290 apps/transactions/filters.py:69
|
||||
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
|
||||
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
|
||||
#: apps/transactions/forms.py:667 apps/transactions/forms.py:928
|
||||
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
|
||||
#: apps/transactions/forms.py:662 apps/transactions/forms.py:923
|
||||
#: apps/transactions/models.py:324 apps/transactions/models.py:503
|
||||
#: apps/transactions/models.py:705 apps/transactions/models.py:957
|
||||
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
|
||||
@@ -133,7 +133,7 @@ msgstr "Група рахунків"
|
||||
msgid "Account Groups"
|
||||
msgstr "Групи рахунків"
|
||||
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:39
|
||||
#: apps/accounts/models.py:39 apps/currencies/models.py:44
|
||||
#: templates/accounts/fragments/list.html:27
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:18
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:20
|
||||
@@ -159,8 +159,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Рахунки активів враховуються у вашій чистій вартості, але не у вашому місяці."
|
||||
|
||||
#: apps/accounts/models.py:62 templates/accounts/fragments/list.html:30
|
||||
#: apps/accounts/models.py:62 apps/currencies/models.py:37
|
||||
#: templates/accounts/fragments/list.html:30
|
||||
#: templates/categories/fragments/list.html:24
|
||||
#: templates/currencies/fragments/list.html:27
|
||||
#: templates/entities/fragments/list.html:24
|
||||
#: templates/tags/fragments/list.html:24
|
||||
msgid "Archived"
|
||||
@@ -175,7 +177,7 @@ msgstr ""
|
||||
#: apps/accounts/models.py:75 apps/rules/forms.py:166 apps/rules/forms.py:179
|
||||
#: apps/rules/models.py:30 apps/rules/models.py:242
|
||||
#: apps/transactions/forms.py:62 apps/transactions/forms.py:276
|
||||
#: apps/transactions/forms.py:659 apps/transactions/forms.py:920
|
||||
#: apps/transactions/forms.py:654 apps/transactions/forms.py:915
|
||||
#: apps/transactions/models.py:290 apps/transactions/models.py:461
|
||||
#: apps/transactions/models.py:683 apps/transactions/models.py:925
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
@@ -502,9 +504,9 @@ msgstr "Префікс"
|
||||
msgid "Suffix"
|
||||
msgstr "Суфікс"
|
||||
|
||||
#: apps/currencies/forms.py:69 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/currencies/forms.py:71 apps/dca/models.py:158 apps/rules/forms.py:169
|
||||
#: apps/rules/forms.py:182 apps/rules/models.py:33 apps/rules/models.py:254
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
|
||||
#: apps/transactions/forms.py:66 apps/transactions/forms.py:478
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/dca/fragments/strategy/details.html:52
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
@@ -524,7 +526,7 @@ msgstr "Назва валюти"
|
||||
msgid "Decimal Places"
|
||||
msgstr "Десяткові знаки"
|
||||
|
||||
#: apps/currencies/models.py:40 apps/export_app/forms.py:26
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:26
|
||||
#: apps/export_app/forms.py:133 apps/transactions/filters.py:60
|
||||
#: templates/currencies/fragments/list.html:5
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/navbar.html:125
|
||||
@@ -536,63 +538,63 @@ msgstr "Десяткові знаки"
|
||||
msgid "Currencies"
|
||||
msgstr "Валюти"
|
||||
|
||||
#: apps/currencies/models.py:49
|
||||
#: apps/currencies/models.py:54
|
||||
msgid "Currency cannot have itself as exchange currency."
|
||||
msgstr "Валюта не може бути валютою обміну."
|
||||
|
||||
#: apps/currencies/models.py:60
|
||||
#: apps/currencies/models.py:65
|
||||
msgid "From Currency"
|
||||
msgstr "З валюти"
|
||||
|
||||
#: apps/currencies/models.py:66
|
||||
#: apps/currencies/models.py:71
|
||||
msgid "To Currency"
|
||||
msgstr "У валюту"
|
||||
|
||||
#: apps/currencies/models.py:69 apps/currencies/models.py:76
|
||||
#: apps/currencies/models.py:74 apps/currencies/models.py:81
|
||||
msgid "Exchange Rate"
|
||||
msgstr "Обмінний курс"
|
||||
|
||||
#: apps/currencies/models.py:71
|
||||
#: apps/currencies/models.py:76
|
||||
msgid "Date and Time"
|
||||
msgstr "Дата і час"
|
||||
|
||||
#: apps/currencies/models.py:73 apps/users/models.py:12
|
||||
#: apps/currencies/models.py:78 apps/users/models.py:12
|
||||
#: apps/users/models.py:497
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:77 apps/export_app/forms.py:68
|
||||
#: apps/currencies/models.py:82 apps/export_app/forms.py:68
|
||||
#: apps/export_app/forms.py:145 templates/exchange_rates/fragments/list.html:6
|
||||
#: templates/exchange_rates/pages/index.html:4
|
||||
#: templates/includes/navbar.html:129 templates/includes/sidebar.html:226
|
||||
msgid "Exchange Rates"
|
||||
msgstr "Обмінні курси"
|
||||
|
||||
#: apps/currencies/models.py:89
|
||||
#: apps/currencies/models.py:94
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr "Валюти «Від» і «До» не можуть бути однаковими."
|
||||
|
||||
#: apps/currencies/models.py:105
|
||||
#: apps/currencies/models.py:110
|
||||
msgid "On"
|
||||
msgstr "On"
|
||||
|
||||
#: apps/currencies/models.py:106
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "Every X hours"
|
||||
msgstr "Кожні Х годин"
|
||||
|
||||
#: apps/currencies/models.py:107
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Not on"
|
||||
msgstr "Not on"
|
||||
|
||||
#: apps/currencies/models.py:109
|
||||
#: apps/currencies/models.py:114
|
||||
msgid "Service Name"
|
||||
msgstr "Назва сервісу"
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:116
|
||||
msgid "Service Type"
|
||||
msgstr "Тип сервісу"
|
||||
|
||||
#: apps/currencies/models.py:113 apps/transactions/models.py:214
|
||||
#: apps/currencies/models.py:118 apps/transactions/models.py:214
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:262
|
||||
#: templates/categories/fragments/list.html:21
|
||||
#: templates/entities/fragments/list.html:21
|
||||
@@ -601,79 +603,79 @@ msgstr "Тип сервісу"
|
||||
msgid "Active"
|
||||
msgstr "Активний"
|
||||
|
||||
#: apps/currencies/models.py:118
|
||||
#: apps/currencies/models.py:123
|
||||
msgid "API Key"
|
||||
msgstr "Ключ API"
|
||||
|
||||
#: apps/currencies/models.py:119
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr "API-ключ для сервісу (якщо потрібно)"
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:129
|
||||
msgid "Interval Type"
|
||||
msgstr "Тип інтервалу"
|
||||
|
||||
#: apps/currencies/models.py:128
|
||||
#: apps/currencies/models.py:133
|
||||
msgid "Interval"
|
||||
msgstr "Інтервал"
|
||||
|
||||
#: apps/currencies/models.py:131
|
||||
#: apps/currencies/models.py:136
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr "Остання успішна вибірка"
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:141
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:138
|
||||
#: apps/currencies/models.py:143
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:146
|
||||
#: apps/currencies/models.py:151
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:148
|
||||
#: apps/currencies/models.py:153
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:160
|
||||
#, fuzzy
|
||||
#| msgid "Exchange Rate"
|
||||
msgid "Single exchange rate"
|
||||
msgstr "Обмінний курс"
|
||||
|
||||
#: apps/currencies/models.py:158
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:163
|
||||
#: apps/currencies/models.py:168
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:164
|
||||
#: apps/currencies/models.py:169
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:216
|
||||
#: apps/currencies/models.py:221
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:225
|
||||
#: apps/currencies/models.py:230
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:239
|
||||
#: apps/currencies/models.py:244
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:250
|
||||
#: apps/currencies/models.py:255
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -723,11 +725,11 @@ msgstr ""
|
||||
msgid "Create transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
|
||||
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
|
||||
msgid "From Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
|
||||
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
|
||||
msgid "To Account"
|
||||
msgstr ""
|
||||
|
||||
@@ -752,7 +754,7 @@ msgstr ""
|
||||
msgid "You must provide an account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:605
|
||||
#: apps/dca/forms.py:312 apps/transactions/forms.py:600
|
||||
msgid "From and To accounts must be different."
|
||||
msgstr ""
|
||||
|
||||
@@ -771,7 +773,7 @@ msgstr ""
|
||||
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:173
|
||||
#: apps/rules/forms.py:188 apps/rules/models.py:37 apps/rules/models.py:270
|
||||
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
|
||||
#: apps/transactions/forms.py:494 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:510 apps/transactions/models.py:711
|
||||
#: apps/transactions/models.py:947
|
||||
msgid "Notes"
|
||||
@@ -856,7 +858,7 @@ msgstr ""
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:187 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:282 apps/transactions/filters.py:74
|
||||
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
|
||||
#: apps/transactions/forms.py:682 apps/transactions/forms.py:943
|
||||
#: apps/transactions/forms.py:677 apps/transactions/forms.py:938
|
||||
#: apps/transactions/models.py:273 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:506 apps/transactions/models.py:708
|
||||
#: apps/transactions/models.py:962 templates/entities/fragments/list.html:5
|
||||
@@ -1031,8 +1033,8 @@ msgstr ""
|
||||
#: apps/insights/forms.py:119 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:189
|
||||
#: templates/insights/fragments/category_overview/index.html:88
|
||||
#: templates/insights/fragments/category_overview/index.html:393
|
||||
#: templates/insights/fragments/category_overview/index.html:422
|
||||
#: templates/insights/fragments/category_overview/index.html:395
|
||||
#: templates/insights/fragments/category_overview/index.html:424
|
||||
msgid "Uncategorized"
|
||||
msgstr ""
|
||||
|
||||
@@ -1132,7 +1134,7 @@ msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:170 apps/rules/forms.py:183 apps/rules/models.py:34
|
||||
#: apps/rules/models.py:258 apps/transactions/forms.py:70
|
||||
#: apps/transactions/forms.py:486 apps/transactions/forms.py:688
|
||||
#: apps/transactions/forms.py:481 apps/transactions/forms.py:683
|
||||
#: apps/transactions/models.py:301 apps/transactions/models.py:484
|
||||
#: apps/transactions/models.py:713
|
||||
msgid "Reference Date"
|
||||
@@ -1150,7 +1152,7 @@ msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:172 apps/rules/forms.py:185 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:36 apps/rules/models.py:266
|
||||
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
|
||||
#: apps/transactions/forms.py:485 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:468 apps/transactions/models.py:697
|
||||
#: apps/transactions/models.py:945
|
||||
msgid "Description"
|
||||
@@ -1345,6 +1347,7 @@ msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: templates/insights/fragments/category_overview/index.html:274
|
||||
msgid "No entity"
|
||||
msgstr ""
|
||||
|
||||
@@ -1360,50 +1363,50 @@ msgstr ""
|
||||
msgid "Save and add another"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:506
|
||||
#: apps/transactions/forms.py:300 apps/transactions/forms.py:501
|
||||
msgid "Muted transactions won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:442
|
||||
#: apps/transactions/forms.py:437
|
||||
msgid "From Amount"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:442
|
||||
msgid "To Amount"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:503 apps/transactions/models.py:211
|
||||
#: apps/transactions/forms.py:498 apps/transactions/models.py:211
|
||||
#: apps/transactions/models.py:302 apps/transactions/models.py:935
|
||||
msgid "Mute"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:567
|
||||
#: templates/cotton/ui/quick_transactions_buttons.html:40
|
||||
#: templates/cotton/ui/transactions_fab.html:44
|
||||
msgid "Transfer"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:822
|
||||
#: apps/transactions/forms.py:817
|
||||
msgid "Tag name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:854
|
||||
#: apps/transactions/forms.py:849
|
||||
msgid "Entity name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:881
|
||||
msgid "Category name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:888
|
||||
#: apps/transactions/forms.py:883
|
||||
msgid "Muted categories won't be displayed on monthly summaries"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:1046
|
||||
#: apps/transactions/forms.py:1041
|
||||
msgid "future transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/forms.py:1076
|
||||
#: apps/transactions/forms.py:1071
|
||||
msgid "End date should be after the start date"
|
||||
msgstr ""
|
||||
|
||||
@@ -1691,11 +1694,11 @@ msgid "Installment Plan deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:45
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:167
|
||||
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:170
|
||||
msgid "Item added successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:199
|
||||
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
|
||||
msgid "Item updated successfully"
|
||||
msgstr ""
|
||||
|
||||
@@ -1967,7 +1970,7 @@ msgstr ""
|
||||
#: templates/account_groups/fragments/list.html:32
|
||||
#: templates/accounts/fragments/list.html:37
|
||||
#: templates/categories/fragments/table.html:24
|
||||
#: templates/currencies/fragments/list.html:33
|
||||
#: templates/currencies/fragments/list.html:34
|
||||
#: templates/dca/fragments/strategy/details.html:63
|
||||
#: templates/entities/fragments/table.html:23
|
||||
#: templates/exchange_rates/fragments/table.html:19
|
||||
@@ -1988,7 +1991,7 @@ msgstr ""
|
||||
#: templates/categories/fragments/table.html:29
|
||||
#: templates/cotton/transaction/item.html:129
|
||||
#: templates/cotton/ui/transactions_action_bar.html:52
|
||||
#: templates/currencies/fragments/list.html:37
|
||||
#: templates/currencies/fragments/list.html:38
|
||||
#: templates/dca/fragments/strategy/details.html:67
|
||||
#: templates/dca/fragments/strategy/list.html:36
|
||||
#: templates/entities/fragments/table.html:28
|
||||
@@ -2014,7 +2017,7 @@ msgstr ""
|
||||
#: templates/cotton/transaction/item.html:192
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
|
||||
#: templates/cotton/ui/transactions_action_bar.html:90
|
||||
#: templates/currencies/fragments/list.html:44
|
||||
#: templates/currencies/fragments/list.html:45
|
||||
#: templates/dca/fragments/strategy/details.html:75
|
||||
#: templates/dca/fragments/strategy/list.html:44
|
||||
#: templates/entities/fragments/table.html:36
|
||||
@@ -2041,7 +2044,7 @@ msgstr ""
|
||||
#: templates/cotton/transaction/item.html:196
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
|
||||
#: templates/cotton/ui/transactions_action_bar.html:92
|
||||
#: templates/currencies/fragments/list.html:48
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/dca/fragments/strategy/details.html:80
|
||||
#: templates/dca/fragments/strategy/list.html:48
|
||||
#: templates/entities/fragments/table.html:40
|
||||
@@ -2071,7 +2074,7 @@ msgstr ""
|
||||
#: templates/cotton/transaction/item.html:197
|
||||
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
|
||||
#: templates/cotton/ui/transactions_action_bar.html:93
|
||||
#: templates/currencies/fragments/list.html:49
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/dca/fragments/strategy/details.html:81
|
||||
#: templates/dca/fragments/strategy/list.html:49
|
||||
#: templates/entities/fragments/table.html:41
|
||||
@@ -2091,7 +2094,7 @@ msgstr ""
|
||||
#: templates/categories/fragments/table.html:43
|
||||
#: templates/cotton/transaction/item.html:142
|
||||
#: templates/cotton/transaction/item.html:198
|
||||
#: templates/currencies/fragments/list.html:50
|
||||
#: templates/currencies/fragments/list.html:51
|
||||
#: templates/dca/fragments/strategy/details.html:82
|
||||
#: templates/dca/fragments/strategy/list.html:50
|
||||
#: templates/entities/fragments/table.html:42
|
||||
@@ -2237,7 +2240,7 @@ msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: templates/categories/fragments/table.html:75
|
||||
#: templates/insights/fragments/category_overview/index.html:538
|
||||
#: templates/insights/fragments/category_overview/index.html:540
|
||||
msgid "No categories"
|
||||
msgstr ""
|
||||
|
||||
@@ -2438,7 +2441,7 @@ msgstr ""
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#: templates/currencies/fragments/list.html:61
|
||||
#: templates/currencies/fragments/list.html:63
|
||||
msgid "No currencies"
|
||||
msgstr ""
|
||||
|
||||
@@ -2891,7 +2894,7 @@ msgstr ""
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: templates/insights/fragments/category_overview/index.html:515
|
||||
#: templates/insights/fragments/category_overview/index.html:517
|
||||
msgid "Final Total"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
{% load markdown %}
|
||||
{% load i18n %}
|
||||
<div class="transaction {% if transaction.type == "EX" %}expense{% else %}income{% endif %} tw:group/transaction tw:relative tw:hover:z-10">
|
||||
<div
|
||||
class="transaction {% if transaction.type == "EX" %}expense{% else %}income{% endif %} tw:group/transaction tw:relative tw:hover:z-10">
|
||||
<div class="d-flex my-1">
|
||||
{% if not disable_selection %}
|
||||
{% if not disable_selection or not dummy %}
|
||||
<label class="px-3 d-flex align-items-center justify-content-center">
|
||||
<input class="form-check-input" type="checkbox" name="transactions" value="{{ transaction.id }}"
|
||||
id="check-{{ transaction.id }}" aria-label="{% translate 'Select' %}" hx-preserve>
|
||||
@@ -19,9 +20,10 @@
|
||||
<a class="text-decoration-none p-3 tw:text-gray-500!"
|
||||
title="{% if transaction.is_paid %}{% trans 'Paid' %}{% else %}{% trans 'Projected' %}{% endif %}"
|
||||
role="button"
|
||||
{% if not dummy %}
|
||||
hx-get="{% url 'transaction_pay' transaction_id=transaction.id %}"
|
||||
hx-target="closest .transaction"
|
||||
hx-swap="outerHTML">
|
||||
hx-swap="outerHTML"{% endif %}>
|
||||
{% if transaction.is_paid %}<i class="fa-regular fa-circle-check"></i>{% else %}<i
|
||||
class="fa-regular fa-circle"></i>{% endif %}
|
||||
</a>
|
||||
@@ -33,7 +35,8 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-lg col-12 {% if transaction.account.is_untracked_by or transaction.category.mute or transaction.mute %}tw:brightness-80{% endif %}">
|
||||
<div
|
||||
class="col-lg col-12 {% if transaction.account.is_untracked_by or transaction.category.mute or transaction.mute %}tw:brightness-80{% endif %}">
|
||||
{# Date#}
|
||||
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
|
||||
<div class="col-auto pe-1"><i class="fa-solid fa-calendar fa-fw me-1 fa-xs"></i></div>
|
||||
@@ -58,14 +61,20 @@
|
||||
</div>
|
||||
<div class="tw:text-gray-400 tw:text-sm">
|
||||
{# Entities #}
|
||||
{% with transaction.entities.all as entities %}
|
||||
{% if entities %}
|
||||
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
|
||||
<div class="col-auto pe-1"><i class="fa-solid fa-user-group fa-fw me-1 fa-xs"></i></div>
|
||||
<div class="col ps-0">{{ entities|join:", " }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% comment %} First, check for the highest priority: a valid 'overriden_entities' list. {% endcomment %}
|
||||
{% if overriden_entities %}
|
||||
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
|
||||
<div class="col-auto pe-1"><i class="fa-solid fa-user-group fa-fw me-1 fa-xs"></i></div>
|
||||
<div class="col ps-0">{{ overriden_entities|join:", " }}</div>
|
||||
</div>
|
||||
|
||||
{% comment %} If no override, fall back to transaction entities, but ONLY if the transaction has an ID. {% endcomment %}
|
||||
{% elif transaction.id and transaction.entities.all %}
|
||||
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
|
||||
<div class="col-auto pe-1"><i class="fa-solid fa-user-group fa-fw me-1 fa-xs"></i></div>
|
||||
<div class="col ps-0">{{ transaction.entities.all|join:", " }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{# Notes#}
|
||||
{% if transaction.notes %}
|
||||
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
|
||||
@@ -81,17 +90,24 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
{# Tags#}
|
||||
{% with transaction.tags.all as tags %}
|
||||
{% if tags %}
|
||||
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
|
||||
<div class="col-auto pe-1"><i class="fa-solid fa-hashtag fa-fw me-1 fa-xs"></i></div>
|
||||
<div class="col ps-0">{{ tags|join:", " }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% comment %} First, check for the highest priority: a valid 'overriden_tags' list. {% endcomment %}
|
||||
{% if overriden_tags %}
|
||||
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
|
||||
<div class="col-auto pe-1"><i class="fa-solid fa-hashtag fa-fw me-1 fa-xs"></i></div>
|
||||
<div class="col ps-0">{{ overriden_tags|join:", " }}</div>
|
||||
</div>
|
||||
|
||||
{% comment %} If no override, fall back to transaction tags, but ONLY if the transaction has an ID. {% endcomment %}
|
||||
{% elif transaction.id and transaction.tags.all %}
|
||||
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
|
||||
<div class="col-auto pe-1"><i class="fa-solid fa-hashtag fa-fw me-1 fa-xs"></i></div>
|
||||
<div class="col ps-0">{{ transaction.tags.all|join:", " }}</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-auto col-12 text-lg-end align-self-end {% if transaction.account.is_untracked_by or transaction.category.mute or transaction.mute %}tw:brightness-80{% endif %}">
|
||||
<div
|
||||
class="col-lg-auto col-12 text-lg-end align-self-end {% if transaction.account.is_untracked_by or transaction.category.mute or transaction.mute %}tw:brightness-80{% endif %}">
|
||||
<div class="main-amount mb-2 mb-lg-0">
|
||||
<c-amount.display
|
||||
:amount="transaction.amount"
|
||||
@@ -101,107 +117,136 @@
|
||||
color="{% if transaction.type == "EX" %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
</div>
|
||||
{# Exchange Rate#}
|
||||
{% with exchanged=transaction.exchanged_amount %}
|
||||
{% if exchanged %}
|
||||
<div class="exchanged-amount mb-2 mb-lg-0">
|
||||
<c-amount.display
|
||||
:amount="exchanged.amount"
|
||||
:prefix="exchanged.prefix"
|
||||
:suffix="exchanged.suffix"
|
||||
:decimal_places="exchanged.decimal_places"
|
||||
color="grey"></c-amount.display>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% if not dummy %}
|
||||
{% with exchanged=transaction.exchanged_amount %}
|
||||
{% if exchanged %}
|
||||
<div class="exchanged-amount mb-2 mb-lg-0">
|
||||
<c-amount.display
|
||||
:amount="exchanged.amount"
|
||||
:prefix="exchanged.prefix"
|
||||
:suffix="exchanged.suffix"
|
||||
:decimal_places="exchanged.decimal_places"
|
||||
color="grey"></c-amount.display>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% endif %}
|
||||
<div>
|
||||
{% if transaction.account.group %}{{ transaction.account.group.name }} • {% endif %}{{ transaction.account.name }}
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
{# Item actions#}
|
||||
<div
|
||||
class="transaction-actions tw:absolute! tw:left-1/2 tw:top-0 tw:-translate-x-1/2 tw:-translate-y-1/2 tw:invisible tw:group-hover/transaction:visible d-flex flex-row card">
|
||||
<div class="card-body p-1 shadow-lg d-flex flex-row gap-1">
|
||||
{% if not transaction.deleted %}
|
||||
<a class="btn btn-secondary btn-sm transaction-action"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Edit" %}"
|
||||
hx-get="{% url 'transaction_edit' transaction_id=transaction.id %}"
|
||||
hx-target="#generic-offcanvas" hx-swap="innerHTML">
|
||||
<i class="fa-solid fa-pencil fa-fw"></i></a>
|
||||
<a class="btn btn-secondary btn-sm transaction-action"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Delete" %}"
|
||||
hx-delete="{% url 'transaction_delete' transaction_id=transaction.id %}"
|
||||
hx-trigger='confirmed'
|
||||
data-bypass-on-ctrl="true"
|
||||
data-title="{% translate "Are you sure?" %}"
|
||||
data-text="{% translate "You won't be able to revert this!" %}"
|
||||
data-confirm-text="{% translate "Yes, delete it!" %}"
|
||||
_="install prompt_swal"><i class="fa-solid fa-trash fa-fw text-danger"></i>
|
||||
</a>
|
||||
<button class="btn btn-secondary btn-sm transaction-action" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fa-solid fa-ellipsis fa-fw"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-md-start">
|
||||
{% if transaction.account.is_untracked_by %}
|
||||
<li>
|
||||
<a class="dropdown-item disabled d-flex align-items-center" aria-disabled="true">
|
||||
<i class="fa-solid fa-eye fa-fw me-2"></i>
|
||||
<div>
|
||||
{% translate 'Show on summaries' %}
|
||||
<div class="d-block text-body-secondary tw:text-xs tw:font-medium">{% translate 'Controlled by account' %}</div>
|
||||
</div>
|
||||
</a>
|
||||
{% if not dummy %}
|
||||
<div>
|
||||
{# Item actions#}
|
||||
<div
|
||||
class="transaction-actions tw:absolute! tw:left-1/2 tw:top-0 tw:-translate-x-1/2 tw:-translate-y-1/2 tw:invisible tw:group-hover/transaction:visible d-flex flex-row card">
|
||||
<div class="card-body p-1 shadow-lg d-flex flex-row gap-1">
|
||||
{% if not transaction.deleted %}
|
||||
<a class="btn btn-secondary btn-sm transaction-action"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Edit" %}"
|
||||
hx-get="{% url 'transaction_edit' transaction_id=transaction.id %}"
|
||||
hx-target="#generic-offcanvas" hx-swap="innerHTML">
|
||||
<i class="fa-solid fa-pencil fa-fw"></i></a>
|
||||
<a class="btn btn-secondary btn-sm transaction-action"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Delete" %}"
|
||||
hx-delete="{% url 'transaction_delete' transaction_id=transaction.id %}"
|
||||
hx-trigger='confirmed'
|
||||
data-bypass-on-ctrl="true"
|
||||
data-title="{% translate "Are you sure?" %}"
|
||||
data-text="{% translate "You won't be able to revert this!" %}"
|
||||
data-confirm-text="{% translate "Yes, delete it!" %}"
|
||||
_="install prompt_swal"><i class="fa-solid fa-trash fa-fw text-danger"></i>
|
||||
</a>
|
||||
<button class="btn btn-secondary btn-sm transaction-action" type="button" data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
<i class="fa-solid fa-ellipsis fa-fw"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-md-start">
|
||||
{% if transaction.account.is_untracked_by %}
|
||||
<li>
|
||||
<a class="dropdown-item disabled d-flex align-items-center" aria-disabled="true">
|
||||
<i class="fa-solid fa-eye fa-fw me-2"></i>
|
||||
<div>
|
||||
{% translate 'Show on summaries' %}
|
||||
<div
|
||||
class="d-block text-body-secondary tw:text-xs tw:font-medium">{% translate 'Controlled by account' %}</div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
{% elif transaction.category.mute %}
|
||||
<li>
|
||||
<a class="dropdown-item disabled d-flex align-items-center" aria-disabled="true">
|
||||
<i class="fa-solid fa-eye fa-fw me-2"></i>
|
||||
<div>
|
||||
{% translate 'Show on summaries' %}
|
||||
<div
|
||||
class="d-block text-body-secondary tw:text-xs tw:font-medium">{% translate 'Controlled by category' %}</div>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
{% elif transaction.mute %}
|
||||
<li><a class="dropdown-item" href="#"
|
||||
hx-get="{% url 'transaction_mute' transaction_id=transaction.id %}"
|
||||
hx-target="closest .transaction" hx-swap="outerHTML"><i
|
||||
class="fa-solid fa-eye fa-fw me-2"></i>{% translate 'Show on summaries' %}</a></li>
|
||||
{% else %}
|
||||
<li><a class="dropdown-item" href="#"
|
||||
hx-get="{% url 'transaction_mute' transaction_id=transaction.id %}"
|
||||
hx-target="closest .transaction" hx-swap="outerHTML"><i
|
||||
class="fa-solid fa-eye-slash fa-fw me-2"></i>{% translate 'Hide from summaries' %}</a></li>
|
||||
{% endif %}
|
||||
<li><a class="dropdown-item" href="#"
|
||||
hx-get="{% url 'quick_transaction_add_as_quick_transaction' transaction_id=transaction.id %}"><i
|
||||
class="fa-solid fa-person-running fa-fw me-2"></i>{% translate 'Add as quick transaction' %}</a>
|
||||
</li>
|
||||
{% elif transaction.category.mute %}
|
||||
<li>
|
||||
<a class="dropdown-item disabled d-flex align-items-center" aria-disabled="true">
|
||||
<i class="fa-solid fa-eye fa-fw me-2"></i>
|
||||
<div>
|
||||
{% translate 'Show on summaries' %}
|
||||
<div class="d-block text-body-secondary tw:text-xs tw:font-medium">{% translate 'Controlled by category' %}</div>
|
||||
</div>
|
||||
</a>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
{% elif transaction.mute %}
|
||||
<li><a class="dropdown-item" href="#" hx-get="{% url 'transaction_mute' transaction_id=transaction.id %}" hx-target="closest .transaction" hx-swap="outerHTML"><i class="fa-solid fa-eye fa-fw me-2"></i>{% translate 'Show on summaries' %}</a></li>
|
||||
{% else %}
|
||||
<li><a class="dropdown-item" href="#" hx-get="{% url 'transaction_mute' transaction_id=transaction.id %}" hx-target="closest .transaction" hx-swap="outerHTML"><i class="fa-solid fa-eye-slash fa-fw me-2"></i>{% translate 'Hide from summaries' %}</a></li>
|
||||
{% endif %}
|
||||
<li><a class="dropdown-item" href="#" hx-get="{% url 'quick_transaction_add_as_quick_transaction' transaction_id=transaction.id %}"><i class="fa-solid fa-person-running fa-fw me-2"></i>{% translate 'Add as quick transaction' %}</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="#" hx-get="{% url 'transaction_change_month' transaction_id=transaction.id change_type='previous' %}"><i class="fa-solid fa-calendar-minus fa-fw me-2"></i>{% translate 'Move to previous month' %}</a></li>
|
||||
<li><a class="dropdown-item" href="#" hx-get="{% url 'transaction_change_month' transaction_id=transaction.id change_type='next' %}"><i class="fa-solid fa-calendar-plus fa-fw me-2"></i>{% translate 'Move to next month' %}</a></li>
|
||||
<li><a class="dropdown-item" href="#" hx-get="{% url 'transaction_move_to_today' transaction_id=transaction.id %}"><i class="fa-solid fa-calendar-day fa-fw me-2"></i>{% translate 'Move to today' %}</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="#" hx-get="{% url 'transaction_clone' transaction_id=transaction.id %}"><i class="fa-solid fa-clone fa-fw me-2"></i>{% translate 'Duplicate' %}</a></li>
|
||||
</ul>
|
||||
{% else %}
|
||||
<a class="btn btn-secondary btn-sm transaction-action"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Restore" %}"
|
||||
hx-get="{% url 'transaction_undelete' transaction_id=transaction.id %}"><i
|
||||
class="fa-solid fa-trash-arrow-up"></i></a>
|
||||
<a class="btn btn-secondary btn-sm transaction-action"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Delete" %}"
|
||||
hx-delete="{% url 'transaction_delete' transaction_id=transaction.id %}"
|
||||
hx-trigger='confirmed'
|
||||
data-bypass-on-ctrl="true"
|
||||
data-title="{% translate "Are you sure?" %}"
|
||||
data-text="{% translate "You won't be able to revert this!" %}"
|
||||
data-confirm-text="{% translate "Yes, delete it!" %}"
|
||||
_="install prompt_swal"><i class="fa-solid fa-trash fa-fw text-danger"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
<li><a class="dropdown-item" href="#"
|
||||
hx-get="{% url 'transaction_change_month' transaction_id=transaction.id change_type='previous' %}"><i
|
||||
class="fa-solid fa-calendar-minus fa-fw me-2"></i>{% translate 'Move to previous month' %}</a>
|
||||
</li>
|
||||
<li><a class="dropdown-item" href="#"
|
||||
hx-get="{% url 'transaction_change_month' transaction_id=transaction.id change_type='next' %}"><i
|
||||
class="fa-solid fa-calendar-plus fa-fw me-2"></i>{% translate 'Move to next month' %}</a></li>
|
||||
<li><a class="dropdown-item" href="#"
|
||||
hx-get="{% url 'transaction_move_to_today' transaction_id=transaction.id %}"><i
|
||||
class="fa-solid fa-calendar-day fa-fw me-2"></i>{% translate 'Move to today' %}</a></li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li><a class="dropdown-item" href="#"
|
||||
hx-get="{% url 'transaction_clone' transaction_id=transaction.id %}"><i
|
||||
class="fa-solid fa-clone fa-fw me-2"></i>{% translate 'Duplicate' %}</a></li>
|
||||
</ul>
|
||||
{% else %}
|
||||
<a class="btn btn-secondary btn-sm transaction-action"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Restore" %}"
|
||||
hx-get="{% url 'transaction_undelete' transaction_id=transaction.id %}"><i
|
||||
class="fa-solid fa-trash-arrow-up"></i></a>
|
||||
<a class="btn btn-secondary btn-sm transaction-action"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Delete" %}"
|
||||
hx-delete="{% url 'transaction_delete' transaction_id=transaction.id %}"
|
||||
hx-trigger='confirmed'
|
||||
data-bypass-on-ctrl="true"
|
||||
data-title="{% translate "Are you sure?" %}"
|
||||
data-text="{% translate "You won't be able to revert this!" %}"
|
||||
data-confirm-text="{% translate "Yes, delete it!" %}"
|
||||
_="install prompt_swal"><i class="fa-solid fa-trash fa-fw text-danger"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
<th scope="col" class="col-auto"></th>
|
||||
<th scope="col" class="col-auto">{% translate 'Code' %}</th>
|
||||
<th scope="col" class="col">{% translate 'Name' %}</th>
|
||||
<th scope="col" class="col">{% translate 'Archived' %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -53,6 +54,7 @@
|
||||
</td>
|
||||
<td class="col-auto">{{ currency.code }}</td>
|
||||
<td class="col">{{ currency.name }}</td>
|
||||
<td class="col">{% if currency.is_archived %}<i class="fa-solid fa-solid fa-check text-success"></i>{% endif %}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
||||
@@ -268,95 +268,97 @@
|
||||
<!-- Entity rows -->
|
||||
{% if show_entities %}
|
||||
{% for entity_id, entity in tag.entities.items %}
|
||||
<tr class="table-row-nested-2">
|
||||
<td class="ps-5">
|
||||
<i class="fa-solid fa-user-group fa-fw me-2 text-muted"></i>{{ entity.name }}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.income_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.income_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.income_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.income_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_income != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_income"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.expense_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.expense_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.expense_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.expense_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_expense != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_expense"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.total_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.total_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_final != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_final"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% if entity.name or not entity.name and tag.entities.values|length > 1 %}
|
||||
<tr class="table-row-nested-2">
|
||||
<td class="ps-5">
|
||||
<i class="fa-solid fa-user-group fa-fw me-2 text-muted"></i>{% if entity.name %}{{ entity.name }}{% else %}{% trans 'No entity' %}{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.income_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.income_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.income_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.income_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_income != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_income"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="green"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.expense_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.expense_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.expense_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.expense_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_expense != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_expense"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="red"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>
|
||||
{% for currency in entity.currencies.values %}
|
||||
{% if showing == 'current' and currency.total_current != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_current"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% elif showing == 'projected' and currency.total_projected != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_projected"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% elif showing == 'final' and currency.total_final != 0 %}
|
||||
<c-amount.display
|
||||
:amount="currency.total_final"
|
||||
:prefix="currency.currency.prefix"
|
||||
:suffix="currency.currency.suffix"
|
||||
:decimal_places="currency.currency.decimal_places"
|
||||
color="{% if currency.total_final < 0 %}red{% else %}green{% endif %}"></c-amount.display>
|
||||
{% else %}
|
||||
<div>-</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
<tr>
|
||||
<th scope="col" class="col-auto"></th>
|
||||
<th scope="col" class="col-auto"></th>
|
||||
<th scope="col" class="col-auto">{% translate 'Order' %}</th>
|
||||
<th scope="col" class="col">{% translate 'Name' %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -80,6 +81,9 @@
|
||||
<i class="fa-solid fa-toggle-off tw:text-red-400"></i>{% endif %}
|
||||
</a>
|
||||
</td>
|
||||
<td class="col text-center">
|
||||
<div>{{ rule.order }}</div>
|
||||
</td>
|
||||
<td class="col">
|
||||
<div>{{ rule.name }}</div>
|
||||
<div class="tw:text-gray-400">{{ rule.description }}</div>
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{% extends 'extends/offcanvas.html' %}
|
||||
{% load i18n %}
|
||||
{% load crispy_forms_tags %}
|
||||
|
||||
{% block title %}{% translate 'Edit transaction rule' %}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<form hx-post="{% url 'transaction_rule_dry_run_created' pk=rule.id %}" hx-target="#generic-offcanvas"
|
||||
hx-indicator="#dry-run-created-result, closest form" class="show-loading" novalidate>
|
||||
{% crispy form %}
|
||||
</form>
|
||||
<hr>
|
||||
<div id="dry-run-created-result" class="show-loading">
|
||||
{% include 'rules/fragments/transaction_rule/dry_run/visual.html' with logs=logs results=results %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,16 @@
|
||||
{% extends 'extends/offcanvas.html' %}
|
||||
{% load i18n %}
|
||||
{% load crispy_forms_tags %}
|
||||
|
||||
{% block title %}{% translate 'Edit transaction rule' %}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<form hx-post="{% url 'transaction_rule_dry_run_deleted' pk=rule.id %}" hx-target="#generic-offcanvas"
|
||||
hx-indicator="#dry-run-deleted-result, closest form" class="show-loading" novalidate>
|
||||
{% crispy form %}
|
||||
</form>
|
||||
<hr>
|
||||
<div id="dry-run-deleted-result" class="show-loading">
|
||||
{% include 'rules/fragments/transaction_rule/dry_run/visual.html' with logs=logs results=results %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,16 @@
|
||||
{% extends 'extends/offcanvas.html' %}
|
||||
{% load i18n %}
|
||||
{% load crispy_forms_tags %}
|
||||
|
||||
{% block title %}{% translate 'Edit transaction rule' %}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<form hx-post="{% url 'transaction_rule_dry_run_updated' pk=rule.id %}" hx-target="#generic-offcanvas"
|
||||
hx-indicator="#dry-run-updated-result, closest form" class="show-loading" novalidate>
|
||||
{% crispy form %}
|
||||
</form>
|
||||
<hr>
|
||||
<div id="dry-run-updated-result" class="show-loading">
|
||||
{% include 'rules/fragments/transaction_rule/dry_run/visual.html' with logs=logs results=results %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,101 @@
|
||||
{% load i18n %}
|
||||
<div class="card tw:max-h-full tw:overflow-auto tw:overflow-x-auto">
|
||||
<div class="card-header">
|
||||
<ul class="nav nav-tabs card-header-tabs">
|
||||
<li class="nav-item">
|
||||
<button class="nav-link active" id="visual-tab" data-bs-toggle="tab" data-bs-target="#visual-tab-pane"
|
||||
type="button" role="tab" aria-controls="visual-tab-pane"
|
||||
aria-selected="true">{% translate 'Visual' %}</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="logs-tab" data-bs-toggle="tab" data-bs-target="#logs-tab-pane" type="button"
|
||||
role="tab" aria-controls="logs-tab-pane" aria-selected="false">{% translate 'Logs' %}</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="tab-content" id="myTabContent">
|
||||
<div class="tab-pane fade show active" id="visual-tab-pane" role="tabpanel" aria-labelledby="home-tab"
|
||||
tabindex="0">
|
||||
{% if not results %}
|
||||
{% translate 'Run a test to see...' %}
|
||||
{% else %}
|
||||
{% for result in results %}
|
||||
|
||||
{% if result.type == 'header' %}
|
||||
<div class="my-3">
|
||||
<h6 class="text-center mb-3">
|
||||
<span class="badge text-bg-secondary">
|
||||
{% if result.header_type == "edit_transaction" %}
|
||||
{% translate 'Edit transaction' %}
|
||||
{% elif result.header_type == "update_or_create_transaction" %}
|
||||
{% translate 'Update or create transaction' %}
|
||||
{% endif %}
|
||||
</span>
|
||||
</h6>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if result.type == 'triggering_transaction' %}
|
||||
<div class="mt-4">
|
||||
<h6 class="text-center mb-3"><span class="badge text-bg-secondary">{% translate 'Start' %}</span></h6>
|
||||
<c-transaction.item :transaction="result.transaction" :dummy="True"
|
||||
:disable-selection="True"></c-transaction.item>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if result.type == 'edit_transaction' %}
|
||||
<div>
|
||||
<div>
|
||||
{% translate 'Set' %} <span
|
||||
class="badge text-bg-secondary">{{ result.field }}</span> {% translate 'to' %}
|
||||
<span class="badge text-bg-secondary">{{ result.new_value }}</span>
|
||||
</div>
|
||||
<c-transaction.item :transaction="result.transaction" :dummy="True"
|
||||
:disable-selection="True"></c-transaction.item>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if result.type == 'update_or_create_transaction' %}
|
||||
<div>
|
||||
<div class="alert alert-info" role="alert">
|
||||
{% translate 'Search' %}: {{ result.query }}
|
||||
</div>
|
||||
{% if result.start_transaction %}
|
||||
<c-transaction.item :transaction="result.start_transaction" :dummy="True"
|
||||
:disable-selection="True"></c-transaction.item>
|
||||
{% else %}
|
||||
<div class="alert alert-danger" role="alert">
|
||||
{% translate 'No transaction found, a new one will be created' %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="text-center h3 my-2"><i class="fa-solid fa-arrow-down"></i></div>
|
||||
<c-transaction.item :transaction="result.end_transaction" :dummy="True"
|
||||
:disable-selection="True"></c-transaction.item>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if result.type == 'error' %}
|
||||
<div>
|
||||
<div class="alert alert-{% if result.level == 'error' %}danger{% elif result.level == 'warning' %}warning{% else %}info{% endif %}" role="alert">
|
||||
{{ result.error }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="tab-pane fade" id="logs-tab-pane" role="tabpanel" aria-labelledby="logs-tab" tabindex="0">
|
||||
{% if not logs %}
|
||||
{% translate 'Run a test to see...' %}
|
||||
{% else %}
|
||||
<pre>
|
||||
{{ logs|linebreaks }}
|
||||
</pre>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -30,95 +30,128 @@
|
||||
|
||||
<div class="my-3">
|
||||
<div class="tw:text-xl mb-2">{% translate 'Then...' %}</div>
|
||||
{% for action in transaction_rule.transaction_actions.all %}
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<div><span class="badge text-bg-primary">{% trans 'Edit transaction' %}</span></div>
|
||||
{% for action in all_actions %}
|
||||
{% if action.action_type == "edit_transaction" %}
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<div>
|
||||
{% if action.order != 0 %}<span class="badge text-bg-secondary">{{ action.order }}</span>{% endif %}
|
||||
<span class="badge text-bg-primary">{% trans 'Edit transaction' %}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div>
|
||||
{% translate 'Set' %} <span
|
||||
class="badge text-bg-secondary">{{ action.get_field_display }}</span> {% translate 'to' %}
|
||||
</div>
|
||||
<div class="text-bg-secondary rounded-3 mt-3 p-2">{{ action.value }}</div>
|
||||
</div>
|
||||
<div class="card-footer text-end">
|
||||
<a class="text-decoration-none tw:text-gray-400 p-1"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate 'Edit' %}"
|
||||
hx-get="{% url 'transaction_rule_action_edit' transaction_rule_action_id=action.id %}"
|
||||
hx-target="#generic-offcanvas">
|
||||
<i class="fa-solid fa-pencil fa-fw"></i>
|
||||
</a>
|
||||
<a class="text-danger text-decoration-none p-1"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate 'Delete' %}"
|
||||
hx-delete="{% url 'transaction_rule_action_delete' transaction_rule_action_id=action.id %}"
|
||||
hx-trigger='confirmed'
|
||||
data-bypass-on-ctrl="true"
|
||||
data-title="{% translate 'Are you sure?' %}"
|
||||
data-text="{% translate "You won't be able to revert this!" %}"
|
||||
data-confirm-text="{% translate 'Yes, delete it!' %}"
|
||||
_="install prompt_swal">
|
||||
<i class="fa-solid fa-trash fa-fw"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div>{% translate 'Set' %} <span
|
||||
class="badge text-bg-secondary">{{ action.get_field_display }}</span> {% translate 'to' %}</div>
|
||||
<div class="text-bg-secondary rounded-3 mt-3 p-2">{{ action.value }}</div>
|
||||
{% elif action.action_type == "update_or_create_transaction" %}
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<div>
|
||||
{% if action.order != 0 %}<span class="badge text-bg-secondary">{{ action.order }}</span>{% endif %}
|
||||
<span class="badge text-bg-primary">{% trans 'Update or create transaction' %}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div>{% trans 'Edit to view' %}</div>
|
||||
</div>
|
||||
<div class="card-footer text-end">
|
||||
<a class="text-decoration-none tw:text-gray-400 p-1"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate 'Edit' %}"
|
||||
hx-get="{% url 'update_or_create_transaction_rule_action_edit' pk=action.id %}"
|
||||
hx-target="#generic-offcanvas">
|
||||
<i class="fa-solid fa-pencil fa-fw"></i>
|
||||
</a>
|
||||
<a class="text-danger text-decoration-none p-1"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate 'Delete' %}"
|
||||
hx-delete="{% url 'update_or_create_transaction_rule_action_delete' pk=action.id %}"
|
||||
hx-trigger='confirmed'
|
||||
data-bypass-on-ctrl="true"
|
||||
data-title="{% translate 'Are you sure?' %}"
|
||||
data-text="{% translate "You won't be able to revert this!" %}"
|
||||
data-confirm-text="{% translate 'Yes, delete it!' %}"
|
||||
_="install prompt_swal">
|
||||
<i class="fa-solid fa-trash fa-fw"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer text-end">
|
||||
<a class="text-decoration-none tw:text-gray-400 p-1"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Edit" %}"
|
||||
hx-get="{% url 'transaction_rule_action_edit' transaction_rule_action_id=action.id %}"
|
||||
hx-target="#generic-offcanvas">
|
||||
<i class="fa-solid fa-pencil fa-fw"></i>
|
||||
</a>
|
||||
<a class="text-danger text-decoration-none p-1"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Delete" %}"
|
||||
hx-delete="{% url 'transaction_rule_action_delete' transaction_rule_action_id=action.id %}"
|
||||
hx-trigger='confirmed'
|
||||
data-bypass-on-ctrl="true"
|
||||
data-title="{% translate "Are you sure?" %}"
|
||||
data-text="{% translate "You won't be able to revert this!" %}"
|
||||
data-confirm-text="{% translate "Yes, delete it!" %}"
|
||||
_="install prompt_swal">
|
||||
<i class="fa-solid fa-trash fa-fw"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% for action in transaction_rule.update_or_create_transaction_actions.all %}
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">
|
||||
<div><span class="badge text-bg-primary">{% trans 'Update or create transaction' %}</span></div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div>{% trans 'Edit to view' %}</div>
|
||||
</div>
|
||||
<div class="card-footer text-end">
|
||||
<a class="text-decoration-none tw:text-gray-400 p-1"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Edit" %}"
|
||||
hx-get="{% url 'update_or_create_transaction_rule_action_edit' pk=action.id %}"
|
||||
hx-target="#generic-offcanvas">
|
||||
<i class="fa-solid fa-pencil fa-fw"></i>
|
||||
</a>
|
||||
<a class="text-danger text-decoration-none p-1"
|
||||
role="button"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-title="{% translate "Delete" %}"
|
||||
hx-delete="{% url 'update_or_create_transaction_rule_action_delete' pk=action.id %}"
|
||||
hx-trigger='confirmed'
|
||||
data-bypass-on-ctrl="true"
|
||||
data-title="{% translate "Are you sure?" %}"
|
||||
data-text="{% translate "You won't be able to revert this!" %}"
|
||||
data-confirm-text="{% translate "Yes, delete it!" %}"
|
||||
_="install prompt_swal">
|
||||
<i class="fa-solid fa-trash fa-fw"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% if not transaction_rule.update_or_create_transaction_actions.all and not transaction_rule.transaction_actions.all %}
|
||||
{% endif %}
|
||||
{% empty %}
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
{% translate 'This rule has no actions' %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<hr>
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-outline-primary text-decoration-none w-100" type="button" data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
<i class="fa-solid fa-circle-plus me-2"></i>{% translate 'Add new' %}
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end w-100">
|
||||
<li><a class="dropdown-item" role="link"
|
||||
hx-get="{% url 'transaction_rule_action_add' transaction_rule_id=transaction_rule.id %}"
|
||||
hx-target="#generic-offcanvas">{% trans 'Edit Transaction' %}</a></li>
|
||||
<li><a class="dropdown-item" role="link"
|
||||
hx-get="{% url 'update_or_create_transaction_rule_action_add' transaction_rule_id=transaction_rule.id %}"
|
||||
hx-target="#generic-offcanvas">{% trans 'Update or Create Transaction' %}</a></li>
|
||||
</ul>
|
||||
<div class="d-grid d-lg-flex gap-2">
|
||||
<div class="dropdown flex-fill">
|
||||
<button class="btn btn-outline-primary text-decoration-none w-100" type="button" data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
<i class="fa-solid fa-flask-vial me-2"></i>{% translate 'Test' %}
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
{% if transaction_rule.on_create %}
|
||||
<li><a class="dropdown-item" role="link" href="#"
|
||||
hx-get="{% url 'transaction_rule_dry_run_created' pk=transaction_rule.id %}"
|
||||
hx-target="#generic-offcanvas">{% trans 'Create' %}</a></li>
|
||||
{% endif %}
|
||||
{% if transaction_rule.on_update %}
|
||||
<li><a class="dropdown-item" role="link" href="#"
|
||||
hx-get="{% url 'transaction_rule_dry_run_updated' pk=transaction_rule.id %}"
|
||||
hx-target="#generic-offcanvas">{% trans 'Update' %}</a></li>
|
||||
{% endif %}
|
||||
{% if transaction_rule.on_delete %}
|
||||
<li><a class="dropdown-item" role="link" href="#"
|
||||
hx-get="{% url 'transaction_rule_dry_run_deleted' pk=transaction_rule.id %}"
|
||||
hx-target="#generic-offcanvas">{% trans 'Delete' %}</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="dropdown flex-fill">
|
||||
<button class="btn btn-outline-primary text-decoration-none w-100" type="button" data-bs-toggle="dropdown"
|
||||
aria-expanded="false">
|
||||
<i class="fa-solid fa-circle-plus me-2"></i>{% translate 'Add new' %}
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item" role="link" href="#"
|
||||
hx-get="{% url 'transaction_rule_action_add' transaction_rule_id=transaction_rule.id %}"
|
||||
hx-target="#generic-offcanvas">{% trans 'Edit Transaction' %}</a></li>
|
||||
<li><a class="dropdown-item" role="link" href="#"
|
||||
hx-get="{% url 'update_or_create_transaction_rule_action_add' transaction_rule_id=transaction_rule.id %}"
|
||||
hx-target="#generic-offcanvas">{% trans 'Update or Create Transaction' %}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user