Compare commits

...

7 Commits
0.7.0 ... 0.7.1

Author SHA1 Message Date
Herculino Trotta
3fb670ef00 Merge pull request #61 from eitchtee/dev
locale: update translations
2025-01-24 16:31:30 -03:00
Herculino Trotta
b9cd97f0b8 locale: update translations and remove dutch from available languages until translation is done 2025-01-24 16:30:31 -03:00
Herculino Trotta
011e0ad7c9 Merge pull request #60 from eitchtee/dev
fix: import preset not working behind nginx due to long url/csrf missing
2025-01-24 16:08:32 -03:00
Herculino Trotta
97465c07fe fix: import preset not working behind nginx due to long url/csrf missing 2025-01-24 16:06:47 -03:00
Herculino Trotta
36cbe2935a Merge pull request #59
feat(pwa): better offline page and offline
2025-01-24 14:25:57 -03:00
Herculino Trotta
dbea78cd3c feat(pwa): better offline page and offline request handler 2025-01-24 14:22:30 -03:00
Herculino Trotta
d50c84f8e6 refactor: remove debug prints 2025-01-24 00:36:33 -03:00
28 changed files with 884 additions and 360 deletions

View File

@@ -163,7 +163,7 @@ AUTH_USER_MODEL = "users.User"
LANGUAGE_CODE = "en"
LANGUAGES = (
("en", "English"),
("nl", "Nederlands"),
# ("nl", "Nederlands"),
("pt-br", "Português (Brasil)"),
)
@@ -377,6 +377,7 @@ PWA_APP_SCREENSHOTS = [
"type": "image/png",
},
]
PWA_SERVICE_WORKER_PATH = BASE_DIR / "templates" / "pwa" / "serviceworker.js"
ENABLE_SOFT_DELETE = os.getenv("ENABLE_SOFT_DELETE", "false").lower() == "true"
KEEP_DELETED_TRANSACTIONS_FOR = int(os.getenv("KEEP_DELETED_ENTRIES_FOR", "365"))

View File

@@ -2,9 +2,7 @@ from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.accounts.forms import AccountGroupForm
@@ -89,7 +87,6 @@ def account_group_edit(request, pk):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def account_group_delete(request, pk):
account_group = get_object_or_404(AccountGroup, id=pk)

View File

@@ -2,9 +2,7 @@ from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.accounts.forms import AccountForm
@@ -89,7 +87,6 @@ def account_edit(request, pk):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def account_delete(request, pk):
account = get_object_or_404(Account, id=pk)

View File

@@ -2,9 +2,7 @@ from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
@@ -89,7 +87,6 @@ def currency_edit(request, pk):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def currency_delete(request, pk):
currency = get_object_or_404(Currency, id=pk)

View File

@@ -1,12 +1,11 @@
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.db.models import F, CharField, Value
from django.db.models import CharField, Value
from django.db.models.functions import Concat
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
@@ -135,7 +134,6 @@ def exchange_rate_edit(request, pk):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def exchange_rate_delete(request, pk):
exchange_rate = get_object_or_404(ExchangeRate, id=pk)

View File

@@ -6,12 +6,11 @@ from django.db.models.functions import TruncMonth
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
from apps.dca.models import DCAStrategy, DCAEntry
from apps.dca.forms import DCAEntryForm, DCAStrategyForm
from apps.dca.models import DCAStrategy, DCAEntry
@login_required
@@ -82,7 +81,6 @@ def strategy_edit(request, strategy_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def strategy_delete(request, strategy_id):
dca_strategy = get_object_or_404(DCAStrategy, id=strategy_id)
@@ -209,7 +207,6 @@ def strategy_entry_edit(request, strategy_id, entry_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def strategy_entry_delete(request, entry_id, strategy_id):
dca_entry = get_object_or_404(DCAEntry, id=entry_id, strategy__id=strategy_id)

View File

@@ -9,7 +9,7 @@ from apps.import_app.schemas import version_1
class ImportProfile(models.Model):
class Versions(models.IntegerChoices):
VERSION_1 = 1, _("Version") + " 1"
VERSION_1 = 1, "Version 1"
name = models.CharField(max_length=100, verbose_name=_("Name"), unique=True)
yaml_config = models.TextField(verbose_name=_("YAML Configuration"))
@@ -25,6 +25,10 @@ class ImportProfile(models.Model):
class Meta:
ordering = ["name"]
def get_version_display(self):
version_number = self.Versions(self.version).name.split("_")[1]
return _("Version {number}").format(number=version_number)
def clean(self):
if self.version and self.version == self.Versions.VERSION_1:
try:

View File

@@ -38,7 +38,7 @@ class PresetService:
preset["schema_version"]
) # Check if schema version is valid
except Exception as e:
print(e)
pass
else:
presets.append(preset)

View File

@@ -201,7 +201,6 @@ class ImportService:
),
None,
)
print(category_mapping)
try:
if category_mapping:

View File

@@ -5,15 +5,14 @@ from django.contrib.auth.decorators import login_required
from django.core.files.storage import FileSystemStorage
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from django.utils.translation import gettext_lazy as _
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
from apps.import_app.forms import ImportRunFileUploadForm, ImportProfileForm
from apps.import_app.models import ImportRun, ImportProfile
from apps.import_app.tasks import process_import
from apps.import_app.services import PresetService
from apps.import_app.tasks import process_import
def import_view(request):
@@ -33,7 +32,6 @@ def import_view(request):
@require_http_methods(["GET"])
def import_presets_list(request):
presets = PresetService.get_all_presets()
print(presets)
return render(
request,
"import_app/fragments/profiles/list_presets.html",
@@ -67,9 +65,9 @@ def import_profile_list(request):
@login_required
@require_http_methods(["GET", "POST"])
def import_profile_add(request):
message = request.GET.get("message", None) or request.POST.get("message", None)
message = request.POST.get("message", None)
if request.method == "POST":
if request.method == "POST" and request.POST.get("submit"):
form = ImportProfileForm(request.POST)
if form.is_valid():
@@ -83,12 +81,11 @@ def import_profile_add(request):
},
)
else:
print(int(request.GET.get("version", 1)))
form = ImportProfileForm(
initial={
"name": request.GET.get("name"),
"version": int(request.GET.get("version", 1)),
"yaml_config": request.GET.get("yaml_config"),
"name": request.POST.get("name"),
"version": int(request.POST.get("version", 1)),
"yaml_config": request.POST.get("yaml_config"),
}
)
@@ -130,7 +127,6 @@ def import_profile_edit(request, profile_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def import_profile_delete(request, profile_id):
profile = ImportProfile.objects.get(id=profile_id)
@@ -215,7 +211,6 @@ def import_run_add(request, profile_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def import_run_delete(request, profile_id, run_id):
run = ImportRun.objects.get(profile__id=profile_id, id=run_id)

View File

@@ -3,7 +3,6 @@ from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404, redirect
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
@@ -118,7 +117,6 @@ def transaction_rule_view(request, transaction_rule_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def transaction_rule_delete(request, transaction_rule_id):
transaction_rule = get_object_or_404(TransactionRule, id=transaction_rule_id)
@@ -201,7 +199,6 @@ def transaction_rule_action_edit(request, transaction_rule_action_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def transaction_rule_action_delete(request, transaction_rule_action_id):
transaction_rule_action = get_object_or_404(

View File

@@ -2,9 +2,7 @@ from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
@@ -111,7 +109,6 @@ def category_edit(request, category_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def category_delete(request, category_id):
category = get_object_or_404(TransactionCategory, id=category_id)

View File

@@ -3,7 +3,6 @@ from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
@@ -110,7 +109,6 @@ def entity_edit(request, entity_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def entity_delete(request, entity_id):
entity = get_object_or_404(TransactionEntity, id=entity_id)

View File

@@ -4,7 +4,6 @@ from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
@@ -152,7 +151,6 @@ def installment_plan_refresh(request, installment_plan_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def installment_plan_delete(request, installment_plan_id):
installment_plan = get_object_or_404(InstallmentPlan, id=installment_plan_id)

View File

@@ -1,5 +1,4 @@
from dateutil.relativedelta import relativedelta
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.db.models import Q
@@ -7,7 +6,6 @@ from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
@@ -230,7 +228,6 @@ def recurring_transaction_finish(request, recurring_transaction_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def recurring_transaction_delete(request, recurring_transaction_id):
recurring_transaction = get_object_or_404(

View File

@@ -3,7 +3,6 @@ from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
@@ -110,7 +109,6 @@ def tag_edit(request, tag_id):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def tag_delete(request, tag_id):
tag = get_object_or_404(TransactionTag, id=tag_id)

View File

@@ -8,7 +8,6 @@ from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
@@ -143,7 +142,6 @@ def transaction_clone(request, transaction_id, **kwargs):
@only_htmx
@login_required
@csrf_exempt
@require_http_methods(["DELETE"])
def transaction_delete(request, transaction_id, **kwargs):
transaction = get_object_or_404(Transaction, id=transaction_id)

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.1.5 on 2025-01-24 19:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0014_alter_usersettings_date_format_and_more'),
]
operations = [
migrations.AlterField(
model_name='usersettings',
name='language',
field=models.CharField(choices=[('auto', 'Auto'), ('en', 'English'), ('pt-br', 'Português (Brasil)')], default='auto', max_length=10, verbose_name='Language'),
),
]

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-01-22 13:17+0000\n"
"POT-Creation-Date: 2025-01-24 19:24+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"
@@ -24,20 +24,21 @@ msgstr ""
#: apps/accounts/forms.py:40 apps/accounts/forms.py:96
#: apps/currencies/forms.py:52 apps/currencies/forms.py:92 apps/dca/forms.py:41
#: apps/dca/forms.py:93 apps/rules/forms.py:45 apps/rules/forms.py:87
#: apps/transactions/forms.py:150 apps/transactions/forms.py:506
#: apps/transactions/forms.py:549 apps/transactions/forms.py:581
#: apps/transactions/forms.py:616 apps/transactions/forms.py:754
#: apps/dca/forms.py:93 apps/import_app/forms.py:34 apps/rules/forms.py:45
#: apps/rules/forms.py:87 apps/transactions/forms.py:150
#: apps/transactions/forms.py:506 apps/transactions/forms.py:549
#: apps/transactions/forms.py:581 apps/transactions/forms.py:616
#: apps/transactions/forms.py:754
msgid "Update"
msgstr ""
#: apps/accounts/forms.py:48 apps/accounts/forms.py:104
#: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:60
#: apps/currencies/forms.py:100 apps/dca/forms.py:49 apps/dca/forms.py:102
#: apps/rules/forms.py:53 apps/rules/forms.py:95 apps/transactions/forms.py:159
#: apps/transactions/forms.py:514 apps/transactions/forms.py:557
#: apps/transactions/forms.py:589 apps/transactions/forms.py:624
#: apps/transactions/forms.py:762
#: apps/import_app/forms.py:42 apps/rules/forms.py:53 apps/rules/forms.py:95
#: apps/transactions/forms.py:159 apps/transactions/forms.py:514
#: apps/transactions/forms.py:557 apps/transactions/forms.py:589
#: apps/transactions/forms.py:624 apps/transactions/forms.py:762
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -46,7 +47,8 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:9
#: templates/entities/fragments/list.html:9
#: templates/exchange_rates/fragments/list.html:10
#: templates/import_app/fragments/list.html:9
#: templates/import_app/fragments/profiles/list.html:7
#: templates/import_app/fragments/profiles/list.html:10
#: templates/installment_plans/fragments/list.html:9
#: templates/mini_tools/unit_price_calculator.html:162
#: templates/recurring_transactions/fragments/list.html:9
@@ -55,7 +57,6 @@ msgid "Add"
msgstr ""
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
#: templates/import_app/fragments/list.html:26
msgid "Group"
msgstr ""
@@ -66,8 +67,8 @@ msgstr ""
#: apps/accounts/forms.py:119 apps/rules/models.py:27
#: apps/transactions/forms.py:39 apps/transactions/forms.py:214
#: apps/transactions/forms.py:221 apps/transactions/forms.py:401
#: apps/transactions/forms.py:648 apps/transactions/models.py:111
#: apps/transactions/models.py:230 apps/transactions/models.py:410
#: apps/transactions/forms.py:648 apps/transactions/models.py:159
#: apps/transactions/models.py:311 apps/transactions/models.py:491
msgid "Category"
msgstr ""
@@ -75,21 +76,22 @@ msgstr ""
#: apps/transactions/filters.py:74 apps/transactions/forms.py:47
#: apps/transactions/forms.py:230 apps/transactions/forms.py:238
#: apps/transactions/forms.py:394 apps/transactions/forms.py:641
#: apps/transactions/models.py:117 apps/transactions/models.py:232
#: apps/transactions/models.py:414 templates/includes/navbar.html:98
#: apps/transactions/models.py:165 apps/transactions/models.py:313
#: apps/transactions/models.py:495 templates/includes/navbar.html:98
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr ""
#: apps/accounts/models.py:9 apps/accounts/models.py:21 apps/dca/models.py:14
#: apps/rules/models.py:9 apps/transactions/models.py:19
#: apps/transactions/models.py:39 apps/transactions/models.py:58
#: apps/import_app/models.py:14 apps/rules/models.py:9
#: apps/transactions/models.py:67 apps/transactions/models.py:87
#: apps/transactions/models.py:106
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
#: templates/currencies/fragments/list.html:26
#: templates/entities/fragments/table.html:16
#: templates/import_app/fragments/list.html:25
#: templates/import_app/fragments/profiles/list.html:36
#: templates/installment_plans/fragments/table.html:16
#: templates/recurring_transactions/fragments/table.html:18
#: templates/rules/fragments/list.html:26
@@ -109,13 +111,11 @@ msgstr ""
#: apps/accounts/models.py:31 apps/currencies/models.py:32
#: templates/accounts/fragments/list.html:27
#: templates/import_app/fragments/list.html:27
msgid "Currency"
msgstr ""
#: apps/accounts/models.py:37 apps/currencies/models.py:20
#: templates/accounts/fragments/list.html:28
#: templates/import_app/fragments/list.html:28
msgid "Exchange Currency"
msgstr ""
@@ -135,7 +135,6 @@ msgstr ""
#: apps/accounts/models.py:54 templates/accounts/fragments/list.html:30
#: templates/categories/fragments/list.html:24
#: templates/entities/fragments/list.html:24
#: templates/import_app/fragments/list.html:30
#: templates/tags/fragments/list.html:24
msgid "Archived"
msgstr ""
@@ -146,16 +145,15 @@ msgstr ""
#: apps/accounts/models.py:59 apps/rules/models.py:19
#: apps/transactions/forms.py:59 apps/transactions/forms.py:386
#: apps/transactions/forms.py:633 apps/transactions/models.py:84
#: apps/transactions/models.py:190 apps/transactions/models.py:392
#: apps/transactions/forms.py:633 apps/transactions/models.py:132
#: apps/transactions/models.py:271 apps/transactions/models.py:473
msgid "Account"
msgstr ""
#: apps/accounts/models.py:60 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4
#: templates/import_app/fragments/list.html:5
#: templates/includes/navbar.html:104 templates/includes/navbar.html:106
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:104
#: templates/includes/navbar.html:106
#: templates/transactions/fragments/summary.html:9
msgid "Accounts"
msgstr ""
@@ -164,27 +162,27 @@ msgstr ""
msgid "Exchange currency cannot be the same as the account's main currency."
msgstr ""
#: apps/accounts/views/account_groups.py:44
#: apps/accounts/views/account_groups.py:42
msgid "Account Group added successfully"
msgstr ""
#: apps/accounts/views/account_groups.py:72
#: apps/accounts/views/account_groups.py:70
msgid "Account Group updated successfully"
msgstr ""
#: apps/accounts/views/account_groups.py:99
#: apps/accounts/views/account_groups.py:96
msgid "Account Group deleted successfully"
msgstr ""
#: apps/accounts/views/accounts.py:44
#: apps/accounts/views/accounts.py:42
msgid "Account added successfully"
msgstr ""
#: apps/accounts/views/accounts.py:72
#: apps/accounts/views/accounts.py:70
msgid "Account updated successfully"
msgstr ""
#: apps/accounts/views/accounts.py:99
#: apps/accounts/views/accounts.py:96
msgid "Account deleted successfully"
msgstr ""
@@ -349,7 +347,7 @@ msgstr ""
#: apps/currencies/forms.py:68 apps/dca/models.py:156 apps/rules/models.py:22
#: apps/transactions/forms.py:63 apps/transactions/forms.py:242
#: apps/transactions/models.py:94
#: apps/transactions/models.py:142
#: templates/dca/fragments/strategy/details.html:53
#: templates/exchange_rates/fragments/table.html:11
msgid "Date"
@@ -405,27 +403,27 @@ msgstr ""
msgid "From and To currencies cannot be the same."
msgstr ""
#: apps/currencies/views/currencies.py:44
#: apps/currencies/views/currencies.py:42
msgid "Currency added successfully"
msgstr ""
#: apps/currencies/views/currencies.py:72
#: apps/currencies/views/currencies.py:70
msgid "Currency updated successfully"
msgstr ""
#: apps/currencies/views/currencies.py:99
#: apps/currencies/views/currencies.py:96
msgid "Currency deleted successfully"
msgstr ""
#: apps/currencies/views/exchange_rates.py:90
#: apps/currencies/views/exchange_rates.py:89
msgid "Exchange rate added successfully"
msgstr ""
#: apps/currencies/views/exchange_rates.py:118
#: apps/currencies/views/exchange_rates.py:117
msgid "Exchange rate updated successfully"
msgstr ""
#: apps/currencies/views/exchange_rates.py:145
#: apps/currencies/views/exchange_rates.py:143
msgid "Exchange rate deleted successfully"
msgstr ""
@@ -438,8 +436,8 @@ msgid "Payment Currency"
msgstr ""
#: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/models.py:26
#: apps/transactions/forms.py:256 apps/transactions/models.py:107
#: apps/transactions/models.py:239 apps/transactions/models.py:420
#: apps/transactions/forms.py:256 apps/transactions/models.py:155
#: apps/transactions/models.py:320 apps/transactions/models.py:501
msgid "Notes"
msgstr ""
@@ -479,30 +477,104 @@ msgstr ""
msgid "DCA Entries"
msgstr ""
#: apps/dca/views.py:38
#: apps/dca/views.py:37
msgid "DCA Strategy added successfully"
msgstr ""
#: apps/dca/views.py:65
#: apps/dca/views.py:64
msgid "DCA Strategy updated successfully"
msgstr ""
#: apps/dca/views.py:92
#: apps/dca/views.py:90
msgid "DCA strategy deleted successfully"
msgstr ""
#: apps/dca/views.py:165
#: apps/dca/views.py:163
msgid "Entry added successfully"
msgstr ""
#: apps/dca/views.py:192
#: apps/dca/views.py:190
msgid "Entry updated successfully"
msgstr ""
#: apps/dca/views.py:219
#: apps/dca/views.py:216
msgid "Entry deleted successfully"
msgstr ""
#: apps/import_app/forms.py:49
msgid "Select a file"
msgstr ""
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:124
msgid "Import"
msgstr ""
#: apps/import_app/models.py:12
#, python-brace-format
msgid "Version {number}"
msgstr ""
#: apps/import_app/models.py:15
msgid "YAML Configuration"
msgstr ""
#: apps/import_app/models.py:19
#: templates/import_app/fragments/profiles/list.html:37
msgid "Version"
msgstr ""
#: apps/import_app/models.py:35
msgid "Invalid YAML Configuration: "
msgstr ""
#: apps/import_app/models.py:41
msgid "Queued"
msgstr ""
#: apps/import_app/models.py:42
msgid "Processing"
msgstr ""
#: apps/import_app/models.py:43
msgid "Failed"
msgstr ""
#: apps/import_app/models.py:44
#: templates/installment_plans/fragments/list.html:24
#: templates/recurring_transactions/fragments/list.html:27
msgid "Finished"
msgstr ""
#: apps/import_app/models.py:50
msgid "Status"
msgstr ""
#: apps/import_app/models.py:58
msgid "File name"
msgstr ""
#: apps/import_app/views.py:75
msgid "Import Profile added successfully"
msgstr ""
#: apps/import_app/views.py:110
msgid "Import Profile update successfully"
msgstr ""
#: apps/import_app/views.py:136
msgid "Import Profile deleted successfully"
msgstr ""
#: apps/import_app/views.py:194
msgid "Import Run queued successfully"
msgstr ""
#: apps/import_app/views.py:220
msgid "Run deleted successfully"
msgstr ""
#: apps/rules/forms.py:20
msgid "Run on creation"
msgstr ""
@@ -528,8 +600,8 @@ msgid "A value for this field already exists in the rule."
msgstr ""
#: apps/rules/models.py:10 apps/rules/models.py:25
#: apps/transactions/forms.py:248 apps/transactions/models.py:105
#: apps/transactions/models.py:197 apps/transactions/models.py:406
#: apps/transactions/forms.py:248 apps/transactions/models.py:153
#: apps/transactions/models.py:278 apps/transactions/models.py:487
msgid "Description"
msgstr ""
@@ -537,33 +609,33 @@ msgstr ""
msgid "Trigger"
msgstr ""
#: apps/rules/models.py:20 apps/transactions/models.py:91
#: apps/transactions/models.py:195 apps/transactions/models.py:398
#: apps/rules/models.py:20 apps/transactions/models.py:139
#: apps/transactions/models.py:276 apps/transactions/models.py:479
msgid "Type"
msgstr ""
#: apps/rules/models.py:21 apps/transactions/filters.py:23
#: apps/transactions/models.py:93
#: apps/transactions/models.py:141
msgid "Paid"
msgstr ""
#: apps/rules/models.py:23 apps/transactions/forms.py:66
#: apps/transactions/forms.py:245 apps/transactions/forms.py:415
#: apps/transactions/models.py:95 apps/transactions/models.py:213
#: apps/transactions/models.py:422
#: apps/transactions/models.py:143 apps/transactions/models.py:294
#: apps/transactions/models.py:503
msgid "Reference Date"
msgstr ""
#: apps/rules/models.py:24 apps/transactions/models.py:100
#: apps/transactions/models.py:403
#: apps/rules/models.py:24 apps/transactions/models.py:148
#: apps/transactions/models.py:484
msgid "Amount"
msgstr ""
#: apps/rules/models.py:29 apps/transactions/filters.py:81
#: apps/transactions/forms.py:55 apps/transactions/forms.py:409
#: apps/transactions/forms.py:656 apps/transactions/models.py:69
#: apps/transactions/models.py:122 apps/transactions/models.py:235
#: apps/transactions/models.py:417 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:656 apps/transactions/models.py:117
#: apps/transactions/models.py:170 apps/transactions/models.py:316
#: apps/transactions/models.py:498 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:100
msgid "Entities"
msgstr ""
@@ -580,31 +652,31 @@ msgstr ""
msgid "Value"
msgstr ""
#: apps/rules/views.py:45
#: apps/rules/views.py:44
msgid "Rule deactivated successfully"
msgstr ""
#: apps/rules/views.py:47
#: apps/rules/views.py:46
msgid "Rule activated successfully"
msgstr ""
#: apps/rules/views.py:65
#: apps/rules/views.py:64
msgid "Rule added successfully"
msgstr ""
#: apps/rules/views.py:88
#: apps/rules/views.py:87
msgid "Rule updated successfully"
msgstr ""
#: apps/rules/views.py:128
#: apps/rules/views.py:126
msgid "Rule deleted successfully"
msgstr ""
#: apps/rules/views.py:182
#: apps/rules/views.py:180
msgid "Action updated successfully"
msgstr ""
#: apps/rules/views.py:213
#: apps/rules/views.py:210
msgid "Action deleted successfully"
msgstr ""
@@ -693,52 +765,52 @@ msgstr ""
msgid "End date should be after the start date"
msgstr ""
#: apps/transactions/models.py:20
#: apps/transactions/models.py:68
msgid "Mute"
msgstr ""
#: apps/transactions/models.py:23 apps/transactions/models.py:42
#: apps/transactions/models.py:61 templates/categories/fragments/list.html:21
#: apps/transactions/models.py:71 apps/transactions/models.py:90
#: apps/transactions/models.py:109 templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
#: templates/tags/fragments/list.html:21
msgid "Active"
msgstr ""
#: apps/transactions/models.py:25
#: apps/transactions/models.py:73
msgid ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
msgstr ""
#: apps/transactions/models.py:30
#: apps/transactions/models.py:78
msgid "Transaction Category"
msgstr ""
#: apps/transactions/models.py:31
#: apps/transactions/models.py:79
msgid "Transaction Categories"
msgstr ""
#: apps/transactions/models.py:44
#: apps/transactions/models.py:92
msgid ""
"Deactivated tags won't be able to be selected when creating new transactions"
msgstr ""
#: apps/transactions/models.py:49 apps/transactions/models.py:50
#: apps/transactions/models.py:97 apps/transactions/models.py:98
msgid "Transaction Tags"
msgstr ""
#: apps/transactions/models.py:63
#: apps/transactions/models.py:111
msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
msgstr ""
#: apps/transactions/models.py:68
#: apps/transactions/models.py:116
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:78
#: apps/transactions/models.py:126
#: templates/calendar_view/pages/calendar.html:54
#: templates/monthly_overview/fragments/monthly_summary.html:39
#: templates/monthly_overview/pages/overview.html:54
@@ -748,7 +820,7 @@ msgstr ""
msgid "Income"
msgstr ""
#: apps/transactions/models.py:79
#: apps/transactions/models.py:127
#: templates/calendar_view/pages/calendar.html:62
#: templates/monthly_overview/pages/overview.html:62
#: templates/yearly_overview/pages/overview_by_account.html:57
@@ -756,19 +828,35 @@ msgstr ""
msgid "Expense"
msgstr ""
#: apps/transactions/models.py:133 apps/transactions/models.py:242
#: apps/transactions/models.py:181 apps/transactions/models.py:323
msgid "Installment Plan"
msgstr ""
#: apps/transactions/models.py:142 apps/transactions/models.py:443
#: apps/transactions/models.py:190 apps/transactions/models.py:524
msgid "Recurring Transaction"
msgstr ""
#: apps/transactions/models.py:146
#: apps/transactions/models.py:192
msgid "Internal Note"
msgstr ""
#: apps/transactions/models.py:194
msgid "Internal ID"
msgstr ""
#: apps/transactions/models.py:198
msgid "Deleted"
msgstr ""
#: apps/transactions/models.py:203
msgid "Deleted At"
msgstr ""
#: apps/transactions/models.py:211
msgid "Transaction"
msgstr ""
#: apps/transactions/models.py:147 templates/includes/navbar.html:53
#: apps/transactions/models.py:212 templates/includes/navbar.html:53
#: templates/includes/navbar.html:94
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -776,95 +864,95 @@ msgstr ""
msgid "Transactions"
msgstr ""
#: apps/transactions/models.py:184
#: apps/transactions/models.py:265
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:185 apps/users/models.py:26
#: apps/transactions/models.py:266 apps/users/models.py:26
#: templates/includes/navbar.html:25
msgid "Monthly"
msgstr ""
#: apps/transactions/models.py:186
#: apps/transactions/models.py:267
msgid "Weekly"
msgstr ""
#: apps/transactions/models.py:187
#: apps/transactions/models.py:268
msgid "Daily"
msgstr ""
#: apps/transactions/models.py:200
#: apps/transactions/models.py:281
msgid "Number of Installments"
msgstr ""
#: apps/transactions/models.py:205
#: apps/transactions/models.py:286
msgid "Installment Start"
msgstr ""
#: apps/transactions/models.py:206
#: apps/transactions/models.py:287
msgid "The installment number to start counting from"
msgstr ""
#: apps/transactions/models.py:211 apps/transactions/models.py:426
#: apps/transactions/models.py:292 apps/transactions/models.py:507
msgid "Start Date"
msgstr ""
#: apps/transactions/models.py:215 apps/transactions/models.py:427
#: apps/transactions/models.py:296 apps/transactions/models.py:508
msgid "End Date"
msgstr ""
#: apps/transactions/models.py:220
#: apps/transactions/models.py:301
msgid "Recurrence"
msgstr ""
#: apps/transactions/models.py:223
#: apps/transactions/models.py:304
msgid "Installment Amount"
msgstr ""
#: apps/transactions/models.py:243 templates/includes/navbar.html:62
#: apps/transactions/models.py:324 templates/includes/navbar.html:62
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
msgstr ""
#: apps/transactions/models.py:385
#: apps/transactions/models.py:466
msgid "day(s)"
msgstr ""
#: apps/transactions/models.py:386
#: apps/transactions/models.py:467
msgid "week(s)"
msgstr ""
#: apps/transactions/models.py:387
#: apps/transactions/models.py:468
msgid "month(s)"
msgstr ""
#: apps/transactions/models.py:388
#: apps/transactions/models.py:469
msgid "year(s)"
msgstr ""
#: apps/transactions/models.py:390
#: apps/transactions/models.py:471
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr ""
#: apps/transactions/models.py:429
#: apps/transactions/models.py:510
msgid "Recurrence Type"
msgstr ""
#: apps/transactions/models.py:432
#: apps/transactions/models.py:513
msgid "Recurrence Interval"
msgstr ""
#: apps/transactions/models.py:436
#: apps/transactions/models.py:517
msgid "Last Generated Date"
msgstr ""
#: apps/transactions/models.py:439
#: apps/transactions/models.py:520
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:444 templates/includes/navbar.html:64
#: apps/transactions/models.py:525 templates/includes/navbar.html:64
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -880,99 +968,99 @@ msgstr ""
msgid "%(value)s is not a non-negative number"
msgstr ""
#: apps/transactions/views/categories.py:66
#: apps/transactions/views/categories.py:64
msgid "Category added successfully"
msgstr ""
#: apps/transactions/views/categories.py:94
#: apps/transactions/views/categories.py:92
msgid "Category updated successfully"
msgstr ""
#: apps/transactions/views/categories.py:121
#: apps/transactions/views/categories.py:118
msgid "Category deleted successfully"
msgstr ""
#: apps/transactions/views/entities.py:65
#: apps/transactions/views/entities.py:64
msgid "Entity added successfully"
msgstr ""
#: apps/transactions/views/entities.py:93
#: apps/transactions/views/entities.py:92
msgid "Entity updated successfully"
msgstr ""
#: apps/transactions/views/entities.py:120
#: apps/transactions/views/entities.py:118
msgid "Entity deleted successfully"
msgstr ""
#: apps/transactions/views/installment_plans.py:88
#: apps/transactions/views/installment_plans.py:87
msgid "Installment Plan added successfully"
msgstr ""
#: apps/transactions/views/installment_plans.py:118
#: apps/transactions/views/installment_plans.py:117
msgid "Installment Plan updated successfully"
msgstr ""
#: apps/transactions/views/installment_plans.py:143
#: apps/transactions/views/installment_plans.py:142
msgid "Installment Plan refreshed successfully"
msgstr ""
#: apps/transactions/views/installment_plans.py:162
#: apps/transactions/views/installment_plans.py:160
msgid "Installment Plan deleted successfully"
msgstr ""
#: apps/transactions/views/recurring_transactions.py:114
#: apps/transactions/views/recurring_transactions.py:112
msgid "Recurring Transaction added successfully"
msgstr ""
#: apps/transactions/views/recurring_transactions.py:146
#: apps/transactions/views/recurring_transactions.py:144
msgid "Recurring Transaction updated successfully"
msgstr ""
#: apps/transactions/views/recurring_transactions.py:192
#: apps/transactions/views/recurring_transactions.py:190
msgid "Recurring transaction unpaused successfully"
msgstr ""
#: apps/transactions/views/recurring_transactions.py:195
#: apps/transactions/views/recurring_transactions.py:193
msgid "Recurring transaction paused successfully"
msgstr ""
#: apps/transactions/views/recurring_transactions.py:221
#: apps/transactions/views/recurring_transactions.py:219
msgid "Recurring transaction finished successfully"
msgstr ""
#: apps/transactions/views/recurring_transactions.py:242
#: apps/transactions/views/recurring_transactions.py:239
msgid "Recurring Transaction deleted successfully"
msgstr ""
#: apps/transactions/views/tags.py:65
#: apps/transactions/views/tags.py:64
msgid "Tag added successfully"
msgstr ""
#: apps/transactions/views/tags.py:93
#: apps/transactions/views/tags.py:92
msgid "Tag updated successfully"
msgstr ""
#: apps/transactions/views/tags.py:120
#: apps/transactions/views/tags.py:118
msgid "Tag deleted successfully"
msgstr ""
#: apps/transactions/views/transactions.py:47
#: apps/transactions/views/transactions.py:46
msgid "Transaction added successfully"
msgstr ""
#: apps/transactions/views/transactions.py:79
#: apps/transactions/views/transactions.py:78
msgid "Transaction updated successfully"
msgstr ""
#: apps/transactions/views/transactions.py:110
#: apps/transactions/views/transactions.py:109
msgid "Transaction duplicated successfully"
msgstr ""
#: apps/transactions/views/transactions.py:153
#: apps/transactions/views/transactions.py:151
msgid "Transaction deleted successfully"
msgstr ""
#: apps/transactions/views/transactions.py:179
#: apps/transactions/views/transactions.py:177
msgid "Transfer added successfully"
msgstr ""
@@ -1101,7 +1189,7 @@ msgstr ""
#: templates/dca/fragments/strategy/details.html:64
#: templates/entities/fragments/table.html:23
#: templates/exchange_rates/fragments/table.html:20
#: templates/import_app/fragments/list.html:37
#: templates/import_app/fragments/profiles/list.html:44
#: templates/installment_plans/fragments/table.html:23
#: templates/recurring_transactions/fragments/table.html:25
#: templates/rules/fragments/list.html:33
@@ -1118,7 +1206,7 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:34
#: templates/entities/fragments/table.html:28
#: templates/exchange_rates/fragments/table.html:24
#: templates/import_app/fragments/list.html:41
#: templates/import_app/fragments/profiles/list.html:48
#: templates/installment_plans/fragments/table.html:27
#: templates/recurring_transactions/fragments/table.html:29
#: templates/rules/fragments/transaction_rule/view.html:22
@@ -1137,6 +1225,8 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:42
#: templates/entities/fragments/table.html:36
#: templates/exchange_rates/fragments/table.html:32
#: templates/import_app/fragments/profiles/list.html:69
#: templates/import_app/fragments/runs/list.html:102
#: templates/installment_plans/fragments/table.html:56
#: templates/mini_tools/unit_price_calculator.html:18
#: templates/recurring_transactions/fragments/table.html:91
@@ -1156,6 +1246,8 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:46
#: templates/entities/fragments/table.html:40
#: templates/exchange_rates/fragments/table.html:37
#: templates/import_app/fragments/profiles/list.html:73
#: templates/import_app/fragments/runs/list.html:106
#: templates/installment_plans/fragments/table.html:48
#: templates/installment_plans/fragments/table.html:60
#: templates/recurring_transactions/fragments/table.html:53
@@ -1178,6 +1270,7 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:47
#: templates/entities/fragments/table.html:41
#: templates/exchange_rates/fragments/table.html:38
#: templates/import_app/fragments/profiles/list.html:74
#: templates/rules/fragments/list.html:49
#: templates/rules/fragments/transaction_rule/view.html:61
#: templates/tags/fragments/table.html:41
@@ -1193,6 +1286,8 @@ msgstr ""
#: templates/dca/fragments/strategy/list.html:48
#: templates/entities/fragments/table.html:42
#: templates/exchange_rates/fragments/table.html:39
#: templates/import_app/fragments/profiles/list.html:75
#: templates/import_app/fragments/runs/list.html:108
#: templates/installment_plans/fragments/table.html:62
#: templates/recurring_transactions/fragments/table.html:98
#: templates/rules/fragments/list.html:50
@@ -1206,22 +1301,18 @@ msgid "No account groups"
msgstr ""
#: templates/accounts/fragments/account_reconciliation.html:6
#: templates/import_app/fragments/account_reconciliation.html:6
msgid "Account Reconciliation"
msgstr ""
#: templates/accounts/fragments/account_reconciliation.html:26
#: templates/import_app/fragments/account_reconciliation.html:26
msgid "Current balance"
msgstr ""
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/import_app/fragments/account_reconciliation.html:39
msgid "Difference"
msgstr ""
#: templates/accounts/fragments/account_reconciliation.html:70
#: templates/import_app/fragments/account_reconciliation.html:70
msgid "Reconcile balances"
msgstr ""
@@ -1234,12 +1325,10 @@ msgid "Edit account"
msgstr ""
#: templates/accounts/fragments/list.html:29
#: templates/import_app/fragments/list.html:29
msgid "Is Asset"
msgstr ""
#: templates/accounts/fragments/list.html:70
#: templates/import_app/fragments/list.html:70
msgid "No accounts"
msgstr ""
@@ -1330,6 +1419,7 @@ msgid "Close"
msgstr ""
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
msgid "Search"
msgstr ""
@@ -1593,6 +1683,91 @@ msgstr ""
msgid "Page navigation"
msgstr ""
#: templates/import_app/fragments/profiles/add.html:6
msgid "Add new import profile"
msgstr ""
#: templates/import_app/fragments/profiles/add.html:11
msgid "A message from the author"
msgstr ""
#: templates/import_app/fragments/profiles/edit.html:5
msgid "Edit import profile"
msgstr ""
#: templates/import_app/fragments/profiles/list.html:5
#: templates/import_app/pages/profiles_index.html:4
msgid "Import Profiles"
msgstr ""
#: templates/import_app/fragments/profiles/list.html:17
msgid "New"
msgstr ""
#: templates/import_app/fragments/profiles/list.html:21
msgid "From preset"
msgstr ""
#: templates/import_app/fragments/profiles/list.html:55
msgid "Runs"
msgstr ""
#: templates/import_app/fragments/profiles/list.html:86
msgid "No import profiles"
msgstr ""
#: templates/import_app/fragments/profiles/list_presets.html:5
msgid "Import Presets"
msgstr ""
#: templates/import_app/fragments/profiles/list_presets.html:33
msgid "By"
msgstr ""
#: templates/import_app/fragments/profiles/list_presets.html:40
msgid "No presets yet"
msgstr ""
#: templates/import_app/fragments/runs/add.html:5
msgid "Import file with profile"
msgstr ""
#: templates/import_app/fragments/runs/list.html:5
msgid "Runs for"
msgstr ""
#: templates/import_app/fragments/runs/list.html:29
msgid "Total Items"
msgstr ""
#: templates/import_app/fragments/runs/list.html:42
msgid "Processed Items"
msgstr ""
#: templates/import_app/fragments/runs/list.html:55
msgid "Skipped Items"
msgstr ""
#: templates/import_app/fragments/runs/list.html:68
msgid "Failed Items"
msgstr ""
#: templates/import_app/fragments/runs/list.html:81
msgid "Successful Items"
msgstr ""
#: templates/import_app/fragments/runs/list.html:96
msgid "Logs"
msgstr ""
#: templates/import_app/fragments/runs/list.html:107
msgid "You won't be able to revert this! All imported items will be kept."
msgstr ""
#: templates/import_app/fragments/runs/list.html:116
msgid "No runs yet"
msgstr ""
#: templates/import_app/fragments/runs/log.html:5
msgid "Logs for"
msgstr ""
@@ -1642,15 +1817,15 @@ msgstr ""
msgid "Rules"
msgstr ""
#: templates/includes/navbar.html:132
#: templates/includes/navbar.html:134
msgid "Only use this if you know what you're doing"
msgstr ""
#: templates/includes/navbar.html:133
#: templates/includes/navbar.html:135
msgid "Django Admin"
msgstr ""
#: templates/includes/navbar.html:142
#: templates/includes/navbar.html:144
msgid "Calculator"
msgstr ""
@@ -1686,11 +1861,6 @@ msgstr ""
msgid "Edit installment plan"
msgstr ""
#: templates/installment_plans/fragments/list.html:24
#: templates/recurring_transactions/fragments/list.html:27
msgid "Finished"
msgstr ""
#: templates/installment_plans/fragments/list_transactions.html:5
#: templates/installment_plans/fragments/table.html:35
msgid "Installments"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-01-21 01:12+0000\n"
"PO-Revision-Date: 2025-01-20 22:12-0300\n"
"POT-Creation-Date: 2025-01-24 19:24+0000\n"
"PO-Revision-Date: 2025-01-24 16:25-0300\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: pt_BR\n"
@@ -25,20 +25,21 @@ msgstr "Nome do grupo"
#: apps/accounts/forms.py:40 apps/accounts/forms.py:96
#: apps/currencies/forms.py:52 apps/currencies/forms.py:92 apps/dca/forms.py:41
#: apps/dca/forms.py:93 apps/rules/forms.py:45 apps/rules/forms.py:87
#: apps/transactions/forms.py:150 apps/transactions/forms.py:506
#: apps/transactions/forms.py:549 apps/transactions/forms.py:581
#: apps/transactions/forms.py:616 apps/transactions/forms.py:754
#: apps/dca/forms.py:93 apps/import_app/forms.py:34 apps/rules/forms.py:45
#: apps/rules/forms.py:87 apps/transactions/forms.py:150
#: apps/transactions/forms.py:506 apps/transactions/forms.py:549
#: apps/transactions/forms.py:581 apps/transactions/forms.py:616
#: apps/transactions/forms.py:754
msgid "Update"
msgstr "Atualizar"
#: apps/accounts/forms.py:48 apps/accounts/forms.py:104
#: apps/common/widgets/tom_select.py:12 apps/currencies/forms.py:60
#: apps/currencies/forms.py:100 apps/dca/forms.py:49 apps/dca/forms.py:102
#: apps/rules/forms.py:53 apps/rules/forms.py:95 apps/transactions/forms.py:159
#: apps/transactions/forms.py:514 apps/transactions/forms.py:557
#: apps/transactions/forms.py:589 apps/transactions/forms.py:624
#: apps/transactions/forms.py:762
#: apps/import_app/forms.py:42 apps/rules/forms.py:53 apps/rules/forms.py:95
#: apps/transactions/forms.py:159 apps/transactions/forms.py:514
#: apps/transactions/forms.py:557 apps/transactions/forms.py:589
#: apps/transactions/forms.py:624 apps/transactions/forms.py:762
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -47,7 +48,8 @@ msgstr "Atualizar"
#: templates/dca/fragments/strategy/list.html:9
#: templates/entities/fragments/list.html:9
#: templates/exchange_rates/fragments/list.html:10
#: templates/import_app/fragments/list.html:9
#: templates/import_app/fragments/profiles/list.html:7
#: templates/import_app/fragments/profiles/list.html:10
#: templates/installment_plans/fragments/list.html:9
#: templates/mini_tools/unit_price_calculator.html:162
#: templates/recurring_transactions/fragments/list.html:9
@@ -56,7 +58,6 @@ msgid "Add"
msgstr "Adicionar"
#: apps/accounts/forms.py:57 templates/accounts/fragments/list.html:26
#: templates/import_app/fragments/list.html:26
msgid "Group"
msgstr "Grupo da Conta"
@@ -67,8 +68,8 @@ msgstr "Novo saldo"
#: apps/accounts/forms.py:119 apps/rules/models.py:27
#: apps/transactions/forms.py:39 apps/transactions/forms.py:214
#: apps/transactions/forms.py:221 apps/transactions/forms.py:401
#: apps/transactions/forms.py:648 apps/transactions/models.py:111
#: apps/transactions/models.py:230 apps/transactions/models.py:410
#: apps/transactions/forms.py:648 apps/transactions/models.py:159
#: apps/transactions/models.py:311 apps/transactions/models.py:491
msgid "Category"
msgstr "Categoria"
@@ -76,21 +77,22 @@ msgstr "Categoria"
#: apps/transactions/filters.py:74 apps/transactions/forms.py:47
#: apps/transactions/forms.py:230 apps/transactions/forms.py:238
#: apps/transactions/forms.py:394 apps/transactions/forms.py:641
#: apps/transactions/models.py:117 apps/transactions/models.py:232
#: apps/transactions/models.py:414 templates/includes/navbar.html:98
#: apps/transactions/models.py:165 apps/transactions/models.py:313
#: apps/transactions/models.py:495 templates/includes/navbar.html:98
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
msgid "Tags"
msgstr "Tags"
#: apps/accounts/models.py:9 apps/accounts/models.py:21 apps/dca/models.py:14
#: apps/rules/models.py:9 apps/transactions/models.py:19
#: apps/transactions/models.py:39 apps/transactions/models.py:58
#: apps/import_app/models.py:14 apps/rules/models.py:9
#: apps/transactions/models.py:67 apps/transactions/models.py:87
#: apps/transactions/models.py:106
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
#: templates/currencies/fragments/list.html:26
#: templates/entities/fragments/table.html:16
#: templates/import_app/fragments/list.html:25
#: templates/import_app/fragments/profiles/list.html:36
#: templates/installment_plans/fragments/table.html:16
#: templates/recurring_transactions/fragments/table.html:18
#: templates/rules/fragments/list.html:26
@@ -110,13 +112,11 @@ msgstr "Grupos da Conta"
#: apps/accounts/models.py:31 apps/currencies/models.py:32
#: templates/accounts/fragments/list.html:27
#: templates/import_app/fragments/list.html:27
msgid "Currency"
msgstr "Moeda"
#: apps/accounts/models.py:37 apps/currencies/models.py:20
#: templates/accounts/fragments/list.html:28
#: templates/import_app/fragments/list.html:28
msgid "Exchange Currency"
msgstr "Moeda de Câmbio"
@@ -138,7 +138,6 @@ msgstr ""
#: apps/accounts/models.py:54 templates/accounts/fragments/list.html:30
#: templates/categories/fragments/list.html:24
#: templates/entities/fragments/list.html:24
#: templates/import_app/fragments/list.html:30
#: templates/tags/fragments/list.html:24
msgid "Archived"
msgstr "Arquivada"
@@ -150,16 +149,15 @@ msgstr ""
#: apps/accounts/models.py:59 apps/rules/models.py:19
#: apps/transactions/forms.py:59 apps/transactions/forms.py:386
#: apps/transactions/forms.py:633 apps/transactions/models.py:84
#: apps/transactions/models.py:190 apps/transactions/models.py:392
#: apps/transactions/forms.py:633 apps/transactions/models.py:132
#: apps/transactions/models.py:271 apps/transactions/models.py:473
msgid "Account"
msgstr "Conta"
#: apps/accounts/models.py:60 apps/transactions/filters.py:53
#: templates/accounts/fragments/list.html:5
#: templates/accounts/pages/index.html:4
#: templates/import_app/fragments/list.html:5
#: templates/includes/navbar.html:104 templates/includes/navbar.html:106
#: templates/accounts/pages/index.html:4 templates/includes/navbar.html:104
#: templates/includes/navbar.html:106
#: templates/transactions/fragments/summary.html:9
msgid "Accounts"
msgstr "Contas"
@@ -168,27 +166,27 @@ msgstr "Contas"
msgid "Exchange currency cannot be the same as the account's main currency."
msgstr "A moeda de câmbio não pode ser a mesma que a moeda principal da conta."
#: apps/accounts/views/account_groups.py:44
#: apps/accounts/views/account_groups.py:42
msgid "Account Group added successfully"
msgstr "Grupo de Conta adicionado com sucesso"
#: apps/accounts/views/account_groups.py:72
#: apps/accounts/views/account_groups.py:70
msgid "Account Group updated successfully"
msgstr "Grupo de Conta atualizado com sucesso"
#: apps/accounts/views/account_groups.py:99
#: apps/accounts/views/account_groups.py:96
msgid "Account Group deleted successfully"
msgstr "Grupo de Conta apagado com sucesso"
#: apps/accounts/views/accounts.py:44
#: apps/accounts/views/accounts.py:42
msgid "Account added successfully"
msgstr "Conta adicionado com sucesso"
#: apps/accounts/views/accounts.py:72
#: apps/accounts/views/accounts.py:70
msgid "Account updated successfully"
msgstr "Conta atualizada com sucesso"
#: apps/accounts/views/accounts.py:99
#: apps/accounts/views/accounts.py:96
msgid "Account deleted successfully"
msgstr "Conta apagada com sucesso"
@@ -353,7 +351,7 @@ msgstr "Sufixo"
#: apps/currencies/forms.py:68 apps/dca/models.py:156 apps/rules/models.py:22
#: apps/transactions/forms.py:63 apps/transactions/forms.py:242
#: apps/transactions/models.py:94
#: apps/transactions/models.py:142
#: templates/dca/fragments/strategy/details.html:53
#: templates/exchange_rates/fragments/table.html:11
msgid "Date"
@@ -409,27 +407,27 @@ msgstr "Taxas de Câmbio"
msgid "From and To currencies cannot be the same."
msgstr "As moedas De e Para não podem ser as mesmas."
#: apps/currencies/views/currencies.py:44
#: apps/currencies/views/currencies.py:42
msgid "Currency added successfully"
msgstr "Moeda adicionada com sucesso"
#: apps/currencies/views/currencies.py:72
#: apps/currencies/views/currencies.py:70
msgid "Currency updated successfully"
msgstr "Moeda atualizada com sucesso"
#: apps/currencies/views/currencies.py:99
#: apps/currencies/views/currencies.py:96
msgid "Currency deleted successfully"
msgstr "Moeda apagada com sucesso"
#: apps/currencies/views/exchange_rates.py:90
#: apps/currencies/views/exchange_rates.py:89
msgid "Exchange rate added successfully"
msgstr "Taxa de câmbio adicionada com sucesso"
#: apps/currencies/views/exchange_rates.py:118
#: apps/currencies/views/exchange_rates.py:117
msgid "Exchange rate updated successfully"
msgstr "Taxa de câmbio atualizada com sucesso"
#: apps/currencies/views/exchange_rates.py:145
#: apps/currencies/views/exchange_rates.py:143
msgid "Exchange rate deleted successfully"
msgstr "Taxa de câmbio apagada com sucesso"
@@ -442,8 +440,8 @@ msgid "Payment Currency"
msgstr "Moeda de pagamento"
#: apps/dca/models.py:27 apps/dca/models.py:179 apps/rules/models.py:26
#: apps/transactions/forms.py:256 apps/transactions/models.py:107
#: apps/transactions/models.py:239 apps/transactions/models.py:420
#: apps/transactions/forms.py:256 apps/transactions/models.py:155
#: apps/transactions/models.py:320 apps/transactions/models.py:501
msgid "Notes"
msgstr "Notas"
@@ -483,30 +481,104 @@ msgstr "Entrada CMP"
msgid "DCA Entries"
msgstr "Entradas CMP"
#: apps/dca/views.py:38
#: apps/dca/views.py:37
msgid "DCA Strategy added successfully"
msgstr "Estratégia CMP adicionada com sucesso"
#: apps/dca/views.py:65
#: apps/dca/views.py:64
msgid "DCA Strategy updated successfully"
msgstr "Estratégia CMP atualizada com sucesso"
#: apps/dca/views.py:92
#: apps/dca/views.py:90
msgid "DCA strategy deleted successfully"
msgstr "Estratégia CMP apagada com sucesso"
#: apps/dca/views.py:165
#: apps/dca/views.py:163
msgid "Entry added successfully"
msgstr "Entrada adicionada com sucesso"
#: apps/dca/views.py:192
#: apps/dca/views.py:190
msgid "Entry updated successfully"
msgstr "Entrada atualizada com sucesso"
#: apps/dca/views.py:219
#: apps/dca/views.py:216
msgid "Entry deleted successfully"
msgstr "Entrada apagada com sucesso"
#: apps/import_app/forms.py:49
msgid "Select a file"
msgstr "Selecione um arquivo"
#: apps/import_app/forms.py:61
#: templates/import_app/fragments/profiles/list.html:62
#: templates/includes/navbar.html:124
msgid "Import"
msgstr "Importar"
#: apps/import_app/models.py:12
#, python-brace-format
msgid "Version {number}"
msgstr "Versão {number}"
#: apps/import_app/models.py:15
msgid "YAML Configuration"
msgstr "Configuração YAML"
#: apps/import_app/models.py:19
#: templates/import_app/fragments/profiles/list.html:37
msgid "Version"
msgstr "Versão"
#: apps/import_app/models.py:35
msgid "Invalid YAML Configuration: "
msgstr "Configuração YAML inválida: "
#: apps/import_app/models.py:41
msgid "Queued"
msgstr "Na fila"
#: apps/import_app/models.py:42
msgid "Processing"
msgstr "Processando"
#: apps/import_app/models.py:43
msgid "Failed"
msgstr "Falhou"
#: apps/import_app/models.py:44
#: templates/installment_plans/fragments/list.html:24
#: templates/recurring_transactions/fragments/list.html:27
msgid "Finished"
msgstr "Finalizado"
#: apps/import_app/models.py:50
msgid "Status"
msgstr "Status"
#: apps/import_app/models.py:58
msgid "File name"
msgstr "Nome do Arquivo"
#: apps/import_app/views.py:75
msgid "Import Profile added successfully"
msgstr "Perfil de Importação adicionado com sucesso"
#: apps/import_app/views.py:110
msgid "Import Profile update successfully"
msgstr "Importação atualizada com sucesso"
#: apps/import_app/views.py:136
msgid "Import Profile deleted successfully"
msgstr "Importação apagada com sucesso"
#: apps/import_app/views.py:194
msgid "Import Run queued successfully"
msgstr "Importação adicionada à fila com sucesso"
#: apps/import_app/views.py:220
msgid "Run deleted successfully"
msgstr "Importação apagada com sucesso"
#: apps/rules/forms.py:20
msgid "Run on creation"
msgstr "Rodar na criação"
@@ -532,8 +604,8 @@ msgid "A value for this field already exists in the rule."
msgstr "Já existe um valor para esse campo na regra."
#: apps/rules/models.py:10 apps/rules/models.py:25
#: apps/transactions/forms.py:248 apps/transactions/models.py:105
#: apps/transactions/models.py:197 apps/transactions/models.py:406
#: apps/transactions/forms.py:248 apps/transactions/models.py:153
#: apps/transactions/models.py:278 apps/transactions/models.py:487
msgid "Description"
msgstr "Descrição"
@@ -541,33 +613,33 @@ msgstr "Descrição"
msgid "Trigger"
msgstr "Gatilho"
#: apps/rules/models.py:20 apps/transactions/models.py:91
#: apps/transactions/models.py:195 apps/transactions/models.py:398
#: apps/rules/models.py:20 apps/transactions/models.py:139
#: apps/transactions/models.py:276 apps/transactions/models.py:479
msgid "Type"
msgstr "Tipo"
#: apps/rules/models.py:21 apps/transactions/filters.py:23
#: apps/transactions/models.py:93
#: apps/transactions/models.py:141
msgid "Paid"
msgstr "Pago"
#: apps/rules/models.py:23 apps/transactions/forms.py:66
#: apps/transactions/forms.py:245 apps/transactions/forms.py:415
#: apps/transactions/models.py:95 apps/transactions/models.py:213
#: apps/transactions/models.py:422
#: apps/transactions/models.py:143 apps/transactions/models.py:294
#: apps/transactions/models.py:503
msgid "Reference Date"
msgstr "Data de Referência"
#: apps/rules/models.py:24 apps/transactions/models.py:100
#: apps/transactions/models.py:403
#: apps/rules/models.py:24 apps/transactions/models.py:148
#: apps/transactions/models.py:484
msgid "Amount"
msgstr "Quantia"
#: apps/rules/models.py:29 apps/transactions/filters.py:81
#: apps/transactions/forms.py:55 apps/transactions/forms.py:409
#: apps/transactions/forms.py:656 apps/transactions/models.py:69
#: apps/transactions/models.py:122 apps/transactions/models.py:235
#: apps/transactions/models.py:417 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:656 apps/transactions/models.py:117
#: apps/transactions/models.py:170 apps/transactions/models.py:316
#: apps/transactions/models.py:498 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:100
msgid "Entities"
msgstr "Entidades"
@@ -584,31 +656,31 @@ msgstr "Campo"
msgid "Value"
msgstr "Valor"
#: apps/rules/views.py:45
#: apps/rules/views.py:44
msgid "Rule deactivated successfully"
msgstr "Regra desativada com sucesso"
#: apps/rules/views.py:47
#: apps/rules/views.py:46
msgid "Rule activated successfully"
msgstr "Regra ativada com sucesso"
#: apps/rules/views.py:65
#: apps/rules/views.py:64
msgid "Rule added successfully"
msgstr "Regra adicionada com sucesso"
#: apps/rules/views.py:88
#: apps/rules/views.py:87
msgid "Rule updated successfully"
msgstr "Regra atualizada com sucesso"
#: apps/rules/views.py:128
#: apps/rules/views.py:126
msgid "Rule deleted successfully"
msgstr "Regra apagada com sucesso"
#: apps/rules/views.py:182
#: apps/rules/views.py:180
msgid "Action updated successfully"
msgstr "Ação atualizada com sucesso"
#: apps/rules/views.py:213
#: apps/rules/views.py:210
msgid "Action deleted successfully"
msgstr "Ação apagada com sucesso"
@@ -697,19 +769,19 @@ msgstr "As categorias silenciadas não serão contabilizadas em seu total mensal
msgid "End date should be after the start date"
msgstr "Data final deve ser após data inicial"
#: apps/transactions/models.py:20
#: apps/transactions/models.py:68
msgid "Mute"
msgstr "Silenciada"
#: apps/transactions/models.py:23 apps/transactions/models.py:42
#: apps/transactions/models.py:61 templates/categories/fragments/list.html:21
#: apps/transactions/models.py:71 apps/transactions/models.py:90
#: apps/transactions/models.py:109 templates/categories/fragments/list.html:21
#: templates/entities/fragments/list.html:21
#: templates/recurring_transactions/fragments/list.html:21
#: templates/tags/fragments/list.html:21
msgid "Active"
msgstr "Ativo"
#: apps/transactions/models.py:25
#: apps/transactions/models.py:73
msgid ""
"Deactivated categories won't be able to be selected when creating new "
"transactions"
@@ -717,25 +789,25 @@ msgstr ""
"As categorias desativadas não poderão ser selecionadas ao criar novas "
"transações"
#: apps/transactions/models.py:30
#: apps/transactions/models.py:78
msgid "Transaction Category"
msgstr "Categoria da Transação"
#: apps/transactions/models.py:31
#: apps/transactions/models.py:79
msgid "Transaction Categories"
msgstr "Categorias da Trasanção"
#: apps/transactions/models.py:44
#: apps/transactions/models.py:92
msgid ""
"Deactivated tags won't be able to be selected when creating new transactions"
msgstr ""
"As tags desativadas não poderão ser selecionadas ao criar novas transações"
#: apps/transactions/models.py:49 apps/transactions/models.py:50
#: apps/transactions/models.py:97 apps/transactions/models.py:98
msgid "Transaction Tags"
msgstr "Tags da Transação"
#: apps/transactions/models.py:63
#: apps/transactions/models.py:111
msgid ""
"Deactivated entities won't be able to be selected when creating new "
"transactions"
@@ -743,11 +815,11 @@ msgstr ""
"As entidades desativadas não poderão ser selecionadas ao criar novas "
"transações"
#: apps/transactions/models.py:68
#: apps/transactions/models.py:116
msgid "Entity"
msgstr "Entidade"
#: apps/transactions/models.py:78
#: apps/transactions/models.py:126
#: templates/calendar_view/pages/calendar.html:54
#: templates/monthly_overview/fragments/monthly_summary.html:39
#: templates/monthly_overview/pages/overview.html:54
@@ -757,7 +829,7 @@ msgstr "Entidade"
msgid "Income"
msgstr "Renda"
#: apps/transactions/models.py:79
#: apps/transactions/models.py:127
#: templates/calendar_view/pages/calendar.html:62
#: templates/monthly_overview/pages/overview.html:62
#: templates/yearly_overview/pages/overview_by_account.html:57
@@ -765,19 +837,35 @@ msgstr "Renda"
msgid "Expense"
msgstr "Despesa"
#: apps/transactions/models.py:133 apps/transactions/models.py:242
#: apps/transactions/models.py:181 apps/transactions/models.py:323
msgid "Installment Plan"
msgstr "Parcelamento"
#: apps/transactions/models.py:142 apps/transactions/models.py:443
#: apps/transactions/models.py:190 apps/transactions/models.py:524
msgid "Recurring Transaction"
msgstr "Transação Recorrente"
#: apps/transactions/models.py:146
#: apps/transactions/models.py:192
msgid "Internal Note"
msgstr "Nota Interna"
#: apps/transactions/models.py:194
msgid "Internal ID"
msgstr "ID Interna"
#: apps/transactions/models.py:198
msgid "Deleted"
msgstr "Apagado"
#: apps/transactions/models.py:203
msgid "Deleted At"
msgstr "Apagado Em"
#: apps/transactions/models.py:211
msgid "Transaction"
msgstr "Transação"
#: apps/transactions/models.py:147 templates/includes/navbar.html:53
#: apps/transactions/models.py:212 templates/includes/navbar.html:53
#: templates/includes/navbar.html:94
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -785,95 +873,95 @@ msgstr "Transação"
msgid "Transactions"
msgstr "Transações"
#: apps/transactions/models.py:184
#: apps/transactions/models.py:265
msgid "Yearly"
msgstr "Anual"
#: apps/transactions/models.py:185 apps/users/models.py:26
#: apps/transactions/models.py:266 apps/users/models.py:26
#: templates/includes/navbar.html:25
msgid "Monthly"
msgstr "Mensal"
#: apps/transactions/models.py:186
#: apps/transactions/models.py:267
msgid "Weekly"
msgstr "Semanal"
#: apps/transactions/models.py:187
#: apps/transactions/models.py:268
msgid "Daily"
msgstr "Diária"
#: apps/transactions/models.py:200
#: apps/transactions/models.py:281
msgid "Number of Installments"
msgstr "Número de Parcelas"
#: apps/transactions/models.py:205
#: apps/transactions/models.py:286
msgid "Installment Start"
msgstr "Parcela inicial"
#: apps/transactions/models.py:206
#: apps/transactions/models.py:287
msgid "The installment number to start counting from"
msgstr "O número da parcela a partir do qual se inicia a contagem"
#: apps/transactions/models.py:211 apps/transactions/models.py:426
#: apps/transactions/models.py:292 apps/transactions/models.py:507
msgid "Start Date"
msgstr "Data de Início"
#: apps/transactions/models.py:215 apps/transactions/models.py:427
#: apps/transactions/models.py:296 apps/transactions/models.py:508
msgid "End Date"
msgstr "Data Final"
#: apps/transactions/models.py:220
#: apps/transactions/models.py:301
msgid "Recurrence"
msgstr "Recorrência"
#: apps/transactions/models.py:223
#: apps/transactions/models.py:304
msgid "Installment Amount"
msgstr "Valor da Parcela"
#: apps/transactions/models.py:243 templates/includes/navbar.html:62
#: apps/transactions/models.py:324 templates/includes/navbar.html:62
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
msgstr "Parcelamentos"
#: apps/transactions/models.py:385
#: apps/transactions/models.py:466
msgid "day(s)"
msgstr "dia(s)"
#: apps/transactions/models.py:386
#: apps/transactions/models.py:467
msgid "week(s)"
msgstr "semana(s)"
#: apps/transactions/models.py:387
#: apps/transactions/models.py:468
msgid "month(s)"
msgstr "mês(es)"
#: apps/transactions/models.py:388
#: apps/transactions/models.py:469
msgid "year(s)"
msgstr "ano(s)"
#: apps/transactions/models.py:390
#: apps/transactions/models.py:471
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr "Pausado"
#: apps/transactions/models.py:429
#: apps/transactions/models.py:510
msgid "Recurrence Type"
msgstr "Tipo de recorrência"
#: apps/transactions/models.py:432
#: apps/transactions/models.py:513
msgid "Recurrence Interval"
msgstr "Intervalo de recorrência"
#: apps/transactions/models.py:436
#: apps/transactions/models.py:517
msgid "Last Generated Date"
msgstr "Última data gerada"
#: apps/transactions/models.py:439
#: apps/transactions/models.py:520
msgid "Last Generated Reference Date"
msgstr "Última data de referência gerada"
#: apps/transactions/models.py:444 templates/includes/navbar.html:64
#: apps/transactions/models.py:525 templates/includes/navbar.html:64
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
@@ -889,99 +977,99 @@ msgstr "%(value)s tem muitas casas decimais. O máximo é 30."
msgid "%(value)s is not a non-negative number"
msgstr "%(value)s não é um número positivo"
#: apps/transactions/views/categories.py:66
#: apps/transactions/views/categories.py:64
msgid "Category added successfully"
msgstr "Categoria adicionada com sucesso"
#: apps/transactions/views/categories.py:94
#: apps/transactions/views/categories.py:92
msgid "Category updated successfully"
msgstr "Categoria atualizada com sucesso"
#: apps/transactions/views/categories.py:121
#: apps/transactions/views/categories.py:118
msgid "Category deleted successfully"
msgstr "Categoria apagada com sucesso"
#: apps/transactions/views/entities.py:65
#: apps/transactions/views/entities.py:64
msgid "Entity added successfully"
msgstr "Entidade adicionada com sucesso"
#: apps/transactions/views/entities.py:93
#: apps/transactions/views/entities.py:92
msgid "Entity updated successfully"
msgstr "Entidade atualizada com sucesso"
#: apps/transactions/views/entities.py:120
#: apps/transactions/views/entities.py:118
msgid "Entity deleted successfully"
msgstr "Entidade apagada com sucesso"
#: apps/transactions/views/installment_plans.py:88
#: apps/transactions/views/installment_plans.py:87
msgid "Installment Plan added successfully"
msgstr "Parcelamento adicionado com sucesso"
#: apps/transactions/views/installment_plans.py:118
#: apps/transactions/views/installment_plans.py:117
msgid "Installment Plan updated successfully"
msgstr "Parcelamento atualizado com sucesso"
#: apps/transactions/views/installment_plans.py:143
#: apps/transactions/views/installment_plans.py:142
msgid "Installment Plan refreshed successfully"
msgstr "Parcelamento atualizado com sucesso"
#: apps/transactions/views/installment_plans.py:162
#: apps/transactions/views/installment_plans.py:160
msgid "Installment Plan deleted successfully"
msgstr "Parcelamento apagado com sucesso"
#: apps/transactions/views/recurring_transactions.py:114
#: apps/transactions/views/recurring_transactions.py:112
msgid "Recurring Transaction added successfully"
msgstr "Transação Recorrente adicionada com sucesso"
#: apps/transactions/views/recurring_transactions.py:146
#: apps/transactions/views/recurring_transactions.py:144
msgid "Recurring Transaction updated successfully"
msgstr "Transação Recorrente atualizada com sucesso"
#: apps/transactions/views/recurring_transactions.py:192
#: apps/transactions/views/recurring_transactions.py:190
msgid "Recurring transaction unpaused successfully"
msgstr "Transação Recorrente despausada com sucesso"
#: apps/transactions/views/recurring_transactions.py:195
#: apps/transactions/views/recurring_transactions.py:193
msgid "Recurring transaction paused successfully"
msgstr "Transação Recorrente pausada com sucesso"
#: apps/transactions/views/recurring_transactions.py:221
#: apps/transactions/views/recurring_transactions.py:219
msgid "Recurring transaction finished successfully"
msgstr "Transação Recorrente finalizada com sucesso"
#: apps/transactions/views/recurring_transactions.py:242
#: apps/transactions/views/recurring_transactions.py:239
msgid "Recurring Transaction deleted successfully"
msgstr "Transação Recorrente apagada com sucesso"
#: apps/transactions/views/tags.py:65
#: apps/transactions/views/tags.py:64
msgid "Tag added successfully"
msgstr "Tag adicionada com sucesso"
#: apps/transactions/views/tags.py:93
#: apps/transactions/views/tags.py:92
msgid "Tag updated successfully"
msgstr "Tag atualizada com sucesso"
#: apps/transactions/views/tags.py:120
#: apps/transactions/views/tags.py:118
msgid "Tag deleted successfully"
msgstr "Tag apagada com sucesso"
#: apps/transactions/views/transactions.py:47
#: apps/transactions/views/transactions.py:46
msgid "Transaction added successfully"
msgstr "Transação adicionada com sucesso"
#: apps/transactions/views/transactions.py:79
#: apps/transactions/views/transactions.py:78
msgid "Transaction updated successfully"
msgstr "Transação atualizada com sucesso"
#: apps/transactions/views/transactions.py:110
#: apps/transactions/views/transactions.py:109
msgid "Transaction duplicated successfully"
msgstr "Transação duplicada com sucesso"
#: apps/transactions/views/transactions.py:153
#: apps/transactions/views/transactions.py:151
msgid "Transaction deleted successfully"
msgstr "Transação apagada com sucesso"
#: apps/transactions/views/transactions.py:179
#: apps/transactions/views/transactions.py:177
msgid "Transfer added successfully"
msgstr "Transferência adicionada com sucesso"
@@ -1110,7 +1198,7 @@ msgstr "Editar grupo de conta"
#: templates/dca/fragments/strategy/details.html:64
#: templates/entities/fragments/table.html:23
#: templates/exchange_rates/fragments/table.html:20
#: templates/import_app/fragments/list.html:37
#: templates/import_app/fragments/profiles/list.html:44
#: templates/installment_plans/fragments/table.html:23
#: templates/recurring_transactions/fragments/table.html:25
#: templates/rules/fragments/list.html:33
@@ -1127,7 +1215,7 @@ msgstr "Ações"
#: templates/dca/fragments/strategy/list.html:34
#: templates/entities/fragments/table.html:28
#: templates/exchange_rates/fragments/table.html:24
#: templates/import_app/fragments/list.html:41
#: templates/import_app/fragments/profiles/list.html:48
#: templates/installment_plans/fragments/table.html:27
#: templates/recurring_transactions/fragments/table.html:29
#: templates/rules/fragments/transaction_rule/view.html:22
@@ -1146,7 +1234,8 @@ msgstr "Editar"
#: templates/dca/fragments/strategy/list.html:42
#: templates/entities/fragments/table.html:36
#: templates/exchange_rates/fragments/table.html:32
#: templates/import_app/fragments/list.html:48
#: templates/import_app/fragments/profiles/list.html:69
#: templates/import_app/fragments/runs/list.html:102
#: templates/installment_plans/fragments/table.html:56
#: templates/mini_tools/unit_price_calculator.html:18
#: templates/recurring_transactions/fragments/table.html:91
@@ -1166,7 +1255,8 @@ msgstr "Apagar"
#: templates/dca/fragments/strategy/list.html:46
#: templates/entities/fragments/table.html:40
#: templates/exchange_rates/fragments/table.html:37
#: templates/import_app/fragments/list.html:52
#: templates/import_app/fragments/profiles/list.html:73
#: templates/import_app/fragments/runs/list.html:106
#: templates/installment_plans/fragments/table.html:48
#: templates/installment_plans/fragments/table.html:60
#: templates/recurring_transactions/fragments/table.html:53
@@ -1189,7 +1279,7 @@ msgstr "Tem certeza?"
#: templates/dca/fragments/strategy/list.html:47
#: templates/entities/fragments/table.html:41
#: templates/exchange_rates/fragments/table.html:38
#: templates/import_app/fragments/list.html:53
#: templates/import_app/fragments/profiles/list.html:74
#: templates/rules/fragments/list.html:49
#: templates/rules/fragments/transaction_rule/view.html:61
#: templates/tags/fragments/table.html:41
@@ -1205,7 +1295,8 @@ msgstr "Você não será capaz de reverter isso!"
#: templates/dca/fragments/strategy/list.html:48
#: templates/entities/fragments/table.html:42
#: templates/exchange_rates/fragments/table.html:39
#: templates/import_app/fragments/list.html:54
#: templates/import_app/fragments/profiles/list.html:75
#: templates/import_app/fragments/runs/list.html:108
#: templates/installment_plans/fragments/table.html:62
#: templates/recurring_transactions/fragments/table.html:98
#: templates/rules/fragments/list.html:50
@@ -1219,22 +1310,18 @@ msgid "No account groups"
msgstr "Nenhum grupo de conta"
#: templates/accounts/fragments/account_reconciliation.html:6
#: templates/import_app/fragments/account_reconciliation.html:6
msgid "Account Reconciliation"
msgstr "Reconciliação do saldo"
#: templates/accounts/fragments/account_reconciliation.html:26
#: templates/import_app/fragments/account_reconciliation.html:26
msgid "Current balance"
msgstr "Saldo atual"
#: templates/accounts/fragments/account_reconciliation.html:39
#: templates/import_app/fragments/account_reconciliation.html:39
msgid "Difference"
msgstr "Diferença"
#: templates/accounts/fragments/account_reconciliation.html:70
#: templates/import_app/fragments/account_reconciliation.html:70
msgid "Reconcile balances"
msgstr "Reconciliar saldos"
@@ -1247,12 +1334,10 @@ msgid "Edit account"
msgstr "Editar conta"
#: templates/accounts/fragments/list.html:29
#: templates/import_app/fragments/list.html:29
msgid "Is Asset"
msgstr "É ativo"
#: templates/accounts/fragments/list.html:70
#: templates/import_app/fragments/list.html:70
msgid "No accounts"
msgstr "Nenhuma conta"
@@ -1343,6 +1428,7 @@ msgid "Close"
msgstr "Fechar"
#: templates/cotton/config/search.html:6
#: templates/import_app/fragments/profiles/list_presets.html:13
msgid "Search"
msgstr "Buscar"
@@ -1607,6 +1693,97 @@ msgstr "Nenhuma taxa de câmbio"
msgid "Page navigation"
msgstr "Navegação por página"
#: templates/import_app/fragments/profiles/add.html:6
msgid "Add new import profile"
msgstr "Adicionar novo perfil de importação"
#: templates/import_app/fragments/profiles/add.html:11
msgid "A message from the author"
msgstr "Uma mensagem do autor"
#: templates/import_app/fragments/profiles/edit.html:5
msgid "Edit import profile"
msgstr "Editar perfil de importação"
#: templates/import_app/fragments/profiles/list.html:5
#: templates/import_app/pages/profiles_index.html:4
msgid "Import Profiles"
msgstr "Perfis de Importação"
#: templates/import_app/fragments/profiles/list.html:17
msgid "New"
msgstr "Novo"
#: templates/import_app/fragments/profiles/list.html:21
msgid "From preset"
msgstr "A partir de uma predefinição"
#: templates/import_app/fragments/profiles/list.html:55
msgid "Runs"
msgstr "Importações"
#: templates/import_app/fragments/profiles/list.html:86
msgid "No import profiles"
msgstr "Nenhum perfil de importação"
#: templates/import_app/fragments/profiles/list_presets.html:5
msgid "Import Presets"
msgstr "Predefinições de Importação"
#: templates/import_app/fragments/profiles/list_presets.html:33
msgid "By"
msgstr "Por"
#: templates/import_app/fragments/profiles/list_presets.html:40
msgid "No presets yet"
msgstr "Nenhuma predefinição de importação ainda"
#: templates/import_app/fragments/runs/add.html:5
msgid "Import file with profile"
msgstr "Importar aqui com Perfil"
#: templates/import_app/fragments/runs/list.html:5
msgid "Runs for"
msgstr "Importações para"
#: templates/import_app/fragments/runs/list.html:29
msgid "Total Items"
msgstr "Itens Totais"
#: templates/import_app/fragments/runs/list.html:42
msgid "Processed Items"
msgstr "Itens Processados"
#: templates/import_app/fragments/runs/list.html:55
msgid "Skipped Items"
msgstr "Itens Pulados"
#: templates/import_app/fragments/runs/list.html:68
msgid "Failed Items"
msgstr "Itens Falhados"
#: templates/import_app/fragments/runs/list.html:81
msgid "Successful Items"
msgstr "Itens Bem-sucedidos"
#: templates/import_app/fragments/runs/list.html:96
msgid "Logs"
msgstr "Logs"
#: templates/import_app/fragments/runs/list.html:107
msgid "You won't be able to revert this! All imported items will be kept."
msgstr ""
"Você não será capaz de reverter isso! Todos os itens importados serão "
"mantidos."
#: templates/import_app/fragments/runs/list.html:116
msgid "No runs yet"
msgstr "Nenhuma importação ainda"
#: templates/import_app/fragments/runs/log.html:5
msgid "Logs for"
msgstr "Logs para"
#: templates/includes/navbar.html:10
msgid "Toggle navigation"
msgstr "Alternar navegação"
@@ -1652,15 +1829,15 @@ msgstr "Automação"
msgid "Rules"
msgstr "Regras"
#: templates/includes/navbar.html:132
#: templates/includes/navbar.html:134
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:133
#: templates/includes/navbar.html:135
msgid "Django Admin"
msgstr "Django Admin"
#: templates/includes/navbar.html:142
#: templates/includes/navbar.html:144
msgid "Calculator"
msgstr "Calculadora"
@@ -1697,11 +1874,6 @@ msgstr "Adicionar parcelamento"
msgid "Edit installment plan"
msgstr "Editar parcelamento"
#: templates/installment_plans/fragments/list.html:24
#: templates/recurring_transactions/fragments/list.html:27
msgid "Finished"
msgstr "Finalizado"
#: templates/installment_plans/fragments/list_transactions.html:5
#: templates/installment_plans/fragments/table.html:35
msgid "Installments"
@@ -2077,6 +2249,11 @@ msgstr "Visão Anual"
msgid "Year"
msgstr "Ano"
#, fuzzy
#~| msgid "Important dates"
#~ msgid "Import Runs"
#~ msgstr "Datas importantes"
#~ msgid "This will stop the creation of new transactions"
#~ msgstr "Isso interromperá a criação de novas transações"

View File

@@ -20,7 +20,7 @@
{% for preset in presets %}
<a class="text-decoration-none"
role="button"
hx-get="{% url 'import_profiles_add' %}"
hx-post="{% url 'import_profiles_add' %}"
hx-vals='{"yaml_config": {{ preset.config }}, "name": "{{ preset.name }}", "version": "{{ preset.schema_version }}", "message": {{ preset.message }}}'
hx-target="#generic-offcanvas">

View File

@@ -2,7 +2,7 @@
{% load i18n %}
{% load crispy_forms_tags %}
{% block title %}{% translate 'Runs for ' %}{{ profile.name }}{% endblock %}
{% block title %}{% translate 'Runs for' %} {{ profile.name }}{% endblock %}
{% block body %}
<div hx-get="{% url "import_profile_runs_list" profile_id=profile.id %}"

View File

@@ -1,8 +0,0 @@
{% extends "layouts/base.html" %}
{% load i18n %}
{% block title %}{% translate 'Import Runs' %}{% endblock %}
{% block content %}
<div hx-get="{% url 'impor' %}" hx-trigger="load, updated from:window" class="show-loading"></div>
{% endblock %}

View File

@@ -28,7 +28,8 @@
<body class="font-monospace">
<div _="install hide_amounts
install htmx_error_handler
{% block body_hyperscript %}{% endblock %}">
{% block body_hyperscript %}{% endblock %}"
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'>
{% include 'includes/navbar.html' %}
<div id="content">

View File

@@ -0,0 +1,79 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Offline</title>
<style>
.offline, body {
text-align: center;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #222;
color: #fbb700;
font-family: Arial, sans-serif;
}
.wifi-icon {
width: 100px;
height: 100px;
}
@keyframes flash {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}
.flashing {
animation: flash 1s infinite;
}
#offline-countdown {
margin-top: 20px;
font-size: 14px;
}
</style>
</head>
<body>
<div class="offline">
<svg class="wifi-icon flashing" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z" fill="#fbb700"/>
<path d="M23 21L1 3" stroke="#fbb700" stroke-width="2"/>
</svg>
<p>Either you or your WYGIWYH instance is offline.</p>
<div id="offline-countdown"></div>
</div>
<script>
function attemptReload() {
const countdownElement = document.getElementById('offline-countdown');
let secondsLeft = 30;
function updateCountdown() {
countdownElement.textContent = `Retrying in ${secondsLeft} seconds...`;
secondsLeft--;
if (secondsLeft < 0) {
window.location.reload();
} else {
setTimeout(updateCountdown, 1000);
}
}
updateCountdown();
}
// Start the reload attempt process immediately
attemptReload();
// Also attempt reload when coming back online
window.addEventListener('online', () => {
window.location.reload();
});
// For HTMX compatibility
document.body.addEventListener('htmx:load', attemptReload);
</script>
</body>
</html>

View File

@@ -0,0 +1,74 @@
// Base Service Worker implementation. To use your own Service Worker, set the PWA_SERVICE_WORKER_PATH variable in settings.py
var staticCacheName = "django-pwa-v" + new Date().getTime();
var filesToCache = [
'/offline/',
'/static/css/django-pwa-app.css',
'/static/img/favicon/android-icon-192x192.png',
'/static/img/favicon/apple-icon-180x180.png',
'/static/img/pwa/splash-640x1136.png',
'/static/img/pwa/splash-750x1334.png',
];
// Cache on install
self.addEventListener("install", event => {
this.skipWaiting();
event.waitUntil(
caches.open(staticCacheName)
.then(cache => {
return cache.addAll(filesToCache);
})
);
});
// Clear cache on activate
self.addEventListener('activate', event => {
event.waitUntil(
caches.keys().then(cacheNames => {
return Promise.all(
cacheNames
.filter(cacheName => (cacheName.startsWith("django-pwa-")))
.filter(cacheName => (cacheName !== staticCacheName))
.map(cacheName => caches.delete(cacheName))
);
})
);
});
// Serve from Cache
self.addEventListener("fetch", event => {
event.respondWith(
caches.match(event.request)
.then(response => {
if (response) {
return response;
}
return fetch(event.request).catch(() => {
const isHtmxRequest = event.request.headers.get('HX-Request') === 'true';
const isHtmxBoosted = event.request.headers.get('HX-Boosted') === 'true';
if (!isHtmxRequest || isHtmxBoosted) {
// Serve offline content without changing URL
return caches.match('/offline/').then(offlineResponse => {
if (offlineResponse) {
return offlineResponse.text().then(offlineText => {
return new Response(offlineText, {
status: 200,
headers: {'Content-Type': 'text/html'}
});
});
}
// If offline page is not in cache, return a simple offline message
return new Response('<h1>Offline</h1><p>The page is not available offline.</p>', {
status: 200,
headers: {'Content-Type': 'text/html'}
});
});
} else {
// For non-boosted HTMX requests, let it fail normally
throw new Error('Network request failed');
}
});
})
);
});

View File

@@ -58,13 +58,21 @@
// HTMX Loading
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes fade-in {
0% { opacity: 0; }
100% { opacity: 1; }
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.show-loading.htmx-request {
@@ -103,7 +111,7 @@
}
.swing-out-top-bck {
animation: swing-out-top-bck 0.45s cubic-bezier(0.600, -0.280, 0.735, 0.045) both;
animation: swing-out-top-bck 0.45s cubic-bezier(0.600, -0.280, 0.735, 0.045) both;
}
/* ----------------------------------------------
@@ -155,7 +163,7 @@
}
.scale-in-center {
animation: scale-in-center 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;
animation: scale-in-center 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;
}
/* ----------------------------------------------
@@ -182,5 +190,18 @@
}
.scale-out-center {
animation: scale-out-center 0.5s cubic-bezier(0.550, 0.085, 0.680, 0.530) both;
animation: scale-out-center 0.5s cubic-bezier(0.550, 0.085, 0.680, 0.530) both;
}
@keyframes flash {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.3;
}
}
.flashing {
animation: flash 1s infinite;
}

View File

@@ -53,3 +53,27 @@ select[multiple] {
.transaction:has(input[type="checkbox"]:checked) > .transaction-item {
background-color: $primary-bg-subtle-dark;
}
.offline {
text-align: center;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #222;
color: #fbb700;
font-family: Arial, sans-serif;
}
.wifi-icon {
width: 100px;
height: 100px;
}
#offline-countdown {
margin-top: 20px;
font-size: 14px;
}