Skip to content
Snippets Groups Projects
Commit b9d0dab2 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Merge branch 'master' into sepaxml

parents c784dbcd 680d4060
Branches
Tags
1 merge request!16Sepaxml
......@@ -6,6 +6,28 @@ All notable changes to this project will be documented in this file.
The format is based on `Keep a Changelog`_,
and this project adheres to `Semantic Versioning`_.
Unreleased
----------
This version requires AlekSIS-Core 3.0. It is incompatible with any previous
version.
Removed
~~~~~~~
* Legacy menu integration for AlekSIS-Core pre-3.0
Added
~~~~~
* Support for SPA in AlekSIS-Core 3.0
Fixed
-----
* Replace usage of deprecated `ugettext_lazy` with `gettext_lazy`.
`1.2`_ - 2022-03-20
-------------------
......
import {
notLoggedInValidator,
hasPersonValidator,
} from "aleksis.core/routeValidators";
export default {
meta: {
inMenu: true,
titleKey: "tezor.menu_title",
icon: "mdi-piggy-bank-outline",
},
children: [
{
path: "invoice/:token/print/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.printInvoice",
},
{
path: "invoice/:token/pay",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.doPayment",
},
{
path: "clients/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.clients",
meta: {
inMenu: true,
titleKey: "tezor.clients.menu_title",
icon: "mdi-domain",
permission: "tezor.can_view_clients",
},
},
{
path: "client/create/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.createClient",
},
{
path: "client/:pk/edit/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.editClientByPk",
},
{
path: "client/:pk/delete/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.deleteClientByPk",
},
{
path: "client/:pk/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.clientByPk",
},
{
path: "client/:pk/invoice_groups/create/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.createInvoiceGroup",
},
{
path: "invoice_group/:pk/edit/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.editInvoiceGroupByPk",
},
{
path: "invoice_group/:pk/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.invoiceGroupByPk",
},
{
path: "invoice_group/:pk/delete/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.deleteInvoiceGroupByPk",
},
{
path: "invoices/my/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.personalInvoices",
meta: {
inMenu: true,
titleKey: "tezor.personal_invoices.menu_title",
icon: "mdi-receipt-outline",
},
},
{
path: "invoice/:slug/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.invoiceByToken",
},
{
path: "invoice/:token/send/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
name: "tezor.sendInvoiceByToken",
},
],
};
{
"tezor": {
"menu_title": "Payments and Money",
"clients": {
"menu_title": "Manage clients"
},
"personal_invoices": {
"menu_title": "My invoices"
}
}
}
......@@ -8,10 +8,9 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-22 21:24+0000\n"
"PO-Revision-Date: 2022-08-03 16:34+0000\n"
"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
"Language-Team: German <https://translate.edugit.org/projects/aleksis/"
"aleksis-app-tezor/de/>\n"
"PO-Revision-Date: 2023-01-10 19:53+0000\n"
"Last-Translator: Robert Seimetz <robert.seimetz@teckids.org>\n"
"Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis-app-tezor/de/>\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -219,7 +218,7 @@ msgstr "Art. Nr."
#: aleksis/apps/tezor/tables.py:11
msgid "Item"
msgstr "Artikel"
msgstr "Objekt"
#: aleksis/apps/tezor/tables.py:13
msgid "Tax Rate"
......
......@@ -8,17 +8,14 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-23 12:54+0000\n"
"PO-Revision-Date: 2022-06-12 05:32+0000\n"
"PO-Revision-Date: 2023-05-26 04:39+0000\n"
"Last-Translator: Serhii Horichenko <m@sgg.im>\n"
"Language-Team: Russian <https://translate.edugit.org/projects/aleksis/"
"aleksis-app-tezor/ru/>\n"
"Language-Team: Russian <https://translate.edugit.org/projects/aleksis/aleksis-app-tezor/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
"%100>=11 && n%100<=14)? 2 : 3);\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
"X-Generator: Weblate 4.12.1\n"
#: aleksis/apps/tezor/forms.py:18
......@@ -69,7 +66,7 @@ msgstr "Прямой дебет SEPA"
#: aleksis/apps/tezor/models/base.py:18
msgid "Name"
msgstr "Имя"
msgstr "Полное имя"
#: aleksis/apps/tezor/models/base.py:19
msgid "Email"
......@@ -223,7 +220,7 @@ msgstr "Арт.№"
#: aleksis/apps/tezor/tables.py:11
msgid "Item"
msgstr "Артикул"
msgstr "Объект"
#: aleksis/apps/tezor/tables.py:13
msgid "Tax Rate"
......
......@@ -8,18 +8,14 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-04-23 12:54+0000\n"
"PO-Revision-Date: 2022-07-01 11:55+0000\n"
"PO-Revision-Date: 2023-01-25 05:58+0000\n"
"Last-Translator: Serhii Horichenko <m@sgg.im>\n"
"Language-Team: Ukrainian <https://translate.edugit.org/projects/aleksis/"
"aleksis-app-tezor/uk/>\n"
"Language-Team: Ukrainian <https://translate.edugit.org/projects/aleksis/aleksis-app-tezor/uk/>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 "
"? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > "
"14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % "
"100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
"X-Generator: Weblate 4.12.1\n"
#: aleksis/apps/tezor/forms.py:18
......@@ -224,7 +220,7 @@ msgstr "Арт.№"
#: aleksis/apps/tezor/tables.py:11
msgid "Item"
msgstr "Артикул"
msgstr "Об'єкт"
#: aleksis/apps/tezor/tables.py:13
msgid "Tax Rate"
......
from django.utils.translation import gettext_lazy as _
MENUS = {
"NAV_MENU_CORE": [
{
"name": _("Payments and Money"),
"url": "#",
"root": True,
"svg_icon": "mdi:piggy-bank",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
"submenu": [
{
"name": _("Manage clients"),
"url": "clients",
"svg_icon": "mdi:domain",
"validators": [
(
"aleksis.core.util.predicates.permission_validator",
"tezor.can_view_clients",
)
],
},
{
"name": _("My invoices"),
"url": "personal_invoices",
"svg_icon": "fa6-solid:file-invoice-dollar",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
},
],
}
]
}
......@@ -3,7 +3,7 @@ from django.http import HttpResponse
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse, reverse_lazy
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _
from django.utils.translation import gettext as _
from django.views.decorators.cache import never_cache
from django.views.generic import View
from django.views.generic.detail import DetailView
......@@ -191,11 +191,9 @@ class InvoiceGroupCreateView(PermissionRequiredMixin, AdvancedCreateView):
def form_valid(self, form):
client = Client.objects.get(id=self.kwargs["pk"])
InvoiceGroup.objects.create(
client=client,
name=form.cleaned_data["name"],
template_name=form.cleaned_data["template_name"],
)
self.object = form.save()
self.object.client = client
self.object.save()
return super().form_valid(form)
......
......@@ -30,8 +30,8 @@ secondary = true
[tool.poetry.dependencies]
python = "^3.9"
aleksis-core = "^2.10"
django-payments-sepa = { version = "^1.2.dev0", allow-prereleases = true, extras = ["fints"] }
aleksis-core = "^3.0"
django-payments = { version = "^1.0.0", extras = ["sofort"] }
[tool.poetry.dev-dependencies]
......
[tox]
skipsdist = True
skip_missing_interpreters = true
envlist = py37,py38,py39
envlist = py39,py310,py311
[testenv]
whitelist_externals = poetry
sudo
skip_install = true
envdir = {toxworkdir}/globalenv
commands_pre =
poetry install
poetry run aleksis-admin yarn install
poetry run aleksis-admin vite build
poetry run aleksis-admin collectstatic --no-input
commands =
poetry run pytest --cov=. {posargs} aleksis/
......@@ -27,6 +26,8 @@ commands =
poetry run black --check --diff aleksis/
poetry run isort -c --diff --stdout aleksis/
poetry run flake8 {posargs} aleksis/
poetry run sh -c "aleksis-admin yarn run prettier --check --ignore-path={toxinidir}/.prettierignore {toxinidir}"
poetry run sh -c "aleksis-admin yarn run eslint {toxinidir}/aleksis/**/*/frontend/**/*.{js,vue} --config={toxinidir}/.eslintrc.js --resolve-plugins-relative-to=."
[testenv:security]
commands =
......@@ -46,6 +47,7 @@ commands = poetry run make -C docs/ html {posargs}
commands =
poetry run isort aleksis/
poetry run black aleksis/
poetry run sh -c "aleksis-admin yarn run prettier --write --ignore-path={toxinidir}/.prettierignore {toxinidir}"
[testenv:makemessages]
commands =
......@@ -55,7 +57,7 @@ commands =
[flake8]
max_line_length = 100
exclude = migrations,tests
ignore = A002,A003,BLK100,E203,E231,W503,D100,D101,D102,D103,D104,D105,D106,D107,RST215,RST214,F821,F841,S106,T100,T101,DJ05
ignore = BLK100,E203,E231,W503,D100,D101,D102,D103,D104,D105,D106,D107,RST215,RST214,F821,F841,S106,T100,T101,DJ05
[isort]
profile = black
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment