mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-02-25 08:54:52 +01:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d3fcd5fe7e | ||
|
|
b0a3acbdde | ||
|
|
33ce38d74c | ||
|
|
fa51a7fef9 | ||
|
|
d7c072a35c | ||
|
|
c88a6dcf3a | ||
|
|
fcb54a0af2 | ||
|
|
eec2ced481 | ||
|
|
58a6048857 | ||
|
|
93774cca64 | ||
|
|
679f49badc |
@@ -9,7 +9,6 @@ SECRET_KEY=<GENERATE A SAFE SECRET KEY AND PLACE IT HERE>
|
||||
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
|
||||
OUTBOUND_PORT=9005
|
||||
|
||||
SQL_ENGINE=django.db.backends.postgresql
|
||||
SQL_DATABASE=wygiwyh
|
||||
SQL_USER=wygiwyh
|
||||
SQL_PASSWORD=<INSERT A SAFE PASSWORD HERE>
|
||||
|
||||
25
README.md
25
README.md
@@ -95,31 +95,14 @@ You can now access localhost:OUTBOUND_PORT
|
||||
> [!NOTE]
|
||||
> If you're going to use another IP that isn't localhost, add it to `DJANGO_ALLOWED_HOSTS`, without `http://`
|
||||
|
||||
|
||||
## Building from source
|
||||
Features are only added to main when ready, if you want to run the latest version, you must build from source.
|
||||
|
||||
Features are only added to `main` when ready, if you want to run the latest version, you must build from source.
|
||||
All the required Dockerfiles are [here](https://github.com/eitchtee/WYGIWYH/tree/main/docker/prod).
|
||||
|
||||
```bash
|
||||
# Create a folder for WYGIWYH (optional)
|
||||
$ mkdir WYGIWYH
|
||||
## Unraid
|
||||
|
||||
# Go into the folder
|
||||
$ cd WYGIWYH
|
||||
|
||||
# Clone this repository
|
||||
$ git clone https://github.com/eitchtee/WYGIWYH.git .
|
||||
|
||||
$ cp docker-compose.prod.yml docker-compose.yml
|
||||
$ cp .env.example .env
|
||||
# Now edit both files as you see fit
|
||||
|
||||
# Run the app
|
||||
$ docker compose up -d --build
|
||||
|
||||
# Create the first admin account
|
||||
$ docker compose exec -it web python manage.py createsuperuser
|
||||
```
|
||||
[nwithan8](https://github.com/nwithan8) has kindly provided a Unraid template for WYGIWYH, have a look at the [unraid_templates](https://github.com/nwithan8/unraid_templates) repo.
|
||||
|
||||
# How it works
|
||||
|
||||
|
||||
@@ -126,12 +126,12 @@ WSGI_APPLICATION = "WYGIWYH.wsgi.application"
|
||||
|
||||
DATABASES = {
|
||||
"default": {
|
||||
"ENGINE": os.environ.get("SQL_ENGINE", "django.db.backends.sqlite3"),
|
||||
"NAME": os.environ.get("SQL_DATABASE", BASE_DIR / "db.sqlite3"),
|
||||
"ENGINE": "django.db.backends.postgresql",
|
||||
"NAME": os.environ.get("SQL_DATABASE"),
|
||||
"USER": os.environ.get("SQL_USER", "user"),
|
||||
"PASSWORD": os.environ.get("SQL_PASSWORD", "password"),
|
||||
"HOST": os.environ.get("SQL_HOST", "localhost"),
|
||||
"PORT": "5432",
|
||||
"PORT": os.environ.get("SQL_PORT", "5432"),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ def django_to_python_datetime(django_format):
|
||||
def django_to_airdatepicker_datetime(django_format):
|
||||
format_map = {
|
||||
# Time
|
||||
"h": "h", # Hour (12-hour)
|
||||
"h": "hh", # Hour (12-hour)
|
||||
"H": "H", # Hour (24-hour)
|
||||
"i": "m", # Minutes
|
||||
"A": "AA", # AM/PM uppercase
|
||||
@@ -76,7 +76,7 @@ def django_to_airdatepicker_datetime(django_format):
|
||||
def django_to_airdatepicker_datetime_separated(django_format):
|
||||
format_map = {
|
||||
# Time formats
|
||||
"h": "hH", # Hour (12-hour)
|
||||
"h": "hh", # Hour (12-hour)
|
||||
"H": "HH", # Hour (24-hour)
|
||||
"i": "mm", # Minutes
|
||||
"A": "AA", # AM/PM uppercase
|
||||
|
||||
@@ -148,9 +148,14 @@ class AirDateTimePickerInput(widgets.DateTimeInput):
|
||||
|
||||
def format_value(self, value):
|
||||
"""Format the value for display in the widget."""
|
||||
if value:
|
||||
if value and isinstance(value, (datetime.date, datetime.datetime)):
|
||||
self.attrs["data-value"] = datetime.datetime.strftime(
|
||||
value, "%Y-%m-%d %H:%M:00"
|
||||
value, "%Y-%m-%dT%H:%M:00"
|
||||
)
|
||||
elif value and isinstance(value, str):
|
||||
value = datetime.datetime.strptime(value, "%Y-%m-%d %H:%M:00")
|
||||
self.attrs["data-value"] = datetime.datetime.strftime(
|
||||
value, "%Y-%m-%dT%H:%M:00"
|
||||
)
|
||||
|
||||
if value is None:
|
||||
@@ -195,6 +200,7 @@ class AirMonthYearPickerInput(AirDatePickerInput):
|
||||
|
||||
# Add data attributes for AirDatepicker configuration
|
||||
attrs["data-now-button-txt"] = _("Today")
|
||||
attrs["data-date-format"] = "MMMM yyyy"
|
||||
|
||||
return attrs
|
||||
|
||||
|
||||
@@ -72,7 +72,9 @@ class ExchangeRate(models.Model):
|
||||
|
||||
def clean(self):
|
||||
super().clean()
|
||||
if self.from_currency == self.to_currency:
|
||||
raise ValidationError(
|
||||
{"to_currency": _("From and To currencies cannot be the same.")}
|
||||
)
|
||||
# Check if the attributes exist before comparing them
|
||||
if hasattr(self, "from_currency") and hasattr(self, "to_currency"):
|
||||
if self.from_currency == self.to_currency:
|
||||
raise ValidationError(
|
||||
{"to_currency": _("From and To currencies cannot be the same.")}
|
||||
)
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-25 18:49+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"
|
||||
"Language: \n"
|
||||
"PO-Revision-Date: 2025-01-26 12:50+0100\n"
|
||||
"Last-Translator: Dimitri Decrock <dimitri@fam-decrock.eu>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -122,7 +122,6 @@ msgid "Exchange Currency"
|
||||
msgstr "Eenheid Wisselgeld"
|
||||
|
||||
#: apps/accounts/models.py:42 apps/currencies/models.py:25
|
||||
#, fuzzy
|
||||
msgid "Default currency for exchange calculations"
|
||||
msgstr "Standaard munteenheid voor wisselberekeningen"
|
||||
|
||||
@@ -195,12 +194,10 @@ msgid "Account deleted successfully"
|
||||
msgstr "Rekening succesvol verwijderd"
|
||||
|
||||
#: apps/accounts/views/balance.py:77
|
||||
#, fuzzy
|
||||
msgid "Balance reconciliation"
|
||||
msgstr "Saldi afstemming"
|
||||
|
||||
#: apps/accounts/views/balance.py:85
|
||||
#, fuzzy
|
||||
msgid "Account balances have been reconciled successfully"
|
||||
msgstr "Rekeningsaldi zijn succesvol afgestemd"
|
||||
|
||||
@@ -349,12 +346,10 @@ msgid "No results..."
|
||||
msgstr "Geen resultaten..."
|
||||
|
||||
#: apps/currencies/forms.py:16 apps/currencies/models.py:15
|
||||
#, fuzzy
|
||||
msgid "Prefix"
|
||||
msgstr "Voorvoegsel"
|
||||
|
||||
#: apps/currencies/forms.py:17 apps/currencies/models.py:16
|
||||
#, fuzzy
|
||||
msgid "Suffix"
|
||||
msgstr "Achtervoegsel"
|
||||
|
||||
@@ -367,12 +362,10 @@ msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#: apps/currencies/models.py:8
|
||||
#, fuzzy
|
||||
msgid "Currency Code"
|
||||
msgstr "Munteenheids Code"
|
||||
|
||||
#: apps/currencies/models.py:9
|
||||
#, fuzzy
|
||||
msgid "Currency Name"
|
||||
msgstr "Munteenheids Naam"
|
||||
|
||||
@@ -518,43 +511,43 @@ msgstr "Item succesvol verwijderd"
|
||||
|
||||
#: apps/import_app/forms.py:49
|
||||
msgid "Select a file"
|
||||
msgstr ""
|
||||
msgstr "Selecteer een bestand"
|
||||
|
||||
#: apps/import_app/forms.py:61
|
||||
#: templates/import_app/fragments/profiles/list.html:62
|
||||
#: templates/includes/navbar.html:124
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
msgstr "Importeer"
|
||||
|
||||
#: apps/import_app/models.py:15
|
||||
msgid "YAML Configuration"
|
||||
msgstr ""
|
||||
msgstr "YAML Configuratie"
|
||||
|
||||
#: apps/import_app/models.py:19
|
||||
#: templates/import_app/fragments/profiles/list.html:37
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
msgstr "Versie"
|
||||
|
||||
#: apps/import_app/models.py:30
|
||||
#, python-brace-format
|
||||
msgid "Version {number}"
|
||||
msgstr ""
|
||||
msgstr "Versie {number}"
|
||||
|
||||
#: apps/import_app/models.py:39
|
||||
msgid "Invalid YAML Configuration: "
|
||||
msgstr ""
|
||||
msgstr "Ongeldige YAML Configuratie: "
|
||||
|
||||
#: apps/import_app/models.py:45
|
||||
msgid "Queued"
|
||||
msgstr ""
|
||||
msgstr "In wachtrij"
|
||||
|
||||
#: apps/import_app/models.py:46
|
||||
msgid "Processing"
|
||||
msgstr ""
|
||||
msgstr "Verwerking"
|
||||
|
||||
#: apps/import_app/models.py:47
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
msgstr "Mislukt"
|
||||
|
||||
#: apps/import_app/models.py:48
|
||||
#: templates/installment_plans/fragments/list.html:24
|
||||
@@ -564,31 +557,31 @@ msgstr "Voltooid"
|
||||
|
||||
#: apps/import_app/models.py:54
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
msgstr "Status"
|
||||
|
||||
#: apps/import_app/models.py:62
|
||||
msgid "File name"
|
||||
msgstr ""
|
||||
msgstr "Bestandsnaam"
|
||||
|
||||
#: apps/import_app/views.py:75
|
||||
msgid "Import Profile added successfully"
|
||||
msgstr ""
|
||||
msgstr "Importprofiel succesvol toegevoegd"
|
||||
|
||||
#: apps/import_app/views.py:110
|
||||
msgid "Import Profile update successfully"
|
||||
msgstr ""
|
||||
msgstr "Importprofiel succesvol bijgewerkt"
|
||||
|
||||
#: apps/import_app/views.py:136
|
||||
msgid "Import Profile deleted successfully"
|
||||
msgstr ""
|
||||
msgstr "Importprofiel succesvol verwijderd"
|
||||
|
||||
#: apps/import_app/views.py:194
|
||||
msgid "Import Run queued successfully"
|
||||
msgstr ""
|
||||
msgstr "Importrun met succes in de wachtrij geplaatst"
|
||||
|
||||
#: apps/import_app/views.py:220
|
||||
msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
msgstr "Run met succes verwijderd"
|
||||
|
||||
#: apps/rules/forms.py:20
|
||||
msgid "Run on creation"
|
||||
@@ -738,7 +731,7 @@ msgstr "Maximaal bedrag"
|
||||
|
||||
#: apps/transactions/forms.py:158
|
||||
msgid "More"
|
||||
msgstr ""
|
||||
msgstr "Meer"
|
||||
|
||||
#: apps/transactions/forms.py:266
|
||||
msgid "From Account"
|
||||
@@ -867,19 +860,19 @@ msgstr "Terugkerende verrichting"
|
||||
|
||||
#: apps/transactions/models.py:192
|
||||
msgid "Internal Note"
|
||||
msgstr ""
|
||||
msgstr "Interne opmerking"
|
||||
|
||||
#: apps/transactions/models.py:194
|
||||
msgid "Internal ID"
|
||||
msgstr ""
|
||||
msgstr "Interne ID"
|
||||
|
||||
#: apps/transactions/models.py:198
|
||||
msgid "Deleted"
|
||||
msgstr ""
|
||||
msgstr "Verwijderd"
|
||||
|
||||
#: apps/transactions/models.py:203
|
||||
msgid "Deleted At"
|
||||
msgstr ""
|
||||
msgstr "Verwijderd Op"
|
||||
|
||||
#: apps/transactions/models.py:211
|
||||
msgid "Transaction"
|
||||
@@ -1001,29 +994,29 @@ msgstr "%(value)s is geen niet-negatief getal"
|
||||
#, python-format
|
||||
msgid "%(count)s transaction marked as paid"
|
||||
msgid_plural "%(count)s transactions marked as paid"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%(count)s verrichting gemarkeerd als betaald"
|
||||
msgstr[1] "%(count)s verrichtingen gemarkeerd als betaald"
|
||||
|
||||
#: apps/transactions/views/actions.py:47
|
||||
#, python-format
|
||||
msgid "%(count)s transaction marked as not paid"
|
||||
msgid_plural "%(count)s transactions marked as not paid"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%(count)s verrichting gemarkeerd als niet betaald"
|
||||
msgstr[1] "%(count)s verrichtingen gemarkeerd als niet betaald"
|
||||
|
||||
#: apps/transactions/views/actions.py:71
|
||||
#, python-format
|
||||
msgid "%(count)s transaction deleted successfully"
|
||||
msgid_plural "%(count)s transactions deleted successfully"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%(count)s verrichting succesvol verwijderd"
|
||||
msgstr[1] "%(count)s verrichtingen succesvol verwijderd"
|
||||
|
||||
#: apps/transactions/views/actions.py:106
|
||||
#, python-format
|
||||
msgid "%(count)s transaction duplicated successfully"
|
||||
msgid_plural "%(count)s transactions duplicated successfully"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%(count)s verrichting succesvol gedupliceerd"
|
||||
msgstr[1] "%(count)s verrichtingen succesvol gedupliceerd"
|
||||
|
||||
#: apps/transactions/views/categories.py:64
|
||||
msgid "Category added successfully"
|
||||
@@ -1114,8 +1107,8 @@ msgstr "Verrichting succesvol bijgewerkt"
|
||||
#, python-format
|
||||
msgid "%(count)s transaction updated successfully"
|
||||
msgid_plural "%(count)s transactions updated successfully"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%(count)s verrichting succesvol bijgewerkt"
|
||||
msgstr[1] "%(count)s verrichtingen succesvol bijgewerkt"
|
||||
|
||||
#: apps/transactions/views/transactions.py:214
|
||||
msgid "Transaction duplicated successfully"
|
||||
@@ -1457,7 +1450,6 @@ msgstr "Terugkerende"
|
||||
#: templates/monthly_overview/pages/overview.html:91
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:86
|
||||
#: templates/yearly_overview/pages/overview_by_currency.html:88
|
||||
#, fuzzy
|
||||
msgid "Balance"
|
||||
msgstr "Saldo"
|
||||
|
||||
@@ -1575,7 +1567,6 @@ msgid "Min"
|
||||
msgstr "Minimaal"
|
||||
|
||||
#: templates/cotton/ui/transactions_action_bar.html:247
|
||||
#, fuzzy
|
||||
msgid "Count"
|
||||
msgstr "Rekenen"
|
||||
|
||||
@@ -1741,7 +1732,6 @@ msgid "Pairing"
|
||||
msgstr "Koppelen"
|
||||
|
||||
#: templates/exchange_rates/fragments/table.html:13
|
||||
#, fuzzy
|
||||
msgid "Rate"
|
||||
msgstr "Tarief"
|
||||
|
||||
@@ -1756,88 +1746,89 @@ msgstr "Paginanavigatie"
|
||||
|
||||
#: templates/import_app/fragments/profiles/add.html:6
|
||||
msgid "Add new import profile"
|
||||
msgstr ""
|
||||
msgstr "Nieuw importprofiel toevoegen"
|
||||
|
||||
#: templates/import_app/fragments/profiles/add.html:11
|
||||
msgid "A message from the author"
|
||||
msgstr ""
|
||||
msgstr "Een bericht van de auteur"
|
||||
|
||||
#: templates/import_app/fragments/profiles/edit.html:5
|
||||
msgid "Edit import profile"
|
||||
msgstr ""
|
||||
msgstr "Importprofiel bewerken"
|
||||
|
||||
#: templates/import_app/fragments/profiles/list.html:5
|
||||
#: templates/import_app/pages/profiles_index.html:4
|
||||
msgid "Import Profiles"
|
||||
msgstr ""
|
||||
msgstr "Profielen importeren"
|
||||
|
||||
#: templates/import_app/fragments/profiles/list.html:17
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
msgstr "Nieuw"
|
||||
|
||||
#: templates/import_app/fragments/profiles/list.html:21
|
||||
msgid "From preset"
|
||||
msgstr ""
|
||||
msgstr "Van voorinstelling"
|
||||
|
||||
#: templates/import_app/fragments/profiles/list.html:55
|
||||
msgid "Runs"
|
||||
msgstr ""
|
||||
msgstr "Runs"
|
||||
|
||||
#: templates/import_app/fragments/profiles/list.html:86
|
||||
msgid "No import profiles"
|
||||
msgstr ""
|
||||
msgstr "Geen importprofielen"
|
||||
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:5
|
||||
msgid "Import Presets"
|
||||
msgstr ""
|
||||
msgstr "Presets importeren"
|
||||
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:33
|
||||
msgid "By"
|
||||
msgstr ""
|
||||
msgstr "Bij"
|
||||
|
||||
#: templates/import_app/fragments/profiles/list_presets.html:40
|
||||
msgid "No presets yet"
|
||||
msgstr ""
|
||||
msgstr "Nog geen voorinstellingen"
|
||||
|
||||
#: templates/import_app/fragments/runs/add.html:5
|
||||
msgid "Import file with profile"
|
||||
msgstr ""
|
||||
msgstr "Bestand met profiel importeren"
|
||||
|
||||
#: templates/import_app/fragments/runs/list.html:5
|
||||
msgid "Runs for"
|
||||
msgstr ""
|
||||
msgstr "Runs voor"
|
||||
|
||||
#: templates/import_app/fragments/runs/list.html:29
|
||||
msgid "Total Items"
|
||||
msgstr ""
|
||||
msgstr "Totale artikelen"
|
||||
|
||||
#: templates/import_app/fragments/runs/list.html:42
|
||||
msgid "Processed Items"
|
||||
msgstr ""
|
||||
msgstr "Verwerkte artikelen"
|
||||
|
||||
#: templates/import_app/fragments/runs/list.html:55
|
||||
msgid "Skipped Items"
|
||||
msgstr ""
|
||||
msgstr "Overgeslagen artikelen"
|
||||
|
||||
#: templates/import_app/fragments/runs/list.html:68
|
||||
msgid "Failed Items"
|
||||
msgstr ""
|
||||
msgstr "Mislukte artikelen"
|
||||
|
||||
#: templates/import_app/fragments/runs/list.html:81
|
||||
msgid "Successful Items"
|
||||
msgstr ""
|
||||
msgstr "Succesvolle Artikelen"
|
||||
|
||||
#: templates/import_app/fragments/runs/list.html:96
|
||||
msgid "Logs"
|
||||
msgstr ""
|
||||
msgstr "Logboeken"
|
||||
|
||||
#: templates/import_app/fragments/runs/list.html:107
|
||||
msgid "You won't be able to revert this! All imported items will be kept."
|
||||
msgstr ""
|
||||
"Je kunt dit niet terugdraaien! Alle geïmporteerde items blijven behouden."
|
||||
|
||||
#: templates/import_app/fragments/runs/list.html:116
|
||||
msgid "No runs yet"
|
||||
msgstr ""
|
||||
msgstr "Nog geen runs"
|
||||
|
||||
#: templates/import_app/fragments/runs/log.html:5
|
||||
msgid "Logs for"
|
||||
@@ -2224,15 +2215,15 @@ msgstr "Afbetalingsplan Toevoegen"
|
||||
|
||||
#: templates/transactions/fragments/bulk_edit.html:5
|
||||
msgid "Bulk Editing"
|
||||
msgstr ""
|
||||
msgstr "Bulkbewerking"
|
||||
|
||||
#: templates/transactions/fragments/bulk_edit.html:8
|
||||
msgid "Editing"
|
||||
msgstr ""
|
||||
msgstr "Bewerking"
|
||||
|
||||
#: templates/transactions/fragments/bulk_edit.html:8
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
msgstr "verrichtingen"
|
||||
|
||||
#: templates/transactions/fragments/edit.html:5
|
||||
#: templates/transactions/fragments/edit_installment_plan.html:5
|
||||
@@ -2302,7 +2293,7 @@ msgstr "Filter"
|
||||
#: templates/transactions/widgets/unselectable_income_expense_toggle_buttons.html:14
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:8
|
||||
msgid "Unchanged"
|
||||
msgstr ""
|
||||
msgstr "Ongewijzigd"
|
||||
|
||||
#: templates/users/generic/hide_amounts.html:2
|
||||
msgid "Hide amounts"
|
||||
|
||||
@@ -2,12 +2,16 @@
|
||||
<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 no <input[type='checkbox']:checked/> in #transactions-list
|
||||
add .slide-in-bottom-reverse then settle
|
||||
then add .tw-hidden to #actions-bar
|
||||
then remove .slide-in-bottom-reverse
|
||||
if #actions-bar
|
||||
add .slide-in-bottom-reverse then settle
|
||||
then add .tw-hidden to #actions-bar
|
||||
then remove .slide-in-bottom-reverse
|
||||
end
|
||||
else
|
||||
remove .tw-hidden from #actions-bar
|
||||
then trigger selected_transactions_updated
|
||||
if #actions-bar
|
||||
remove .tw-hidden from #actions-bar
|
||||
then trigger selected_transactions_updated
|
||||
end
|
||||
end
|
||||
end">
|
||||
<div class="card slide-in-bottom">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM python:3.11-slim-buster AS python-build-stage
|
||||
FROM python:3.11-slim-bookworm AS python-build-stage
|
||||
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||
build-essential \
|
||||
@@ -8,7 +8,7 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||
COPY ../requirements.txt .
|
||||
RUN pip wheel --wheel-dir /usr/src/app/wheels -r requirements.txt
|
||||
|
||||
FROM python:3.11-slim-buster AS python-run-stage
|
||||
FROM python:3.11-slim-bookworm AS python-run-stage
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM python:3.11-slim-buster AS python-build-stage
|
||||
FROM python:3.11-slim-bookworm AS python-build-stage
|
||||
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||
build-essential \
|
||||
@@ -17,7 +17,7 @@ RUN --mount=type=cache,target=/root/.npm \
|
||||
npm install --verbose && \
|
||||
npm run build
|
||||
|
||||
FROM python:3.11-slim-buster AS python-run-stage
|
||||
FROM python:3.11-slim-bookworm AS python-run-stage
|
||||
COPY --from=webpack_build /usr/src/frontend/build /usr/src/frontend/build
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
@@ -163,8 +163,8 @@ window.MonthYearPicker = function createDynamicDatePicker(element) {
|
||||
let opts = {...baseOpts, ...positionConfig};
|
||||
|
||||
if (element.dataset.value) {
|
||||
opts["selectedDates"] = [element.dataset.value];
|
||||
opts["startDate"] = [element.dataset.value];
|
||||
opts["selectedDates"] = [new Date(element.dataset.value + "T00:00:00")];
|
||||
opts["startDate"] = [new Date(element.dataset.value + "T00:00:00")];
|
||||
}
|
||||
return new AirDatepicker(element, opts);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user