printaform/printaform/formaprint/views.py
2011-11-10 10:02:23 -05:00

114 lines
3.4 KiB
Python
Executable file

# Create your views here.
from forms import ItemForm
from django.shortcuts import render_to_response
from django.http import HttpResponse, HttpResponseRedirect
from django.template import RequestContext
from django.shortcuts import get_object_or_404
from models import *
try:
import json
except:
import simplejson as json
from django.contrib.auth.decorators import login_required
from ox.django.shortcuts import render_to_json_response
from copy import deepcopy
from os.path import join
from settings import MEDIA_ROOT
import os
def index(request):
items = Item.objects.all() #FIXME: check perms, etc
context = RequestContext(request, {'items': items})
return render_to_response("index.html", context)
def new_item(request):
if request.POST:
form = ItemForm(request.POST)
if form.is_valid():
new_item = form.save(commit=False)
new_item.user = request.user
fields = new_item.typ.fields.values()
d = {}
for f in fields:
field_name = f['short_name']
value = f['default_value']
d[field_name] = value
j = json.dumps(d)
new_item.json = j
new_item.save()
id = new_item.id
return HttpResponseRedirect('/edit_item/?id=%d' % id)
else:
form = ItemForm()
context = RequestContext(request, {'form': form})
return render_to_response("new_item.html", context)
@login_required
def edit_item(request):
id = request.GET.get("id", 0)
item = get_object_or_404(Item, pk=id)
fields = item.get_fields()
textinputs = []
textareas = []
for f in fields:
if f['typ'] == 'short_text':
textinputs.append(f)
if f['typ'] == 'large_text':
textareas.append(f)
context = RequestContext(request, {
'item': item,
'textinputs': textinputs,
'textareas': textareas
})
return render_to_response("edit_item.html", context)
@login_required
def save_item(request):
if not request.POST:
return render_to_json_response('error')
id = request.POST['item_id']
item = get_object_or_404(Item, pk=id)
d = {}
for k in request.POST.keys():
if k != 'item_id':
d[k] = request.POST[k]
j = json.dumps(d)
item.json = j
item.save()
return render_to_json_response('ok')
@login_required
def save_item_as(request):
original_item_id = request.POST['item_id']
original_item = get_object_or_404(Item, pk=original_item_id)
new_item = deepcopy(original_item)
new_item.id = None
new_item.title = request.POST['new_item_title']
new_item.user = request.user
new_item.save()
return HttpResponse("/edit_item/?id=%d" % new_item.id)
def render_item(request):
id = request.GET.get("id", 0)
item = get_object_or_404(Item, pk=id)
return HttpResponse(item.render())
def print_item(request):
id = request.GET.get("id", 0)
item = get_object_or_404(Item, pk=id)
pdf_path = join(MEDIA_ROOT, "pdfs")
pdf_name = "%s.pdf" % id
pdf_output_path = join(pdf_path, pdf_name)
url = "http://printaform.bhangar.com/render_item/?id=%s" % id
cmd = "wkhtmltopdf %s %s" % (url, pdf_output_path,)
print cmd
os.system(cmd)
short_url = "/static/pdfs/%s.pdf" % id
return HttpResponseRedirect(short_url)