manifests/manifests/ships/views.py
2012-04-22 15:24:28 +05:30

244 lines
7.5 KiB
Python

# Create your views here.
from models import *
from django.http import HttpResponse
from ships import models
import json
from django.shortcuts import render_to_response
from django.db.models import Q
from django.template import RequestContext
from ox.django.shortcuts import render_to_json_response
from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator, InvalidPage, EmptyPage
#import pdb
@login_required
def googletranslate(request, model, field):
start = request.GET.get("start", False)
end = request.GET.get("end", False)
if not start and not end:
limit = False
else:
limit = True
try:
m = models.__getattribute__(model)
except AttributeError:
return HttpResponse("no such model")
response = []
if field not in m._meta.get_all_field_names():
return HttpResponse("no such field")
qset = m.objects.values(field).distinct()
if limit:
if not start:
start = 0
if not end:
end = qset.count()
qset = qset[start:end]
for obj in qset:
val = obj[field]
ordArr = []
isEnglish = True
for char in val:
# unichr is the opposite of ord
charOrd = ord(char)
if (charOrd > 500):
isEnglish = False
ordArr.append(str(ord(char)))
if not isEnglish:
response.append({
'ord': ",".join(ordArr),
'val': val
})
context = RequestContext(request, {
'values': response,
'model': model,
'field': field,
'start': start,
'end': end
})
return render_to_response("translate.html", context)
@csrf_exempt
@login_required
def dotranslate(request, model, field):
data = json.loads(request.POST.get('data', '{}'))
m = models.__getattribute__(model)
trans_field = "%s_trans" % field
savedObjects = 0
for d in data:
newVal = d['val']
oldVal = "".join([unichr(int(v)) for v in d['ord']])
q = Q(**{"%s__exact" % field: oldVal})
matches = m.objects.filter(q)
for match in matches:
match.__setattr__(trans_field, newVal)
match.save()
savedObjects += 1
return render_to_json_response({'len': savedObjects})
# return render_to_json_response(data)
@login_required
def translate(request, model, field, page_no=1):
# start = request.GET.get("start", False)
# end = request.GET.get("end", False)
# if not start and not end:
# limit = False
# else:
# limit = True
# print page_no
try:
m = models.__getattribute__(model)
except AttributeError:
return HttpResponse("no such model")
page_no = int(page_no)
response = []
if field not in m._meta.get_all_field_names():
return HttpResponse("no such field")
trans_field = field + "_trans"
q = Q(**{"%s__exact" % trans_field: ''})
qset = m.objects.values('id', field, trans_field).exclude(q).order_by(field).distinct(field)
paginator = Paginator(qset, 100)
try:
results = paginator.page(page_no)
except (EmptyPage, InvalidPage):
return HttpResponse("invalid page no / end of list")
# results = paginator.page(paginator.num_pages)
# page_no = paginator.num_pages
# if limit:
# if not start:
# start = 0
# if not end:
# end = qset.count()
# qset = qset[start:end]
for obj in results.object_list:
response.append({
'id': obj['id'],
'string': obj[field],
'translation': obj[trans_field]
})
context = RequestContext(request, {
'values': response,
'has_next': results.has_next(),
'next_page': int(page_no) + 1,
'previous_page': int(page_no) - 1,
'has_previous': results.has_previous(),
'page_no': page_no,
'num_pages': paginator.num_pages,
'model': model,
'field': field
})
return render_to_response("trans.html", context)
@login_required
def stringtranslate(request):
model = request.POST.get("model", "")
field = request.POST.get("field", "")
id = request.POST.get("id", 0)
string = request.POST.get("string", "").strip()
translation = request.POST.get("translation", "")
if model == 'Translation':
obj = Translation.objects.get(pk=id)
obj.string_trans = translation
obj.looked_at = True
obj.save()
return render_to_json_response({'ok': 'ok'})
try:
m = models.__getattribute__(model)
except AttributeError:
return HttpResponse("no such model")
q = Q(**{"%s__exact" % field: string})
trans_field = field + "_trans"
matches = m.objects.filter(q)
savedObjects = 0
# pdb.set_trace()
for match in matches:
match.__setattr__(trans_field, translation)
match.save()
savedObjects += 1
return render_to_json_response({'ok': savedObjects})
@login_required
def shipList(request):
page = request.GET.get('page', 1)
page_size = request.GET.get('page_size', 50)
startDate = request.GET.get('start_date', None)
endDate = request.GET.get('end_date', None)
billType = request.GET.get('bill_type', None)
shipName = request.GET.get('ship_name', None)
captain = request.GET.get('captain', None)
flag = request.GET.get('flag', None)
owner = request.GET.get('owner', None)
port = request.GET.get('port', None)
# country = request.GET.get('country', None)
qset = Ship.objects.all()
#add dates stuff
if billType:
qset = qset.filter(billType__iexact=billType)
if shipName:
qset = qset.filter(ship_name_trans__icontains=shipName)
if captain:
qset = qset.filter(captain_trans__icontains=captain)
if flag:
qset = qset.filter(flag__iexact=flag)
if owner:
qset = qset.filter(owner_trans__icontains=owner)
if port:
qset = qset.filter(port__icontains=port)
# if country:
# qset = qset.filter(country__icontains=country)
paginator = Paginator(qset, page_size)
results = paginator.page(page)
no_of_results = qset.count()
return render_to_response("shipList.html", {
'ships': results.object_list,
'no_of_pages': paginator.num_pages,
'page': page,
'page_size': page_size,
'no_of_results': no_of_results
})
'''
def dotrans(request, model, field):
oldVal = request.POST.get('oldVal', '')
newVal = request.POST.get('newVal', '')
m = models.__getattribute__(model)
trans_field = "%s_trans" % field
savedObjects = 0
q = Q(**{"%s__exact" % trans_field: oldVal})
matches = m.objects.filter(q)
for match in matches:
match.__setattr__(trans_field, newVal)
match.save()
savedObjects += 1
return render_to_json_response({'len': savedObjects})
def dotranslate(request, model, field):
txt = request.POST.get('txt', '')
lines = txt.split("\n\n")
trans_field = field + "_trans"
m = models.__getattribute__(model)
savedArr = []
for line in lines:
split = line.split("|")
ordArr = split[0].join(",")
val = split[1]
oldVal = [unichr(v) for v in ordArr].join("")
q = Q(**{"%s__isequal" % field: val})
matches = m.objects.filter(q)
savedArr.append("%s: %s" % (oldVal, val,))
for m in matches:
m[trans_field] = val
m.save()
return HttpResponse(savedArr.join("\n"))
'''