Compare commits

...

39 Commits

Author SHA1 Message Date
Herculino Trotta
64b32316ca fix(accounts): unable to update accounts
due to wrong currency queryset
2025-09-08 09:19:17 -03:00
Herculino Trotta
efe020efb3 fix(rules): duplicating transactions when ran outside of test mode 2025-09-07 22:14:40 -03:00
Herculino Trotta
8c133f92ce fix(rules): add .exclude() to transactions() function 2025-09-07 21:30:03 -03:00
Herculino Trotta
f3c9d8faea feat(rules): add .exclude() to transactions() function 2025-09-07 21:24:53 -03:00
Herculino Trotta
8f5204a17b feat(rules): add .exclude() to transactions() function 2025-09-07 20:41:09 -03:00
Herculino Trotta
2235bdeabb changes 2025-09-02 23:17:04 -03:00
Herculino Trotta
d724300513 changes 2025-09-02 15:54:45 -03:00
Herculino Trotta
eacafa1def changes 2025-09-02 09:47:35 -03:00
Herculino Trotta
c738f5ee29 changes 2025-09-02 09:47:27 -03:00
Herculino Trotta
72904266bf feat(rules): add optional rules ordering 2025-08-31 09:06:48 -03:00
Herculino Trotta
670bee4325 feat(rules): add rule function to fetch transactions totals and balance 2025-08-30 15:36:07 -03:00
Herculino Trotta
3e2c1184ce Merge pull request #354
fix(yearly-overview): display total for archived accounts
2025-08-30 11:13:05 -03:00
Herculino Trotta
731f351eef fix(yearly-overview): display total for archived accounts 2025-08-30 11:12:47 -03:00
eitchtee
b7056e7aa1 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-30 02:09:21 +00:00
Herculino Trotta
accceed630 Merge pull request #353
feat(insights:category-overview): add "No entity" totals
2025-08-29 23:08:34 -03:00
Herculino Trotta
76346cb503 feat(insights:category-overview): add "No entity" totals 2025-08-29 23:08:16 -03:00
eitchtee
3df8952ea2 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-30 01:48:37 +00:00
Herculino Trotta
9bd067da96 Merge pull request #352
feat(currencies): allow archiving
2025-08-29 22:47:26 -03:00
Herculino Trotta
1abe9e9f62 feat(currencies): allow archiving 2025-08-29 22:47:00 -03:00
eitchtee
1a86b5dea4 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-28 02:18:45 +00:00
Herculino Trotta
8f2f5a16c2 Merge pull request #349
fix(transactions:quick-transactions): error when saving due to wrong field definition
2025-08-27 23:17:09 -03:00
Herculino Trotta
4565dc770b fix(transactions:quick-transactions): error when saving due to wrong field definition 2025-08-27 23:16:06 -03:00
Herculino Trotta
23673def09 Merge pull request #346
fix(common:tasks): remove_old_jobs always failing
2025-08-24 10:41:48 -03:00
Herculino Trotta
dd2b9ead7e fix(common:tasks): remove_old_jobs always failing 2025-08-24 10:41:26 -03:00
Rhesa Daiva Bremana
2078e9f3e4 locale((Indonesian)): added translation using Weblate 2025-08-23 12:43:54 +00:00
eitchtee
e6bab57ab4 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-22 20:36:08 +00:00
Herculino Trotta
38d50a78f4 Merge pull request #344
fix(sidebar): sidebar status not saving properly
2025-08-22 17:34:42 -03:00
Herculino Trotta
0d947f9ba6 fix(sidebar): sidebar status not saving properly 2025-08-22 17:34:12 -03:00
eitchtee
99c85a56bb chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-22 20:16:36 +00:00
Herculino Trotta
ab1c074f27 Merge pull request #343
feat(sidebar): add button to keep it open
2025-08-22 17:15:55 -03:00
Herculino Trotta
abf3a148cc feat(sidebar): add button to keep it open 2025-08-22 17:15:32 -03:00
Herculino Trotta
2733c92da5 style(sidebar): truncate e-mail if it's too long 2025-08-22 13:14:47 -03:00
eitchtee
9bfbe54ed5 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-08-19 17:03:42 +00:00
Herculino Trotta
5b27dea07c Merge pull request #340
feat: turn filter, order and search into a single bar
2025-08-19 14:02:06 -03:00
Herculino Trotta
791e1000a3 feat(all-transactions): turn filter, order and search into a single bar 2025-08-19 14:01:35 -03:00
Herculino Trotta
7301d9f475 feat(monthly): turn filter, order and search into a single bar 2025-08-19 13:39:57 -03:00
sorcierwax
47a44e96f8 locale(French): update translation
Currently translated at 100.0% (685 of 685 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2025-08-18 08:17:42 +00:00
Herculino Trotta
7d247eb737 locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (685 of 685 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-08-17 08:17:42 +00:00
Dimitri Decrock
373616e7bb locale(Dutch): update translation
Currently translated at 100.0% (685 of 685 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-08-17 08:17:42 +00:00
61 changed files with 7436 additions and 2363 deletions

View File

@@ -379,7 +379,7 @@ DEBUG_TOOLBAR_PANELS = [
"debug_toolbar.panels.signals.SignalsPanel",
"debug_toolbar.panels.redirects.RedirectsPanel",
"debug_toolbar.panels.profiling.ProfilingPanel",
"cachalot.panels.CachalotPanel",
# "cachalot.panels.CachalotPanel",
]
INTERNAL_IPS = [
"127.0.0.1",

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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,
)

View File

@@ -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",

View 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'),
),
]

View File

@@ -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

View File

@@ -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)

View File

@@ -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"] = {}

View File

@@ -102,4 +102,6 @@ def get_transactions(
account__in=request.user.untracked_accounts.all()
)
transactions = transactions.exclude(account__currency__is_archived=True)
return transactions

View File

@@ -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()

View File

@@ -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
)

View File

@@ -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"),
),
]

View 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'),
),
]

View File

@@ -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'),
),
]

View 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'),
),
]

View File

@@ -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)

View File

@@ -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

View File

@@ -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,

View File

View 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,
}

View File

@@ -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},
)

View File

@@ -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(

View File

@@ -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):

View File

@@ -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")

View File

@@ -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,

View File

