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
1 merge request!4Resolve "Add UI for invoice management"
Pipeline #58857 failed
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