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, '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, '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, '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, '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'))