get app ready for heroku
This commit is contained in:
181
items/views.py
Normal file
181
items/views.py
Normal file
@@ -0,0 +1,181 @@
|
||||
from django.shortcuts import HttpResponse, HttpResponseRedirect
|
||||
from django.template import loader
|
||||
from django.utils import timezone
|
||||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.db.models import Q
|
||||
from models import Item
|
||||
from committee.models import Committee
|
||||
|
||||
def isAuthorised(request, item):
|
||||
return (request.user == item.committee.chair
|
||||
or request.user.groups.filter(name='Fincom').exists())
|
||||
|
||||
def authError():
|
||||
return HttpResponseRedirect('/items')
|
||||
|
||||
def myItems(user):
|
||||
if (user.groups.filter(name='Fincom').exists()):
|
||||
return Item.objects.order_by('-date_filed', 'desc')
|
||||
|
||||
comms = []
|
||||
for c in Committee.objects.all():
|
||||
if (c.chair == user):
|
||||
comms.append(c)
|
||||
|
||||
return Item.objects.filter(Q(created_by=user) | Q(committee__in=comms)) \
|
||||
.order_by('-date_filed', 'desc')
|
||||
|
||||
def pageItems(request, items, status):
|
||||
if status != 'M':
|
||||
p = Paginator(items.filter(status=status), 8)
|
||||
else:
|
||||
p = Paginator(items, 8)
|
||||
page = request.GET.get(status)
|
||||
|
||||
try:
|
||||
return p.page(page)
|
||||
except PageNotAnInteger:
|
||||
return p.page(1)
|
||||
except EmptyPage:
|
||||
return p.page(p.num_pages)
|
||||
|
||||
@login_required
|
||||
def list(request):
|
||||
template = loader.get_template('items/list.html')
|
||||
items = myItems(request.user)
|
||||
mine = Item.objects.filter(created_by=request.user).order_by('-date_filed')
|
||||
|
||||
|
||||
context = {
|
||||
'preapproved': pageItems(request, items, Item.PREAPPROVED),
|
||||
'processed': pageItems(request, items, Item.PROCESSED),
|
||||
'newitems': pageItems(request, items, Item.NEW),
|
||||
'rejected': pageItems(request, items, Item.REJECTED),
|
||||
'mine': pageItems(request, mine, 'M'),
|
||||
}
|
||||
|
||||
return HttpResponse(template.render(context, request))
|
||||
|
||||
@login_required
|
||||
def details(request, item_id):
|
||||
I = Item.objects.get(pk=item_id)
|
||||
if (not isAuthorised(request, I)
|
||||
and request.user != I.created_by):
|
||||
return authError()
|
||||
|
||||
template = loader.get_template('items/details.html')
|
||||
|
||||
context = {
|
||||
'I': I,
|
||||
'approve': isAuthorised(request, I),
|
||||
}
|
||||
return HttpResponse(template.render(context, request))
|
||||
|
||||
def approve(request, item_id):
|
||||
I = Item.objects.get(pk=item_id)
|
||||
|
||||
if (not isAuthorised(request, I)):
|
||||
return authError()
|
||||
|
||||
I.approved_by.add(request.user)
|
||||
if (I.committee.chair == request.user and
|
||||
I.status == Item.NEW):
|
||||
I.status = Item.PREAPPROVED
|
||||
I.mail_fincom()
|
||||
elif (request.user.groups.filter(name='Fincom').exists()):
|
||||
I.status = Item.PROCESSED
|
||||
|
||||
I.save()
|
||||
|
||||
return HttpResponseRedirect('/items')
|
||||
|
||||
def reject(request, item_id):
|
||||
I = Item.objects.get(pk=item_id)
|
||||
|
||||
if (not isAuthorised(request, I)):
|
||||
return authError()
|
||||
|
||||
I.status = Item.REJECTED
|
||||
I.save()
|
||||
|
||||
return HttpResponseRedirect('/items')
|
||||
|
||||
def delete(request, item_id):
|
||||
I = Item.objects.get(pk=item_id)
|
||||
|
||||
if (not isAuthorised(request, I)):
|
||||
return authError()
|
||||
|
||||
I.delete()
|
||||
|
||||
return HttpResponseRedirect('/items')
|
||||
|
||||
def edit(request, item_id):
|
||||
I = Item.objects.get(pk=item_id)
|
||||
|
||||
if (not isAuthorised(request, I)
|
||||
and request.user != I.created_by):
|
||||
return authError()
|
||||
|
||||
if request.method == 'POST':
|
||||
if (request.POST.get('desc', None)):
|
||||
I.desc = request.POST['desc']
|
||||
if (request.POST.get('event', None)):
|
||||
I.event = request.POST['event']
|
||||
if (request.POST.get('committee', None)):
|
||||
I.committee = Committee.objects.get(name=request.POST['committee'])
|
||||
if (request.POST.get('cost', None)):
|
||||
I.cost = request.POST['cost']
|
||||
if (request.POST.get('date', None)):
|
||||
I.date_purchased = Item.parseDate(request.POST['date']),
|
||||
if (request.POST.get('details', None)):
|
||||
I.details = request.POST['details']
|
||||
|
||||
I.save()
|
||||
|
||||
return HttpResponseRedirect('/items/' + str(item_id))
|
||||
else:
|
||||
template = loader.get_template('items/edit.html')
|
||||
|
||||
context = {
|
||||
'I': I,
|
||||
'committees': Committee.objects.order_by('name'),
|
||||
}
|
||||
return HttpResponse(template.render(context, request))
|
||||
|
||||
def new_form(request):
|
||||
if request.method == 'POST':
|
||||
if request.FILES['image'].size > 10 * (1 << 20):
|
||||
template = loader.get_template('items/new.html')
|
||||
context = {
|
||||
'committees': Committee.objects.order_by('name'),
|
||||
'error': 'Your image file is too large. Maximum size is 20MB',
|
||||
}
|
||||
return HttpResponse(template.render(context, request))
|
||||
item = Item(
|
||||
desc = request.POST['desc'],
|
||||
event = request.POST['event'],
|
||||
committee = Committee.objects.get(name=request.POST['committee']),
|
||||
cost = request.POST['cost'],
|
||||
date_purchased = Item.parseDate(request.POST['date']),
|
||||
details = request.POST['details'],
|
||||
date_filed = timezone.now(),
|
||||
created_by = request.user,
|
||||
status = Item.NEW,
|
||||
image = request.FILES['image'],
|
||||
)
|
||||
|
||||
item.save()
|
||||
|
||||
item.mail_com_chair()
|
||||
|
||||
return HttpResponseRedirect('/items')
|
||||
|
||||
else:
|
||||
template = loader.get_template('items/new.html')
|
||||
context = {
|
||||
'committees': Committee.objects.order_by('name'),
|
||||
}
|
||||
|
||||
return HttpResponse(template.render(context, request))
|
||||
Reference in New Issue
Block a user