Skip to content

Instantly share code, notes, and snippets.

@robrocker7
Created April 5, 2012 02:16
Show Gist options
  • Save robrocker7/2307481 to your computer and use it in GitHub Desktop.
Save robrocker7/2307481 to your computer and use it in GitHub Desktop.
from django.shortcuts import render_to_response
from django.template import RequestContext, Context, loader
from django.http import Http404, HttpResponse
from django.utils import simplejson
from apps.menus.models import Menu, Category, Label, Item, Recommend
from apps.menus.forms import CategoryForm, ItemForm
def json_response(x):
return HttpResponse(simplejson.dumps(x, sort_keys=True, indent=2),
content_type='application/json; charset=UTF-8')
def add_category(request):
if request.method == 'POST':
form = CategoryForm(request.POST)
if form.is_valid():
formset = form.save(commit=False)
formset.order = Category.objects.filter(menu=formset.menu).count()
formset.save()
return json_response({'success': True})
return json_response({'success': False,
'errors':dict(form.errors.items())})
def add_item(request):
if request.method == 'POST':
form = ItemForm(request.POST)
if form.is_valid():
formset = form.save(commit=False);
formset.order = Item.objects.filter(category=formset.category).count()
formset.save()
return json_response({'success': True})
return json_response({'success': False,
'errors':dict(form.errors.items())})
def edit_item(request, item_id):
if not request.is_ajax():
return HttpResponse('View Only used for AJAX, SORRY!')
try:
item = Item.objects.get(id=item_id)
except Item.DoesNotExist:
return json_response({'success': False, 'errors': 'no_item'})
if request.method == 'GET':
form = ItemForm(instance=item)
t = loader.get_template('menus/_partial/edit_form.html')
c = Context({'form':form})
return json_response({'success': True, 'html':t.render(c)})
elif request.method == 'POST':
form = ItemForm(request.POST, instance=item)
if form.is_valid():
form.save()
return json_response({'success': True})
return json_response({'success': False,
'errors':dict(form.errors.items())})
return HttpResponse('Must request with GET or POST')
def edit_category(request, category_id):
if not request.is_ajax():
return HttpResponse('View Only used for AJAX, SORRY!')
try:
category = Category.objects.get(id=category_id)
except Category.DoesNotExist:
return json_response({'success': False, 'errors': 'no_category'})
if request.method == 'GET':
form = CategoryFOrm(instance=category)
t = loader.get_template('menus/_partial/edit_form.html')
c = Context({'form': form})
return json_response({'success': True, 'html':t.render(c)})
elif request.method == 'POST':
form = CategoryForm(request.POST, instance=category)
if form.is_valid():
form.save()
return json_response({'success': True})
return json_response({'success': False,
'errors':dict(form.errors.items())})
return HttpResponse('Must request with GET or POST')
def restaurant_menus(request):
# make sure there is a restaurant in the request
if request.restaurant is None:
return Http404
# checking to see if an update is pushed
if request.method == "POST" and request.is_ajax():
menu_objects = simplejson.loads(request.POST['menu_objects'])
category_form = CategoryForm()
item_form = ItemForm()
for key, value in menu_objects.iteritems():
try:
category = Category.objects.get(
id=key.replace('category_', ''))
except:
return HttpResponse('fail')
category.order = value['order']
category.save()
for order, item in value['items'].iteritems():
try:
item = Item.objects.get(
id=item.replace('item_', ''))
except:
return HttpResponse('fail')
item.order = order
item.save()
return HttpResponse('ok')
else:
category_form = CategoryForm()
item_form = ItemForm()
menus = Menu.objects.filter(restaurant=request.restaurant)
return render_to_response('menus/menu.html',
{
'menus': menus,
'category_form': category_form,
'item_form': item_form,
},
context_instance=RequestContext(request))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment