244 lines
7.5 KiB
Python
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"))
|
|
'''
|