Files
web2.0-backend/members/views/payments.py
T
2017-09-25 23:06:44 +03:00

164 lines
5.5 KiB
Python

from django.shortcuts import render
from django.contrib.auth.decorators import permission_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.core.mail import send_mail
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
@ensure_csrf_cookie
@require_http_methods(["GET"])
@permission_required('members.change_member', login_url='/login')
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"])
@permission_required('members.change_member', login_url='/login')
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"])
@permission_required('members.change_member', login_url='/login')
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 render(request, 'error.html', {'error': form.errors})
@ensure_csrf_cookie
@require_http_methods(["GET"])
@permission_required('members.change_member', login_url='/login')
def payment_edit(request, *args, **kwargs):
"""Edit payment."""
i = kwargs.pop('index', None)
if i is None:
return render(request,
'error.html',
{'error': _('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"])
@permission_required('members.change_member', login_url='/login')
def payment_delete_confirm(request, *args, **kwargs):
"""Render payment delete confirmation page."""
i = kwargs.pop('index', None)
if i is None:
return render(request,
'error.html',
{'error': _('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"])
@permission_required('members.change_member', login_url='/login')
def payment_delete(request, *args, **kwargs):
"""Delete payment."""
try:
id = request.POST['id']
except KeyError:
return render(request,
'error.html',
{'error': _('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 render(request,
'error.html',
{'error': _('Could not delete payment object')})
@ensure_csrf_cookie
@require_http_methods(["POST"])
@permission_required('members.change_member', login_url='/login')
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 render(request,
'error.html',
{'error': _('Could not update payment object')})