##// END OF EJS Templates
Task #487: Vista de Operation...
Task #487: Vista de Operation git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@91 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71

File last commit:

r45:f516e8aeadc3
r70:fa840a0465c8
Show More
views.py
389 lines | 13.6 KiB | text/x-python | PythonLexer
Juan C. Espinoza
Add rc config mods...
r23 import json
from django.contrib import messages
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 from django.utils.safestring import mark_safe
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 from apps.main.models import Configuration, Experiment, Device
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 from apps.main.views import sidebar
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 from .models import RCConfiguration, RCLine, RCLineType, RCLineCode
from .forms import RCConfigurationForm, RCLineForm, RCLineViewForm, RCLineEditForm, RCSubLineEditForm, RCImportForm
from .utils import RCFile, plot_pulses
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 def conf(request, conf_id):
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 conf = get_object_or_404(RCConfiguration, pk=conf_id)
Juan C. Espinoza
Add rc config mods...
r23
lines = RCLine.objects.filter(rc_configuration=conf).order_by('channel')
for line in lines:
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 params = json.loads(line.params)
line.form = RCLineViewForm(extra_fields=params, line=line)
if 'params' in params:
line.subforms = [RCLineViewForm(extra_fields=fields, line=line, subform=True) for fields in params['params']]
Juan C. Espinoza
Add rc config mods...
r23
kwargs = {}
kwargs['dev_conf'] = conf
kwargs['rc_lines'] = lines
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 kwargs['dev_conf_keys'] = ['name', 'ipp', 'ntx', 'clock', 'clock_divider',
'time_before', 'time_after', 'sync']
Juan C. Espinoza
Add rc config mods...
r23
kwargs['title'] = 'RC Configuration'
kwargs['suptitle'] = 'Details'
kwargs['button'] = 'Edit Configuration'
###### SIDEBAR ######
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 kwargs.update(sidebar(conf))
Juan C. Espinoza
Add rc config mods...
r23
return render(request, 'rc_conf.html', kwargs)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
def conf_edit(request, conf_id):
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 conf = get_object_or_404(RCConfiguration, pk=conf_id)
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 lines = RCLine.objects.filter(rc_configuration=conf).order_by('channel')
for line in lines:
line_type = get_object_or_404(RCLineType, pk=line.line_type.id)
extra_fields = json.loads(line_type.params)
params = json.loads(line.params)
for item, values in extra_fields.items():
if item=='params':
continue
values['value'] = params[item]
line.form = RCLineEditForm(initial={'rc_configuration':conf_id, 'line_type': line.line_type.id, 'line': line.id},
extra_fields=extra_fields)
if 'params' in params:
line.subform = True
line.subforms = [RCSubLineEditForm(extra_fields=fields, line=line.id, count=i) for i, fields in enumerate(params['params'])]
Juan C. Espinoza
Add rc config mods...
r23
if request.method=='GET':
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
Juan C. Espinoza
Add rc config mods...
r23 form = RCConfigurationForm(instance=conf)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
elif request.method=='POST':
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 line_data = {}
conf_data = {}
extras = []
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 #classified post fields
for label,value in request.POST.items():
if label=='csrfmiddlewaretoken':
continue
if label.count('|')==0:
conf_data[label] = value
continue
elif label.count('|')==2:
extras.append(label)
continue
pk, name = label.split('|')
if pk in line_data:
line_data[pk][name] = value
else:
line_data[pk] = {name:value}
#update conf
form = RCConfigurationForm(conf_data, instance=conf)
Juan C. Espinoza
Add rc config mods...
r23 if form.is_valid():
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
Juan C. Espinoza
Add rc config mods...
r23 form.save()
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
#update lines fields
extras.sort()
for label in extras:
x, pk, name = label.split('|')
if pk not in line_data:
line_data[pk] = {}
if 'params' not in line_data[pk]:
line_data[pk]['params'] = []
if len(line_data[pk]['params'])<int(x)+1:
line_data[pk]['params'].append({})
line_data[pk]['params'][int(x)][name] = float(request.POST[label])
for pk, params in line_data.items():
line = RCLine.objects.get(pk=pk)
if line.line_type.name in ('windows', 'prog_pulses'):
if 'params' not in params:
params['params'] = []
line.params = json.dumps(params)
line.save()
#update pulses field
for line in conf.get_lines():
if line.line_type.name=='tr':
continue
line.update_pulses()
for tr in conf.get_lines('tr'):
tr.update_pulses()
messages.success(request, 'RC Configuration successfully updated')
return redirect(conf.get_absolute_url())
Juan C. Espinoza
Add rc config mods...
r23 kwargs = {}
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 kwargs['dev_conf'] = conf
Juan C. Espinoza
Add rc config mods...
r23 kwargs['form'] = form
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 kwargs['rc_lines'] = lines
kwargs['edit'] = True
kwargs['title'] = 'RC Configuration'
Juan C. Espinoza
Add rc config mods...
r23 kwargs['suptitle'] = 'Edit'
kwargs['button'] = 'Update'
kwargs['previous'] = conf.get_absolute_url()
Juan C. Espinoza
Update RC models, views, templates & statics...
r45
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 kwargs.update(sidebar(conf))
Juan C. Espinoza
Add rc config mods...
r23 return render(request, 'rc_conf_edit.html', kwargs)
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 def add_line(request, conf_id, line_type_id=None):
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 conf = get_object_or_404(RCConfiguration, pk=conf_id)
Juan C. Espinoza
Add rc config mods...
r23
if request.method=='GET':
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 if line_type_id:
line_type = get_object_or_404(RCLineType, pk=line_type_id)
form = RCLineForm(initial={'rc_configuration':conf_id, 'line_type': line_type_id},
extra_fields=json.loads(line_type.params))
else:
form = RCLineForm(initial={'rc_configuration':conf_id})
Juan C. Espinoza
Add rc config mods...
r23
if request.method=='POST':
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 line_type = get_object_or_404(RCLineType, pk=line_type_id)
form = RCLineForm(request.POST, extra_fields=json.loads(line_type.params))
Juan C. Espinoza
Add rc config mods...
r23
if form.is_valid():
form.save()
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 form.instance.update_pulses()
return redirect('url_edit_rc_conf', conf.id)
Juan C. Espinoza
Add rc config mods...
r23
kwargs = {}
kwargs['form'] = form
kwargs['title'] = 'RC Configuration'
kwargs['suptitle'] = 'Add Line'
kwargs['button'] = 'Add'
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 kwargs['previous'] = conf.get_absolute_url_edit()
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 kwargs['dev_conf'] = conf
kwargs.update(sidebar(conf))
Juan C. Espinoza
Add rc config mods...
r23 return render(request, 'rc_add_line.html', kwargs)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 def add_subline(request, conf_id, line_id):
conf = get_object_or_404(RCConfiguration, pk=conf_id)
line = get_object_or_404(RCLine, pk=line_id)
if request.method == 'POST':
if line:
params = json.loads(line.params)
if 'params' in params:
subparams = json.loads(line.line_type.params)
base = [p for p in subparams if p['name']=='params'][0]['form']
new = {}
for p in base:
new[p['name']] = p['value']
params['params'].append(new)
line.params = json.dumps(params)
line.save()
return redirect('url_edit_rc_conf', conf.id)
kwargs = {}
kwargs['title'] = 'Add new'
kwargs['suptitle'] = '%s to %s' % (line.line_type.name, line)
return render(request, 'confirm.html', kwargs)
Juan C. Espinoza
Add rc config mods...
r23
def remove_line(request, conf_id, line_id):
conf = get_object_or_404(RCConfiguration, pk=conf_id)
line = get_object_or_404(RCLine, pk=line_id)
if request.method == 'POST':
if line:
try:
channel = line.channel
line.delete()
for ch in range(channel+1, RCLine.objects.filter(rc_configuration=conf).count()+1):
l = RCLine.objects.get(rc_configuration=conf, channel=ch)
l.channel = l.channel-1
l.save()
messages.success(request, 'Line: "%s" has been deleted.' % line)
except:
messages.error(request, 'Unable to delete line: "%s".' % line)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 return redirect('url_edit_rc_conf', conf.id)
Juan C. Espinoza
Add rc config mods...
r23
kwargs = {}
kwargs['object'] = line
kwargs['delete_view'] = True
kwargs['title'] = 'Confirm delete'
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 kwargs['previous'] = conf.get_absolute_url_edit()
Juan C. Espinoza
Add rc config mods...
r23 return render(request, 'confirm.html', kwargs)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 def remove_subline(request, conf_id, line_id, subline_id):
Juan C. Espinoza
Add rc config mods...
r23
conf = get_object_or_404(RCConfiguration, pk=conf_id)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 line = get_object_or_404(RCLine, pk=line_id)
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 if request.method == 'POST':
if line:
params = json.loads(line.params)
params['params'].remove(params['params'][int(subline_id)-1])
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 line.params = json.dumps(params)
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 line.save()
return redirect('url_edit_rc_conf', conf.id)
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 kwargs = {}
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 kwargs['object'] = line
kwargs['object_name'] = line.line_type.name
kwargs['delete_view'] = True
kwargs['title'] = 'Confirm delete'
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 return render(request, 'confirm.html', kwargs)
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
Juan C. Espinoza
Add rc config mods...
r23
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 def update_lines_position(request, conf_id):
Juan C. Espinoza
Add rc config mods...
r23
conf = get_object_or_404(RCConfiguration, pk=conf_id)
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
if request.method=='POST':
ch = 0
for item in request.POST['items'].split('&'):
line = RCLine.objects.get(pk=item.split('=')[-1])
line.channel = ch
Juan C. Espinoza
Add rc config mods...
r23 line.save()
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 ch += 1
lines = RCLine.objects.filter(rc_configuration=conf).order_by('channel')
for line in lines:
line.form = RCLineViewForm(extra_fields=json.loads(line.params))
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 html = render(request, 'rc_lines.html', {'rc_lines':lines, 'edit':True})
Juan C. Espinoza
Updates to models, views & forms for CR...
r25 data = {'html': html.content}
return HttpResponse(json.dumps(data), content_type="application/json")
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 return redirect('url_edit_rc_conf', conf.id)
def import_file(request, conf_id):
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 conf = get_object_or_404(RCConfiguration, pk=conf_id)
if request.method=='POST':
form = RCImportForm(request.POST, request.FILES)
if form.is_valid():
#try:
if True:
f = RCFile(request.FILES['file_name'])
data = f.data
conf.ipp = data['ipp']
conf.ntx = data['ntx']
conf.clock = data['clock']
conf.clock_divider = data['clock_divider']
conf.time_before = data['time_before']
conf.time_after = data['time_after']
conf.sync = data['sync']
conf.save()
lines = []
positions = {'tx':0, 'tr':0}
for i, line_data in enumerate(data['lines']):
line_type = RCLineType.objects.get(name=line_data.pop('type'))
if line_type.name=='codes':
code = RCLineCode.objects.get(name=line_data['code'])
line_data['code'] = code.pk
line = RCLine.objects.filter(rc_configuration=conf, channel=i)
if line:
line = line[0]
line.line_type = line_type
line.params = json.dumps(line_data)
else:
line = RCLine(rc_configuration=conf, line_type=line_type,
params=json.dumps(line_data),
channel=i)
if line_type.name=='tx':
line.position = positions['tx']
positions['tx'] += 1
if line_type.name=='tr':
line.position = positions['tr']
positions['tr'] += 1
line.save()
lines.append(line)
for line, line_data in zip(lines, data['lines']):
if 'TX_ref' in line_data:
params = json.loads(line.params)
params['TX_ref'] = [l.pk for l in lines if l.line_type.name=='tx' and l.get_name().replace(' ', '')==line_data['TX_ref']][0]
line.params = json.dumps(params)
line.save()
for line in conf.get_lines():
if line.line_type.name=='tr':
continue
line.update_pulses()
for tr in conf.get_lines('tr'):
tr.update_pulses()
messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name'])
return redirect(conf.get_absolute_url())
#except Exception as e:
# messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], e))
else:
messages.warning(request, 'Your current configuration will be replaced')
form = RCImportForm()
kwargs = {}
kwargs['form'] = form
kwargs['title'] = 'RC Configuration'
kwargs['suptitle'] = 'Import file'
kwargs['button'] = 'Upload'
kwargs['previous'] = conf.get_absolute_url()
return render(request, 'rc_import.html', kwargs)
Juan C. Espinoza
Updates to models, views & forms for CR...
r25
Juan C. Espinoza
Proyecto base en Django (refs #259) ...
r0
Juan C. Espinoza
Update RC models, views, templates & statics...
r45 def view_pulses(request, conf_id):
conf = get_object_or_404(RCConfiguration, pk=conf_id)
lines = RCLine.objects.filter(rc_configuration=conf)
unit = (conf.clock/conf.clock_divider)*3./20
N = int(conf.ipp*(conf.clock/conf.clock_divider)*20./3)*conf.ntx
script, div = plot_pulses(unit, N, lines)
kwargs = {'div':mark_safe(div), 'script':mark_safe(script)}
if 'json' in request.GET:
return HttpResponse(json.dumps(kwargs), content_type="application/json")
else:
return render(request, 'rc_pulses.html', kwargs)