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 %} {% 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 %} - - {% csrf_token %} - {% bootstrap_form form layout='horizontal' size='medium' %} -
-
- {% if button %} -
- - {% endif %} - -{% 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):
#{{ key|title }}