@@ -17,6 +17,11 @@ urlpatterns = [
views.toggle_sound_playing,
name="toggle_sound_playing",
),
path(
"user/toggle-sidebar/",
views.toggle_sidebar_status,
name="toggle_sidebar_status",
),
path(
"user/settings/",
views.update_settings,

View File

@@ -116,6 +116,24 @@ def update_settings(request):
return render(request, "users/fragments/user_settings.html", {"form": form})
@only_htmx
@htmx_login_required
def toggle_sidebar_status(request):
if not request.session.get("sidebar_status"):
request.session["sidebar_status"] = "floating"
if request.session["sidebar_status"] == "floating":
request.session["sidebar_status"] = "fixed"
elif request.session["sidebar_status"] == "fixed":
request.session["sidebar_status"] = "floating"
else:
request.session["sidebar_status"] = "fixed"
return HttpResponse(
status=204,
)
@htmx_login_required
@is_superuser
@require_http_methods(["GET"])

View File

@@ -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:

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-17 06:55+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,37 +66,37 @@ 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:168
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
@@ -128,11 +128,11 @@ msgstr "Kontengruppe"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
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
@@ -189,11 +191,11 @@ msgstr "Konto"
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Konten"
@@ -479,8 +481,10 @@ msgstr "Löschen"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Zurücksetzen"
@@ -496,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
@@ -518,75 +522,75 @@ 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
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
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:202
#: 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
@@ -595,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."
@@ -627,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."
@@ -639,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')."
@@ -673,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."
@@ -725,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"
@@ -756,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."
@@ -775,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"
@@ -834,15 +838,15 @@ msgid "Entry deleted successfully"
msgstr "Eintrag erfolgreich gelöscht"
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr "Nutzer"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -852,7 +856,7 @@ msgstr "Transaktionen"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr "Kategorien"
@@ -860,19 +864,19 @@ 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
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr "Entitäten"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -880,7 +884,7 @@ msgstr "Wiederkehrende Transaktionen"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -889,12 +893,12 @@ msgstr "Ratenzahlungs-Pläne"
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr "Automatische Umrechnungskurse"
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr "Regeln"
@@ -966,7 +970,7 @@ msgstr "Datei auswählen"
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr "Import"
@@ -1037,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"
@@ -1138,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"
@@ -1156,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"
@@ -1362,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"
@@ -1379,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"
@@ -1526,12 +1531,12 @@ msgstr "Keine Kategorie"
msgid "No description"
msgstr "Keine Beschreibung"
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr "Jährlich"
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr "Monatlich"
@@ -1631,7 +1636,7 @@ msgid "Quick Transaction"
msgstr "Schnelle Transaktion"
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1723,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:152
#: 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:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
msgid "Item updated successfully"
msgstr "Objekt erfolgreich aktualisiert"
@@ -1842,8 +1847,10 @@ msgid "This account is deactivated"
msgstr "Dieses Konto ist deaktiviert"
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr "Standard"
@@ -1949,7 +1956,7 @@ msgid "All Transactions"
msgstr "Alle Transaktionen"
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr "Kalender"
@@ -2000,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
@@ -2021,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
@@ -2047,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
@@ -2074,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
@@ -2104,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
@@ -2124,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
@@ -2270,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"
@@ -2279,13 +2286,14 @@ msgid "Pick a month"
msgstr "Monat auswählen"
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr "Schließen"
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr "Suche"
@@ -2472,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"
@@ -2510,7 +2518,7 @@ msgstr "Keine Einträge für diesen DCA"
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr "Versuche einen hinzuzufügen"
@@ -2613,7 +2621,7 @@ msgid "Edit exchange rate"
msgstr "Umrechnungskurs bearbeiten"
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2637,7 +2645,7 @@ msgstr "Kein Umrechnungskurs"
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr "Seitennavigation"
@@ -2670,7 +2678,7 @@ msgid "No services configured"
msgstr "Keine Dienste konfiguriert"
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr "Exportieren und Wiederherstellen"
@@ -2768,7 +2776,7 @@ msgstr "Navigation umschalten"
msgid "Overview"
msgstr "Übersicht"
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr "Nettovermögen"
@@ -2778,62 +2786,62 @@ msgstr "Nettovermögen"
msgid "Current"
msgstr "Aktuell"
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Einblicke"
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr "Papierkorb"
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr "Tools"
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr "\"Dollar Cost Average\"-Tracker"
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr "Einzelpreis-Rechner"
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr "Währungs-Umrechner"
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr "Verwaltung"
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr "Automatisierung"
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr "Admin"
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr "Nur benutzen, wenn du weißt was du tust"
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr "Django Admin"
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr "Rechner"
@@ -2941,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"
@@ -3151,26 +3159,30 @@ msgstr "Verteilung"
msgid "Summary"
msgstr "Zusammenfassung"
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr "Transaktionen filtern"
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr "Sortieren nach"
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr "Älteste zuerst"
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr "Neueste zuerst"
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr "Transaktionen filtern"
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr "Sortieren nach"
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3386,7 +3398,7 @@ msgstr "Bearbeitung"
msgid "transactions"
msgstr "Transaktionen"
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr "Keine Transaktionen gefunden"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-17 06:55+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,37 +65,37 @@ 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:168
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
@@ -127,11 +127,11 @@ msgstr ""
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
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
@@ -185,11 +187,11 @@ msgstr ""
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr ""
@@ -467,8 +469,10 @@ msgstr ""
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr ""
@@ -484,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
@@ -506,75 +510,75 @@ 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
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
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:202
#: 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
@@ -583,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."
@@ -703,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 ""
@@ -732,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 ""
@@ -751,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"
@@ -810,15 +814,15 @@ msgid "Entry deleted successfully"
msgstr ""
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr ""
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -828,7 +832,7 @@ msgstr ""
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr ""
@@ -836,19 +840,19 @@ 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
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr ""
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -856,7 +860,7 @@ msgstr ""
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -865,12 +869,12 @@ msgstr ""
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr ""
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr ""
@@ -940,7 +944,7 @@ msgstr ""
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr ""
@@ -1011,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 ""
@@ -1112,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"
@@ -1130,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"
@@ -1323,6 +1327,7 @@ msgid "Any entity"
msgstr ""
#: apps/transactions/filters.py:202
#: templates/insights/fragments/category_overview/index.html:274
msgid "No entity"
msgstr ""
@@ -1338,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 ""
@@ -1473,12 +1478,12 @@ msgstr ""
msgid "No description"
msgstr ""
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr ""
@@ -1577,7 +1582,7 @@ msgid "Quick Transaction"
msgstr ""
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1669,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:152
#: 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:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
msgid "Item updated successfully"
msgstr ""
@@ -1788,8 +1793,10 @@ msgid "This account is deactivated"
msgstr ""
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr ""
@@ -1890,7 +1897,7 @@ msgid "All Transactions"
msgstr ""
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr ""
@@ -1941,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
@@ -1962,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
@@ -1988,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
@@ -2015,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
@@ -2045,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
@@ -2065,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
@@ -2211,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 ""
@@ -2220,13 +2227,14 @@ msgid "Pick a month"
msgstr ""
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr ""
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr ""
@@ -2411,7 +2419,7 @@ msgstr ""
msgid "Code"
msgstr ""
#: templates/currencies/fragments/list.html:61
#: templates/currencies/fragments/list.html:63
msgid "No currencies"
msgstr ""
@@ -2449,7 +2457,7 @@ msgstr ""
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr ""
@@ -2551,7 +2559,7 @@ msgid "Edit exchange rate"
msgstr ""
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2575,7 +2583,7 @@ msgstr ""
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr ""
@@ -2608,7 +2616,7 @@ msgid "No services configured"
msgstr ""
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr ""
@@ -2704,7 +2712,7 @@ msgstr ""
msgid "Overview"
msgstr ""
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr ""
@@ -2714,62 +2722,62 @@ msgstr ""
msgid "Current"
msgstr ""
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr ""
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr ""
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr ""
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr ""
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr ""
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr ""
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr ""
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr ""
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr ""
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr ""
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr ""
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr ""
@@ -2864,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 ""
@@ -3069,26 +3077,30 @@ msgstr ""
msgid "Summary"
msgstr ""
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr ""
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr ""
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3296,7 +3308,7 @@ msgstr ""
msgid "transactions"
msgstr ""
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr ""

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-17 06:55+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,37 +66,37 @@ 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:168
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
@@ -128,11 +128,11 @@ msgstr "Grupo de Cuenta"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
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
@@ -187,11 +189,11 @@ msgstr "Cuenta"
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Cuentas"
@@ -488,8 +490,10 @@ msgstr "Remover"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Limpiar"
@@ -505,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
@@ -527,76 +531,76 @@ 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
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
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:202
#: 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
@@ -605,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 "
@@ -644,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 "
@@ -658,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., "
@@ -696,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 "
@@ -760,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"
@@ -796,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."
@@ -818,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
@@ -891,7 +895,7 @@ msgid "Entry deleted successfully"
msgstr "Entry deleted successfully"
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
#, fuzzy
msgid "Users"
@@ -899,8 +903,8 @@ msgstr "Users"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -911,7 +915,7 @@ msgstr "Transactions"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
#, fuzzy
msgid "Categories"
msgstr "Categories"
@@ -920,12 +924,12 @@ 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
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
#, fuzzy
msgid "Entities"
@@ -933,7 +937,7 @@ msgstr "Entities"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
#, fuzzy
@@ -942,7 +946,7 @@ msgstr "Recurring Transactions"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
#, fuzzy
@@ -952,13 +956,13 @@ msgstr "Installment Plans"
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
#, fuzzy
msgid "Automatic Exchange Rates"
msgstr "Automatic Exchange Rates"
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
#, fuzzy
msgid "Rules"
@@ -1044,7 +1048,7 @@ msgstr "Select a file"
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
#, fuzzy
msgid "Import"
msgstr "Import"
@@ -1130,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"
@@ -1247,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
@@ -1267,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
@@ -1505,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"
@@ -1522,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"
@@ -1691,13 +1696,13 @@ msgstr "No category"
msgid "No description"
msgstr "No description"
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
#, fuzzy
msgid "Yearly"
msgstr "Yearly"
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
#, fuzzy
msgid "Monthly"
msgstr "Monthly"
@@ -1818,7 +1823,7 @@ msgid "Quick Transaction"
msgstr "Edit Transaction"
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
#, fuzzy
@@ -1921,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:152
#: 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:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
#, fuzzy
msgid "Item updated successfully"
msgstr "Rule updated successfully"
@@ -2067,8 +2072,10 @@ msgid "This account is deactivated"
msgstr "This account is deactivated"
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
#, fuzzy
msgid "Default"
msgstr "Default"
@@ -2187,7 +2194,7 @@ msgid "All Transactions"
msgstr "All Transactions"
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
#, fuzzy
msgid "Calendar"
msgstr "Calendar"
@@ -2249,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
@@ -2271,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
@@ -2298,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
@@ -2326,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
@@ -2357,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
@@ -2378,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
@@ -2550,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"
@@ -2561,14 +2568,15 @@ msgid "Pick a month"
msgstr "Pick a month"
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
#, fuzzy
msgid "Close"
msgstr "Close"
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
#, fuzzy
msgid "Search"
msgstr "Search"
@@ -2786,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"
@@ -2833,7 +2841,7 @@ msgstr "No entries for this DCA"
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
#, fuzzy
msgid "Try adding one"
msgstr "Try adding one"
@@ -2958,7 +2966,7 @@ msgid "Edit exchange rate"
msgstr "Edit exchange rate"
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2986,7 +2994,7 @@ msgstr "No exchange rates"
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
#, fuzzy
msgid "Page navigation"
msgstr "Page navigation"
@@ -3027,7 +3035,7 @@ msgid "No services configured"
msgstr "No services configured"
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
#, fuzzy
msgid "Export and Restore"
msgstr "Export and Restore"
@@ -3147,7 +3155,7 @@ msgstr "Toggle navigation"
msgid "Overview"
msgstr "Overview"
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
#, fuzzy
msgid "Net Worth"
msgstr "Net Worth"
@@ -3159,72 +3167,72 @@ msgstr "Net Worth"
msgid "Current"
msgstr "Current"
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
#, fuzzy
msgid "Insights"
msgstr "Insights"
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
#, fuzzy
msgid "Trash Can"
msgstr "Trash Can"
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
#, fuzzy
msgid "Tools"
msgstr "Tools"
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
#, fuzzy
msgid "Dollar Cost Average Tracker"
msgstr "Dollar Cost Average Tracker"
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
#, fuzzy
msgid "Unit Price Calculator"
msgstr "Unit Price Calculator"
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
#, fuzzy
msgid "Currency Converter"
msgstr "Currency Converter"
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
#, fuzzy
msgid "Management"
msgstr "Management"
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
#, fuzzy
msgid "Automation"
msgstr "Automation"
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr ""
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
#, fuzzy
msgid "Only use this if you know what you're doing"
msgstr "Only use this if you know what you're doing"
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
#, fuzzy
msgid "Django Admin"
msgstr "Django Admin"
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
#, fuzzy
msgid "Calculator"
msgstr "Calculator"
@@ -3336,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"
@@ -3584,26 +3592,30 @@ msgstr "Distribución"
msgid "Summary"
msgstr "Resumen"
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr "Filtrar transacciones"
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr "Ordenar por"
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr "Lo más antiguo primero"
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr "Lo más nuevo primero"
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr "Filtrar transacciones"
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr "Ordenar por"
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3833,7 +3845,7 @@ msgstr "Editing"
msgid "transactions"
msgstr "transactions"
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
#, fuzzy
msgid "No transactions found"
msgstr "No transactions found"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-17 06:55+0000\n"
"PO-Revision-Date: 2025-08-16 11:17+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/"
"app/nl/>\n"
@@ -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,37 +66,37 @@ 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:168
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
@@ -128,11 +128,11 @@ msgstr "Accountgroep"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
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
@@ -190,11 +192,11 @@ msgstr "Rekening"
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Rekeningen"
@@ -478,8 +480,10 @@ msgstr "Verwijder"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Leegmaken"
@@ -495,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
@@ -517,75 +521,75 @@ 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
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
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:202
#: 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
@@ -594,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."
@@ -626,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."
@@ -639,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')."
@@ -673,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."
@@ -725,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"
@@ -755,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."
@@ -774,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"
@@ -833,15 +837,15 @@ msgid "Entry deleted successfully"
msgstr "Invoer succesvol verwijderd"
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr "Gebruikers"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -851,7 +855,7 @@ msgstr "Verrichtingen"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr "Categorieën"
@@ -859,19 +863,19 @@ 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
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr "Bedrijven"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -879,7 +883,7 @@ msgstr "Terugkerende Verrichtingen"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -888,12 +892,12 @@ msgstr "Afbetalingsplannen"
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr "Automatische Wisselkoersen"
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr "Regels"
@@ -965,7 +969,7 @@ msgstr "Selecteer een bestand"
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr "Importeer"
@@ -1036,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"
@@ -1137,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"
@@ -1155,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"
@@ -1350,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"
@@ -1365,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"
@@ -1506,12 +1511,12 @@ msgstr "Geen categorie"
msgid "No description"
msgstr "Geen Beschrijving"
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr "Jaarlijks"
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr "Maandelijks"
@@ -1610,7 +1615,7 @@ msgid "Quick Transaction"
msgstr "Snelle verrichting"
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1702,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:152
#: 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:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
msgid "Item updated successfully"
msgstr "Item succesvol bijgewerkt"
@@ -1821,8 +1826,10 @@ msgid "This account is deactivated"
msgstr "Deze gebruiker is gedeactiveerd"
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr "Standaard"
@@ -1930,7 +1937,7 @@ msgid "All Transactions"
msgstr "Alle Verrichtingen"
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr "Kalender"
@@ -1981,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
@@ -2002,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
@@ -2028,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
@@ -2055,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
@@ -2085,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
@@ -2105,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
@@ -2251,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"
@@ -2260,13 +2267,14 @@ msgid "Pick a month"
msgstr "Kies een maand"
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr "Sluiten"
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr "Zoeken"
@@ -2451,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"
@@ -2489,7 +2497,7 @@ msgstr "Geen idems in deze DCA"
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr "Probeer er een toe te voegen"
@@ -2591,7 +2599,7 @@ msgid "Edit exchange rate"
msgstr "Wisselkoers bewerken"
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2615,7 +2623,7 @@ msgstr "Geen wisselkoersen"
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr "Paginanavigatie"
@@ -2648,7 +2656,7 @@ msgid "No services configured"
msgstr "Geen diensten ingesteld"
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr "Exporteren en Herstellen"
@@ -2745,7 +2753,7 @@ msgstr "Navigatie Knop"
msgid "Overview"
msgstr "Overzicht"
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr "Netto Waarde"
@@ -2755,62 +2763,62 @@ msgstr "Netto Waarde"
msgid "Current"
msgstr "Huidige"
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Inzichten"
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr "Prullenbak"
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr "Hulpmiddelen"
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr "Dollar Kostgemiddelde Tracker"
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr "Eenheidsprijs berekenen"
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr "Valuta omrekenen"
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr "Beheer"
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr "Automatisatie"
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr "Admin"
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr "Gebruik dit alleen als je weet wat je doet"
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr "Django Beheerder"
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr "is beschikbaar"
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr "Rekenmachine"
@@ -2897,16 +2905,12 @@ msgstr ""
"geteld voor elke tag"
#: templates/insights/fragments/category_overview/index.html:52
#, fuzzy
#| msgid ""
#| "Transaction amounts associated with multiple tags will be counted once "
#| "for each tag"
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
"Transactiebedragen die gekoppeld zijn aan meerdere tags worden één keer "
"geteld voor elke tag"
"Transactiebedragen die gekoppeld zijn aan meerdere tags en bedrijven worden "
"één keer geteld voor elke tag"
#: templates/insights/fragments/category_overview/index.html:69
msgid "Final total"
@@ -2917,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"
@@ -3125,26 +3129,30 @@ msgstr "Verdeling"
msgid "Summary"
msgstr "Samenvatting"
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr "Filter verrichtingen"
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr "Sorteer op"
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr "Oudste eerst"
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr "Nieuwste eerst"
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr "Filter verrichtingen"
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr "Sorteer op"
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3358,7 +3366,7 @@ msgstr "Bewerking"
msgid "transactions"
msgstr "verrichtingen"
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr "Geen Verrichtingen gevonden"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-17 06:55+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,37 +66,37 @@ 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:168
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
@@ -128,11 +128,11 @@ msgstr "Grupo da Conta"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
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
@@ -189,11 +191,11 @@ msgstr "Conta"
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Contas"
@@ -478,8 +480,10 @@ msgstr "Remover"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Limpar"
@@ -495,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
@@ -517,75 +521,75 @@ 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
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
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:202
#: 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 +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."
@@ -626,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."
@@ -639,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')."
@@ -674,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."
@@ -726,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"
@@ -755,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."
@@ -774,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"
@@ -833,15 +837,15 @@ msgid "Entry deleted successfully"
msgstr "Entrada apagada com sucesso"
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr "Usuários"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -851,7 +855,7 @@ msgstr "Transações"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr "Categorias"
@@ -859,19 +863,19 @@ 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
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr "Entidades"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -879,7 +883,7 @@ msgstr "Transações Recorrentes"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -888,12 +892,12 @@ msgstr "Parcelamentos"
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr "Taxas de Câmbio Automáticas"
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr "Regras"
@@ -965,7 +969,7 @@ msgstr "Selecione um arquivo"
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr "Importar"
@@ -1036,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"
@@ -1137,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"
@@ -1155,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"
@@ -1354,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"
@@ -1371,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"
@@ -1515,12 +1520,12 @@ msgstr "Sem categoria"
msgid "No description"
msgstr "Sem descrição"
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr "Anual"
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr "Mensal"
@@ -1621,7 +1626,7 @@ msgid "Quick Transaction"
msgstr "Editar Transação"
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
#, fuzzy
@@ -1715,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:152
#: 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:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
#, fuzzy
#| msgid "Rule updated successfully"
msgid "Item updated successfully"
@@ -1840,8 +1845,10 @@ msgid "This account is deactivated"
msgstr "Essa conta está desativada"
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr "Padrão"
@@ -1949,7 +1956,7 @@ msgid "All Transactions"
msgstr "Todas as transações"
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr "Calendário"
@@ -2000,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
@@ -2021,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
@@ -2047,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
@@ -2074,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
@@ -2104,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
@@ -2124,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
@@ -2270,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"
@@ -2279,13 +2286,14 @@ msgid "Pick a month"
msgstr "Escolha um mês"
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr "Fechar"
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr "Buscar"
@@ -2476,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"
@@ -2514,7 +2522,7 @@ msgstr "Nenhuma entrada neste CMP"
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr "Tente adicionar uma"
@@ -2617,7 +2625,7 @@ msgid "Edit exchange rate"
msgstr "Editar taxa de câmbio"
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2641,7 +2649,7 @@ msgstr "Nenhuma taxa de câmbio"
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr "Navegação por página"
@@ -2674,7 +2682,7 @@ msgid "No services configured"
msgstr "Nenhum serviço configurado"
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr "Exportar e Restaurar"
@@ -2772,7 +2780,7 @@ msgstr "Alternar navegação"
msgid "Overview"
msgstr "Visão Geral"
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr "Patrimônio"
@@ -2782,62 +2790,62 @@ msgstr "Patrimônio"
msgid "Current"
msgstr "Atual"
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Insights"
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr "Lixeira"
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr "Ferramentas"
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr "Rastreador de Custo Médio Ponderado"
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr "Calculadora de preço unitário"
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr "Conversor de Moeda"
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr "Gerenciar"
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr "Automação"
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr ""
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr "Só use isso se você souber o que está fazendo"
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr "Django Admin"
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr "Calculadora"
@@ -2938,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"
@@ -3146,26 +3154,30 @@ msgstr "Distribuição"
msgid "Summary"
msgstr "Resumo"
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr "Filtrar transações"
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr "Ordernar por"
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr "Mais antigas primeiro"
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr "Mais novas primeiro"
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr "Filtrar transações"
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr "Ordernar por"
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3382,7 +3394,7 @@ msgstr "Editando"
msgid "transactions"
msgstr "transações"
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr "Nenhuma transação encontrada"

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-17 06:55+0000\n"
"PO-Revision-Date: 2025-08-16 04:17+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/"
"projects/wygiwyh/app/pt_BR/>\n"
@@ -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,37 +66,37 @@ 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:168
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
@@ -128,11 +128,11 @@ msgstr "Grupo da Conta"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
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
@@ -189,11 +191,11 @@ msgstr "Conta"
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Contas"
@@ -476,8 +478,10 @@ msgstr "Remover"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Limpar"
@@ -493,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
@@ -515,75 +519,75 @@ 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
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
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:202
#: 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
@@ -592,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."
@@ -624,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."
@@ -637,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')."
@@ -672,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."
@@ -724,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"
@@ -753,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."
@@ -772,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"
@@ -831,15 +835,15 @@ msgid "Entry deleted successfully"
msgstr "Entrada apagada com sucesso"
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr "Usuários"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -849,7 +853,7 @@ msgstr "Transações"
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr "Categorias"
@@ -857,19 +861,19 @@ 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
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr "Entidades"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -877,7 +881,7 @@ msgstr "Transações Recorrentes"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -886,12 +890,12 @@ msgstr "Parcelamentos"
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr "Taxas de Câmbio Automáticas"
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr "Regras"
@@ -963,7 +967,7 @@ msgstr "Selecione um arquivo"
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr "Importar"
@@ -1034,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"
@@ -1135,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"
@@ -1153,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"
@@ -1348,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"
@@ -1363,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"
@@ -1503,12 +1508,12 @@ msgstr "Sem categoria"
msgid "No description"
msgstr "Sem descrição"
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr "Anual"
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr "Mensal"
@@ -1607,7 +1612,7 @@ msgid "Quick Transaction"
msgstr "Transação Rápida"
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1699,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:152
#: 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:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
msgid "Item updated successfully"
msgstr "Item atualizado com sucesso"
@@ -1818,8 +1823,10 @@ msgid "This account is deactivated"
msgstr "Essa conta está desativada"
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr "Padrão"
@@ -1929,7 +1936,7 @@ msgid "All Transactions"
msgstr "Todas as transações"
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr "Calendário"
@@ -1980,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
@@ -2001,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
@@ -2027,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
@@ -2054,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
@@ -2084,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
@@ -2104,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
@@ -2250,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"
@@ -2259,13 +2266,14 @@ msgid "Pick a month"
msgstr "Escolha um mês"
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr "Fechar"
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr "Buscar"
@@ -2450,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"
@@ -2488,7 +2496,7 @@ msgstr "Nenhuma entrada neste CMP"
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr "Tente adicionar uma"
@@ -2591,7 +2599,7 @@ msgid "Edit exchange rate"
msgstr "Editar taxa de câmbio"
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2615,7 +2623,7 @@ msgstr "Nenhuma taxa de câmbio"
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr "Navegação por página"
@@ -2648,7 +2656,7 @@ msgid "No services configured"
msgstr "Nenhum serviço configurado"
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr "Exportar e Restaurar"
@@ -2746,7 +2754,7 @@ msgstr "Alternar navegação"
msgid "Overview"
msgstr "Visão Geral"
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr "Patrimônio"
@@ -2756,62 +2764,62 @@ msgstr "Patrimônio"
msgid "Current"
msgstr "Atual"
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr "Insights"
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr "Lixeira"
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr "Ferramentas"
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr "Rastreador de Custo Médio Ponderado"
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr "Calculadora de preço unitário"
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr "Conversor de Moeda"
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr "Gerenciar"
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr "Automação"
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr "Admin"
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr "Só use isso se você souber o que está fazendo"
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr "Django Admin"
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr "está disponível"
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr "Calculadora"
@@ -2896,16 +2904,12 @@ msgstr ""
"para cada tag"
#: templates/insights/fragments/category_overview/index.html:52
#, fuzzy
#| msgid ""
#| "Transaction amounts associated with multiple tags will be counted once "
#| "for each tag"
msgid ""
"Transaction amounts associated with multiple tags and entities will be "
"counted once for each tag"
msgstr ""
"Os valores das transações associadas a várias tags serão contados uma vez "
"para cada tag"
"Os valores das transações associadas a várias tags e entidades serão "
"contados uma vez para cada tag"
#: templates/insights/fragments/category_overview/index.html:69
msgid "Final total"
@@ -2916,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"
@@ -3124,26 +3128,30 @@ msgstr "Distribuição"
msgid "Summary"
msgstr "Resumo"
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr "Filtrar transações"
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr "Ordernar por"
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr "Mais antigas primeiro"
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr "Mais novas primeiro"
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr "Filtrar transações"
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr "Ordernar por"
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3354,7 +3362,7 @@ msgstr "Editando"
msgid "transactions"
msgstr "transações"
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr "Nenhuma transação encontrada"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-17 06:55+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,37 +66,37 @@ 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:168
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
@@ -128,11 +128,11 @@ msgstr ""
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
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
@@ -186,11 +188,11 @@ msgstr ""
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr ""
@@ -468,8 +470,10 @@ msgstr ""
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr ""
@@ -485,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
@@ -507,75 +511,75 @@ 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
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
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:202
#: 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
@@ -584,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."
@@ -704,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 ""
@@ -733,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 ""
@@ -752,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"
@@ -811,15 +815,15 @@ msgid "Entry deleted successfully"
msgstr ""
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr ""
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -829,7 +833,7 @@ msgstr ""
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr ""
@@ -837,19 +841,19 @@ 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
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr ""
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -857,7 +861,7 @@ msgstr ""
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -866,12 +870,12 @@ msgstr ""
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr ""
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr ""
@@ -941,7 +945,7 @@ msgstr ""
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr ""
@@ -1012,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 ""
@@ -1113,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"
@@ -1131,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"
@@ -1324,6 +1328,7 @@ msgid "Any entity"
msgstr ""
#: apps/transactions/filters.py:202
#: templates/insights/fragments/category_overview/index.html:274
msgid "No entity"
msgstr ""
@@ -1339,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 ""
@@ -1474,12 +1479,12 @@ msgstr ""
msgid "No description"
msgstr ""
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr ""
@@ -1578,7 +1583,7 @@ msgid "Quick Transaction"
msgstr ""
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1670,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:152
#: 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:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
msgid "Item updated successfully"
msgstr ""
@@ -1789,8 +1794,10 @@ msgid "This account is deactivated"
msgstr ""
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr ""
@@ -1891,7 +1898,7 @@ msgid "All Transactions"
msgstr ""
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr ""
@@ -1942,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
@@ -1963,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
@@ -1989,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
@@ -2016,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
@@ -2046,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
@@ -2066,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
@@ -2212,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 ""
@@ -2221,13 +2228,14 @@ msgid "Pick a month"
msgstr ""
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr ""
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr ""
@@ -2412,7 +2420,7 @@ msgstr ""
msgid "Code"
msgstr ""
#: templates/currencies/fragments/list.html:61
#: templates/currencies/fragments/list.html:63
msgid "No currencies"
msgstr ""
@@ -2450,7 +2458,7 @@ msgstr ""
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr ""
@@ -2552,7 +2560,7 @@ msgid "Edit exchange rate"
msgstr ""
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2576,7 +2584,7 @@ msgstr ""
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr ""
@@ -2609,7 +2617,7 @@ msgid "No services configured"
msgstr ""
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr ""
@@ -2705,7 +2713,7 @@ msgstr ""
msgid "Overview"
msgstr ""
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr ""
@@ -2715,62 +2723,62 @@ msgstr ""
msgid "Current"
msgstr ""
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr ""
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr ""
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr ""
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr ""
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr ""
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr ""
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr ""
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr ""
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr ""
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr ""
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr ""
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr ""
@@ -2865,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 ""
@@ -3070,26 +3078,30 @@ msgstr ""
msgid "Summary"
msgstr ""
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr ""
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr ""
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3297,7 +3309,7 @@ msgstr ""
msgid "transactions"
msgstr ""
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr ""

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-17 06:55+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,37 +67,37 @@ 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:168
#: templates/includes/navbar.html:111 templates/includes/sidebar.html:192
#: templates/insights/fragments/category_overview/index.html:36
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
@@ -129,11 +129,11 @@ msgstr "Група рахунків"
#: apps/accounts/models.py:19 templates/account_groups/fragments/list.html:5
#: templates/account_groups/pages/index.html:4
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:188
#: templates/includes/navbar.html:121 templates/includes/sidebar.html:212
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
@@ -190,11 +192,11 @@ msgstr "Рахунок"
#: apps/export_app/forms.py:132 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:117
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:180
#: templates/includes/sidebar.html:182
#: templates/includes/navbar.html:119 templates/includes/sidebar.html:204
#: templates/includes/sidebar.html:206
#: templates/monthly_overview/pages/overview.html:94
#: templates/transactions/fragments/summary.html:12
#: templates/transactions/pages/transactions.html:81
#: templates/transactions/pages/transactions.html:137
msgid "Accounts"
msgstr "Рахунки"
@@ -483,8 +485,10 @@ msgstr "Видалити"
#: apps/common/widgets/tom_select.py:15
#: templates/mini_tools/unit_price_calculator.html:174
#: templates/monthly_overview/pages/overview.html:172
#: templates/transactions/pages/transactions.html:47
#: templates/monthly_overview/pages/overview.html:215
#: templates/monthly_overview/pages/overview.html:227
#: templates/transactions/pages/transactions.html:89
#: templates/transactions/pages/transactions.html:101
msgid "Clear"
msgstr "Чисто"
@@ -500,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
@@ -522,75 +526,75 @@ 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
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:194
#: templates/includes/sidebar.html:196
#: templates/includes/navbar.html:127 templates/includes/sidebar.html:218
#: templates/includes/sidebar.html:220
#: templates/monthly_overview/pages/overview.html:81
#: templates/transactions/fragments/summary.html:8
#: templates/transactions/pages/transactions.html:68
#: templates/transactions/pages/transactions.html:124
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:202
#: 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
@@ -599,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."
@@ -721,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 ""
@@ -750,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 ""
@@ -769,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"
@@ -828,15 +832,15 @@ msgid "Entry deleted successfully"
msgstr ""
#: apps/export_app/forms.py:14 apps/export_app/forms.py:131
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:239
#: templates/includes/navbar.html:150 templates/includes/sidebar.html:263
#: templates/users/fragments/list.html:6 templates/users/pages/index.html:4
msgid "Users"
msgstr ""
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:375 templates/includes/navbar.html:58
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:66
#: templates/includes/sidebar.html:160
#: templates/includes/navbar.html:107 templates/includes/sidebar.html:91
#: templates/includes/sidebar.html:184
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:39
#: templates/transactions/pages/transactions.html:5
@@ -846,7 +850,7 @@ msgstr ""
#: apps/export_app/forms.py:38 apps/export_app/forms.py:134
#: apps/transactions/filters.py:64 templates/categories/fragments/list.html:5
#: templates/categories/pages/index.html:4 templates/includes/navbar.html:109
#: templates/includes/sidebar.html:162
#: templates/includes/sidebar.html:186
msgid "Categories"
msgstr ""
@@ -854,19 +858,19 @@ 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
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:113
#: templates/includes/sidebar.html:174
#: templates/includes/sidebar.html:198
#: templates/insights/fragments/category_overview/index.html:49
msgid "Entities"
msgstr ""
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:748 templates/includes/navbar.html:77
#: templates/includes/sidebar.html:95
#: templates/includes/sidebar.html:120
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -874,7 +878,7 @@ msgstr ""
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:524 templates/includes/navbar.html:75
#: templates/includes/sidebar.html:89
#: templates/includes/sidebar.html:114
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -883,12 +887,12 @@ msgstr ""
#: apps/export_app/forms.py:74 apps/export_app/forms.py:143
#: templates/exchange_rates_services/fragments/list.html:6
#: templates/exchange_rates_services/pages/index.html:4
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:230
#: templates/includes/navbar.html:143 templates/includes/sidebar.html:254
msgid "Automatic Exchange Rates"
msgstr ""
#: apps/export_app/forms.py:80 templates/includes/navbar.html:135
#: templates/includes/sidebar.html:210 templates/rules/fragments/list.html:5
#: templates/includes/sidebar.html:234 templates/rules/fragments/list.html:5
#: templates/rules/pages/index.html:4
msgid "Rules"
msgstr ""
@@ -958,7 +962,7 @@ msgstr ""
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:216
#: templates/includes/navbar.html:137 templates/includes/sidebar.html:240
msgid "Import"
msgstr ""
@@ -1029,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 ""
@@ -1130,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"
@@ -1148,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"
@@ -1343,6 +1347,7 @@ msgid "Any entity"
msgstr ""
#: apps/transactions/filters.py:202
#: templates/insights/fragments/category_overview/index.html:274
msgid "No entity"
msgstr ""
@@ -1358,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 ""
@@ -1493,12 +1498,12 @@ msgstr ""
msgid "No description"
msgstr ""
#: apps/transactions/models.py:455 templates/includes/sidebar.html:42
#: apps/transactions/models.py:455 templates/includes/sidebar.html:67
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:36
#: templates/includes/navbar.html:27 templates/includes/sidebar.html:61
msgid "Monthly"
msgstr ""
@@ -1597,7 +1602,7 @@ msgid "Quick Transaction"
msgstr ""
#: apps/transactions/models.py:980 templates/includes/navbar.html:73
#: templates/includes/sidebar.html:83
#: templates/includes/sidebar.html:108
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1689,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:152
#: 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:184
#: apps/transactions/views/quick_transactions.py:73 apps/users/views.py:202
msgid "Item updated successfully"
msgstr ""
@@ -1810,8 +1815,10 @@ msgid "This account is deactivated"
msgstr ""
#: apps/users/forms.py:54 apps/users/forms.py:67 apps/users/forms.py:89
#: templates/monthly_overview/pages/overview.html:153
#: templates/transactions/pages/transactions.html:28
#: templates/monthly_overview/pages/overview.html:140
#: templates/monthly_overview/pages/overview.html:186
#: templates/transactions/pages/transactions.html:14
#: templates/transactions/pages/transactions.html:60
msgid "Default"
msgstr ""
@@ -1912,7 +1919,7 @@ msgid "All Transactions"
msgstr ""
#: apps/users/models.py:470 templates/includes/navbar.html:33
#: templates/includes/sidebar.html:48
#: templates/includes/sidebar.html:73
msgid "Calendar"
msgstr ""
@@ -1963,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
@@ -1984,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
@@ -2010,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
@@ -2037,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
@@ -2067,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
@@ -2087,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
@@ -2233,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 ""
@@ -2242,13 +2249,14 @@ msgid "Pick a month"
msgstr ""
#: templates/common/fragments/toasts.html:15 templates/extends/offcanvas.html:5
#: templates/includes/sidebar.html:28
#: templates/includes/sidebar.html:53
msgid "Close"
msgstr ""
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
#: templates/monthly_overview/pages/overview.html:177
#: templates/monthly_overview/pages/overview.html:160
#: templates/transactions/pages/transactions.html:34
msgid "Search"
msgstr ""
@@ -2433,7 +2441,7 @@ msgstr ""
msgid "Code"
msgstr ""
#: templates/currencies/fragments/list.html:61
#: templates/currencies/fragments/list.html:63
msgid "No currencies"
msgstr ""
@@ -2471,7 +2479,7 @@ msgstr ""
#: templates/dca/fragments/strategy/details.html:125
#: templates/monthly_overview/fragments/list.html:47
#: templates/transactions/fragments/list_all.html:40
#: templates/transactions/fragments/list_all.html:47
msgid "Try adding one"
msgstr ""
@@ -2573,7 +2581,7 @@ msgid "Edit exchange rate"
msgstr ""
#: templates/exchange_rates/fragments/list.html:25
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:68
#: templates/includes/navbar.html:62 templates/includes/sidebar.html:93
#: templates/installment_plans/fragments/list.html:21
#: templates/yearly_overview/pages/overview_by_account.html:105
#: templates/yearly_overview/pages/overview_by_currency.html:107
@@ -2597,7 +2605,7 @@ msgstr ""
#: templates/exchange_rates/fragments/table.html:58
#: templates/exchange_rates_services/fragments/table.html:58
#: templates/transactions/fragments/list_all.html:47
#: templates/transactions/fragments/list_all.html:54
msgid "Page navigation"
msgstr ""
@@ -2630,7 +2638,7 @@ msgid "No services configured"
msgstr ""
#: templates/export_app/pages/index.html:4 templates/includes/navbar.html:140
#: templates/includes/sidebar.html:223
#: templates/includes/sidebar.html:247
msgid "Export and Restore"
msgstr ""
@@ -2726,7 +2734,7 @@ msgstr ""
msgid "Overview"
msgstr ""
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:60
#: templates/includes/navbar.html:41 templates/includes/sidebar.html:85
msgid "Net Worth"
msgstr ""
@@ -2736,62 +2744,62 @@ msgstr ""
msgid "Current"
msgstr ""
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:54
#: templates/includes/navbar.html:51 templates/includes/sidebar.html:79
#: templates/insights/pages/index.html:5
msgid "Insights"
msgstr ""
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:76
#: templates/includes/navbar.html:67 templates/includes/sidebar.html:101
msgid "Trash Can"
msgstr ""
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:101
#: templates/includes/navbar.html:85 templates/includes/sidebar.html:126
msgid "Tools"
msgstr ""
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:103
#: templates/includes/navbar.html:89 templates/includes/sidebar.html:128
msgid "Dollar Cost Average Tracker"
msgstr ""
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:109
#: templates/includes/navbar.html:92 templates/includes/sidebar.html:134
#: templates/mini_tools/unit_price_calculator.html:5
#: templates/mini_tools/unit_price_calculator.html:10
msgid "Unit Price Calculator"
msgstr ""
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:115
#: templates/includes/navbar.html:95 templates/includes/sidebar.html:140
#: templates/mini_tools/currency_converter/currency_converter.html:8
#: templates/mini_tools/currency_converter/currency_converter.html:15
msgid "Currency Converter"
msgstr ""
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:134
#: templates/includes/sidebar.html:147
#: templates/includes/navbar.html:104 templates/includes/sidebar.html:159
#: templates/includes/sidebar.html:171
msgid "Management"
msgstr ""
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:208
#: templates/includes/navbar.html:133 templates/includes/sidebar.html:232
msgid "Automation"
msgstr ""
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:237
#: templates/includes/navbar.html:148 templates/includes/sidebar.html:261
msgid "Admin"
msgstr ""
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:246
#: templates/includes/navbar.html:157 templates/includes/sidebar.html:270
msgid "Only use this if you know what you're doing"
msgstr ""
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:245
#: templates/includes/navbar.html:158 templates/includes/sidebar.html:269
msgid "Django Admin"
msgstr ""
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:260
#: templates/includes/navbar.html:169 templates/includes/sidebar.html:284
msgid "is available"
msgstr ""
#: templates/includes/navbar.html:174 templates/includes/navbar.html:177
#: templates/includes/sidebar.html:266
#: templates/includes/sidebar.html:290
msgid "Calculator"
msgstr ""
@@ -2886,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 ""
@@ -3091,26 +3099,30 @@ msgstr ""
msgid "Summary"
msgstr ""
#: templates/monthly_overview/pages/overview.html:142
#: templates/transactions/pages/transactions.html:17
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:148
#: templates/transactions/pages/transactions.html:23
msgid "Order by"
msgstr ""
#: templates/monthly_overview/pages/overview.html:155
#: templates/transactions/pages/transactions.html:30
#: templates/monthly_overview/pages/overview.html:141
#: templates/monthly_overview/pages/overview.html:195
#: templates/transactions/pages/transactions.html:15
#: templates/transactions/pages/transactions.html:69
msgid "Oldest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:157
#: templates/transactions/pages/transactions.html:32
#: templates/monthly_overview/pages/overview.html:142
#: templates/monthly_overview/pages/overview.html:204
#: templates/transactions/pages/transactions.html:16
#: templates/transactions/pages/transactions.html:78
msgid "Newest first"
msgstr ""
#: templates/monthly_overview/pages/overview.html:151
#: templates/transactions/pages/transactions.html:25
msgid "Filter transactions"
msgstr ""
#: templates/monthly_overview/pages/overview.html:176
#: templates/transactions/pages/transactions.html:50
msgid "Order by"
msgstr ""
#: templates/net_worth/net_worth.html:40
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
@@ -3318,7 +3330,7 @@ msgstr ""
msgid "transactions"
msgstr ""
#: templates/transactions/fragments/list_all.html:39
#: templates/transactions/fragments/list_all.html:46
msgid "No transactions found"
msgstr ""

View File

@@ -0,0 +1,3 @@
{#This is here so we can add dynamic Tailwind classes that will be required via JS/hyperscript but Tailwind has no knowledge of#}
<div class="tw:lg:w-[15vw]"></div>
<div class="tw:lg:ml-[16vw]"></div>

View File

@@ -1,6 +1,6 @@
<li>
<div class="d-flex align-items-center">
<span class="text-muted small fw-bold text-uppercase tw:lg:hidden tw:lg:group-hover:inline me-2">{{ title }}</span>
<span class="sidebar-menu-header text-muted small fw-bold text-uppercase me-2">{{ title }}</span>
<hr class="flex-grow-1"/>
</div>
</li>

View File

@@ -1,7 +1,7 @@
{% load active_link %}
<li>
<a href="{% url url %}"
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
class="tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
{% if tooltip %}
data-bs-placement="right"
data-bs-toggle="tooltip"
@@ -9,6 +9,6 @@
{% endif %}>
<i class="{{ icon }} fa-fw"></i>
<span
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
</a>
</li>

View File

@@ -2,7 +2,7 @@
<li>
<a href="{{ url }}"
hx-boost="false"
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
class="tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views=active css_class="sidebar-active" %}"
{% if tooltip %}
data-bs-placement="right"
data-bs-toggle="tooltip"
@@ -11,6 +11,6 @@
<i class="{{ icon }} fa-fw"></i>
<span
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">{{ title }}</span>
</a>
</li>

View File

@@ -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>

View File

@@ -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>

View File

@@ -5,31 +5,56 @@
{% load static %}
<div
class="tw:group tw:lg:w-16 tw:lg:hover:w-112 tw:transition-all tw:duration-100 tw:fixed tw:top-0 tw:start-0 tw:h-full tw:z-1020">
class="sidebar {% if request.session.sidebar_status == 'floating' %}tw:group sidebar-floating{% elif request.session.sidebar_status == 'fixed' %}sidebar-fixed{% else %}tw:group sidebar-floating{% endif %}"
id="sidebar-container">
<nav
id="sidebar"
hx-boost="true"
data-bs-scroll="true"
class="offcanvas-lg offcanvas-start d-lg-flex flex-column position-fixed top-0 start-0 h-100 bg-body-tertiary shadow-sm tw:z-1020 tw:lg:w-16 tw:lg:group-hover:w-104 tw:transition-all tw:duration-100 tw:overflow-hidden">
<div
class="tw:hidden tw:lg:group-hover:block tw:absolute tw:top-0 tw:left-104 tw:w-8 tw:h-full tw:bg-transparent tw:pointer-events-auto tw:z-10"></div>
class="offcanvas-lg offcanvas-start d-lg-flex flex-column position-fixed top-0 start-0 h-100 bg-body-tertiary shadow-sm tw:z-1020">
<a href="{% url 'index' %}" class="d-none d-lg-flex tw:justify-start p-3 text-decoration-none">
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
<span class="fs-4 fw-bold ms-3 tw:lg:invisible tw:lg:group-hover:visible">WYGIWYH</span>
</a>
{# <div>#}
{# <a href="{% url 'index' %}" class="d-none d-lg-flex tw:justify-start p-3 text-decoration-none sidebar-title">#}
{# <img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>#}
{# <span class="fs-4 fw-bold ms-3">WYGIWYH</span>#}
{# </a>#}
{##}
{##}
{# </div>#}
<div class="d-none d-lg-flex tw:justify-between tw:items-center tw:border-b tw:border-gray-600 tw:lg:flex">
<a href="{% url 'index' %}" class="m-0 d-none d-lg-flex tw:justify-start p-3 text-decoration-none sidebar-title">
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
<span class="fs-4 fw-bold ms-3">WYGIWYH</span>
</a>
<button
id="sidebar-toggle-btn"
class="text-secondary-emphasis tw:rounded-full tw:w-12 tw:h-12 tw:flex tw:items-center tw:justify-center tw:transition-all tw:duration-300"
hx-get="{% url 'toggle_sidebar_status' %}"
_="on click
toggle .sidebar-floating on #sidebar-container
toggle .tw\:group on #sidebar-container
toggle .sidebar-fixed on #sidebar-container
end
"
>
<i class="fa-solid fa-thumbtack fa-sm"></i>
<i class="fa-solid fa-thumbtack-slash fa-sm"></i>
</button>
</div>
<div class="offcanvas-header">
<a href="{% url 'index' %}" class="offcanvas-title d-flex tw:justify-start text-decoration-none">
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="30" width="30" title="WYGIWYH"/>
<span class="fs-4 fw-bold ms-3 tw:lg:invisible tw:lg:group-hover:visible">WYGIWYH</span>
<span class="fs-4 fw-bold ms-3">WYGIWYH</span>
</a>
<button type="button" class="btn-close" data-bs-target="#sidebar" data-bs-dismiss="offcanvas"
aria-label={% translate 'Close' %}></button>
</div>
<hr class="m-0">
<ul class="list-unstyled p-3 d-flex flex-column gap-0 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
<ul class="list-unstyled p-3 d-flex flex-column gap-0 tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events]"
style="animation-duration: 100ms">
<c-components.sidebar-menu-item
@@ -127,10 +152,10 @@
data-bs-target="#collapsible-panel"
aria-expanded="false"
aria-controls="collapsible-panel"
class="tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views='tags_index||entities_index||categories_index||accounts_index||account_groups_index||currencies_index||exchange_rates_index||rules_index||import_profiles_index||automatic_exchange_rates_index||export_index||users_index' css_class="sidebar-active" %}">
class="sidebar-menu-item tw:text-wrap tw:lg:text-nowrap tw:lg:text-sm d-flex align-items-center text-decoration-none p-2 rounded-3 sidebar-item {% active_link views='tags_index||entities_index||categories_index||accounts_index||account_groups_index||currencies_index||exchange_rates_index||rules_index||import_profiles_index||automatic_exchange_rates_index||export_index||users_index' css_class="sidebar-active" %}">
<i class="fa-solid fa-toolbox fa-fw"></i>
<span
class="ms-3 fw-medium tw:lg:invisible tw:lg:group-hover:visible tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">
class="ms-3 fw-medium tw:lg:group-hover:truncate tw:lg:group-focus:truncate tw:lg:group-hover:text-ellipsis tw:lg:group-focus:text-ellipsis">
{% translate 'Management' %}
</span>
</div>
@@ -140,14 +165,13 @@
<div id="collapsible-panel"
class="p-0 collapse tw:absolute tw:bottom-0 tw:left-0 tw:w-full tw:z-30 tw:max-h-dvh">
<div class="tw:h-dvh tw:backdrop-blur-3xl tw:flex tw:flex-col">
<!-- Header -->
<div
class="tw:flex tw:justify-between tw:items-center tw:p-4 tw:border-b tw:border-gray-600 tw:lg:hidden tw:lg:group-hover:flex">
<h5 class="tw:text-lg tw:font-semibold tw:text-gray-800 tw:lg:invisible tw:lg:group-hover:visible">
class="tw:justify-between tw:items-center tw:p-4 tw:border-b tw:border-gray-600 sidebar-submenu-header">
<h5 class="tw:text-lg tw:font-semibold tw:text-gray-800 m-0">
{% trans 'Management' %}
</h5>
<button type="button" class="btn-close tw:lg:hidden tw:lg:group-hover:inline" aria-label="Close"
<button type="button" class="btn-close" aria-label="Close"
data-bs-toggle="collapse"
data-bs-target="#collapsible-panel"
aria-expanded="true"
@@ -155,7 +179,7 @@
</button>
</div>
<ul class="list-unstyled p-3 d-flex flex-column gap-1 tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden tw:text-nowrap tw:lg:group-hover:animate-[disable-pointer-events] tw:flex-1"
<ul class="list-unstyled p-3 d-flex flex-column gap-1 tw:lg:group-hover:animate-[disable-pointer-events] tw:flex-1"
style="animation-duration: 100ms">
<c-components.sidebar-menu-header title="{% translate 'Transactions' %}"></c-components.sidebar-menu-header>
<c-components.sidebar-menu-item
@@ -273,17 +297,24 @@
<div>
<hr class="my-1">
<div
class="ps-4 pe-2 py-2 d-flex align-items-center text-body-secondary text-decoration-none justify-content-between tw:text-wrap tw:lg:text-nowrap">
<div>
<i class="fa-solid fa-circle-user"></i>
<strong class="ms-2 tw:lg:invisible tw:lg:group-hover:visible">{{ user.email }}</strong>
class="ps-4 pe-2 py-2 d-flex align-items-center text-decoration-none justify-content-between">
<div class="d-flex align-items-center" style="min-width: 0;">
<i class="fa-solid fa-circle-user text-body-secondary"></i>
<strong class="mx-2 text-body-secondary text-truncate sidebar-invisible">
{{ user.email }}
</strong>
</div>
<div class="tw:lg:invisible tw:lg:group-hover:visible">
<div class="sidebar-invisible">
{% include 'includes/navbar/user_menu.html' %}
</div>
</div>
</div>
</nav>
<div
class="tw:hidden tw:lg:group-hover:block tw:absolute tw:top-0 tw:left-104 tw:w-16 tw:h-full tw:bg-transparent"></div>
</div>

View File

@@ -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 %}

View File

@@ -35,7 +35,7 @@
{% include 'includes/mobile_navbar.html' %}
{% include 'includes/sidebar.html' %}
<main class="tw:p-4 tw:lg:ml-16">
<main class="tw:p-4">
{% settings "DEMO" as demo_mode %}
{% if demo_mode %}
<div class="px-3 m-0" id="demo-mode-alert" hx-preserve>

View File

@@ -44,12 +44,12 @@
</div>
</div>
{# Action buttons#}
{# <div class="col-12 col-xl-8">#}
{# <c-ui.quick-transactions-buttons#}
{# :year="year"#}
{# :month="month"#}
{# ></c-ui.quick-transactions-buttons>#}
{# </div>#}
{# <div class="col-12 col-xl-8">#}
{# <c-ui.quick-transactions-buttons#}
{# :year="year"#}
{# :month="month"#}
{# ></c-ui.quick-transactions-buttons>#}
{# </div>#}
</div>
{# Monthly summary#}
<div class="row gx-xl-4 gy-3">
@@ -133,59 +133,101 @@
</div>
<div class="col-12 col-xl-8 order-2 order-xl-1">
<div class="row mb-1">
<div class="col-sm-6 col-12">
{# Filter transactions button #}
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle" type="button"
data-bs-toggle="collapse" data-bs-target="#collapse-filter" aria-expanded="false"
aria-controls="collapse-filter">
<i class="fa-solid fa-filter fa-fw me-2"></i>{% translate 'Filter transactions' %}
<div class="my-3">
{# Hidden select to hold the order value and preserve the original update trigger #}
<select name="order" id="order" class="d-none" _="on change trigger updated on window">
<option value="default" {% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
<option value="older" {% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
<option value="newer" {% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
</select>
{# Main control bar with filter, search, and ordering #}
<div class="input-group">
<button class="btn btn-secondary position-relative" type="button"
data-bs-toggle="collapse" data-bs-target="#collapse-filter"
aria-expanded="false" aria-controls="collapse-filter" id="filter-button" hx-preserve
title="{% translate 'Filter transactions' %}">
<i class="fa-solid fa-filter fa-fw"></i>
</button>
</div>
{# Ordering button#}
<div class="col-sm-6 col-12 tw:content-center my-3 my-sm-0">
<div class="text-sm-end" _="on change trigger updated on window">
<label for="order">{% translate "Order by" %}</label>
<select
class="tw:border-0 tw:focus-visible:outline-0 w-full pe-2 tw:leading-normal text-bg-tertiary tw:font-medium rounded bg-body text-body"
name="order" id="order">
<option value="default"
{% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
<option value="older"
{% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
<option value="newer"
{% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
</select>
</div>
</div>
</div>
{# Filter transactions form#}
<div class="collapse" id="collapse-filter" hx-preserve>
<div class="card card-body">
<form _="on change or submit or search trigger updated on window end
install init_tom_select
install init_datepicker"
id="filter">
{% crispy filter.form %}
</form>
<button class="btn btn-outline-danger btn-sm"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
</div>
<div id="search" class="my-3">
<label class="w-100">
<input type="search" class="form-control" placeholder="{% translate 'Search' %}" hx-preserve
{# Search box #}
<label for="quick-search">
</label>
<input type="search"
class="form-control"
placeholder="{% translate 'Search' %}"
hx-preserve
id="quick-search"
_="on input or search or htmx:afterSwap from window
if my value is empty
trigger toggle on <.transactions-divider-collapse/>
else
trigger show on <.transactions-divider-collapse/>
end
show <.transactions-divider-title/> when my value is empty
show <.transaction/> in <#transactions-list/>
when its textContent.toLowerCase() contains my value.toLowerCase()">
</label>
if my value is empty
trigger toggle on <.transactions-divider-collapse/>
else
trigger show on <.transactions-divider-collapse/>
end
show <.transactions-divider-title/> when my value is empty
show <.transaction/> in <#transactions-list/>
when its textContent.toLowerCase() contains my value.toLowerCase()">
{# Order by icon dropdown #}
<button class="btn btn-secondary dropdown-toggle dropdown-toggle-no-icon" type="button"
data-bs-toggle="dropdown" aria-expanded="false"
title="{% translate 'Order by' %}">
<i class="fa-solid fa-sort fa-fw"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<button class="dropdown-item {% if order == 'default' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'default'
then trigger change on #order">
{% translate 'Default' %}
</button>
</li>
<li>
<button class="dropdown-item {% if order == 'older' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'older'
then trigger change on #order">
{% translate 'Oldest first' %}
</button>
</li>
<li>
<button class="dropdown-item {% if order == 'newer' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'newer'
then trigger change on #order">
{% translate 'Newest first' %}
</button>
</li>
</ul>
</div>
{# Filter transactions form #}
<div class="collapse" id="collapse-filter" hx-preserve>
<div class="card card-body">
<div class="text-end">
<button class="btn btn-outline-danger btn-sm tw:w-fit"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
<form _="on change or submit or search trigger updated on window
install init_tom_select
install init_datepicker"
id="filter" class="mt-3">
{% crispy filter.form %}
</form>
<div class="text-end">
<button class="btn btn-outline-danger btn-sm tw:w-fit"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
</div>
</div>
</div>
{# Transactions list#}
<div id="transactions"

View File

@@ -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>

View File

@@ -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 %}

View File

@@ -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 %}

View File

@@ -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 %}

View File

@@ -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>

View File

@@ -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>

View File

@@ -5,121 +5,128 @@
<div id="transactions-list">
{% for x in transactions_by_date %}
<div id="{{ x.grouper|slugify }}"
_="on htmx:afterSettle from #transactions if sessionStorage.getItem(my id) is null then sessionStorage.setItem(my id, 'true')">
<div class="mt-3 mb-1 w-100 tw:text-base border-bottom bg-body">
<div id="{{ x.grouper|slugify }}" class="transactions-divider"
_="on htmx:afterSwap from #transactions if sessionStorage.getItem(my id) is null then sessionStorage.setItem(my id, 'true')">
<div class="mt-3 mb-1 w-100 tw:text-base border-bottom bg-body transactions-divider-title">
<a class="text-decoration-none d-inline-block w-100"
role="button"
data-bs-toggle="collapse"
data-bs-target="#c-{{ x.grouper|slugify }}-collapse"
id="c-{{ x.grouper|slugify }}-collapsible"
aria-expanded="true"
aria-expanded="false"
aria-controls="c-{{ x.grouper|slugify }}-collapse">
{{ x.grouper }}
</a>
</div>
<div class="collapse" id="c-{{ x.grouper|slugify }}-collapse"
<div class="collapse transactions-divider-collapse" id="c-{{ x.grouper|slugify }}-collapse"
_="on shown.bs.collapse sessionStorage.setItem(the closest parent @id, 'true')
on hidden.bs.collapse sessionStorage.setItem(the closest parent @id, 'false')
on htmx:afterSettle from #transactions
on htmx:afterSettle from #transactions or toggle
set state to sessionStorage.getItem(the closest parent @id)
if state is 'true' or state is null
add .show to me
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to true
end">
else
remove .show from me
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to false
end
on show
add .show to me
set @aria-expanded of #c-{{ x.grouper|slugify }}-collapsible to true">
<div class="d-flex flex-column">
{% for transaction in x.list %}
<c-transaction.item :transaction="transaction"></c-transaction.item>
<c-transaction.item
:transaction="transaction"></c-transaction.item>
{% endfor %}
</div>
</div>
</div>
{% empty %}
<c-msg.empty
title="{% translate "No transactions found" %}"
subtitle="{% translate "Try adding one" %}"></c-msg.empty>
{% endfor %}
title="{% translate "No transactions found" %}"
subtitle="{% translate "Try adding one" %}"></c-msg.empty>
{% endfor %}
{% if page_obj.has_other_pages %}
<div class="mt-auto">
<input value="{{ page_obj.number }}" name="page" type="hidden" id="page">
<div class="mt-auto">
<input value="{{ page_obj.number }}" name="page" type="hidden" id="page">
<nav aria-label="{% translate 'Page navigation' %}">
<ul class="pagination justify-content-center mt-5">
<li class="page-item">
<a class="page-link tw:cursor-pointer {% if not page_obj.has_previous %}disabled{% endif %}"
hx-get="{% if page_obj.has_previous %}{% url 'transactions_all_list' %}{% endif %}"
hx-vals='{"page": 1}'
hx-include="#filter, #order"
hx-target="#transactions-list"
aria-label="Primeira página"
hx-swap="show:top">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
{% for page_number in page_obj.paginator.page_range %}
{% comment %}
<nav aria-label="{% translate 'Page navigation' %}">
<ul class="pagination justify-content-center mt-5">
<li class="page-item">
<a class="page-link tw:cursor-pointer {% if not page_obj.has_previous %}disabled{% endif %}"
hx-get="{% if page_obj.has_previous %}{% url 'transactions_all_list' %}{% endif %}"
hx-vals='{"page": 1}'
hx-include="#filter, #order"
hx-target="#transactions-list"
aria-label="Primeira página"
hx-swap="show:top">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
{% for page_number in page_obj.paginator.page_range %}
{% comment %}
This conditional allows us to display up to 3 pages before and after the current page
If you decide to remove this conditional, all the pages will be displayed
You can change the 3 to any number you want e.g
To display only 5 pagination items, change the 3 to 2 (2 before and 2 after the current page)
{% endcomment %}
{% if page_number <= page_obj.number|add:3 and page_number >= page_obj.number|add:-3 %}
{% if page_obj.number == page_number %}
<li class="page-item active">
<a class="page-link tw:cursor-pointer">
{{ page_number }}
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'transactions_all_list' %}"
hx-vals='{"page": {{ page_number }}}'
hx-include="#filter, #order"
hx-target="#transactions-list"
hx-swap="show:top">
{{ page_number }}
</a>
</li>
{% endif %}
{% if page_number <= page_obj.number|add:3 and page_number >= page_obj.number|add:-3 %}
{% if page_obj.number == page_number %}
<li class="page-item active">
<a class="page-link tw:cursor-pointer">
{{ page_number }}
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'transactions_all_list' %}"
hx-vals='{"page": {{ page_number }}}'
hx-include="#filter, #order"
hx-target="#transactions-list"
hx-swap="show:top">
{{ page_number }}
</a>
</li>
{% endif %}
{% endfor %}
{% if page_obj.number|add:3 < page_obj.paginator.num_pages %}
<li class="page-item">
<a class="page-link disabled"
aria-label="...">
<span aria-hidden="true">...</span>
</a>
</li>
<li class="page-item">
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'transactions_all_list' %}" hx-target="#transactions-list"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
hx-include="#filter, #order"
hx-swap="show:top"
aria-label="Última página">
<span aria-hidden="true">{{ page_obj.paginator.num_pages }}</span>
</a>
</li>
{% endif %}
<li class="page-item">
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw:cursor-pointer"
hx-get="{% if page_obj.has_next %}{% url 'transactions_all_list' %}{% endif %}"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
hx-include="#filter, #order"
hx-swap="show:top"
hx-target="#transactions-list"
aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>
</div>
{% endif %}
{% endfor %}
{% if page_obj.number|add:3 < page_obj.paginator.num_pages %}
<li class="page-item">
<a class="page-link disabled"
aria-label="...">
<span aria-hidden="true">...</span>
</a>
</li>
<li class="page-item">
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'transactions_all_list' %}" hx-target="#transactions-list"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
hx-include="#filter, #order"
hx-swap="show:top"
aria-label="Última página">
<span aria-hidden="true">{{ page_obj.paginator.num_pages }}</span>
</a>
</li>
{% endif %}
<li class="page-item">
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw:cursor-pointer"
hx-get="{% if page_obj.has_next %}{% url 'transactions_all_list' %}{% endif %}"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}}'
hx-include="#filter, #order"
hx-swap="show:top"
hx-target="#transactions-list"
aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>
</div>
{% endif %}
{# Floating bar#}
{# Floating bar#}
<c-ui.transactions-action-bar></c-ui.transactions-action-bar>
</div>

View File

@@ -8,45 +8,101 @@
<div class="container px-md-3 py-3 column-gap-5">
<div class="row gx-xl-4 gy-3">
<div class="col-12 col-xl-8 order-2 order-xl-1">
<div class="row mb-1">
<div class="col-sm-6 col-12">
{# Filter transactions button #}
<button type="button" class="btn btn-sm btn-outline-primary dropdown-toggle" type="button"
data-bs-toggle="collapse" data-bs-target="#collapse-filter" aria-expanded="false"
aria-controls="collapse-filter">
<i class="fa-solid fa-filter fa-fw me-2"></i>{% translate 'Filter transactions' %}
<div class="mb-3">
{# Hidden select to hold the order value and preserve the original update trigger #}
<select name="order" id="order" class="d-none" _="on change trigger updated on window">
<option value="default" {% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
<option value="older" {% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
<option value="newer" {% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
</select>
{# Main control bar with filter, search, and ordering #}
<div class="input-group">
<button class="btn btn-secondary position-relative" type="button"
data-bs-toggle="collapse" data-bs-target="#collapse-filter"
aria-expanded="false" aria-controls="collapse-filter" id="filter-button" hx-preserve
title="{% translate 'Filter transactions' %}">
<i class="fa-solid fa-filter fa-fw"></i>
</button>
{# Search box #}
<label for="quick-search">
</label>
<input type="search"
class="form-control"
placeholder="{% translate 'Search' %}"
hx-preserve
id="quick-search"
_="on input or search or htmx:afterSwap from window
if my value is empty
trigger toggle on <.transactions-divider-collapse/>
else
trigger show on <.transactions-divider-collapse/>
end
show <.transactions-divider-title/> when my value is empty
show <.transaction/> in <#transactions-list/>
when its textContent.toLowerCase() contains my value.toLowerCase()">
{# Order by icon dropdown #}
<button class="btn btn-secondary dropdown-toggle dropdown-toggle-no-icon" type="button"
data-bs-toggle="dropdown" aria-expanded="false"
title="{% translate 'Order by' %}">
<i class="fa-solid fa-sort fa-fw"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<button class="dropdown-item {% if order == 'default' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'default'
then trigger change on #order">
{% translate 'Default' %}
</button>
</li>
<li>
<button class="dropdown-item {% if order == 'older' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'older'
then trigger change on #order">
{% translate 'Oldest first' %}
</button>
</li>
<li>
<button class="dropdown-item {% if order == 'newer' %}active{% endif %}" type="button"
_="on click remove .active from .dropdown-item in the closest <ul/>
then add .active to me
then set the value of #order to 'newer'
then trigger change on #order">
{% translate 'Newest first' %}
</button>
</li>
</ul>
</div>
{# Ordering button#}
<div class="col-sm-6 col-12 tw:content-center my-3 my-sm-0">
<div class="text-sm-end" _="on change trigger updated on window">
<label for="order">{% translate "Order by" %}</label>
<select
class="tw:border-0 tw:focus-visible:outline-0 w-full pe-2 tw:leading-normal text-bg-tertiary tw:font-medium rounded bg-body text-body"
name="order" id="order">
<option value="default"
{% if order == 'default' %}selected{% endif %}>{% translate 'Default' %}</option>
<option value="older"
{% if order == 'older' %}selected{% endif %}>{% translate 'Oldest first' %}</option>
<option value="newer"
{% if order == 'newer' %}selected{% endif %}>{% translate 'Newest first' %}</option>
</select>
{# Filter transactions form #}
<div class="collapse" id="collapse-filter" hx-preserve>
<div class="card card-body">
<div class="text-end">
<button class="btn btn-outline-danger btn-sm tw:w-fit"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
<form _="on change or submit or search trigger updated on window
install init_tom_select
install init_datepicker"
id="filter" class="mt-3">
{% crispy filter.form %}
</form>
<div class="text-end">
<button class="btn btn-outline-danger btn-sm tw:w-fit"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
</div>
</div>
</div>
{# Filter transactions form#}
<div class="collapse" id="collapse-filter">
<div class="card card-body">
<form _="on change or submit or search trigger updated on window end
install init_tom_select
install init_datepicker"
id="filter">
{% crispy filter.form %}
</form>
<button class="btn btn-outline-danger btn-sm"
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
</div>
</div>
<div id="transactions"
class="show-loading"
hx-get="{% url 'transactions_all_list' %}"

View File

@@ -49,3 +49,7 @@ $theme-colors: map.merge(
.offcanvas-size-sm {
--#{$prefix}offcanvas-width: min(95vw, 250px) !important;
}
.dropdown-toggle.dropdown-toggle-no-icon::after {
display:none;
}

View File

@@ -3,9 +3,139 @@
@custom-variant hover (&:hover);
.sidebar-active {
@apply tw:bg-gray-700 tw:text-white;
@apply tw:bg-gray-700 tw:text-white;
}
.sidebar-item:not(.sidebar-active) {
@apply tw:text-gray-300 tw:hover:text-white;
}
@layer components {
.sidebar {
@apply tw:z-1020 tw:fixed tw:top-0 tw:start-0 tw:h-full tw:transition-all tw:duration-100;
}
.sidebar-floating {
/* Establishes the hover group and sets the collapsed/hover widths for the container */
@apply tw:lg:w-16 tw:lg:hover:w-112;
}
.sidebar-floating #sidebar {
/* Sets the collapsed/hover widths for the inner navigation element */
@apply tw:lg:w-16 tw:lg:group-hover:w-104 tw:transition-all tw:duration-100 tw:overflow-hidden;
}
.sidebar-floating + main {
/* Adjusts the main content margin to account for the collapsed sidebar */
@apply tw:lg:ml-16 tw:transition-all tw:duration-100;
}
.sidebar-floating .sidebar-item span {
/* Hides the text labels and reveals them only on hover */
@apply tw:lg:invisible tw:lg:group-hover:visible;
}
.sidebar-floating .sidebar-invisible {
/* Hides the text labels and reveals them only on hover */
@apply tw:lg:invisible tw:lg:group-hover:visible;
}
.sidebar-floating .sidebar-menu-header {
/* Hides the menu headers and reveals them only on hover */
@apply tw:lg:hidden tw:lg:group-hover:inline;
}
.sidebar-floating #sidebar-toggle-btn .fa-thumbtack-slash {
/* Hides the 'pin' icon in the floating state */
@apply tw:hidden!;
}
.sidebar-floating #sidebar-toggle-btn .fa-thumbtack {
/* Shows the 'expand' icon in the floating state */
@apply tw:inline-block!;
}
.sidebar-floating .sidebar-title span {
@apply tw:lg:invisible tw:lg:group-hover:visible
}
.sidebar-submenu-header {
@apply tw:flex;
}
.sidebar-floating .sidebar-submenu-header {
@apply tw:lg:hidden tw:lg:group-hover:flex;
}
.sidebar-floating .sidebar-submenu-header h5 {
@apply tw:lg:invisible tw:lg:group-hover:visible;
}
.sidebar-floating .sidebar-submenu-header button {
@apply tw:lg:hidden tw:lg:group-hover:inline;
}
.sidebar-floating .list-unstyled {
@apply tw:group-hover:lg:overflow-y-auto tw:lg:overflow-y-hidden tw:overflow-y-auto tw:overflow-x-hidden;
}
.sidebar-floating .sidebar-item {
@apply tw:text-wrap tw:lg:text-nowrap ;
}
/* --- STATE 2: Fixed (Permanently Expanded) --- */
.sidebar-fixed {
/* Sets the fixed, expanded width for the container */
@apply tw:lg:w-[17%] tw:transition-all tw:duration-100;
}
.sidebar-fixed #sidebar {
/* Sets the fixed, expanded width for the inner navigation */
@apply tw:lg:w-[17%] tw:transition-all tw:duration-100;
}
.sidebar-fixed + main {
/* Adjusts the main content margin to account for the expanded sidebar */
@apply tw:lg:ml-[17%] tw:transition-all tw:duration-100;
/* Using 16vw to account for padding/margins */
}
.sidebar-fixed .sidebar-item {
@apply tw:text-wrap;
}
.sidebar-fixed .sidebar-item span {
/* Ensures text labels are always visible */
@apply tw:lg:visible;
}
.sidebar-fixed .sidebar-menu-header {
/* Ensures menu headers are always visible */
@apply tw:lg:inline;
}
.sidebar-fixed #sidebar-toggle-btn .fa-thumbtack-slash {
/* Shows the 'pin' icon in the fixed state */
@apply tw:inline-block!;
}
.sidebar-fixed #sidebar-toggle-btn .fa-thumbtack {
/* Hides the 'expand' icon in the fixed state */
@apply tw:hidden!;
}
.sidebar-fixed .sidebar-title span {
@apply tw:lg:visible;
}
.sidebar-fixed .sidebar-submenu-header {
/* Ensures menu headers are always visible */
@apply tw:lg:flex;
}
.sidebar-fixed .list-unstyled {
@apply tw:overflow-y-auto tw:overflow-x-hidden;
}
}