##// END OF EJS Templates
Task #487: Operation View. Se puede seleccionar una de las 5 ultimas Campañas o se puede buscar entre todas las existentes....
Fiorella Quino -
r69:c8b7ba86d34b
parent child
Show More
@@ -1,106 +1,126
1 from django import forms
1 from django import forms
2 from django.utils.safestring import mark_safe
2 from django.utils.safestring import mark_safe
3
3
4 from .models import DeviceType, Device, Experiment, Campaign, Configuration, Location
4 from .models import DeviceType, Device, Experiment, Campaign, Configuration, Location
5
5
6 FILE_FORMAT = (
6 FILE_FORMAT = (
7 ('json', 'json'),
7 ('json', 'json'),
8 )
8 )
9
9
10 DDS_FILE_FORMAT = (
10 DDS_FILE_FORMAT = (
11 ('json', 'json'),
11 ('json', 'json'),
12 ('text', 'dds')
12 ('text', 'dds')
13 )
13 )
14
14
15 RC_FILE_FORMAT = (
15 RC_FILE_FORMAT = (
16 ('json', 'json'),
16 ('json', 'json'),
17 ('text', 'rc')
17 ('text', 'rc')
18 )
18 )
19
19
20 def add_empty_choice(choices, pos=0, label='-----'):
20 def add_empty_choice(choices, pos=0, label='-----'):
21 if len(choices)>0:
21 if len(choices)>0:
22 choices = list(choices)
22 choices = list(choices)
23 choices.insert(0, (0, label))
23 choices.insert(0, (0, label))
24 return choices
24 return choices
25 else:
25 else:
26 return [(0, label)]
26 return [(0, label)]
27
27
28 class DatepickerWidget(forms.widgets.TextInput):
28 class DatepickerWidget(forms.widgets.TextInput):
29 def render(self, name, value, attrs=None):
29 def render(self, name, value, attrs=None):
30 input_html = super(DatepickerWidget, self).render(name, value, attrs)
30 input_html = super(DatepickerWidget, self).render(name, value, attrs)
31 html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>'
31 html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>'
32 return mark_safe(html)
32 return mark_safe(html)
33
33
34 class TimepickerWidget(forms.widgets.TextInput):
34 class TimepickerWidget(forms.widgets.TextInput):
35 def render(self, name, value, attrs=None):
35 def render(self, name, value, attrs=None):
36 input_html = super(TimepickerWidget, self).render(name, value, attrs)
36 input_html = super(TimepickerWidget, self).render(name, value, attrs)
37 html = '<div class="input-group time">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span></div>'
37 html = '<div class="input-group time">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span></div>'
38 return mark_safe(html)
38 return mark_safe(html)
39
39
40 class CampaignForm(forms.ModelForm):
40 class CampaignForm(forms.ModelForm):
41 def __init__(self, *args, **kwargs):
41 def __init__(self, *args, **kwargs):
42 super(CampaignForm, self).__init__(*args, **kwargs)
42 super(CampaignForm, self).__init__(*args, **kwargs)
43 self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs)
43 self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs)
44 self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs)
44 self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs)
45
45
46 class Meta:
46 class Meta:
47 model = Campaign
47 model = Campaign
48 exclude = ['']
48 exclude = ['']
49
49
50 class ExperimentForm(forms.ModelForm):
50 class ExperimentForm(forms.ModelForm):
51
51
52 def __init__(self, *args, **kwargs):
52 def __init__(self, *args, **kwargs):
53 super(ExperimentForm, self).__init__(*args, **kwargs)
53 super(ExperimentForm, self).__init__(*args, **kwargs)
54 self.fields['start_time'].widget = TimepickerWidget(self.fields['start_time'].widget.attrs)
54 self.fields['start_time'].widget = TimepickerWidget(self.fields['start_time'].widget.attrs)
55 self.fields['end_time'].widget = TimepickerWidget(self.fields['end_time'].widget.attrs)
55 self.fields['end_time'].widget = TimepickerWidget(self.fields['end_time'].widget.attrs)
56
56
57 self.fields['campaign'].widget.attrs['readonly'] = True
57 self.fields['campaign'].widget.attrs['readonly'] = True
58
58
59 class Meta:
59 class Meta:
60 model = Experiment
60 model = Experiment
61 exclude = ['']
61 exclude = ['']
62
62
63 class LocationForm(forms.ModelForm):
63 class LocationForm(forms.ModelForm):
64 class Meta:
64 class Meta:
65 model = Location
65 model = Location
66 exclude = ['']
66 exclude = ['']
67
67
68 class DeviceForm(forms.ModelForm):
68 class DeviceForm(forms.ModelForm):
69 class Meta:
69 class Meta:
70 model = Device
70 model = Device
71 exclude = ['status']
71 exclude = ['status']
72
72
73 class ConfigurationForm(forms.ModelForm):
73 class ConfigurationForm(forms.ModelForm):
74 class Meta:
74 class Meta:
75 model = Configuration
75 model = Configuration
76 exclude = ['type', 'created_date', 'programmed_date', 'parameters']
76 exclude = ['type', 'created_date', 'programmed_date', 'parameters']
77
77
78 class DeviceTypeForm(forms.Form):
78 class DeviceTypeForm(forms.Form):
79 device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name')))
79 device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name')))
80
80
81
81
82 class UploadFileForm(forms.Form):
82 class UploadFileForm(forms.Form):
83
83
84 file = forms.FileField()
84 file = forms.FileField()
85
85
86 class DownloadFileForm(forms.Form):
86 class DownloadFileForm(forms.Form):
87
87
88 format = forms.ChoiceField(choices= ((0, 'json'),) )
88 format = forms.ChoiceField(choices= ((0, 'json'),) )
89
89
90 def __init__(self, device_type, *args, **kwargs):
90 def __init__(self, device_type, *args, **kwargs):
91
91
92 super(DownloadFileForm, self).__init__(*args, **kwargs)
92 super(DownloadFileForm, self).__init__(*args, **kwargs)
93
93
94 self.fields['format'].choices = FILE_FORMAT
94 self.fields['format'].choices = FILE_FORMAT
95
95
96 if device_type == 'dds':
96 if device_type == 'dds':
97 self.fields['format'].choices = DDS_FILE_FORMAT
97 self.fields['format'].choices = DDS_FILE_FORMAT
98
98
99 if device_type == 'rc':
99 if device_type == 'rc':
100 self.fields['format'].choices = RC_FILE_FORMAT
100 self.fields['format'].choices = RC_FILE_FORMAT
101
101
102 class OperationForm(forms.Form):
102 class OperationForm(forms.Form):
103 # today = datetime.today()
103 # today = datetime.today()
104 # -----Campaigns from this month------
104 # -----Campaigns from this month------[:5]
105 campaign = forms.ChoiceField(choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')[:5], label="Campaign")
105 campaign = forms.ChoiceField(label="Campaign")
106
107 def __init__(self, *args, **kwargs):
108
109 if 'length' not in kwargs.keys():
110 length = None
111 else:
112 length = kwargs['length']
113
114 kwargs.pop('length')
115
116 super(OperationForm, self).__init__(*args, **kwargs)
117 self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')[:length]
118
119 class OperationSearchForm(forms.Form):
120 # -----ALL Campaigns------
121 campaign = forms.ChoiceField(label="Campaign")
122
123 def __init__(self, *args, **kwargs):
124 super(OperationSearchForm, self).__init__(*args, **kwargs)
125 self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')
106 No newline at end of file
126
@@ -1,122 +1,135
1 {% extends "base.html" %}
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
2 {% load bootstrap3 %}
3 {% load static %}
3 {% load static %}
4 {% load main_tags %}
4 {% load main_tags %}
5 {% block extra-head %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
7 {% endblock %}
8
8
9 {% block camp-active %}active{% endblock %}
9 {% block camp-active %}active{% endblock %}
10
10
11 {% block content-title %}{{title}}{% endblock %}
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
13
14 {% block content %}
14 {% block content %}
15
15
16 <form class="form" method="post" action="">
16 <form class="form" method="post" action="">
17 {% csrf_token %}
17 {% csrf_token %}
18 {% bootstrap_form form layout='horizontal' size='medium' %}
18 {% bootstrap_form form layout='horizontal' size='medium' %}
19 <div style="clear: both;"></div>
19 <div style="clear: both;"></div>
20 <br>
20 <br>
21 <!-- For deep search -->
22 {% if search_button == True %}
21 <button id="button-1" type="button" class="btn btn-primary pull-right">{{button}}</button>
23 <button id="button-1" type="button" class="btn btn-primary pull-right">{{button}}</button>
24 {% endif %}
22 <br>
25 <br>
23 <br>
26 <br>
24 </form>
27 </form>
25 <br>
28 <br>
26 <br>
29 <br>
27
30
28 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true" >
31 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true" >
29
32
30 {% for location in locations %}
33 {% for location in locations %}
31
34
32 <div class="panel panel-default">
35 <div class="panel panel-default">
33 <div class="panel-heading" role="tab" id="headingTwo">
36 <div class="panel-heading" role="tab" id="headingTwo">
34 <h4 class="panel-title">
37 <h4 class="panel-title">
35 <a class="collapsed" role="button" data-toggle="collapse" href="#collapseTwo-{{ location.id }}" aria-expanded="false" aria-controls="collapseTwo">
38 <a class="collapsed" role="button" data-toggle="collapse" href="#collapseTwo-{{ location.id }}" aria-expanded="false" aria-controls="collapseTwo">
36 {{location.name}}: Experiment List
39 {{location.name}}: Experiment List
37 <span>
40 <span>
38 </span>
41 </span>
39 </a>
42 </a>
40 <button id="play-{{ location.id }}" type="button" class="btn btn-primary pull-right btn-xs" aria-label="Left Align" style="margin-left: 10px">
43 <button id="play-{{ location.id }}" type="button" class="btn btn-primary pull-right btn-xs" aria-label="Left Align" style="margin-left: 10px">
41 <span class="glyphicon glyphicon-play" aria-hidden="true"></span>
44 <span class="glyphicon glyphicon-play" aria-hidden="true"></span>
42 </button>
45 </button>
43 <button id="stop-{{ location.id }}" type="button" class="btn btn-primary pull-right btn-xs" aria-label="Left Align" style="margin-left: 10px">
46 <button id="stop-{{ location.id }}" type="button" class="btn btn-primary pull-right btn-xs" aria-label="Left Align" style="margin-left: 10px">
44 <span class="glyphicon glyphicon-stop" aria-hidden="true"></span>
47 <span class="glyphicon glyphicon-stop" aria-hidden="true"></span>
45 </button>
48 </button>
46
49
47 </h4>
50 </h4>
48 </div>
51 </div>
49
52
50 <div id="collapseTwo-{{ location.id }}" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">
53 <div id="collapseTwo-{{ location.id }}" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">
51 <div class="panel-body">
54 <div class="panel-body">
52 <table class="table table-hover">
55 <table class="table table-hover">
53 <tr>
56 <tr>
54 <th>#</th>
57 <th>#</th>
55 {% for header in experiment_keys %}
58 {% for header in experiment_keys %}
56 <th>{{ header|title }}</th>
59 <th>{{ header|title }}</th>
57 {% endfor%}
60 {% endfor%}
58 </tr>
61 </tr>
59
62
60 {% for item in experiments %}
63 {% for item in experiments %}
61 {% if location.name in item.location.name %}
64 {% if location.name in item.location.name %}
62
65
63 <tr class="clickable-row" data-href="{% url 'url_experiment' item.id %}" >
66 <tr class="clickable-row" data-href="{% url 'url_experiment' item.id %}" >
64 <td>{{ forloop.counter }}</td>
67 <td>{{ forloop.counter }}</td>
65 {% for key in experiment_keys %}
68 {% for key in experiment_keys %}
66 <td>{{ item|value:key }}</td>
69 <td>{{ item|value:key }}</td>
67 {% endfor %}
70 {% endfor %}
68 </tr>
71 </tr>
69 {% endif %}
72 {% endif %}
70 {% endfor %}
73 {% endfor %}
71 </table>
74 </table>
72 </div>
75 </div>
73 </div>
76 </div>
74 </div>
77 </div>
75 {% endfor %}
78 {% endfor %}
76 </div>
79 </div>
77
80
78 {% endblock %}
81 {% endblock %}
79
82
80
83
81
84
82 {% block extra-js%}
85 {% block extra-js%}
83 <script type="text/javascript">
86 <script type="text/javascript">
84 //for (i = 0; i < locations.length; i++) {
87 //for (i = 0; i < locations.length; i++) {
85 // text += cars[i] + "<br>";
88 // text += cars[i] + "<br>";
86 //}
89 //}
87 //------For PLAY Button-------
90 //------For PLAY Button-------
88 {% for location in locations %}
91 {% for location in locations %}
89 $("#play-{{ location.id }}").click(function() {
92 $("#play-{{ location.id }}").click(function() {
90 //alert("Play-{{location}}");
93 //alert("Play-{{location}}");
91 var id_loc = {{location.id}}
94 var id_loc = {{location.id}}
92 //document.location =
95 //document.location =
93 });
96 });
94 {% endfor %}
97 {% endfor %}
95
98
96 //--------For STOP Button-------
99 //--------For STOP Button-------
97 {% for location in locations %}
100 {% for location in locations %}
98 $("#stop-{{ location.id }}").click(function() {
101 $("#stop-{{ location.id }}").click(function() {
99 alert("Stop-{{location}}");
102 alert("Stop-{{location}}");
100 // document.location = "{% url 'url_operation' campaign.id %}";
103 // document.location = "{% url 'url_operation' campaign.id %}";
101 });
104 });
102 {% endfor %}
105 {% endfor %}
103
106
104 $(".clickable-row").click(function() {
107 $(".clickable-row").click(function() {
105 document.location = $(this).data("href");
108 document.location = $(this).data("href");
106 });
109 });
107
110
111 {% if search_button == True %}
108 $(document).ready(function() {
112 $(document).ready(function() {
109 $("#id_campaign").change(function() {
113 $("#id_campaign").change(function() {
110 var id_camp = document.getElementById("id_campaign").value;
114 var id_camp = document.getElementById("id_campaign").value;
111 //alert(id_camp);
115 //alert(id_camp);
112 document.location = "{% url 'url_operation'%}"+String(id_camp);
116 document.location = "{% url 'url_operation'%}"+String(id_camp);
113 });
117 });
114 });
118 });
119 {% else %}
120 $(document).ready(function() {
121 $("#id_campaign").change(function() {
122 var id_camp = document.getElementById("id_campaign").value;
123 //alert(id_camp);
124 document.location = "{% url 'url_operation_search'%}"+String(id_camp);
125 });
126 });
127 {% endif %}
115
128
116 $("#button-1").click(function() {
129 $("#button-1").click(function() {
117 document.location = "{% url 'url_operation_search' %}";
130 document.location = "{% url 'url_operation_search' %}";
118 });
131 });
119
132
120
133
121 </script>
134 </script>
122 {% endblock %} No newline at end of file
135 {% endblock %}
@@ -1,45 +1,47
1 from django.conf.urls import url
1 from django.conf.urls import url
2
2
3 urlpatterns = (
3 urlpatterns = (
4 url(r'^location/new/$', 'apps.main.views.location_new', name='url_add_location'),
4 url(r'^location/new/$', 'apps.main.views.location_new', name='url_add_location'),
5 url(r'^location/$', 'apps.main.views.locations', name='url_locations'),
5 url(r'^location/$', 'apps.main.views.locations', name='url_locations'),
6 url(r'^location/(?P<id_loc>-?\d+)/$', 'apps.main.views.location', name='url_location'),
6 url(r'^location/(?P<id_loc>-?\d+)/$', 'apps.main.views.location', name='url_location'),
7 url(r'^location/(?P<id_loc>-?\d+)/edit/$', 'apps.main.views.location_edit', name='url_edit_location'),
7 url(r'^location/(?P<id_loc>-?\d+)/edit/$', 'apps.main.views.location_edit', name='url_edit_location'),
8 url(r'^location/(?P<id_loc>-?\d+)/delete/$', 'apps.main.views.location_delete', name='url_delete_location'),
8 url(r'^location/(?P<id_loc>-?\d+)/delete/$', 'apps.main.views.location_delete', name='url_delete_location'),
9
9
10 url(r'^device/new/$', 'apps.main.views.device_new', name='url_add_device'),
10 url(r'^device/new/$', 'apps.main.views.device_new', name='url_add_device'),
11 url(r'^device/$', 'apps.main.views.devices', name='url_devices'),
11 url(r'^device/$', 'apps.main.views.devices', name='url_devices'),
12 url(r'^device/(?P<id_dev>-?\d+)/$', 'apps.main.views.device', name='url_device'),
12 url(r'^device/(?P<id_dev>-?\d+)/$', 'apps.main.views.device', name='url_device'),
13 url(r'^device/(?P<id_dev>-?\d+)/edit/$', 'apps.main.views.device_edit', name='url_edit_device'),
13 url(r'^device/(?P<id_dev>-?\d+)/edit/$', 'apps.main.views.device_edit', name='url_edit_device'),
14 url(r'^device/(?P<id_dev>-?\d+)/delete/$', 'apps.main.views.device_delete', name='url_delete_device'),
14 url(r'^device/(?P<id_dev>-?\d+)/delete/$', 'apps.main.views.device_delete', name='url_delete_device'),
15
15
16 url(r'^campaign/new/$', 'apps.main.views.campaign_new', name='url_add_campaign'),
16 url(r'^campaign/new/$', 'apps.main.views.campaign_new', name='url_add_campaign'),
17 url(r'^campaign/$', 'apps.main.views.campaigns', name='url_campaigns'),
17 url(r'^campaign/$', 'apps.main.views.campaigns', name='url_campaigns'),
18 url(r'^campaign/(?P<id_camp>-?\d+)/$', 'apps.main.views.campaign', name='url_campaign'),
18 url(r'^campaign/(?P<id_camp>-?\d+)/$', 'apps.main.views.campaign', name='url_campaign'),
19 url(r'^campaign/(?P<id_camp>-?\d+)/edit/$', 'apps.main.views.campaign_edit', name='url_edit_campaign'),
19 url(r'^campaign/(?P<id_camp>-?\d+)/edit/$', 'apps.main.views.campaign_edit', name='url_edit_campaign'),
20 url(r'^campaign/(?P<id_camp>-?\d+)/delete/$', 'apps.main.views.campaign_delete', name='url_delete_campaign'),
20 url(r'^campaign/(?P<id_camp>-?\d+)/delete/$', 'apps.main.views.campaign_delete', name='url_delete_campaign'),
21
21
22 url(r'^campaign/(?P<id_camp>-?\d+)/new_experiment/$', 'apps.main.views.experiment_new', name='url_add_experiment'),
22 url(r'^campaign/(?P<id_camp>-?\d+)/new_experiment/$', 'apps.main.views.experiment_new', name='url_add_experiment'),
23 url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'),
23 url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'),
24 url(r'^experiment/(?P<id_exp>-?\d+)/$', 'apps.main.views.experiment', name='url_experiment'),
24 url(r'^experiment/(?P<id_exp>-?\d+)/$', 'apps.main.views.experiment', name='url_experiment'),
25 url(r'^experiment/(?P<id_exp>-?\d+)/edit/$', 'apps.main.views.experiment_edit', name='url_edit_experiment'),
25 url(r'^experiment/(?P<id_exp>-?\d+)/edit/$', 'apps.main.views.experiment_edit', name='url_edit_experiment'),
26 url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', 'apps.main.views.experiment_delete', name='url_delete_experiment'),
26 url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', 'apps.main.views.experiment_delete', name='url_delete_experiment'),
27
27
28 url(r'^experiment/(?P<id_exp>-?\d+)/new_dev_conf/$', 'apps.main.views.dev_conf_new', name='url_add_dev_conf'),
28 url(r'^experiment/(?P<id_exp>-?\d+)/new_dev_conf/$', 'apps.main.views.dev_conf_new', name='url_add_dev_conf'),
29 url(r'^dev_conf/$', 'apps.main.views.dev_confs', name='url_dev_confs'),
29 url(r'^dev_conf/$', 'apps.main.views.dev_confs', name='url_dev_confs'),
30 url(r'^dev_conf/(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_dev_conf'),
30 url(r'^dev_conf/(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_dev_conf'),
31 url(r'^dev_conf/(?P<id_conf>-?\d+)/edit/$', 'apps.main.views.dev_conf_edit', name='url_edit_dev_conf'),
31 url(r'^dev_conf/(?P<id_conf>-?\d+)/edit/$', 'apps.main.views.dev_conf_edit', name='url_edit_dev_conf'),
32 url(r'^dev_conf/(?P<id_conf>-?\d+)/delete/$', 'apps.main.views.dev_conf_delete', name='url_delete_dev_conf'),
32 url(r'^dev_conf/(?P<id_conf>-?\d+)/delete/$', 'apps.main.views.dev_conf_delete', name='url_delete_dev_conf'),
33
33
34 url(r'^dev_conf/(?P<id_conf>-?\d+)/write/$', 'apps.main.views.dev_conf_write', name='url_write_dev_conf'),
34 url(r'^dev_conf/(?P<id_conf>-?\d+)/write/$', 'apps.main.views.dev_conf_write', name='url_write_dev_conf'),
35 url(r'^dev_conf/(?P<id_conf>-?\d+)/read/$', 'apps.main.views.dev_conf_read', name='url_read_dev_conf'),
35 url(r'^dev_conf/(?P<id_conf>-?\d+)/read/$', 'apps.main.views.dev_conf_read', name='url_read_dev_conf'),
36 url(r'^dev_conf/(?P<id_conf>-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_dev_conf'),
36 url(r'^dev_conf/(?P<id_conf>-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_dev_conf'),
37 url(r'^dev_conf/(?P<id_conf>-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_dev_conf'),
37 url(r'^dev_conf/(?P<id_conf>-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_dev_conf'),
38 url(r'^dev_conf/(?P<id_conf>-?\d+)/start/$', 'apps.main.views.dev_conf_start', name='url_start_dev_conf'),
38 url(r'^dev_conf/(?P<id_conf>-?\d+)/start/$', 'apps.main.views.dev_conf_start', name='url_start_dev_conf'),
39 url(r'^dev_conf/(?P<id_conf>-?\d+)/stop/$', 'apps.main.views.dev_conf_stop', name='url_stop_dev_conf'),
39 url(r'^dev_conf/(?P<id_conf>-?\d+)/stop/$', 'apps.main.views.dev_conf_stop', name='url_stop_dev_conf'),
40 url(r'^dev_conf/(?P<id_conf>-?\d+)/status/$', 'apps.main.views.dev_conf_status', name='url_status_dev_conf'),
40 url(r'^dev_conf/(?P<id_conf>-?\d+)/status/$', 'apps.main.views.dev_conf_status', name='url_status_dev_conf'),
41
41
42 url(r'^operation/$', 'apps.main.views.operation', name='url_operation'),
42 url(r'^operation/$', 'apps.main.views.operation', name='url_operation'),
43 url(r'^operation/search/$', 'apps.main.views.operation_search', name='url_operation_search'),
44 url(r'^operation/search/(?P<id_camp>-?\d+)/$', 'apps.main.views.operation_search', name='url_operation_search'),
43 url(r'^operation/(?P<id_camp>-?\d+)/$', 'apps.main.views.operation', name='url_operation'),
45 url(r'^operation/(?P<id_camp>-?\d+)/$', 'apps.main.views.operation', name='url_operation'),
44
46
45 )
47 )
@@ -1,805 +1,887
1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
2 from django.contrib import messages
2 from django.contrib import messages
3
3
4 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm
4 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm
5 from .forms import OperationSearchForm
5 from apps.cgs.forms import CGSConfigurationForm
6 from apps.cgs.forms import CGSConfigurationForm
6 from apps.jars.forms import JARSConfigurationForm
7 from apps.jars.forms import JARSConfigurationForm
7 from apps.usrp.forms import USRPConfigurationForm
8 from apps.usrp.forms import USRPConfigurationForm
8 from apps.abs.forms import ABSConfigurationForm
9 from apps.abs.forms import ABSConfigurationForm
9 from apps.rc.forms import RCConfigurationForm
10 from apps.rc.forms import RCConfigurationForm
10 from apps.dds.forms import DDSConfigurationForm
11 from apps.dds.forms import DDSConfigurationForm
11
12
12 from .models import Campaign, Experiment, Device, Configuration, Location
13 from .models import Campaign, Experiment, Device, Configuration, Location, RunningExperiment
13 from apps.cgs.models import CGSConfiguration
14 from apps.cgs.models import CGSConfiguration
14 from apps.jars.models import JARSConfiguration
15 from apps.jars.models import JARSConfiguration
15 from apps.usrp.models import USRPConfiguration
16 from apps.usrp.models import USRPConfiguration
16 from apps.abs.models import ABSConfiguration
17 from apps.abs.models import ABSConfiguration
17 from apps.rc.models import RCConfiguration
18 from apps.rc.models import RCConfiguration
18 from apps.dds.models import DDSConfiguration
19 from apps.dds.models import DDSConfiguration
19
20
20 # Create your views here.
21 # Create your views here.
21
22
22 CONF_FORMS = {
23 CONF_FORMS = {
23 'rc': RCConfigurationForm,
24 'rc': RCConfigurationForm,
24 'dds': DDSConfigurationForm,
25 'dds': DDSConfigurationForm,
25 'jars': JARSConfigurationForm,
26 'jars': JARSConfigurationForm,
26 'cgs': CGSConfigurationForm,
27 'cgs': CGSConfigurationForm,
27 'abs': ABSConfigurationForm,
28 'abs': ABSConfigurationForm,
28 'usrp': USRPConfigurationForm,
29 'usrp': USRPConfigurationForm,
29 }
30 }
30
31
31 CONF_MODELS = {
32 CONF_MODELS = {
32 'rc': RCConfiguration,
33 'rc': RCConfiguration,
33 'dds': DDSConfiguration,
34 'dds': DDSConfiguration,
34 'jars': JARSConfiguration,
35 'jars': JARSConfiguration,
35 'cgs': CGSConfiguration,
36 'cgs': CGSConfiguration,
36 'abs': ABSConfiguration,
37 'abs': ABSConfiguration,
37 'usrp': USRPConfiguration,
38 'usrp': USRPConfiguration,
38 }
39 }
39
40
40 def index(request):
41 def index(request):
41 kwargs = {}
42 kwargs = {}
42
43
43 return render(request, 'index.html', kwargs)
44 return render(request, 'index.html', kwargs)
44
45
45 def locations(request):
46 def locations(request):
46
47
47 locations = Location.objects.all().order_by('name')
48 locations = Location.objects.all().order_by('name')
48
49
49 keys = ['id', 'name', 'description']
50 keys = ['id', 'name', 'description']
50
51
51 kwargs = {}
52 kwargs = {}
52 kwargs['location_keys'] = keys[1:]
53 kwargs['location_keys'] = keys[1:]
53 kwargs['locations'] = locations
54 kwargs['locations'] = locations
54 kwargs['title'] = 'Location'
55 kwargs['title'] = 'Location'
55 kwargs['suptitle'] = 'List'
56 kwargs['suptitle'] = 'List'
56 kwargs['button'] = 'New Location'
57 kwargs['button'] = 'New Location'
57
58
58 return render(request, 'locations.html', kwargs)
59 return render(request, 'locations.html', kwargs)
59
60
60 def location(request, id_loc):
61 def location(request, id_loc):
61
62
62 location = get_object_or_404(Location, pk=id_loc)
63 location = get_object_or_404(Location, pk=id_loc)
63
64
64 kwargs = {}
65 kwargs = {}
65 kwargs['location'] = location
66 kwargs['location'] = location
66 kwargs['location_keys'] = ['name', 'description']
67 kwargs['location_keys'] = ['name', 'description']
67
68
68 kwargs['title'] = 'Location'
69 kwargs['title'] = 'Location'
69 kwargs['suptitle'] = 'Details'
70 kwargs['suptitle'] = 'Details'
70
71
71 return render(request, 'location.html', kwargs)
72 return render(request, 'location.html', kwargs)
72
73
74 #def location_play(request, id_camp, id_loc):
75
76 # campaign = get_object_or_404(Campaign, pk=id_camp)
77 # print campaign
78 # location = get_object_or_404(Location, pk=id_loc)
79 # experiments = Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id)
80 # locations = Location.objects.filter(pk=id_loc)
81
82 # if request.method=='GET':
83 # form = OperationForm(initial={'campaign': campaign.id})
84
85 # kwargs = {}
86 #---Campaign
87 # kwargs['campaign'] = campaign
88 # kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
89 #---Experiment
90 # keys = ['id', 'name', 'start_time', 'end_time']
91 # kwargs['experiment_keys'] = keys[1:]
92 # kwargs['experiments'] = experiments
93 #---Radar
94 # kwargs['location'] = location
95 #---Else
96 # kwargs['title'] = 'Campaign'
97 # kwargs['suptitle'] = campaign.name
98 # kwargs['form'] = form
99 # kwargs['button'] = 'Search'
100
101 # return render(request, 'operation_play.html', kwargs)
102
73 def location_new(request):
103 def location_new(request):
74
104
75 if request.method == 'GET':
105 if request.method == 'GET':
76 form = LocationForm()
106 form = LocationForm()
77
107
78 if request.method == 'POST':
108 if request.method == 'POST':
79 form = LocationForm(request.POST)
109 form = LocationForm(request.POST)
80
110
81 if form.is_valid():
111 if form.is_valid():
82 form.save()
112 form.save()
83 return redirect('url_locations')
113 return redirect('url_locations')
84
114
85 kwargs = {}
115 kwargs = {}
86 kwargs['form'] = form
116 kwargs['form'] = form
87 kwargs['title'] = 'Location'
117 kwargs['title'] = 'Location'
88 kwargs['suptitle'] = 'New'
118 kwargs['suptitle'] = 'New'
89 kwargs['button'] = 'Create'
119 kwargs['button'] = 'Create'
90
120
91 return render(request, 'location_edit.html', kwargs)
121 return render(request, 'location_edit.html', kwargs)
92
122
93 def location_edit(request, id_loc):
123 def location_edit(request, id_loc):
94
124
95 location = get_object_or_404(Location, pk=id_loc)
125 location = get_object_or_404(Location, pk=id_loc)
96
126
97 if request.method=='GET':
127 if request.method=='GET':
98 form = LocationForm(instance=location)
128 form = LocationForm(instance=location)
99
129
100 if request.method=='POST':
130 if request.method=='POST':
101 form = LocationForm(request.POST, instance=location)
131 form = LocationForm(request.POST, instance=location)
102
132
103 if form.is_valid():
133 if form.is_valid():
104 form.save()
134 form.save()
105 return redirect('url_locations')
135 return redirect('url_locations')
106
136
107 kwargs = {}
137 kwargs = {}
108 kwargs['form'] = form
138 kwargs['form'] = form
109 kwargs['title'] = 'Location'
139 kwargs['title'] = 'Location'
110 kwargs['suptitle'] = 'Edit'
140 kwargs['suptitle'] = 'Edit'
111 kwargs['button'] = 'Update'
141 kwargs['button'] = 'Update'
112
142
113 return render(request, 'location_edit.html', kwargs)
143 return render(request, 'location_edit.html', kwargs)
114
144
115 def location_delete(request, id_loc):
145 def location_delete(request, id_loc):
116
146
117 location = get_object_or_404(Location, pk=id_loc)
147 location = get_object_or_404(Location, pk=id_loc)
118
148
119 if request.method=='POST':
149 if request.method=='POST':
120
150
121 if request.user.is_staff:
151 if request.user.is_staff:
122 location.delete()
152 location.delete()
123 return redirect('url_locations')
153 return redirect('url_locations')
124
154
125 return HttpResponse("Not enough permission to delete this object")
155 return HttpResponse("Not enough permission to delete this object")
126
156
127 kwargs = {'object':location, 'loc_active':'active',
157 kwargs = {'object':location, 'loc_active':'active',
128 'url_cancel':'url_location', 'id_item':id_loc}
158 'url_cancel':'url_location', 'id_item':id_loc}
129
159
130 return render(request, 'item_delete.html', kwargs)
160 return render(request, 'item_delete.html', kwargs)
131
161
132 def devices(request):
162 def devices(request):
133
163
134 devices = Device.objects.all().order_by('device_type__name')
164 devices = Device.objects.all().order_by('device_type__name')
135
165
136 # keys = ['id', 'device_type__name', 'name', 'ip_address']
166 # keys = ['id', 'device_type__name', 'name', 'ip_address']
137 keys = ['id', 'name', 'ip_address', 'port_address', 'device_type']
167 keys = ['id', 'name', 'ip_address', 'port_address', 'device_type']
138
168
139 kwargs = {}
169 kwargs = {}
140 kwargs['device_keys'] = keys[1:]
170 kwargs['device_keys'] = keys[1:]
141 kwargs['devices'] = devices#.values(*keys)
171 kwargs['devices'] = devices#.values(*keys)
142 kwargs['title'] = 'Device'
172 kwargs['title'] = 'Device'
143 kwargs['suptitle'] = 'List'
173 kwargs['suptitle'] = 'List'
144 kwargs['button'] = 'New Device'
174 kwargs['button'] = 'New Device'
145
175
146 return render(request, 'devices.html', kwargs)
176 return render(request, 'devices.html', kwargs)
147
177
148 def device(request, id_dev):
178 def device(request, id_dev):
149
179
150 device = get_object_or_404(Device, pk=id_dev)
180 device = get_object_or_404(Device, pk=id_dev)
151
181
152 kwargs = {}
182 kwargs = {}
153 kwargs['device'] = device
183 kwargs['device'] = device
154 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
184 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
155
185
156 kwargs['title'] = 'Device'
186 kwargs['title'] = 'Device'
157 kwargs['suptitle'] = 'Details'
187 kwargs['suptitle'] = 'Details'
158
188
159 return render(request, 'device.html', kwargs)
189 return render(request, 'device.html', kwargs)
160
190
161 def device_new(request):
191 def device_new(request):
162
192
163 if request.method == 'GET':
193 if request.method == 'GET':
164 form = DeviceForm()
194 form = DeviceForm()
165
195
166 if request.method == 'POST':
196 if request.method == 'POST':
167 form = DeviceForm(request.POST)
197 form = DeviceForm(request.POST)
168
198
169 if form.is_valid():
199 if form.is_valid():
170 form.save()
200 form.save()
171 return redirect('url_devices')
201 return redirect('url_devices')
172
202
173 kwargs = {}
203 kwargs = {}
174 kwargs['form'] = form
204 kwargs['form'] = form
175 kwargs['title'] = 'Device'
205 kwargs['title'] = 'Device'
176 kwargs['suptitle'] = 'New'
206 kwargs['suptitle'] = 'New'
177 kwargs['button'] = 'Create'
207 kwargs['button'] = 'Create'
178
208
179 return render(request, 'device_edit.html', kwargs)
209 return render(request, 'device_edit.html', kwargs)
180
210
181 def device_edit(request, id_dev):
211 def device_edit(request, id_dev):
182
212
183 device = get_object_or_404(Device, pk=id_dev)
213 device = get_object_or_404(Device, pk=id_dev)
184
214
185 if request.method=='GET':
215 if request.method=='GET':
186 form = DeviceForm(instance=device)
216 form = DeviceForm(instance=device)
187
217
188 if request.method=='POST':
218 if request.method=='POST':
189 form = DeviceForm(request.POST, instance=device)
219 form = DeviceForm(request.POST, instance=device)
190
220
191 if form.is_valid():
221 if form.is_valid():
192 form.save()
222 form.save()
193 return redirect('url_devices')
223 return redirect('url_devices')
194
224
195 kwargs = {}
225 kwargs = {}
196 kwargs['form'] = form
226 kwargs['form'] = form
197 kwargs['title'] = 'Device'
227 kwargs['title'] = 'Device'
198 kwargs['suptitle'] = 'Edit'
228 kwargs['suptitle'] = 'Edit'
199 kwargs['button'] = 'Update'
229 kwargs['button'] = 'Update'
200
230
201 return render(request, 'device_edit.html', kwargs)
231 return render(request, 'device_edit.html', kwargs)
202
232
203 def device_delete(request, id_dev):
233 def device_delete(request, id_dev):
204
234
205 device = get_object_or_404(Device, pk=id_dev)
235 device = get_object_or_404(Device, pk=id_dev)
206
236
207 if request.method=='POST':
237 if request.method=='POST':
208
238
209 if request.user.is_staff:
239 if request.user.is_staff:
210 device.delete()
240 device.delete()
211 return redirect('url_devices')
241 return redirect('url_devices')
212
242
213 return HttpResponse("Not enough permission to delete this object")
243 return HttpResponse("Not enough permission to delete this object")
214
244
215 kwargs = {'object':device, 'dev_active':'active',
245 kwargs = {'object':device, 'dev_active':'active',
216 'url_cancel':'url_device', 'id_item':id_dev}
246 'url_cancel':'url_device', 'id_item':id_dev}
217
247
218 return render(request, 'item_delete.html', kwargs)
248 return render(request, 'item_delete.html', kwargs)
219
249
220 def campaigns(request):
250 def campaigns(request):
221
251
222 campaigns = Campaign.objects.all().order_by('start_date')
252 campaigns = Campaign.objects.all().order_by('start_date')
223
253
224 keys = ['id', 'name', 'start_date', 'end_date']
254 keys = ['id', 'name', 'start_date', 'end_date']
225
255
226 kwargs = {}
256 kwargs = {}
227 kwargs['campaign_keys'] = keys[1:]
257 kwargs['campaign_keys'] = keys[1:]
228 kwargs['campaigns'] = campaigns#.values(*keys)
258 kwargs['campaigns'] = campaigns#.values(*keys)
229 kwargs['title'] = 'Campaign'
259 kwargs['title'] = 'Campaign'
230 kwargs['suptitle'] = 'List'
260 kwargs['suptitle'] = 'List'
231 kwargs['button'] = 'New Campaign'
261 kwargs['button'] = 'New Campaign'
232
262
233 return render(request, 'campaigns.html', kwargs)
263 return render(request, 'campaigns.html', kwargs)
234
264
235 def campaign(request, id_camp):
265 def campaign(request, id_camp):
236
266
237 campaign = get_object_or_404(Campaign, pk=id_camp)
267 campaign = get_object_or_404(Campaign, pk=id_camp)
238 experiments = Experiment.objects.filter(campaign=campaign)
268 experiments = Experiment.objects.filter(campaign=campaign)
239
269
240 form = CampaignForm(instance=campaign)
270 form = CampaignForm(instance=campaign)
241
271
242 kwargs = {}
272 kwargs = {}
243 kwargs['campaign'] = campaign
273 kwargs['campaign'] = campaign
244 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
274 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
245
275
246 keys = ['id', 'name', 'start_time', 'end_time']
276 keys = ['id', 'name', 'start_time', 'end_time']
247
277
248 kwargs['experiment_keys'] = keys[1:]
278 kwargs['experiment_keys'] = keys[1:]
249 kwargs['experiments'] = experiments.values(*keys)
279 kwargs['experiments'] = experiments.values(*keys)
250
280
251 kwargs['title'] = 'Campaign'
281 kwargs['title'] = 'Campaign'
252 kwargs['suptitle'] = 'Details'
282 kwargs['suptitle'] = 'Details'
253
283
254 kwargs['form'] = form
284 kwargs['form'] = form
255 kwargs['button'] = 'Add Experiment'
285 kwargs['button'] = 'Add Experiment'
256
286
257 return render(request, 'campaign.html', kwargs)
287 return render(request, 'campaign.html', kwargs)
258
288
259 def campaign_new(request):
289 def campaign_new(request):
260
290
261 if request.method == 'GET':
291 if request.method == 'GET':
262 form = CampaignForm()
292 form = CampaignForm()
263
293
264 if request.method == 'POST':
294 if request.method == 'POST':
265 form = CampaignForm(request.POST)
295 form = CampaignForm(request.POST)
266
296
267 if form.is_valid():
297 if form.is_valid():
268 campaign = form.save()
298 campaign = form.save()
269 return redirect('url_campaign', id_camp=campaign.id)
299 return redirect('url_campaign', id_camp=campaign.id)
270
300
271 kwargs = {}
301 kwargs = {}
272 kwargs['form'] = form
302 kwargs['form'] = form
273 kwargs['title'] = 'Campaign'
303 kwargs['title'] = 'Campaign'
274 kwargs['suptitle'] = 'New'
304 kwargs['suptitle'] = 'New'
275 kwargs['button'] = 'Create'
305 kwargs['button'] = 'Create'
276
306
277 return render(request, 'campaign_edit.html', kwargs)
307 return render(request, 'campaign_edit.html', kwargs)
278
308
279 def campaign_edit(request, id_camp):
309 def campaign_edit(request, id_camp):
280
310
281 campaign = get_object_or_404(Campaign, pk=id_camp)
311 campaign = get_object_or_404(Campaign, pk=id_camp)
282
312
283 if request.method=='GET':
313 if request.method=='GET':
284 form = CampaignForm(instance=campaign)
314 form = CampaignForm(instance=campaign)
285
315
286 if request.method=='POST':
316 if request.method=='POST':
287 form = CampaignForm(request.POST, instance=campaign)
317 form = CampaignForm(request.POST, instance=campaign)
288
318
289 if form.is_valid():
319 if form.is_valid():
290 form.save()
320 form.save()
291 return redirect('url_campaign', id_camp=id_camp)
321 return redirect('url_campaign', id_camp=id_camp)
292
322
293 kwargs = {}
323 kwargs = {}
294 kwargs['form'] = form
324 kwargs['form'] = form
295 kwargs['title'] = 'Campaign'
325 kwargs['title'] = 'Campaign'
296 kwargs['suptitle'] = 'Edit'
326 kwargs['suptitle'] = 'Edit'
297 kwargs['button'] = 'Update'
327 kwargs['button'] = 'Update'
298
328
299 return render(request, 'campaign_edit.html', kwargs)
329 return render(request, 'campaign_edit.html', kwargs)
300
330
301 def campaign_delete(request, id_camp):
331 def campaign_delete(request, id_camp):
302
332
303 campaign = get_object_or_404(Campaign, pk=id_camp)
333 campaign = get_object_or_404(Campaign, pk=id_camp)
304
334
305 if request.method=='POST':
335 if request.method=='POST':
306 if request.user.is_staff:
336 if request.user.is_staff:
307 campaign.delete()
337 campaign.delete()
308 return redirect('url_campaigns')
338 return redirect('url_campaigns')
309
339
310 return HttpResponse("Not enough permission to delete this object")
340 return HttpResponse("Not enough permission to delete this object")
311
341
312 kwargs = {'object':campaign, 'camp_active':'active',
342 kwargs = {'object':campaign, 'camp_active':'active',
313 'url_cancel':'url_campaign', 'id_item':id_camp}
343 'url_cancel':'url_campaign', 'id_item':id_camp}
314
344
315 return render(request, 'item_delete.html', kwargs)
345 return render(request, 'item_delete.html', kwargs)
316
346
317 def experiments(request):
347 def experiments(request):
318
348
319 experiment_list = Experiment.objects.all().order_by('campaign')
349 experiment_list = Experiment.objects.all().order_by('campaign')
320
350
321 keys = ['id', 'name', 'start_time', 'end_time', 'campaign']
351 keys = ['id', 'name', 'start_time', 'end_time', 'campaign']
322
352
323 kwargs = {}
353 kwargs = {}
324
354
325 kwargs['experiment_keys'] = keys[1:]
355 kwargs['experiment_keys'] = keys[1:]
326 kwargs['experiments'] = experiment_list#.values(*keys)
356 kwargs['experiments'] = experiment_list#.values(*keys)
327
357
328 kwargs['title'] = 'Experiment'
358 kwargs['title'] = 'Experiment'
329 kwargs['suptitle'] = 'List'
359 kwargs['suptitle'] = 'List'
330 kwargs['button'] = 'New Experiment'
360 kwargs['button'] = 'New Experiment'
331
361
332 return render(request, 'experiments.html', kwargs)
362 return render(request, 'experiments.html', kwargs)
333
363
334 def experiment(request, id_exp):
364 def experiment(request, id_exp):
335
365
336 experiment = get_object_or_404(Experiment, pk=id_exp)
366 experiment = get_object_or_404(Experiment, pk=id_exp)
337
367
338 experiments = Experiment.objects.filter(campaign=experiment.campaign)
368 experiments = Experiment.objects.filter(campaign=experiment.campaign)
339 configurations = Configuration.objects.filter(experiment=experiment, type=0)
369 configurations = Configuration.objects.filter(experiment=experiment, type=0)
340
370
341 kwargs = {}
371 kwargs = {}
342
372
343 exp_keys = ['id', 'campaign', 'location', 'name', 'start_time', 'end_time']
373 exp_keys = ['id', 'campaign', 'location', 'name', 'start_time', 'end_time']
344 conf_keys = ['id', 'device__name', 'device__device_type', 'device__ip_address', 'device__port_address']
374 conf_keys = ['id', 'device__name', 'device__device_type', 'device__ip_address', 'device__port_address']
345
375
346 conf_labels = ['id', 'device__name', 'device_type', 'ip_address', 'port_address']
376 conf_labels = ['id', 'device__name', 'device_type', 'ip_address', 'port_address']
347
377
348 kwargs['experiment_keys'] = exp_keys[1:]
378 kwargs['experiment_keys'] = exp_keys[1:]
349 kwargs['experiment'] = experiment
379 kwargs['experiment'] = experiment
350
380
351 kwargs['experiments'] = experiments.values(*exp_keys)
381 kwargs['experiments'] = experiments.values(*exp_keys)
352
382
353 kwargs['configuration_labels'] = conf_labels[1:]
383 kwargs['configuration_labels'] = conf_labels[1:]
354 kwargs['configuration_keys'] = conf_keys[1:]
384 kwargs['configuration_keys'] = conf_keys[1:]
355 kwargs['configurations'] = configurations #.values(*conf_keys)
385 kwargs['configurations'] = configurations #.values(*conf_keys)
356
386
357 kwargs['title'] = 'Experiment'
387 kwargs['title'] = 'Experiment'
358 kwargs['suptitle'] = 'Details'
388 kwargs['suptitle'] = 'Details'
359
389
360 kwargs['button'] = 'Add Configuration'
390 kwargs['button'] = 'Add Configuration'
361
391
362 return render(request, 'experiment.html', kwargs)
392 return render(request, 'experiment.html', kwargs)
363
393
364 def experiment_new(request, id_camp=0):
394 def experiment_new(request, id_camp=0):
365
395
366 if request.method == 'GET':
396 if request.method == 'GET':
367 form = ExperimentForm(initial={'campaign':id_camp})
397 form = ExperimentForm(initial={'campaign':id_camp})
368
398
369 if request.method == 'POST':
399 if request.method == 'POST':
370 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
400 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
371
401
372 if form.is_valid():
402 if form.is_valid():
373 experiment = form.save()
403 experiment = form.save()
374 return redirect('url_experiment', id_exp=experiment.id)
404 return redirect('url_experiment', id_exp=experiment.id)
375
405
376 kwargs = {}
406 kwargs = {}
377 kwargs['form'] = form
407 kwargs['form'] = form
378 kwargs['title'] = 'Experiment'
408 kwargs['title'] = 'Experiment'
379 kwargs['suptitle'] = 'New'
409 kwargs['suptitle'] = 'New'
380 kwargs['button'] = 'Create'
410 kwargs['button'] = 'Create'
381
411
382 return render(request, 'experiment_edit.html', kwargs)
412 return render(request, 'experiment_edit.html', kwargs)
383
413
384 def experiment_edit(request, id_exp):
414 def experiment_edit(request, id_exp):
385
415
386 experiment = get_object_or_404(Experiment, pk=id_exp)
416 experiment = get_object_or_404(Experiment, pk=id_exp)
387
417
388 if request.method == 'GET':
418 if request.method == 'GET':
389 form = ExperimentForm(instance=experiment)
419 form = ExperimentForm(instance=experiment)
390
420
391 if request.method=='POST':
421 if request.method=='POST':
392 form = ExperimentForm(request.POST, instance=experiment)
422 form = ExperimentForm(request.POST, instance=experiment)
393
423
394 if form.is_valid():
424 if form.is_valid():
395 experiment = form.save()
425 experiment = form.save()
396 return redirect('url_experiment', id_exp=experiment.id)
426 return redirect('url_experiment', id_exp=experiment.id)
397
427
398 kwargs = {}
428 kwargs = {}
399 kwargs['form'] = form
429 kwargs['form'] = form
400 kwargs['title'] = 'Experiment'
430 kwargs['title'] = 'Experiment'
401 kwargs['suptitle'] = 'Edit'
431 kwargs['suptitle'] = 'Edit'
402 kwargs['button'] = 'Update'
432 kwargs['button'] = 'Update'
403
433
404 return render(request, 'experiment_edit.html', kwargs)
434 return render(request, 'experiment_edit.html', kwargs)
405
435
406 def experiment_delete(request, id_exp):
436 def experiment_delete(request, id_exp):
407
437
408 experiment = get_object_or_404(Experiment, pk=id_exp)
438 experiment = get_object_or_404(Experiment, pk=id_exp)
409
439
410 if request.method=='POST':
440 if request.method=='POST':
411 if request.user.is_staff:
441 if request.user.is_staff:
412 id_camp = experiment.campaign.id
442 id_camp = experiment.campaign.id
413 experiment.delete()
443 experiment.delete()
414 return redirect('url_campaign', id_camp=id_camp)
444 return redirect('url_campaign', id_camp=id_camp)
415
445
416 return HttpResponse("Not enough permission to delete this object")
446 return HttpResponse("Not enough permission to delete this object")
417
447
418 kwargs = {'object':experiment, 'exp_active':'active',
448 kwargs = {'object':experiment, 'exp_active':'active',
419 'url_cancel':'url_experiment', 'id_item':id_exp}
449 'url_cancel':'url_experiment', 'id_item':id_exp}
420
450
421 return render(request, 'item_delete.html', kwargs)
451 return render(request, 'item_delete.html', kwargs)
422
452
423 def dev_confs(request):
453 def dev_confs(request):
424
454
425 configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
455 configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
426
456
427 # keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
457 # keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
428
458
429 keys = ['id', 'device', 'experiment', 'type', 'programmed_date']
459 keys = ['id', 'device', 'experiment', 'type', 'programmed_date']
430
460
431 kwargs = {}
461 kwargs = {}
432
462
433 kwargs['configuration_keys'] = keys[1:]
463 kwargs['configuration_keys'] = keys[1:]
434 kwargs['configurations'] = configurations#.values(*keys)
464 kwargs['configurations'] = configurations#.values(*keys)
435
465
436 kwargs['title'] = 'Configuration'
466 kwargs['title'] = 'Configuration'
437 kwargs['suptitle'] = 'List'
467 kwargs['suptitle'] = 'List'
438 kwargs['button'] = 'New Configuration'
468 kwargs['button'] = 'New Configuration'
439
469
440 return render(request, 'dev_confs.html', kwargs)
470 return render(request, 'dev_confs.html', kwargs)
441
471
442 def dev_conf(request, id_conf):
472 def dev_conf(request, id_conf):
443
473
444 conf = get_object_or_404(Configuration, pk=id_conf)
474 conf = get_object_or_404(Configuration, pk=id_conf)
445
475
446 DevConfModel = CONF_MODELS[conf.device.device_type.name]
476 DevConfModel = CONF_MODELS[conf.device.device_type.name]
447 dev_conf = DevConfModel.objects.get(pk=id_conf)
477 dev_conf = DevConfModel.objects.get(pk=id_conf)
448
478
449 kwargs = {}
479 kwargs = {}
450 kwargs['dev_conf'] = dev_conf
480 kwargs['dev_conf'] = dev_conf
451 kwargs['dev_conf_keys'] = ['name', 'experiment', 'device']
481 kwargs['dev_conf_keys'] = ['name', 'experiment', 'device']
452
482
453 kwargs['title'] = 'Configuration'
483 kwargs['title'] = 'Configuration'
454 kwargs['suptitle'] = 'Details'
484 kwargs['suptitle'] = 'Details'
455
485
456 kwargs['button'] = 'Edit Configuration'
486 kwargs['button'] = 'Edit Configuration'
457
487
458 ###### SIDEBAR ######
488 ###### SIDEBAR ######
459 kwargs.update(sidebar(conf))
489 kwargs.update(sidebar(conf))
460
490
461 return render(request, 'dev_conf.html', kwargs)
491 return render(request, 'dev_conf.html', kwargs)
462
492
463 def dev_conf_new(request, id_exp=0):
493 def dev_conf_new(request, id_exp=0):
464
494
465 if request.method == 'GET':
495 if request.method == 'GET':
466 form = ConfigurationForm(initial={'experiment':id_exp})
496 form = ConfigurationForm(initial={'experiment':id_exp})
467
497
468 if request.method == 'POST':
498 if request.method == 'POST':
469 experiment = Experiment.objects.get(pk=request.POST['experiment'])
499 experiment = Experiment.objects.get(pk=request.POST['experiment'])
470 device = Device.objects.get(pk=request.POST['device'])
500 device = Device.objects.get(pk=request.POST['device'])
471
501
472 DevConfForm = CONF_FORMS[device.device_type.name]
502 DevConfForm = CONF_FORMS[device.device_type.name]
473
503
474 form = DevConfForm(request.POST, initial={'experiment':experiment.id})
504 form = DevConfForm(request.POST, initial={'experiment':experiment.id})
475
505
476 if form.is_valid():
506 if form.is_valid():
477 dev_conf = form.save()
507 dev_conf = form.save()
478
508
479 return redirect('url_experiment', id_exp=experiment.id)
509 return redirect('url_experiment', id_exp=experiment.id)
480
510
481 kwargs = {}
511 kwargs = {}
482 kwargs['form'] = form
512 kwargs['form'] = form
483 kwargs['title'] = 'Configuration'
513 kwargs['title'] = 'Configuration'
484 kwargs['suptitle'] = 'New'
514 kwargs['suptitle'] = 'New'
485 kwargs['button'] = 'Create'
515 kwargs['button'] = 'Create'
486
516
487 return render(request, 'dev_conf_edit.html', kwargs)
517 return render(request, 'dev_conf_edit.html', kwargs)
488
518
489 def dev_conf_edit(request, id_conf):
519 def dev_conf_edit(request, id_conf):
490
520
491 conf = get_object_or_404(Configuration, pk=id_conf)
521 conf = get_object_or_404(Configuration, pk=id_conf)
492
522
493 DevConfModel = CONF_MODELS[conf.device.device_type.name]
523 DevConfModel = CONF_MODELS[conf.device.device_type.name]
494 DevConfForm = CONF_FORMS[conf.device.device_type.name]
524 DevConfForm = CONF_FORMS[conf.device.device_type.name]
495
525
496 dev_conf = DevConfModel.objects.get(pk=id_conf)
526 dev_conf = DevConfModel.objects.get(pk=id_conf)
497
527
498 if request.method=='GET':
528 if request.method=='GET':
499 form = DevConfForm(instance=dev_conf)
529 form = DevConfForm(instance=dev_conf)
500
530
501 if request.method=='POST':
531 if request.method=='POST':
502 form = DevConfForm(request.POST, instance=dev_conf)
532 form = DevConfForm(request.POST, instance=dev_conf)
503
533
504 if form.is_valid():
534 if form.is_valid():
505 form.save()
535 form.save()
506 return redirect('url_dev_conf', id_conf=id_conf)
536 return redirect('url_dev_conf', id_conf=id_conf)
507
537
508 kwargs = {}
538 kwargs = {}
509 kwargs['form'] = form
539 kwargs['form'] = form
510 kwargs['title'] = 'Device Configuration'
540 kwargs['title'] = 'Device Configuration'
511 kwargs['suptitle'] = 'Edit'
541 kwargs['suptitle'] = 'Edit'
512 kwargs['button'] = 'Update'
542 kwargs['button'] = 'Update'
513
543
514 ###### SIDEBAR ######
544 ###### SIDEBAR ######
515 kwargs.update(sidebar(conf))
545 kwargs.update(sidebar(conf))
516
546
517 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
547 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
518
548
519 def dev_conf_start(request, id_conf):
549 def dev_conf_start(request, id_conf):
520
550
521 conf = get_object_or_404(Configuration, pk=id_conf)
551 conf = get_object_or_404(Configuration, pk=id_conf)
522
552
523 DevConfModel = CONF_MODELS[conf.device.device_type.name]
553 DevConfModel = CONF_MODELS[conf.device.device_type.name]
524
554
525 conf = DevConfModel.objects.get(pk=id_conf)
555 conf = DevConfModel.objects.get(pk=id_conf)
526
556
527 if conf.start_device():
557 if conf.start_device():
528 messages.success(request, conf.message)
558 messages.success(request, conf.message)
529 else:
559 else:
530 messages.error(request, conf.message)
560 messages.error(request, conf.message)
531
561
532 conf.status_device()
562 conf.status_device()
533
563
534 return redirect(conf.get_absolute_url())
564 return redirect(conf.get_absolute_url())
535
565
536 def dev_conf_stop(request, id_conf):
566 def dev_conf_stop(request, id_conf):
537
567
538 conf = get_object_or_404(Configuration, pk=id_conf)
568 conf = get_object_or_404(Configuration, pk=id_conf)
539
569
540 DevConfModel = CONF_MODELS[conf.device.device_type.name]
570 DevConfModel = CONF_MODELS[conf.device.device_type.name]
541
571
542 conf = DevConfModel.objects.get(pk=id_conf)
572 conf = DevConfModel.objects.get(pk=id_conf)
543
573
544 if conf.stop_device():
574 if conf.stop_device():
545 messages.success(request, conf.message)
575 messages.success(request, conf.message)
546 else:
576 else:
547 messages.error(request, conf.message)
577 messages.error(request, conf.message)
548
578
549 conf.status_device()
579 conf.status_device()
550
580
551 return redirect(conf.get_absolute_url())
581 return redirect(conf.get_absolute_url())
552
582
553 def dev_conf_status(request, id_conf):
583 def dev_conf_status(request, id_conf):
554
584
555 conf = get_object_or_404(Configuration, pk=id_conf)
585 conf = get_object_or_404(Configuration, pk=id_conf)
556
586
557 DevConfModel = CONF_MODELS[conf.device.device_type.name]
587 DevConfModel = CONF_MODELS[conf.device.device_type.name]
558
588
559 conf = DevConfModel.objects.get(pk=id_conf)
589 conf = DevConfModel.objects.get(pk=id_conf)
560
590
561 if conf.status_device():
591 if conf.status_device():
562 messages.success(request, conf.message)
592 messages.success(request, conf.message)
563 else:
593 else:
564 messages.error(request, conf.message)
594 messages.error(request, conf.message)
565
595
566 return redirect(conf.get_absolute_url())
596 return redirect(conf.get_absolute_url())
567
597
568
598
569 def dev_conf_write(request, id_conf):
599 def dev_conf_write(request, id_conf):
570
600
571 conf = get_object_or_404(Configuration, pk=id_conf)
601 conf = get_object_or_404(Configuration, pk=id_conf)
572
602
573 DevConfModel = CONF_MODELS[conf.device.device_type.name]
603 DevConfModel = CONF_MODELS[conf.device.device_type.name]
574
604
575 conf = DevConfModel.objects.get(pk=id_conf)
605 conf = DevConfModel.objects.get(pk=id_conf)
576
606
577 answer = conf.write_device()
607 answer = conf.write_device()
578 conf.status_device()
608 conf.status_device()
579
609
580 if answer:
610 if answer:
581 messages.success(request, conf.message)
611 messages.success(request, conf.message)
582
612
583 #Creating a historical configuration
613 #Creating a historical configuration
584 conf.pk = None
614 conf.pk = None
585 conf.id = None
615 conf.id = None
586 conf.type = 1
616 conf.type = 1
587 conf.template = 0
617 conf.template = 0
588 conf.save()
618 conf.save()
589
619
590 #Original configuration
620 #Original configuration
591 conf = DevConfModel.objects.get(pk=id_conf)
621 conf = DevConfModel.objects.get(pk=id_conf)
592 else:
622 else:
593 messages.error(request, conf.message)
623 messages.error(request, conf.message)
594
624
595 return redirect(conf.get_absolute_url())
625 return redirect(conf.get_absolute_url())
596
626
597 def dev_conf_read(request, id_conf):
627 def dev_conf_read(request, id_conf):
598
628
599 conf = get_object_or_404(Configuration, pk=id_conf)
629 conf = get_object_or_404(Configuration, pk=id_conf)
600
630
601 DevConfModel = CONF_MODELS[conf.device.device_type.name]
631 DevConfModel = CONF_MODELS[conf.device.device_type.name]
602 DevConfForm = CONF_FORMS[conf.device.device_type.name]
632 DevConfForm = CONF_FORMS[conf.device.device_type.name]
603
633
604 conf = DevConfModel.objects.get(pk=id_conf)
634 conf = DevConfModel.objects.get(pk=id_conf)
605
635
606 if request.method=='GET':
636 if request.method=='GET':
607
637
608 parms = conf.read_device()
638 parms = conf.read_device()
609 conf.status_device()
639 conf.status_device()
610
640
611 if not parms:
641 if not parms:
612 messages.error(request, conf.message)
642 messages.error(request, conf.message)
613 return redirect(conf.get_absolute_url())
643 return redirect(conf.get_absolute_url())
614
644
615 form = DevConfForm(initial=parms, instance=conf)
645 form = DevConfForm(initial=parms, instance=conf)
616
646
617 if request.method=='POST':
647 if request.method=='POST':
618 form = DevConfForm(request.POST, instance=conf)
648 form = DevConfForm(request.POST, instance=conf)
619
649
620 if form.is_valid():
650 if form.is_valid():
621 form.save()
651 form.save()
622 return redirect(conf.get_absolute_url())
652 return redirect(conf.get_absolute_url())
623
653
624 messages.error(request, "Parameters could not be saved")
654 messages.error(request, "Parameters could not be saved")
625
655
626 kwargs = {}
656 kwargs = {}
627 kwargs['id_dev'] = conf.id
657 kwargs['id_dev'] = conf.id
628 kwargs['form'] = form
658 kwargs['form'] = form
629 kwargs['title'] = 'Device Configuration'
659 kwargs['title'] = 'Device Configuration'
630 kwargs['suptitle'] = 'Parameters read from device'
660 kwargs['suptitle'] = 'Parameters read from device'
631 kwargs['button'] = 'Save'
661 kwargs['button'] = 'Save'
632
662
633 ###### SIDEBAR ######
663 ###### SIDEBAR ######
634 kwargs.update(sidebar(conf))
664 kwargs.update(sidebar(conf))
635
665
636 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
666 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
637
667
638 def dev_conf_import(request, id_conf):
668 def dev_conf_import(request, id_conf):
639
669
640 conf = get_object_or_404(Configuration, pk=id_conf)
670 conf = get_object_or_404(Configuration, pk=id_conf)
641
671
642 DevConfModel = CONF_MODELS[conf.device.device_type.name]
672 DevConfModel = CONF_MODELS[conf.device.device_type.name]
643 DevConfForm = CONF_FORMS[conf.device.device_type.name]
673 DevConfForm = CONF_FORMS[conf.device.device_type.name]
644
674
645 conf = DevConfModel.objects.get(pk=id_conf)
675 conf = DevConfModel.objects.get(pk=id_conf)
646
676
647 if request.method == 'GET':
677 if request.method == 'GET':
648 file_form = UploadFileForm()
678 file_form = UploadFileForm()
649
679
650 if request.method == 'POST':
680 if request.method == 'POST':
651 file_form = UploadFileForm(request.POST, request.FILES)
681 file_form = UploadFileForm(request.POST, request.FILES)
652
682
653 if file_form.is_valid():
683 if file_form.is_valid():
654
684
655 parms = conf.import_from_file(request.FILES['file'])
685 parms = conf.import_from_file(request.FILES['file'])
656
686
657 if parms:
687 if parms:
658 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
688 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
659 print parms
689 print parms
660 form = DevConfForm(initial=parms, instance=conf)
690 form = DevConfForm(initial=parms, instance=conf)
661
691
662 kwargs = {}
692 kwargs = {}
663 kwargs['id_dev'] = conf.id
693 kwargs['id_dev'] = conf.id
664 kwargs['form'] = form
694 kwargs['form'] = form
665 kwargs['title'] = 'Device Configuration'
695 kwargs['title'] = 'Device Configuration'
666 kwargs['suptitle'] = 'Parameters imported'
696 kwargs['suptitle'] = 'Parameters imported'
667 kwargs['button'] = 'Save'
697 kwargs['button'] = 'Save'
668 kwargs['action'] = conf.get_absolute_url_edit()
698 kwargs['action'] = conf.get_absolute_url_edit()
669 kwargs['previous'] = conf.get_absolute_url()
699 kwargs['previous'] = conf.get_absolute_url()
670
700
671 ###### SIDEBAR ######
701 ###### SIDEBAR ######
672 kwargs.update(sidebar(conf))
702 kwargs.update(sidebar(conf))
673
703
674 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
704 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
675
705
676 messages.error(request, "Could not import parameters from file")
706 messages.error(request, "Could not import parameters from file")
677
707
678 kwargs = {}
708 kwargs = {}
679 kwargs['id_dev'] = conf.id
709 kwargs['id_dev'] = conf.id
680 kwargs['title'] = 'Device Configuration'
710 kwargs['title'] = 'Device Configuration'
681 kwargs['form'] = file_form
711 kwargs['form'] = file_form
682 kwargs['suptitle'] = 'Importing file'
712 kwargs['suptitle'] = 'Importing file'
683 kwargs['button'] = 'Import'
713 kwargs['button'] = 'Import'
684
714
685 kwargs.update(sidebar(conf))
715 kwargs.update(sidebar(conf))
686
716
687 return render(request, 'dev_conf_import.html', kwargs)
717 return render(request, 'dev_conf_import.html', kwargs)
688
718
689 def dev_conf_export(request, id_conf):
719 def dev_conf_export(request, id_conf):
690
720
691 conf = get_object_or_404(Configuration, pk=id_conf)
721 conf = get_object_or_404(Configuration, pk=id_conf)
692
722
693 DevConfModel = CONF_MODELS[conf.device.device_type.name]
723 DevConfModel = CONF_MODELS[conf.device.device_type.name]
694
724
695 conf = DevConfModel.objects.get(pk=id_conf)
725 conf = DevConfModel.objects.get(pk=id_conf)
696
726
697 if request.method == 'GET':
727 if request.method == 'GET':
698 file_form = DownloadFileForm(conf.device.device_type.name)
728 file_form = DownloadFileForm(conf.device.device_type.name)
699
729
700 if request.method == 'POST':
730 if request.method == 'POST':
701 file_form = DownloadFileForm(conf.device.device_type.name, request.POST)
731 file_form = DownloadFileForm(conf.device.device_type.name, request.POST)
702
732
703 if file_form.is_valid():
733 if file_form.is_valid():
704 fields = conf.export_to_file(format = file_form.cleaned_data['format'])
734 fields = conf.export_to_file(format = file_form.cleaned_data['format'])
705
735
706 response = HttpResponse(content_type=fields['content_type'])
736 response = HttpResponse(content_type=fields['content_type'])
707 response['Content-Disposition'] = 'attachment; filename="%s"' %fields['filename']
737 response['Content-Disposition'] = 'attachment; filename="%s"' %fields['filename']
708 response.write(fields['content'])
738 response.write(fields['content'])
709
739
710 return response
740 return response
711
741
712 messages.error(request, "Could not export parameters")
742 messages.error(request, "Could not export parameters")
713
743
714 kwargs = {}
744 kwargs = {}
715 kwargs['id_dev'] = conf.id
745 kwargs['id_dev'] = conf.id
716 kwargs['title'] = 'Device Configuration'
746 kwargs['title'] = 'Device Configuration'
717 kwargs['form'] = file_form
747 kwargs['form'] = file_form
718 kwargs['suptitle'] = 'Exporting file'
748 kwargs['suptitle'] = 'Exporting file'
719 kwargs['button'] = 'Export'
749 kwargs['button'] = 'Export'
720
750
721 return render(request, 'dev_conf_export.html', kwargs)
751 return render(request, 'dev_conf_export.html', kwargs)
722
752
723 def dev_conf_delete(request, id_conf):
753 def dev_conf_delete(request, id_conf):
724
754
725 conf = get_object_or_404(Configuration, pk=id_conf)
755 conf = get_object_or_404(Configuration, pk=id_conf)
726
756
727 if request.method=='POST':
757 if request.method=='POST':
728 if request.user.is_staff:
758 if request.user.is_staff:
729 id_exp = conf.experiment.id
759 id_exp = conf.experiment.id
730 conf.delete()
760 conf.delete()
731 return redirect('url_experiment', id_exp=id_exp)
761 return redirect('url_experiment', id_exp=id_exp)
732
762
733 return HttpResponse("Not enough permission to delete this object")
763 return HttpResponse("Not enough permission to delete this object")
734
764
735 kwargs = {'object':conf, 'conf_active':'active',
765 kwargs = {'object':conf, 'conf_active':'active',
736 'url_cancel':'url_dev_conf', 'id_item':id_conf}
766 'url_cancel':'url_dev_conf', 'id_item':id_conf}
737
767
738 ###### SIDEBAR ######
768 ###### SIDEBAR ######
739 kwargs.update(sidebar(conf))
769 kwargs.update(sidebar(conf))
740
770
741 return render(request, 'item_delete.html', kwargs)
771 return render(request, 'item_delete.html', kwargs)
742
772
743 def sidebar(conf):
773 def sidebar(conf):
744
774
745 experiments = Experiment.objects.filter(campaign=conf.experiment.campaign)
775 experiments = Experiment.objects.filter(campaign=conf.experiment.campaign)
746 configurations = Configuration.objects.filter(experiment=conf.experiment, type=0)
776 configurations = Configuration.objects.filter(experiment=conf.experiment, type=0)
747
777
748 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
778 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
749 conf_keys = ['id', 'device']
779 conf_keys = ['id', 'device']
750
780
751 kwargs = {}
781 kwargs = {}
752
782
753 kwargs['dev_conf'] = conf
783 kwargs['dev_conf'] = conf
754
784
755 kwargs['experiment_keys'] = exp_keys[1:]
785 kwargs['experiment_keys'] = exp_keys[1:]
756 kwargs['experiments'] = experiments.values(*exp_keys)
786 kwargs['experiments'] = experiments.values(*exp_keys)
757
787
758 kwargs['configuration_keys'] = conf_keys[1:]
788 kwargs['configuration_keys'] = conf_keys[1:]
759 kwargs['configurations'] = configurations #.values(*conf_keys)
789 kwargs['configurations'] = configurations #.values(*conf_keys)
760
790
761 return kwargs
791 return kwargs
762
792
763
793
764 def operation(request, id_camp=None):
794 def operation(request, id_camp=None):
765
795
766 if not id_camp:
796 if not id_camp:
767 campaigns = Campaign.objects.all().order_by('-start_date')
797 campaigns = Campaign.objects.all().order_by('-start_date')
768
798
769 if not campaigns:
799 if not campaigns:
770 return render(request, 'operation.html', {})
800 return render(request, 'operation.html', {})
771
801
772 id_camp = campaigns[0].id
802 id_camp = campaigns[0].id
773
803
774 campaign = get_object_or_404(Campaign, pk = id_camp)
804 campaign = get_object_or_404(Campaign, pk = id_camp)
775
805
776 if request.method=='GET':
806 if request.method=='GET':
777 form = OperationForm(initial={'campaign': id_camp})
807 form = OperationForm(initial={'campaign': campaign.id}, length = 5)
778
808
779 if request.method=='POST':
809 if request.method=='POST':
780 form = OperationForm(request.POST, initial={'campaign':campaign.id})
810 form = OperationForm(request.POST, initial={'campaign':campaign.id}, length = 5)
781
811
782 if form.is_valid():
812 if form.is_valid():
783 return redirect('url_operation', id_camp=campaign.id)
813 return redirect('url_operation', id_camp=campaign.id)
784
814 locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
785 locations = Location.objects.filter(experiment__campaign__pk = campaign.id)
815 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
786 experiments = Experiment.objects.filter(campaign=campaign)
816 #experiments = [Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id) for location in locations]
787 experiments = [Experiment.objects.filter(location__pk=location.id) for location in locations]
788
789 kwargs = {}
817 kwargs = {}
790 #---Campaign
818 #---Campaign
791 kwargs['campaign'] = campaign
819 kwargs['campaign'] = campaign
792 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
820 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
793 #---Experimet
821 #---Experiment
794 keys = ['id', 'name', 'start_time', 'end_time']
822 keys = ['id', 'name', 'start_time', 'end_time']
795 kwargs['experiment_keys'] = keys[1:]
823 kwargs['experiment_keys'] = keys[1:]
796 kwargs['experiments'] = experiments
824 kwargs['experiments'] = experiments
797 #---Radar
825 #---Radar
798 kwargs['locations'] = locations
826 kwargs['locations'] = locations
799 #---Else
827 #---Else
800 kwargs['title'] = 'Campaign'
828 kwargs['title'] = 'Campaign'
801 kwargs['suptitle'] = campaign.name
829 kwargs['suptitle'] = campaign.name
802 kwargs['form'] = form
830 kwargs['form'] = form
803 kwargs['button'] = 'Apply'
831 kwargs['button'] = 'Search'
832 kwargs['search_button'] = True
833
834 return render(request, 'operation.html', kwargs)
835
836 def operation_search(request, id_camp=None, location_play = None):
837
838
839 if not id_camp:
840 campaigns = Campaign.objects.all().order_by('-start_date')
841 form = OperationSearchForm()
842
843 if not campaigns:
844 return render(request, 'operation.html', {})
845
846 id_camp = campaigns[0].id
847 campaign = get_object_or_404(Campaign, pk = id_camp)
848
849 kwargs = {}
850 kwargs['title'] = 'All Campaigns'
851 kwargs['form'] = form
852 return render(request, 'operation.html', kwargs)
853
854 else:
855 campaign = get_object_or_404(Campaign, pk = id_camp)
856 locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
857 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
858 #experiments = [Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id) for location in locations]
859 form = OperationSearchForm(initial={'campaign': campaign.id})
860
861 kwargs = {}
862 #---Campaign
863 kwargs['campaign'] = campaign
864 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
865 #---Experiment
866 keys = ['id', 'name', 'start_time', 'end_time']
867 kwargs['experiment_keys'] = keys[1:]
868 kwargs['experiments'] = experiments
869 #---Radar
870 kwargs['locations'] = locations
871 #---Else
872 kwargs['title'] = 'Campaign'
873 kwargs['suptitle'] = campaign.name
874 kwargs['form'] = form
875 kwargs['button'] = 'Select'
876 kwargs['details'] = True
877 kwargs['search_button'] = False
878
879
880 if request.method=='POST':
881 form = OperationSearchForm(request.POST, initial={'campaign':campaign.id})
882
883 if form.is_valid():
884 return redirect('operation.html', id_camp=campaign.id)
885
804
886
805 return render(request, 'operation.html', kwargs) No newline at end of file
887 return render(request, 'operation.html', kwargs)
General Comments 0
You need to be logged in to leave comments. Login now