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