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

Add ui for creating clients

parent e67e9486
No related branches found
No related tags found
No related merge requests found
from aleksis.core.mixins import ExtensibleForm
from .models.base import Client
class EditEventForm(ExtensibleForm):
"""Form to create or edit clients."""
class Meta:
model = Client
exclude = []
......@@ -32,3 +32,17 @@ class TotalsTable(tables.Table):
class Meta:
show_header = False
orderable = False
class ClientsTable(tables.Table):
class Meta:
attrs = {"class": "responsive-table highlight"}
name = tables.Column()
edit = tables.LinkColumn(
"edit_client_by_pk",
args=[A("id")],
verbose_name=_("Edit"),
text=_("Edit"),
)
{% extends "core/base.html" %}
{% load material_form i18n %}
{% block page_title %}{% blocktrans %}Create client{% endblocktrans %}{% endblock %}
{% block browser_title %}{% blocktrans %}Create client{% endblocktrans %}{% endblock %}
{% block extra_head %}
{{ form.media.css }}
{% endblock %}
{% block content %}
<form method="post">
{% csrf_token %}
{% form form=form %}{% endform %}
{% include "core/partials/save_button.html" %}
</form>
{{ form.media.js }}
{% endblock %}
{% extends "core/base.html" %}
{% load material_form i18n %}
{% block page_title %}{% blocktrans %}Edit client{% endblocktrans %}{% endblock %}
{% block browser_title %}{% blocktrans %}Edit client{% endblocktrans %}{% endblock %}
{% block extra_head %}
{{ form.media.css }}
{% endblock %}
{% block content %}
<form method="post">
{% csrf_token %}
{% form form=form %}{% endform %}
{% include "core/partials/save_button.html" %}
</form>
{{ form.media.js }}
{% endblock %}
{% extends "core/base.html" %}
{% load material_form i18n %}
{% load render_table from django_tables2 %}
{% block page_title %}{% blocktrans %}Clients{% endblocktrans %}{% endblock %}
{% block browser_title %}{% blocktrans %}Clients{% endblocktrans %}{% endblock %}
{% block content %}
<a class="btn colour-primary waves-effect waves-light" href="{% url 'create_client' %}">{% trans "Create client" %}</a>
{% render_table table %}
{% endblock %}
{% extends 'core/base.html' %}
{% load i18n %}
{% block content %}
<p class="flow-text">
{% blocktrans %}Tezor (account and payment system){% endblocktrans %}
</p>
{% endblock %}
from django.utils.translation import gettext_lazy as _
MENUS = {
"NAV_MENU_CORE": [
{
"name": _("Payments"),
"url": "#",
"root": True,
"icon": "price_check",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
"submenu": [
{
"name": _("Clients"),
"url": "clients",
"icon": "account_balance",
"validators": [
(
"aleksis.core.util.predicates.permission_validator",
"tezor.can_view_clients",
)
],
},
],
}
]
}
......@@ -5,4 +5,19 @@ from . import views
urlpatterns = [
path("payments/", include("payments.urls")),
path("invoice/<int:pk>/print", views.GetInvoicePDF.as_view(), name="get_invoice_by_pk")
path(
"clients/list",
views.ClientListView.as_view(),
name="clients",
),
path(
"clients/create",
views.ClientCreateView.as_view(),
name="create_client",
),
path(
"clients/<int:pk>/edit",
views.ClientEditView.as_view(),
name="edit_client_by_pk",
),
]
......@@ -5,6 +5,9 @@ from rules.contrib.views import PermissionRequiredMixin
from aleksis.core.views import RenderPDFView
from .tables import ClientsTable
from .forms import EditClientForm
from .models.base import Client
from .models.invoice import Invoice
......@@ -20,3 +23,35 @@ class GetInvoicePDF(PermissionRequiredMixin, RenderPDFView):
print(invoice.group.__dict__)
return context
class ClientListView(PermissionRequiredMixin, SingleTableView):
"""Table of all clients."""
model = Client
table_class = ClientsTable
permission_required = "teor.view_clients"
template_name = "teor/client/list.html"
@method_decorator(never_cache, name="dispatch")
class ClientCreateView(PermissionRequiredMixin, AdvancedCreateView):
"""Create view for clients."""
model = Client
form_class = EditClientForm
permission_required = "teor.add_clients"
template_name = "teor/client/create.html"
success_url = reverse_lazy("clients")
success_message = _("The client has been created.")
@method_decorator(never_cache, name="dispatch")
class ClientEditView(PermissionRequiredMixin, AdvancedEditView):
"""Edit view for clients."""
model = Client
form_class = EditClientForm
permission_required = "teor.edit_clients"
template_name = "teor/client/edit.html"
success_url = reverse_lazy("clients")
success_message = _("The client has been saved.")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment