Compare commits

..

64 Commits

Author SHA1 Message Date
Dimitri Decrock
635f87a8ad locale(Dutch): update translation
Currently translated at 100.0% (666 of 666 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-07-20 09:17:41 +00:00
Herculino Trotta
1a073ba53d Merge pull request #287
feat: improve ordering when searching existing transactions on DCA creation
2025-07-20 00:24:51 -03:00
Herculino Trotta
5412e5b12c feat: improve ordering when searching existing transactions on DCA creation 2025-07-20 00:24:31 -03:00
Herculino Trotta
2103ba1b38 Merge pull request #286
fix: DCA and other indicators too close together when there's more than one
2025-07-20 00:09:25 -03:00
Herculino Trotta
04fb15224c fix: DCA and other indicators too close together when there's more than one 2025-07-20 00:09:09 -03:00
Herculino Trotta
2fc526beac Merge pull request #285
docs: update README
2025-07-20 00:02:46 -03:00
Herculino Trotta
cc3ca4f4a3 docs: improve README 2025-07-20 00:02:11 -03:00
Herculino Trotta
8d3844c431 Merge pull request #284
feat: add FAB to networth and all transactions pages
2025-07-20 00:00:14 -03:00
Herculino Trotta
5e7e918085 feat: add FAB to networth and all transactions pages 2025-07-19 23:59:58 -03:00
Herculino Trotta
c3f02320b5 locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (666 of 666 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-07-19 21:17:41 +00:00
eitchtee
da8bbbfb0b chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-07-19 19:24:50 +00:00
Herculino Trotta
e3f74538d2 Merge pull request #283
feat: quickly add an existing transaction as a model for quick transactions
2025-07-19 16:23:16 -03:00
Herculino Trotta
d8234950c6 feat: quickly add an existing transaction as a model for quick transactions
Use the dropdown menu on a transaction
2025-07-19 16:22:50 -03:00
Herculino Trotta
58f19ce1ca Merge pull request #282
feat: allow single transactions to be hidden from summaries

fix #274
2025-07-19 16:19:50 -03:00
Herculino Trotta
ef5f3580a0 feat: allow single transactions to be hidden from summaries
Control is done via the dropdown menu on a transaction item
Transfers are hidden by default

fix #274
2025-07-19 16:19:11 -03:00
eitchtee
efe0f99cb4 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-07-19 18:47:16 +00:00
Herculino Trotta
dccb5079ad Merge pull request #281
feat: add selected count to floating transactions bar
2025-07-19 15:45:55 -03:00
Herculino Trotta
6c90150661 feat: add selected count to floating transactions bar 2025-07-19 15:39:57 -03:00
eitchtee
c33d6fab69 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-07-19 17:48:14 +00:00
Herculino Trotta
c0c57a6d77 Merge pull request #280
feat: add dropdown to transaction menu and move duplication to there
2025-07-19 14:46:41 -03:00
Herculino Trotta
f19d58a2bd feat: add dropdown to transaction menu and move duplication to there 2025-07-19 14:46:23 -03:00
eitchtee
dfe99093e9 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-07-19 17:43:49 +00:00
Herculino Trotta
d737e573cc Merge pull request #279
refactor: improve transaction menu displaying
2025-07-19 14:43:10 -03:00
Herculino Trotta
805d3f419e refactor: improve transaction menu displaying
Use hover instead of hyperscript and events
2025-07-19 14:42:50 -03:00
Herculino Trotta
9777aac746 Merge pull request #278
feat: slightly opaque transactions if they're silenced
2025-07-18 23:35:20 -03:00
Herculino Trotta
61b782104d feat: slightly opaque transactions if they're silenced 2025-07-18 23:34:55 -03:00
eitchtee
79dec2b515 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-07-12 05:27:34 +00:00
Herculino Trotta
db23e162c4 Merge pull request #276
feat: auto-refresh overview and networth pages (10m for overview and 1h for networth)
2025-07-12 02:26:50 -03:00
Herculino Trotta
d81d89d9f6 feat: auto-refresh overview and networth pages (10m for overview and 1h for networth)
Useful if you want to leave WYGIWYH open in a fixed tab
2025-07-12 02:26:15 -03:00
Herculino Trotta
6826cfe79a Merge pull request #275
fix: backspacing on currency fields doesn't update mask
2025-07-09 20:27:40 -03:00
Herculino Trotta
0832ec75ca fix: visual bug when backspacing on the "amount" field 2025-07-09 20:24:27 -03:00
Dimitri Decrock
3090f632de locale(Dutch): update translation
Currently translated at 100.0% (661 of 661 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-06-30 06:17:41 +00:00
Herculino Trotta
6b4fbee7a6 Merge pull request #272
style: remove color from scrollbar
2025-06-29 17:39:12 -03:00
Herculino Trotta
e7fe6622cd style: remove color from scrollbar 2025-06-29 17:38:49 -03:00
Herculino Trotta
3017593ed5 locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (661 of 661 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-06-29 19:34:02 +00:00
eitchtee
ceb8e9ea97 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-06-29 19:29:11 +00:00
Herculino Trotta
9b5b7683dd git: merge conflict with weblate 2025-06-29 16:27:15 -03:00
Herculino Trotta
514600e34a locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (661 of 661 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-06-29 17:42:29 +00:00
eitchtee
07dd805b07 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-06-29 17:42:26 +00:00
Herculino Trotta
905e9b4c54 Merge pull request #271
feat: allow loading any available datepicker languages
2025-06-29 14:41:03 -03:00
Herculino Trotta
60d367dec5 feat: allow loading any available datepicker languages
instead of a pre-configured list
2025-06-29 14:40:41 -03:00
Herculino Trotta
6e0842a697 Merge pull request #270
chore: bump npm dependencies
2025-06-29 14:11:03 -03:00
Herculino Trotta
858934b7c5 chore: bump npm dependencies 2025-06-29 14:10:38 -03:00
Herculino Trotta
47d9e4078c Merge pull request #269
chore: update npm dependencies
2025-06-29 12:11:37 -03:00
Herculino Trotta
fa6f3e87c0 chore: update npm dependencies 2025-06-29 12:11:17 -03:00
Herculino Trotta
5f101af879 Merge pull request #268
fix: broken distribution chart when number format is set to dot-comma
2025-06-29 01:32:07 -03:00
Herculino Trotta
b27633a28e fix: broken distribution chart when number format is set to dot-comma 2025-06-29 01:31:43 -03:00
eitchtee
7716eee0b3 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-06-29 04:15:12 +00:00
Herculino Trotta
37c447ae0a Merge pull request #267
style: improve the look of secondary navbar buttons (profile and calc)
2025-06-29 01:14:32 -03:00
Herculino Trotta
e544d7068b style: improve the look of secondary navbar buttons (profile and calc) 2025-06-29 01:14:06 -03:00
eitchtee
8d93da99c1 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-06-29 03:23:23 +00:00
Herculino Trotta
cc87477a2e Merge pull request #266
feat: add sounds volume control to user settings
2025-06-29 00:21:54 -03:00
Herculino Trotta
e86e0b8c08 feat: add sounds volume control to user settings 2025-06-29 00:21:32 -03:00
eitchtee
eb0c872c50 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2025-06-28 03:05:50 +00:00
Herculino Trotta
b4578df242 Merge pull request #265
feat: creating a quick transaction triggers the proper rule
2025-06-28 00:05:10 -03:00
Herculino Trotta
756de12835 feat: creating a quick transaction triggers the proper rule 2025-06-28 00:04:45 -03:00
ichi135
d573d02657 locale(Spanish): update translation
Currently translated at 17.6% (116 of 659 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/es/
2025-06-27 23:16:54 +00:00
Herculino Trotta
250b352217 Merge pull request #263
chore: update tailwind to v4
2025-06-21 16:13:06 -03:00
Herculino Trotta
b4e9446cf6 chore: update tailwind to v4
As is customary in the JS world EVERYTHING must break with each major version
2025-06-21 16:12:44 -03:00
Dimitri Decrock
90944f0179 locale(Dutch): update translation
Currently translated at 100.0% (659 of 659 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2025-06-21 16:16:54 +00:00
Herculino Trotta
008d34b1d0 Merge remote-tracking branch 'origin/main' 2025-06-21 10:55:56 -03:00
Herculino Trotta
46dfc7dad4 chore: update npm dependencies 2025-06-21 10:55:32 -03:00
Herculino Trotta
22900b5d9e locale(Portuguese (Brazil)): update translation
Currently translated at 100.0% (659 of 659 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2025-06-20 07:16:54 +00:00
Herculino Trotta
0c48e9fe3d docs: wrong OIDC callback url 2025-06-20 02:16:37 -03:00
112 changed files with 9309 additions and 6732 deletions

View File

@@ -29,15 +29,15 @@ Managing money can feel unnecessarily complex, but it doesnt have to be. WYGI
By sticking to this straightforward approach, you avoid dipping into your savings while still keeping tabs on where your money goes.
While this philosophy is simple, finding tools to make it work wasnt. I initially used a spreadsheet, which served me well for yearsuntil it became unwieldy as I started managing multiple currencies, accounts, and investments. I tried various financial management apps, but none met my key requirements:
While this philosophy is simple, finding tools to make it work wasnt. I initially used a spreadsheet, which served me well for years, until it became unwieldy as I started managing multiple currencies, accounts, and investments. I tried various financial management apps, but none met my key requirements:
1. **Multi-currency support** to track income and expenses in different currencies.
2. **Not a budgeting app** as I dislike budgeting constraints.
2. **Not a budgeting app** as I dislike budgeting constraints.
3. **Web app usability** (ideally with mobile support, though optional).
4. **Automation-ready API** to integrate with other tools and services.
5. **Custom transaction rules** for credit card billing cycles or similar quirks.
Frustrated by the lack of comprehensive options, I set out to build **WYGIWYH** an opinionated yet powerful tool that I believe will resonate with like-minded users.
Frustrated by the lack of comprehensive options, I set out to build **WYGIWYH**, an opinionated yet powerful tool that I believe will resonate with like-minded users.
# Key Features
@@ -165,7 +165,7 @@ To configure OIDC, you need to set the following environment variables:
When configuring your OIDC provider, you will need to provide a callback URL (also known as a Redirect URI). For WYGIWYH, the default callback URL is:
`https://your.wygiwyh.domain/daa/accounts/oidc/<OIDC_CLIENT_NAME>/login/callback/`
`https://your.wygiwyh.domain/auth/oidc/<OIDC_CLIENT_NAME>/login/callback/`
Replace `https://your.wygiwyh.domain` with the actual URL where your WYGIWYH instance is accessible. And `<OIDC_CLIENT_NAME>` with the slugfied value set in OIDC_CLIENT_NAME or the default `openid-connect` if you haven't set this variable.

View File

@@ -5,7 +5,7 @@ from django.utils.formats import get_format as original_get_format
def get_format(format_type=None, lang=None, use_l10n=None):
user = get_current_user()
if user and user.is_authenticated and hasattr(user, "settings"):
if user and user.is_authenticated and hasattr(user, "settings") and use_l10n:
user_settings = user.settings
if format_type == "THOUSAND_SEPARATOR":
number_format = getattr(user_settings, "number_format", None)

View File

@@ -37,7 +37,9 @@ class AirDatePickerInput(widgets.DateInput):
def _get_current_language():
"""Get current language code in format compatible with AirDatepicker"""
lang_code = translation.get_language()
# AirDatepicker uses simple language codes
# AirDatepicker uses simple language codes, except for pt-br
if lang_code.lower() == "pt-br":
return "pt-BR"
return lang_code.split("-")[0]
def _get_format(self):

View File

@@ -37,6 +37,7 @@ class ArbitraryDecimalDisplayNumberInput(forms.TextInput):
"x-data": "",
"x-mask:dynamic": f"$money($input, '{get_format('DECIMAL_SEPARATOR')}', "
f"'{get_format('THOUSAND_SEPARATOR')}', '30')",
"x-on:keyup": "$el.dispatchEvent(new Event('input'))",
}
)

View File

@@ -91,6 +91,8 @@ def get_transactions(request, include_unpaid=True, include_silent=False):
transactions = transactions.filter(is_paid=True)
if not include_silent:
transactions = transactions.exclude(Q(category__mute=True) & ~Q(category=None))
transactions = transactions.exclude(
Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True)
)
return transactions

View File

@@ -260,6 +260,7 @@ def emergency_fund(request):
reference_date__gte=start_date,
reference_date__lte=end_date,
category__mute=False,
mute=False,
)
.values("reference_date", "account__currency")
.annotate(monthly_total=Sum("amount"))

View File

@@ -109,7 +109,7 @@ def monthly_summary(request, month: int, year: int):
# Base queryset with all required filters
base_queryset = Transaction.objects.filter(
reference_date__year=year, reference_date__month=month, account__is_asset=False
).exclude(Q(category__mute=True) & ~Q(category=None))
).exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
data = calculate_currency_totals(base_queryset, ignore_empty=True)
percentages = calculate_percentage_distribution(data)
@@ -143,7 +143,7 @@ def monthly_account_summary(request, month: int, year: int):
base_queryset = Transaction.objects.filter(
reference_date__year=year,
reference_date__month=month,
).exclude(Q(category__mute=True) & ~Q(category=None))
).exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
account_data = calculate_account_totals(transactions_queryset=base_queryset.all())
account_percentages = calculate_percentage_distribution(account_data)
@@ -168,7 +168,7 @@ def monthly_currency_summary(request, month: int, year: int):
base_queryset = Transaction.objects.filter(
reference_date__year=year,
reference_date__month=month,
).exclude(Q(category__mute=True) & ~Q(category=None))
).exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
currency_data = calculate_currency_totals(base_queryset.all(), ignore_empty=True)
currency_percentages = calculate_percentage_distribution(currency_data)

View File

@@ -290,11 +290,15 @@ class QuickTransactionForm(forms.ModelForm):
"category",
"tags",
"entities",
"mute",
]
widgets = {
"notes": forms.Textarea(attrs={"rows": 3}),
"account": TomSelect(clear_button=False, group_by="group"),
}
help_texts = {
"mute": _("Muted transactions won't be displayed on monthly summaries")
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@@ -356,6 +360,7 @@ class QuickTransactionForm(forms.ModelForm):
css_class="form-row",
),
"notes",
Switch("mute"),
)
if self.instance and self.instance.pk:
@@ -616,6 +621,7 @@ class TransferForm(forms.Form):
description=description,
category=from_category,
notes=notes,
mute=True,
)
from_transaction.tags.set(self.cleaned_data.get("from_tags", []))
@@ -630,6 +636,7 @@ class TransferForm(forms.Form):
description=description,
category=to_category,
notes=notes,
mute=True,
)
to_transaction.tags.set(self.cleaned_data.get("to_tags", []))
@@ -868,7 +875,7 @@ class TransactionCategoryForm(forms.ModelForm):
fields = ["name", "mute", "active"]
labels = {"name": _("Category name")}
help_texts = {
"mute": _("Muted categories won't count towards your monthly total")
"mute": _("Muted categories won't be displayed on monthly summaries")
}
def __init__(self, *args, **kwargs):

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.1.11 on 2025-07-19 18:12
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('transactions', '0044_alter_quicktransaction_unique_together'),
]
operations = [
migrations.AddField(
model_name='transaction',
name='mute',
field=models.BooleanField(default=False, verbose_name='Mute'),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.1.11 on 2025-07-19 18:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('transactions', '0045_transaction_mute'),
]
operations = [
migrations.AddField(
model_name='quicktransaction',
name='mute',
field=models.BooleanField(default=False, verbose_name='Mute'),
),
]

View File

@@ -299,6 +299,7 @@ class Transaction(OwnedObject):
is_paid = models.BooleanField(default=True, verbose_name=_("Paid"))
date = models.DateField(verbose_name=_("Date"))
reference_date = MonthYearModelField(verbose_name=_("Reference Date"))
mute = models.BooleanField(default=False, verbose_name=_("Mute"))
amount = models.DecimalField(
max_digits=42,
@@ -918,6 +919,7 @@ class QuickTransaction(OwnedObject):
verbose_name=_("Type"),
)
is_paid = models.BooleanField(default=True, verbose_name=_("Paid"))
mute = models.BooleanField(default=False, verbose_name=_("Mute"))
amount = models.DecimalField(
max_digits=42,

View File

@@ -66,6 +66,11 @@ urlpatterns = [
views.transaction_pay,
name="transaction_pay",
),
path(
"transaction/<int:transaction_id>/mute/",
views.transaction_mute,
name="transaction_mute",
),
path(
"transaction/<int:transaction_id>/delete/",
views.transaction_delete,
@@ -342,4 +347,9 @@ urlpatterns = [
views.quick_transaction_add_as_transaction,
name="quick_transaction_add_as_transaction",
),
path(
"transactions/<int:transaction_id>/add-as-quick-transaction/",
views.quick_transaction_add_as_quick_transaction,
name="quick_transaction_add_as_quick_transaction",
),
]

View File

@@ -9,7 +9,7 @@ from django.views.decorators.http import require_http_methods
from apps.common.decorators.htmx import only_htmx
from apps.transactions.forms import QuickTransactionForm
from apps.transactions.models import QuickTransaction
from apps.transactions.models import QuickTransaction, transaction_created
from apps.transactions.models import Transaction
@@ -129,7 +129,15 @@ def quick_transaction_add_as_transaction(request, quick_transaction_id):
quick_transaction_data = model_to_dict(
quick_transaction,
exclude=["id", "name", "owner", "account", "category", "tags", "entities"],
exclude=[
"id",
"name",
"owner",
"account",
"category",
"tags",
"entities",
],
)
new_transaction = Transaction(**quick_transaction_data)
@@ -142,6 +150,8 @@ def quick_transaction_add_as_transaction(request, quick_transaction_id):
new_transaction.tags.set(quick_transaction.tags.all())
new_transaction.entities.set(quick_transaction.entities.all())
transaction_created.send(sender=new_transaction)
messages.success(request, _("Transaction added successfully"))
return HttpResponse(
@@ -150,3 +160,70 @@ def quick_transaction_add_as_transaction(request, quick_transaction_id):
"HX-Trigger": "updated, hide_offcanvas",
},
)
@only_htmx
@login_required
@require_http_methods(["GET"])
def quick_transaction_add_as_quick_transaction(request, transaction_id):
transaction: Transaction = get_object_or_404(Transaction, pk=transaction_id)
if (
transaction.description
and QuickTransaction.objects.filter(
name__startswith=transaction.description
).exists()
) or QuickTransaction.objects.filter(
name__startswith=_("Quick Transaction")
).exists():
if transaction.description:
count = QuickTransaction.objects.filter(
name__startswith=transaction.description
).count()
qt_name = transaction.description + f" ({count + 1})"
else:
count = QuickTransaction.objects.filter(
name__startswith=_("Quick Transaction")
).count()
qt_name = _("Quick Transaction") + f" ({count + 1})"
else:
qt_name = transaction.description or _("Quick Transaction")
transaction_data = model_to_dict(
transaction,
exclude=[
"id",
"name",
"owner",
"account",
"category",
"tags",
"entities",
"date",
"reference_date",
"installment_plan",
"installment_id",
"recurring_transaction",
"deleted",
"deleted_at",
],
)
new_quick_transaction = QuickTransaction(**transaction_data)
new_quick_transaction.account = transaction.account
new_quick_transaction.category = transaction.category
new_quick_transaction.name = qt_name
new_quick_transaction.save()
new_quick_transaction.tags.set(transaction.tags.all())
new_quick_transaction.entities.set(transaction.entities.all())
messages.success(request, _("Item added successfully"))
return HttpResponse(
status=204,
headers={
"HX-Trigger": "toasts",
},
)

View File

@@ -4,7 +4,7 @@ from copy import deepcopy
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.db.models import Q
from django.db.models import Q, When, Case, Value, IntegerField
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render, get_object_or_404
from django.utils import timezone
@@ -388,6 +388,26 @@ def transaction_pay(request, transaction_id):
return response
@only_htmx
@login_required
@require_http_methods(["GET"])
def transaction_mute(request, transaction_id):
transaction = get_object_or_404(Transaction, pk=transaction_id)
new_mute = False if transaction.mute else True
transaction.mute = new_mute
transaction.save()
transaction_updated.send(sender=transaction)
response = render(
request,
"transactions/fragments/item.html",
context={"transaction": transaction, **request.GET},
)
response.headers["HX-Trigger"] = "selective_update"
return response
@login_required
@require_http_methods(["GET"])
def transaction_all_index(request):
@@ -586,11 +606,26 @@ def get_recent_transactions(request, filter_type=None):
# Get search term from query params
search_term = request.GET.get("q", "").strip()
today = timezone.localdate(timezone.now())
yesterday = today - timezone.timedelta(days=1)
tomorrow = today + timezone.timedelta(days=1)
# Base queryset with selected fields
queryset = (
Transaction.objects.filter(deleted=False)
.annotate(
date_order=Case(
When(date=today, then=Value(0)),
When(date=tomorrow, then=Value(1)),
When(date=yesterday, then=Value(2)),
When(date__gt=tomorrow, then=Value(3)),
When(date__lt=yesterday, then=Value(4)),
default=Value(5),
output_field=IntegerField(),
)
)
.select_related("account", "category")
.order_by("-created_at")
.order_by("date_order", "date", "id")
)
if filter_type:

View File

@@ -2,7 +2,7 @@ from crispy_forms.bootstrap import (
FormActions,
)
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Submit, Row, Column, Field, Div
from crispy_forms.layout import Layout, Submit, Row, Column, Field, Div, HTML
from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import (
@@ -115,6 +115,7 @@ class UserSettingsForm(forms.ModelForm):
"date_format",
"datetime_format",
"number_format",
"volume",
]
def __init__(self, *args, **kwargs):
@@ -126,10 +127,14 @@ class UserSettingsForm(forms.ModelForm):
self.helper.layout = Layout(
"language",
"timezone",
HTML("<hr />"),
"date_format",
"datetime_format",
"number_format",
HTML("<hr />"),
"start_page",
HTML("<hr />"),
"volume",
FormActions(
NoClassSubmit(
"submit", _("Save"), css_class="btn btn-outline-primary w-100"

View File

@@ -0,0 +1,479 @@
# Generated by Django 5.1.1 on 2025-06-29 00:48
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("users", "0021_alter_usersettings_timezone"),
]
operations = [
migrations.AddField(
model_name="usersettings",
name="volume",
field=models.PositiveIntegerField(
default=10,
validators=[
django.core.validators.MinValueValidator(1),
django.core.validators.MaxValueValidator(10),
],
verbose_name="Volume",
),
),
migrations.AlterField(
model_name="usersettings",
name="timezone",
field=models.CharField(
choices=[
("auto", "Auto"),
("Africa/Abidjan", "Africa/Abidjan"),
("Africa/Accra", "Africa/Accra"),
("Africa/Addis_Ababa", "Africa/Addis_Ababa"),
("Africa/Algiers", "Africa/Algiers"),
("Africa/Asmara", "Africa/Asmara"),
("Africa/Bamako", "Africa/Bamako"),
("Africa/Bangui", "Africa/Bangui"),
("Africa/Banjul", "Africa/Banjul"),
("Africa/Bissau", "Africa/Bissau"),
("Africa/Blantyre", "Africa/Blantyre"),
("Africa/Brazzaville", "Africa/Brazzaville"),
("Africa/Bujumbura", "Africa/Bujumbura"),
("Africa/Cairo", "Africa/Cairo"),
("Africa/Casablanca", "Africa/Casablanca"),
("Africa/Ceuta", "Africa/Ceuta"),
("Africa/Conakry", "Africa/Conakry"),
("Africa/Dakar", "Africa/Dakar"),
("Africa/Dar_es_Salaam", "Africa/Dar_es_Salaam"),
("Africa/Djibouti", "Africa/Djibouti"),
("Africa/Douala", "Africa/Douala"),
("Africa/El_Aaiun", "Africa/El_Aaiun"),
("Africa/Freetown", "Africa/Freetown"),
("Africa/Gaborone", "Africa/Gaborone"),
("Africa/Harare", "Africa/Harare"),
("Africa/Johannesburg", "Africa/Johannesburg"),
("Africa/Juba", "Africa/Juba"),
("Africa/Kampala", "Africa/Kampala"),
("Africa/Khartoum", "Africa/Khartoum"),
("Africa/Kigali", "Africa/Kigali"),
("Africa/Kinshasa", "Africa/Kinshasa"),
("Africa/Lagos", "Africa/Lagos"),
("Africa/Libreville", "Africa/Libreville"),
("Africa/Lome", "Africa/Lome"),
("Africa/Luanda", "Africa/Luanda"),
("Africa/Lubumbashi", "Africa/Lubumbashi"),
("Africa/Lusaka", "Africa/Lusaka"),
("Africa/Malabo", "Africa/Malabo"),
("Africa/Maputo", "Africa/Maputo"),
("Africa/Maseru", "Africa/Maseru"),
("Africa/Mbabane", "Africa/Mbabane"),
("Africa/Mogadishu", "Africa/Mogadishu"),
("Africa/Monrovia", "Africa/Monrovia"),
("Africa/Nairobi", "Africa/Nairobi"),
("Africa/Ndjamena", "Africa/Ndjamena"),
("Africa/Niamey", "Africa/Niamey"),
("Africa/Nouakchott", "Africa/Nouakchott"),
("Africa/Ouagadougou", "Africa/Ouagadougou"),
("Africa/Porto-Novo", "Africa/Porto-Novo"),
("Africa/Sao_Tome", "Africa/Sao_Tome"),
("Africa/Tripoli", "Africa/Tripoli"),
("Africa/Tunis", "Africa/Tunis"),
("Africa/Windhoek", "Africa/Windhoek"),
("America/Adak", "America/Adak"),
("America/Anchorage", "America/Anchorage"),
("America/Anguilla", "America/Anguilla"),
("America/Antigua", "America/Antigua"),
("America/Araguaina", "America/Araguaina"),
(
"America/Argentina/Buenos_Aires",
"America/Argentina/Buenos_Aires",
),
("America/Argentina/Catamarca", "America/Argentina/Catamarca"),
("America/Argentina/Cordoba", "America/Argentina/Cordoba"),
("America/Argentina/Jujuy", "America/Argentina/Jujuy"),
("America/Argentina/La_Rioja", "America/Argentina/La_Rioja"),
("America/Argentina/Mendoza", "America/Argentina/Mendoza"),
(
"America/Argentina/Rio_Gallegos",
"America/Argentina/Rio_Gallegos",
),
("America/Argentina/Salta", "America/Argentina/Salta"),
("America/Argentina/San_Juan", "America/Argentina/San_Juan"),
("America/Argentina/San_Luis", "America/Argentina/San_Luis"),
("America/Argentina/Tucuman", "America/Argentina/Tucuman"),
("America/Argentina/Ushuaia", "America/Argentina/Ushuaia"),
("America/Aruba", "America/Aruba"),
("America/Asuncion", "America/Asuncion"),
("America/Atikokan", "America/Atikokan"),
("America/Bahia", "America/Bahia"),
("America/Bahia_Banderas", "America/Bahia_Banderas"),
("America/Barbados", "America/Barbados"),
("America/Belem", "America/Belem"),
("America/Belize", "America/Belize"),
("America/Blanc-Sablon", "America/Blanc-Sablon"),
("America/Boa_Vista", "America/Boa_Vista"),
("America/Bogota", "America/Bogota"),
("America/Boise", "America/Boise"),
("America/Cambridge_Bay", "America/Cambridge_Bay"),
("America/Campo_Grande", "America/Campo_Grande"),
("America/Cancun", "America/Cancun"),
("America/Caracas", "America/Caracas"),
("America/Cayenne", "America/Cayenne"),
("America/Cayman", "America/Cayman"),
("America/Chicago", "America/Chicago"),
("America/Chihuahua", "America/Chihuahua"),
("America/Ciudad_Juarez", "America/Ciudad_Juarez"),
("America/Costa_Rica", "America/Costa_Rica"),
("America/Creston", "America/Creston"),
("America/Cuiaba", "America/Cuiaba"),
("America/Curacao", "America/Curacao"),
("America/Danmarkshavn", "America/Danmarkshavn"),
("America/Dawson", "America/Dawson"),
("America/Dawson_Creek", "America/Dawson_Creek"),
("America/Denver", "America/Denver"),
("America/Detroit", "America/Detroit"),
("America/Dominica", "America/Dominica"),
("America/Edmonton", "America/Edmonton"),
("America/Eirunepe", "America/Eirunepe"),
("America/El_Salvador", "America/El_Salvador"),
("America/Fort_Nelson", "America/Fort_Nelson"),
("America/Fortaleza", "America/Fortaleza"),
("America/Glace_Bay", "America/Glace_Bay"),
("America/Goose_Bay", "America/Goose_Bay"),
("America/Grand_Turk", "America/Grand_Turk"),
("America/Grenada", "America/Grenada"),
("America/Guadeloupe", "America/Guadeloupe"),
("America/Guatemala", "America/Guatemala"),
("America/Guayaquil", "America/Guayaquil"),
("America/Guyana", "America/Guyana"),
("America/Halifax", "America/Halifax"),
("America/Havana", "America/Havana"),
("America/Hermosillo", "America/Hermosillo"),
("America/Indiana/Indianapolis", "America/Indiana/Indianapolis"),
("America/Indiana/Knox", "America/Indiana/Knox"),
("America/Indiana/Marengo", "America/Indiana/Marengo"),
("America/Indiana/Petersburg", "America/Indiana/Petersburg"),
("America/Indiana/Tell_City", "America/Indiana/Tell_City"),
("America/Indiana/Vevay", "America/Indiana/Vevay"),
("America/Indiana/Vincennes", "America/Indiana/Vincennes"),
("America/Indiana/Winamac", "America/Indiana/Winamac"),
("America/Inuvik", "America/Inuvik"),
("America/Iqaluit", "America/Iqaluit"),
("America/Jamaica", "America/Jamaica"),
("America/Juneau", "America/Juneau"),
("America/Kentucky/Louisville", "America/Kentucky/Louisville"),
("America/Kentucky/Monticello", "America/Kentucky/Monticello"),
("America/Kralendijk", "America/Kralendijk"),
("America/La_Paz", "America/La_Paz"),
("America/Lima", "America/Lima"),
("America/Los_Angeles", "America/Los_Angeles"),
("America/Lower_Princes", "America/Lower_Princes"),
("America/Maceio", "America/Maceio"),
("America/Managua", "America/Managua"),
("America/Manaus", "America/Manaus"),
("America/Marigot", "America/Marigot"),
("America/Martinique", "America/Martinique"),
("America/Matamoros", "America/Matamoros"),
("America/Mazatlan", "America/Mazatlan"),
("America/Menominee", "America/Menominee"),
("America/Merida", "America/Merida"),
("America/Metlakatla", "America/Metlakatla"),
("America/Mexico_City", "America/Mexico_City"),
("America/Miquelon", "America/Miquelon"),
("America/Moncton", "America/Moncton"),
("America/Monterrey", "America/Monterrey"),
("America/Montevideo", "America/Montevideo"),
("America/Montserrat", "America/Montserrat"),
("America/Nassau", "America/Nassau"),
("America/New_York", "America/New_York"),
("America/Nome", "America/Nome"),
("America/Noronha", "America/Noronha"),
("America/North_Dakota/Beulah", "America/North_Dakota/Beulah"),
("America/North_Dakota/Center", "America/North_Dakota/Center"),
(
"America/North_Dakota/New_Salem",
"America/North_Dakota/New_Salem",
),
("America/Nuuk", "America/Nuuk"),
("America/Ojinaga", "America/Ojinaga"),
("America/Panama", "America/Panama"),
("America/Paramaribo", "America/Paramaribo"),
("America/Phoenix", "America/Phoenix"),
("America/Port-au-Prince", "America/Port-au-Prince"),
("America/Port_of_Spain", "America/Port_of_Spain"),
("America/Porto_Velho", "America/Porto_Velho"),
("America/Puerto_Rico", "America/Puerto_Rico"),
("America/Punta_Arenas", "America/Punta_Arenas"),
("America/Rankin_Inlet", "America/Rankin_Inlet"),
("America/Recife", "America/Recife"),
("America/Regina", "America/Regina"),
("America/Resolute", "America/Resolute"),
("America/Rio_Branco", "America/Rio_Branco"),
("America/Santarem", "America/Santarem"),
("America/Santiago", "America/Santiago"),
("America/Santo_Domingo", "America/Santo_Domingo"),
("America/Sao_Paulo", "America/Sao_Paulo"),
("America/Scoresbysund", "America/Scoresbysund"),
("America/Sitka", "America/Sitka"),
("America/St_Barthelemy", "America/St_Barthelemy"),
("America/St_Johns", "America/St_Johns"),
("America/St_Kitts", "America/St_Kitts"),
("America/St_Lucia", "America/St_Lucia"),
("America/St_Thomas", "America/St_Thomas"),
("America/St_Vincent", "America/St_Vincent"),
("America/Swift_Current", "America/Swift_Current"),
("America/Tegucigalpa", "America/Tegucigalpa"),
("America/Thule", "America/Thule"),
("America/Tijuana", "America/Tijuana"),
("America/Toronto", "America/Toronto"),
("America/Tortola", "America/Tortola"),
("America/Vancouver", "America/Vancouver"),
("America/Whitehorse", "America/Whitehorse"),
("America/Winnipeg", "America/Winnipeg"),
("America/Yakutat", "America/Yakutat"),
("Antarctica/Casey", "Antarctica/Casey"),
("Antarctica/Davis", "Antarctica/Davis"),
("Antarctica/DumontDUrville", "Antarctica/DumontDUrville"),
("Antarctica/Macquarie", "Antarctica/Macquarie"),
("Antarctica/Mawson", "Antarctica/Mawson"),
("Antarctica/McMurdo", "Antarctica/McMurdo"),
("Antarctica/Palmer", "Antarctica/Palmer"),
("Antarctica/Rothera", "Antarctica/Rothera"),
("Antarctica/Syowa", "Antarctica/Syowa"),
("Antarctica/Troll", "Antarctica/Troll"),
("Antarctica/Vostok", "Antarctica/Vostok"),
("Arctic/Longyearbyen", "Arctic/Longyearbyen"),
("Asia/Aden", "Asia/Aden"),
("Asia/Almaty", "Asia/Almaty"),
("Asia/Amman", "Asia/Amman"),
("Asia/Anadyr", "Asia/Anadyr"),
("Asia/Aqtau", "Asia/Aqtau"),
("Asia/Aqtobe", "Asia/Aqtobe"),
("Asia/Ashgabat", "Asia/Ashgabat"),
("Asia/Atyrau", "Asia/Atyrau"),
("Asia/Baghdad", "Asia/Baghdad"),
("Asia/Bahrain", "Asia/Bahrain"),
("Asia/Baku", "Asia/Baku"),
("Asia/Bangkok", "Asia/Bangkok"),
("Asia/Barnaul", "Asia/Barnaul"),
("Asia/Beirut", "Asia/Beirut"),
("Asia/Bishkek", "Asia/Bishkek"),
("Asia/Brunei", "Asia/Brunei"),
("Asia/Chita", "Asia/Chita"),
("Asia/Colombo", "Asia/Colombo"),
("Asia/Damascus", "Asia/Damascus"),
("Asia/Dhaka", "Asia/Dhaka"),
("Asia/Dili", "Asia/Dili"),
("Asia/Dubai", "Asia/Dubai"),
("Asia/Dushanbe", "Asia/Dushanbe"),
("Asia/Famagusta", "Asia/Famagusta"),
("Asia/Gaza", "Asia/Gaza"),
("Asia/Hebron", "Asia/Hebron"),
("Asia/Ho_Chi_Minh", "Asia/Ho_Chi_Minh"),
("Asia/Hong_Kong", "Asia/Hong_Kong"),
("Asia/Hovd", "Asia/Hovd"),
("Asia/Irkutsk", "Asia/Irkutsk"),
("Asia/Jakarta", "Asia/Jakarta"),
("Asia/Jayapura", "Asia/Jayapura"),
("Asia/Jerusalem", "Asia/Jerusalem"),
("Asia/Kabul", "Asia/Kabul"),
("Asia/Kamchatka", "Asia/Kamchatka"),
("Asia/Karachi", "Asia/Karachi"),
("Asia/Kathmandu", "Asia/Kathmandu"),
("Asia/Khandyga", "Asia/Khandyga"),
("Asia/Kolkata", "Asia/Kolkata"),
("Asia/Krasnoyarsk", "Asia/Krasnoyarsk"),
("Asia/Kuala_Lumpur", "Asia/Kuala_Lumpur"),
("Asia/Kuching", "Asia/Kuching"),
("Asia/Kuwait", "Asia/Kuwait"),
("Asia/Macau", "Asia/Macau"),
("Asia/Magadan", "Asia/Magadan"),
("Asia/Makassar", "Asia/Makassar"),
("Asia/Manila", "Asia/Manila"),
("Asia/Muscat", "Asia/Muscat"),
("Asia/Nicosia", "Asia/Nicosia"),
("Asia/Novokuznetsk", "Asia/Novokuznetsk"),
("Asia/Novosibirsk", "Asia/Novosibirsk"),
("Asia/Omsk", "Asia/Omsk"),
("Asia/Oral", "Asia/Oral"),
("Asia/Phnom_Penh", "Asia/Phnom_Penh"),
("Asia/Pontianak", "Asia/Pontianak"),
("Asia/Pyongyang", "Asia/Pyongyang"),
("Asia/Qatar", "Asia/Qatar"),
("Asia/Qostanay", "Asia/Qostanay"),
("Asia/Qyzylorda", "Asia/Qyzylorda"),
("Asia/Riyadh", "Asia/Riyadh"),
("Asia/Sakhalin", "Asia/Sakhalin"),
("Asia/Samarkand", "Asia/Samarkand"),
("Asia/Seoul", "Asia/Seoul"),
("Asia/Shanghai", "Asia/Shanghai"),
("Asia/Singapore", "Asia/Singapore"),
("Asia/Srednekolymsk", "Asia/Srednekolymsk"),
("Asia/Taipei", "Asia/Taipei"),
("Asia/Tashkent", "Asia/Tashkent"),
("Asia/Tbilisi", "Asia/Tbilisi"),
("Asia/Tehran", "Asia/Tehran"),
("Asia/Thimphu", "Asia/Thimphu"),
("Asia/Tokyo", "Asia/Tokyo"),
("Asia/Tomsk", "Asia/Tomsk"),
("Asia/Ulaanbaatar", "Asia/Ulaanbaatar"),
("Asia/Urumqi", "Asia/Urumqi"),
("Asia/Ust-Nera", "Asia/Ust-Nera"),
("Asia/Vientiane", "Asia/Vientiane"),
("Asia/Vladivostok", "Asia/Vladivostok"),
("Asia/Yakutsk", "Asia/Yakutsk"),
("Asia/Yangon", "Asia/Yangon"),
("Asia/Yekaterinburg", "Asia/Yekaterinburg"),
("Asia/Yerevan", "Asia/Yerevan"),
("Atlantic/Azores", "Atlantic/Azores"),
("Atlantic/Bermuda", "Atlantic/Bermuda"),
("Atlantic/Canary", "Atlantic/Canary"),
("Atlantic/Cape_Verde", "Atlantic/Cape_Verde"),
("Atlantic/Faroe", "Atlantic/Faroe"),
("Atlantic/Madeira", "Atlantic/Madeira"),
("Atlantic/Reykjavik", "Atlantic/Reykjavik"),
("Atlantic/South_Georgia", "Atlantic/South_Georgia"),
("Atlantic/St_Helena", "Atlantic/St_Helena"),
("Atlantic/Stanley", "Atlantic/Stanley"),
("Australia/Adelaide", "Australia/Adelaide"),
("Australia/Brisbane", "Australia/Brisbane"),
("Australia/Broken_Hill", "Australia/Broken_Hill"),
("Australia/Darwin", "Australia/Darwin"),
("Australia/Eucla", "Australia/Eucla"),
("Australia/Hobart", "Australia/Hobart"),
("Australia/Lindeman", "Australia/Lindeman"),
("Australia/Lord_Howe", "Australia/Lord_Howe"),
("Australia/Melbourne", "Australia/Melbourne"),
("Australia/Perth", "Australia/Perth"),
("Australia/Sydney", "Australia/Sydney"),
("Canada/Atlantic", "Canada/Atlantic"),
("Canada/Central", "Canada/Central"),
("Canada/Eastern", "Canada/Eastern"),
("Canada/Mountain", "Canada/Mountain"),
("Canada/Newfoundland", "Canada/Newfoundland"),
("Canada/Pacific", "Canada/Pacific"),
("Europe/Amsterdam", "Europe/Amsterdam"),
("Europe/Andorra", "Europe/Andorra"),
("Europe/Astrakhan", "Europe/Astrakhan"),
("Europe/Athens", "Europe/Athens"),
("Europe/Belgrade", "Europe/Belgrade"),
("Europe/Berlin", "Europe/Berlin"),
("Europe/Bratislava", "Europe/Bratislava"),
("Europe/Brussels", "Europe/Brussels"),
("Europe/Bucharest", "Europe/Bucharest"),
("Europe/Budapest", "Europe/Budapest"),
("Europe/Busingen", "Europe/Busingen"),
("Europe/Chisinau", "Europe/Chisinau"),
("Europe/Copenhagen", "Europe/Copenhagen"),
("Europe/Dublin", "Europe/Dublin"),
("Europe/Gibraltar", "Europe/Gibraltar"),
("Europe/Guernsey", "Europe/Guernsey"),
("Europe/Helsinki", "Europe/Helsinki"),
("Europe/Isle_of_Man", "Europe/Isle_of_Man"),
("Europe/Istanbul", "Europe/Istanbul"),
("Europe/Jersey", "Europe/Jersey"),
("Europe/Kaliningrad", "Europe/Kaliningrad"),
("Europe/Kirov", "Europe/Kirov"),
("Europe/Kyiv", "Europe/Kyiv"),
("Europe/Lisbon", "Europe/Lisbon"),
("Europe/Ljubljana", "Europe/Ljubljana"),
("Europe/London", "Europe/London"),
("Europe/Luxembourg", "Europe/Luxembourg"),
("Europe/Madrid", "Europe/Madrid"),
("Europe/Malta", "Europe/Malta"),
("Europe/Mariehamn", "Europe/Mariehamn"),
("Europe/Minsk", "Europe/Minsk"),
("Europe/Monaco", "Europe/Monaco"),
("Europe/Moscow", "Europe/Moscow"),
("Europe/Oslo", "Europe/Oslo"),
("Europe/Paris", "Europe/Paris"),
("Europe/Podgorica", "Europe/Podgorica"),
("Europe/Prague", "Europe/Prague"),
("Europe/Riga", "Europe/Riga"),
("Europe/Rome", "Europe/Rome"),
("Europe/Samara", "Europe/Samara"),
("Europe/San_Marino", "Europe/San_Marino"),
("Europe/Sarajevo", "Europe/Sarajevo"),
("Europe/Saratov", "Europe/Saratov"),
("Europe/Simferopol", "Europe/Simferopol"),
("Europe/Skopje", "Europe/Skopje"),
("Europe/Sofia", "Europe/Sofia"),
("Europe/Stockholm", "Europe/Stockholm"),
("Europe/Tallinn", "Europe/Tallinn"),
("Europe/Tirane", "Europe/Tirane"),
("Europe/Ulyanovsk", "Europe/Ulyanovsk"),
("Europe/Vaduz", "Europe/Vaduz"),
("Europe/Vatican", "Europe/Vatican"),
("Europe/Vienna", "Europe/Vienna"),
("Europe/Vilnius", "Europe/Vilnius"),
("Europe/Volgograd", "Europe/Volgograd"),
("Europe/Warsaw", "Europe/Warsaw"),
("Europe/Zagreb", "Europe/Zagreb"),
("Europe/Zurich", "Europe/Zurich"),
("GMT", "GMT"),
("Indian/Antananarivo", "Indian/Antananarivo"),
("Indian/Chagos", "Indian/Chagos"),
("Indian/Christmas", "Indian/Christmas"),
("Indian/Cocos", "Indian/Cocos"),
("Indian/Comoro", "Indian/Comoro"),
("Indian/Kerguelen", "Indian/Kerguelen"),
("Indian/Mahe", "Indian/Mahe"),
("Indian/Maldives", "Indian/Maldives"),
("Indian/Mauritius", "Indian/Mauritius"),
("Indian/Mayotte", "Indian/Mayotte"),
("Indian/Reunion", "Indian/Reunion"),
("Pacific/Apia", "Pacific/Apia"),
("Pacific/Auckland", "Pacific/Auckland"),
("Pacific/Bougainville", "Pacific/Bougainville"),
("Pacific/Chatham", "Pacific/Chatham"),
("Pacific/Chuuk", "Pacific/Chuuk"),
("Pacific/Easter", "Pacific/Easter"),
("Pacific/Efate", "Pacific/Efate"),
("Pacific/Fakaofo", "Pacific/Fakaofo"),
("Pacific/Fiji", "Pacific/Fiji"),
("Pacific/Funafuti", "Pacific/Funafuti"),
("Pacific/Galapagos", "Pacific/Galapagos"),
("Pacific/Gambier", "Pacific/Gambier"),
("Pacific/Guadalcanal", "Pacific/Guadalcanal"),
("Pacific/Guam", "Pacific/Guam"),
("Pacific/Honolulu", "Pacific/Honolulu"),
("Pacific/Kanton", "Pacific/Kanton"),
("Pacific/Kiritimati", "Pacific/Kiritimati"),
("Pacific/Kosrae", "Pacific/Kosrae"),
("Pacific/Kwajalein", "Pacific/Kwajalein"),
("Pacific/Majuro", "Pacific/Majuro"),
("Pacific/Marquesas", "Pacific/Marquesas"),
("Pacific/Midway", "Pacific/Midway"),
("Pacific/Nauru", "Pacific/Nauru"),
("Pacific/Niue", "Pacific/Niue"),
("Pacific/Norfolk", "Pacific/Norfolk"),
("Pacific/Noumea", "Pacific/Noumea"),
("Pacific/Pago_Pago", "Pacific/Pago_Pago"),
("Pacific/Palau", "Pacific/Palau"),
("Pacific/Pitcairn", "Pacific/Pitcairn"),
("Pacific/Pohnpei", "Pacific/Pohnpei"),
("Pacific/Port_Moresby", "Pacific/Port_Moresby"),
("Pacific/Rarotonga", "Pacific/Rarotonga"),
("Pacific/Saipan", "Pacific/Saipan"),
("Pacific/Tahiti", "Pacific/Tahiti"),
("Pacific/Tarawa", "Pacific/Tarawa"),
("Pacific/Tongatapu", "Pacific/Tongatapu"),
("Pacific/Wake", "Pacific/Wake"),
("Pacific/Wallis", "Pacific/Wallis"),
("US/Alaska", "US/Alaska"),
("US/Arizona", "US/Arizona"),
("US/Central", "US/Central"),
("US/Eastern", "US/Eastern"),
("US/Hawaii", "US/Hawaii"),
("US/Mountain", "US/Mountain"),
("US/Pacific", "US/Pacific"),
("UTC", "UTC"),
],
default="auto",
max_length=50,
verbose_name="Time Zone",
),
),
]

File diff suppressed because one or more lines are too long

View File

@@ -2,11 +2,449 @@ import pytz
from django.conf import settings
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AbstractUser, Group
from django.core.validators import MaxValueValidator, MinValueValidator
from django.db import models
from django.utils.translation import gettext_lazy as _
from apps.users.managers import UserManager
timezones = [
("auto", _("Auto")),
("Africa/Abidjan", "Africa/Abidjan"),
("Africa/Accra", "Africa/Accra"),
("Africa/Addis_Ababa", "Africa/Addis_Ababa"),
("Africa/Algiers", "Africa/Algiers"),
("Africa/Asmara", "Africa/Asmara"),
("Africa/Bamako", "Africa/Bamako"),
("Africa/Bangui", "Africa/Bangui"),
("Africa/Banjul", "Africa/Banjul"),
("Africa/Bissau", "Africa/Bissau"),
("Africa/Blantyre", "Africa/Blantyre"),
("Africa/Brazzaville", "Africa/Brazzaville"),
("Africa/Bujumbura", "Africa/Bujumbura"),
("Africa/Cairo", "Africa/Cairo"),
("Africa/Casablanca", "Africa/Casablanca"),
("Africa/Ceuta", "Africa/Ceuta"),
("Africa/Conakry", "Africa/Conakry"),
("Africa/Dakar", "Africa/Dakar"),
("Africa/Dar_es_Salaam", "Africa/Dar_es_Salaam"),
("Africa/Djibouti", "Africa/Djibouti"),
("Africa/Douala", "Africa/Douala"),
("Africa/El_Aaiun", "Africa/El_Aaiun"),
("Africa/Freetown", "Africa/Freetown"),
("Africa/Gaborone", "Africa/Gaborone"),
("Africa/Harare", "Africa/Harare"),
("Africa/Johannesburg", "Africa/Johannesburg"),
("Africa/Juba", "Africa/Juba"),
("Africa/Kampala", "Africa/Kampala"),
("Africa/Khartoum", "Africa/Khartoum"),
("Africa/Kigali", "Africa/Kigali"),
("Africa/Kinshasa", "Africa/Kinshasa"),
("Africa/Lagos", "Africa/Lagos"),
("Africa/Libreville", "Africa/Libreville"),
("Africa/Lome", "Africa/Lome"),
("Africa/Luanda", "Africa/Luanda"),
("Africa/Lubumbashi", "Africa/Lubumbashi"),
("Africa/Lusaka", "Africa/Lusaka"),
("Africa/Malabo", "Africa/Malabo"),
("Africa/Maputo", "Africa/Maputo"),
("Africa/Maseru", "Africa/Maseru"),
("Africa/Mbabane", "Africa/Mbabane"),
("Africa/Mogadishu", "Africa/Mogadishu"),
("Africa/Monrovia", "Africa/Monrovia"),
("Africa/Nairobi", "Africa/Nairobi"),
("Africa/Ndjamena", "Africa/Ndjamena"),
("Africa/Niamey", "Africa/Niamey"),
("Africa/Nouakchott", "Africa/Nouakchott"),
("Africa/Ouagadougou", "Africa/Ouagadougou"),
("Africa/Porto-Novo", "Africa/Porto-Novo"),
("Africa/Sao_Tome", "Africa/Sao_Tome"),
("Africa/Tripoli", "Africa/Tripoli"),
("Africa/Tunis", "Africa/Tunis"),
("Africa/Windhoek", "Africa/Windhoek"),
("America/Adak", "America/Adak"),
("America/Anchorage", "America/Anchorage"),
("America/Anguilla", "America/Anguilla"),
("America/Antigua", "America/Antigua"),
("America/Araguaina", "America/Araguaina"),
("America/Argentina/Buenos_Aires", "America/Argentina/Buenos_Aires"),
("America/Argentina/Catamarca", "America/Argentina/Catamarca"),
("America/Argentina/Cordoba", "America/Argentina/Cordoba"),
("America/Argentina/Jujuy", "America/Argentina/Jujuy"),
("America/Argentina/La_Rioja", "America/Argentina/La_Rioja"),
("America/Argentina/Mendoza", "America/Argentina/Mendoza"),
("America/Argentina/Rio_Gallegos", "America/Argentina/Rio_Gallegos"),
("America/Argentina/Salta", "America/Argentina/Salta"),
("America/Argentina/San_Juan", "America/Argentina/San_Juan"),
("America/Argentina/San_Luis", "America/Argentina/San_Luis"),
("America/Argentina/Tucuman", "America/Argentina/Tucuman"),
("America/Argentina/Ushuaia", "America/Argentina/Ushuaia"),
("America/Aruba", "America/Aruba"),
("America/Asuncion", "America/Asuncion"),
("America/Atikokan", "America/Atikokan"),
("America/Bahia", "America/Bahia"),
("America/Bahia_Banderas", "America/Bahia_Banderas"),
("America/Barbados", "America/Barbados"),
("America/Belem", "America/Belem"),
("America/Belize", "America/Belize"),
("America/Blanc-Sablon", "America/Blanc-Sablon"),
("America/Boa_Vista", "America/Boa_Vista"),
("America/Bogota", "America/Bogota"),
("America/Boise", "America/Boise"),
("America/Cambridge_Bay", "America/Cambridge_Bay"),
("America/Campo_Grande", "America/Campo_Grande"),
("America/Cancun", "America/Cancun"),
("America/Caracas", "America/Caracas"),
("America/Cayenne", "America/Cayenne"),
("America/Cayman", "America/Cayman"),
("America/Chicago", "America/Chicago"),
("America/Chihuahua", "America/Chihuahua"),
("America/Ciudad_Juarez", "America/Ciudad_Juarez"),
("America/Costa_Rica", "America/Costa_Rica"),
("America/Coyhaique", "America/Coyhaique"),
("America/Creston", "America/Creston"),
("America/Cuiaba", "America/Cuiaba"),
("America/Curacao", "America/Curacao"),
("America/Danmarkshavn", "America/Danmarkshavn"),
("America/Dawson", "America/Dawson"),
("America/Dawson_Creek", "America/Dawson_Creek"),
("America/Denver", "America/Denver"),
("America/Detroit", "America/Detroit"),
("America/Dominica", "America/Dominica"),
("America/Edmonton", "America/Edmonton"),
("America/Eirunepe", "America/Eirunepe"),
("America/El_Salvador", "America/El_Salvador"),
("America/Fort_Nelson", "America/Fort_Nelson"),
("America/Fortaleza", "America/Fortaleza"),
("America/Glace_Bay", "America/Glace_Bay"),
("America/Goose_Bay", "America/Goose_Bay"),
("America/Grand_Turk", "America/Grand_Turk"),
("America/Grenada", "America/Grenada"),
("America/Guadeloupe", "America/Guadeloupe"),
("America/Guatemala", "America/Guatemala"),
("America/Guayaquil", "America/Guayaquil"),
("America/Guyana", "America/Guyana"),
("America/Halifax", "America/Halifax"),
("America/Havana", "America/Havana"),
("America/Hermosillo", "America/Hermosillo"),
("America/Indiana/Indianapolis", "America/Indiana/Indianapolis"),
("America/Indiana/Knox", "America/Indiana/Knox"),
("America/Indiana/Marengo", "America/Indiana/Marengo"),
("America/Indiana/Petersburg", "America/Indiana/Petersburg"),
("America/Indiana/Tell_City", "America/Indiana/Tell_City"),
("America/Indiana/Vevay", "America/Indiana/Vevay"),
("America/Indiana/Vincennes", "America/Indiana/Vincennes"),
("America/Indiana/Winamac", "America/Indiana/Winamac"),
("America/Inuvik", "America/Inuvik"),
("America/Iqaluit", "America/Iqaluit"),
("America/Jamaica", "America/Jamaica"),
("America/Juneau", "America/Juneau"),
("America/Kentucky/Louisville", "America/Kentucky/Louisville"),
("America/Kentucky/Monticello", "America/Kentucky/Monticello"),
("America/Kralendijk", "America/Kralendijk"),
("America/La_Paz", "America/La_Paz"),
("America/Lima", "America/Lima"),
("America/Los_Angeles", "America/Los_Angeles"),
("America/Lower_Princes", "America/Lower_Princes"),
("America/Maceio", "America/Maceio"),
("America/Managua", "America/Managua"),
("America/Manaus", "America/Manaus"),
("America/Marigot", "America/Marigot"),
("America/Martinique", "America/Martinique"),
("America/Matamoros", "America/Matamoros"),
("America/Mazatlan", "America/Mazatlan"),
("America/Menominee", "America/Menominee"),
("America/Merida", "America/Merida"),
("America/Metlakatla", "America/Metlakatla"),
("America/Mexico_City", "America/Mexico_City"),
("America/Miquelon", "America/Miquelon"),
("America/Moncton", "America/Moncton"),
("America/Monterrey", "America/Monterrey"),
("America/Montevideo", "America/Montevideo"),
("America/Montserrat", "America/Montserrat"),
("America/Nassau", "America/Nassau"),
("America/New_York", "America/New_York"),
("America/Nome", "America/Nome"),
("America/Noronha", "America/Noronha"),
("America/North_Dakota/Beulah", "America/North_Dakota/Beulah"),
("America/North_Dakota/Center", "America/North_Dakota/Center"),
("America/North_Dakota/New_Salem", "America/North_Dakota/New_Salem"),
("America/Nuuk", "America/Nuuk"),
("America/Ojinaga", "America/Ojinaga"),
("America/Panama", "America/Panama"),
("America/Paramaribo", "America/Paramaribo"),
("America/Phoenix", "America/Phoenix"),
("America/Port-au-Prince", "America/Port-au-Prince"),
("America/Port_of_Spain", "America/Port_of_Spain"),
("America/Porto_Velho", "America/Porto_Velho"),
("America/Puerto_Rico", "America/Puerto_Rico"),
("America/Punta_Arenas", "America/Punta_Arenas"),
("America/Rankin_Inlet", "America/Rankin_Inlet"),
("America/Recife", "America/Recife"),
("America/Regina", "America/Regina"),
("America/Resolute", "America/Resolute"),
("America/Rio_Branco", "America/Rio_Branco"),
("America/Santarem", "America/Santarem"),
("America/Santiago", "America/Santiago"),
("America/Santo_Domingo", "America/Santo_Domingo"),
("America/Sao_Paulo", "America/Sao_Paulo"),
("America/Scoresbysund", "America/Scoresbysund"),
("America/Sitka", "America/Sitka"),
("America/St_Barthelemy", "America/St_Barthelemy"),
("America/St_Johns", "America/St_Johns"),
("America/St_Kitts", "America/St_Kitts"),
("America/St_Lucia", "America/St_Lucia"),
("America/St_Thomas", "America/St_Thomas"),
("America/St_Vincent", "America/St_Vincent"),
("America/Swift_Current", "America/Swift_Current"),
("America/Tegucigalpa", "America/Tegucigalpa"),
("America/Thule", "America/Thule"),
("America/Tijuana", "America/Tijuana"),
("America/Toronto", "America/Toronto"),
("America/Tortola", "America/Tortola"),
("America/Vancouver", "America/Vancouver"),
("America/Whitehorse", "America/Whitehorse"),
("America/Winnipeg", "America/Winnipeg"),
("America/Yakutat", "America/Yakutat"),
("Antarctica/Casey", "Antarctica/Casey"),
("Antarctica/Davis", "Antarctica/Davis"),
("Antarctica/DumontDUrville", "Antarctica/DumontDUrville"),
("Antarctica/Macquarie", "Antarctica/Macquarie"),
("Antarctica/Mawson", "Antarctica/Mawson"),
("Antarctica/McMurdo", "Antarctica/McMurdo"),
("Antarctica/Palmer", "Antarctica/Palmer"),
("Antarctica/Rothera", "Antarctica/Rothera"),
("Antarctica/Syowa", "Antarctica/Syowa"),
("Antarctica/Troll", "Antarctica/Troll"),
("Antarctica/Vostok", "Antarctica/Vostok"),
("Arctic/Longyearbyen", "Arctic/Longyearbyen"),
("Asia/Aden", "Asia/Aden"),
("Asia/Almaty", "Asia/Almaty"),
("Asia/Amman", "Asia/Amman"),
("Asia/Anadyr", "Asia/Anadyr"),
("Asia/Aqtau", "Asia/Aqtau"),
("Asia/Aqtobe", "Asia/Aqtobe"),
("Asia/Ashgabat", "Asia/Ashgabat"),
("Asia/Atyrau", "Asia/Atyrau"),
("Asia/Baghdad", "Asia/Baghdad"),
("Asia/Bahrain", "Asia/Bahrain"),
("Asia/Baku", "Asia/Baku"),
("Asia/Bangkok", "Asia/Bangkok"),
("Asia/Barnaul", "Asia/Barnaul"),
("Asia/Beirut", "Asia/Beirut"),
("Asia/Bishkek", "Asia/Bishkek"),
("Asia/Brunei", "Asia/Brunei"),
("Asia/Chita", "Asia/Chita"),
("Asia/Colombo", "Asia/Colombo"),
("Asia/Damascus", "Asia/Damascus"),
("Asia/Dhaka", "Asia/Dhaka"),
("Asia/Dili", "Asia/Dili"),
("Asia/Dubai", "Asia/Dubai"),
("Asia/Dushanbe", "Asia/Dushanbe"),
("Asia/Famagusta", "Asia/Famagusta"),
("Asia/Gaza", "Asia/Gaza"),
("Asia/Hebron", "Asia/Hebron"),
("Asia/Ho_Chi_Minh", "Asia/Ho_Chi_Minh"),
("Asia/Hong_Kong", "Asia/Hong_Kong"),
("Asia/Hovd", "Asia/Hovd"),
("Asia/Irkutsk", "Asia/Irkutsk"),
("Asia/Jakarta", "Asia/Jakarta"),
("Asia/Jayapura", "Asia/Jayapura"),
("Asia/Jerusalem", "Asia/Jerusalem"),
("Asia/Kabul", "Asia/Kabul"),
("Asia/Kamchatka", "Asia/Kamchatka"),
("Asia/Karachi", "Asia/Karachi"),
("Asia/Kathmandu", "Asia/Kathmandu"),
("Asia/Khandyga", "Asia/Khandyga"),
("Asia/Kolkata", "Asia/Kolkata"),
("Asia/Krasnoyarsk", "Asia/Krasnoyarsk"),
("Asia/Kuala_Lumpur", "Asia/Kuala_Lumpur"),
("Asia/Kuching", "Asia/Kuching"),
("Asia/Kuwait", "Asia/Kuwait"),
("Asia/Macau", "Asia/Macau"),
("Asia/Magadan", "Asia/Magadan"),
("Asia/Makassar", "Asia/Makassar"),
("Asia/Manila", "Asia/Manila"),
("Asia/Muscat", "Asia/Muscat"),
("Asia/Nicosia", "Asia/Nicosia"),
("Asia/Novokuznetsk", "Asia/Novokuznetsk"),
("Asia/Novosibirsk", "Asia/Novosibirsk"),
("Asia/Omsk", "Asia/Omsk"),
("Asia/Oral", "Asia/Oral"),
("Asia/Phnom_Penh", "Asia/Phnom_Penh"),
("Asia/Pontianak", "Asia/Pontianak"),
("Asia/Pyongyang", "Asia/Pyongyang"),
("Asia/Qatar", "Asia/Qatar"),
("Asia/Qostanay", "Asia/Qostanay"),
("Asia/Qyzylorda", "Asia/Qyzylorda"),
("Asia/Riyadh", "Asia/Riyadh"),
("Asia/Sakhalin", "Asia/Sakhalin"),
("Asia/Samarkand", "Asia/Samarkand"),
("Asia/Seoul", "Asia/Seoul"),
("Asia/Shanghai", "Asia/Shanghai"),
("Asia/Singapore", "Asia/Singapore"),
("Asia/Srednekolymsk", "Asia/Srednekolymsk"),
("Asia/Taipei", "Asia/Taipei"),
("Asia/Tashkent", "Asia/Tashkent"),
("Asia/Tbilisi", "Asia/Tbilisi"),
("Asia/Tehran", "Asia/Tehran"),
("Asia/Thimphu", "Asia/Thimphu"),
("Asia/Tokyo", "Asia/Tokyo"),
("Asia/Tomsk", "Asia/Tomsk"),
("Asia/Ulaanbaatar", "Asia/Ulaanbaatar"),
("Asia/Urumqi", "Asia/Urumqi"),
("Asia/Ust-Nera", "Asia/Ust-Nera"),
("Asia/Vientiane", "Asia/Vientiane"),
("Asia/Vladivostok", "Asia/Vladivostok"),
("Asia/Yakutsk", "Asia/Yakutsk"),
("Asia/Yangon", "Asia/Yangon"),
("Asia/Yekaterinburg", "Asia/Yekaterinburg"),
("Asia/Yerevan", "Asia/Yerevan"),
("Atlantic/Azores", "Atlantic/Azores"),
("Atlantic/Bermuda", "Atlantic/Bermuda"),
("Atlantic/Canary", "Atlantic/Canary"),
("Atlantic/Cape_Verde", "Atlantic/Cape_Verde"),
("Atlantic/Faroe", "Atlantic/Faroe"),
("Atlantic/Madeira", "Atlantic/Madeira"),
("Atlantic/Reykjavik", "Atlantic/Reykjavik"),
("Atlantic/South_Georgia", "Atlantic/South_Georgia"),
("Atlantic/St_Helena", "Atlantic/St_Helena"),
("Atlantic/Stanley", "Atlantic/Stanley"),
("Australia/Adelaide", "Australia/Adelaide"),
("Australia/Brisbane", "Australia/Brisbane"),
("Australia/Broken_Hill", "Australia/Broken_Hill"),
("Australia/Darwin", "Australia/Darwin"),
("Australia/Eucla", "Australia/Eucla"),
("Australia/Hobart", "Australia/Hobart"),
("Australia/Lindeman", "Australia/Lindeman"),
("Australia/Lord_Howe", "Australia/Lord_Howe"),
("Australia/Melbourne", "Australia/Melbourne"),
("Australia/Perth", "Australia/Perth"),
("Australia/Sydney", "Australia/Sydney"),
("Canada/Atlantic", "Canada/Atlantic"),
("Canada/Central", "Canada/Central"),
("Canada/Eastern", "Canada/Eastern"),
("Canada/Mountain", "Canada/Mountain"),
("Canada/Newfoundland", "Canada/Newfoundland"),
("Canada/Pacific", "Canada/Pacific"),
("Europe/Amsterdam", "Europe/Amsterdam"),
("Europe/Andorra", "Europe/Andorra"),
("Europe/Astrakhan", "Europe/Astrakhan"),
("Europe/Athens", "Europe/Athens"),
("Europe/Belgrade", "Europe/Belgrade"),
("Europe/Berlin", "Europe/Berlin"),
("Europe/Bratislava", "Europe/Bratislava"),
("Europe/Brussels", "Europe/Brussels"),
("Europe/Bucharest", "Europe/Bucharest"),
("Europe/Budapest", "Europe/Budapest"),
("Europe/Busingen", "Europe/Busingen"),
("Europe/Chisinau", "Europe/Chisinau"),
("Europe/Copenhagen", "Europe/Copenhagen"),
("Europe/Dublin", "Europe/Dublin"),
("Europe/Gibraltar", "Europe/Gibraltar"),
("Europe/Guernsey", "Europe/Guernsey"),
("Europe/Helsinki", "Europe/Helsinki"),
("Europe/Isle_of_Man", "Europe/Isle_of_Man"),
("Europe/Istanbul", "Europe/Istanbul"),
("Europe/Jersey", "Europe/Jersey"),
("Europe/Kaliningrad", "Europe/Kaliningrad"),
("Europe/Kirov", "Europe/Kirov"),
("Europe/Kyiv", "Europe/Kyiv"),
("Europe/Lisbon", "Europe/Lisbon"),
("Europe/Ljubljana", "Europe/Ljubljana"),
("Europe/London", "Europe/London"),
("Europe/Luxembourg", "Europe/Luxembourg"),
("Europe/Madrid", "Europe/Madrid"),
("Europe/Malta", "Europe/Malta"),
("Europe/Mariehamn", "Europe/Mariehamn"),
("Europe/Minsk", "Europe/Minsk"),
("Europe/Monaco", "Europe/Monaco"),
("Europe/Moscow", "Europe/Moscow"),
("Europe/Oslo", "Europe/Oslo"),
("Europe/Paris", "Europe/Paris"),
("Europe/Podgorica", "Europe/Podgorica"),
("Europe/Prague", "Europe/Prague"),
("Europe/Riga", "Europe/Riga"),
("Europe/Rome", "Europe/Rome"),
("Europe/Samara", "Europe/Samara"),
("Europe/San_Marino", "Europe/San_Marino"),
("Europe/Sarajevo", "Europe/Sarajevo"),
("Europe/Saratov", "Europe/Saratov"),
("Europe/Simferopol", "Europe/Simferopol"),
("Europe/Skopje", "Europe/Skopje"),
("Europe/Sofia", "Europe/Sofia"),
("Europe/Stockholm", "Europe/Stockholm"),
("Europe/Tallinn", "Europe/Tallinn"),
("Europe/Tirane", "Europe/Tirane"),
("Europe/Ulyanovsk", "Europe/Ulyanovsk"),
("Europe/Vaduz", "Europe/Vaduz"),
("Europe/Vatican", "Europe/Vatican"),
("Europe/Vienna", "Europe/Vienna"),
("Europe/Vilnius", "Europe/Vilnius"),
("Europe/Volgograd", "Europe/Volgograd"),
("Europe/Warsaw", "Europe/Warsaw"),
("Europe/Zagreb", "Europe/Zagreb"),
("Europe/Zurich", "Europe/Zurich"),
("GMT", "GMT"),
("Indian/Antananarivo", "Indian/Antananarivo"),
("Indian/Chagos", "Indian/Chagos"),
("Indian/Christmas", "Indian/Christmas"),
("Indian/Cocos", "Indian/Cocos"),
("Indian/Comoro", "Indian/Comoro"),
("Indian/Kerguelen", "Indian/Kerguelen"),
("Indian/Mahe", "Indian/Mahe"),
("Indian/Maldives", "Indian/Maldives"),
("Indian/Mauritius", "Indian/Mauritius"),
("Indian/Mayotte", "Indian/Mayotte"),
("Indian/Reunion", "Indian/Reunion"),
("Pacific/Apia", "Pacific/Apia"),
("Pacific/Auckland", "Pacific/Auckland"),
("Pacific/Bougainville", "Pacific/Bougainville"),
("Pacific/Chatham", "Pacific/Chatham"),
("Pacific/Chuuk", "Pacific/Chuuk"),
("Pacific/Easter", "Pacific/Easter"),
("Pacific/Efate", "Pacific/Efate"),
("Pacific/Fakaofo", "Pacific/Fakaofo"),
("Pacific/Fiji", "Pacific/Fiji"),
("Pacific/Funafuti", "Pacific/Funafuti"),
("Pacific/Galapagos", "Pacific/Galapagos"),
("Pacific/Gambier", "Pacific/Gambier"),
("Pacific/Guadalcanal", "Pacific/Guadalcanal"),
("P2025-06-29T01:43:14.671389745Z acific/Guam", "Pacific/Guam"),
("Pacific/Honolulu", "Pacific/Honolulu"),
("Pacific/Kanton", "Pacific/Kanton"),
("Pacific/Kiritimati", "Pacific/Kiritimati"),
("Pacific/Kosrae", "Pacific/Kosrae"),
("Pacific/Kwajalein", "Pacific/Kwajalein"),
("Pacific/Majuro", "Pacific/Majuro"),
("Pacific/Marquesas", "Pacific/Marquesas"),
("Pacific/Midway", "Pacific/Midway"),
("Pacific/Nauru", "Pacific/Nauru"),
("Pacific/Niue", "Pacific/Niue"),
("Pacific/Norfolk", "Pacific/Norfolk"),
("Pacific/Noumea", "Pacific/Noumea"),
("Pacific/Pago_Pago", "Pacific/Pago_Pago"),
("Pacific/Palau", "Pacific/Palau"),
("Pacific/Pitcairn", "Pacific/Pitcairn"),
("Pacific/Pohnpei", "Pacific/Pohnpei"),
("Pacific/Port_Moresby", "Pacific/Port_Moresby"),
("Pacific/Rarotonga", "Pacific/Rarotonga"),
("Pacific/Saipan", "Pacific/Saipan"),
("Pacific/Tahiti", "Pacific/Tahiti"),
("Pacific/Tarawa", "Pacific/Tarawa"),
("Pacific/Tongatapu", "Pacific/Tongatapu"),
("Pacific/Wake", "Pacific/Wake"),
("Pacific/Wallis", "Pacific/Wallis"),
("US/Alaska", "US/Alaska"),
("US/Arizona", "US/Arizona"),
("US/Central", "US/Central"),
("US/Eastern", "US/Eastern"),
("US/Hawaii", "US/Hawaii"),
("US/Mountain", "US/Mountain"),
("US/Pacific", "US/Pacific"),
("UTC", "UTC"),
]
class User(AbstractUser):
username = None
@@ -36,6 +474,11 @@ class UserSettings(models.Model):
)
hide_amounts = models.BooleanField(default=False)
mute_sounds = models.BooleanField(default=False)
volume = models.PositiveIntegerField(
default=10,
validators=[MinValueValidator(1), MaxValueValidator(10)],
verbose_name=_("Volume"),
)
date_format = models.CharField(
max_length=100, default="SHORT_DATE_FORMAT", verbose_name=_("Date Format")
@@ -57,7 +500,7 @@ class UserSettings(models.Model):
)
timezone = models.CharField(
max_length=50,
choices=[("auto", _("Auto"))] + [(tz, tz) for tz in pytz.common_timezones],
choices=timezones,
default="auto",
verbose_name=_("Time Zone"),
)

View File

@@ -75,7 +75,7 @@ def yearly_overview_by_currency(request, year: int):
transactions = (
Transaction.objects.filter(**filter_params)
.exclude(Q(category__mute=True) & ~Q(category=None))
.exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
.order_by("account__currency__name")
)
@@ -141,7 +141,7 @@ def yearly_overview_by_account(request, year: int):
transactions = (
Transaction.objects.filter(**filter_params)
.exclude(Q(category__mute=True) & ~Q(category=None))
.exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
.order_by(
"account__group__name",
"account__name",

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-06-20 05:07+0000\n"
"POT-Creation-Date: 2025-07-19 19:24+0000\n"
"PO-Revision-Date: 2025-05-23 17:16+0000\n"
"Last-Translator: JHoh <jean-luc.hoh@gmx.de>\n"
"Language-Team: German <https://translations.herculino.com/projects/wygiwyh/"
@@ -28,11 +28,11 @@ msgstr "Gruppe Name"
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
#: apps/transactions/forms.py:776 apps/transactions/forms.py:819
#: apps/transactions/forms.py:851 apps/transactions/forms.py:886
#: apps/transactions/forms.py:1038 apps/users/forms.py:210
#: apps/users/forms.py:372
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:783 apps/transactions/forms.py:826
#: apps/transactions/forms.py:858 apps/transactions/forms.py:893
#: apps/transactions/forms.py:1045 apps/users/forms.py:215
#: apps/users/forms.py:377
msgid "Update"
msgstr "Aktualisierung"
@@ -42,10 +42,10 @@ msgstr "Aktualisierung"
#: 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:378 apps/transactions/forms.py:784
#: apps/transactions/forms.py:827 apps/transactions/forms.py:859
#: apps/transactions/forms.py:894 apps/transactions/forms.py:1046
#: apps/users/forms.py:218 apps/users/forms.py:380
#: apps/transactions/forms.py:383 apps/transactions/forms.py:791
#: apps/transactions/forms.py:834 apps/transactions/forms.py:866
#: apps/transactions/forms.py:901 apps/transactions/forms.py:1053
#: apps/users/forms.py:223 apps/users/forms.py:385
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -78,10 +78,10 @@ msgstr "Neuer Saldo"
#: 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:450 apps/transactions/forms.py:457
#: apps/transactions/forms.py:657 apps/transactions/forms.py:918
#: apps/transactions/models.py:317 apps/transactions/models.py:500
#: apps/transactions/models.py:700 apps/transactions/models.py:936
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
#: apps/transactions/forms.py:664 apps/transactions/forms.py:925
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:938
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
msgid "Category"
@@ -92,10 +92,10 @@ msgstr "Kategorie"
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
#: apps/transactions/forms.py:650 apps/transactions/forms.py:911
#: apps/transactions/models.py:323 apps/transactions/models.py:502
#: apps/transactions/models.py:704 apps/transactions/models.py:942
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:657 apps/transactions/forms.py:918
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:944
#: templates/includes/navbar.html:110
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
@@ -105,7 +105,7 @@ msgstr "Tags"
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:210 apps/transactions/models.py:235
#: apps/transactions/models.py:259 apps/transactions/models.py:905
#: apps/transactions/models.py:259 apps/transactions/models.py:906
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -172,9 +172,9 @@ msgstr ""
#: apps/accounts/models.py:70 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:642 apps/transactions/forms.py:903
#: apps/transactions/models.py:290 apps/transactions/models.py:460
#: apps/transactions/models.py:682 apps/transactions/models.py:911
#: apps/transactions/forms.py:649 apps/transactions/forms.py:910
#: apps/transactions/models.py:290 apps/transactions/models.py:461
#: apps/transactions/models.py:683 apps/transactions/models.py:912
msgid "Account"
msgstr "Konto"
@@ -338,7 +338,7 @@ msgstr ""
"Privat: Nur für den Besitzer und geteilte Nutzer sichtbar.<br/>Öffentlich: "
"Sichtbar für alle Nutzer. Nur bearbeitbar durch Besitzer."
#: apps/common/forms.py:80 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:140
msgid "Save"
msgstr "Speichern"
@@ -437,12 +437,12 @@ msgstr "Info"
msgid "Cache cleared successfully"
msgstr "Cache erfolgreich geleert"
#: apps/common/widgets/datepicker.py:53 apps/common/widgets/datepicker.py:206
#: apps/common/widgets/datepicker.py:264
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
msgid "Today"
msgstr "Heute"
#: apps/common/widgets/datepicker.py:139
#: apps/common/widgets/datepicker.py:141
msgid "Now"
msgstr "Jetzt"
@@ -471,7 +471,7 @@ msgstr "Suffix"
#: apps/currencies/forms.py:69 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:478
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
#: apps/transactions/models.py:300
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
@@ -682,11 +682,11 @@ msgstr "Dienst erfolgreich in die Warteschlange eingereiht"
msgid "Create transaction"
msgstr "Erstelle Transaktion"
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
msgid "From Account"
msgstr "Startkonto"
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
msgid "To Account"
msgstr "Zielkonto"
@@ -713,7 +713,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:592
#: apps/dca/forms.py:312 apps/transactions/forms.py:597
msgid "From and To accounts must be different."
msgstr "Start- und Zielkonten müssen unterschiedlich sein."
@@ -732,9 +732,9 @@ 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:494 apps/transactions/models.py:313
#: apps/transactions/models.py:509 apps/transactions/models.py:710
#: apps/transactions/models.py:932
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
#: apps/transactions/models.py:510 apps/transactions/models.py:711
#: apps/transactions/models.py:934
msgid "Notes"
msgstr "Notizen"
@@ -797,7 +797,7 @@ msgid "Users"
msgstr "Nutzer"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:374 templates/includes/navbar.html:57
#: apps/transactions/models.py:375 templates/includes/navbar.html:57
#: templates/includes/navbar.html:106
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -815,23 +815,23 @@ 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:81
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:665 apps/transactions/forms.py:926
#: apps/transactions/models.py:273 apps/transactions/models.py:328
#: apps/transactions/models.py:505 apps/transactions/models.py:707
#: apps/transactions/models.py:947 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:672 apps/transactions/forms.py:933
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:949 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:112
msgid "Entities"
msgstr "Entitäten"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:744 templates/includes/navbar.html:76
#: apps/transactions/models.py:745 templates/includes/navbar.html:76
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr "Wiederkehrende Transaktionen"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:523 templates/includes/navbar.html:74
#: apps/transactions/models.py:524 templates/includes/navbar.html:74
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -849,7 +849,7 @@ msgstr "Automatische Umrechnungskurse"
msgid "Rules"
msgstr "Regeln"
#: apps/export_app/forms.py:86 templates/cotton/transaction/item.html:57
#: apps/export_app/forms.py:86 templates/cotton/transaction/item.html:55
msgid "DCA"
msgstr "DCA"
@@ -884,7 +884,7 @@ msgstr "Aktion der Transaktions-Regel bearbeiten"
msgid "Update or create transaction actions"
msgstr "Aktualisierung oder Erstellung von Transaktions-Aktionen"
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:159
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -1071,16 +1071,16 @@ msgstr "Bediener"
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:297
#: apps/transactions/models.py:465 apps/transactions/models.py:688
#: apps/transactions/models.py:918
#: apps/transactions/models.py:466 apps/transactions/models.py:689
#: apps/transactions/models.py:919
msgid "Type"
msgstr "Typ"
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:299 apps/transactions/models.py:920
#: templates/cotton/transaction/item.html:22
#: templates/cotton/transaction/item.html:32
#: apps/transactions/models.py:299 apps/transactions/models.py:921
#: templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
msgid "Paid"
@@ -1088,34 +1088,34 @@ 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:481 apps/transactions/forms.py:671
#: apps/transactions/models.py:301 apps/transactions/models.py:483
#: apps/transactions/models.py:712
#: apps/transactions/forms.py:486 apps/transactions/forms.py:678
#: apps/transactions/models.py:301 apps/transactions/models.py:484
#: apps/transactions/models.py:713
msgid "Reference Date"
msgstr "Referenzdatum"
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:306
#: apps/transactions/models.py:693 apps/transactions/models.py:925
#: apps/rules/models.py:262 apps/transactions/models.py:307
#: apps/transactions/models.py:694 apps/transactions/models.py:927
#: templates/insights/fragments/sankey.html:95
msgid "Amount"
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:485 apps/transactions/models.py:311
#: apps/transactions/models.py:467 apps/transactions/models.py:696
#: apps/transactions/models.py:930
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
#: apps/transactions/models.py:468 apps/transactions/models.py:697
#: apps/transactions/models.py:932
msgid "Description"
msgstr "Beschreibung"
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:350 apps/transactions/models.py:952
#: apps/transactions/models.py:351 apps/transactions/models.py:954
msgid "Internal Note"
msgstr "Interne Notiz"
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:352 apps/transactions/models.py:954
#: apps/transactions/models.py:353 apps/transactions/models.py:956
msgid "Internal ID"
msgstr "Interne ID"
@@ -1248,8 +1248,8 @@ msgid "Update or Create Transaction action deleted successfully"
msgstr ""
"\"Transaktions-Aktualisierung oder -Erstellung\"-Aktion erfolgreich gelöscht"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:22
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:46
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1296,41 +1296,48 @@ msgstr "Speichern und ähnliches hinzufügen"
msgid "Save and add another"
msgstr "Speichern und etwas neu hinzufügen"
#: apps/transactions/forms.py:437
#: apps/transactions/forms.py:300
msgid "Muted transactions won't be displayed on monthly summaries"
msgstr ""
#: apps/transactions/forms.py:442
msgid "From Amount"
msgstr "Startbetrag"
#: apps/transactions/forms.py:442
#: apps/transactions/forms.py:447
msgid "To Amount"
msgstr "Zielbetrag"
#: apps/transactions/forms.py:559
#: apps/transactions/forms.py:564
#: templates/cotton/ui/quick_transactions_buttons.html:40
#: templates/cotton/ui/transactions_fab.html:44
msgid "Transfer"
msgstr "Transfer"
#: apps/transactions/forms.py:805
#: apps/transactions/forms.py:812
msgid "Tag name"
msgstr "Tagname"
#: apps/transactions/forms.py:837
#: apps/transactions/forms.py:844
msgid "Entity name"
msgstr "Entitätsname"
#: apps/transactions/forms.py:869
#: apps/transactions/forms.py:876
msgid "Category name"
msgstr "Kategoriename"
#: apps/transactions/forms.py:871
msgid "Muted categories won't count towards your monthly total"
#: apps/transactions/forms.py:878
#, 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:1057
#: apps/transactions/forms.py:1064
msgid "End date should be after the start date"
msgstr "Enddatum sollte hinter dem Startdatum liegen"
#: apps/transactions/models.py:211
#: apps/transactions/models.py:211 apps/transactions/models.py:302
#: apps/transactions/models.py:922
msgid "Mute"
msgstr "Deaktivieren"
@@ -1373,7 +1380,7 @@ msgstr ""
msgid "Entity"
msgstr "Entität"
#: apps/transactions/models.py:284 apps/transactions/models.py:898
#: apps/transactions/models.py:284 apps/transactions/models.py:899
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1385,7 +1392,7 @@ msgstr "Entität"
msgid "Income"
msgstr "Einnahme"
#: apps/transactions/models.py:285 apps/transactions/models.py:899
#: apps/transactions/models.py:285 apps/transactions/models.py:900
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1396,136 +1403,141 @@ msgstr "Einnahme"
msgid "Expense"
msgstr "Ausgabe"
#: apps/transactions/models.py:339 apps/transactions/models.py:522
#: apps/transactions/models.py:340 apps/transactions/models.py:523
msgid "Installment Plan"
msgstr "Ratenzahlungs-Plan"
#: apps/transactions/models.py:348 apps/transactions/models.py:743
#: apps/transactions/models.py:349 apps/transactions/models.py:744
msgid "Recurring Transaction"
msgstr "Wiederkehrende Transaktion"
#: apps/transactions/models.py:356
#: apps/transactions/models.py:357
msgid "Deleted"
msgstr "Gelöscht"
#: apps/transactions/models.py:361
#: apps/transactions/models.py:362
msgid "Deleted At"
msgstr "Gelöscht am"
#: apps/transactions/models.py:373
#: apps/transactions/models.py:374
msgid "Transaction"
msgstr "Transaktion"
#: apps/transactions/models.py:445 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:446 templates/tags/fragments/table.html:71
msgid "No tags"
msgstr "Keine Tags"
#: apps/transactions/models.py:446
#: apps/transactions/models.py:447
msgid "No category"
msgstr "Keine Kategorie"
#: apps/transactions/models.py:448
#: apps/transactions/models.py:449
msgid "No description"
msgstr "Keine Beschreibung"
#: apps/transactions/models.py:454
#: apps/transactions/models.py:455
msgid "Yearly"
msgstr "Jährlich"
#: apps/transactions/models.py:455 apps/users/models.py:26
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr "Monatlich"
#: apps/transactions/models.py:456
#: apps/transactions/models.py:457
msgid "Weekly"
msgstr "Wöchentlich"
#: apps/transactions/models.py:457
#: apps/transactions/models.py:458
msgid "Daily"
msgstr "Täglich"
#: apps/transactions/models.py:470
#: apps/transactions/models.py:471
msgid "Number of Installments"
msgstr "Anzahl von Ratenzahlungen"
#: apps/transactions/models.py:475
#: apps/transactions/models.py:476
msgid "Installment Start"
msgstr "Start der Ratenzahlung"
#: apps/transactions/models.py:476
#: apps/transactions/models.py:477
msgid "The installment number to start counting from"
msgstr ""
"Die Zahl mit der bei der Zählung der Ratenzahlungen begonnen werden soll"
#: apps/transactions/models.py:481 apps/transactions/models.py:716
#: apps/transactions/models.py:482 apps/transactions/models.py:717
msgid "Start Date"
msgstr "Startdatum"
#: apps/transactions/models.py:485 apps/transactions/models.py:717
#: apps/transactions/models.py:486 apps/transactions/models.py:718
msgid "End Date"
msgstr "Enddatum"
#: apps/transactions/models.py:490
#: apps/transactions/models.py:491
msgid "Recurrence"
msgstr "Regelmäßigkeit"
#: apps/transactions/models.py:493
#: apps/transactions/models.py:494
msgid "Installment Amount"
msgstr "Ratenzahlungs-Wert"
#: apps/transactions/models.py:512 apps/transactions/models.py:733
#: apps/transactions/models.py:513 apps/transactions/models.py:734
msgid "Add description to transactions"
msgstr "Beschreibung zu Transaktionen hinzufügen"
#: apps/transactions/models.py:515 apps/transactions/models.py:736
#: apps/transactions/models.py:516 apps/transactions/models.py:737
msgid "Add notes to transactions"
msgstr "Notizen zu Transaktionen hinzufügen"
#: apps/transactions/models.py:675
#: apps/transactions/models.py:676
msgid "day(s)"
msgstr "Tag(e)"
#: apps/transactions/models.py:676
#: apps/transactions/models.py:677
msgid "week(s)"
msgstr "Woche(n)"
#: apps/transactions/models.py:677
#: apps/transactions/models.py:678
msgid "month(s)"
msgstr "Monat(e)"
#: apps/transactions/models.py:678
#: apps/transactions/models.py:679
msgid "year(s)"
msgstr "Jahr(e)"
#: apps/transactions/models.py:680
#: apps/transactions/models.py:681
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr "Pausiert"
#: apps/transactions/models.py:719
#: apps/transactions/models.py:720
msgid "Recurrence Type"
msgstr "Regelmäßigkeit"
#: apps/transactions/models.py:722
#: apps/transactions/models.py:723
msgid "Recurrence Interval"
msgstr "Wiederholungsintervall"
#: apps/transactions/models.py:726
#: apps/transactions/models.py:727
msgid "Last Generated Date"
msgstr "Letztes generiertes Datum"
#: apps/transactions/models.py:729
#: apps/transactions/models.py:730
msgid "Last Generated Reference Date"
msgstr "Letztes generiertes Referenzdatum"
#: apps/transactions/models.py:964 templates/cotton/ui/transactions_fab.html:59
#: apps/transactions/models.py:966
#: apps/transactions/views/quick_transactions.py:177
#: apps/transactions/views/quick_transactions.py:186
#: apps/transactions/views/quick_transactions.py:188
#: apps/transactions/views/quick_transactions.py:190
#: templates/cotton/ui/transactions_fab.html:59
#, fuzzy
#| msgid "Edit Transaction"
msgid "Quick Transaction"
msgstr "Transaktion bearbeiten"
#: apps/transactions/models.py:965 templates/includes/navbar.html:72
#: apps/transactions/models.py:967 templates/includes/navbar.html:72
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
#, fuzzy
@@ -1618,7 +1630,8 @@ msgstr "Ratenzahlungs-Plan erfolgreich aktualisiert"
msgid "Installment Plan deleted successfully"
msgstr "Ratenzahlungs-Plan erfolgreich gelöscht"
#: apps/transactions/views/quick_transactions.py:45 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
#, fuzzy
#| msgid "Rule added successfully"
msgid "Item added successfully"
@@ -1636,7 +1649,7 @@ msgstr "Regel erfolgreich aktualisiert"
msgid "Item deleted successfully"
msgstr "Regel erfolgreich gelöscht"
#: apps/transactions/views/quick_transactions.py:145
#: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully"
@@ -1725,7 +1738,8 @@ msgstr "Berechtigungen"
msgid "Important dates"
msgstr "Wichtige Daten"
#: apps/users/forms.py:23 apps/users/models.py:13 templates/users/login.html:20
#: apps/users/forms.py:23 apps/users/models.py:451
#: templates/users/login.html:20
msgid "E-mail"
msgstr "E-Mail"
@@ -1747,19 +1761,19 @@ msgstr "Dieses Konto ist deaktiviert"
msgid "Default"
msgstr "Standard"
#: apps/users/forms.py:95 apps/users/models.py:41
#: apps/users/forms.py:95 apps/users/models.py:484
msgid "Date Format"
msgstr "Datumsformat"
#: apps/users/forms.py:100 apps/users/models.py:46
#: apps/users/forms.py:100 apps/users/models.py:489
msgid "Datetime Format"
msgstr "Datums- und Zeitformat"
#: apps/users/forms.py:106 apps/users/models.py:49
#: apps/users/forms.py:106 apps/users/models.py:492
msgid "Number Format"
msgstr "Zahlenformat"
#: apps/users/forms.py:141
#: apps/users/forms.py:146
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1770,25 +1784,25 @@ msgstr ""
"angezeigt werden.\n"
"Hilf mit WYGIWYH in deine Sprache zu übersetzten: %(translation_link)s"
#: apps/users/forms.py:150
#: apps/users/forms.py:155
msgid "New Password"
msgstr "Neues Passwort"
#: apps/users/forms.py:153
#: apps/users/forms.py:158
msgid "Leave blank to keep the current password."
msgstr "Leer lassen um Passwort zu belassen."
#: apps/users/forms.py:156
#: apps/users/forms.py:161
msgid "Confirm New Password"
msgstr "Bestätige das neue Passwort"
#: apps/users/forms.py:168 apps/users/forms.py:329
#: apps/users/forms.py:173 apps/users/forms.py:334
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr "Abwählen um den Nutzer zu deaktivieren. Besser als gleich zu löschen."
#: apps/users/forms.py:171 apps/users/forms.py:332
#: apps/users/forms.py:176 apps/users/forms.py:337
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
@@ -1796,75 +1810,79 @@ msgstr ""
"Anwählen damit der Nutzer alle Berechtigungen hat, ohne diese explizit "
"hinzuzufügen."
#: apps/users/forms.py:242
#: apps/users/forms.py:247
msgid "This email address is already in use by another account."
msgstr "Diese E-Mail-Adresse wird bereits von jemand anders benutzt."
#: apps/users/forms.py:250
#: apps/users/forms.py:255
msgid "The two password fields didn't match."
msgstr "Die eingegebenen Passwörter stimmen nicht überein."
#: apps/users/forms.py:252
#: apps/users/forms.py:257
msgid "Please confirm your new password."
msgstr "Bitte bestätige dein neues Passwort."
#: apps/users/forms.py:254
#: apps/users/forms.py:259
msgid "Please enter the new password first."
msgstr "Bitte gebe erst dein neues Passwort ein."
#: apps/users/forms.py:274
#: apps/users/forms.py:279
msgid "You cannot deactivate your own account using this form."
msgstr "Du kannst deinen Nutzer nicht hier deaktivieren."
#: apps/users/forms.py:287
#: apps/users/forms.py:292
msgid "Cannot remove status from the last superuser."
msgstr ""
#: apps/users/forms.py:293
#: apps/users/forms.py:298
msgid "You cannot remove your own superuser status using this form."
msgstr "Du kannst deinen eigenen Superuser-Status nicht hier entfernen."
#: apps/users/forms.py:390
#: apps/users/forms.py:395
msgid "A user with this email address already exists."
msgstr "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits."
#: apps/users/models.py:27 templates/includes/navbar.html:28
msgid "Yearly by currency"
msgstr "Jährlich nach Währung"
#: apps/users/models.py:28 templates/includes/navbar.html:30
msgid "Yearly by account"
msgstr "Jährlich nach Konto"
#: apps/users/models.py:29 templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr "Aktuelles Nettovermögen"
#: apps/users/models.py:30 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr "Erwartetes Nettovermögen"
#: apps/users/models.py:31
msgid "All Transactions"
msgstr "Alle Transaktionen"
#: apps/users/models.py:32 templates/includes/navbar.html:32
msgid "Calendar"
msgstr "Kalender"
#: apps/users/models.py:54 apps/users/models.py:60
#: apps/users/models.py:12 apps/users/models.py:497
msgid "Auto"
msgstr "Automatisch"
#: apps/users/models.py:56
#: apps/users/models.py:465 templates/includes/navbar.html:28
msgid "Yearly by currency"
msgstr "Jährlich nach Währung"
#: apps/users/models.py:466 templates/includes/navbar.html:30
msgid "Yearly by account"
msgstr "Jährlich nach Konto"
#: apps/users/models.py:467 templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr "Aktuelles Nettovermögen"
#: apps/users/models.py:468 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr "Erwartetes Nettovermögen"
#: apps/users/models.py:469
msgid "All Transactions"
msgstr "Alle Transaktionen"
#: apps/users/models.py:470 templates/includes/navbar.html:32
msgid "Calendar"
msgstr "Kalender"
#: apps/users/models.py:480
msgid "Volume"
msgstr ""
#: apps/users/models.py:499
msgid "Language"
msgstr "Sprache"
#: apps/users/models.py:62
#: apps/users/models.py:505
msgid "Time Zone"
msgstr "Zeitzone"
#: apps/users/models.py:68
#: apps/users/models.py:511
msgid "Start page"
msgstr "Startseite"
@@ -1918,8 +1936,8 @@ msgstr "Aktionen"
#: templates/account_groups/fragments/list.html:36
#: templates/accounts/fragments/list.html:41
#: templates/categories/fragments/table.html:29
#: templates/cotton/transaction/item.html:131
#: templates/cotton/ui/transactions_action_bar.html:49
#: templates/cotton/transaction/item.html:129
#: templates/cotton/ui/transactions_action_bar.html:52
#: templates/currencies/fragments/list.html:37
#: templates/dca/fragments/strategy/details.html:67
#: templates/dca/fragments/strategy/list.html:36
@@ -1942,10 +1960,10 @@ msgstr "Bearbeiten"
#: templates/account_groups/fragments/list.html:43
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:146
#: templates/cotton/transaction/item.html:165
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:178
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:86
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/currencies/fragments/list.html:44
#: templates/dca/fragments/strategy/details.html:75
#: templates/dca/fragments/strategy/list.html:44
@@ -1969,10 +1987,10 @@ msgstr "Löschen"
#: templates/account_groups/fragments/list.html:47
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:150
#: templates/cotton/transaction/item.html:169
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:182
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:88
#: templates/cotton/ui/transactions_action_bar.html:91
#: templates/currencies/fragments/list.html:48
#: templates/dca/fragments/strategy/details.html:80
#: templates/dca/fragments/strategy/list.html:48
@@ -1999,10 +2017,10 @@ msgstr "Bist du sicher?"
#: templates/account_groups/fragments/list.html:48
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:151
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:183
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:49
#: templates/dca/fragments/strategy/details.html:81
#: templates/dca/fragments/strategy/list.html:49
@@ -2021,8 +2039,8 @@ msgstr "Dies kann nicht rückgängig gemacht werden!"
#: templates/account_groups/fragments/list.html:49
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:152
#: templates/cotton/transaction/item.html:171
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:184
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2183,8 +2201,29 @@ msgstr "Suche"
msgid "Select"
msgstr "Auswahl"
#: templates/cotton/transaction/item.html:138
#: templates/cotton/ui/transactions_action_bar.html:78
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
msgid "Show on summaries"
msgstr ""
#: templates/cotton/transaction/item.html:155
#, fuzzy
#| msgid "No category"
msgid "Controlled by category"
msgstr "Keine Kategorie"
#: templates/cotton/transaction/item.html:162
msgid "Hide from summaries"
msgstr ""
#: templates/cotton/transaction/item.html:164
#, fuzzy
#| msgid "Add recurring transaction"
msgid "Add as quick transaction"
msgstr "Wiederkehrende Transaktion hinzufügen"
#: templates/cotton/transaction/item.html:166
#: templates/cotton/ui/transactions_action_bar.html:81
msgid "Duplicate"
msgstr "Duplikat"
@@ -2224,17 +2263,17 @@ msgid "final total"
msgstr "Gesamtbilanz"
#: templates/cotton/ui/deleted_transactions_action_bar.html:31
#: templates/cotton/ui/transactions_action_bar.html:31
#: templates/cotton/ui/transactions_action_bar.html:34
msgid "Select All"
msgstr "Alle auswählen"
#: templates/cotton/ui/deleted_transactions_action_bar.html:37
#: templates/cotton/ui/transactions_action_bar.html:37
#: templates/cotton/ui/transactions_action_bar.html:40
msgid "Unselect All"
msgstr "Alle abwählen"
#: templates/cotton/ui/deleted_transactions_action_bar.html:59
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/cotton/ui/transactions_action_bar.html:93
msgid "Yes, delete them!"
msgstr "Ja, löschen!"
@@ -2245,49 +2284,49 @@ msgstr "Ja, löschen!"
#: templates/cotton/ui/deleted_transactions_action_bar.html:189
#: templates/cotton/ui/deleted_transactions_action_bar.html:209
#: templates/cotton/ui/deleted_transactions_action_bar.html:229
#: templates/cotton/ui/transactions_action_bar.html:136
#: templates/cotton/ui/transactions_action_bar.html:160
#: templates/cotton/ui/transactions_action_bar.html:180
#: templates/cotton/ui/transactions_action_bar.html:200
#: templates/cotton/ui/transactions_action_bar.html:220
#: templates/cotton/ui/transactions_action_bar.html:240
#: templates/cotton/ui/transactions_action_bar.html:260
#: templates/cotton/ui/transactions_action_bar.html:139
#: templates/cotton/ui/transactions_action_bar.html:163
#: templates/cotton/ui/transactions_action_bar.html:183
#: templates/cotton/ui/transactions_action_bar.html:203
#: templates/cotton/ui/transactions_action_bar.html:223
#: templates/cotton/ui/transactions_action_bar.html:243
#: templates/cotton/ui/transactions_action_bar.html:263
msgid "copied!"
msgstr "kopiert!"
#: templates/cotton/ui/deleted_transactions_action_bar.html:114
#: templates/cotton/ui/transactions_action_bar.html:54
#: templates/cotton/ui/transactions_action_bar.html:145
#: templates/cotton/ui/transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:148
msgid "Toggle Dropdown"
msgstr "Auswahlliste umschalten"
#: templates/cotton/ui/deleted_transactions_action_bar.html:122
#: templates/cotton/ui/transactions_action_bar.html:153
#: templates/cotton/ui/transactions_action_bar.html:156
msgid "Flat Total"
msgstr "Bruttosumme"
#: templates/cotton/ui/deleted_transactions_action_bar.html:142
#: templates/cotton/ui/transactions_action_bar.html:173
#: templates/cotton/ui/transactions_action_bar.html:176
msgid "Real Total"
msgstr "Nettosumme"
#: templates/cotton/ui/deleted_transactions_action_bar.html:162
#: templates/cotton/ui/transactions_action_bar.html:193
#: templates/cotton/ui/transactions_action_bar.html:196
msgid "Mean"
msgstr "Mittelwert"
#: templates/cotton/ui/deleted_transactions_action_bar.html:182
#: templates/cotton/ui/transactions_action_bar.html:213
#: templates/cotton/ui/transactions_action_bar.html:216
msgid "Max"
msgstr "Maximum"
#: templates/cotton/ui/deleted_transactions_action_bar.html:202
#: templates/cotton/ui/transactions_action_bar.html:233
#: templates/cotton/ui/transactions_action_bar.html:236
msgid "Min"
msgstr "Minimum"
#: templates/cotton/ui/deleted_transactions_action_bar.html:222
#: templates/cotton/ui/transactions_action_bar.html:253
#: templates/cotton/ui/transactions_action_bar.html:256
msgid "Count"
msgstr "Anzahl"
@@ -2306,11 +2345,11 @@ msgstr "Wiederkehrend"
msgid "Balance"
msgstr "Saldo"
#: templates/cotton/ui/transactions_action_bar.html:62
#: templates/cotton/ui/transactions_action_bar.html:65
msgid "Mark as unpaid"
msgstr "Als unbezahlt markieren"
#: templates/cotton/ui/transactions_action_bar.html:69
#: templates/cotton/ui/transactions_action_bar.html:72
msgid "Mark as paid"
msgstr "Als bezahlt markieren"
@@ -2678,25 +2717,31 @@ msgstr "Nur benutzen, wenn du weißt was du tust"
msgid "Django Admin"
msgstr "Django Admin"
#: templates/includes/navbar.html:167
#: templates/includes/navbar.html:167 templates/includes/navbar.html:170
msgid "Calculator"
msgstr "Rechner"
#: templates/includes/navbar/user_menu.html:14
#: templates/includes/navbar/user_menu.html:6
#, fuzzy
#| msgid "Import Profiles"
msgid "Profile"
msgstr "Import-Profile"
#: templates/includes/navbar/user_menu.html:15
msgid "Settings"
msgstr "Einstellungen"
#: templates/includes/navbar/user_menu.html:19
#: templates/includes/navbar/user_menu.html:20
#, fuzzy
#| msgid "Edit import profile"
msgid "Edit profile"
msgstr "Import-Profil bearbeiten"
#: templates/includes/navbar/user_menu.html:46
#: templates/includes/navbar/user_menu.html:47
msgid "Clear cache"
msgstr "Cache leeren"
#: templates/includes/navbar/user_menu.html:50
#: templates/includes/navbar/user_menu.html:51
msgid "Logout"
msgstr "Abmelden"
@@ -3008,25 +3053,25 @@ msgstr "Älteste zuerst"
msgid "Newest first"
msgstr "Neueste zuerst"
#: templates/net_worth/net_worth.html:17
#: templates/net_worth/net_worth.html:18
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr "Nach Währung"
#: templates/net_worth/net_worth.html:52
#: templates/net_worth/net_worth.html:53
msgid "Consolidated"
msgstr "Zusammengefasst"
#: templates/net_worth/net_worth.html:81
#: templates/net_worth/net_worth.html:82
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr "Nach Konto"
#: templates/net_worth/net_worth.html:188
#: templates/net_worth/net_worth.html:189
msgid "Evolution by currency"
msgstr "Verlauf nach Währung"
#: templates/net_worth/net_worth.html:252
#: templates/net_worth/net_worth.html:253
msgid "Evolution by account"
msgstr "Verlauf nach Konto"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-06-20 05:07+0000\n"
"POT-Creation-Date: 2025-07-19 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"
@@ -27,11 +27,11 @@ msgstr ""
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
#: apps/transactions/forms.py:776 apps/transactions/forms.py:819
#: apps/transactions/forms.py:851 apps/transactions/forms.py:886
#: apps/transactions/forms.py:1038 apps/users/forms.py:210
#: apps/users/forms.py:372
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:783 apps/transactions/forms.py:826
#: apps/transactions/forms.py:858 apps/transactions/forms.py:893
#: apps/transactions/forms.py:1045 apps/users/forms.py:215
#: apps/users/forms.py:377
msgid "Update"
msgstr ""
@@ -41,10 +41,10 @@ msgstr ""
#: 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:378 apps/transactions/forms.py:784
#: apps/transactions/forms.py:827 apps/transactions/forms.py:859
#: apps/transactions/forms.py:894 apps/transactions/forms.py:1046
#: apps/users/forms.py:218 apps/users/forms.py:380
#: apps/transactions/forms.py:383 apps/transactions/forms.py:791
#: apps/transactions/forms.py:834 apps/transactions/forms.py:866
#: apps/transactions/forms.py:901 apps/transactions/forms.py:1053
#: apps/users/forms.py:223 apps/users/forms.py:385
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -77,10 +77,10 @@ msgstr ""
#: 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:450 apps/transactions/forms.py:457
#: apps/transactions/forms.py:657 apps/transactions/forms.py:918
#: apps/transactions/models.py:317 apps/transactions/models.py:500
#: apps/transactions/models.py:700 apps/transactions/models.py:936
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
#: apps/transactions/forms.py:664 apps/transactions/forms.py:925
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:938
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
msgid "Category"
@@ -91,10 +91,10 @@ msgstr ""
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
#: apps/transactions/forms.py:650 apps/transactions/forms.py:911
#: apps/transactions/models.py:323 apps/transactions/models.py:502
#: apps/transactions/models.py:704 apps/transactions/models.py:942
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:657 apps/transactions/forms.py:918
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:944
#: templates/includes/navbar.html:110
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
@@ -104,7 +104,7 @@ msgstr ""
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:210 apps/transactions/models.py:235
#: apps/transactions/models.py:259 apps/transactions/models.py:905
#: apps/transactions/models.py:259 apps/transactions/models.py:906
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -168,9 +168,9 @@ msgstr ""
#: apps/accounts/models.py:70 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:642 apps/transactions/forms.py:903
#: apps/transactions/models.py:290 apps/transactions/models.py:460
#: apps/transactions/models.py:682 apps/transactions/models.py:911
#: apps/transactions/forms.py:649 apps/transactions/forms.py:910
#: apps/transactions/models.py:290 apps/transactions/models.py:461
#: apps/transactions/models.py:683 apps/transactions/models.py:912
msgid "Account"
msgstr ""
@@ -328,7 +328,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr ""
#: apps/common/forms.py:80 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:140
msgid "Save"
msgstr ""
@@ -427,12 +427,12 @@ msgstr ""
msgid "Cache cleared successfully"
msgstr ""
#: apps/common/widgets/datepicker.py:53 apps/common/widgets/datepicker.py:206
#: apps/common/widgets/datepicker.py:264
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
msgid "Today"
msgstr ""
#: apps/common/widgets/datepicker.py:139
#: apps/common/widgets/datepicker.py:141
msgid "Now"
msgstr ""
@@ -461,7 +461,7 @@ msgstr ""
#: apps/currencies/forms.py:69 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:478
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
#: apps/transactions/models.py:300
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
@@ -664,11 +664,11 @@ msgstr ""
msgid "Create transaction"
msgstr ""
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
msgid "From Account"
msgstr ""
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
msgid "To Account"
msgstr ""
@@ -693,7 +693,7 @@ msgstr ""
msgid "You must provide an account."
msgstr ""
#: apps/dca/forms.py:312 apps/transactions/forms.py:592
#: apps/dca/forms.py:312 apps/transactions/forms.py:597
msgid "From and To accounts must be different."
msgstr ""
@@ -712,9 +712,9 @@ 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:494 apps/transactions/models.py:313
#: apps/transactions/models.py:509 apps/transactions/models.py:710
#: apps/transactions/models.py:932
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
#: apps/transactions/models.py:510 apps/transactions/models.py:711
#: apps/transactions/models.py:934
msgid "Notes"
msgstr ""
@@ -777,7 +777,7 @@ msgid "Users"
msgstr ""
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:374 templates/includes/navbar.html:57
#: apps/transactions/models.py:375 templates/includes/navbar.html:57
#: templates/includes/navbar.html:106
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -795,23 +795,23 @@ 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:81
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:665 apps/transactions/forms.py:926
#: apps/transactions/models.py:273 apps/transactions/models.py:328
#: apps/transactions/models.py:505 apps/transactions/models.py:707
#: apps/transactions/models.py:947 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:672 apps/transactions/forms.py:933
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:949 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:112
msgid "Entities"
msgstr ""
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:744 templates/includes/navbar.html:76
#: apps/transactions/models.py:745 templates/includes/navbar.html:76
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr ""
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:523 templates/includes/navbar.html:74
#: apps/transactions/models.py:524 templates/includes/navbar.html:74
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -829,7 +829,7 @@ msgstr ""
msgid "Rules"
msgstr ""
#: apps/export_app/forms.py:86 templates/cotton/transaction/item.html:57
#: apps/export_app/forms.py:86 templates/cotton/transaction/item.html:55
msgid "DCA"
msgstr ""
@@ -864,7 +864,7 @@ msgstr ""
msgid "Update or create transaction actions"
msgstr ""
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:159
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -1049,16 +1049,16 @@ msgstr ""
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:297
#: apps/transactions/models.py:465 apps/transactions/models.py:688
#: apps/transactions/models.py:918
#: apps/transactions/models.py:466 apps/transactions/models.py:689
#: apps/transactions/models.py:919
msgid "Type"
msgstr ""
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:299 apps/transactions/models.py:920
#: templates/cotton/transaction/item.html:22
#: templates/cotton/transaction/item.html:32
#: apps/transactions/models.py:299 apps/transactions/models.py:921
#: templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
msgid "Paid"
@@ -1066,34 +1066,34 @@ 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:481 apps/transactions/forms.py:671
#: apps/transactions/models.py:301 apps/transactions/models.py:483
#: apps/transactions/models.py:712
#: apps/transactions/forms.py:486 apps/transactions/forms.py:678
#: apps/transactions/models.py:301 apps/transactions/models.py:484
#: apps/transactions/models.py:713
msgid "Reference Date"
msgstr ""
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:306
#: apps/transactions/models.py:693 apps/transactions/models.py:925
#: apps/rules/models.py:262 apps/transactions/models.py:307
#: apps/transactions/models.py:694 apps/transactions/models.py:927
#: templates/insights/fragments/sankey.html:95
msgid "Amount"
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:485 apps/transactions/models.py:311
#: apps/transactions/models.py:467 apps/transactions/models.py:696
#: apps/transactions/models.py:930
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
#: apps/transactions/models.py:468 apps/transactions/models.py:697
#: apps/transactions/models.py:932
msgid "Description"
msgstr ""
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:350 apps/transactions/models.py:952
#: apps/transactions/models.py:351 apps/transactions/models.py:954
msgid "Internal Note"
msgstr ""
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:352 apps/transactions/models.py:954
#: apps/transactions/models.py:353 apps/transactions/models.py:956
msgid "Internal ID"
msgstr ""
@@ -1219,8 +1219,8 @@ msgstr ""
msgid "Update or Create Transaction action deleted successfully"
msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:22
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:46
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1267,41 +1267,46 @@ msgstr ""
msgid "Save and add another"
msgstr ""
#: apps/transactions/forms.py:437
msgid "From Amount"
#: apps/transactions/forms.py:300
msgid "Muted transactions won't be displayed on monthly summaries"
msgstr ""
#: apps/transactions/forms.py:442
msgid "From Amount"
msgstr ""
#: apps/transactions/forms.py:447
msgid "To Amount"
msgstr ""
#: apps/transactions/forms.py:559
#: apps/transactions/forms.py:564
#: templates/cotton/ui/quick_transactions_buttons.html:40
#: templates/cotton/ui/transactions_fab.html:44
msgid "Transfer"
msgstr ""
#: apps/transactions/forms.py:805
#: apps/transactions/forms.py:812
msgid "Tag name"
msgstr ""
#: apps/transactions/forms.py:837
#: apps/transactions/forms.py:844
msgid "Entity name"
msgstr ""
#: apps/transactions/forms.py:869
#: apps/transactions/forms.py:876
msgid "Category name"
msgstr ""
#: apps/transactions/forms.py:871
msgid "Muted categories won't count towards your monthly total"
#: apps/transactions/forms.py:878
msgid "Muted categories won't be displayed on monthly summaries"
msgstr ""
#: apps/transactions/forms.py:1057
#: apps/transactions/forms.py:1064
msgid "End date should be after the start date"
msgstr ""
#: apps/transactions/models.py:211
#: apps/transactions/models.py:211 apps/transactions/models.py:302
#: apps/transactions/models.py:922
msgid "Mute"
msgstr ""
@@ -1338,7 +1343,7 @@ msgstr ""
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:284 apps/transactions/models.py:898
#: apps/transactions/models.py:284 apps/transactions/models.py:899
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1350,7 +1355,7 @@ msgstr ""
msgid "Income"
msgstr ""
#: apps/transactions/models.py:285 apps/transactions/models.py:899
#: apps/transactions/models.py:285 apps/transactions/models.py:900
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1361,133 +1366,138 @@ msgstr ""
msgid "Expense"
msgstr ""
#: apps/transactions/models.py:339 apps/transactions/models.py:522
#: apps/transactions/models.py:340 apps/transactions/models.py:523
msgid "Installment Plan"
msgstr ""
#: apps/transactions/models.py:348 apps/transactions/models.py:743
#: apps/transactions/models.py:349 apps/transactions/models.py:744
msgid "Recurring Transaction"
msgstr ""
#: apps/transactions/models.py:356
#: apps/transactions/models.py:357
msgid "Deleted"
msgstr ""
#: apps/transactions/models.py:361
#: apps/transactions/models.py:362
msgid "Deleted At"
msgstr ""
#: apps/transactions/models.py:373
#: apps/transactions/models.py:374
msgid "Transaction"
msgstr ""
#: apps/transactions/models.py:445 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:446 templates/tags/fragments/table.html:71
msgid "No tags"
msgstr ""
#: apps/transactions/models.py:446
#: apps/transactions/models.py:447
msgid "No category"
msgstr ""
#: apps/transactions/models.py:448
#: apps/transactions/models.py:449
msgid "No description"
msgstr ""
#: apps/transactions/models.py:454
#: apps/transactions/models.py:455
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:455 apps/users/models.py:26
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr ""
#: apps/transactions/models.py:456
#: apps/transactions/models.py:457
msgid "Weekly"
msgstr ""
#: apps/transactions/models.py:457
#: apps/transactions/models.py:458
msgid "Daily"
msgstr ""
#: apps/transactions/models.py:470
#: apps/transactions/models.py:471
msgid "Number of Installments"
msgstr ""
#: apps/transactions/models.py:475
#: apps/transactions/models.py:476
msgid "Installment Start"
msgstr ""
#: apps/transactions/models.py:476
#: apps/transactions/models.py:477
msgid "The installment number to start counting from"
msgstr ""
#: apps/transactions/models.py:481 apps/transactions/models.py:716
#: apps/transactions/models.py:482 apps/transactions/models.py:717
msgid "Start Date"
msgstr ""
#: apps/transactions/models.py:485 apps/transactions/models.py:717
#: apps/transactions/models.py:486 apps/transactions/models.py:718
msgid "End Date"
msgstr ""
#: apps/transactions/models.py:490
#: apps/transactions/models.py:491
msgid "Recurrence"
msgstr ""
#: apps/transactions/models.py:493
#: apps/transactions/models.py:494
msgid "Installment Amount"
msgstr ""
#: apps/transactions/models.py:512 apps/transactions/models.py:733
#: apps/transactions/models.py:513 apps/transactions/models.py:734
msgid "Add description to transactions"
msgstr ""
#: apps/transactions/models.py:515 apps/transactions/models.py:736
#: apps/transactions/models.py:516 apps/transactions/models.py:737
msgid "Add notes to transactions"
msgstr ""
#: apps/transactions/models.py:675
#: apps/transactions/models.py:676
msgid "day(s)"
msgstr ""
#: apps/transactions/models.py:676
#: apps/transactions/models.py:677
msgid "week(s)"
msgstr ""
#: apps/transactions/models.py:677
#: apps/transactions/models.py:678
msgid "month(s)"
msgstr ""
#: apps/transactions/models.py:678
#: apps/transactions/models.py:679
msgid "year(s)"
msgstr ""
#: apps/transactions/models.py:680
#: apps/transactions/models.py:681
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr ""
#: apps/transactions/models.py:719
#: apps/transactions/models.py:720
msgid "Recurrence Type"
msgstr ""
#: apps/transactions/models.py:722
#: apps/transactions/models.py:723
msgid "Recurrence Interval"
msgstr ""
#: apps/transactions/models.py:726
#: apps/transactions/models.py:727
msgid "Last Generated Date"
msgstr ""
#: apps/transactions/models.py:729
#: apps/transactions/models.py:730
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:964 templates/cotton/ui/transactions_fab.html:59
#: apps/transactions/models.py:966
#: apps/transactions/views/quick_transactions.py:177
#: apps/transactions/views/quick_transactions.py:186
#: apps/transactions/views/quick_transactions.py:188
#: apps/transactions/views/quick_transactions.py:190
#: templates/cotton/ui/transactions_fab.html:59
msgid "Quick Transaction"
msgstr ""
#: apps/transactions/models.py:965 templates/includes/navbar.html:72
#: apps/transactions/models.py:967 templates/includes/navbar.html:72
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1578,7 +1588,8 @@ msgstr ""
msgid "Installment Plan deleted successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:45 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
msgid "Item added successfully"
msgstr ""
@@ -1590,7 +1601,7 @@ msgstr ""
msgid "Item deleted successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:145
#: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully"
@@ -1679,7 +1690,8 @@ msgstr ""
msgid "Important dates"
msgstr ""
#: apps/users/forms.py:23 apps/users/models.py:13 templates/users/login.html:20
#: apps/users/forms.py:23 apps/users/models.py:451
#: templates/users/login.html:20
msgid "E-mail"
msgstr ""
@@ -1701,19 +1713,19 @@ msgstr ""
msgid "Default"
msgstr ""
#: apps/users/forms.py:95 apps/users/models.py:41
#: apps/users/forms.py:95 apps/users/models.py:484
msgid "Date Format"
msgstr ""
#: apps/users/forms.py:100 apps/users/models.py:46
#: apps/users/forms.py:100 apps/users/models.py:489
msgid "Datetime Format"
msgstr ""
#: apps/users/forms.py:106 apps/users/models.py:49
#: apps/users/forms.py:106 apps/users/models.py:492
msgid "Number Format"
msgstr ""
#: apps/users/forms.py:141
#: apps/users/forms.py:146
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1721,99 +1733,103 @@ msgid ""
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr ""
#: apps/users/forms.py:150
#: apps/users/forms.py:155
msgid "New Password"
msgstr ""
#: apps/users/forms.py:153
#: apps/users/forms.py:158
msgid "Leave blank to keep the current password."
msgstr ""
#: apps/users/forms.py:156
#: apps/users/forms.py:161
msgid "Confirm New Password"
msgstr ""
#: apps/users/forms.py:168 apps/users/forms.py:329
#: apps/users/forms.py:173 apps/users/forms.py:334
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr ""
#: apps/users/forms.py:171 apps/users/forms.py:332
#: apps/users/forms.py:176 apps/users/forms.py:337
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
#: apps/users/forms.py:242
#: apps/users/forms.py:247
msgid "This email address is already in use by another account."
msgstr ""
#: apps/users/forms.py:250
#: apps/users/forms.py:255
msgid "The two password fields didn't match."
msgstr ""
#: apps/users/forms.py:252
#: apps/users/forms.py:257
msgid "Please confirm your new password."
msgstr ""
#: apps/users/forms.py:254
#: apps/users/forms.py:259
msgid "Please enter the new password first."
msgstr ""
#: apps/users/forms.py:274
#: apps/users/forms.py:279
msgid "You cannot deactivate your own account using this form."
msgstr ""
#: apps/users/forms.py:287
#: apps/users/forms.py:292
msgid "Cannot remove status from the last superuser."
msgstr ""
#: apps/users/forms.py:293
#: apps/users/forms.py:298
msgid "You cannot remove your own superuser status using this form."
msgstr ""
#: apps/users/forms.py:390
#: apps/users/forms.py:395
msgid "A user with this email address already exists."
msgstr ""
#: apps/users/models.py:27 templates/includes/navbar.html:28
msgid "Yearly by currency"
msgstr ""
#: apps/users/models.py:28 templates/includes/navbar.html:30
msgid "Yearly by account"
msgstr ""
#: apps/users/models.py:29 templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr ""
#: apps/users/models.py:30 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr ""
#: apps/users/models.py:31
msgid "All Transactions"
msgstr ""
#: apps/users/models.py:32 templates/includes/navbar.html:32
msgid "Calendar"
msgstr ""
#: apps/users/models.py:54 apps/users/models.py:60
#: apps/users/models.py:12 apps/users/models.py:497
msgid "Auto"
msgstr ""
#: apps/users/models.py:56
#: apps/users/models.py:465 templates/includes/navbar.html:28
msgid "Yearly by currency"
msgstr ""
#: apps/users/models.py:466 templates/includes/navbar.html:30
msgid "Yearly by account"
msgstr ""
#: apps/users/models.py:467 templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr ""
#: apps/users/models.py:468 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr ""
#: apps/users/models.py:469
msgid "All Transactions"
msgstr ""
#: apps/users/models.py:470 templates/includes/navbar.html:32
msgid "Calendar"
msgstr ""
#: apps/users/models.py:480
msgid "Volume"
msgstr ""
#: apps/users/models.py:499
msgid "Language"
msgstr ""
#: apps/users/models.py:62
#: apps/users/models.py:505
msgid "Time Zone"
msgstr ""
#: apps/users/models.py:68
#: apps/users/models.py:511
msgid "Start page"
msgstr ""
@@ -1867,8 +1883,8 @@ msgstr ""
#: templates/account_groups/fragments/list.html:36
#: templates/accounts/fragments/list.html:41
#: templates/categories/fragments/table.html:29
#: templates/cotton/transaction/item.html:131
#: templates/cotton/ui/transactions_action_bar.html:49
#: templates/cotton/transaction/item.html:129
#: templates/cotton/ui/transactions_action_bar.html:52
#: templates/currencies/fragments/list.html:37
#: templates/dca/fragments/strategy/details.html:67
#: templates/dca/fragments/strategy/list.html:36
@@ -1891,10 +1907,10 @@ msgstr ""
#: templates/account_groups/fragments/list.html:43
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:146
#: templates/cotton/transaction/item.html:165
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:178
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:86
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/currencies/fragments/list.html:44
#: templates/dca/fragments/strategy/details.html:75
#: templates/dca/fragments/strategy/list.html:44
@@ -1918,10 +1934,10 @@ msgstr ""
#: templates/account_groups/fragments/list.html:47
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:150
#: templates/cotton/transaction/item.html:169
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:182
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:88
#: templates/cotton/ui/transactions_action_bar.html:91
#: templates/currencies/fragments/list.html:48
#: templates/dca/fragments/strategy/details.html:80
#: templates/dca/fragments/strategy/list.html:48
@@ -1948,10 +1964,10 @@ msgstr ""
#: templates/account_groups/fragments/list.html:48
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:151
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:183
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:49
#: templates/dca/fragments/strategy/details.html:81
#: templates/dca/fragments/strategy/list.html:49
@@ -1970,8 +1986,8 @@ msgstr ""
#: templates/account_groups/fragments/list.html:49
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:152
#: templates/cotton/transaction/item.html:171
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:184
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2132,8 +2148,25 @@ msgstr ""
msgid "Select"
msgstr ""
#: templates/cotton/transaction/item.html:138
#: templates/cotton/ui/transactions_action_bar.html:78
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
msgid "Show on summaries"
msgstr ""
#: templates/cotton/transaction/item.html:155
msgid "Controlled by category"
msgstr ""
#: templates/cotton/transaction/item.html:162
msgid "Hide from summaries"
msgstr ""
#: templates/cotton/transaction/item.html:164
msgid "Add as quick transaction"
msgstr ""
#: templates/cotton/transaction/item.html:166
#: templates/cotton/ui/transactions_action_bar.html:81
msgid "Duplicate"
msgstr ""
@@ -2173,17 +2206,17 @@ msgid "final total"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:31
#: templates/cotton/ui/transactions_action_bar.html:31
#: templates/cotton/ui/transactions_action_bar.html:34
msgid "Select All"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:37
#: templates/cotton/ui/transactions_action_bar.html:37
#: templates/cotton/ui/transactions_action_bar.html:40
msgid "Unselect All"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:59
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/cotton/ui/transactions_action_bar.html:93
msgid "Yes, delete them!"
msgstr ""
@@ -2194,49 +2227,49 @@ msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:189
#: templates/cotton/ui/deleted_transactions_action_bar.html:209
#: templates/cotton/ui/deleted_transactions_action_bar.html:229
#: templates/cotton/ui/transactions_action_bar.html:136
#: templates/cotton/ui/transactions_action_bar.html:160
#: templates/cotton/ui/transactions_action_bar.html:180
#: templates/cotton/ui/transactions_action_bar.html:200
#: templates/cotton/ui/transactions_action_bar.html:220
#: templates/cotton/ui/transactions_action_bar.html:240
#: templates/cotton/ui/transactions_action_bar.html:260
#: templates/cotton/ui/transactions_action_bar.html:139
#: templates/cotton/ui/transactions_action_bar.html:163
#: templates/cotton/ui/transactions_action_bar.html:183
#: templates/cotton/ui/transactions_action_bar.html:203
#: templates/cotton/ui/transactions_action_bar.html:223
#: templates/cotton/ui/transactions_action_bar.html:243
#: templates/cotton/ui/transactions_action_bar.html:263
msgid "copied!"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:114
#: templates/cotton/ui/transactions_action_bar.html:54
#: templates/cotton/ui/transactions_action_bar.html:145
#: templates/cotton/ui/transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:148
msgid "Toggle Dropdown"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:122
#: templates/cotton/ui/transactions_action_bar.html:153
#: templates/cotton/ui/transactions_action_bar.html:156
msgid "Flat Total"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:142
#: templates/cotton/ui/transactions_action_bar.html:173
#: templates/cotton/ui/transactions_action_bar.html:176
msgid "Real Total"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:162
#: templates/cotton/ui/transactions_action_bar.html:193
#: templates/cotton/ui/transactions_action_bar.html:196
msgid "Mean"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:182
#: templates/cotton/ui/transactions_action_bar.html:213
#: templates/cotton/ui/transactions_action_bar.html:216
msgid "Max"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:202
#: templates/cotton/ui/transactions_action_bar.html:233
#: templates/cotton/ui/transactions_action_bar.html:236
msgid "Min"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:222
#: templates/cotton/ui/transactions_action_bar.html:253
#: templates/cotton/ui/transactions_action_bar.html:256
msgid "Count"
msgstr ""
@@ -2255,11 +2288,11 @@ msgstr ""
msgid "Balance"
msgstr ""
#: templates/cotton/ui/transactions_action_bar.html:62
#: templates/cotton/ui/transactions_action_bar.html:65
msgid "Mark as unpaid"
msgstr ""
#: templates/cotton/ui/transactions_action_bar.html:69
#: templates/cotton/ui/transactions_action_bar.html:72
msgid "Mark as paid"
msgstr ""
@@ -2624,23 +2657,27 @@ msgstr ""
msgid "Django Admin"
msgstr ""
#: templates/includes/navbar.html:167
#: templates/includes/navbar.html:167 templates/includes/navbar.html:170
msgid "Calculator"
msgstr ""
#: templates/includes/navbar/user_menu.html:14
#: templates/includes/navbar/user_menu.html:6
msgid "Profile"
msgstr ""
#: templates/includes/navbar/user_menu.html:15
msgid "Settings"
msgstr ""
#: templates/includes/navbar/user_menu.html:19
#: templates/includes/navbar/user_menu.html:20
msgid "Edit profile"
msgstr ""
#: templates/includes/navbar/user_menu.html:46
#: templates/includes/navbar/user_menu.html:47
msgid "Clear cache"
msgstr ""
#: templates/includes/navbar/user_menu.html:50
#: templates/includes/navbar/user_menu.html:51
msgid "Logout"
msgstr ""
@@ -2941,25 +2978,25 @@ msgstr ""
msgid "Newest first"
msgstr ""
#: templates/net_worth/net_worth.html:17
#: templates/net_worth/net_worth.html:18
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr ""
#: templates/net_worth/net_worth.html:52
#: templates/net_worth/net_worth.html:53
msgid "Consolidated"
msgstr ""
#: templates/net_worth/net_worth.html:81
#: templates/net_worth/net_worth.html:82
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr ""
#: templates/net_worth/net_worth.html:188
#: templates/net_worth/net_worth.html:189
msgid "Evolution by currency"
msgstr ""
#: templates/net_worth/net_worth.html:252
#: templates/net_worth/net_worth.html:253
msgid "Evolution by account"
msgstr ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-06-20 05:07+0000\n"
"POT-Creation-Date: 2025-07-19 19:24+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/"
@@ -28,11 +28,11 @@ msgstr "Nome do grupo"
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
#: apps/transactions/forms.py:776 apps/transactions/forms.py:819
#: apps/transactions/forms.py:851 apps/transactions/forms.py:886
#: apps/transactions/forms.py:1038 apps/users/forms.py:210
#: apps/users/forms.py:372
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:783 apps/transactions/forms.py:826
#: apps/transactions/forms.py:858 apps/transactions/forms.py:893
#: apps/transactions/forms.py:1045 apps/users/forms.py:215
#: apps/users/forms.py:377
msgid "Update"
msgstr "Atualizar"
@@ -42,10 +42,10 @@ msgstr "Atualizar"
#: 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:378 apps/transactions/forms.py:784
#: apps/transactions/forms.py:827 apps/transactions/forms.py:859
#: apps/transactions/forms.py:894 apps/transactions/forms.py:1046
#: apps/users/forms.py:218 apps/users/forms.py:380
#: apps/transactions/forms.py:383 apps/transactions/forms.py:791
#: apps/transactions/forms.py:834 apps/transactions/forms.py:866
#: apps/transactions/forms.py:901 apps/transactions/forms.py:1053
#: apps/users/forms.py:223 apps/users/forms.py:385
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -78,10 +78,10 @@ msgstr "Novo saldo"
#: 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:450 apps/transactions/forms.py:457
#: apps/transactions/forms.py:657 apps/transactions/forms.py:918
#: apps/transactions/models.py:317 apps/transactions/models.py:500
#: apps/transactions/models.py:700 apps/transactions/models.py:936
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
#: apps/transactions/forms.py:664 apps/transactions/forms.py:925
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:938
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
msgid "Category"
@@ -92,10 +92,10 @@ msgstr "Categoria"
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
#: apps/transactions/forms.py:650 apps/transactions/forms.py:911
#: apps/transactions/models.py:323 apps/transactions/models.py:502
#: apps/transactions/models.py:704 apps/transactions/models.py:942
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:657 apps/transactions/forms.py:918
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:944
#: templates/includes/navbar.html:110
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
@@ -105,7 +105,7 @@ msgstr "Tags"
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:210 apps/transactions/models.py:235
#: apps/transactions/models.py:259 apps/transactions/models.py:905
#: apps/transactions/models.py:259 apps/transactions/models.py:906
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -172,9 +172,9 @@ msgstr ""
#: apps/accounts/models.py:70 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:642 apps/transactions/forms.py:903
#: apps/transactions/models.py:290 apps/transactions/models.py:460
#: apps/transactions/models.py:682 apps/transactions/models.py:911
#: apps/transactions/forms.py:649 apps/transactions/forms.py:910
#: apps/transactions/models.py:290 apps/transactions/models.py:461
#: apps/transactions/models.py:683 apps/transactions/models.py:912
msgid "Account"
msgstr "Conta"
@@ -337,7 +337,7 @@ msgstr ""
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
"usuários. Somente editável pelo proprietário."
#: apps/common/forms.py:80 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:140
msgid "Save"
msgstr "Salvar"
@@ -436,12 +436,12 @@ msgstr "Informação"
msgid "Cache cleared successfully"
msgstr "Cache limpo com sucesso"
#: apps/common/widgets/datepicker.py:53 apps/common/widgets/datepicker.py:206
#: apps/common/widgets/datepicker.py:264
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
msgid "Today"
msgstr "Hoje"
#: apps/common/widgets/datepicker.py:139
#: apps/common/widgets/datepicker.py:141
msgid "Now"
msgstr "Agora"
@@ -470,7 +470,7 @@ msgstr "Sufixo"
#: apps/currencies/forms.py:69 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:478
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
#: apps/transactions/models.py:300
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
@@ -683,11 +683,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:425
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
msgid "From Account"
msgstr "Conta de origem"
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
msgid "To Account"
msgstr "Conta de destino"
@@ -712,7 +712,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:592
#: apps/dca/forms.py:312 apps/transactions/forms.py:597
msgid "From and To accounts must be different."
msgstr "As contas De e Para devem ser diferentes."
@@ -731,9 +731,9 @@ 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:494 apps/transactions/models.py:313
#: apps/transactions/models.py:509 apps/transactions/models.py:710
#: apps/transactions/models.py:932
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
#: apps/transactions/models.py:510 apps/transactions/models.py:711
#: apps/transactions/models.py:934
msgid "Notes"
msgstr "Notas"
@@ -796,7 +796,7 @@ msgid "Users"
msgstr "Usuários"
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:374 templates/includes/navbar.html:57
#: apps/transactions/models.py:375 templates/includes/navbar.html:57
#: templates/includes/navbar.html:106
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -814,23 +814,23 @@ 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:81
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:665 apps/transactions/forms.py:926
#: apps/transactions/models.py:273 apps/transactions/models.py:328
#: apps/transactions/models.py:505 apps/transactions/models.py:707
#: apps/transactions/models.py:947 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:672 apps/transactions/forms.py:933
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:949 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:112
msgid "Entities"
msgstr "Entidades"
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:744 templates/includes/navbar.html:76
#: apps/transactions/models.py:745 templates/includes/navbar.html:76
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr "Transações Recorrentes"
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:523 templates/includes/navbar.html:74
#: apps/transactions/models.py:524 templates/includes/navbar.html:74
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -848,7 +848,7 @@ msgstr "Taxas de Câmbio Automáticas"
msgid "Rules"
msgstr "Regras"
#: apps/export_app/forms.py:86 templates/cotton/transaction/item.html:57
#: apps/export_app/forms.py:86 templates/cotton/transaction/item.html:55
msgid "DCA"
msgstr "CMP"
@@ -883,7 +883,7 @@ msgstr "Ação de editar de transação"
msgid "Update or create transaction actions"
msgstr "Ações de atualizar ou criar transação"
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:159
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -1070,16 +1070,16 @@ msgstr "Operador"
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:297
#: apps/transactions/models.py:465 apps/transactions/models.py:688
#: apps/transactions/models.py:918
#: apps/transactions/models.py:466 apps/transactions/models.py:689
#: apps/transactions/models.py:919
msgid "Type"
msgstr "Tipo"
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:299 apps/transactions/models.py:920
#: templates/cotton/transaction/item.html:22
#: templates/cotton/transaction/item.html:32
#: apps/transactions/models.py:299 apps/transactions/models.py:921
#: templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
msgid "Paid"
@@ -1087,34 +1087,34 @@ 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:481 apps/transactions/forms.py:671
#: apps/transactions/models.py:301 apps/transactions/models.py:483
#: apps/transactions/models.py:712
#: apps/transactions/forms.py:486 apps/transactions/forms.py:678
#: apps/transactions/models.py:301 apps/transactions/models.py:484
#: apps/transactions/models.py:713
msgid "Reference Date"
msgstr "Data de Referência"
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:306
#: apps/transactions/models.py:693 apps/transactions/models.py:925
#: apps/rules/models.py:262 apps/transactions/models.py:307
#: apps/transactions/models.py:694 apps/transactions/models.py:927
#: templates/insights/fragments/sankey.html:95
msgid "Amount"
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:485 apps/transactions/models.py:311
#: apps/transactions/models.py:467 apps/transactions/models.py:696
#: apps/transactions/models.py:930
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
#: apps/transactions/models.py:468 apps/transactions/models.py:697
#: apps/transactions/models.py:932
msgid "Description"
msgstr "Descrição"
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:350 apps/transactions/models.py:952
#: apps/transactions/models.py:351 apps/transactions/models.py:954
msgid "Internal Note"
msgstr "Nota Interna"
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:352 apps/transactions/models.py:954
#: apps/transactions/models.py:353 apps/transactions/models.py:956
msgid "Internal ID"
msgstr "ID Interna"
@@ -1242,8 +1242,8 @@ msgstr "Ação Atualizar ou Criar Transação atualizada com sucesso"
msgid "Update or Create Transaction action deleted successfully"
msgstr "Ação Atualizar ou Criar Transação apagada com sucesso"
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:22
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:46
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1290,41 +1290,48 @@ msgstr ""
msgid "Save and add another"
msgstr ""
#: apps/transactions/forms.py:437
#: apps/transactions/forms.py:300
msgid "Muted transactions won't be displayed on monthly summaries"
msgstr ""
#: apps/transactions/forms.py:442
msgid "From Amount"
msgstr "Quantia de origem"
#: apps/transactions/forms.py:442
#: apps/transactions/forms.py:447
msgid "To Amount"
msgstr "Quantia de destino"
#: apps/transactions/forms.py:559
#: apps/transactions/forms.py:564
#: templates/cotton/ui/quick_transactions_buttons.html:40
#: templates/cotton/ui/transactions_fab.html:44
msgid "Transfer"
msgstr "Transferir"
#: apps/transactions/forms.py:805
#: apps/transactions/forms.py:812
msgid "Tag name"
msgstr "Nome da Tag"
#: apps/transactions/forms.py:837
#: apps/transactions/forms.py:844
msgid "Entity name"
msgstr "Nome da entidade"
#: apps/transactions/forms.py:869
#: apps/transactions/forms.py:876
msgid "Category name"
msgstr "Nome da Categoria"
#: apps/transactions/forms.py:871
msgid "Muted categories won't count towards your monthly total"
#: apps/transactions/forms.py:878
#, 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:1057
#: apps/transactions/forms.py:1064
msgid "End date should be after the start date"
msgstr "Data final deve ser após data inicial"
#: apps/transactions/models.py:211
#: apps/transactions/models.py:211 apps/transactions/models.py:302
#: apps/transactions/models.py:922
msgid "Mute"
msgstr "Silenciada"
@@ -1366,7 +1373,7 @@ msgstr ""
msgid "Entity"
msgstr "Entidade"
#: apps/transactions/models.py:284 apps/transactions/models.py:898
#: apps/transactions/models.py:284 apps/transactions/models.py:899
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1378,7 +1385,7 @@ msgstr "Entidade"
msgid "Income"
msgstr "Renda"
#: apps/transactions/models.py:285 apps/transactions/models.py:899
#: apps/transactions/models.py:285 apps/transactions/models.py:900
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1389,135 +1396,140 @@ msgstr "Renda"
msgid "Expense"
msgstr "Despesa"
#: apps/transactions/models.py:339 apps/transactions/models.py:522
#: apps/transactions/models.py:340 apps/transactions/models.py:523
msgid "Installment Plan"
msgstr "Parcelamento"
#: apps/transactions/models.py:348 apps/transactions/models.py:743
#: apps/transactions/models.py:349 apps/transactions/models.py:744
msgid "Recurring Transaction"
msgstr "Transação Recorrente"
#: apps/transactions/models.py:356
#: apps/transactions/models.py:357
msgid "Deleted"
msgstr "Apagado"
#: apps/transactions/models.py:361
#: apps/transactions/models.py:362
msgid "Deleted At"
msgstr "Apagado Em"
#: apps/transactions/models.py:373
#: apps/transactions/models.py:374
msgid "Transaction"
msgstr "Transação"
#: apps/transactions/models.py:445 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:446 templates/tags/fragments/table.html:71
msgid "No tags"
msgstr "Nenhuma tag"
#: apps/transactions/models.py:446
#: apps/transactions/models.py:447
msgid "No category"
msgstr "Sem categoria"
#: apps/transactions/models.py:448
#: apps/transactions/models.py:449
msgid "No description"
msgstr "Sem descrição"
#: apps/transactions/models.py:454
#: apps/transactions/models.py:455
msgid "Yearly"
msgstr "Anual"
#: apps/transactions/models.py:455 apps/users/models.py:26
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr "Mensal"
#: apps/transactions/models.py:456
#: apps/transactions/models.py:457
msgid "Weekly"
msgstr "Semanal"
#: apps/transactions/models.py:457
#: apps/transactions/models.py:458
msgid "Daily"
msgstr "Diária"
#: apps/transactions/models.py:470
#: apps/transactions/models.py:471
msgid "Number of Installments"
msgstr "Número de Parcelas"
#: apps/transactions/models.py:475
#: apps/transactions/models.py:476
msgid "Installment Start"
msgstr "Parcela inicial"
#: apps/transactions/models.py:476
#: apps/transactions/models.py:477
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:481 apps/transactions/models.py:716
#: apps/transactions/models.py:482 apps/transactions/models.py:717
msgid "Start Date"
msgstr "Data de Início"
#: apps/transactions/models.py:485 apps/transactions/models.py:717
#: apps/transactions/models.py:486 apps/transactions/models.py:718
msgid "End Date"
msgstr "Data Final"
#: apps/transactions/models.py:490
#: apps/transactions/models.py:491
msgid "Recurrence"
msgstr "Recorrência"
#: apps/transactions/models.py:493
#: apps/transactions/models.py:494
msgid "Installment Amount"
msgstr "Valor da Parcela"
#: apps/transactions/models.py:512 apps/transactions/models.py:733
#: apps/transactions/models.py:513 apps/transactions/models.py:734
msgid "Add description to transactions"
msgstr "Adicionar descrição às transações"
#: apps/transactions/models.py:515 apps/transactions/models.py:736
#: apps/transactions/models.py:516 apps/transactions/models.py:737
msgid "Add notes to transactions"
msgstr "Adicionar notas às transações"
#: apps/transactions/models.py:675
#: apps/transactions/models.py:676
msgid "day(s)"
msgstr "dia(s)"
#: apps/transactions/models.py:676
#: apps/transactions/models.py:677
msgid "week(s)"
msgstr "semana(s)"
#: apps/transactions/models.py:677
#: apps/transactions/models.py:678
msgid "month(s)"
msgstr "mês(es)"
#: apps/transactions/models.py:678
#: apps/transactions/models.py:679
msgid "year(s)"
msgstr "ano(s)"
#: apps/transactions/models.py:680
#: apps/transactions/models.py:681
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr "Pausado"
#: apps/transactions/models.py:719
#: apps/transactions/models.py:720
msgid "Recurrence Type"
msgstr "Tipo de recorrência"
#: apps/transactions/models.py:722
#: apps/transactions/models.py:723
msgid "Recurrence Interval"
msgstr "Intervalo de recorrência"
#: apps/transactions/models.py:726
#: apps/transactions/models.py:727
msgid "Last Generated Date"
msgstr "Última data gerada"
#: apps/transactions/models.py:729
#: apps/transactions/models.py:730
msgid "Last Generated Reference Date"
msgstr "Última data de referência gerada"
#: apps/transactions/models.py:964 templates/cotton/ui/transactions_fab.html:59
#: apps/transactions/models.py:966
#: apps/transactions/views/quick_transactions.py:177
#: apps/transactions/views/quick_transactions.py:186
#: apps/transactions/views/quick_transactions.py:188
#: apps/transactions/views/quick_transactions.py:190
#: templates/cotton/ui/transactions_fab.html:59
#, fuzzy
#| msgid "Edit Transaction"
msgid "Quick Transaction"
msgstr "Editar Transação"
#: apps/transactions/models.py:965 templates/includes/navbar.html:72
#: apps/transactions/models.py:967 templates/includes/navbar.html:72
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
#, fuzzy
@@ -1610,7 +1622,8 @@ msgstr "Parcelamento atualizado com sucesso"
msgid "Installment Plan deleted successfully"
msgstr "Parcelamento apagado com sucesso"
#: apps/transactions/views/quick_transactions.py:45 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
#, fuzzy
#| msgid "Rule added successfully"
msgid "Item added successfully"
@@ -1628,7 +1641,7 @@ msgstr "Regra atualizada com sucesso"
msgid "Item deleted successfully"
msgstr "Regra apagada com sucesso"
#: apps/transactions/views/quick_transactions.py:145
#: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully"
@@ -1717,7 +1730,8 @@ msgstr "Permissões"
msgid "Important dates"
msgstr "Datas importantes"
#: apps/users/forms.py:23 apps/users/models.py:13 templates/users/login.html:20
#: apps/users/forms.py:23 apps/users/models.py:451
#: templates/users/login.html:20
msgid "E-mail"
msgstr "E-mail"
@@ -1739,19 +1753,19 @@ msgstr "Essa conta está desativada"
msgid "Default"
msgstr "Padrão"
#: apps/users/forms.py:95 apps/users/models.py:41
#: apps/users/forms.py:95 apps/users/models.py:484
msgid "Date Format"
msgstr "Formato de Data"
#: apps/users/forms.py:100 apps/users/models.py:46
#: apps/users/forms.py:100 apps/users/models.py:489
msgid "Datetime Format"
msgstr "Formato de Data e Hora"
#: apps/users/forms.py:106 apps/users/models.py:49
#: apps/users/forms.py:106 apps/users/models.py:492
msgid "Number Format"
msgstr "Formato de Número"
#: apps/users/forms.py:141
#: apps/users/forms.py:146
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1762,103 +1776,107 @@ msgstr ""
"são exibidos\n"
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
#: apps/users/forms.py:150
#: apps/users/forms.py:155
#, fuzzy
#| msgid "Password"
msgid "New Password"
msgstr "Senha"
#: apps/users/forms.py:153
#: apps/users/forms.py:158
msgid "Leave blank to keep the current password."
msgstr ""
#: apps/users/forms.py:156
#: apps/users/forms.py:161
msgid "Confirm New Password"
msgstr ""
#: apps/users/forms.py:168 apps/users/forms.py:329
#: apps/users/forms.py:173 apps/users/forms.py:334
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr ""
#: apps/users/forms.py:171 apps/users/forms.py:332
#: apps/users/forms.py:176 apps/users/forms.py:337
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
#: apps/users/forms.py:242
#: apps/users/forms.py:247
msgid "This email address is already in use by another account."
msgstr ""
#: apps/users/forms.py:250
#: apps/users/forms.py:255
msgid "The two password fields didn't match."
msgstr ""
#: apps/users/forms.py:252
#: apps/users/forms.py:257
msgid "Please confirm your new password."
msgstr ""
#: apps/users/forms.py:254
#: apps/users/forms.py:259
msgid "Please enter the new password first."
msgstr ""
#: apps/users/forms.py:274
#: apps/users/forms.py:279
msgid "You cannot deactivate your own account using this form."
msgstr ""
#: apps/users/forms.py:287
#: apps/users/forms.py:292
msgid "Cannot remove status from the last superuser."
msgstr ""
#: apps/users/forms.py:293
#: apps/users/forms.py:298
msgid "You cannot remove your own superuser status using this form."
msgstr ""
#: apps/users/forms.py:390
#: apps/users/forms.py:395
#, fuzzy
#| msgid "A value for this field already exists in the rule."
msgid "A user with this email address already exists."
msgstr "Já existe um valor para esse campo na regra."
#: apps/users/models.py:27 templates/includes/navbar.html:28
msgid "Yearly by currency"
msgstr "Anual por moeda"
#: apps/users/models.py:28 templates/includes/navbar.html:30
msgid "Yearly by account"
msgstr "Anual por conta"
#: apps/users/models.py:29 templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr "Patrimônio Atual"
#: apps/users/models.py:30 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr "Patrimônio Previsto"
#: apps/users/models.py:31
msgid "All Transactions"
msgstr "Todas as transações"
#: apps/users/models.py:32 templates/includes/navbar.html:32
msgid "Calendar"
msgstr "Calendário"
#: apps/users/models.py:54 apps/users/models.py:60
#: apps/users/models.py:12 apps/users/models.py:497
msgid "Auto"
msgstr "Automático"
#: apps/users/models.py:56
#: apps/users/models.py:465 templates/includes/navbar.html:28
msgid "Yearly by currency"
msgstr "Anual por moeda"
#: apps/users/models.py:466 templates/includes/navbar.html:30
msgid "Yearly by account"
msgstr "Anual por conta"
#: apps/users/models.py:467 templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr "Patrimônio Atual"
#: apps/users/models.py:468 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr "Patrimônio Previsto"
#: apps/users/models.py:469
msgid "All Transactions"
msgstr "Todas as transações"
#: apps/users/models.py:470 templates/includes/navbar.html:32
msgid "Calendar"
msgstr "Calendário"
#: apps/users/models.py:480
msgid "Volume"
msgstr ""
#: apps/users/models.py:499
msgid "Language"
msgstr "Linguagem"
#: apps/users/models.py:62
#: apps/users/models.py:505
msgid "Time Zone"
msgstr "Fuso horário"
#: apps/users/models.py:68
#: apps/users/models.py:511
msgid "Start page"
msgstr "Página inicial"
@@ -1912,8 +1930,8 @@ msgstr "Ações"
#: templates/account_groups/fragments/list.html:36
#: templates/accounts/fragments/list.html:41
#: templates/categories/fragments/table.html:29
#: templates/cotton/transaction/item.html:131
#: templates/cotton/ui/transactions_action_bar.html:49
#: templates/cotton/transaction/item.html:129
#: templates/cotton/ui/transactions_action_bar.html:52
#: templates/currencies/fragments/list.html:37
#: templates/dca/fragments/strategy/details.html:67
#: templates/dca/fragments/strategy/list.html:36
@@ -1936,10 +1954,10 @@ msgstr "Editar"
#: templates/account_groups/fragments/list.html:43
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:146
#: templates/cotton/transaction/item.html:165
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:178
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:86
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/currencies/fragments/list.html:44
#: templates/dca/fragments/strategy/details.html:75
#: templates/dca/fragments/strategy/list.html:44
@@ -1963,10 +1981,10 @@ msgstr "Apagar"
#: templates/account_groups/fragments/list.html:47
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:150
#: templates/cotton/transaction/item.html:169
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:182
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:88
#: templates/cotton/ui/transactions_action_bar.html:91
#: templates/currencies/fragments/list.html:48
#: templates/dca/fragments/strategy/details.html:80
#: templates/dca/fragments/strategy/list.html:48
@@ -1993,10 +2011,10 @@ msgstr "Tem certeza?"
#: templates/account_groups/fragments/list.html:48
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:151
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:183
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:49
#: templates/dca/fragments/strategy/details.html:81
#: templates/dca/fragments/strategy/list.html:49
@@ -2015,8 +2033,8 @@ msgstr "Você não será capaz de reverter isso!"
#: templates/account_groups/fragments/list.html:49
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:152
#: templates/cotton/transaction/item.html:171
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:184
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2177,8 +2195,29 @@ msgstr "Buscar"
msgid "Select"
msgstr "Selecionar"
#: templates/cotton/transaction/item.html:138
#: templates/cotton/ui/transactions_action_bar.html:78
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
msgid "Show on summaries"
msgstr ""
#: templates/cotton/transaction/item.html:155
#, fuzzy
#| msgid "No category"
msgid "Controlled by category"
msgstr "Sem categoria"
#: templates/cotton/transaction/item.html:162
msgid "Hide from summaries"
msgstr ""
#: templates/cotton/transaction/item.html:164
#, fuzzy
#| msgid "Add recurring transaction"
msgid "Add as quick transaction"
msgstr "Adicionar transação recorrente"
#: templates/cotton/transaction/item.html:166
#: templates/cotton/ui/transactions_action_bar.html:81
msgid "Duplicate"
msgstr "Duplicar"
@@ -2218,17 +2257,17 @@ msgid "final total"
msgstr "total final"
#: templates/cotton/ui/deleted_transactions_action_bar.html:31
#: templates/cotton/ui/transactions_action_bar.html:31
#: templates/cotton/ui/transactions_action_bar.html:34
msgid "Select All"
msgstr "Selecionar todos"
#: templates/cotton/ui/deleted_transactions_action_bar.html:37
#: templates/cotton/ui/transactions_action_bar.html:37
#: templates/cotton/ui/transactions_action_bar.html:40
msgid "Unselect All"
msgstr "Desmarcar todos"
#: templates/cotton/ui/deleted_transactions_action_bar.html:59
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/cotton/ui/transactions_action_bar.html:93
msgid "Yes, delete them!"
msgstr "Sim, apague!"
@@ -2239,49 +2278,49 @@ msgstr "Sim, apague!"
#: templates/cotton/ui/deleted_transactions_action_bar.html:189
#: templates/cotton/ui/deleted_transactions_action_bar.html:209
#: templates/cotton/ui/deleted_transactions_action_bar.html:229
#: templates/cotton/ui/transactions_action_bar.html:136
#: templates/cotton/ui/transactions_action_bar.html:160
#: templates/cotton/ui/transactions_action_bar.html:180
#: templates/cotton/ui/transactions_action_bar.html:200
#: templates/cotton/ui/transactions_action_bar.html:220
#: templates/cotton/ui/transactions_action_bar.html:240
#: templates/cotton/ui/transactions_action_bar.html:260
#: templates/cotton/ui/transactions_action_bar.html:139
#: templates/cotton/ui/transactions_action_bar.html:163
#: templates/cotton/ui/transactions_action_bar.html:183
#: templates/cotton/ui/transactions_action_bar.html:203
#: templates/cotton/ui/transactions_action_bar.html:223
#: templates/cotton/ui/transactions_action_bar.html:243
#: templates/cotton/ui/transactions_action_bar.html:263
msgid "copied!"
msgstr "copiado!"
#: templates/cotton/ui/deleted_transactions_action_bar.html:114
#: templates/cotton/ui/transactions_action_bar.html:54
#: templates/cotton/ui/transactions_action_bar.html:145
#: templates/cotton/ui/transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:148
msgid "Toggle Dropdown"
msgstr "Alternar menu suspenso"
#: templates/cotton/ui/deleted_transactions_action_bar.html:122
#: templates/cotton/ui/transactions_action_bar.html:153
#: templates/cotton/ui/transactions_action_bar.html:156
msgid "Flat Total"
msgstr "Total Fixo"
#: templates/cotton/ui/deleted_transactions_action_bar.html:142
#: templates/cotton/ui/transactions_action_bar.html:173
#: templates/cotton/ui/transactions_action_bar.html:176
msgid "Real Total"
msgstr "Total Real"
#: templates/cotton/ui/deleted_transactions_action_bar.html:162
#: templates/cotton/ui/transactions_action_bar.html:193
#: templates/cotton/ui/transactions_action_bar.html:196
msgid "Mean"
msgstr "Média"
#: templates/cotton/ui/deleted_transactions_action_bar.html:182
#: templates/cotton/ui/transactions_action_bar.html:213
#: templates/cotton/ui/transactions_action_bar.html:216
msgid "Max"
msgstr "Máximo"
#: templates/cotton/ui/deleted_transactions_action_bar.html:202
#: templates/cotton/ui/transactions_action_bar.html:233
#: templates/cotton/ui/transactions_action_bar.html:236
msgid "Min"
msgstr "Minímo"
#: templates/cotton/ui/deleted_transactions_action_bar.html:222
#: templates/cotton/ui/transactions_action_bar.html:253
#: templates/cotton/ui/transactions_action_bar.html:256
msgid "Count"
msgstr "Contagem"
@@ -2300,11 +2339,11 @@ msgstr "Recorrência"
msgid "Balance"
msgstr "Balancear"
#: templates/cotton/ui/transactions_action_bar.html:62
#: templates/cotton/ui/transactions_action_bar.html:65
msgid "Mark as unpaid"
msgstr "Marcar como não pago"
#: templates/cotton/ui/transactions_action_bar.html:69
#: templates/cotton/ui/transactions_action_bar.html:72
msgid "Mark as paid"
msgstr "Marcar como pago"
@@ -2672,25 +2711,31 @@ msgstr "Só use isso se você souber o que está fazendo"
msgid "Django Admin"
msgstr "Django Admin"
#: templates/includes/navbar.html:167
#: templates/includes/navbar.html:167 templates/includes/navbar.html:170
msgid "Calculator"
msgstr "Calculadora"
#: templates/includes/navbar/user_menu.html:14
#: templates/includes/navbar/user_menu.html:6
#, fuzzy
#| msgid "Import Profiles"
msgid "Profile"
msgstr "Perfis de Importação"
#: templates/includes/navbar/user_menu.html:15
msgid "Settings"
msgstr "Configurações"
#: templates/includes/navbar/user_menu.html:19
#: templates/includes/navbar/user_menu.html:20
#, fuzzy
#| msgid "Edit import profile"
msgid "Edit profile"
msgstr "Editar perfil de importação"
#: templates/includes/navbar/user_menu.html:46
#: templates/includes/navbar/user_menu.html:47
msgid "Clear cache"
msgstr "Limpar cache"
#: templates/includes/navbar/user_menu.html:50
#: templates/includes/navbar/user_menu.html:51
msgid "Logout"
msgstr "Sair"
@@ -2998,25 +3043,25 @@ msgstr "Mais antigas primeiro"
msgid "Newest first"
msgstr "Mais novas primeiro"
#: templates/net_worth/net_worth.html:17
#: templates/net_worth/net_worth.html:18
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr "Por moeda"
#: templates/net_worth/net_worth.html:52
#: templates/net_worth/net_worth.html:53
msgid "Consolidated"
msgstr "Consolidado"
#: templates/net_worth/net_worth.html:81
#: templates/net_worth/net_worth.html:82
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr "Por conta"
#: templates/net_worth/net_worth.html:188
#: templates/net_worth/net_worth.html:189
msgid "Evolution by currency"
msgstr "Evolução por moeda"
#: templates/net_worth/net_worth.html:252
#: templates/net_worth/net_worth.html:253
msgid "Evolution by account"
msgstr "Evolução por conta"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-06-20 05:07+0000\n"
"POT-Creation-Date: 2025-07-19 19:24+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/"
@@ -28,11 +28,11 @@ msgstr ""
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
#: apps/transactions/forms.py:776 apps/transactions/forms.py:819
#: apps/transactions/forms.py:851 apps/transactions/forms.py:886
#: apps/transactions/forms.py:1038 apps/users/forms.py:210
#: apps/users/forms.py:372
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:783 apps/transactions/forms.py:826
#: apps/transactions/forms.py:858 apps/transactions/forms.py:893
#: apps/transactions/forms.py:1045 apps/users/forms.py:215
#: apps/users/forms.py:377
msgid "Update"
msgstr "Uppdatera"
@@ -42,10 +42,10 @@ msgstr "Uppdatera"
#: 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:378 apps/transactions/forms.py:784
#: apps/transactions/forms.py:827 apps/transactions/forms.py:859
#: apps/transactions/forms.py:894 apps/transactions/forms.py:1046
#: apps/users/forms.py:218 apps/users/forms.py:380
#: apps/transactions/forms.py:383 apps/transactions/forms.py:791
#: apps/transactions/forms.py:834 apps/transactions/forms.py:866
#: apps/transactions/forms.py:901 apps/transactions/forms.py:1053
#: apps/users/forms.py:223 apps/users/forms.py:385
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -78,10 +78,10 @@ msgstr ""
#: 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:450 apps/transactions/forms.py:457
#: apps/transactions/forms.py:657 apps/transactions/forms.py:918
#: apps/transactions/models.py:317 apps/transactions/models.py:500
#: apps/transactions/models.py:700 apps/transactions/models.py:936
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
#: apps/transactions/forms.py:664 apps/transactions/forms.py:925
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:938
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
msgid "Category"
@@ -92,10 +92,10 @@ msgstr ""
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
#: apps/transactions/forms.py:650 apps/transactions/forms.py:911
#: apps/transactions/models.py:323 apps/transactions/models.py:502
#: apps/transactions/models.py:704 apps/transactions/models.py:942
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:657 apps/transactions/forms.py:918
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:944
#: templates/includes/navbar.html:110
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
@@ -105,7 +105,7 @@ msgstr ""
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:210 apps/transactions/models.py:235
#: apps/transactions/models.py:259 apps/transactions/models.py:905
#: apps/transactions/models.py:259 apps/transactions/models.py:906
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -169,9 +169,9 @@ msgstr ""
#: apps/accounts/models.py:70 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:642 apps/transactions/forms.py:903
#: apps/transactions/models.py:290 apps/transactions/models.py:460
#: apps/transactions/models.py:682 apps/transactions/models.py:911
#: apps/transactions/forms.py:649 apps/transactions/forms.py:910
#: apps/transactions/models.py:290 apps/transactions/models.py:461
#: apps/transactions/models.py:683 apps/transactions/models.py:912
msgid "Account"
msgstr ""
@@ -329,7 +329,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr ""
#: apps/common/forms.py:80 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:140
msgid "Save"
msgstr ""
@@ -428,12 +428,12 @@ msgstr ""
msgid "Cache cleared successfully"
msgstr ""
#: apps/common/widgets/datepicker.py:53 apps/common/widgets/datepicker.py:206
#: apps/common/widgets/datepicker.py:264
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
msgid "Today"
msgstr ""
#: apps/common/widgets/datepicker.py:139
#: apps/common/widgets/datepicker.py:141
msgid "Now"
msgstr ""
@@ -462,7 +462,7 @@ msgstr ""
#: apps/currencies/forms.py:69 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:478
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
#: apps/transactions/models.py:300
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
@@ -665,11 +665,11 @@ msgstr ""
msgid "Create transaction"
msgstr ""
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
msgid "From Account"
msgstr ""
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
msgid "To Account"
msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
msgid "You must provide an account."
msgstr ""
#: apps/dca/forms.py:312 apps/transactions/forms.py:592
#: apps/dca/forms.py:312 apps/transactions/forms.py:597
msgid "From and To accounts must be different."
msgstr ""
@@ -713,9 +713,9 @@ 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:494 apps/transactions/models.py:313
#: apps/transactions/models.py:509 apps/transactions/models.py:710
#: apps/transactions/models.py:932
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
#: apps/transactions/models.py:510 apps/transactions/models.py:711
#: apps/transactions/models.py:934
msgid "Notes"
msgstr ""
@@ -778,7 +778,7 @@ msgid "Users"
msgstr ""
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:374 templates/includes/navbar.html:57
#: apps/transactions/models.py:375 templates/includes/navbar.html:57
#: templates/includes/navbar.html:106
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -796,23 +796,23 @@ 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:81
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:665 apps/transactions/forms.py:926
#: apps/transactions/models.py:273 apps/transactions/models.py:328
#: apps/transactions/models.py:505 apps/transactions/models.py:707
#: apps/transactions/models.py:947 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:672 apps/transactions/forms.py:933
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:949 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:112
msgid "Entities"
msgstr ""
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:744 templates/includes/navbar.html:76
#: apps/transactions/models.py:745 templates/includes/navbar.html:76
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr ""
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:523 templates/includes/navbar.html:74
#: apps/transactions/models.py:524 templates/includes/navbar.html:74
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -830,7 +830,7 @@ msgstr ""
msgid "Rules"
msgstr ""
#: apps/export_app/forms.py:86 templates/cotton/transaction/item.html:57
#: apps/export_app/forms.py:86 templates/cotton/transaction/item.html:55
msgid "DCA"
msgstr ""
@@ -865,7 +865,7 @@ msgstr ""
msgid "Update or create transaction actions"
msgstr ""
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:159
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -1050,16 +1050,16 @@ msgstr ""
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:297
#: apps/transactions/models.py:465 apps/transactions/models.py:688
#: apps/transactions/models.py:918
#: apps/transactions/models.py:466 apps/transactions/models.py:689
#: apps/transactions/models.py:919
msgid "Type"
msgstr ""
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:299 apps/transactions/models.py:920
#: templates/cotton/transaction/item.html:22
#: templates/cotton/transaction/item.html:32
#: apps/transactions/models.py:299 apps/transactions/models.py:921
#: templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
msgid "Paid"
@@ -1067,34 +1067,34 @@ 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:481 apps/transactions/forms.py:671
#: apps/transactions/models.py:301 apps/transactions/models.py:483
#: apps/transactions/models.py:712
#: apps/transactions/forms.py:486 apps/transactions/forms.py:678
#: apps/transactions/models.py:301 apps/transactions/models.py:484
#: apps/transactions/models.py:713
msgid "Reference Date"
msgstr ""
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:306
#: apps/transactions/models.py:693 apps/transactions/models.py:925
#: apps/rules/models.py:262 apps/transactions/models.py:307
#: apps/transactions/models.py:694 apps/transactions/models.py:927
#: templates/insights/fragments/sankey.html:95
msgid "Amount"
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:485 apps/transactions/models.py:311
#: apps/transactions/models.py:467 apps/transactions/models.py:696
#: apps/transactions/models.py:930
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
#: apps/transactions/models.py:468 apps/transactions/models.py:697
#: apps/transactions/models.py:932
msgid "Description"
msgstr ""
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:350 apps/transactions/models.py:952
#: apps/transactions/models.py:351 apps/transactions/models.py:954
msgid "Internal Note"
msgstr ""
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:352 apps/transactions/models.py:954
#: apps/transactions/models.py:353 apps/transactions/models.py:956
msgid "Internal ID"
msgstr ""
@@ -1220,8 +1220,8 @@ msgstr ""
msgid "Update or Create Transaction action deleted successfully"
msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:22
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:46
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1268,41 +1268,46 @@ msgstr ""
msgid "Save and add another"
msgstr ""
#: apps/transactions/forms.py:437
msgid "From Amount"
#: apps/transactions/forms.py:300
msgid "Muted transactions won't be displayed on monthly summaries"
msgstr ""
#: apps/transactions/forms.py:442
msgid "From Amount"
msgstr ""
#: apps/transactions/forms.py:447
msgid "To Amount"
msgstr ""
#: apps/transactions/forms.py:559
#: apps/transactions/forms.py:564
#: templates/cotton/ui/quick_transactions_buttons.html:40
#: templates/cotton/ui/transactions_fab.html:44
msgid "Transfer"
msgstr ""
#: apps/transactions/forms.py:805
#: apps/transactions/forms.py:812
msgid "Tag name"
msgstr ""
#: apps/transactions/forms.py:837
#: apps/transactions/forms.py:844
msgid "Entity name"
msgstr ""
#: apps/transactions/forms.py:869
#: apps/transactions/forms.py:876
msgid "Category name"
msgstr ""
#: apps/transactions/forms.py:871
msgid "Muted categories won't count towards your monthly total"
#: apps/transactions/forms.py:878
msgid "Muted categories won't be displayed on monthly summaries"
msgstr ""
#: apps/transactions/forms.py:1057
#: apps/transactions/forms.py:1064
msgid "End date should be after the start date"
msgstr ""
#: apps/transactions/models.py:211
#: apps/transactions/models.py:211 apps/transactions/models.py:302
#: apps/transactions/models.py:922
msgid "Mute"
msgstr ""
@@ -1339,7 +1344,7 @@ msgstr ""
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:284 apps/transactions/models.py:898
#: apps/transactions/models.py:284 apps/transactions/models.py:899
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1351,7 +1356,7 @@ msgstr ""
msgid "Income"
msgstr ""
#: apps/transactions/models.py:285 apps/transactions/models.py:899
#: apps/transactions/models.py:285 apps/transactions/models.py:900
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1362,133 +1367,138 @@ msgstr ""
msgid "Expense"
msgstr ""
#: apps/transactions/models.py:339 apps/transactions/models.py:522
#: apps/transactions/models.py:340 apps/transactions/models.py:523
msgid "Installment Plan"
msgstr ""
#: apps/transactions/models.py:348 apps/transactions/models.py:743
#: apps/transactions/models.py:349 apps/transactions/models.py:744
msgid "Recurring Transaction"
msgstr ""
#: apps/transactions/models.py:356
#: apps/transactions/models.py:357
msgid "Deleted"
msgstr ""
#: apps/transactions/models.py:361
#: apps/transactions/models.py:362
msgid "Deleted At"
msgstr ""
#: apps/transactions/models.py:373
#: apps/transactions/models.py:374
msgid "Transaction"
msgstr ""
#: apps/transactions/models.py:445 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:446 templates/tags/fragments/table.html:71
msgid "No tags"
msgstr ""
#: apps/transactions/models.py:446
#: apps/transactions/models.py:447
msgid "No category"
msgstr ""
#: apps/transactions/models.py:448
#: apps/transactions/models.py:449
msgid "No description"
msgstr ""
#: apps/transactions/models.py:454
#: apps/transactions/models.py:455
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:455 apps/users/models.py:26
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr ""
#: apps/transactions/models.py:456
#: apps/transactions/models.py:457
msgid "Weekly"
msgstr ""
#: apps/transactions/models.py:457
#: apps/transactions/models.py:458
msgid "Daily"
msgstr ""
#: apps/transactions/models.py:470
#: apps/transactions/models.py:471
msgid "Number of Installments"
msgstr ""
#: apps/transactions/models.py:475
#: apps/transactions/models.py:476
msgid "Installment Start"
msgstr ""
#: apps/transactions/models.py:476
#: apps/transactions/models.py:477
msgid "The installment number to start counting from"
msgstr ""
#: apps/transactions/models.py:481 apps/transactions/models.py:716
#: apps/transactions/models.py:482 apps/transactions/models.py:717
msgid "Start Date"
msgstr ""
#: apps/transactions/models.py:485 apps/transactions/models.py:717
#: apps/transactions/models.py:486 apps/transactions/models.py:718
msgid "End Date"
msgstr ""
#: apps/transactions/models.py:490
#: apps/transactions/models.py:491
msgid "Recurrence"
msgstr ""
#: apps/transactions/models.py:493
#: apps/transactions/models.py:494
msgid "Installment Amount"
msgstr ""
#: apps/transactions/models.py:512 apps/transactions/models.py:733
#: apps/transactions/models.py:513 apps/transactions/models.py:734
msgid "Add description to transactions"
msgstr ""
#: apps/transactions/models.py:515 apps/transactions/models.py:736
#: apps/transactions/models.py:516 apps/transactions/models.py:737
msgid "Add notes to transactions"
msgstr ""
#: apps/transactions/models.py:675
#: apps/transactions/models.py:676
msgid "day(s)"
msgstr ""
#: apps/transactions/models.py:676
#: apps/transactions/models.py:677
msgid "week(s)"
msgstr ""
#: apps/transactions/models.py:677
#: apps/transactions/models.py:678
msgid "month(s)"
msgstr ""
#: apps/transactions/models.py:678
#: apps/transactions/models.py:679
msgid "year(s)"
msgstr ""
#: apps/transactions/models.py:680
#: apps/transactions/models.py:681
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr ""
#: apps/transactions/models.py:719
#: apps/transactions/models.py:720
msgid "Recurrence Type"
msgstr ""
#: apps/transactions/models.py:722
#: apps/transactions/models.py:723
msgid "Recurrence Interval"
msgstr ""
#: apps/transactions/models.py:726
#: apps/transactions/models.py:727
msgid "Last Generated Date"
msgstr ""
#: apps/transactions/models.py:729
#: apps/transactions/models.py:730
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:964 templates/cotton/ui/transactions_fab.html:59
#: apps/transactions/models.py:966
#: apps/transactions/views/quick_transactions.py:177
#: apps/transactions/views/quick_transactions.py:186
#: apps/transactions/views/quick_transactions.py:188
#: apps/transactions/views/quick_transactions.py:190
#: templates/cotton/ui/transactions_fab.html:59
msgid "Quick Transaction"
msgstr ""
#: apps/transactions/models.py:965 templates/includes/navbar.html:72
#: apps/transactions/models.py:967 templates/includes/navbar.html:72
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1579,7 +1589,8 @@ msgstr ""
msgid "Installment Plan deleted successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:45 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
msgid "Item added successfully"
msgstr ""
@@ -1591,7 +1602,7 @@ msgstr ""
msgid "Item deleted successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:145
#: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully"
@@ -1680,7 +1691,8 @@ msgstr ""
msgid "Important dates"
msgstr ""
#: apps/users/forms.py:23 apps/users/models.py:13 templates/users/login.html:20
#: apps/users/forms.py:23 apps/users/models.py:451
#: templates/users/login.html:20
msgid "E-mail"
msgstr ""
@@ -1702,19 +1714,19 @@ msgstr ""
msgid "Default"
msgstr ""
#: apps/users/forms.py:95 apps/users/models.py:41
#: apps/users/forms.py:95 apps/users/models.py:484
msgid "Date Format"
msgstr ""
#: apps/users/forms.py:100 apps/users/models.py:46
#: apps/users/forms.py:100 apps/users/models.py:489
msgid "Datetime Format"
msgstr ""
#: apps/users/forms.py:106 apps/users/models.py:49
#: apps/users/forms.py:106 apps/users/models.py:492
msgid "Number Format"
msgstr ""
#: apps/users/forms.py:141
#: apps/users/forms.py:146
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1722,99 +1734,103 @@ msgid ""
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr ""
#: apps/users/forms.py:150
#: apps/users/forms.py:155
msgid "New Password"
msgstr ""
#: apps/users/forms.py:153
#: apps/users/forms.py:158
msgid "Leave blank to keep the current password."
msgstr ""
#: apps/users/forms.py:156
#: apps/users/forms.py:161
msgid "Confirm New Password"
msgstr ""
#: apps/users/forms.py:168 apps/users/forms.py:329
#: apps/users/forms.py:173 apps/users/forms.py:334
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr ""
#: apps/users/forms.py:171 apps/users/forms.py:332
#: apps/users/forms.py:176 apps/users/forms.py:337
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
#: apps/users/forms.py:242
#: apps/users/forms.py:247
msgid "This email address is already in use by another account."
msgstr ""
#: apps/users/forms.py:250
#: apps/users/forms.py:255
msgid "The two password fields didn't match."
msgstr ""
#: apps/users/forms.py:252
#: apps/users/forms.py:257
msgid "Please confirm your new password."
msgstr ""
#: apps/users/forms.py:254
#: apps/users/forms.py:259
msgid "Please enter the new password first."
msgstr ""
#: apps/users/forms.py:274
#: apps/users/forms.py:279
msgid "You cannot deactivate your own account using this form."
msgstr ""
#: apps/users/forms.py:287
#: apps/users/forms.py:292
msgid "Cannot remove status from the last superuser."
msgstr ""
#: apps/users/forms.py:293
#: apps/users/forms.py:298
msgid "You cannot remove your own superuser status using this form."
msgstr ""
#: apps/users/forms.py:390
#: apps/users/forms.py:395
msgid "A user with this email address already exists."
msgstr ""
#: apps/users/models.py:27 templates/includes/navbar.html:28
msgid "Yearly by currency"
msgstr ""
#: apps/users/models.py:28 templates/includes/navbar.html:30
msgid "Yearly by account"
msgstr ""
#: apps/users/models.py:29 templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr ""
#: apps/users/models.py:30 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr ""
#: apps/users/models.py:31
msgid "All Transactions"
msgstr ""
#: apps/users/models.py:32 templates/includes/navbar.html:32
msgid "Calendar"
msgstr ""
#: apps/users/models.py:54 apps/users/models.py:60
#: apps/users/models.py:12 apps/users/models.py:497
msgid "Auto"
msgstr ""
#: apps/users/models.py:56
#: apps/users/models.py:465 templates/includes/navbar.html:28
msgid "Yearly by currency"
msgstr ""
#: apps/users/models.py:466 templates/includes/navbar.html:30
msgid "Yearly by account"
msgstr ""
#: apps/users/models.py:467 templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr ""
#: apps/users/models.py:468 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr ""
#: apps/users/models.py:469
msgid "All Transactions"
msgstr ""
#: apps/users/models.py:470 templates/includes/navbar.html:32
msgid "Calendar"
msgstr ""
#: apps/users/models.py:480
msgid "Volume"
msgstr ""
#: apps/users/models.py:499
msgid "Language"
msgstr ""
#: apps/users/models.py:62
#: apps/users/models.py:505
msgid "Time Zone"
msgstr ""
#: apps/users/models.py:68
#: apps/users/models.py:511
msgid "Start page"
msgstr ""
@@ -1868,8 +1884,8 @@ msgstr ""
#: templates/account_groups/fragments/list.html:36
#: templates/accounts/fragments/list.html:41
#: templates/categories/fragments/table.html:29
#: templates/cotton/transaction/item.html:131
#: templates/cotton/ui/transactions_action_bar.html:49
#: templates/cotton/transaction/item.html:129
#: templates/cotton/ui/transactions_action_bar.html:52
#: templates/currencies/fragments/list.html:37
#: templates/dca/fragments/strategy/details.html:67
#: templates/dca/fragments/strategy/list.html:36
@@ -1892,10 +1908,10 @@ msgstr ""
#: templates/account_groups/fragments/list.html:43
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:146
#: templates/cotton/transaction/item.html:165
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:178
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:86
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/currencies/fragments/list.html:44
#: templates/dca/fragments/strategy/details.html:75
#: templates/dca/fragments/strategy/list.html:44
@@ -1919,10 +1935,10 @@ msgstr ""
#: templates/account_groups/fragments/list.html:47
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:150
#: templates/cotton/transaction/item.html:169
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:182
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:88
#: templates/cotton/ui/transactions_action_bar.html:91
#: templates/currencies/fragments/list.html:48
#: templates/dca/fragments/strategy/details.html:80
#: templates/dca/fragments/strategy/list.html:48
@@ -1949,10 +1965,10 @@ msgstr ""
#: templates/account_groups/fragments/list.html:48
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:151
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:183
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:49
#: templates/dca/fragments/strategy/details.html:81
#: templates/dca/fragments/strategy/list.html:49
@@ -1971,8 +1987,8 @@ msgstr ""
#: templates/account_groups/fragments/list.html:49
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:152
#: templates/cotton/transaction/item.html:171
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:184
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2133,8 +2149,25 @@ msgstr ""
msgid "Select"
msgstr ""
#: templates/cotton/transaction/item.html:138
#: templates/cotton/ui/transactions_action_bar.html:78
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
msgid "Show on summaries"
msgstr ""
#: templates/cotton/transaction/item.html:155
msgid "Controlled by category"
msgstr ""
#: templates/cotton/transaction/item.html:162
msgid "Hide from summaries"
msgstr ""
#: templates/cotton/transaction/item.html:164
msgid "Add as quick transaction"
msgstr ""
#: templates/cotton/transaction/item.html:166
#: templates/cotton/ui/transactions_action_bar.html:81
msgid "Duplicate"
msgstr ""
@@ -2174,17 +2207,17 @@ msgid "final total"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:31
#: templates/cotton/ui/transactions_action_bar.html:31
#: templates/cotton/ui/transactions_action_bar.html:34
msgid "Select All"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:37
#: templates/cotton/ui/transactions_action_bar.html:37
#: templates/cotton/ui/transactions_action_bar.html:40
msgid "Unselect All"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:59
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/cotton/ui/transactions_action_bar.html:93
msgid "Yes, delete them!"
msgstr ""
@@ -2195,49 +2228,49 @@ msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:189
#: templates/cotton/ui/deleted_transactions_action_bar.html:209
#: templates/cotton/ui/deleted_transactions_action_bar.html:229
#: templates/cotton/ui/transactions_action_bar.html:136
#: templates/cotton/ui/transactions_action_bar.html:160
#: templates/cotton/ui/transactions_action_bar.html:180
#: templates/cotton/ui/transactions_action_bar.html:200
#: templates/cotton/ui/transactions_action_bar.html:220
#: templates/cotton/ui/transactions_action_bar.html:240
#: templates/cotton/ui/transactions_action_bar.html:260
#: templates/cotton/ui/transactions_action_bar.html:139
#: templates/cotton/ui/transactions_action_bar.html:163
#: templates/cotton/ui/transactions_action_bar.html:183
#: templates/cotton/ui/transactions_action_bar.html:203
#: templates/cotton/ui/transactions_action_bar.html:223
#: templates/cotton/ui/transactions_action_bar.html:243
#: templates/cotton/ui/transactions_action_bar.html:263
msgid "copied!"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:114
#: templates/cotton/ui/transactions_action_bar.html:54
#: templates/cotton/ui/transactions_action_bar.html:145
#: templates/cotton/ui/transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:148
msgid "Toggle Dropdown"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:122
#: templates/cotton/ui/transactions_action_bar.html:153
#: templates/cotton/ui/transactions_action_bar.html:156
msgid "Flat Total"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:142
#: templates/cotton/ui/transactions_action_bar.html:173
#: templates/cotton/ui/transactions_action_bar.html:176
msgid "Real Total"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:162
#: templates/cotton/ui/transactions_action_bar.html:193
#: templates/cotton/ui/transactions_action_bar.html:196
msgid "Mean"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:182
#: templates/cotton/ui/transactions_action_bar.html:213
#: templates/cotton/ui/transactions_action_bar.html:216
msgid "Max"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:202
#: templates/cotton/ui/transactions_action_bar.html:233
#: templates/cotton/ui/transactions_action_bar.html:236
msgid "Min"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:222
#: templates/cotton/ui/transactions_action_bar.html:253
#: templates/cotton/ui/transactions_action_bar.html:256
msgid "Count"
msgstr ""
@@ -2256,11 +2289,11 @@ msgstr ""
msgid "Balance"
msgstr ""
#: templates/cotton/ui/transactions_action_bar.html:62
#: templates/cotton/ui/transactions_action_bar.html:65
msgid "Mark as unpaid"
msgstr ""
#: templates/cotton/ui/transactions_action_bar.html:69
#: templates/cotton/ui/transactions_action_bar.html:72
msgid "Mark as paid"
msgstr ""
@@ -2625,23 +2658,27 @@ msgstr ""
msgid "Django Admin"
msgstr ""
#: templates/includes/navbar.html:167
#: templates/includes/navbar.html:167 templates/includes/navbar.html:170
msgid "Calculator"
msgstr ""
#: templates/includes/navbar/user_menu.html:14
#: templates/includes/navbar/user_menu.html:6
msgid "Profile"
msgstr ""
#: templates/includes/navbar/user_menu.html:15
msgid "Settings"
msgstr ""
#: templates/includes/navbar/user_menu.html:19
#: templates/includes/navbar/user_menu.html:20
msgid "Edit profile"
msgstr ""
#: templates/includes/navbar/user_menu.html:46
#: templates/includes/navbar/user_menu.html:47
msgid "Clear cache"
msgstr ""
#: templates/includes/navbar/user_menu.html:50
#: templates/includes/navbar/user_menu.html:51
msgid "Logout"
msgstr ""
@@ -2942,25 +2979,25 @@ msgstr ""
msgid "Newest first"
msgstr ""
#: templates/net_worth/net_worth.html:17
#: templates/net_worth/net_worth.html:18
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr ""
#: templates/net_worth/net_worth.html:52
#: templates/net_worth/net_worth.html:53
msgid "Consolidated"
msgstr ""
#: templates/net_worth/net_worth.html:81
#: templates/net_worth/net_worth.html:82
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr ""
#: templates/net_worth/net_worth.html:188
#: templates/net_worth/net_worth.html:189
msgid "Evolution by currency"
msgstr ""
#: templates/net_worth/net_worth.html:252
#: templates/net_worth/net_worth.html:253
msgid "Evolution by account"
msgstr ""

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-06-20 05:07+0000\n"
"POT-Creation-Date: 2025-07-19 19:24+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/"
@@ -29,11 +29,11 @@ msgstr "Назва групи"
#: apps/currencies/forms.py:142 apps/dca/forms.py:49 apps/dca/forms.py:224
#: apps/import_app/forms.py:34 apps/rules/forms.py:51 apps/rules/forms.py:93
#: apps/rules/forms.py:365 apps/transactions/forms.py:204
#: apps/transactions/forms.py:369 apps/transactions/forms.py:416
#: apps/transactions/forms.py:776 apps/transactions/forms.py:819
#: apps/transactions/forms.py:851 apps/transactions/forms.py:886
#: apps/transactions/forms.py:1038 apps/users/forms.py:210
#: apps/users/forms.py:372
#: apps/transactions/forms.py:374 apps/transactions/forms.py:421
#: apps/transactions/forms.py:783 apps/transactions/forms.py:826
#: apps/transactions/forms.py:858 apps/transactions/forms.py:893
#: apps/transactions/forms.py:1045 apps/users/forms.py:215
#: apps/users/forms.py:377
msgid "Update"
msgstr "Оновлення"
@@ -43,10 +43,10 @@ msgstr "Оновлення"
#: 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:378 apps/transactions/forms.py:784
#: apps/transactions/forms.py:827 apps/transactions/forms.py:859
#: apps/transactions/forms.py:894 apps/transactions/forms.py:1046
#: apps/users/forms.py:218 apps/users/forms.py:380
#: apps/transactions/forms.py:383 apps/transactions/forms.py:791
#: apps/transactions/forms.py:834 apps/transactions/forms.py:866
#: apps/transactions/forms.py:901 apps/transactions/forms.py:1053
#: apps/users/forms.py:223 apps/users/forms.py:385
#: templates/account_groups/fragments/list.html:9
#: templates/accounts/fragments/list.html:9
#: templates/categories/fragments/list.html:9
@@ -79,10 +79,10 @@ msgstr "Новий баланс"
#: 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:450 apps/transactions/forms.py:457
#: apps/transactions/forms.py:657 apps/transactions/forms.py:918
#: apps/transactions/models.py:317 apps/transactions/models.py:500
#: apps/transactions/models.py:700 apps/transactions/models.py:936
#: apps/transactions/forms.py:455 apps/transactions/forms.py:462
#: apps/transactions/forms.py:664 apps/transactions/forms.py:925
#: apps/transactions/models.py:318 apps/transactions/models.py:501
#: apps/transactions/models.py:701 apps/transactions/models.py:938
#: templates/insights/fragments/category_overview/index.html:63
#: templates/insights/fragments/category_overview/index.html:420
msgid "Category"
@@ -93,10 +93,10 @@ msgstr "Категорія"
#: apps/rules/forms.py:177 apps/rules/forms.py:186 apps/rules/models.py:39
#: apps/rules/models.py:290 apps/transactions/filters.py:74
#: apps/transactions/forms.py:50 apps/transactions/forms.py:264
#: apps/transactions/forms.py:466 apps/transactions/forms.py:474
#: apps/transactions/forms.py:650 apps/transactions/forms.py:911
#: apps/transactions/models.py:323 apps/transactions/models.py:502
#: apps/transactions/models.py:704 apps/transactions/models.py:942
#: apps/transactions/forms.py:471 apps/transactions/forms.py:479
#: apps/transactions/forms.py:657 apps/transactions/forms.py:918
#: apps/transactions/models.py:324 apps/transactions/models.py:503
#: apps/transactions/models.py:705 apps/transactions/models.py:944
#: templates/includes/navbar.html:110
#: templates/insights/fragments/category_overview/index.html:35
#: templates/tags/fragments/list.html:5 templates/tags/pages/index.html:4
@@ -106,7 +106,7 @@ msgstr "Мітки"
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
#: apps/import_app/models.py:14 apps/rules/models.py:13
#: apps/transactions/models.py:210 apps/transactions/models.py:235
#: apps/transactions/models.py:259 apps/transactions/models.py:905
#: apps/transactions/models.py:259 apps/transactions/models.py:906
#: templates/account_groups/fragments/list.html:25
#: templates/accounts/fragments/list.html:25
#: templates/categories/fragments/table.html:16
@@ -173,9 +173,9 @@ msgstr ""
#: apps/accounts/models.py:70 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:642 apps/transactions/forms.py:903
#: apps/transactions/models.py:290 apps/transactions/models.py:460
#: apps/transactions/models.py:682 apps/transactions/models.py:911
#: apps/transactions/forms.py:649 apps/transactions/forms.py:910
#: apps/transactions/models.py:290 apps/transactions/models.py:461
#: apps/transactions/models.py:683 apps/transactions/models.py:912
msgid "Account"
msgstr "Рахунок"
@@ -338,7 +338,7 @@ msgstr ""
"доступом. Редагувати може лише власник.<br/> Public: Відображається для всіх "
"користувачів. Редагувати може лише власник."
#: apps/common/forms.py:80 apps/users/forms.py:135
#: apps/common/forms.py:80 apps/users/forms.py:140
msgid "Save"
msgstr "Зберегти"
@@ -441,12 +441,12 @@ msgstr "Info"
msgid "Cache cleared successfully"
msgstr "Кеш успішно очищено"
#: apps/common/widgets/datepicker.py:53 apps/common/widgets/datepicker.py:206
#: apps/common/widgets/datepicker.py:264
#: apps/common/widgets/datepicker.py:55 apps/common/widgets/datepicker.py:208
#: apps/common/widgets/datepicker.py:266
msgid "Today"
msgstr "Сьогодні"
#: apps/common/widgets/datepicker.py:139
#: apps/common/widgets/datepicker.py:141
msgid "Now"
msgstr "Зараз"
@@ -475,7 +475,7 @@ msgstr "Суфікс"
#: apps/currencies/forms.py:69 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:478
#: apps/transactions/forms.py:66 apps/transactions/forms.py:483
#: apps/transactions/models.py:300
#: templates/dca/fragments/strategy/details.html:52
#: templates/exchange_rates/fragments/table.html:10
@@ -678,11 +678,11 @@ msgstr ""
msgid "Create transaction"
msgstr ""
#: apps/dca/forms.py:70 apps/transactions/forms.py:425
#: apps/dca/forms.py:70 apps/transactions/forms.py:430
msgid "From Account"
msgstr ""
#: apps/dca/forms.py:76 apps/transactions/forms.py:430
#: apps/dca/forms.py:76 apps/transactions/forms.py:435
msgid "To Account"
msgstr ""
@@ -707,7 +707,7 @@ msgstr ""
msgid "You must provide an account."
msgstr ""
#: apps/dca/forms.py:312 apps/transactions/forms.py:592
#: apps/dca/forms.py:312 apps/transactions/forms.py:597
msgid "From and To accounts must be different."
msgstr ""
@@ -726,9 +726,9 @@ 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:494 apps/transactions/models.py:313
#: apps/transactions/models.py:509 apps/transactions/models.py:710
#: apps/transactions/models.py:932
#: apps/transactions/forms.py:499 apps/transactions/models.py:314
#: apps/transactions/models.py:510 apps/transactions/models.py:711
#: apps/transactions/models.py:934
msgid "Notes"
msgstr ""
@@ -791,7 +791,7 @@ msgid "Users"
msgstr ""
#: apps/export_app/forms.py:32 apps/export_app/forms.py:137
#: apps/transactions/models.py:374 templates/includes/navbar.html:57
#: apps/transactions/models.py:375 templates/includes/navbar.html:57
#: templates/includes/navbar.html:106
#: templates/recurring_transactions/fragments/list_transactions.html:5
#: templates/recurring_transactions/fragments/table.html:37
@@ -809,23 +809,23 @@ 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:81
#: apps/transactions/forms.py:58 apps/transactions/forms.py:272
#: apps/transactions/forms.py:665 apps/transactions/forms.py:926
#: apps/transactions/models.py:273 apps/transactions/models.py:328
#: apps/transactions/models.py:505 apps/transactions/models.py:707
#: apps/transactions/models.py:947 templates/entities/fragments/list.html:5
#: apps/transactions/forms.py:672 apps/transactions/forms.py:933
#: apps/transactions/models.py:273 apps/transactions/models.py:329
#: apps/transactions/models.py:506 apps/transactions/models.py:708
#: apps/transactions/models.py:949 templates/entities/fragments/list.html:5
#: templates/entities/pages/index.html:4 templates/includes/navbar.html:112
msgid "Entities"
msgstr ""
#: apps/export_app/forms.py:56 apps/export_app/forms.py:140
#: apps/transactions/models.py:744 templates/includes/navbar.html:76
#: apps/transactions/models.py:745 templates/includes/navbar.html:76
#: templates/recurring_transactions/fragments/list.html:5
#: templates/recurring_transactions/pages/index.html:4
msgid "Recurring Transactions"
msgstr ""
#: apps/export_app/forms.py:62 apps/export_app/forms.py:138
#: apps/transactions/models.py:523 templates/includes/navbar.html:74
#: apps/transactions/models.py:524 templates/includes/navbar.html:74
#: templates/installment_plans/fragments/list.html:5
#: templates/installment_plans/pages/index.html:4
msgid "Installment Plans"
@@ -843,7 +843,7 @@ msgstr ""
msgid "Rules"
msgstr ""
#: apps/export_app/forms.py:86 templates/cotton/transaction/item.html:57
#: apps/export_app/forms.py:86 templates/cotton/transaction/item.html:55
msgid "DCA"
msgstr ""
@@ -878,7 +878,7 @@ msgstr ""
msgid "Update or create transaction actions"
msgstr ""
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:159
#: apps/export_app/forms.py:185 templates/cotton/transaction/item.html:172
#: templates/cotton/ui/deleted_transactions_action_bar.html:47
#: templates/export_app/fragments/restore.html:5
#: templates/export_app/pages/index.html:24
@@ -1063,16 +1063,16 @@ msgstr ""
#: apps/rules/forms.py:167 apps/rules/forms.py:180 apps/rules/models.py:31
#: apps/rules/models.py:246 apps/transactions/models.py:297
#: apps/transactions/models.py:465 apps/transactions/models.py:688
#: apps/transactions/models.py:918
#: apps/transactions/models.py:466 apps/transactions/models.py:689
#: apps/transactions/models.py:919
msgid "Type"
msgstr ""
#: apps/rules/forms.py:168 apps/rules/forms.py:181 apps/rules/models.py:32
#: apps/rules/models.py:250 apps/transactions/filters.py:23
#: apps/transactions/models.py:299 apps/transactions/models.py:920
#: templates/cotton/transaction/item.html:22
#: templates/cotton/transaction/item.html:32
#: apps/transactions/models.py:299 apps/transactions/models.py:921
#: templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30
#: templates/transactions/widgets/paid_toggle_button.html:12
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:16
msgid "Paid"
@@ -1080,34 +1080,34 @@ 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:481 apps/transactions/forms.py:671
#: apps/transactions/models.py:301 apps/transactions/models.py:483
#: apps/transactions/models.py:712
#: apps/transactions/forms.py:486 apps/transactions/forms.py:678
#: apps/transactions/models.py:301 apps/transactions/models.py:484
#: apps/transactions/models.py:713
msgid "Reference Date"
msgstr ""
#: apps/rules/forms.py:171 apps/rules/forms.py:184 apps/rules/models.py:35
#: apps/rules/models.py:262 apps/transactions/models.py:306
#: apps/transactions/models.py:693 apps/transactions/models.py:925
#: apps/rules/models.py:262 apps/transactions/models.py:307
#: apps/transactions/models.py:694 apps/transactions/models.py:927
#: templates/insights/fragments/sankey.html:95
msgid "Amount"
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:485 apps/transactions/models.py:311
#: apps/transactions/models.py:467 apps/transactions/models.py:696
#: apps/transactions/models.py:930
#: apps/transactions/forms.py:490 apps/transactions/models.py:312
#: apps/transactions/models.py:468 apps/transactions/models.py:697
#: apps/transactions/models.py:932
msgid "Description"
msgstr ""
#: apps/rules/forms.py:175 apps/rules/forms.py:190 apps/rules/models.py:274
#: apps/transactions/models.py:350 apps/transactions/models.py:952
#: apps/transactions/models.py:351 apps/transactions/models.py:954
msgid "Internal Note"
msgstr ""
#: apps/rules/forms.py:176 apps/rules/forms.py:191 apps/rules/models.py:278
#: apps/transactions/models.py:352 apps/transactions/models.py:954
#: apps/transactions/models.py:353 apps/transactions/models.py:956
msgid "Internal ID"
msgstr ""
@@ -1233,8 +1233,8 @@ msgstr ""
msgid "Update or Create Transaction action deleted successfully"
msgstr ""
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:22
#: templates/cotton/transaction/item.html:32 templates/includes/navbar.html:46
#: apps/transactions/filters.py:24 templates/cotton/transaction/item.html:20
#: templates/cotton/transaction/item.html:30 templates/includes/navbar.html:46
#: templates/insights/fragments/category_overview/index.html:46
#: templates/transactions/widgets/paid_toggle_button.html:8
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:12
@@ -1281,41 +1281,46 @@ msgstr ""
msgid "Save and add another"
msgstr ""
#: apps/transactions/forms.py:437
msgid "From Amount"
#: apps/transactions/forms.py:300
msgid "Muted transactions won't be displayed on monthly summaries"
msgstr ""
#: apps/transactions/forms.py:442
msgid "From Amount"
msgstr ""
#: apps/transactions/forms.py:447
msgid "To Amount"
msgstr ""
#: apps/transactions/forms.py:559
#: apps/transactions/forms.py:564
#: templates/cotton/ui/quick_transactions_buttons.html:40
#: templates/cotton/ui/transactions_fab.html:44
msgid "Transfer"
msgstr ""
#: apps/transactions/forms.py:805
#: apps/transactions/forms.py:812
msgid "Tag name"
msgstr ""
#: apps/transactions/forms.py:837
#: apps/transactions/forms.py:844
msgid "Entity name"
msgstr ""
#: apps/transactions/forms.py:869
#: apps/transactions/forms.py:876
msgid "Category name"
msgstr ""
#: apps/transactions/forms.py:871
msgid "Muted categories won't count towards your monthly total"
#: apps/transactions/forms.py:878
msgid "Muted categories won't be displayed on monthly summaries"
msgstr ""
#: apps/transactions/forms.py:1057
#: apps/transactions/forms.py:1064
msgid "End date should be after the start date"
msgstr ""
#: apps/transactions/models.py:211
#: apps/transactions/models.py:211 apps/transactions/models.py:302
#: apps/transactions/models.py:922
msgid "Mute"
msgstr ""
@@ -1352,7 +1357,7 @@ msgstr ""
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:284 apps/transactions/models.py:898
#: apps/transactions/models.py:284 apps/transactions/models.py:899
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1364,7 +1369,7 @@ msgstr ""
msgid "Income"
msgstr ""
#: apps/transactions/models.py:285 apps/transactions/models.py:899
#: apps/transactions/models.py:285 apps/transactions/models.py:900
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1375,133 +1380,138 @@ msgstr ""
msgid "Expense"
msgstr ""
#: apps/transactions/models.py:339 apps/transactions/models.py:522
#: apps/transactions/models.py:340 apps/transactions/models.py:523
msgid "Installment Plan"
msgstr ""
#: apps/transactions/models.py:348 apps/transactions/models.py:743
#: apps/transactions/models.py:349 apps/transactions/models.py:744
msgid "Recurring Transaction"
msgstr ""
#: apps/transactions/models.py:356
#: apps/transactions/models.py:357
msgid "Deleted"
msgstr ""
#: apps/transactions/models.py:361
#: apps/transactions/models.py:362
msgid "Deleted At"
msgstr ""
#: apps/transactions/models.py:373
#: apps/transactions/models.py:374
msgid "Transaction"
msgstr ""
#: apps/transactions/models.py:445 templates/tags/fragments/table.html:71
#: apps/transactions/models.py:446 templates/tags/fragments/table.html:71
msgid "No tags"
msgstr ""
#: apps/transactions/models.py:446
#: apps/transactions/models.py:447
msgid "No category"
msgstr ""
#: apps/transactions/models.py:448
#: apps/transactions/models.py:449
msgid "No description"
msgstr ""
#: apps/transactions/models.py:454
#: apps/transactions/models.py:455
msgid "Yearly"
msgstr ""
#: apps/transactions/models.py:455 apps/users/models.py:26
#: apps/transactions/models.py:456 apps/users/models.py:464
#: templates/includes/navbar.html:26
msgid "Monthly"
msgstr ""
#: apps/transactions/models.py:456
#: apps/transactions/models.py:457
msgid "Weekly"
msgstr ""
#: apps/transactions/models.py:457
#: apps/transactions/models.py:458
msgid "Daily"
msgstr ""
#: apps/transactions/models.py:470
#: apps/transactions/models.py:471
msgid "Number of Installments"
msgstr ""
#: apps/transactions/models.py:475
#: apps/transactions/models.py:476
msgid "Installment Start"
msgstr ""
#: apps/transactions/models.py:476
#: apps/transactions/models.py:477
msgid "The installment number to start counting from"
msgstr ""
#: apps/transactions/models.py:481 apps/transactions/models.py:716
#: apps/transactions/models.py:482 apps/transactions/models.py:717
msgid "Start Date"
msgstr ""
#: apps/transactions/models.py:485 apps/transactions/models.py:717
#: apps/transactions/models.py:486 apps/transactions/models.py:718
msgid "End Date"
msgstr ""
#: apps/transactions/models.py:490
#: apps/transactions/models.py:491
msgid "Recurrence"
msgstr ""
#: apps/transactions/models.py:493
#: apps/transactions/models.py:494
msgid "Installment Amount"
msgstr ""
#: apps/transactions/models.py:512 apps/transactions/models.py:733
#: apps/transactions/models.py:513 apps/transactions/models.py:734
msgid "Add description to transactions"
msgstr ""
#: apps/transactions/models.py:515 apps/transactions/models.py:736
#: apps/transactions/models.py:516 apps/transactions/models.py:737
msgid "Add notes to transactions"
msgstr ""
#: apps/transactions/models.py:675
#: apps/transactions/models.py:676
msgid "day(s)"
msgstr ""
#: apps/transactions/models.py:676
#: apps/transactions/models.py:677
msgid "week(s)"
msgstr ""
#: apps/transactions/models.py:677
#: apps/transactions/models.py:678
msgid "month(s)"
msgstr ""
#: apps/transactions/models.py:678
#: apps/transactions/models.py:679
msgid "year(s)"
msgstr ""
#: apps/transactions/models.py:680
#: apps/transactions/models.py:681
#: templates/recurring_transactions/fragments/list.html:24
msgid "Paused"
msgstr ""
#: apps/transactions/models.py:719
#: apps/transactions/models.py:720
msgid "Recurrence Type"
msgstr ""
#: apps/transactions/models.py:722
#: apps/transactions/models.py:723
msgid "Recurrence Interval"
msgstr ""
#: apps/transactions/models.py:726
#: apps/transactions/models.py:727
msgid "Last Generated Date"
msgstr ""
#: apps/transactions/models.py:729
#: apps/transactions/models.py:730
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:964 templates/cotton/ui/transactions_fab.html:59
#: apps/transactions/models.py:966
#: apps/transactions/views/quick_transactions.py:177
#: apps/transactions/views/quick_transactions.py:186
#: apps/transactions/views/quick_transactions.py:188
#: apps/transactions/views/quick_transactions.py:190
#: templates/cotton/ui/transactions_fab.html:59
msgid "Quick Transaction"
msgstr ""
#: apps/transactions/models.py:965 templates/includes/navbar.html:72
#: apps/transactions/models.py:967 templates/includes/navbar.html:72
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:11
msgid "Quick Transactions"
@@ -1592,7 +1602,8 @@ msgstr ""
msgid "Installment Plan deleted successfully"
msgstr ""
#: apps/transactions/views/quick_transactions.py:45 apps/users/views.py:152
#: apps/transactions/views/quick_transactions.py:45
#: apps/transactions/views/quick_transactions.py:222 apps/users/views.py:152
msgid "Item added successfully"
msgstr ""
@@ -1606,7 +1617,7 @@ msgstr ""
msgid "Item deleted successfully"
msgstr "Рахунок успішно видалено"
#: apps/transactions/views/quick_transactions.py:145
#: apps/transactions/views/quick_transactions.py:155
#: apps/transactions/views/transactions.py:52
#: apps/transactions/views/transactions.py:148
msgid "Transaction added successfully"
@@ -1695,7 +1706,8 @@ msgstr ""
msgid "Important dates"
msgstr ""
#: apps/users/forms.py:23 apps/users/models.py:13 templates/users/login.html:20
#: apps/users/forms.py:23 apps/users/models.py:451
#: templates/users/login.html:20
msgid "E-mail"
msgstr ""
@@ -1717,19 +1729,19 @@ msgstr ""
msgid "Default"
msgstr ""
#: apps/users/forms.py:95 apps/users/models.py:41
#: apps/users/forms.py:95 apps/users/models.py:484
msgid "Date Format"
msgstr ""
#: apps/users/forms.py:100 apps/users/models.py:46
#: apps/users/forms.py:100 apps/users/models.py:489
msgid "Datetime Format"
msgstr ""
#: apps/users/forms.py:106 apps/users/models.py:49
#: apps/users/forms.py:106 apps/users/models.py:492
msgid "Number Format"
msgstr ""
#: apps/users/forms.py:141
#: apps/users/forms.py:146
#, python-format
msgid ""
"This changes the language (if available) and how numbers and dates are "
@@ -1737,99 +1749,103 @@ msgid ""
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr ""
#: apps/users/forms.py:150
#: apps/users/forms.py:155
msgid "New Password"
msgstr ""
#: apps/users/forms.py:153
#: apps/users/forms.py:158
msgid "Leave blank to keep the current password."
msgstr ""
#: apps/users/forms.py:156
#: apps/users/forms.py:161
msgid "Confirm New Password"
msgstr ""
#: apps/users/forms.py:168 apps/users/forms.py:329
#: apps/users/forms.py:173 apps/users/forms.py:334
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
msgstr ""
#: apps/users/forms.py:171 apps/users/forms.py:332
#: apps/users/forms.py:176 apps/users/forms.py:337
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
#: apps/users/forms.py:242
#: apps/users/forms.py:247
msgid "This email address is already in use by another account."
msgstr ""
#: apps/users/forms.py:250
#: apps/users/forms.py:255
msgid "The two password fields didn't match."
msgstr ""
#: apps/users/forms.py:252
#: apps/users/forms.py:257
msgid "Please confirm your new password."
msgstr ""
#: apps/users/forms.py:254
#: apps/users/forms.py:259
msgid "Please enter the new password first."
msgstr ""
#: apps/users/forms.py:274
#: apps/users/forms.py:279
msgid "You cannot deactivate your own account using this form."
msgstr ""
#: apps/users/forms.py:287
#: apps/users/forms.py:292
msgid "Cannot remove status from the last superuser."
msgstr ""
#: apps/users/forms.py:293
#: apps/users/forms.py:298
msgid "You cannot remove your own superuser status using this form."
msgstr ""
#: apps/users/forms.py:390
#: apps/users/forms.py:395
msgid "A user with this email address already exists."
msgstr ""
#: apps/users/models.py:27 templates/includes/navbar.html:28
msgid "Yearly by currency"
msgstr ""
#: apps/users/models.py:28 templates/includes/navbar.html:30
msgid "Yearly by account"
msgstr ""
#: apps/users/models.py:29 templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr ""
#: apps/users/models.py:30 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr ""
#: apps/users/models.py:31
msgid "All Transactions"
msgstr ""
#: apps/users/models.py:32 templates/includes/navbar.html:32
msgid "Calendar"
msgstr ""
#: apps/users/models.py:54 apps/users/models.py:60
#: apps/users/models.py:12 apps/users/models.py:497
msgid "Auto"
msgstr ""
#: apps/users/models.py:56
#: apps/users/models.py:465 templates/includes/navbar.html:28
msgid "Yearly by currency"
msgstr ""
#: apps/users/models.py:466 templates/includes/navbar.html:30
msgid "Yearly by account"
msgstr ""
#: apps/users/models.py:467 templates/net_worth/net_worth.html:9
msgid "Current Net Worth"
msgstr ""
#: apps/users/models.py:468 templates/net_worth/net_worth.html:9
msgid "Projected Net Worth"
msgstr ""
#: apps/users/models.py:469
msgid "All Transactions"
msgstr ""
#: apps/users/models.py:470 templates/includes/navbar.html:32
msgid "Calendar"
msgstr ""
#: apps/users/models.py:480
msgid "Volume"
msgstr ""
#: apps/users/models.py:499
msgid "Language"
msgstr ""
#: apps/users/models.py:62
#: apps/users/models.py:505
msgid "Time Zone"
msgstr ""
#: apps/users/models.py:68
#: apps/users/models.py:511
msgid "Start page"
msgstr ""
@@ -1883,8 +1899,8 @@ msgstr ""
#: templates/account_groups/fragments/list.html:36
#: templates/accounts/fragments/list.html:41
#: templates/categories/fragments/table.html:29
#: templates/cotton/transaction/item.html:131
#: templates/cotton/ui/transactions_action_bar.html:49
#: templates/cotton/transaction/item.html:129
#: templates/cotton/ui/transactions_action_bar.html:52
#: templates/currencies/fragments/list.html:37
#: templates/dca/fragments/strategy/details.html:67
#: templates/dca/fragments/strategy/list.html:36
@@ -1907,10 +1923,10 @@ msgstr ""
#: templates/account_groups/fragments/list.html:43
#: templates/accounts/fragments/list.html:48
#: templates/categories/fragments/table.html:36
#: templates/cotton/transaction/item.html:146
#: templates/cotton/transaction/item.html:165
#: templates/cotton/transaction/item.html:136
#: templates/cotton/transaction/item.html:178
#: templates/cotton/ui/deleted_transactions_action_bar.html:55
#: templates/cotton/ui/transactions_action_bar.html:86
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/currencies/fragments/list.html:44
#: templates/dca/fragments/strategy/details.html:75
#: templates/dca/fragments/strategy/list.html:44
@@ -1934,10 +1950,10 @@ msgstr ""
#: templates/account_groups/fragments/list.html:47
#: templates/accounts/fragments/list.html:52
#: templates/categories/fragments/table.html:41
#: templates/cotton/transaction/item.html:150
#: templates/cotton/transaction/item.html:169
#: templates/cotton/transaction/item.html:140
#: templates/cotton/transaction/item.html:182
#: templates/cotton/ui/deleted_transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:88
#: templates/cotton/ui/transactions_action_bar.html:91
#: templates/currencies/fragments/list.html:48
#: templates/dca/fragments/strategy/details.html:80
#: templates/dca/fragments/strategy/list.html:48
@@ -1964,10 +1980,10 @@ msgstr ""
#: templates/account_groups/fragments/list.html:48
#: templates/accounts/fragments/list.html:53
#: templates/categories/fragments/table.html:42
#: templates/cotton/transaction/item.html:151
#: templates/cotton/transaction/item.html:170
#: templates/cotton/transaction/item.html:141
#: templates/cotton/transaction/item.html:183
#: templates/cotton/ui/deleted_transactions_action_bar.html:58
#: templates/cotton/ui/transactions_action_bar.html:89
#: templates/cotton/ui/transactions_action_bar.html:92
#: templates/currencies/fragments/list.html:49
#: templates/dca/fragments/strategy/details.html:81
#: templates/dca/fragments/strategy/list.html:49
@@ -1986,8 +2002,8 @@ msgstr ""
#: templates/account_groups/fragments/list.html:49
#: templates/accounts/fragments/list.html:54
#: templates/categories/fragments/table.html:43
#: templates/cotton/transaction/item.html:152
#: templates/cotton/transaction/item.html:171
#: templates/cotton/transaction/item.html:142
#: templates/cotton/transaction/item.html:184
#: templates/currencies/fragments/list.html:50
#: templates/dca/fragments/strategy/details.html:82
#: templates/dca/fragments/strategy/list.html:50
@@ -2148,8 +2164,25 @@ msgstr ""
msgid "Select"
msgstr ""
#: templates/cotton/transaction/item.html:138
#: templates/cotton/ui/transactions_action_bar.html:78
#: templates/cotton/transaction/item.html:154
#: templates/cotton/transaction/item.html:160
msgid "Show on summaries"
msgstr ""
#: templates/cotton/transaction/item.html:155
msgid "Controlled by category"
msgstr ""
#: templates/cotton/transaction/item.html:162
msgid "Hide from summaries"
msgstr ""
#: templates/cotton/transaction/item.html:164
msgid "Add as quick transaction"
msgstr ""
#: templates/cotton/transaction/item.html:166
#: templates/cotton/ui/transactions_action_bar.html:81
msgid "Duplicate"
msgstr ""
@@ -2189,17 +2222,17 @@ msgid "final total"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:31
#: templates/cotton/ui/transactions_action_bar.html:31
#: templates/cotton/ui/transactions_action_bar.html:34
msgid "Select All"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:37
#: templates/cotton/ui/transactions_action_bar.html:37
#: templates/cotton/ui/transactions_action_bar.html:40
msgid "Unselect All"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:59
#: templates/cotton/ui/transactions_action_bar.html:90
#: templates/cotton/ui/transactions_action_bar.html:93
msgid "Yes, delete them!"
msgstr ""
@@ -2210,49 +2243,49 @@ msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:189
#: templates/cotton/ui/deleted_transactions_action_bar.html:209
#: templates/cotton/ui/deleted_transactions_action_bar.html:229
#: templates/cotton/ui/transactions_action_bar.html:136
#: templates/cotton/ui/transactions_action_bar.html:160
#: templates/cotton/ui/transactions_action_bar.html:180
#: templates/cotton/ui/transactions_action_bar.html:200
#: templates/cotton/ui/transactions_action_bar.html:220
#: templates/cotton/ui/transactions_action_bar.html:240
#: templates/cotton/ui/transactions_action_bar.html:260
#: templates/cotton/ui/transactions_action_bar.html:139
#: templates/cotton/ui/transactions_action_bar.html:163
#: templates/cotton/ui/transactions_action_bar.html:183
#: templates/cotton/ui/transactions_action_bar.html:203
#: templates/cotton/ui/transactions_action_bar.html:223
#: templates/cotton/ui/transactions_action_bar.html:243
#: templates/cotton/ui/transactions_action_bar.html:263
msgid "copied!"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:114
#: templates/cotton/ui/transactions_action_bar.html:54
#: templates/cotton/ui/transactions_action_bar.html:145
#: templates/cotton/ui/transactions_action_bar.html:57
#: templates/cotton/ui/transactions_action_bar.html:148
msgid "Toggle Dropdown"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:122
#: templates/cotton/ui/transactions_action_bar.html:153
#: templates/cotton/ui/transactions_action_bar.html:156
msgid "Flat Total"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:142
#: templates/cotton/ui/transactions_action_bar.html:173
#: templates/cotton/ui/transactions_action_bar.html:176
msgid "Real Total"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:162
#: templates/cotton/ui/transactions_action_bar.html:193
#: templates/cotton/ui/transactions_action_bar.html:196
msgid "Mean"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:182
#: templates/cotton/ui/transactions_action_bar.html:213
#: templates/cotton/ui/transactions_action_bar.html:216
msgid "Max"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:202
#: templates/cotton/ui/transactions_action_bar.html:233
#: templates/cotton/ui/transactions_action_bar.html:236
msgid "Min"
msgstr ""
#: templates/cotton/ui/deleted_transactions_action_bar.html:222
#: templates/cotton/ui/transactions_action_bar.html:253
#: templates/cotton/ui/transactions_action_bar.html:256
msgid "Count"
msgstr ""
@@ -2271,11 +2304,11 @@ msgstr ""
msgid "Balance"
msgstr ""
#: templates/cotton/ui/transactions_action_bar.html:62
#: templates/cotton/ui/transactions_action_bar.html:65
msgid "Mark as unpaid"
msgstr ""
#: templates/cotton/ui/transactions_action_bar.html:69
#: templates/cotton/ui/transactions_action_bar.html:72
msgid "Mark as paid"
msgstr ""
@@ -2640,23 +2673,27 @@ msgstr ""
msgid "Django Admin"
msgstr ""
#: templates/includes/navbar.html:167
#: templates/includes/navbar.html:167 templates/includes/navbar.html:170
msgid "Calculator"
msgstr ""
#: templates/includes/navbar/user_menu.html:14
#: templates/includes/navbar/user_menu.html:6
msgid "Profile"
msgstr ""
#: templates/includes/navbar/user_menu.html:15
msgid "Settings"
msgstr ""
#: templates/includes/navbar/user_menu.html:19
#: templates/includes/navbar/user_menu.html:20
msgid "Edit profile"
msgstr ""
#: templates/includes/navbar/user_menu.html:46
#: templates/includes/navbar/user_menu.html:47
msgid "Clear cache"
msgstr ""
#: templates/includes/navbar/user_menu.html:50
#: templates/includes/navbar/user_menu.html:51
msgid "Logout"
msgstr ""
@@ -2957,25 +2994,25 @@ msgstr ""
msgid "Newest first"
msgstr ""
#: templates/net_worth/net_worth.html:17
#: templates/net_worth/net_worth.html:18
#: templates/yearly_overview/pages/overview_by_currency.html:9
msgid "By currency"
msgstr ""
#: templates/net_worth/net_worth.html:52
#: templates/net_worth/net_worth.html:53
msgid "Consolidated"
msgstr ""
#: templates/net_worth/net_worth.html:81
#: templates/net_worth/net_worth.html:82
#: templates/yearly_overview/pages/overview_by_account.html:7
msgid "By account"
msgstr ""
#: templates/net_worth/net_worth.html:188
#: templates/net_worth/net_worth.html:189
msgid "Evolution by currency"
msgstr ""
#: templates/net_worth/net_worth.html:252
#: templates/net_worth/net_worth.html:253
msgid "Evolution by account"
msgstr ""

View File

@@ -1,9 +1,9 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Account Groups' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -1,9 +1,9 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Accounts' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -2,7 +2,7 @@
{% load i18n %}
<div>
<div class="tw-hidden lg:tw-grid lg:tw-grid-cols-7 tw-gap-4 lg:tw-gap-0">
<div class="tw:hidden tw:lg:grid tw:lg:grid-cols-7 tw:gap-4 tw:lg:gap-0">
<div class="border-start border-top border-bottom p-2 text-center">
{% translate 'MON' %}
</div>
@@ -25,44 +25,44 @@
{% translate 'SUN' %}
</div>
</div>
<div class="tw-grid tw-grid-cols-1 tw-grid-rows-1 lg:tw-grid-cols-7 lg:tw-grid-rows-6 tw-gap-4 lg:tw-gap-0">
<div class="tw:grid tw:grid-cols-1 tw:grid-rows-1 tw:lg:grid-cols-7 tw:lg:grid-rows-6 tw:gap-4 tw:lg:gap-0">
{% for date in dates %}
{% if date %}
<div class="card h-100 hover:tw-bg-zinc-900 rounded-0{% if not date.transactions %} !tw-hidden lg:!tw-flex{% endif %}{% if today == date.date %} tw-border-yellow-300 border-primary{% endif %} " role="button"
<div class="card h-100 tw:hover:bg-zinc-900! rounded-0{% if not date.transactions %} tw:hidden! tw:lg:flex!{% endif %}{% if today == date.date %} tw:border-yellow-300 border-primary{% endif %} " role="button"
hx-get="{% url 'calendar_transactions_list' day=date.date.day month=date.date.month year=date.date.year %}"
hx-target="#persistent-generic-offcanvas-left">
<div class="card-header border-0 bg-transparent text-end tw-flex justify-content-between p-2 w-100">
<div class="lg:tw-hidden text-start w-100">{{ date.date|date:"l"|lower }}</div>
<div class="card-header border-0 bg-transparent text-end tw:flex justify-content-between p-2 w-100">
<div class="tw:lg:hidden text-start w-100">{{ date.date|date:"l"|lower }}</div>
<div class="text-end w-100">{{ date.day }}</div>
</div>
<div class="card-body p-2">
{% for transaction in date.transactions %}
{% if transaction.is_paid %}
{% if transaction.type == "IN" and not transaction.account.is_asset %}
<i class="fa-solid fa-circle-check tw-text-green-400" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Income' %}{% endif %}"></i>
<i class="fa-solid fa-circle-check tw:text-green-400" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Income' %}{% endif %}"></i>
{% elif transaction.type == "IN" and transaction.account.is_asset %}
<i class="fa-solid fa-circle-check tw-text-green-300" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Income' %}{% endif %}"></i>
<i class="fa-solid fa-circle-check tw:text-green-300" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Income' %}{% endif %}"></i>
{% elif transaction.type == "EX" and not transaction.account.is_asset %}
<i class="fa-solid fa-circle-check tw-text-red-400" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Expense' %}{% endif %}"></i>
<i class="fa-solid fa-circle-check tw:text-red-400" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Expense' %}{% endif %}"></i>
{% elif transaction.type == "EX" and transaction.account.is_asset %}
<i class="fa-solid fa-circle-check tw-text-red-300" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Expense' %}{% endif %}"></i>
<i class="fa-solid fa-circle-check tw:text-red-300" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Expense' %}{% endif %}"></i>
{% endif %}
{% else %}
{% if transaction.type == "IN" and not transaction.account.is_asset %}
<i class="fa-regular fa-circle tw-text-green-400" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Income' %}{% endif %}"></i>
<i class="fa-regular fa-circle tw:text-green-400" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Income' %}{% endif %}"></i>
{% elif transaction.type == "IN" and transaction.account.is_asset %}
<i class="fa-regular fa-circle tw-text-green-300" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Income' %}{% endif %}"></i>
<i class="fa-regular fa-circle tw:text-green-300" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Income' %}{% endif %}"></i>
{% elif transaction.type == "EX" and not transaction.account.is_asset %}
<i class="fa-regular fa-circle tw-text-red-400" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Expense' %}{% endif %}"></i>
<i class="fa-regular fa-circle tw:text-red-400" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Expense' %}{% endif %}"></i>
{% elif transaction.type == "EX" and transaction.account.is_asset %}
<i class="fa-regular fa-circle tw-text-red-300" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Expense' %}{% endif %}"></i>
<i class="fa-regular fa-circle tw:text-red-300" data-bs-toggle="tooltip" data-bs-title="{% if transaction.description %}{{ transaction.description }}{% else %}{% trans 'Expense' %}{% endif %}"></i>
{% endif %}
{% endif %}
{% endfor %}
</div>
</div>
{% else %}
<div class="!tw-hidden lg:!tw-block card h-100 rounded-0"></div>
<div class="tw:hidden! tw:lg:block! card h-100 rounded-0"></div>
{% endif %}
{% endfor %}
</div>

View File

@@ -17,7 +17,7 @@
<div class="row mb-3 gx-xl-4 gy-3 mb-4">
{# Date picker#}
<div class="col-12 col-xl-4 flex-row align-items-center d-flex">
<div class="tw-text-base h-100 align-items-center d-flex">
<div class="tw:text-base h-100 align-items-center d-flex">
<a role="button"
class="pe-4 py-2"
hx-boost="true"
@@ -25,14 +25,14 @@
href="{% url 'calendar' month=previous_month year=previous_year %}"><i
class="fa-solid fa-chevron-left"></i></a>
</div>
<div class="tw-text-3xl fw-bold font-monospace tw-w-full text-center"
<div class="tw:text-3xl fw-bold font-monospace tw:w-full text-center"
hx-get="{% url 'month_year_picker' %}"
hx-target="#generic-offcanvas-left"
hx-trigger="click, date_picker from:window"
hx-vals='{"month": {{ month }}, "year": {{ year }}, "for": "calendar", "field": "date"}' role="button">
{{ month|month_name }} {{ year }}
</div>
<div class="tw-text-base mx-2 h-100 align-items-center d-flex">
<div class="tw:text-base mx-2 h-100 align-items-center d-flex">
<a role="button"
class="ps-3 py-2"
hx-boost="true"
@@ -52,7 +52,7 @@
</div>
<div class="row">
<div class="show-loading" hx-get="{% url 'calendar_list' month=month year=year %}"
hx-trigger="load, updated from:window, selective_update from:window"></div>
hx-trigger="load, updated from:window, selective_update from:window, every 10m"></div>
</div>
</div>
<c-ui.transactions_fab></c-ui.transactions_fab>

View File

@@ -1,9 +1,9 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Categories' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -32,7 +32,7 @@
tabindex="0">
<ul class="list-group list-group-flush" id="month-year-list">
{% for month_data in x.list %}
<li class="list-group-item hover:tw-bg-zinc-900
<li class="list-group-item tw:hover:bg-zinc-900
{% if month_data.month == current_month and month_data.year == current_year %} disabled bg-primary{% endif %}"
{% if month_data.month == current_month and month_data.year == current_year %}aria-disabled="true"{% endif %}>
<div class="d-flex justify-content-between">

View File

@@ -3,10 +3,10 @@
{% if not divless %}
<div class="{% if text_end %}text-end{% elif text_start %}text-start{% endif %}">
{% endif %}
<span class="amount{% if color == 'grey' or color == "gray" %} tw-text-gray-500{% elif color == 'green' %} tw-text-green-400{% elif color == 'red' %} tw-text-red-400{% endif %} {{ custom_class }}"
<span class="amount{% if color == 'grey' or color == "gray" %} tw:text-gray-500{% elif color == 'green' %} tw:text-green-400{% elif color == 'red' %} tw:text-red-400{% endif %} {{ custom_class }}"
data-original-value="{% currency_display amount=amount prefix=prefix suffix=suffix decimal_places=decimal_places %}"
data-amount="{{ amount|floatformat:"-40u" }}">
</span><span>{{ slot }}</span>
{% if not divless %}
</div>
{% endif %}
{% endif %}

View File

@@ -1,33 +1,33 @@
<div class="tw-min-h-16">
<div class="tw:min-h-16">
<div
id="fab-wrapper"
class="tw-fixed tw-bottom-5 tw-right-5 tw-ml-auto tw-w-max tw-flex tw-flex-col tw-items-end mt-5">
class="tw:fixed tw:bottom-5 tw:right-5 tw:ml-auto tw:w-max tw:flex tw:flex-col tw:items-end mt-5">
<div
id="menu"
class="tw-flex tw-flex-col tw-items-end tw-space-y-6 tw-transition-all tw-duration-300 tw-ease-in-out tw-opacity-0 tw-invisible tw-hidden tw-mb-2">
class="tw:flex tw:flex-col tw:items-end tw:space-y-6 tw:transition-all tw:duration-300 tw:ease-in-out tw:opacity-0 tw:invisible tw:hidden tw:mb-2">
{{ slot }}
</div>
<button
class="btn btn-primary rounded-circle p-0 tw-w-12 tw-h-12 tw-flex tw-items-center tw-justify-center tw-shadow-lg hover:tw-shadow-xl focus:tw-shadow-xl tw-transition-all tw-duration-300 tw-ease-in-out"
class="btn btn-primary rounded-circle p-0 tw:w-12 tw:h-12 tw:flex tw:items-center tw:justify-center tw:shadow-lg tw:hover:shadow-xl tw:focus:shadow-xl tw:transition-all tw:duration-300 tw:ease-in-out"
_="
on click or focusout
if #menu matches .tw-invisible and event.type === 'click'
add .tw-rotate-45 to #fab-icon
remove .tw-invisible from #menu
remove .tw-hidden from #menu
remove .tw-opacity-0 from #menu
if #menu.classList.contains('tw:invisible') and event.type === 'click'
add .{'tw:rotate-45'} to #fab-icon
remove .{'tw:invisible'} from #menu
remove .{'tw:hidden'} from #menu
remove .{'tw:opacity-0'} from #menu
else
wait 0.2s
remove .tw-rotate-45 from #fab-icon
add .tw-invisible to #menu
add .tw-hidden to #menu
add .tw-opacity-0 to #menu
remove .{'tw:rotate-45'} from #fab-icon
add .{'tw:invisible'} to #menu
add .{'tw:hidden'} to #menu
add .{'tw:opacity-0'} to #menu
end
"
>
<i id="fab-icon" class="fa-solid fa-plus tw-text-3xl tw-transition-transform tw-duration-300 tw-ease-in-out"></i>
<i id="fab-icon" class="fa-solid fa-plus tw:text-3xl tw:transition-transform tw:duration-300 tw:ease-in-out"></i>
</button>
</div>
</div>

View File

@@ -1,5 +1,5 @@
{% load i18n %}
<div class="tw-relative fab-item">
<div class="tw:relative fab-item">
<button class="btn btn-sm btn-{{ color }}"
hx-get="{{ url }}"
hx-trigger="{{ hx_trigger }}"

View File

@@ -1,9 +1,9 @@
<div class="row {% if not remove_padding %}p-5{% endif %}">
<div class="col {% if not remove_padding %}p-5{% endif %}">
<div class="text-center">
<i class="{% if icon %}{{ icon }}{% else %}fa-solid fa-circle-xmark{% endif %} tw-text-6xl"></i>
<i class="{% if icon %}{{ icon }}{% else %}fa-solid fa-circle-xmark{% endif %} tw:text-6xl"></i>
<p class="lead mt-4 mb-0">{{ title }}</p>
<p class="tw-text-gray-500">{{ subtitle }}</p>
<p class="tw:text-gray-500">{{ subtitle }}</p>
</div>
</div>
</div>

View File

@@ -1,6 +1,6 @@
{% load markdown %}
{% load i18n %}
<div class="transaction {% if transaction.type == "EX" %}expense{% else %}income{% endif %}">
<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 %}
<label class="px-3 d-flex align-items-center justify-content-center">
@@ -8,17 +8,15 @@
id="check-{{ transaction.id }}" aria-label="{% translate 'Select' %}" hx-preserve>
</label>
{% endif %}
<div class="tw-border-s-6 tw-border-e-0 tw-border-t-0 tw-border-b-0 border-bottom
hover:tw-bg-zinc-900 p-2 {% if transaction.account.is_asset %}tw-border-dashed{% else %}tw-border-solid{% endif %}
{% if transaction.type == "EX" %}tw-border-red-500{% else %}tw-border-green-500{% endif %} tw-relative
w-100 transaction-item"
_="on mouseover remove .tw-invisible from the first .transaction-actions in me end
on mouseout add .tw-invisible to the first .transaction-actions in me end">
<div class="row font-monospace tw-text-sm align-items-center">
<div class="tw:border-s-4 tw:border-e-0 tw:border-t-0 tw:border-b-0 border-bottom
tw:hover:bg-zinc-900 p-2 {% if transaction.account.is_asset %}tw:border-dashed{% else %}tw:border-solid{% endif %}
{% if transaction.type == "EX" %}tw:border-red-500{% else %}tw:border-green-500{% endif %} tw:relative
w-100 transaction-item">
<div class="row font-monospace tw:text-sm align-items-center">
<div
class="col-lg-auto col-12 d-flex align-items-center tw-text-2xl lg:tw-text-xl text-lg-center text-center p-0 ps-1">
class="col-lg-auto col-12 d-flex align-items-center tw:text-2xl tw:lg:text-xl text-lg-center text-center p-0 ps-1">
{% if not transaction.deleted %}
<a class="text-decoration-none p-3 tw-text-gray-500"
<a class="text-decoration-none p-3 tw:text-gray-500!"
title="{% if transaction.is_paid %}{% trans 'Paid' %}{% else %}{% trans 'Projected' %}{% endif %}"
role="button"
hx-get="{% url 'transaction_pay' transaction_id=transaction.id %}"
@@ -28,41 +26,41 @@
class="fa-regular fa-circle"></i>{% endif %}
</a>
{% else %}
<div class="text-decoration-none p-3 tw-text-gray-500"
<div class="text-decoration-none p-3 tw:text-gray-500!"
title="{% if transaction.is_paid %}{% trans 'Paid' %}{% else %}{% trans 'Projected' %}{% endif %}">
{% if transaction.is_paid %}<i class="fa-regular fa-circle-check"></i>{% else %}<i
class="fa-regular fa-circle"></i>{% endif %}
</div>
{% endif %}
</div>
<div class="col-lg col-12">
<div class="col-lg col-12 {% if 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="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>
<div
class="col ps-0">{{ transaction.date|date:"SHORT_DATE_FORMAT" }} • {{ transaction.reference_date|date:"b/Y" }}</div>
</div>
{# Description#}
<div class="mb-2 mb-lg-1 text-white tw-text-base">
<div class="mb-2 mb-lg-1 text-body tw:text-base">
{% spaceless %}
<span class="{% if transaction.description %}me-2{% endif %}">{{ transaction.description }}</span>
{% if transaction.installment_plan and transaction.installment_id %}
<span
class="badge text-bg-secondary">{{ transaction.installment_id }}/{{ transaction.installment_plan.installment_total_number }}</span>
class="badge text-bg-secondary mx-1">{{ transaction.installment_id }}/{{ transaction.installment_plan.installment_total_number }}</span>
{% endif %}
{% if transaction.recurring_transaction %}
<span class="text-primary tw-text-xs"><i class="fa-solid fa-arrows-rotate fa-fw"></i></span>
<span class="text-primary tw:text-xs mx-1"><i class="fa-solid fa-arrows-rotate fa-fw"></i></span>
{% endif %}
{% if transaction.dca_expense_entries.all or transaction.dca_income_entries.all %}
<span class="badge text-bg-secondary">{% trans 'DCA' %}</span>
<span class="badge text-bg-secondary mx-1">{% trans 'DCA' %}</span>
{% endif %}
{% endspaceless %}
</div>
<div class="tw-text-gray-400 tw-text-sm">
<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="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>
@@ -70,14 +68,14 @@
{% endwith %}
{# Notes#}
{% if transaction.notes %}
<div class="row mb-2 mb-lg-1 tw-text-gray-400">
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
<div class="col-auto pe-1"><i class="fa-solid fa-align-left fa-fw me-1 fa-xs"></i></div>
<div class="col ps-0">{{ transaction.notes | limited_markdown | linebreaksbr }}</div>
</div>
{% endif %}
{# Category#}
{% if transaction.category %}
<div class="row mb-2 mb-lg-1 tw-text-gray-400">
<div class="row mb-2 mb-lg-1 tw:text-gray-400">
<div class="col-auto pe-1"><i class="fa-solid fa-icons fa-fw me-1 fa-xs"></i></div>
<div class="col ps-0">{{ transaction.category.name }}</div>
</div>
@@ -85,7 +83,7 @@
{# Tags#}
{% with transaction.tags.all as tags %}
{% if tags %}
<div class="row mb-2 mb-lg-1 tw-text-gray-400">
<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>
@@ -93,7 +91,7 @@
{% endwith %}
</div>
</div>
<div class="col-lg-auto col-12 text-lg-end align-self-end">
<div class="col-lg-auto col-12 text-lg-end align-self-end {% if 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"
@@ -122,7 +120,7 @@
<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 d-flex flex-row card">
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">
{% if not transaction.deleted %}
<a class="btn btn-secondary btn-sm transaction-action"
@@ -132,14 +130,6 @@
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 "Duplicate" %}"
hx-get="{% url 'transaction_clone' transaction_id=transaction.id %}"
_="on click if event.ctrlKey set @hx-get to `{% url 'transaction_clone' transaction_id=transaction.id %}?edit=true` then call htmx.process(me) end then trigger ready"
hx-trigger="ready">
<i class="fa-solid fa-clone fa-fw"></i></a>
<a class="btn btn-secondary btn-sm transaction-action"
role="button"
data-bs-toggle="tooltip"
@@ -152,6 +142,29 @@
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">
{% if 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>
<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"

View File

@@ -1,9 +1,9 @@
<div class="card mb-2 transaction-item">
<div class="card-body p-2 tw-flex tw-items-center tw-gap-3" data-bs-toggle="collapse" data-bs-target="#{{ transaction.id }}" role="button" aria-expanded="false" aria-controls="{{ transaction.id }}">
<div class="card-body p-2 tw:flex tw:items-center tw:gap-3" data-bs-toggle="collapse" data-bs-target="#{{ transaction.id }}" role="button" aria-expanded="false" aria-controls="{{ transaction.id }}">
<!-- Main visible content -->
<div class="tw-flex flex-lg-row flex-column lg:tw-items-center tw-w-full tw-gap-3">
<div class="tw:flex flex-lg-row flex-column tw:lg:items-center tw:w-full tw:gap-3">
<!-- Type indicator -->
<div class="tw-w-8">
<div class="tw:w-8">
{% if transaction.type == 'IN' %}
<span class="badge bg-success"></span>
{% else %}
@@ -12,7 +12,7 @@
</div>
<!-- Payment status -->
<div class="tw-w-8">
<div class="tw:w-8">
{% if transaction.is_paid %}
<span class="badge bg-success"></span>
{% else %}
@@ -21,13 +21,13 @@
</div>
<!-- Description -->
<div class="tw-flex-grow">
<span class="tw-font-medium">{{ transaction.description }}</span>
<div class="tw:flex-grow">
<span class="tw:font-medium">{{ transaction.description }}</span>
</div>
<!-- Amount -->
<div class="tw-text-right tw-whitespace-nowrap">
<span class="{% if transaction.type == 'IN' %}tw-text-green-400{% else %}tw-text-red-400{% endif %}">
<div class="tw:text-right tw:whitespace-nowrap">
<span class="{% if transaction.type == 'IN' %}tw:text-green-400{% else %}tw:text-red-400{% endif %}">
{{ transaction.amount }}
</span>
{% if transaction.exchanged_amount %}
@@ -91,4 +91,4 @@
</div>
</div>
</div>
</div>
</div>

View File

@@ -3,7 +3,7 @@
<div class="col card shadow">
<div class="card-body">
{% if account.account.group %}
<div class="tw-text-sm mb-2">
<div class="tw:text-sm mb-2">
<span class="badge text-bg-primary ">{{ account.account.group }}</span>
</div>
{% endif %}
@@ -12,11 +12,11 @@
</h5>
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'projected income' %}</div>
<div class="tw:text-gray-400">{% translate 'projected income' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
{% if account.income_projected != 0 %}
<div class="text-end font-monospace tw-text-green-400">
<div class="text-end font-monospace tw:text-green-400">
<c-amount.display
:amount="account.income_projected"
:prefix="account.currency.prefix"
@@ -28,7 +28,7 @@
{% endif %}
</div>
{% if account.exchanged and account.exchanged.income_projected %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="account.exchanged.income_projected"
:prefix="account.exchanged.currency.prefix"
@@ -38,12 +38,12 @@
{% endif %}
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'projected expenses' %}</div>
<div class="tw:text-gray-400">{% translate 'projected expenses' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div>
{% if account.expense_projected != 0 %}
<div class="text-end font-monospace tw-text-red-400">
<div class="text-end font-monospace tw:text-red-400">
<c-amount.display
:amount="account.expense_projected"
:prefix="account.currency.prefix"
@@ -56,7 +56,7 @@
</div>
</div>
{% if account.exchanged and account.exchanged.expense_projected %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="account.exchanged.expense_projected"
:prefix="account.exchanged.currency.prefix"
@@ -66,7 +66,7 @@
{% endif %}
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'projected total' %}</div>
<div class="tw:text-gray-400">{% translate 'projected total' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div
@@ -80,7 +80,7 @@
</div>
</div>
{% if account.exchanged.total_projected and account.exchanged.total_projected %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="account.exchanged.total_projected"
:prefix="account.exchanged.currency.prefix"
@@ -91,11 +91,11 @@
<hr class="my-3">
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'current income' %}</div>
<div class="tw:text-gray-400">{% translate 'current income' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
{% if account.income_current != 0 %}
<div class="text-end font-monospace tw-text-green-400">
<div class="text-end font-monospace tw:text-green-400">
<c-amount.display
:amount="account.income_current"
:prefix="account.currency.prefix"
@@ -107,7 +107,7 @@
{% endif %}
</div>
{% if account.exchanged and account.exchanged.income_current %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="account.exchanged.income_current"
:prefix="account.exchanged.currency.prefix"
@@ -117,11 +117,11 @@
{% endif %}
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'current expenses' %}</div>
<div class="tw:text-gray-400">{% translate 'current expenses' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
{% if account.expense_current != 0 %}
<div class="text-end font-monospace tw-text-red-400">
<div class="text-end font-monospace tw:text-red-400">
<c-amount.display
:amount="account.expense_current"
:prefix="account.currency.prefix"
@@ -133,7 +133,7 @@
{% endif %}
</div>
{% if account.exchanged and account.exchanged.expense_current %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="account.exchanged.expense_current"
:prefix="account.exchanged.currency.prefix"
@@ -143,7 +143,7 @@
{% endif %}
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'current total' %}</div>
<div class="tw:text-gray-400">{% translate 'current total' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div class="text-end font-monospace">
@@ -156,7 +156,7 @@
</div>
</div>
{% if account.exchanged and account.exchanged.total_current %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="account.exchanged.total_current"
:prefix="account.exchanged.currency.prefix"
@@ -168,7 +168,7 @@
<hr class="my-3">
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'final total' %}</div>
<div class="tw:text-gray-400">{% translate 'final total' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div class="text-end font-monospace">
@@ -181,7 +181,7 @@
</div>
</div>
{% if account.exchanged and account.exchanged.total_final %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="account.exchanged.total_final"
:prefix="account.exchanged.currency.prefix"

View File

@@ -1,5 +1,5 @@
<div class="card tw-relative h-100 shadow">
<div class="card tw:relative h-100 shadow">
<div class="card-body">
{{ slot }}
</div>
</div>
</div>

View File

@@ -7,11 +7,11 @@
</h5>
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'projected income' %}</div>
<div class="tw:text-gray-400">{% translate 'projected income' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
{% if currency.income_projected != 0 %}
<div class="text-end font-monospace tw-text-green-400">
<div class="text-end font-monospace tw:text-green-400">
<c-amount.display
:amount="currency.income_projected"
:prefix="currency.currency.prefix"
@@ -23,7 +23,7 @@
{% endif %}
</div>
{% if currency.exchanged and currency.exchanged.income_projected %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="currency.exchanged.income_projected"
:prefix="currency.exchanged.currency.prefix"
@@ -33,12 +33,12 @@
{% endif %}
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'projected expenses' %}</div>
<div class="tw:text-gray-400">{% translate 'projected expenses' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div>
{% if currency.expense_projected != 0 %}
<div class="text-end font-monospace tw-text-red-400">
<div class="text-end font-monospace tw:text-red-400">
<c-amount.display
:amount="currency.expense_projected"
:prefix="currency.currency.prefix"
@@ -51,7 +51,7 @@
</div>
</div>
{% if currency.exchanged and currency.exchanged.expense_projected %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="currency.exchanged.expense_projected"
:prefix="currency.exchanged.currency.prefix"
@@ -61,7 +61,7 @@
{% endif %}
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'projected total' %}</div>
<div class="tw:text-gray-400">{% translate 'projected total' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div class="text-end font-monospace">
@@ -74,7 +74,7 @@
</div>
</div>
{% if currency.exchanged.total_projected and currency.exchanged.total_projected %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="currency.exchanged.total_projected"
:prefix="currency.exchanged.currency.prefix"
@@ -85,11 +85,11 @@
<hr class="my-3">
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'current income' %}</div>
<div class="tw:text-gray-400">{% translate 'current income' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
{% if currency.income_current != 0 %}
<div class="text-end font-monospace tw-text-green-400">
<div class="text-end font-monospace tw:text-green-400">
<c-amount.display
:amount="currency.income_current"
:prefix="currency.currency.prefix"
@@ -101,7 +101,7 @@
{% endif %}
</div>
{% if currency.exchanged and currency.exchanged.income_current %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="currency.exchanged.income_current"
:prefix="currency.exchanged.currency.prefix"
@@ -111,11 +111,11 @@
{% endif %}
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'current expenses' %}</div>
<div class="tw:text-gray-400">{% translate 'current expenses' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
{% if currency.expense_current != 0 %}
<div class="text-end font-monospace tw-text-red-400">
<div class="text-end font-monospace tw:text-red-400">
<c-amount.display
:amount="currency.expense_current"
:prefix="currency.currency.prefix"
@@ -127,7 +127,7 @@
{% endif %}
</div>
{% if currency.exchanged and currency.exchanged.expense_current %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="currency.exchanged.expense_current"
:prefix="currency.exchanged.currency.prefix"
@@ -137,7 +137,7 @@
{% endif %}
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'current total' %}</div>
<div class="tw:text-gray-400">{% translate 'current total' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div class="text-end font-monospace">
@@ -150,7 +150,7 @@
</div>
</div>
{% if currency.exchanged and currency.exchanged.total_current %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="currency.exchanged.total_current"
:prefix="currency.exchanged.currency.prefix"
@@ -162,7 +162,7 @@
<hr class="my-3">
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'final total' %}</div>
<div class="tw:text-gray-400">{% translate 'final total' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div class="text-end font-monospace">
@@ -175,7 +175,7 @@
</div>
</div>
{% if currency.exchanged and currency.exchanged.total_final %}
<div class="text-end font-monospace tw-text-gray-500">
<div class="text-end font-monospace tw:text-gray-500">
<c-amount.display
:amount="currency.exchanged.total_final"
:prefix="currency.exchanged.currency.prefix"

View File

@@ -1,16 +1,16 @@
{% load i18n %}
<div class="tw-sticky tw-bottom-4 tw-left-0 tw-right-0 tw-z-50 tw-hidden mx-auto tw-w-fit" id="actions-bar"
<div class="tw:sticky tw:bottom-4 tw:left-0 tw:right-0 tw:z-50 tw:hidden mx-auto tw:w-fit" id="actions-bar"
_="on change from #transactions-list or htmx:afterSettle from window
if #actions-bar then
if no <input[type='checkbox']:checked/> in #transactions-list
if #actions-bar
add .slide-in-bottom-reverse then settle
then add .tw-hidden to #actions-bar
then add .tw:hidden to #actions-bar
then remove .slide-in-bottom-reverse
end
else
if #actions-bar
remove .tw-hidden from #actions-bar
remove .tw:hidden from #actions-bar
then trigger selected_transactions_updated
end
end
@@ -26,20 +26,20 @@
</button>
<ul class="dropdown-menu">
<li>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
_="on click set <#transactions-list input[type='checkbox']/>'s checked to true then call me.blur() then trigger change">
<i class="fa-regular fa-square-check tw-text-green-400 me-3"></i>{% translate 'Select All' %}
<i class="fa-regular fa-square-check tw:text-green-400 me-3"></i>{% translate 'Select All' %}
</div>
</li>
<li>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
_="on click set <#transactions-list input[type='checkbox']/>'s checked to false then call me.blur() then trigger change">
<i class="fa-regular fa-square tw-text-red-400 me-3"></i>{% translate 'Unselect All' %}
<i class="fa-regular fa-square tw:text-red-400 me-3"></i>{% translate 'Unselect All' %}
</div>
</li>
</ul>
</div>
<div class="vr tw-align-middle"></div>
<div class="vr tw:align-middle"></div>
<button class="btn btn-secondary btn-sm"
hx-get="{% url 'transactions_bulk_undelete' %}"
hx-include=".transaction"
@@ -60,7 +60,7 @@
_="install prompt_swal">
<i class="fa-solid fa-trash text-danger"></i>
</button>
<div class="vr tw-align-middle"></div>
<div class="vr tw:align-middle"></div>
<div class="btn-group"
_="on selected_transactions_updated from #actions-bar
set realTotal to math.bignumber(0)
@@ -118,10 +118,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Flat Total" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-flat-total"
_="on click
set original_value to my innerText
@@ -138,10 +138,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Real Total" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-real-total"
_="on click
set original_value to my innerText
@@ -158,10 +158,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Mean" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-mean"
_="on click
set original_value to my innerText
@@ -178,10 +178,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Max" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-max"
_="on click
set original_value to my innerText
@@ -198,10 +198,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Min" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-min"
_="on click
set original_value to my innerText
@@ -218,10 +218,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Count" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-count"
_="on click
set original_value to my innerText

View File

@@ -1,6 +1,6 @@
{% spaceless %}
{% load i18n %}
<span class="tw-text-xs text-white-50 mx-1"
<span class="tw:text-xs text-white-50 mx-1"
data-bs-toggle="tooltip"
data-bs-title="{{ content }}">
<i class="{% if not icon %}fa-solid fa-circle-question{% else %}{{ icon }}{% endif %} fa-fw"></i>

View File

@@ -1,9 +1,9 @@
<div class="card tw-relative h-100 shadow">
<div class="tw-absolute tw-h-8 tw-w-8 tw-right-2 tw-top-2 tw-bg-{{ color }}-300 tw-text-{{ color }}-800 text-center align-items-center d-flex justify-content-center rounded-2">
<div class="card tw:relative h-100 shadow">
<div class="tw:absolute tw:h-8 tw:w-8 tw:right-2 tw:top-2 tw:bg-{{ color }}-300 tw:text-{{ color }}-800 text-center align-items-center d-flex justify-content-center rounded-2">
{% if icon %}<i class="{{ icon }}"></i>{% else %}<span class="fw-bold">{{ title.0 }}</span>{% endif %}
</div>
<div class="card-body">
<h5 class="tw-text-{{ color }}-400 fw-bold tw-mr-[50px]" {{ attrs }}>{{ title }}{% if help_text %}<c-ui.help-icon :content="help_text" icon=""></c-ui.help-icon>{% endif %}</h5>
<h5 class="tw:text-{{ color }}-400 fw-bold tw:mr-[50px]" {{ attrs }}>{{ title }}{% if help_text %}<c-ui.help-icon :content="help_text" icon=""></c-ui.help-icon>{% endif %}</h5>
{{ slot }}
</div>
</div>

View File

@@ -1,28 +1,28 @@
{% load i18n %}
<div class="progress-stacked">
<div class="progress position-relative" role="progressbar" aria-label="{% trans 'Projected Income' %} ({{ percentage.percentages.income_projected|floatformat:2 }}%)" aria-valuenow="{{ percentage.percentages.expense_projected|floatformat:0 }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ percentage.percentages.income_projected|floatformat:"2u" }}%">
<div class="progress-bar progress-bar-striped !tw-bg-green-300"
<div class="progress-bar progress-bar-striped tw:bg-green-300!"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="{% trans 'Projected Income' %} ({{ percentage.percentages.income_projected|floatformat:2 }}%)">
</div>
</div>
<div class="progress position-relative" role="progressbar" aria-label="{% trans 'Current Income' %} ({{ percentage.percentages.income_current|floatformat:2 }}%)" aria-valuenow="{{ percentage.percentages.expense_projected|floatformat:0 }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ percentage.percentages.income_current|floatformat:"2u" }}%">
<div class="progress-bar !tw-bg-green-400"
<div class="progress-bar tw:bg-green-400!"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="{% trans 'Current Income' %} ({{ p.percentages.income_current|floatformat:2 }}%)">
</div>
</div>
<div class="progress position-relative" role="progressbar" aria-label="{% trans 'Projected Expenses' %} ({{ percentage.percentages.expense_projected|floatformat:2 }}%)" aria-valuenow="{{ percentage.percentages.expense_projected|floatformat:0 }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ percentage.percentages.expense_projected|floatformat:"2u" }}%">
<div class="progress-bar progress-bar-striped !tw-bg-red-300"
<div class="progress-bar progress-bar-striped tw:bg-red-300!"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="{% trans 'Projected Expenses' %} ({{ percentage.percentages.expense_projected|floatformat:2 }}%)">
</div>
</div>
<div class="progress position-relative" role="progressbar" aria-label="{% trans 'Current Expenses' %} ({{ percentage.percentages.expense_current|floatformat:2 }}%)" aria-valuenow="{{ percentage.percentages.expense_projected|floatformat:0 }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ percentage.percentages.expense_current|floatformat:"2u" }}%">
<div class="progress-bar !tw-bg-red-400"
<div class="progress-bar tw:bg-red-400!"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="{% trans 'Current Expenses' %} ({{ percentage.percentages.expense_current|floatformat:2 }}%)">

View File

@@ -1,16 +1,17 @@
{% load i18n %}
<div class="tw-sticky tw-bottom-4 tw-left-0 tw-right-0 tw-z-50 tw-hidden mx-auto tw-w-fit" id="actions-bar"
<div class="tw:sticky tw:bottom-4 tw:left-0 tw:right-0 tw:z-50 tw:hidden mx-auto tw:w-fit" id="actions-bar"
_="on change from #transactions-list or htmx:afterSettle from window
if #actions-bar then
if no <input[type='checkbox']:checked/> in #transactions-list
if #actions-bar
add .slide-in-bottom-reverse then settle
then add .tw-hidden to #actions-bar
then add .tw:hidden to #actions-bar
then remove .slide-in-bottom-reverse
end
else
if #actions-bar
remove .tw-hidden from #actions-bar
set #selected-count's innerHTML to length of <input[type='checkbox']:checked/> in #transactions-list
then remove .tw:hidden from #actions-bar
then trigger selected_transactions_updated
end
end
@@ -19,6 +20,8 @@
<div class="card slide-in-bottom">
<div class="card-body p-2 d-flex justify-content-between align-items-center gap-3">
{% spaceless %}
<div class="tw:font-bold tw:text-md ms-2" id="selected-count">0</div>
<div class="vr tw:align-middle"></div>
<div class="dropdown">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown"
aria-expanded="false">
@@ -26,20 +29,20 @@
</button>
<ul class="dropdown-menu">
<li>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
_="on click set <#transactions-list .transaction:not([style*='display: none']) input[type='checkbox']/>'s checked to true then call me.blur() then trigger change">
<i class="fa-regular fa-square-check tw-text-green-400 me-3"></i>{% translate 'Select All' %}
<i class="fa-regular fa-square-check tw:text-green-400 me-3"></i>{% translate 'Select All' %}
</div>
</li>
<li>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
_="on click set <#transactions-list input[type='checkbox']/>'s checked to false then call me.blur() then trigger change">
<i class="fa-regular fa-square tw-text-red-400 me-3"></i>{% translate 'Unselect All' %}
<i class="fa-regular fa-square tw:text-red-400 me-3"></i>{% translate 'Unselect All' %}
</div>
</li>
</ul>
</div>
<div class="vr tw-align-middle"></div>
<div class="vr tw:align-middle"></div>
<div class="btn-group">
<button class="btn btn-secondary btn-sm"
hx-get="{% url 'transactions_bulk_edit' %}"
@@ -56,17 +59,17 @@
<ul class="dropdown-menu">
<li>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
hx-get="{% url 'transactions_bulk_unpay' %}"
hx-include=".transaction">
<i class="fa-regular fa-circle tw-text-red-400 fa-fw me-3"></i>{% translate 'Mark as unpaid' %}
<i class="fa-regular fa-circle tw:text-red-400 fa-fw me-3"></i>{% translate 'Mark as unpaid' %}
</div>
</li>
<li>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
hx-get="{% url 'transactions_bulk_pay' %}"
hx-include=".transaction">
<i class="fa-regular fa-circle-check tw-text-green-400 fa-fw me-3"></i>{% translate 'Mark as paid' %}
<i class="fa-regular fa-circle-check tw:text-green-400 fa-fw me-3"></i>{% translate 'Mark as paid' %}
</div>
</li>
</ul>
@@ -91,7 +94,7 @@
_="install prompt_swal">
<i class="fa-solid fa-trash text-danger"></i>
</button>
<div class="vr tw-align-middle"></div>
<div class="vr tw:align-middle"></div>
<div class="btn-group"
_="on selected_transactions_updated from #actions-bar
set realTotal to math.bignumber(0)
@@ -149,10 +152,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Flat Total" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-flat-total"
_="on click
set original_value to my innerText
@@ -169,10 +172,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Real Total" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-real-total"
_="on click
set original_value to my innerText
@@ -189,10 +192,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Mean" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-mean"
_="on click
set original_value to my innerText
@@ -209,10 +212,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Max" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-max"
_="on click
set original_value to my innerText
@@ -229,10 +232,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Min" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-min"
_="on click
set original_value to my innerText
@@ -249,10 +252,10 @@
<li>
<div class="dropdown-item-text p-0">
<div>
<div class="text-body-secondary tw-text-xs tw-font-medium px-3">
<div class="text-body-secondary tw:text-xs tw:font-medium px-3">
{% trans "Count" %}
</div>
<div class="dropdown-item px-3 tw-cursor-pointer"
<div class="dropdown-item px-3 tw:cursor-pointer"
id="calc-menu-count"
_="on click
set original_value to my innerText

View File

@@ -1,9 +1,9 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Currencies' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -2,10 +2,10 @@
{% load i18n %}
<div class="container-fluid px-md-3 py-3 column-gap-5">
<div class="d-lg-flex justify-content-between mb-3 w-100">
<div class="tw-text-3xl fw-bold font-monospace d-flex align-items-center">
<div class="tw:text-3xl fw-bold font-monospace d-flex align-items-center">
{{ strategy.name }}
</div>
<div class="tw-text-sm text-lg-end mt-2 mt-lg-0">
<div class="tw:text-sm text-lg-end mt-2 mt-lg-0">
<div class="mb-2">
<span class="badge rounded-pill text-bg-secondary">{{ strategy.payment_currency.name }}</span> x <span class="badge rounded-pill text-bg-secondary">{{ strategy.target_currency.name }}</span>
</div>
@@ -19,7 +19,7 @@
• {{ strategy.current_price.1|date:"SHORT_DATETIME_FORMAT" }}
</c-amount.display>
{% else %}
<div class="tw-text-red-400">{% trans "No exchange rate available" %}</div>
<div class="tw:text-red-400">{% trans "No exchange rate available" %}</div>
{% endif %}
</div>
</div>
@@ -30,7 +30,7 @@
<div class="card">
<div class="card-body">
{% spaceless %}
<div class="card-title tw-text-xl">{% trans "Entries" %}<span>
<div class="card-title tw:text-xl">{% trans "Entries" %}<span>
<a class="text-decoration-none p-1 category-action"
role="button"
data-bs-toggle="tooltip"
@@ -190,7 +190,7 @@
<div class="card-body">
<h5 class="card-title">{% trans "Total P/L" %}</h5>
<div
class="card-text {% if strategy.total_profit_loss >= 0 %}tw-text-green-400{% else %}tw-text-red-400{% endif %}">
class="card-text {% if strategy.total_profit_loss >= 0 %}tw:text-green-400{% else %}tw:text-red-400{% endif %}">
<c-amount.display
:amount="strategy.total_profit_loss"
:prefix="strategy.payment_currency.prefix"
@@ -206,7 +206,7 @@
<div class="card-body">
<h5 class="card-title">{% trans "Total % P/L" %}</h5>
<div
class="card-text {% if strategy.total_profit_loss >= 0 %}tw-text-green-400{% else %}tw-text-red-400{% endif %}">
class="card-text {% if strategy.total_profit_loss >= 0 %}tw:text-green-400{% else %}tw:text-red-400{% endif %}">
{{ strategy.total_profit_loss_percentage|floatformat:2 }}%
</div>
</div>
@@ -451,7 +451,7 @@
<div class="card">
<div class="card-body">
<h5 class="card-title">{% trans "Investment Frequency" %}</h5>
<p class="card-text tw-text-gray-400">
<p class="card-text tw:text-gray-400">
{% trans "The straighter the blue line, the more consistent your DCA strategy is." %}
</p>
<canvas id="frequencyChart"></canvas>

View File

@@ -1,9 +1,9 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Dollar Cost Average Strategies' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"
@@ -25,12 +25,12 @@
<a href="{% url 'dca_strategy_detail_index' strategy_id=strategy.id %}" hx-boost="true"
class="text-decoration-none card-body">
<div class="">
<div class="card-title tw-text-xl">{{ strategy.name }}</div>
<div class="card-text tw-text-gray-400">{{ strategy.notes }}</div>
<div class="card-title tw:text-xl">{{ strategy.name }}</div>
<div class="card-text tw:text-gray-400">{{ strategy.notes }}</div>
</div>
</a>
<div class="card-footer text-end">
<a class="text-decoration-none tw-text-gray-400 p-1"
<a class="text-decoration-none tw:text-gray-400 p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Edit" %}"

View File

@@ -1,9 +1,9 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Entities' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -1,10 +1,10 @@
{% load currency_display %}
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Exchange Rates' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -58,7 +58,7 @@
<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 %}"
<a class="page-link tw:cursor-pointer {% if not page_obj.has_previous %}disabled{% endif %}"
hx-get="{% if page_obj.has_previous %}{% url 'exchange_rates_list_pair' %}{% endif %}"
hx-vals='{"page": 1, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-include="#filter, #order"
@@ -79,13 +79,13 @@
{% 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">
<a class="page-link tw:cursor-pointer">
{{ page_number }}
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link tw-cursor-pointer"
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'exchange_rates_list_pair' %}"
hx-vals='{"page": {{ page_number }}, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-target="#exchange-rates-table"
@@ -104,7 +104,7 @@
</a>
</li>
<li class="page-item">
<a class="page-link tw-cursor-pointer"
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'exchange_rates_list_pair' %}" hx-target="#exchange-rates-table"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-include="#filter, #order"
@@ -115,7 +115,7 @@
</li>
{% endif %}
<li class="page-item">
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw-cursor-pointer"
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw:cursor-pointer"
hx-get="{% if page_obj.has_next %}{% url 'exchange_rates_list_pair' %}{% endif %}"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-include="#filter, #order"

View File

@@ -1,10 +1,10 @@
{% load currency_display %}
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Automatic Exchange Rates' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -58,7 +58,7 @@
<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 %}"
<a class="page-link tw:cursor-pointer {% if not page_obj.has_previous %}disabled{% endif %}"
hx-get="{% if page_obj.has_previous %}{% url 'exchange_rates_list_pair' %}{% endif %}"
hx-vals='{"page": 1, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-include="#filter, #order"
@@ -79,13 +79,13 @@
{% 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">
<a class="page-link tw:cursor-pointer">
{{ page_number }}
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link tw-cursor-pointer"
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'exchange_rates_list_pair' %}"
hx-vals='{"page": {{ page_number }}, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-target="#exchange-rates-table"
@@ -104,7 +104,7 @@
</a>
</li>
<li class="page-item">
<a class="page-link tw-cursor-pointer"
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'exchange_rates_list_pair' %}" hx-target="#exchange-rates-table"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-include="#filter, #order"
@@ -115,7 +115,7 @@
</li>
{% endif %}
<li class="page-item">
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw-cursor-pointer"
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw:cursor-pointer"
hx-get="{% if page_obj.has_next %}{% url 'exchange_rates_list_pair' %}{% endif %}"
hx-vals='{"page": {{ page_obj.paginator.num_pages }}, "from": "{{ from_currency|default_if_none:"" }}", "to": "{{ to_currency|default_if_none:"" }}"}'
hx-include="#filter, #order"

View File

@@ -8,7 +8,7 @@
{% block body %}
{% if message %}
<div class="alert alert-info" role="alert" id="msg" hx-preserve="true">
<h6 class="alert-heading tw-italic tw-font-bold">{% trans 'A message from the author' %}</h6>
<h6 class="alert-heading tw:italic tw:font-bold">{% trans 'A message from the author' %}</h6>
<hr>
<p class="mb-0">{{ message|linebreaksbr }}</p>
</div>

View File

@@ -1,11 +1,11 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Import Profiles' %}<span>
<span class="dropdown" data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}">
<a class="text-decoration-none tw-text-2xl p-1" role="button"
<a class="text-decoration-none tw:text-2xl p-1" role="button"
data-bs-toggle="dropdown"
data-bs-title="{% translate "Add" %}" aria-expanded="false">
<i class="fa-solid fa-circle-plus fa-fw"></i>

View File

@@ -15,20 +15,20 @@
{% for run in runs %}
<div class="col">
<div class="card">
<div class="card-header tw-text-sm {% if run.status == run.Status.QUEUED %}tw-text-white{% elif run.status == run.Status.PROCESSING %}text-warning{% elif run.status == run.Status.FINISHED %}text-success{% else %}text-danger{% endif %}">
<div class="card-header tw:text-sm {% if run.status == run.Status.QUEUED %}text-body{% elif run.status == run.Status.PROCESSING %}text-warning{% elif run.status == run.Status.FINISHED %}text-success{% else %}text-danger{% endif %}">
<span><i class="fa-solid {% if run.status == run.Status.QUEUED %}fa-hourglass-half{% elif run.status == run.Status.PROCESSING %}fa-spinner{% elif run.status == run.Status.FINISHED %}fa-check{% else %}fa-xmark{% endif %} fa-fw me-2"></i>{{ run.get_status_display }}</span>
</div>
<div class="card-body">
<h5 class="card-title"><i class="fa-solid fa-hashtag me-1 tw-text-xs tw-text-gray-400"></i>{{ run.id }}<span class="tw-text-xs tw-text-gray-400 ms-1">({{ run.file_name }})</span></h5>
<h5 class="card-title"><i class="fa-solid fa-hashtag me-1 tw:text-xs tw:text-gray-400"></i>{{ run.id }}<span class="tw:text-xs tw:text-gray-400 ms-1">({{ run.file_name }})</span></h5>
<hr>
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 w-100 g-4">
<div class="col">
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<div class="text-body-secondary tw-text-xs tw-font-medium">
<div class="text-body-secondary tw:text-xs tw:font-medium">
{% trans 'Total Items' %}
</div>
<div class="tw-text-sm">
<div class="tw:text-sm">
{{ run.total_rows }}
</div>
</div>
@@ -38,10 +38,10 @@
<div class="col">
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<div class="text-body-secondary tw-text-xs tw-font-medium">
<div class="text-body-secondary tw:text-xs tw:font-medium">
{% trans 'Processed Items' %}
</div>
<div class="tw-text-sm">
<div class="tw:text-sm">
{{ run.processed_rows }}
</div>
</div>
@@ -51,10 +51,10 @@
<div class="col">
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<div class="text-body-secondary tw-text-xs tw-font-medium">
<div class="text-body-secondary tw:text-xs tw:font-medium">
{% trans 'Skipped Items' %}
</div>
<div class="tw-text-sm">
<div class="tw:text-sm">
{{ run.skipped_rows }}
</div>
</div>
@@ -64,10 +64,10 @@
<div class="col">
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<div class="text-body-secondary tw-text-xs tw-font-medium">
<div class="text-body-secondary tw:text-xs tw:font-medium">
{% trans 'Failed Items' %}
</div>
<div class="tw-text-sm">
<div class="tw:text-sm">
{{ run.failed_rows }}
</div>
</div>
@@ -77,10 +77,10 @@
<div class="col">
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<div class="text-body-secondary tw-text-xs tw-font-medium">
<div class="text-body-secondary tw:text-xs tw:font-medium">
{% trans 'Successful Items' %}
</div>
<div class="tw-text-sm">
<div class="tw:text-sm">
{{ run.successful_rows }}
</div>
</div>

View File

@@ -5,7 +5,7 @@
{% block title %}{% translate 'Logs for' %} #{{ run.id }}{% endblock %}
{% block body %}
<div class="card tw-max-h-full tw-overflow-auto">
<div class="card tw:max-h-full tw:overflow-auto">
<div class="card-body">
{{ run.logs|linebreaks }}
</div>

View File

@@ -12,7 +12,7 @@
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0 nav-underline" hx-push-url="true">
<ul class="navbar-nav me-auto mb-3 mb-lg-0 nav-underline" hx-push-url="true">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle {% active_link views='monthly_overview||yearly_overview_currency||yearly_overview_account||calendar' %}"
href="#"
@@ -161,16 +161,16 @@
</ul>
</li>
</ul>
<ul class="navbar-nav mt-3 mb-2 mb-lg-0 mt-lg-0">
<li class="nav-item text-center w-100">
<a class="nav-item tw-text-2xl tw-cursor-pointer me-lg-4"
<ul class="navbar-nav mb-2 mb-lg-0 gap-3">
<li class="nav-item">
<div class="nav-link tw:lg:text-2xl! tw:cursor-pointer"
data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="{% trans "Calculator" %}"
_="on click trigger show on #calculator">
<i class="fa-solid fa-calculator"></i>
</a>
<span class="d-lg-none d-inline">{% trans "Calculator" %}</span>
</div>
</li>
<li class="text-center w-100">{% include 'includes/navbar/user_menu.html' %}</li>
<li class="w-100">{% include 'includes/navbar/user_menu.html' %}</li>
</ul>
</div>
</div>

View File

@@ -1,9 +1,10 @@
{% load settings %}
{% load i18n %}
<div class="dropdown">
<a class="tw-text-2xl" type="button" data-bs-toggle="dropdown" aria-expanded="false">
<div class="nav-link tw:lg:text-2xl! tw:cursor-pointer" type="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="fa-solid fa-user"></i>
</a>
<span class="d-lg-none d-inline">{% trans "Profile" %}</span>
</div>
<ul class="dropdown-menu dropdown-menu-start dropdown-menu-lg-end">
<li class="dropdown-item-text">{{ user.email }}</li>
<li><hr class="dropdown-divider"></li>

View File

@@ -1,14 +1,14 @@
{# We use this to preload dynamically generated tailwind classes so the compiler can build them ahead of time #}
<div class="tw-text-blue-800"></div>
<div class="tw-text-yellow-800"></div>
<div class="tw-text-red-800"></div>
<div class="tw-text-green-800"></div>
<div class="tw-text-blue-400"></div>
<div class="tw-text-yellow-400"></div>
<div class="tw-text-red-400"></div>
<div class="tw-text-green-400"></div>
<div class="tw-bg-blue-300"></div>
<div class="tw-bg-yellow-300"></div>
<div class="tw-bg-red-300"></div>
<div class="tw-bg-green-300"></div>
<div class="tw:text-blue-800"></div>
<div class="tw:text-yellow-800"></div>
<div class="tw:text-red-800"></div>
<div class="tw:text-green-800"></div>
<div class="tw:text-blue-400"></div>
<div class="tw:text-yellow-400"></div>
<div class="tw:text-red-400"></div>
<div class="tw:text-green-400"></div>
<div class="tw:bg-blue-300"></div>
<div class="tw:bg-yellow-300"></div>
<div class="tw:bg-red-300"></div>
<div class="tw:bg-green-300"></div>

View File

@@ -1,15 +1,19 @@
<script type="text/hyperscript">
on paid if body do not include #settings-mute-sound
js
volume = JSON.parse(document.getElementById('volume').textContent) / 10
paidSound.pause()
paidSound.currentTime = 0
paidSound.volume = volume
paidSound.play()
end
end
on unpaid if body do not include #settings-mute-sound
js
volume = JSON.parse(document.getElementById('volume').textContent) / 10
unpaidSound.pause()
unpaidSound.currentTime = 0
unpaidSound.volume = volume
unpaidSound.play()
end
end

View File

@@ -1,4 +1,3 @@
{% load webpack_loader %}
{% stylesheet_pack 'style' %}
{#{% stylesheet_pack 'select' %}#}

View File

@@ -1,5 +1,5 @@
{% load formats %}
<div class="tw-hidden tw-w-[60vw] lg:tw-w-[30vw] xl:tw-w-[20vw] position-fixed shadow rounded-3 bg-body tw-border-gray-700 tw-border tw-border-solid tw-text-center tw-align-middle tw-z-[2000] tw-touch-none user-select-none"
<div class="tw:hidden tw:w-[60vw] tw:lg:w-[30vw] tw:xl:w-[20vw] position-fixed shadow rounded-3 bg-body tw:border-gray-700 tw:border tw:border-solid tw:text-center tw:align-middle tw:z-[2000] tw:touch-none user-select-none"
id="calculator"
hx-preserve
_="
@@ -13,8 +13,8 @@
on focusin halt the event end -- this prevents bootstrap's static offcanvas from hijacking the focus from the input when open end
on show or keyup[code is 'KeyC' and altKey is true] from body
if my.classList.contains('tw-hidden')
remove .tw-hidden from me
if my.classList.contains('tw:hidden')
remove .{'tw:hidden'} from me
measure my width, height
set xoff to (window.innerWidth/2) - (width/2)
set yoff to (window.innerHeight/2) - (height)
@@ -23,7 +23,7 @@
then call #calculator-input.focus()
else
add .scale-out-center to me then wait for animationend then remove .scale-out-center from me
add .tw-hidden to me
add .{'tw:hidden'} to me
end
end
@@ -48,7 +48,7 @@
end">
<div id="calculator-handle"
class="position-absolute bg-secondary rounded-top-2 tw-cursor-move d-flex align-items-center justify-content-center tw-top-[-20px] tw-left-[3px] tw-w-[2em] tw-h-[20px]">
class="position-absolute bg-secondary rounded-top-2 tw:cursor-move d-flex align-items-center justify-content-center tw:top-[-20px] tw:left-[3px] tw:w-[2em] tw:h-[20px]">
<i class="fa-solid fa-grip"></i>
</div>
@@ -73,31 +73,31 @@
end
then set localizedResult to it
set #calculator-result.innerText to localizedResult
then remove .tw-hidden from #calculator-result-container
then remove .{'tw:hidden'} from #calculator-result-container
then add .swing-in-top-fwd to #calculator-result-container
then settle
then remove .swing-in-top-fwd from #calculator-result-container
else
add .swing-out-top-bck to #calculator-result-container
then settle
then add .tw-hidden to #calculator-result-container
then add .{'tw:hidden'} to #calculator-result-container
then remove .swing-out-top-bck from #calculator-result-container
end
catch e
add .swing-out-top-bck to #calculator-result-container
then settle
then add .tw-hidden to #calculator-result-container
then add .{'tw:hidden'} to #calculator-result-container
then remove .swing-out-top-bck from #calculator-result-container
end"
placeholder="2 + 2">
<div class="tw-hidden" id="calculator-result-container">
<div class="tw:hidden" id="calculator-result-container">
<div class="d-flex flex-row p-2 justify-content-between">
<div class="tw-text-gray-400">=</div>
<div class="tw:text-gray-400">=</div>
<div id="calculator-result" class="user-select-all"></div>
</div>
</div>
<div class="position-absolute tw-cursor-pointer top-0 start-100 translate-middle tw-p-0 text-bg-primary border border-light rounded-circle tw-flex tw-items-center tw-justify-center tw-w-5 tw-h-5"
<div class="position-absolute tw:cursor-pointer top-0 start-100 translate-middle tw:p-0 text-bg-primary border border-light rounded-circle tw:flex tw:items-center tw:justify-center tw:w-5 tw:h-5"
_="on click trigger show on #calculator">
<i class="fa-solid fa-xmark tw-flex tw-items-center tw-justify-center tw-w-full tw-h-full"></i>
<i class="fa-solid fa-xmark tw:flex tw:items-center tw:justify-center tw:w-full tw:h-full"></i>
</div>
</div>

View File

@@ -12,17 +12,17 @@
data-bs-target="#flush-collapse-{{ id }}" aria-expanded="false"
aria-controls="flush-collapse-{{ id }}">
<span>
<span class="tw-text-gray-300">{% trans "You've spent an average of" %}</span>
<span class="tw:text-gray-300">{% trans "You've spent an average of" %}</span>
<c-amount.display
:amount="data.average"
:prefix="data.currency.prefix"
:suffix="data.currency.suffix"
:decimal_places="data.currency.decimal_places"
custom_class="tw-text-3xl"
custom_class="tw:text-3xl"
divless></c-amount.display>
<span class="tw-text-gray-300">{% trans 'on the last 12 months, at this rate you could go by' %}</span>
<span class="tw-text-3xl">{{ data.months }}</span>
<span class="tw-text-gray-300">{% trans 'months without any income.' %}</span>
<span class="tw:text-gray-300">{% trans 'on the last 12 months, at this rate you could go by' %}</span>
<span class="tw:text-3xl">{{ data.months }}</span>
<span class="tw:text-gray-300">{% trans 'months without any income.' %}</span>
</span>
</button>
</h2>
@@ -31,7 +31,7 @@
<div class="accordion-body">
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'average expenses' %}</div>
<div class="tw:text-gray-400">{% translate 'average expenses' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div class="text-end font-monospace">
@@ -45,7 +45,7 @@
</div>
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'liquid total' %}</div>
<div class="tw:text-gray-400">{% translate 'liquid total' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div class="text-end font-monospace">
@@ -59,7 +59,7 @@
</div>
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'months left' %}</div>
<div class="tw:text-gray-400">{% translate 'months left' %}</div>
</div>
<div class="dotted-line flex-grow-1"></div>
<div class="text-end font-monospace">

View File

@@ -7,7 +7,7 @@
<div class="show-loading" hx-get="{% url 'insights_sankey_by_currency' %}" hx-trigger="updated from:window"
hx-swap="outerHTML" hx-include="#picker-form, #picker-type">
{% endif %}
<div class="chart-container position-relative tw-min-h-[85vh] tw-max-h-[85vh] tw-h-full tw-w-full"
<div class="chart-container position-relative tw:min-h-[85vh] tw:max-h-[85vh] tw:h-full tw:w-full"
id="sankeyContainer"
_="init call setupSankeyChart() end">
<canvas id="sankeyChart"></canvas>

View File

@@ -8,27 +8,27 @@
<div class="container-fluid">
<div class="row my-3 h-100">
<div class="col-lg-2 col-md-3 mb-3 mb-md-0">
<div class="position-sticky tw-top-3">
<div class="position-sticky tw:top-3">
<div class="">
<div class="mb-2 w-100 d-lg-inline-flex d-grid gap-2 flex-wrap justify-content-lg-center" role="group"
_="on change
set type to event.target.value
add .tw-hidden to <#picker-form > div:not(.tw-hidden)/>
add .tw:hidden to <#picker-form > div:not(.tw:hidden)/>
if type == 'month'
remove .tw-hidden from #month-form
remove .tw:hidden from #month-form
end
if type == 'year'
remove .tw-hidden from #year-form
remove .tw:hidden from #year-form
end
if type == 'month-range'
remove .tw-hidden from #month-range-form
remove .tw:hidden from #month-range-form
end
if type == 'year-range'
remove .tw-hidden from #year-range-form
remove .tw:hidden from #year-range-form
end
if type == 'date-range'
remove .tw-hidden from #date-range-form
remove .tw:hidden from #date-range-form
end
then trigger updated"
id="picker-type">
@@ -60,16 +60,16 @@
<div id="month-form" class="">
{% crispy month_form %}
</div>
<div id="year-form" class="tw-hidden">
<div id="year-form" class="tw:hidden">
{% crispy year_form %}
</div>
<div id="month-range-form" class="tw-hidden">
<div id="month-range-form" class="tw:hidden">
{% crispy month_range_form %}
</div>
<div id="year-range-form" class="tw-hidden">
<div id="year-range-form" class="tw:hidden">
{% crispy year_range_form %}
</div>
<div id="date-range-form" class="tw-hidden">
<div id="date-range-form" class="tw:hidden">
{% crispy date_range_form %}
</div>
</form>

View File

@@ -1,9 +1,9 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Installment Plans' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -64,10 +64,10 @@
</div>
</td>
<td class="col">
<div class="{% if installment_plan.type == 'EX' %}tw-text-red-400{% else %}tw-text-green-400{% endif %}">
<div class="{% if installment_plan.type == 'EX' %}tw:text-red-400{% else %}tw:text-green-400{% endif %}">
{{ installment_plan.description }}
</div>
<div class="tw-text-sm tw-text-gray-400">{{ installment_plan.notes|linebreaksbr }}</div>
<div class="tw:text-sm tw:text-gray-400">{{ installment_plan.notes|linebreaksbr }}</div>
</td>
</tr>
{% endfor %}

View File

@@ -11,7 +11,7 @@
<div class="container px-md-3 py-3 column-gap-5"
_="install init_tom_select
install init_datepicker">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
<div>{% translate 'Currency Converter' %}</div>
</div>
<div class="row">
@@ -27,7 +27,7 @@
</div>
<div>{{ form.from_currency|as_crispy_field }}</div>
</div>
<div class="col text-primary tw-flex tw-items-center tw-justify-center my-3 my-lg-0">
<div class="col text-primary tw:flex tw:items-center tw:justify-center my-3 my-lg-0">
<i class="fa-solid fa-equals"></i>
</div>
<div class="col-12 col-lg-5">
@@ -45,7 +45,7 @@
</div>
</div>
<div class="row">
<div class="tw-cursor-pointer text-primary text-end"
<div class="tw:cursor-pointer text-primary text-end"
_="on click
set from_value to #id_from_currency's value
set to_value to #id_to_currency's value
@@ -66,7 +66,7 @@
{% for rate in data.rates.values %}
<div class="d-flex justify-content-between align-items-baseline mt-2">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">
<div class="tw:text-gray-400">
{# <c-amount.display#}
{# :amount="1"#}
{# :prefix="data.prefix"#}
@@ -76,7 +76,7 @@
</div>
<div class="dotted-line flex-grow-1"></div>
{% if currency.income_projected != 0 %}
<div class="text-end font-monospace tw-text-green-400">
<div class="text-end font-monospace tw:text-green-400">
<c-amount.display
:amount="rate.rate"
:prefix="rate.prefix"

View File

@@ -6,7 +6,7 @@
{% block content %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
<div>{% translate 'Unit Price Calculator' %}</div>
</div>
<div class="card mb-3 d-none" id="card-placeholder">
@@ -36,7 +36,7 @@
</div>
<div class="col-lg">
<label class="form-label">{% trans 'Unit price' %}</label>
<div class="unit-price tw-text-xl" data-amount="0">0</div>
<div class="unit-price tw:text-xl" data-amount="0">0</div>
</div>
</div>
</div>
@@ -109,7 +109,7 @@
</div>
<div class="col-lg">
<label class="form-label">{% trans 'Unit price' %}</label>
<div class="unit-price tw-text-xl" data-amount="0">0</div>
<div class="unit-price tw:text-xl" data-amount="0">0</div>
</div>
</div>
</div>
@@ -134,7 +134,7 @@
</div>
<div class="col-lg">
<label class="form-label">{% trans 'Unit price' %}</label>
<div class="unit-price tw-text-xl" data-amount="0">0</div>
<div class="unit-price tw:text-xl" data-amount="0">0</div>
</div>
</div>
</div>

View File

@@ -6,7 +6,7 @@
{% for x in transactions_by_date %}
<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">
<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"

View File

@@ -6,7 +6,7 @@
<c-ui.info-card color="yellow" icon="fa-solid fa-calendar-day" title="{% trans 'Daily Spending Allowance' %}" help_text={% trans "This is the final total divided by the remaining days in the month" %}>
<div class="d-flex justify-content-between mt-3">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'today' %}</div>
<div class="tw:text-gray-400">{% translate 'today' %}</div>
</div>
<div class="text-end font-monospace">
{% for currency in daily_spending_allowance.values %}
@@ -39,7 +39,7 @@
<c-ui.info-card color="green" icon="fa-solid fa-arrow-right-to-bracket" title="{% trans 'Income' %}">
<div class="d-flex justify-content-between mt-3">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'current' %}</div>
<div class="tw:text-gray-400">{% translate 'current' %}</div>
</div>
<div class="text-end font-monospace">
{% for currency in income_current.values %}
@@ -69,7 +69,7 @@
<hr class="my-1">
<div class="d-flex justify-content-between">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'projected' %}</div>
<div class="tw:text-gray-400">{% translate 'projected' %}</div>
</div>
<div class="text-end font-monospace">
{% for currency in income_projected.values %}
@@ -103,7 +103,7 @@
<c-ui.info-card color="red" icon="fa-solid fa-arrow-right-from-bracket" title="{% trans 'Expenses' %}">
<div class="d-flex justify-content-between mt-3">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'current' %}</div>
<div class="tw:text-gray-400">{% translate 'current' %}</div>
</div>
<div class="text-end font-monospace">
{% for currency in expense_current.values %}
@@ -133,7 +133,7 @@
<hr class="my-1">
<div class="d-flex justify-content-between">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'projected' %}</div>
<div class="tw:text-gray-400">{% translate 'projected' %}</div>
</div>
<div class="text-end font-monospace">
{% for currency in expense_projected.values %}
@@ -167,7 +167,7 @@
<c-ui.info-card color="blue" icon="fa-solid fa-scale-balanced" title="{% trans 'Total' %}">
<div class="d-flex justify-content-between mt-3">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'current' %}</div>
<div class="tw:text-gray-400">{% translate 'current' %}</div>
</div>
<div class="text-end font-monospace">
{% for currency in total_current.values %}
@@ -196,7 +196,7 @@
</div>
<div class="d-flex justify-content-between mt-3">
<div class="text-end font-monospace">
<div class="tw-text-gray-400">{% translate 'projected' %}</div>
<div class="tw:text-gray-400">{% translate 'projected' %}</div>
</div>
<div class="text-end font-monospace">
{% for currency in total_projected.values %}
@@ -256,7 +256,7 @@
<div class="col">
<c-ui.info-card color="yellow" icon="fa-solid fa-percent" title="{% trans 'Distribution' %}">
{% for p in percentages.values %}
<p class="tw-text-gray-400 mb-2 {% if not forloop.first %}mt-3{% endif %}">{{ p.currency.name }}</p>
<p class="tw:text-gray-400 mb-2 {% if not forloop.first %}mt-3{% endif %}">{{ p.currency.name }}</p>
<c-ui.percentage-distribution :percentage="p"></c-ui.percentage-distribution>
{% endfor %}
</c-ui.info-card>

View File

@@ -17,7 +17,7 @@
<div class="row mb-3 gx-xl-4 gy-3 mb-4">
{# Date picker#}
<div class="col-12 col-xl-4 flex-row align-items-center d-flex">
<div class="tw-text-base h-100 align-items-center d-flex">
<div class="tw:text-base h-100 align-items-center d-flex">
<a role="button"
class="pe-4 py-2"
hx-boost="true"
@@ -25,7 +25,7 @@
href="{% url 'monthly_overview' month=previous_month year=previous_year %}"><i
class="fa-solid fa-chevron-left"></i></a>
</div>
<div class="tw-text-3xl fw-bold font-monospace tw-w-full text-center"
<div class="tw:text-3xl fw-bold font-monospace tw:w-full text-center"
hx-get="{% url 'month_year_picker' %}"
hx-target="#generic-offcanvas-left"
hx-trigger="click, date_picker from:window"
@@ -33,7 +33,7 @@
role="button">
{{ month|month_name }} {{ year }}
</div>
<div class="tw-text-base mx-2 h-100 align-items-center d-flex">
<div class="tw:text-base mx-2 h-100 align-items-center d-flex">
<a role="button"
class="ps-3 py-2"
hx-boost="true"
@@ -104,7 +104,7 @@
<div id="summary"
hx-get="{% url 'monthly_summary' month=month year=year %}"
class="show-loading"
hx-trigger="load, updated from:window, selective_update from:window">
hx-trigger="load, updated from:window, selective_update from:window, every 10m">
</div>
</div>
<div class="tab-pane fade {% if summary_tab == 'currency' %}show active{% endif %}"
@@ -115,7 +115,7 @@
<div id="currency-summary"
hx-get="{% url 'monthly_currency_summary' month=month year=year %}"
class="show-loading"
hx-trigger="load, updated from:window, selective_update from:window">
hx-trigger="load, updated from:window, selective_update from:window, every 10m">
</div>
</div>
<div class="tab-pane fade {% if summary_tab == 'account' %}show active{% endif %}"
@@ -126,7 +126,7 @@
<div id="account-summary"
hx-get="{% url 'monthly_account_summary' month=month year=year %}"
class="show-loading"
hx-trigger="load, updated from:window, selective_update from:window">
hx-trigger="load, updated from:window, selective_update from:window, every 10m">
</div>
</div>
</div>
@@ -143,11 +143,11 @@
</button>
</div>
{# Ordering button#}
<div class="col-sm-6 col-12 tw-content-center my-3 my-sm-0">
<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 focus-visible:tw-outline-0 w-full pe-2 tw-leading-normal text-bg-tertiary tw-font-medium rounded"
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>
@@ -191,7 +191,7 @@
<div id="transactions"
class="show-loading"
hx-get="{% url 'monthly_transactions_list' month=month year=year %}"
hx-trigger="load, updated from:window" hx-include="#filter, #order">
hx-trigger="load, updated from:window, every 10m" hx-include="#filter, #order">
</div>
</div>
</div>

View File

@@ -9,6 +9,7 @@
{% block title %}{% if type == "current" %}{% translate 'Current Net Worth' %}{% else %}{% translate 'Projected Net Worth' %}{% endif %}{% endblock %}
{% block content %}
<div hx-trigger="every 60m" class="show-loading" hx-get="" hx-target="body">
<div class="container px-md-3 py-3" _="init call initializeAccountChart() then initializeCurrencyChart() end">
<div class="row gx-xl-4 gy-3 mb-4">
<div class="col-12 col-xl-5">
@@ -19,7 +20,7 @@
{% for currency in currency_net_worth.values %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="currency-name text-start font-monospace tw-text-gray-300"
<div class="currency-name text-start font-monospace tw:text-gray-300"
_="on click showOnlyCurrencyDataset('{{ currency.currency.name }}')">
{{ currency.currency.name }}
</div>
@@ -48,7 +49,7 @@
{% endif %}
{% if currency.consolidated and currency.consolidated.total_final != currency.total_final %}
<div class="d-flex align-items-baseline w-100">
<div class="account-name text-start font-monospace tw-text-gray-300">
<div class="account-name text-start font-monospace tw:text-gray-300">
<span class="hierarchy-line-icon"></span>{% trans 'Consolidated' %}</div>
<div class="dotted-line flex-grow-1"></div>
<div class="">
@@ -68,7 +69,7 @@
</div>
</div>
<div class="col-12 col-xl-7">
<div class="chart-container position-relative tw-min-h-[40vh] tw-h-full">
<div class="chart-container position-relative tw:min-h-[40vh] tw:h-full">
<canvas id="currencyBalanceChart"></canvas>
</div>
</div>
@@ -85,14 +86,14 @@
{% if data.grouper %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="text-start font-monospace tw-text-gray-300"><span class="badge text-bg-primary">
<div class="text-start font-monospace tw:text-gray-300"><span class="badge text-bg-primary">
{{ data.grouper }}</span></div>
</div>
</div>
{% for account in data.list %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="account-name text-start font-monospace tw-text-gray-300"
<div class="account-name text-start font-monospace tw:text-gray-300"
_="on click showOnlyAccountDataset('{{ account.account.name }}')">
<span class="hierarchy-line-icon"></span>{{ account.account.name }}</div>
<div class="dotted-line flex-grow-1"></div>
@@ -120,7 +121,7 @@
{% for account in data.list %}
<div class="d-flex justify-content-between mt-2">
<div class="d-flex align-items-baseline w-100">
<div class="account-name text-start font-monospace tw-text-gray-300"
<div class="account-name text-start font-monospace tw:text-gray-300"
_="on click showOnlyAccountDataset('{{ account.account.name }}')">
{{ account.account.name }}
</div>
@@ -152,7 +153,7 @@
</div>
</div>
<div class="col-12 col-xl-7">
<div class="chart-container position-relative tw-min-h-[40vh] tw-h-full">
<div class="chart-container position-relative tw:min-h-[40vh] tw:h-full">
<canvas id="accountBalanceChart"></canvas>
</div>
</div>
@@ -318,5 +319,6 @@
call currencyChart.update()
end
</script>
</div>
<c-ui.transactions_fab></c-ui.transactions_fab>
{% endblock %}

View File

@@ -8,7 +8,7 @@
<div class="list-group list-group-flush">
{% for qt in quick_transactions %}
<a hx-get="{% url 'quick_transaction_add_as_transaction' quick_transaction_id=qt.id %}"
class="list-group-item list-group-item-action tw-cursor-pointer {% if qt.type == 'EX' %}!tw-text-red-400{% else %}!tw-text-green-400{% endif %}">{{ qt.name }}</a>
class="list-group-item list-group-item-action tw:cursor-pointer {% if qt.type == 'EX' %}tw:text-red-400!{% else %}tw:text-green-400!{% endif %}">{{ qt.name }}</a>
{% empty %}
<c-msg.empty title="{% translate "Nothing to see here..." %}" remove-padding></c-msg.empty>
{% endfor %}

View File

@@ -42,7 +42,7 @@
</td>
<td class="col">
<div
class="{% if qt.type == 'EX' %}tw-text-red-400{% else %}tw-text-green-400{% endif %}">
class="{% if qt.type == 'EX' %}tw:text-red-400{% else %}tw:text-green-400{% endif %}">
{{ qt.name }}
</div>
</td>

View File

@@ -6,10 +6,10 @@
{% block content %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Quick Transactions' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -1,9 +1,9 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Recurring Transactions' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -100,10 +100,10 @@
</div>
</td>
<td class="col">
<div class="{% if recurring_transaction.type == 'EX' %}tw-text-red-400{% else %}tw-text-green-400{% endif %}">
<div class="{% if recurring_transaction.type == 'EX' %}tw:text-red-400{% else %}tw:text-green-400{% endif %}">
{{ recurring_transaction.description }}
</div>
<div class="tw-text-sm tw-text-gray-400">{{ recurring_transaction.notes|linebreaksbr }}</div>
<div class="tw:text-sm tw:text-gray-400">{{ recurring_transaction.notes|linebreaksbr }}</div>
</td>
</tr>
{% endfor %}

View File

@@ -1,9 +1,9 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Rules' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"
@@ -76,13 +76,13 @@
data-bs-title="
{% if rule.active %}{% translate "Deactivate" %}{% else %}{% translate "Activate" %}{% endif %}"
hx-get="{% url 'transaction_rule_toggle_activity' transaction_rule_id=rule.id %}">
{% if rule.active %}<i class="fa-solid fa-toggle-on tw-text-green-400"></i>{% else %}
<i class="fa-solid fa-toggle-off tw-text-red-400"></i>{% endif %}
{% if rule.active %}<i class="fa-solid fa-toggle-on tw:text-green-400"></i>{% else %}
<i class="fa-solid fa-toggle-off tw:text-red-400"></i>{% endif %}
</a>
</td>
<td class="col">
<div>{{ rule.name }}</div>
<div class="tw-text-gray-400">{{ rule.description }}</div>
<div class="tw:text-gray-400">{{ rule.description }}</div>
</td>
</tr>
{% endfor %}

View File

@@ -7,17 +7,17 @@
{% block body %}
<div hx-get="{% url 'transaction_rule_view' transaction_rule_id=transaction_rule.id %}"
hx-trigger="updated from:window" hx-target="closest .offcanvas" class="show-loading">
<div class="tw-text-2xl">{{ transaction_rule.name }}</div>
<div class="tw-text-base tw-text-gray-400">{{ transaction_rule.description }}</div>
<div class="tw:text-2xl">{{ transaction_rule.name }}</div>
<div class="tw:text-base tw:text-gray-400">{{ transaction_rule.description }}</div>
<hr>
<div class="my-3">
<div class="tw-text-xl mb-2">{% translate 'If transaction...' %}</div>
<div class="tw:text-xl mb-2">{% translate 'If transaction...' %}</div>
<div class="card">
<div class="card-body">
{{ transaction_rule.trigger }}
</div>
<div class="card-footer text-end">
<a class="text-decoration-none tw-text-gray-400 p-1"
<a class="text-decoration-none tw:text-gray-400 p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Edit" %}"
@@ -29,7 +29,7 @@
</div>
<div class="my-3">
<div class="tw-text-xl mb-2">{% translate 'Then...' %}</div>
<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">
@@ -41,7 +41,7 @@
<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"
<a class="text-decoration-none tw:text-gray-400 p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Edit" %}"
@@ -74,7 +74,7 @@
<div>{% trans 'Edit to view' %}</div>
</div>
<div class="card-footer text-end">
<a class="text-decoration-none tw-text-gray-400 p-1"
<a class="text-decoration-none tw:text-gray-400 p-1"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Edit" %}"

View File

@@ -1,9 +1,9 @@
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Tags' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -7,7 +7,7 @@
{% 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 class="mt-3 mb-1 w-100 tw:text-base border-bottom bg-body">
<a class="text-decoration-none d-inline-block w-100"
role="button"
data-bs-toggle="collapse"
@@ -47,7 +47,7 @@
<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 %}"
<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"
@@ -68,13 +68,13 @@
{% 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">
<a class="page-link tw:cursor-pointer">
{{ page_number }}
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link tw-cursor-pointer"
<a class="page-link tw:cursor-pointer"
hx-get="{% url 'transactions_all_list' %}"
hx-vals='{"page": {{ page_number }}}'
hx-include="#filter, #order"
@@ -94,7 +94,7 @@
</a>
</li>
<li class="page-item">
<a class="page-link tw-cursor-pointer"
<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"
@@ -105,7 +105,7 @@
</li>
{% endif %}
<li class="page-item">
<a class="page-link {% if not page_obj.has_next %}disabled{% endif %} tw-cursor-pointer"
<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"

View File

@@ -28,10 +28,10 @@
</div>
</div>
<div class="col-12 col-xl-6 order-2 order-xl-1">
<div class="text-end tw-justify-end tw-flex tw-text-sm mb-3">
<div class="tw-content-center" _="on change trigger updated on window">
<div class="text-end tw:justify-end tw:flex tw:text-sm mb-3">
<div class="tw:content-center" _="on change trigger updated on window">
<label for="order">{% translate "Order by" %}</label>
<select class="tw-border-0 focus-visible:tw-outline-0 w-full pe-2 tw-leading-normal text-bg-tertiary tw-font-medium rounded" name="order" id="order">
<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>
@@ -102,4 +102,5 @@
</div>
</div>
</div>
<c-ui.transactions_fab></c-ui.transactions_fab>
{% endblock %}

View File

@@ -5,7 +5,7 @@
{% block content %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
<div>{% translate 'Deleted transactions' %}</div>
</div>

View File

@@ -1,10 +1,10 @@
{% load hijack %}
{% load i18n %}
<div class="container px-md-3 py-3 column-gap-5">
<div class="tw-text-3xl fw-bold font-monospace tw-w-full mb-3">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full mb-3">
{% spaceless %}
<div>{% translate 'Users' %}<span>
<a class="text-decoration-none tw-text-2xl p-1 category-action"
<a class="text-decoration-none tw:text-2xl p-1 category-action"
role="button"
data-bs-toggle="tooltip"
data-bs-title="{% translate "Add" %}"

View File

@@ -1,2 +1,3 @@
{% load i18n %}
<i class="fa-solid fa-volume-xmark me-2 fa-fw"></i>{% translate 'Mute sounds' %}
{{ user.settings.volume|json_script:"volume" }}

View File

@@ -1,3 +1,4 @@
{% load i18n %}
<i class="fa-solid fa-volume-low me-2 fa-fw"></i>{% translate 'Play sounds' %}
<span id="settings-mute-sound" class="d-inline tw-invisible"></span>
<span id="settings-mute-sound" class="d-inline tw:invisible"></span>
{{ user.settings.volume|json_script:"volume" }}

View File

@@ -1,3 +1,3 @@
{% load i18n %}
<i class="fa-solid fa-eye me-2 fa-fw"></i>{% translate 'Show amounts' %}
<span id="settings-hide-amounts" class="d-inline tw-invisible"></span>
<span id="settings-hide-amounts" class="d-inline tw:invisible"></span>

View File

@@ -16,7 +16,7 @@
<div class="row mb-3 gx-xl-4 gy-3 mb-4">
{# Date picker#}
<div class="col-12 col-xl-2 flex-row align-items-center d-flex">
<div class="tw-text-base h-100 align-items-center d-flex">
<div class="tw:text-base h-100 align-items-center d-flex">
<a role="button"
class="pe-4 py-2"
hx-boost="true"
@@ -24,10 +24,10 @@
href="{% url 'yearly_overview_account' year=previous_year %}">
<i class="fa-solid fa-chevron-left"></i></a>
</div>
<div class="tw-text-3xl fw-bold font-monospace tw-w-full text-center">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full text-center">
{{ year }}
</div>
<div class="tw-text-base mx-2 h-100 align-items-center d-flex">
<div class="tw:text-base mx-2 h-100 align-items-center d-flex">
<a role="button"
class="ps-3 py-2"
hx-boost="true"
@@ -113,7 +113,7 @@
<div id="data-content"
class="show-loading"
hx-get="{% url 'yearly_overview_account_data' year=year %}"
hx-trigger="load"
hx-trigger="load, every 10m"
hx-include="[name='account'], [name='month']"
hx-swap="innerHTML">
</div>

View File

@@ -18,7 +18,7 @@
<div class="row mb-3 gx-xl-4 gy-3 mb-4">
{# Date picker#}
<div class="col-12 col-xl-2 flex-row align-items-center d-flex">
<div class="tw-text-base h-100 align-items-center d-flex">
<div class="tw:text-base h-100 align-items-center d-flex">
<a role="button"
class="pe-4 py-2"
hx-boost="true"
@@ -26,10 +26,10 @@
href="{% url 'yearly_overview_currency' year=previous_year %}">
<i class="fa-solid fa-chevron-left"></i></a>
</div>
<div class="tw-text-3xl fw-bold font-monospace tw-w-full text-center">
<div class="tw:text-3xl fw-bold font-monospace tw:w-full text-center">
{{ year }}
</div>
<div class="tw-text-base mx-2 h-100 align-items-center d-flex">
<div class="tw:text-base mx-2 h-100 align-items-center d-flex">
<a role="button"
class="ps-3 py-2"
hx-boost="true"
@@ -115,7 +115,7 @@
<div id="data-content"
class="show-loading"
hx-get="{% url 'yearly_overview_currency_data' year=year %}"
hx-trigger="load"
hx-trigger="load, every 10m"
hx-include="[name='currency'], [name='month']"
hx-swap="innerHTML">
</div>

View File

@@ -1,4 +1,4 @@
FROM docker.io/node:18-bookworm-slim
FROM node:lts-alpine
WORKDIR /usr/src/frontend

View File

@@ -1,17 +0,0 @@
{
"env": {
"browser": true,
"node": true
},
"extends": [
"eslint:recommended"
],
"parserOptions": {
"ecmaVersion": 8,
"sourceType": "module",
"requireConfigFile": false
},
"rules": {
"semi": 2
}
}

View File

@@ -10,7 +10,7 @@ In the project directory, you can run:
`npm run start` will launch a server process, which makes `live reloading` possible.
If you change JS or SCSS files, the web page would auto refresh after the change. Now the server is working on port 9091 by default, but you can change it in `webpack/webpack.config.dev.js`
If you change JS or SCSS files, the web page would auto refresh after the change. Now the server is working on port 9091 by default, but you can change it in `webpack/webpack.config.dev.cjs`
### `npm run watch`

View File

@@ -0,0 +1,39 @@
import { defineConfig } from "eslint/config";
import globals from "globals";
import path from "node:path";
import { fileURLToPath } from "node:url";
import js from "@eslint/js";
import { FlatCompat } from "@eslint/eslintrc";
import babelParser from "@babel/eslint-parser";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
});
export default defineConfig([{
extends: compat.extends("eslint:recommended"),
languageOptions: {
globals: {
...globals.browser,
...globals.node,
},
ecmaVersion: 8,
sourceType: "module",
parser: babelParser,
parserOptions: {
requireConfigFile: false,
},
},
rules: {
semi: 2,
"no-unused-vars": "warn",
},
}]);

File diff suppressed because it is too large Load Diff

View File

@@ -3,9 +3,9 @@
"version": "1.0.1",
"description": "Webpack boilerplate for Django & Flask",
"scripts": {
"build": "cross-env NODE_ENV=production webpack --config webpack/webpack.config.prod.js",
"start": "webpack serve --config webpack/webpack.config.dev.js",
"watch": "webpack --watch --config webpack/webpack.config.watch.js"
"build": "cross-env NODE_ENV=production webpack --config webpack/webpack.config.prod.cjs",
"start": "webpack serve --config webpack/webpack.config.dev.cjs",
"watch": "webpack --watch --config webpack/webpack.config.watch.cjs"
},
"repository": {
"type": "git",
@@ -22,53 +22,55 @@
"url": "https://github.com/AccordBox/python-webpack-boilerplate/issues"
},
"dependencies": {
"@alpinejs/mask": "^3.14.1",
"@babel/core": "^7.16.7",
"@babel/eslint-parser": "^7.16.5",
"@babel/plugin-proposal-class-properties": "^7.16.7",
"@alpinejs/mask": "^3.14.9",
"@babel/core": "^7.27.7",
"@babel/eslint-parser": "^7.27.5",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/preset-env": "^7.16.8",
"@fortawesome/fontawesome-free": "^6.6.0",
"@babel/preset-env": "^7.27.2",
"@fortawesome/fontawesome-free": "^6.7.2",
"@popperjs/core": "^2.11.8",
"air-datepicker": "^3.5.3",
"alpinejs": "^3.14.1",
"autoprefixer": "^10.4.14",
"@tailwindcss/postcss": "^4.1.11",
"air-datepicker": "^3.6.0",
"alpinejs": "^3.14.9",
"autoprefixer": "^10.4.21",
"autosize": "^6.0.1",
"babel-loader": "^8.2.3",
"bootstrap": "^5.3.3",
"chart.js": "^4.4.6",
"babel-loader": "^10.0.0",
"bootstrap": "^5.3.7",
"chart.js": "^4.5.0",
"chartjs-chart-sankey": "^0.14.0",
"clean-webpack-plugin": "^4.0.0",
"copy-webpack-plugin": "^11.0.0",
"core-js": "^3.20.3",
"copy-webpack-plugin": "^13.0.0",
"core-js": "^3.43.0",
"cross-env": "^7.0.3",
"css-loader": "^6.8.1",
"daisyui": "^4.12.13",
"eslint": "^8.57.1",
"eslint-webpack-plugin": "^3.1.1",
"htmx.org": "^2.0.1",
"hyperscript.org": "^0.9.12",
"css-loader": "^7.1.2",
"eslint": "^9.30.0",
"eslint-webpack-plugin": "^5.0.2",
"globals": "^16.2.0",
"htmx.org": "^2.0.6",
"hyperscript.org": "^0.9.14",
"jquery": "^3.7.1",
"mathjs": "^14.0.1",
"mini-css-extract-plugin": "^2.5.1",
"postcss-loader": "^6.2.1",
"postcss-preset-env": "^7.2.3",
"sass": "~1.49.9",
"sass-loader": "^13.3.2",
"mathjs": "^14.5.2",
"mini-css-extract-plugin": "^2.9.2",
"postcss": "^8.5.6",
"postcss-loader": "^8.1.1",
"postcss-preset-env": "^10.2.4",
"sass": "~1.89.2",
"sass-loader": "^16.0.5",
"select2-bootstrap-5-theme": "^1.3.0",
"style-loader": "^3.3.3",
"stylelint": "^14.2.0",
"stylelint-config-standard-scss": "^6.1.0",
"stylelint-webpack-plugin": "^3.1.1",
"sweetalert2": "^11.14.1",
"tailwindcss": "^3.4.1",
"terser-webpack-plugin": "^5.3.10",
"tom-select": "^2.3.1",
"style-loader": "^4.0.0",
"stylelint": "^16.21.0",
"stylelint-config-standard-scss": "^15.0.1",
"stylelint-webpack-plugin": "^5.0.1",
"sweetalert2": "^11.22.2",
"tailwindcss": "^4.1.11",
"terser-webpack-plugin": "^5.3.14",
"tom-select": "^2.4.3",
"typer-dot-js": "^0.1.0",
"webpack": "^5.66.0",
"webpack-assets-manifest": "^5.1.0",
"webpack-cli": "^4.9.1",
"webpack-dev-server": "^4.7.3",
"webpack-merge": "^5.8.0"
"webpack": "^5.99.9",
"webpack-assets-manifest": "^6.2.1",
"webpack-cli": "^6.0.1",
"webpack-dev-server": "^5.2.2",
"webpack-merge": "^6.0.1"
}
}

Some files were not shown because too many files have changed in this diff Show More