164 lines
5.4 KiB
Python
164 lines
5.4 KiB
Python
from django.shortcuts import render
|
|
from django.contrib.auth.decorators import permission_required, login_required
|
|
from django.views.decorators.http import require_http_methods
|
|
from django.views.decorators.csrf import ensure_csrf_cookie
|
|
from django.http import HttpResponse, HttpResponseRedirect
|
|
from django.conf import settings
|
|
from django.utils.translation import ugettext as _
|
|
from django.forms.models import model_to_dict
|
|
|
|
import logging
|
|
import html
|
|
|
|
from members.views.utils import *
|
|
from members.tables import PaymentTable
|
|
from members.forms import PaymentForm
|
|
from members.views import error_view
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["GET"])
|
|
@login_required(login_url="/admin/login")
|
|
@permission_required("members.read_payment", raise_exception=True)
|
|
def payment_list(request, *args, **kwargs):
|
|
"""Render list of payments."""
|
|
search = request.GET.get("q", None)
|
|
if search:
|
|
payments = Payment.find_payments_by_name(search)
|
|
else:
|
|
payments = Payment.objects.all()
|
|
|
|
table = PaymentTable(
|
|
payments,
|
|
request=request,
|
|
exclude=["id"],
|
|
attrs={"class": "table table-bordered table-hover"},
|
|
)
|
|
|
|
table.paginate(page=request.GET.get("page", 1), per_page=25)
|
|
table_html = convert_table_to_html(table, request)
|
|
|
|
context = {
|
|
"table": table_html,
|
|
"payment_count": len(payments),
|
|
"notification": request.GET.get("notification", None),
|
|
}
|
|
return render(request, "members/payment_list.html", context)
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["GET"])
|
|
@login_required(login_url="/admin/login")
|
|
@permission_required("members.add_payment", raise_exception=True)
|
|
def payment_add(request, *args, **kwargs):
|
|
"""Render add payment form."""
|
|
form = PaymentForm()
|
|
return render(request, "members/payment_add.html", {"form": form})
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["POST"])
|
|
@login_required(login_url="/admin/login")
|
|
@permission_required("members.add_payment", raise_exception=True)
|
|
def payment_submit(request, *args, **kwargs):
|
|
"""Submit payment."""
|
|
form = PaymentForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
logging.info(
|
|
"Saved new payment to member register with the following info: {}".format(
|
|
form.cleaned_data
|
|
)
|
|
)
|
|
notification = "{} {}.".format(
|
|
_("Successfully added payment for member"), form.cleaned_data["member"]
|
|
)
|
|
return HttpResponseRedirect(
|
|
"/members/payments?notification={}".format(html.escape(notification))
|
|
)
|
|
else:
|
|
return error_view(request, form.errors)
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["GET"])
|
|
@login_required(login_url="/admin/login")
|
|
@permission_required("members.change_payment", raise_exception=True)
|
|
def payment_edit(request, *args, **kwargs):
|
|
"""Edit payment."""
|
|
i = kwargs.pop("index", None)
|
|
if i is None:
|
|
return error_view(request, _("No payment id specified"))
|
|
else:
|
|
payment = Payment.objects.get(id=i)
|
|
form = PaymentForm(instance=payment)
|
|
return render(
|
|
request, "members/payment_edit.html", {"payment_id": i, "form": form}
|
|
)
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["GET"])
|
|
@login_required(login_url="/admin/login")
|
|
@permission_required("members.delete_payment", raise_exception=True)
|
|
def payment_delete_confirm(request, *args, **kwargs):
|
|
"""Render payment delete confirmation page."""
|
|
i = kwargs.pop("index", None)
|
|
if i is None:
|
|
return error_view(request, _("No payment id specified"))
|
|
else:
|
|
payment = Payment.objects.get(id=i)
|
|
form = PaymentForm(instance=payment)
|
|
return render(
|
|
request,
|
|
"members/payment_delete_confirm.html",
|
|
{"payment_id": i, "form": form},
|
|
)
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["POST"])
|
|
@login_required(login_url="/admin/login")
|
|
@permission_required("members.delete_payment", raise_exception=True)
|
|
def payment_delete(request, *args, **kwargs):
|
|
"""Delete payment."""
|
|
try:
|
|
id = request.POST["id"]
|
|
except KeyError:
|
|
return error_view(request, _("No payment id specified"))
|
|
|
|
try:
|
|
payment = Payment.objects.get(id=id)
|
|
notification = "{} {}.".format(_("Successfully deleted payment"), str(payment))
|
|
payment.delete()
|
|
logging.info("Delete payment '{}' in member register".format(str(payment)))
|
|
return HttpResponseRedirect(
|
|
"/members/payments?notification={}".format(html.escape(notification))
|
|
)
|
|
except:
|
|
return error_view(request, _("Could not delete payment object"))
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["POST"])
|
|
@login_required(login_url="/admin/login")
|
|
@permission_required("members.change_payment", raise_exception=True)
|
|
def payment_update(request, *args, **kwargs):
|
|
"""Update payment information."""
|
|
form = PaymentForm(request.POST)
|
|
if form.is_valid():
|
|
id = request.POST["id"]
|
|
payment = Payment.objects.get(id=id)
|
|
form = PaymentForm(request.POST, instance=payment)
|
|
form.save()
|
|
|
|
logging.info(
|
|
"Updated member in member register with the following info: {}".format(form)
|
|
)
|
|
notification = "{} {}.".format(_("Successfully updated payment"), str(payment))
|
|
return HttpResponseRedirect(
|
|
"/members/payments?notification={}".format(html.escape(notification))
|
|
)
|
|
else:
|
|
return error_view(request, _("Could not update payment object"))
|