diff --git a/apps/main/forms.py b/apps/main/forms.py
index 5371bf8..abbef93 100644
--- a/apps/main/forms.py
+++ b/apps/main/forms.py
@@ -49,6 +49,9 @@ class CampaignForm(forms.ModelForm):
self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs)
self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs)
self.fields['description'].widget.attrs = {'rows': 2}
+
+ if self.instance:
+ self.fields['experiments'].queryset |= self.instance.experiments.all()
class Meta:
model = Campaign
diff --git a/apps/main/models.py b/apps/main/models.py
index 29294b8..2baddb3 100644
--- a/apps/main/models.py
+++ b/apps/main/models.py
@@ -149,10 +149,13 @@ class Experiment(models.Model):
class Meta:
db_table = 'db_experiments'
- ordering = ('name',)
+ ordering = ('template', 'name')
def __unicode__(self):
- return u'%s' % (self.name)
+ if self.template:
+ return u'%s (template)' % (self.name)
+ else:
+ return u'%s' % (self.name)
@property
def radar(self):
@@ -206,7 +209,7 @@ class Experiment(models.Model):
elif self.status == 1:
color = "info"
elif self.status == 2:
- color = "succes"
+ color = "success"
elif self.status == 3:
color = "warning"
else:
diff --git a/apps/main/templates/experiment.html b/apps/main/templates/experiment.html
index fc2c166..9354435 100644
--- a/apps/main/templates/experiment.html
+++ b/apps/main/templates/experiment.html
@@ -37,7 +37,7 @@
# |
- {% for key in configuration_labels %}
+ {% for key in configuration_keys %}
{{ key|title }} |
{% endfor%}
diff --git a/apps/main/templates/experiment_edit.html b/apps/main/templates/experiment_edit.html
index 5e630cf..7fe417b 100644
--- a/apps/main/templates/experiment_edit.html
+++ b/apps/main/templates/experiment_edit.html
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% extends "base_edit.html" %}
{% load bootstrap3 %}
{% load static %}
{% load main_tags %}
@@ -6,28 +6,6 @@
{% endblock %}
-{% block exp-active %}active{% endblock %}
-
-{% block content-title %}{{title}}{% endblock %}
-{% block content-suptitle %}{{suptitle}}{% endblock %}
-
-{% block content %}
-
-{% endblock %}
-
-{% block sidebar%}
- {% include "sidebar_devices.html" %}
-{% endblock %}
-
{% block extra-js%}
@@ -41,7 +19,7 @@
$('#id_create_from').change(function() {
var url = "{% url 'url_add_experiment' %}";
- if ($(this).val()=="2"){
+ if ($(this).val()=="2"){
document.location = url+"?template=0";
}else if ($(this).val()=="1"){
document.location = url+"?blank=0";
diff --git a/apps/main/templatetags/main_tags.py b/apps/main/templatetags/main_tags.py
index b4ae7c6..60f7b46 100644
--- a/apps/main/templatetags/main_tags.py
+++ b/apps/main/templatetags/main_tags.py
@@ -16,7 +16,7 @@ def attr(instance, key):
@register.filter
def title(s):
- return s.replace('_', ' ').title()
+ return s.split('__')[-1].replace('_', ' ').title()
@register.filter
def value(instance, key):
diff --git a/apps/main/views.py b/apps/main/views.py
index acfc699..36e2311 100644
--- a/apps/main/views.py
+++ b/apps/main/views.py
@@ -298,8 +298,10 @@ def campaign_new(request):
kwargs['button'] = 'Create'
kwargs['experiments'] = Configuration.objects.filter(experiment=request.GET['template'])
kwargs['experiment_keys'] = ['name', 'start_time', 'end_time']
- form = CampaignForm(instance=Campaign.objects.get(pk=request.GET['template']),
- initial={'template':False})
+ camp = Campaign.objects.get(pk=request.GET['template'])
+ form = CampaignForm(instance=camp,
+ initial={'name':'{} [{:%Y/%m/%d}]'.format(camp.name, datetime.now()),
+ 'template':False})
elif 'blank' in request.GET:
kwargs['button'] = 'Create'
form = CampaignForm()
@@ -342,10 +344,27 @@ def campaign_edit(request, id_camp):
form = CampaignForm(instance=campaign)
if request.method=='POST':
- form = CampaignForm(request.POST, instance=campaign)
+ exps = campaign.experiments.all().values_list('pk', flat=True)
+ post = request.POST.copy()
+ new_exps = post.getlist('experiments')
+ post.setlist('experiments', [])
+ form = CampaignForm(post, instance=campaign)
if form.is_valid():
- form.save()
+ camp = form.save()
+ for id_exp in new_exps:
+ if int(id_exp) in exps:
+ exps.pop(id_exp)
+ else:
+ exp = Experiment.objects.get(pk=id_exp)
+ if exp.template:
+ camp.experiments.add(exp.clone(template=False))
+ else:
+ camp.experiments.add(exp)
+
+ for id_exp in exps:
+ camp.experiments.remove(Experiment.objects.get(pk=id_exp))
+
return redirect('url_campaign', id_camp=id_camp)
kwargs = {}
@@ -412,17 +431,11 @@ def experiment(request, id_exp):
kwargs = {}
- exp_keys = ['id', 'location', 'name', 'start_time', 'end_time']
- conf_keys = ['id', 'device__name', 'device__device_type', 'device__ip_address', 'device__port_address']
-
- conf_labels = ['id', 'device__name', 'device_type', 'ip_address', 'port_address']
-
- kwargs['experiment_keys'] = exp_keys[1:]
+ kwargs['experiment_keys'] = ['template', 'radar', 'name', 'start_time', 'end_time']
kwargs['experiment'] = experiment
- kwargs['configuration_labels'] = conf_labels[1:]
- kwargs['configuration_keys'] = conf_keys[1:]
- kwargs['configurations'] = configurations #.values(*conf_keys)
+ kwargs['configuration_keys'] = ['device__name', 'device__device_type', 'device__ip_address', 'device__port_address']
+ kwargs['configurations'] = configurations
kwargs['title'] = 'Experiment'
kwargs['suptitle'] = 'Details'
@@ -448,8 +461,10 @@ def experiment_new(request, id_camp=None):
kwargs['button'] = 'Create'
kwargs['configurations'] = Configuration.objects.filter(experiment=request.GET['template'])
kwargs['configuration_keys'] = ['name', 'device__name', 'device__ip_address', 'device__port_address']
- form = ExperimentForm(instance=Experiment.objects.get(pk=request.GET['template']),
- initial={'template':False})
+ exp=Experiment.objects.get(pk=request.GET['template'])
+ form = ExperimentForm(instance=exp,
+ initial={'name': '{} [{:%Y/%m/%d}]'.format(exp.name, datetime.now()),
+ 'template': False})
elif 'blank' in request.GET:
kwargs['button'] = 'Create'
form = ExperimentForm()
@@ -504,33 +519,36 @@ def experiment_delete(request, id_exp):
if request.method=='POST':
if request.user.is_staff:
+ for conf in Configuration.objects.filter(experiment=experiment):
+ conf.delete()
experiment.delete()
return redirect('url_experiments')
- return HttpResponse("Not enough permission to delete this object")
+ messages.error(request, 'Not enough permission to delete this object')
+ return redirect(experiment.get_absolute_url())
- kwargs = {'object':experiment, 'exp_active':'active',
- 'url_cancel':'url_experiment', 'id_item':id_exp}
+ kwargs = {
+ 'title': 'Delete',
+ 'suptitle': 'Experiment',
+ 'object': experiment,
+ 'previous': experiment.get_absolute_url(),
+ 'delete': True
+ }
- return render(request, 'item_delete.html', kwargs)
+ return render(request, 'confirm.html', kwargs)
def dev_confs(request):
configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
-
-# keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
-
- keys = ['id', 'device', 'experiment', 'type', 'programmed_date']
kwargs = {}
- kwargs['configuration_keys'] = keys[1:]
- kwargs['configurations'] = configurations#.values(*keys)
+ kwargs['configuration_keys'] = ['device', 'experiment', 'type', 'programmed_date']
+ kwargs['configurations'] = configurations
kwargs['title'] = 'Configuration'
kwargs['suptitle'] = 'List'
- kwargs['button'] = 'New Configuration'
return render(request, 'dev_confs.html', kwargs)
@@ -611,7 +629,7 @@ def dev_conf_edit(request, id_conf):
###### SIDEBAR ######
kwargs.update(sidebar(conf=conf))
- return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
+ return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
def dev_conf_start(request, id_conf):
@@ -824,16 +842,21 @@ def dev_conf_delete(request, id_conf):
if request.method=='POST':
if request.user.is_staff:
- id_exp = conf.experiment.id
conf.delete()
- return redirect('url_experiment', id_exp=id_exp)
+ return redirect('url_dev_confs')
- return HttpResponse("Not enough permission to delete this object")
+ messages.error(request, 'Not enough permission to delete this object')
+ return redirect(conf.get_absolute_url())
- kwargs = {'object':conf, 'conf_active':'active',
- 'url_cancel':'url_dev_conf', 'id_item':id_conf}
+ kwargs = {
+ 'title': 'Delete',
+ 'suptitle': 'Experiment',
+ 'object': conf,
+ 'previous': conf.get_absolute_url(),
+ 'delete': True
+ }
- return render(request, 'item_delete.html', kwargs)
+ return render(request, 'confirm.html', kwargs)
def sidebar(**kwargs):