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
+1 -1
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",
+14
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"
+4 -1
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
+3
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
+1 -1
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,
)
+2
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",
@@ -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'),
),
]
+5
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
-6
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)
+22 -12
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"] = {}
+2
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
@@ -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()
+137 -3
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
)
@@ -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"),
),
]
@@ -0,0 +1,18 @@
# Generated by Django 5.2.5 on 2025-08-31 18:42
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rules', '0015_alter_transactionruleaction_options_and_more'),
]
operations = [
migrations.AddField(
model_name='transactionrule',
name='sequenced',
field=models.BooleanField(default=False, verbose_name='Sequenced'),
),
]
@@ -0,0 +1,33 @@
# Generated by Django 5.2.5 on 2025-08-31 19:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rules', '0016_transactionrule_sequenced'),
]
operations = [
migrations.AddField(
model_name='updateorcreatetransactionruleaction',
name='search_mute',
field=models.TextField(blank=True, verbose_name='Search Mute'),
),
migrations.AddField(
model_name='updateorcreatetransactionruleaction',
name='search_mute_operator',
field=models.CharField(choices=[('exact', 'is exactly'), ('contains', 'contains'), ('startswith', 'starts with'), ('endswith', 'ends with'), ('eq', 'equals'), ('gt', 'greater than'), ('lt', 'less than'), ('gte', 'greater than or equal'), ('lte', 'less than or equal')], default='exact', max_length=10, verbose_name='Mute Operator'),
),
migrations.AddField(
model_name='updateorcreatetransactionruleaction',
name='set_mute',
field=models.TextField(blank=True, verbose_name='Mute'),
),
migrations.AlterField(
model_name='transactionruleaction',
name='field',
field=models.CharField(choices=[('account', 'Account'), ('type', 'Type'), ('is_paid', 'Paid'), ('date', 'Date'), ('reference_date', 'Reference Date'), ('mute', 'Mute'), ('amount', 'Amount'), ('description', 'Description'), ('notes', 'Notes'), ('category', 'Category'), ('tags', 'Tags'), ('entities', 'Entities'), ('internal_nome', 'Internal Note'), ('internal_id', 'Internal ID')], max_length=50, verbose_name='Field'),
),
]
@@ -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'),
),
]
+40
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)
+7 -26
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,
)
+657 -331
View File
File diff suppressed because it is too large Load Diff
+15
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
+93
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,
}
+178 -2
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},
)
+107 -22
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(
+62 -7
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):
+1 -1
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")
+14 -6
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,
+5
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,
+18
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"])
+1 -1
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:
+167 -155
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"
+167 -155
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 ""
+167 -155
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
+170 -162
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"
+167 -155
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"
+170 -162
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"
+167 -155
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 ""
+167 -155
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 ""
+3
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>
@@ -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>
@@ -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>
@@ -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>
+158 -113
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>
@@ -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>
+53 -22
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>
@@ -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 %}
+1 -1
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>
@@ -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"
+4
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>
@@ -0,0 +1,16 @@
{% extends 'extends/offcanvas.html' %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block title %}{% translate 'Edit transaction rule' %}{% endblock %}
{% block body %}
<form hx-post="{% url 'transaction_rule_dry_run_created' pk=rule.id %}" hx-target="#generic-offcanvas"
hx-indicator="#dry-run-created-result, closest form" class="show-loading" novalidate>
{% crispy form %}
</form>
<hr>
<div id="dry-run-created-result" class="show-loading">
{% include 'rules/fragments/transaction_rule/dry_run/visual.html' with logs=logs results=results %}
</div>
{% endblock %}
@@ -0,0 +1,16 @@
{% extends 'extends/offcanvas.html' %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block title %}{% translate 'Edit transaction rule' %}{% endblock %}
{% block body %}
<form hx-post="{% url 'transaction_rule_dry_run_deleted' pk=rule.id %}" hx-target="#generic-offcanvas"
hx-indicator="#dry-run-deleted-result, closest form" class="show-loading" novalidate>
{% crispy form %}
</form>
<hr>
<div id="dry-run-deleted-result" class="show-loading">
{% include 'rules/fragments/transaction_rule/dry_run/visual.html' with logs=logs results=results %}
</div>
{% endblock %}
@@ -0,0 +1,16 @@
{% extends 'extends/offcanvas.html' %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block title %}{% translate 'Edit transaction rule' %}{% endblock %}
{% block body %}
<form hx-post="{% url 'transaction_rule_dry_run_updated' pk=rule.id %}" hx-target="#generic-offcanvas"
hx-indicator="#dry-run-updated-result, closest form" class="show-loading" novalidate>
{% crispy form %}
</form>
<hr>
<div id="dry-run-updated-result" class="show-loading">
{% include 'rules/fragments/transaction_rule/dry_run/visual.html' with logs=logs results=results %}
</div>
{% endblock %}
@@ -0,0 +1,101 @@
{% load i18n %}
<div class="card tw:max-h-full tw:overflow-auto tw:overflow-x-auto">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item">
<button class="nav-link active" id="visual-tab" data-bs-toggle="tab" data-bs-target="#visual-tab-pane"
type="button" role="tab" aria-controls="visual-tab-pane"
aria-selected="true">{% translate 'Visual' %}</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="logs-tab" data-bs-toggle="tab" data-bs-target="#logs-tab-pane" type="button"
role="tab" aria-controls="logs-tab-pane" aria-selected="false">{% translate 'Logs' %}</button>
</li>
</ul>
</div>
<div class="card-body">
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="visual-tab-pane" role="tabpanel" aria-labelledby="home-tab"
tabindex="0">
{% if not results %}
{% translate 'Run a test to see...' %}
{% else %}
{% for result in results %}
{% if result.type == 'header' %}
<div class="my-3">
<h6 class="text-center mb-3">
<span class="badge text-bg-secondary">
{% if result.header_type == "edit_transaction" %}
{% translate 'Edit transaction' %}
{% elif result.header_type == "update_or_create_transaction" %}
{% translate 'Update or create transaction' %}
{% endif %}
</span>
</h6>
</div>
{% endif %}
{% if result.type == 'triggering_transaction' %}
<div class="mt-4">
<h6 class="text-center mb-3"><span class="badge text-bg-secondary">{% translate 'Start' %}</span></h6>
<c-transaction.item :transaction="result.transaction" :dummy="True"
:disable-selection="True"></c-transaction.item>
</div>
{% endif %}
{% if result.type == 'edit_transaction' %}
<div>
<div>
{% translate 'Set' %} <span
class="badge text-bg-secondary">{{ result.field }}</span> {% translate 'to' %}
<span class="badge text-bg-secondary">{{ result.new_value }}</span>
</div>
<c-transaction.item :transaction="result.transaction" :dummy="True"
:disable-selection="True"></c-transaction.item>
</div>
{% endif %}
{% if result.type == 'update_or_create_transaction' %}
<div>
<div class="alert alert-info" role="alert">
{% translate 'Search' %}: {{ result.query }}
</div>
{% if result.start_transaction %}
<c-transaction.item :transaction="result.start_transaction" :dummy="True"
:disable-selection="True"></c-transaction.item>
{% else %}
<div class="alert alert-danger" role="alert">
{% translate 'No transaction found, a new one will be created' %}
</div>
{% endif %}
<div class="text-center h3 my-2"><i class="fa-solid fa-arrow-down"></i></div>
<c-transaction.item :transaction="result.end_transaction" :dummy="True"
:disable-selection="True"></c-transaction.item>
</div>
{% endif %}
{% if result.type == 'error' %}
<div>
<div class="alert alert-{% if result.level == 'error' %}danger{% elif result.level == 'warning' %}warning{% else %}info{% endif %}" role="alert">
{{ result.error }}
</div>
</div>
{% endif %}
{% endfor %}
{% endif %}
</div>
<div class="tab-pane fade" id="logs-tab-pane" role="tabpanel" aria-labelledby="logs-tab" tabindex="0">
{% if not logs %}
{% translate 'Run a test to see...' %}
{% else %}
<pre>
{{ logs|linebreaks }}
</pre>
{% endif %}
</div>
</div>
</div>
</div>
@@ -30,95 +30,128 @@
<div class="my-3">
<div class="tw:text-xl mb-2">{% translate 'Then...' %}</div>
{% for action in transaction_rule.transaction_actions.all %}
<div class="card mb-3">
<div class="card-header">
<div><span class="badge text-bg-primary">{% trans 'Edit transaction' %}</span></div>
{% for action in all_actions %}
{% if action.action_type == "edit_transaction" %}
<div class="card mb-3">
<div class="card-header">
<div>
{% if action.order != 0 %}<span class="badge text-bg-secondary">{{ action.order }}</span>{% endif %}
<span class="badge text-bg-primary">{% trans 'Edit transaction' %}</span>
</div>
</div>
<div class="card-body">
<div>
{% translate 'Set' %} <span
class="badge text-bg-secondary">{{ action.get_field_display }}</span> {% translate 'to' %}
</div>
<div class="text-bg-secondary rounded-3 mt-3 p-2">{{ action.value }}</div>
</div>
<div class="card-footer text-end">
<a class="text-decoration-none tw:text-gray-400 p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate 'Edit' %}"
hx-get="{% url 'transaction_rule_action_edit' transaction_rule_action_id=action.id %}"
hx-target="#generic-offcanvas">
<i class="fa-solid fa-pencil fa-fw"></i>
</a>
<a class="text-danger text-decoration-none p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate 'Delete' %}"
hx-delete="{% url 'transaction_rule_action_delete' transaction_rule_action_id=action.id %}"
hx-trigger='confirmed'
data-bypass-on-ctrl="true"
data-title="{% translate 'Are you sure?' %}"
data-text="{% translate "You won't be able to revert this!" %}"
data-confirm-text="{% translate 'Yes, delete it!' %}"
_="install prompt_swal">
<i class="fa-solid fa-trash fa-fw"></i>
</a>
</div>
</div>
<div class="card-body">
<div>{% translate 'Set' %} <span
class="badge text-bg-secondary">{{ action.get_field_display }}</span> {% translate 'to' %}</div>
<div class="text-bg-secondary rounded-3 mt-3 p-2">{{ action.value }}</div>
{% elif action.action_type == "update_or_create_transaction" %}
<div class="card mb-3">
<div class="card-header">
<div>
{% if action.order != 0 %}<span class="badge text-bg-secondary">{{ action.order }}</span>{% endif %}
<span class="badge text-bg-primary">{% trans 'Update or create transaction' %}</span>
</div>
</div>
<div class="card-body">
<div>{% trans 'Edit to view' %}</div>
</div>
<div class="card-footer text-end">
<a class="text-decoration-none tw:text-gray-400 p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate 'Edit' %}"
hx-get="{% url 'update_or_create_transaction_rule_action_edit' pk=action.id %}"
hx-target="#generic-offcanvas">
<i class="fa-solid fa-pencil fa-fw"></i>
</a>
<a class="text-danger text-decoration-none p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate 'Delete' %}"
hx-delete="{% url 'update_or_create_transaction_rule_action_delete' pk=action.id %}"
hx-trigger='confirmed'
data-bypass-on-ctrl="true"
data-title="{% translate 'Are you sure?' %}"
data-text="{% translate "You won't be able to revert this!" %}"
data-confirm-text="{% translate 'Yes, delete it!' %}"
_="install prompt_swal">
<i class="fa-solid fa-trash fa-fw"></i>
</a>
</div>
</div>
<div class="card-footer text-end">
<a class="text-decoration-none tw:text-gray-400 p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Edit" %}"
hx-get="{% url 'transaction_rule_action_edit' transaction_rule_action_id=action.id %}"
hx-target="#generic-offcanvas">
<i class="fa-solid fa-pencil fa-fw"></i>
</a>
<a class="text-danger text-decoration-none p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Delete" %}"
hx-delete="{% url 'transaction_rule_action_delete' transaction_rule_action_id=action.id %}"
hx-trigger='confirmed'
data-bypass-on-ctrl="true"
data-title="{% translate "Are you sure?" %}"
data-text="{% translate "You won't be able to revert this!" %}"
data-confirm-text="{% translate "Yes, delete it!" %}"
_="install prompt_swal">
<i class="fa-solid fa-trash fa-fw"></i>
</a>
</div>
</div>
{% endfor %}
{% for action in transaction_rule.update_or_create_transaction_actions.all %}
<div class="card mb-3">
<div class="card-header">
<div><span class="badge text-bg-primary">{% trans 'Update or create transaction' %}</span></div>
</div>
<div class="card-body">
<div>{% trans 'Edit to view' %}</div>
</div>
<div class="card-footer text-end">
<a class="text-decoration-none tw:text-gray-400 p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Edit" %}"
hx-get="{% url 'update_or_create_transaction_rule_action_edit' pk=action.id %}"
hx-target="#generic-offcanvas">
<i class="fa-solid fa-pencil fa-fw"></i>
</a>
<a class="text-danger text-decoration-none p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Delete" %}"
hx-delete="{% url 'update_or_create_transaction_rule_action_delete' pk=action.id %}"
hx-trigger='confirmed'
data-bypass-on-ctrl="true"
data-title="{% translate "Are you sure?" %}"
data-text="{% translate "You won't be able to revert this!" %}"
data-confirm-text="{% translate "Yes, delete it!" %}"
_="install prompt_swal">
<i class="fa-solid fa-trash fa-fw"></i>
</a>
</div>
</div>
{% endfor %}
{% if not transaction_rule.update_or_create_transaction_actions.all and not transaction_rule.transaction_actions.all %}
{% endif %}
{% empty %}
<div class="card">
<div class="card-body">
{% translate 'This rule has no actions' %}
</div>
</div>
{% endif %}
{% endfor %}
<hr>
<div class="dropdown">
<button class="btn btn-outline-primary text-decoration-none w-100" type="button" data-bs-toggle="dropdown"
aria-expanded="false">
<i class="fa-solid fa-circle-plus me-2"></i>{% translate 'Add new' %}
</button>
<ul class="dropdown-menu dropdown-menu-end w-100">
<li><a class="dropdown-item" role="link"
hx-get="{% url 'transaction_rule_action_add' transaction_rule_id=transaction_rule.id %}"
hx-target="#generic-offcanvas">{% trans 'Edit Transaction' %}</a></li>
<li><a class="dropdown-item" role="link"
hx-get="{% url 'update_or_create_transaction_rule_action_add' transaction_rule_id=transaction_rule.id %}"
hx-target="#generic-offcanvas">{% trans 'Update or Create Transaction' %}</a></li>
</ul>
<div class="d-grid d-lg-flex gap-2">
<div class="dropdown flex-fill">
<button class="btn btn-outline-primary text-decoration-none w-100" type="button" data-bs-toggle="dropdown"
aria-expanded="false">
<i class="fa-solid fa-flask-vial me-2"></i>{% translate 'Test' %}
</button>
<ul class="dropdown-menu">
{% if transaction_rule.on_create %}
<li><a class="dropdown-item" role="link" href="#"
hx-get="{% url 'transaction_rule_dry_run_created' pk=transaction_rule.id %}"
hx-target="#generic-offcanvas">{% trans 'Create' %}</a></li>
{% endif %}
{% if transaction_rule.on_update %}
<li><a class="dropdown-item" role="link" href="#"
hx-get="{% url 'transaction_rule_dry_run_updated' pk=transaction_rule.id %}"
hx-target="#generic-offcanvas">{% trans 'Update' %}</a></li>
{% endif %}
{% if transaction_rule.on_delete %}
<li><a class="dropdown-item" role="link" href="#"
hx-get="{% url 'transaction_rule_dry_run_deleted' pk=transaction_rule.id %}"
hx-target="#generic-offcanvas">{% trans 'Delete' %}</a></li>
{% endif %}
</ul>
</div>
<div class="dropdown flex-fill">
<button class="btn btn-outline-primary text-decoration-none w-100" type="button" data-bs-toggle="dropdown"
aria-expanded="false">
<i class="fa-solid fa-circle-plus me-2"></i>{% translate 'Add new' %}
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" role="link" href="#"
hx-get="{% url 'transaction_rule_action_add' transaction_rule_id=transaction_rule.id %}"
hx-target="#generic-offcanvas">{% trans 'Edit Transaction' %}</a></li>
<li><a class="dropdown-item" role="link" href="#"
hx-get="{% url 'update_or_create_transaction_rule_action_add' transaction_rule_id=transaction_rule.id %}"
hx-target="#generic-offcanvas">{% trans 'Update or Create Transaction' %}</a></li>
</ul>
</div>
</div>
</div>
</div>
@@ -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>
@@ -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' %}"
+4
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;
}
+131 -1
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;
}
}