|
|
import json
|
|
|
|
|
|
from django.contrib import messages
|
|
|
from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
|
|
|
|
|
|
from apps.main.models import Configuration, Experiment
|
|
|
from apps.main.views import sidebar
|
|
|
|
|
|
from .models import RCConfiguration, RCLine, RCLineType
|
|
|
from .forms import RCConfigurationForm, RCLineForm, RCLineViewForm, RCLineEditForm
|
|
|
|
|
|
|
|
|
def conf(request, id):
|
|
|
|
|
|
conf = get_object_or_404(RCConfiguration, pk=id)
|
|
|
|
|
|
lines = RCLine.objects.filter(rc_configuration=conf).order_by('channel')
|
|
|
|
|
|
for line in lines:
|
|
|
line.form = RCLineViewForm(extra_fields=json.loads(line.params))
|
|
|
|
|
|
kwargs = {}
|
|
|
kwargs['dev_conf'] = conf
|
|
|
kwargs['rc_lines'] = lines
|
|
|
kwargs['dev_conf_keys'] = ['clock', 'ipp', 'ntx','clock_divider']
|
|
|
|
|
|
kwargs['title'] = 'RC Configuration'
|
|
|
kwargs['suptitle'] = 'Details'
|
|
|
|
|
|
kwargs['button'] = 'Edit Configuration'
|
|
|
|
|
|
###### SIDEBAR ######
|
|
|
kwargs.update(sidebar(conf))
|
|
|
|
|
|
return render(request, 'rc_conf.html', kwargs)
|
|
|
|
|
|
|
|
|
def conf_edit(request, id):
|
|
|
|
|
|
conf = get_object_or_404(RCConfiguration, pk=id)
|
|
|
|
|
|
if request.method=='GET':
|
|
|
form = RCConfigurationForm(instance=conf)
|
|
|
|
|
|
if request.method=='POST':
|
|
|
form = RCConfigurationForm(request.POST, instance=conf)
|
|
|
|
|
|
if form.is_valid():
|
|
|
form.save()
|
|
|
return redirect('url_dev_conf', id=id)
|
|
|
|
|
|
kwargs = {}
|
|
|
kwargs['dev_conf'] = conf
|
|
|
kwargs['form'] = form
|
|
|
kwargs['title'] = 'Device Configuration'
|
|
|
kwargs['suptitle'] = 'Edit'
|
|
|
kwargs['button'] = 'Update'
|
|
|
kwargs['previous'] = conf.get_absolute_url()
|
|
|
|
|
|
kwargs.update(sidebar(conf))
|
|
|
|
|
|
return render(request, 'rc_conf_edit.html', kwargs)
|
|
|
|
|
|
|
|
|
def add_line(request, conf_id, line_type_id=None):
|
|
|
|
|
|
conf = get_object_or_404(RCConfiguration, pk=conf_id)
|
|
|
|
|
|
if request.method=='GET':
|
|
|
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})
|
|
|
|
|
|
if request.method=='POST':
|
|
|
line_type = get_object_or_404(RCLineType, pk=line_type_id)
|
|
|
form = RCLineForm(request.POST, extra_fields=json.loads(line_type.params))
|
|
|
|
|
|
if form.is_valid():
|
|
|
form.save()
|
|
|
return redirect(conf.get_absolute_url())
|
|
|
|
|
|
kwargs = {}
|
|
|
kwargs['form'] = form
|
|
|
kwargs['title'] = 'RC Configuration'
|
|
|
kwargs['suptitle'] = 'Add Line'
|
|
|
kwargs['button'] = 'Add'
|
|
|
kwargs['previous'] = conf.get_absolute_url()
|
|
|
kwargs['dev_conf'] = conf
|
|
|
|
|
|
kwargs.update(sidebar(conf))
|
|
|
|
|
|
return render(request, 'rc_add_line.html', kwargs)
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
return redirect(conf.get_absolute_url())
|
|
|
|
|
|
kwargs = {}
|
|
|
|
|
|
kwargs['object'] = line
|
|
|
kwargs['delete_view'] = True
|
|
|
kwargs['title'] = 'Confirm delete'
|
|
|
kwargs['previous'] = conf.get_absolute_url()
|
|
|
return render(request, 'confirm.html', kwargs)
|
|
|
|
|
|
|
|
|
def edit_lines(request, conf_id):
|
|
|
|
|
|
conf = get_object_or_404(RCConfiguration, pk=conf_id)
|
|
|
|
|
|
if request.method=='GET':
|
|
|
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)
|
|
|
for item in extra_fields:
|
|
|
params = json.loads(line.params)
|
|
|
item['value'] = params[item['name']]
|
|
|
line.form = RCLineEditForm(initial={'rc_configuration':conf_id, 'line_type': line.line_type.id, 'line': line.id},
|
|
|
extra_fields=extra_fields)
|
|
|
|
|
|
elif request.method=='POST':
|
|
|
data = {}
|
|
|
for label,value in request.POST.items():
|
|
|
if '|' not in label:
|
|
|
continue
|
|
|
id, name = label.split('|')
|
|
|
if id in data:
|
|
|
data[id][name]=value
|
|
|
else:
|
|
|
data[id] = {name:value}
|
|
|
|
|
|
for id, params in data.items():
|
|
|
line = RCLine.objects.get(pk=id)
|
|
|
line.params = json.dumps(params)
|
|
|
line.save()
|
|
|
|
|
|
return redirect(conf.get_absolute_url())
|
|
|
|
|
|
kwargs = {}
|
|
|
kwargs['dev_conf'] = conf
|
|
|
kwargs['rc_lines'] = lines
|
|
|
kwargs['edit'] = True
|
|
|
|
|
|
kwargs['title'] = 'RC Configuration'
|
|
|
kwargs['suptitle'] = 'Edit Lines'
|
|
|
kwargs['button'] = 'Update'
|
|
|
kwargs['previous'] = conf.get_absolute_url()
|
|
|
|
|
|
|
|
|
kwargs.update(sidebar(conf))
|
|
|
|
|
|
return render(request, 'rc_edit_lines.html', kwargs)
|
|
|
|
|
|
|
|
|
def update_lines(request, conf_id):
|
|
|
|
|
|
conf = get_object_or_404(RCConfiguration, pk=conf_id)
|
|
|
|
|
|
if request.method=='POST':
|
|
|
ch = 0
|
|
|
for item in request.POST['items'].split('&'):
|
|
|
line = RCLine.objects.get(pk=item.split('=')[-1])
|
|
|
line.channel = ch
|
|
|
line.save()
|
|
|
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))
|
|
|
|
|
|
html = render(request, 'rc_lines.html', {'rc_lines':lines})
|
|
|
data = {'html': html.content}
|
|
|
|
|
|
return HttpResponse(json.dumps(data), content_type="application/json")
|
|
|
return redirect(conf.get_absolute_url())
|
|
|
|
|
|
|
|
|
|
|
|
|