##// END OF EJS Templates
Task #487: Operation. Views: radar_play y radar_stop. Models: RunningExperiment. Attributes: status. Methods: get_status(), status_color()...
Fiorella Quino -
r84:9dc5446d0d71
parent child
Show More
@@ -1,314 +1,358
1 1 from django.db import models
2 2 from polymorphic import PolymorphicModel
3 3
4 4 from django.core.urlresolvers import reverse
5 5
6 6 CONF_STATES = (
7 7 (0, 'Disconnected'),
8 8 (1, 'Connected'),
9 9 (2, 'Running'),
10 10 )
11 11
12 12 EXP_STATES = (
13 (0,'Error'), #RED
14 (1,'Configurated'), #BLUE
15 (2,'Running'), #GREEN
16 (3,'Waiting'), #YELLOW
17 (4,'Nothing'), #WHITE
13 (0,'Error'), #RED
14 (1,'Configurated'), #BLUE
15 (2,'Running'), #GREEN
16 (3,'Waiting'), #YELLOW
17 (4,'Not Configured'), #WHITE
18 18 )
19 19
20 20 CONF_TYPES = (
21 21 (0, 'Active'),
22 22 (1, 'Historical'),
23 23 )
24 24
25 25 DEV_STATES = (
26 26 (0, 'No connected'),
27 27 (1, 'Connected'),
28 28 (2, 'Configured'),
29 29 (3, 'Running'),
30 30 )
31 31
32 32 DEV_TYPES = (
33 33 ('', 'Select a device type'),
34 34 ('rc', 'Radar Controller'),
35 35 ('dds', 'Direct Digital Synthesizer'),
36 36 ('jars', 'Jicamarca Radar Acquisition System'),
37 37 ('usrp', 'Universal Software Radio Peripheral'),
38 38 ('cgs', 'Clock Generator System'),
39 39 ('abs', 'Automatic Beam Switching'),
40 40 )
41 41
42 42 DEV_PORTS = {
43 43 'rc' : 2000,
44 44 'dds' : 2000,
45 45 'jars' : 2000,
46 46 'usrp' : 2000,
47 47 'cgs' : 8080,
48 48 'abs' : 8080
49 49 }
50 50
51 51 RADAR_STATES = (
52 52 (0, 'No connected'),
53 (1, 'Connnected'),
53 (1, 'Connected'),
54 54 (2, 'Configured'),
55 55 (3, 'Running'),
56 56 (4, 'Scheduled'),
57 57 )
58 58 # Create your models here.
59
60 59
61 60 class Location(models.Model):
62 61
63 62 name = models.CharField(max_length = 30)
64 63 description = models.TextField(blank=True, null=True)
65 64
66 65 class Meta:
67 66 db_table = 'db_location'
68 67
69 68 def __unicode__(self):
70 69 return u'%s' % self.name
71 70
72 71 class DeviceType(models.Model):
73 72
74 73 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
75 74 description = models.TextField(blank=True, null=True)
76 75
77 76 class Meta:
78 77 db_table = 'db_device_types'
79 78
80 79 def __unicode__(self):
81 80 return u'%s' % self.get_name_display()
82 81
83 82 class Device(models.Model):
84 83
85 84 device_type = models.ForeignKey(DeviceType, on_delete=models.CASCADE)
86 85 location = models.ForeignKey(Location, on_delete=models.CASCADE)
87 86
88 87 name = models.CharField(max_length=40, default='')
89 88 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
90 89 port_address = models.PositiveSmallIntegerField(default=2000)
91 90 description = models.TextField(blank=True, null=True)
92 91 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
93 92
94 93 class Meta:
95 94 db_table = 'db_devices'
96 95
97 96 def __unicode__(self):
98 97 return u'%s | %s' % (self.name, self.ip_address)
99 98
100 99 def get_status(self):
101 100
102 101 return self.status
103 102
104 103
105 104 class Campaign(models.Model):
106 105
107 106 template = models.BooleanField(default=False)
108 107
109 108 name = models.CharField(max_length=40, unique=True)
109 experiment = models.ManyToManyField('Experiment')
110
110 111 start_date = models.DateTimeField(blank=True, null=True)
111 112 end_date = models.DateTimeField(blank=True, null=True)
112 113 tags = models.CharField(max_length=40)
113 114 description = models.TextField(blank=True, null=True)
114 115
115 116 class Meta:
116 117 db_table = 'db_campaigns'
117 118
118 119 def __unicode__(self):
119 120 return u'%s' % (self.name)
120 121
121 122 # class Radar(models.Model):
122 123 #
123 124 # # name = models.CharField(max_length = 30)
124 125 # experiment = models.ForeignKey('Experiment', on_delete=models.CASCADE)
125 126 # location = models.OneToOneField('Location', on_delete=models.CASCADE)
126 127 # status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
127 128 #
128 129 # class Meta:
129 130 # db_table = 'db_radar'
130 131 #
131 132 # def __unicode__(self):
132 133 # return u'%s' % self.location
133 134
134 #class RunningExperiment(models.Model):
135 # radar = models.OneToOneField('Location', on_delete=models.CASCADE)
136 # running_experiment = models.OneToOneField('Experiment', on_delete=models.CASCADE)
137 # status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
135 class RunningExperiment(models.Model):
136 radar = models.OneToOneField('Location', on_delete=models.CASCADE)
137 running_experiment = models.ManyToManyField('Experiment')
138 status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES)
138 139
139 140
140 141 class Experiment(models.Model):
141 142
142 143 template = models.BooleanField(default=False)
143 144
144 campaign = models.ForeignKey('Campaign', null=True, blank=True, on_delete=models.CASCADE)
145 #campaign = models.ForeignKey('Campaign', null=True, blank=True, on_delete=models.CASCADE)
145 146 location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE)
146 147
147 148 name = models.CharField(max_length=40, default='')
148 149 start_time = models.TimeField(default='00:00:00')
149 150 end_time = models.TimeField(default='23:59:59')
151 status = models.PositiveSmallIntegerField(default=0, choices=EXP_STATES)
150 152
151 153 class Meta:
152 154 db_table = 'db_experiments'
153 155
154 156 def __unicode__(self):
155 157 return u'%s' % (self.name)
156 158
159
160 def get_status(self):
161 configurations = Configuration.objects.filter(experiment=self)
162 exp_status=[]
163 for conf in configurations:
164 print conf.status_device()
165 exp_status.append(conf.status_device())
166
167 if not exp_status: #No Configuration
168 self.status = 4
169 self.save()
170 return
171
172 total = 1
173 for e_s in exp_status:
174 total = total*e_s
175
176 if total == 0: #Error
177 status = 0
178 elif total == (3**len(exp_status)): #Running
179 status = 2
180 else:
181 status = 1 #Configurated
182
183 self.status = status
184 self.save()
185
186 def status_color(self):
187 color = 'danger'
188 if self.status == 0:
189 color = "danger"
190 elif self.status == 1:
191 color = "info"
192 elif self.status == 2:
193 color = "succes"
194 elif self.status == 3:
195 color = "warning"
196 else:
197 color = "muted"
198
199 return color
200
157 201 class Configuration(PolymorphicModel):
158 202
159 203 template = models.BooleanField(default=False)
160 204
161 205 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
162 206
163 207 experiment = models.ForeignKey('Experiment', null=True, blank=True, on_delete=models.CASCADE)
164 208 device = models.ForeignKey(Device, on_delete=models.CASCADE)
165 209
166 210 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
167 211
168 212 created_date = models.DateTimeField(auto_now_add=True)
169 213 programmed_date = models.DateTimeField(auto_now=True)
170 214
171 215 parameters = models.TextField(default='{}')
172 216
173 217 message = ""
174 218
175 219 class Meta:
176 220 db_table = 'db_configurations'
177 221
178 222 def __unicode__(self):
179 223
180 224 if self.experiment:
181 225 return u'[%s, %s]: %s' % (self.experiment.name,
182 226 self.device.name,
183 227 self.name)
184 228 else:
185 229 return u'%s' % self.device.name
186 230
187 231
188 232
189 233 def parms_to_dict(self):
190 234
191 235 parameters = {}
192 236
193 237 for key in self.__dict__.keys():
194 238 parameters[key] = getattr(self, key)
195 239
196 240 return parameters
197 241
198 242 def parms_to_text(self):
199 243
200 244 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
201 245
202 246 return ''
203 247
204 248 def parms_to_binary(self):
205 249
206 250 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
207 251
208 252 return ''
209 253
210 254 def dict_to_parms(self, parameters):
211 255
212 256 if type(parameters) != type({}):
213 257 return
214 258
215 259 for key in parameters.keys():
216 260 setattr(self, key, parameters[key])
217 261
218 262 def export_to_file(self, format="json"):
219 263
220 264 import json
221 265
222 266 content_type = ''
223 267
224 268 if format == 'text':
225 269 content_type = 'text/plain'
226 270 filename = '%s_%s.%s' %(self.device.device_type.name, self.name, self.device.device_type.name)
227 271 content = self.parms_to_text()
228 272
229 273 if format == 'binary':
230 274 content_type = 'application/octet-stream'
231 275 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
232 276 content = self.parms_to_binary()
233 277
234 278 if not content_type:
235 279 content_type = 'application/json'
236 280 filename = '%s_%s.json' %(self.device.device_type.name, self.name)
237 281 content = json.dumps(self.parms_to_dict(), indent=2)
238 282
239 283 fields = {'content_type':content_type,
240 284 'filename':filename,
241 285 'content':content
242 286 }
243 287
244 288 return fields
245 289
246 290 def import_from_file(self, fp):
247 291
248 292 import os, json
249 293
250 294 parms = {}
251 295
252 296 path, ext = os.path.splitext(fp.name)
253 297
254 298 if ext == '.json':
255 299 parms = json.load(fp)
256 300
257 301 return parms
258 302
259 303 def status_device(self):
260 304
261 305 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
262 306
263 307 return None
264 308
265 309 def stop_device(self):
266 310
267 311 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
268 312
269 313 return None
270 314
271 315 def start_device(self):
272 316
273 317 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
274 318
275 319 return None
276 320
277 321 def write_device(self, parms):
278 322
279 323 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
280 324
281 325 return None
282 326
283 327 def read_device(self):
284 328
285 329 raise NotImplementedError, "This method should be implemented in %s Configuration model" %str(self.device.device_type.name).upper()
286 330
287 331 return None
288 332
289 333 def get_absolute_url(self):
290 334 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
291 335
292 336 def get_absolute_url_edit(self):
293 337 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
294 338
295 339 def get_absolute_url_import(self):
296 340 return reverse('url_import_dev_conf', args=[str(self.id)])
297 341
298 342 def get_absolute_url_export(self):
299 343 return reverse('url_export_dev_conf', args=[str(self.id)])
300 344
301 345 def get_absolute_url_write(self):
302 346 return reverse('url_write_dev_conf', args=[str(self.id)])
303 347
304 348 def get_absolute_url_read(self):
305 349 return reverse('url_read_dev_conf', args=[str(self.id)])
306 350
307 351 def get_absolute_url_start(self):
308 352 return reverse('url_start_dev_conf', args=[str(self.id)])
309 353
310 354 def get_absolute_url_stop(self):
311 355 return reverse('url_stop_dev_conf', args=[str(self.id)])
312 356
313 357 def get_absolute_url_status(self):
314 358 return reverse('url_status_dev_conf', args=[str(self.id)]) No newline at end of file
@@ -1,48 +1,50
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'^experiment/(?P<id_exp>-?\d+)/new_dev_conf/(?P<id_dev>-?\d+)/$', 'apps.main.views.dev_conf_new', name='url_add_dev_conf'),
30 30 url(r'^dev_conf/$', 'apps.main.views.dev_confs', name='url_dev_confs'),
31 31 url(r'^dev_conf/(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_dev_conf'),
32 32 url(r'^dev_conf/(?P<id_conf>-?\d+)/edit/$', 'apps.main.views.dev_conf_edit', name='url_edit_dev_conf'),
33 33 url(r'^dev_conf/(?P<id_conf>-?\d+)/delete/$', 'apps.main.views.dev_conf_delete', name='url_delete_dev_conf'),
34 34
35 35 url(r'^dev_conf/(?P<id_conf>-?\d+)/write/$', 'apps.main.views.dev_conf_write', name='url_write_dev_conf'),
36 36 url(r'^dev_conf/(?P<id_conf>-?\d+)/read/$', 'apps.main.views.dev_conf_read', name='url_read_dev_conf'),
37 37 url(r'^dev_conf/(?P<id_conf>-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_dev_conf'),
38 38 url(r'^dev_conf/(?P<id_conf>-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_dev_conf'),
39 39 url(r'^dev_conf/(?P<id_conf>-?\d+)/start/$', 'apps.main.views.dev_conf_start', name='url_start_dev_conf'),
40 40 url(r'^dev_conf/(?P<id_conf>-?\d+)/stop/$', 'apps.main.views.dev_conf_stop', name='url_stop_dev_conf'),
41 41 url(r'^dev_conf/(?P<id_conf>-?\d+)/status/$', 'apps.main.views.dev_conf_status', name='url_status_dev_conf'),
42 42
43 43 url(r'^operation/$', 'apps.main.views.operation', name='url_operation'),
44 url(r'^operation/(?P<id_camp>-?\d+)/$', 'apps.main.views.operation', name='url_operation'),
44 45 url(r'^operation/search/$', 'apps.main.views.operation_search', name='url_operation_search'),
45 46 url(r'^operation/search/(?P<id_camp>-?\d+)/$', 'apps.main.views.operation_search', name='url_operation_search'),
46 url(r'^operation/(?P<id_camp>-?\d+)/$', 'apps.main.views.operation', name='url_operation'),
47 url(r'^operation/(?P<id_camp>-?\d+)/radar/(?P<id_radar>-?\d+)/play/$', 'apps.main.views.radar_play', name='url_radar_play'),
48 url(r'^operation/(?P<id_camp>-?\d+)/radar/(?P<id_radar>-?\d+)/stop/$', 'apps.main.views.radar_stop', name='url_radar_stop'),
47 49
48 50 )
@@ -1,892 +1,906
1 1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
2 from django.http import HttpResponseRedirect
3 from django.core.urlresolvers import reverse
2 4 from django.contrib import messages
3 5
4 6 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm
5 7 from .forms import OperationSearchForm
6 8 from apps.cgs.forms import CGSConfigurationForm
7 9 from apps.jars.forms import JARSConfigurationForm
8 10 from apps.usrp.forms import USRPConfigurationForm
9 11 from apps.abs.forms import ABSConfigurationForm
10 12 from apps.rc.forms import RCConfigurationForm
11 13 from apps.dds.forms import DDSConfigurationForm
12 14
13 from .models import Campaign, Experiment, Device, Configuration, Location#, RunningExperiment
15 from .models import Campaign, Experiment, Device, Configuration, Location, RunningExperiment
14 16 from apps.cgs.models import CGSConfiguration
15 17 from apps.jars.models import JARSConfiguration
16 18 from apps.usrp.models import USRPConfiguration
17 19 from apps.abs.models import ABSConfiguration
18 20 from apps.rc.models import RCConfiguration
19 21 from apps.dds.models import DDSConfiguration
20 22
21 23 # Create your views here.
22 24
23 25 CONF_FORMS = {
24 26 'rc': RCConfigurationForm,
25 27 'dds': DDSConfigurationForm,
26 28 'jars': JARSConfigurationForm,
27 29 'cgs': CGSConfigurationForm,
28 30 'abs': ABSConfigurationForm,
29 31 'usrp': USRPConfigurationForm,
30 32 }
31 33
32 34 CONF_MODELS = {
33 35 'rc': RCConfiguration,
34 36 'dds': DDSConfiguration,
35 37 'jars': JARSConfiguration,
36 38 'cgs': CGSConfiguration,
37 39 'abs': ABSConfiguration,
38 40 'usrp': USRPConfiguration,
39 41 }
40 42
41 43 def index(request):
42 44 kwargs = {}
43 45
44 46 return render(request, 'index.html', kwargs)
45 47
46 48 def locations(request):
47 49
48 50 locations = Location.objects.all().order_by('name')
49 51
50 52 keys = ['id', 'name', 'description']
51 53
52 54 kwargs = {}
53 55 kwargs['location_keys'] = keys[1:]
54 56 kwargs['locations'] = locations
55 57 kwargs['title'] = 'Location'
56 58 kwargs['suptitle'] = 'List'
57 59 kwargs['button'] = 'New Location'
58 60
59 61 return render(request, 'locations.html', kwargs)
60 62
61 63 def location(request, id_loc):
62 64
63 65 location = get_object_or_404(Location, pk=id_loc)
64 66
65 67 kwargs = {}
66 68 kwargs['location'] = location
67 69 kwargs['location_keys'] = ['name', 'description']
68 70
69 71 kwargs['title'] = 'Location'
70 72 kwargs['suptitle'] = 'Details'
71 73
72 74 return render(request, 'location.html', kwargs)
73 75
74 76 #def location_play(request, id_camp, id_loc):
75 77
76 78 # campaign = get_object_or_404(Campaign, pk=id_camp)
77 79 # print campaign
78 80 # location = get_object_or_404(Location, pk=id_loc)
79 81 # experiments = Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id)
80 82 # locations = Location.objects.filter(pk=id_loc)
81 83
82 84 # if request.method=='GET':
83 85 # form = OperationForm(initial={'campaign': campaign.id})
84 86
85 87 # kwargs = {}
86 88 #---Campaign
87 89 # kwargs['campaign'] = campaign
88 90 # kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
89 91 #---Experiment
90 92 # keys = ['id', 'name', 'start_time', 'end_time']
91 93 # kwargs['experiment_keys'] = keys[1:]
92 94 # kwargs['experiments'] = experiments
93 95 #---Radar
94 96 # kwargs['location'] = location
95 97 #---Else
96 98 # kwargs['title'] = 'Campaign'
97 99 # kwargs['suptitle'] = campaign.name
98 100 # kwargs['form'] = form
99 101 # kwargs['button'] = 'Search'
100 102
101 103 # return render(request, 'operation_play.html', kwargs)
102 104
103 105 def location_new(request):
104 106
105 107 if request.method == 'GET':
106 108 form = LocationForm()
107 109
108 110 if request.method == 'POST':
109 111 form = LocationForm(request.POST)
110 112
111 113 if form.is_valid():
112 114 form.save()
113 115 return redirect('url_locations')
114 116
115 117 kwargs = {}
116 118 kwargs['form'] = form
117 119 kwargs['title'] = 'Location'
118 120 kwargs['suptitle'] = 'New'
119 121 kwargs['button'] = 'Create'
120 122
121 123 return render(request, 'location_edit.html', kwargs)
122 124
123 125 def location_edit(request, id_loc):
124 126
125 127 location = get_object_or_404(Location, pk=id_loc)
126 128
127 129 if request.method=='GET':
128 130 form = LocationForm(instance=location)
129 131
130 132 if request.method=='POST':
131 133 form = LocationForm(request.POST, instance=location)
132 134
133 135 if form.is_valid():
134 136 form.save()
135 137 return redirect('url_locations')
136 138
137 139 kwargs = {}
138 140 kwargs['form'] = form
139 141 kwargs['title'] = 'Location'
140 142 kwargs['suptitle'] = 'Edit'
141 143 kwargs['button'] = 'Update'
142 144
143 145 return render(request, 'location_edit.html', kwargs)
144 146
145 147 def location_delete(request, id_loc):
146 148
147 149 location = get_object_or_404(Location, pk=id_loc)
148 150
149 151 if request.method=='POST':
150 152
151 153 if request.user.is_staff:
152 154 location.delete()
153 155 return redirect('url_locations')
154 156
155 157 return HttpResponse("Not enough permission to delete this object")
156 158
157 159 kwargs = {'object':location, 'loc_active':'active',
158 160 'url_cancel':'url_location', 'id_item':id_loc}
159 161
160 162 return render(request, 'item_delete.html', kwargs)
161 163
162 164 def devices(request):
163 165
164 166 devices = Device.objects.all().order_by('device_type__name')
165 167
166 168 # keys = ['id', 'device_type__name', 'name', 'ip_address']
167 169 keys = ['id', 'name', 'ip_address', 'port_address', 'device_type']
168 170
169 171 kwargs = {}
170 172 kwargs['device_keys'] = keys[1:]
171 173 kwargs['devices'] = devices#.values(*keys)
172 174 kwargs['title'] = 'Device'
173 175 kwargs['suptitle'] = 'List'
174 176 kwargs['button'] = 'New Device'
175 177
176 178 return render(request, 'devices.html', kwargs)
177 179
178 180 def device(request, id_dev):
179 181
180 182 device = get_object_or_404(Device, pk=id_dev)
181 183
182 184 kwargs = {}
183 185 kwargs['device'] = device
184 186 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
185 187
186 188 kwargs['title'] = 'Device'
187 189 kwargs['suptitle'] = 'Details'
188 190
189 191 return render(request, 'device.html', kwargs)
190 192
191 193 def device_new(request):
192 194
193 195 if request.method == 'GET':
194 196 form = DeviceForm()
195 197
196 198 if request.method == 'POST':
197 199 form = DeviceForm(request.POST)
198 200
199 201 if form.is_valid():
200 202 form.save()
201 203 return redirect('url_devices')
202 204
203 205 kwargs = {}
204 206 kwargs['form'] = form
205 207 kwargs['title'] = 'Device'
206 208 kwargs['suptitle'] = 'New'
207 209 kwargs['button'] = 'Create'
208 210
209 211 return render(request, 'device_edit.html', kwargs)
210 212
211 213 def device_edit(request, id_dev):
212 214
213 215 device = get_object_or_404(Device, pk=id_dev)
214 216
215 217 if request.method=='GET':
216 218 form = DeviceForm(instance=device)
217 219
218 220 if request.method=='POST':
219 221 form = DeviceForm(request.POST, instance=device)
220 222
221 223 if form.is_valid():
222 224 form.save()
223 225 return redirect('url_devices')
224 226
225 227 kwargs = {}
226 228 kwargs['form'] = form
227 229 kwargs['title'] = 'Device'
228 230 kwargs['suptitle'] = 'Edit'
229 231 kwargs['button'] = 'Update'
230 232
231 233 return render(request, 'device_edit.html', kwargs)
232 234
233 235 def device_delete(request, id_dev):
234 236
235 237 device = get_object_or_404(Device, pk=id_dev)
236 238
237 239 if request.method=='POST':
238 240
239 241 if request.user.is_staff:
240 242 device.delete()
241 243 return redirect('url_devices')
242 244
243 245 return HttpResponse("Not enough permission to delete this object")
244 246
245 247 kwargs = {'object':device, 'dev_active':'active',
246 248 'url_cancel':'url_device', 'id_item':id_dev}
247 249
248 250 return render(request, 'item_delete.html', kwargs)
249 251
250 252 def campaigns(request):
251 253
252 254 campaigns = Campaign.objects.all().order_by('start_date')
253 255
254 256 keys = ['id', 'name', 'start_date', 'end_date']
255 257
256 258 kwargs = {}
257 259 kwargs['campaign_keys'] = keys[1:]
258 260 kwargs['campaigns'] = campaigns#.values(*keys)
259 261 kwargs['title'] = 'Campaign'
260 262 kwargs['suptitle'] = 'List'
261 263 kwargs['button'] = 'New Campaign'
262 264
263 265 return render(request, 'campaigns.html', kwargs)
264 266
265 267 def campaign(request, id_camp):
266 268
267 269 campaign = get_object_or_404(Campaign, pk=id_camp)
268 270 experiments = Experiment.objects.filter(campaign=campaign)
269 271
270 272 form = CampaignForm(instance=campaign)
271 273
272 274 kwargs = {}
273 275 kwargs['campaign'] = campaign
274 276 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
275 277
276 278 keys = ['id', 'name', 'start_time', 'end_time']
277 279
278 280 kwargs['experiment_keys'] = keys[1:]
279 281 kwargs['experiments'] = experiments.values(*keys)
280 282
281 283 kwargs['title'] = 'Campaign'
282 284 kwargs['suptitle'] = 'Details'
283 285
284 286 kwargs['form'] = form
285 287 kwargs['button'] = 'Add Experiment'
286 288
287 289 return render(request, 'campaign.html', kwargs)
288 290
289 291 def campaign_new(request):
290 292
291 293 if request.method == 'GET':
292 294 form = CampaignForm()
293 295
294 296 if request.method == 'POST':
295 297 form = CampaignForm(request.POST)
296 298
297 299 if form.is_valid():
298 300 campaign = form.save()
299 301 return redirect('url_campaign', id_camp=campaign.id)
300 302
301 303 kwargs = {}
302 304 kwargs['form'] = form
303 305 kwargs['title'] = 'Campaign'
304 306 kwargs['suptitle'] = 'New'
305 307 kwargs['button'] = 'Create'
306 308
307 309 return render(request, 'campaign_edit.html', kwargs)
308 310
309 311 def campaign_edit(request, id_camp):
310 312
311 313 campaign = get_object_or_404(Campaign, pk=id_camp)
312 314
313 315 if request.method=='GET':
314 316 form = CampaignForm(instance=campaign)
315 317
316 318 if request.method=='POST':
317 319 form = CampaignForm(request.POST, instance=campaign)
318 320
319 321 if form.is_valid():
320 322 form.save()
321 323 return redirect('url_campaign', id_camp=id_camp)
322 324
323 325 kwargs = {}
324 326 kwargs['form'] = form
325 327 kwargs['title'] = 'Campaign'
326 328 kwargs['suptitle'] = 'Edit'
327 329 kwargs['button'] = 'Update'
328 330
329 331 return render(request, 'campaign_edit.html', kwargs)
330 332
331 333 def campaign_delete(request, id_camp):
332 334
333 335 campaign = get_object_or_404(Campaign, pk=id_camp)
334 336
335 337 if request.method=='POST':
336 338 if request.user.is_staff:
337 339 campaign.delete()
338 340 return redirect('url_campaigns')
339 341
340 342 return HttpResponse("Not enough permission to delete this object")
341 343
342 344 kwargs = {'object':campaign, 'camp_active':'active',
343 345 'url_cancel':'url_campaign', 'id_item':id_camp}
344 346
345 347 return render(request, 'item_delete.html', kwargs)
346 348
347 349 def experiments(request):
348 350
349 351 experiment_list = Experiment.objects.all().order_by('campaign')
350 352
351 353 keys = ['id', 'name', 'start_time', 'end_time', 'campaign']
352 354
353 355 kwargs = {}
354 356
355 357 kwargs['experiment_keys'] = keys[1:]
356 358 kwargs['experiments'] = experiment_list#.values(*keys)
357 359
358 360 kwargs['title'] = 'Experiment'
359 361 kwargs['suptitle'] = 'List'
360 362 kwargs['button'] = 'New Experiment'
361 363
362 364 return render(request, 'experiments.html', kwargs)
363 365
364 366 def experiment(request, id_exp):
365 367
366 368 experiment = get_object_or_404(Experiment, pk=id_exp)
367 369
368 370 experiments = Experiment.objects.filter(campaign=experiment.campaign)
369 371 configurations = Configuration.objects.filter(experiment=experiment, type=0)
370 372
371 373 kwargs = {}
372 374
373 375 exp_keys = ['id', 'campaign', 'location', 'name', 'start_time', 'end_time']
374 376 conf_keys = ['id', 'device__name', 'device__device_type', 'device__ip_address', 'device__port_address']
375 377
376 378 conf_labels = ['id', 'device__name', 'device_type', 'ip_address', 'port_address']
377 379
378 380 kwargs['experiment_keys'] = exp_keys[1:]
379 381 kwargs['experiment'] = experiment
380 382
381 383 kwargs['experiments'] = experiments.values(*exp_keys)
382 384
383 385 kwargs['configuration_labels'] = conf_labels[1:]
384 386 kwargs['configuration_keys'] = conf_keys[1:]
385 387 kwargs['configurations'] = configurations #.values(*conf_keys)
386 388
387 389 kwargs['title'] = 'Experiment'
388 390 kwargs['suptitle'] = 'Details'
389 391
390 392 kwargs['button'] = 'Add Configuration'
391 393
392 394 return render(request, 'experiment.html', kwargs)
393 395
394 396 def experiment_new(request, id_camp=None):
395 397
396 398 if request.method == 'GET':
397 399 form = ExperimentForm(initial={'campaign':id_camp})
398 400
399 401 if request.method == 'POST':
400 402 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
401 403
402 404 if form.is_valid():
403 405 experiment = form.save()
404 ##AGREGAR!
405 406 return redirect('url_experiment', id_exp=experiment.id)
406 407
407 408 kwargs = {}
408 409 kwargs['form'] = form
409 410 kwargs['title'] = 'Experiment'
410 411 kwargs['suptitle'] = 'New'
411 412 kwargs['button'] = 'Create'
412 413
413 414 return render(request, 'experiment_edit.html', kwargs)
414 415
415 416 def experiment_edit(request, id_exp):
416 417
417 418 experiment = get_object_or_404(Experiment, pk=id_exp)
418 419
419 420 if request.method == 'GET':
420 421 form = ExperimentForm(instance=experiment)
421 422
422 423 if request.method=='POST':
423 424 form = ExperimentForm(request.POST, instance=experiment)
424 425
425 426 if form.is_valid():
426 427 experiment = form.save()
427 428 return redirect('url_experiment', id_exp=experiment.id)
428 429
429 430 kwargs = {}
430 431 kwargs['form'] = form
431 432 kwargs['title'] = 'Experiment'
432 433 kwargs['suptitle'] = 'Edit'
433 434 kwargs['button'] = 'Update'
434 435
435 436 return render(request, 'experiment_edit.html', kwargs)
436 437
437 438 def experiment_delete(request, id_exp):
438 439
439 440 experiment = get_object_or_404(Experiment, pk=id_exp)
440 441
441 442 if request.method=='POST':
442 443 if request.user.is_staff:
443 444 id_camp = experiment.campaign.id
444 445 experiment.delete()
445 446 return redirect('url_campaign', id_camp=id_camp)
446 447
447 448 return HttpResponse("Not enough permission to delete this object")
448 449
449 450 kwargs = {'object':experiment, 'exp_active':'active',
450 451 'url_cancel':'url_experiment', 'id_item':id_exp}
451 452
452 453 return render(request, 'item_delete.html', kwargs)
453 454
454 455 def dev_confs(request):
455 456
456 457 configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
457 458
458 459 # keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
459 460
460 461 keys = ['id', 'device', 'experiment', 'type', 'programmed_date']
461 462
462 463 kwargs = {}
463 464
464 465 kwargs['configuration_keys'] = keys[1:]
465 466 kwargs['configurations'] = configurations#.values(*keys)
466 467
467 468 kwargs['title'] = 'Configuration'
468 469 kwargs['suptitle'] = 'List'
469 470 kwargs['button'] = 'New Configuration'
470 471
471 472 return render(request, 'dev_confs.html', kwargs)
472 473
473 474 def dev_conf(request, id_conf):
474 475
475 476 conf = get_object_or_404(Configuration, pk=id_conf)
476 477
477 478 return redirect(conf.get_absolute_url())
478 479
479 480
480 481 def dev_conf_new(request, id_exp=0, id_dev=0):
481 482
482 483 initial = {}
483 484
484 485 if id_exp==0:
485 486 initial['experiment'] = id_exp
486 487
487 488 if id_dev<>0:
488 489 initial['device'] = id_dev
489 490
490 491 if request.method == 'GET':
491 492 if id_dev==0:
492 493 form = ConfigurationForm(initial=initial)
493 494 else:
494 495 device = Device.objects.get(pk=id_dev)
495 496 DevConfForm = CONF_FORMS[device.device_type.name]
496 497
497 498 form = DevConfForm(initial=initial)
498 499
499 500 if request.method == 'POST':
500 501
501 502 device = Device.objects.get(pk=request.POST['device'])
502 503 DevConfForm = CONF_FORMS[device.device_type.name]
503 504
504 505 form = DevConfForm(request.POST)
505 506
506 507 if form.is_valid():
507 508 dev_conf = form.save()
508 509
509 510 return redirect('url_dev_confs')
510 511
511 512 kwargs = {}
512 513 kwargs['id_exp'] = id_exp
513 514 kwargs['form'] = form
514 515 kwargs['title'] = 'Configuration'
515 516 kwargs['suptitle'] = 'New'
516 517 kwargs['button'] = 'Create'
517 518
518 519 return render(request, 'dev_conf_edit.html', kwargs)
519 520
520 521 def dev_conf_edit(request, id_conf):
521 522
522 523 conf = get_object_or_404(Configuration, pk=id_conf)
523 524
524 525 DevConfModel = CONF_MODELS[conf.device.device_type.name]
525 526 DevConfForm = CONF_FORMS[conf.device.device_type.name]
526 527
527 528 dev_conf = DevConfModel.objects.get(pk=id_conf)
528 529
529 530 if request.method=='GET':
530 531 form = DevConfForm(instance=dev_conf)
531 532
532 533 if request.method=='POST':
533 534 form = DevConfForm(request.POST, instance=dev_conf)
534 535
535 536 if form.is_valid():
536 537 form.save()
537 538 return redirect('url_dev_conf', id_conf=id_conf)
538 539
539 540 kwargs = {}
540 541 kwargs['form'] = form
541 542 kwargs['title'] = 'Device Configuration'
542 543 kwargs['suptitle'] = 'Edit'
543 544 kwargs['button'] = 'Update'
544 545
545 546 ###### SIDEBAR ######
546 547 kwargs.update(sidebar(conf))
547 548
548 549 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
549 550
550 551 def dev_conf_start(request, id_conf):
551 552
552 553 conf = get_object_or_404(Configuration, pk=id_conf)
553 554
554 555 DevConfModel = CONF_MODELS[conf.device.device_type.name]
555 556
556 557 conf = DevConfModel.objects.get(pk=id_conf)
557 558
558 559 if conf.start_device():
559 560 messages.success(request, conf.message)
560 561 else:
561 562 messages.error(request, conf.message)
562 563
563 564 conf.status_device()
564 565
565 566 return redirect(conf.get_absolute_url())
566 567
567 568 def dev_conf_stop(request, id_conf):
568 569
569 570 conf = get_object_or_404(Configuration, pk=id_conf)
570 571
571 572 DevConfModel = CONF_MODELS[conf.device.device_type.name]
572 573
573 574 conf = DevConfModel.objects.get(pk=id_conf)
574 575
575 576 if conf.stop_device():
576 577 messages.success(request, conf.message)
577 578 else:
578 579 messages.error(request, conf.message)
579 580
580 581 conf.status_device()
581 582
582 583 return redirect(conf.get_absolute_url())
583 584
584 585 def dev_conf_status(request, id_conf):
585 586
586 587 conf = get_object_or_404(Configuration, pk=id_conf)
587 588
588 589 DevConfModel = CONF_MODELS[conf.device.device_type.name]
589 590
590 591 conf = DevConfModel.objects.get(pk=id_conf)
591 592
592 593 if conf.status_device():
593 594 messages.success(request, conf.message)
594 595 else:
595 596 messages.error(request, conf.message)
596 597
597 598 return redirect(conf.get_absolute_url())
598 599
599 600
600 601 def dev_conf_write(request, id_conf):
601 602
602 603 conf = get_object_or_404(Configuration, pk=id_conf)
603 604
604 605 DevConfModel = CONF_MODELS[conf.device.device_type.name]
605 606
606 607 conf = DevConfModel.objects.get(pk=id_conf)
607 608
608 609 answer = conf.write_device()
609 610 conf.status_device()
610 611
611 612 if answer:
612 613 messages.success(request, conf.message)
613 614
614 615 #Creating a historical configuration
615 616 conf.pk = None
616 617 conf.id = None
617 618 conf.type = 1
618 619 conf.template = 0
619 620 conf.save()
620 621
621 622 #Original configuration
622 623 conf = DevConfModel.objects.get(pk=id_conf)
623 624 else:
624 625 messages.error(request, conf.message)
625 626
626 627 return redirect(conf.get_absolute_url())
627 628
628 629 def dev_conf_read(request, id_conf):
629 630
630 631 conf = get_object_or_404(Configuration, pk=id_conf)
631 632
632 633 DevConfModel = CONF_MODELS[conf.device.device_type.name]
633 634 DevConfForm = CONF_FORMS[conf.device.device_type.name]
634 635
635 636 conf = DevConfModel.objects.get(pk=id_conf)
636 637
637 638 if request.method=='GET':
638 639
639 640 parms = conf.read_device()
640 641 conf.status_device()
641 642
642 643 if not parms:
643 644 messages.error(request, conf.message)
644 645 return redirect(conf.get_absolute_url())
645 646
646 647 form = DevConfForm(initial=parms, instance=conf)
647 648
648 649 if request.method=='POST':
649 650 form = DevConfForm(request.POST, instance=conf)
650 651
651 652 if form.is_valid():
652 653 form.save()
653 654 return redirect(conf.get_absolute_url())
654 655
655 656 messages.error(request, "Parameters could not be saved")
656 657
657 658 kwargs = {}
658 659 kwargs['id_dev'] = conf.id
659 660 kwargs['form'] = form
660 661 kwargs['title'] = 'Device Configuration'
661 662 kwargs['suptitle'] = 'Parameters read from device'
662 663 kwargs['button'] = 'Save'
663 664
664 665 ###### SIDEBAR ######
665 666 kwargs.update(sidebar(conf))
666 667
667 668 return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
668 669
669 670 def dev_conf_import(request, id_conf):
670 671
671 672 conf = get_object_or_404(Configuration, pk=id_conf)
672 673
673 674 DevConfModel = CONF_MODELS[conf.device.device_type.name]
674 675 DevConfForm = CONF_FORMS[conf.device.device_type.name]
675 676
676 677 conf = DevConfModel.objects.get(pk=id_conf)
677 678
678 679 if request.method == 'GET':
679 680 file_form = UploadFileForm()
680 681
681 682 if request.method == 'POST':
682 683 file_form = UploadFileForm(request.POST, request.FILES)
683 684
684 685 if file_form.is_valid():
685 686
686 687 parms = conf.import_from_file(request.FILES['file'])
687 688
688 689 if parms:
689 690 messages.success(request, "Parameters imported from: '%s'." %request.FILES['file'].name)
690 691 print parms
691 692 form = DevConfForm(initial=parms, instance=conf)
692 693
693 694 kwargs = {}
694 695 kwargs['id_dev'] = conf.id
695 696 kwargs['form'] = form
696 697 kwargs['title'] = 'Device Configuration'
697 698 kwargs['suptitle'] = 'Parameters imported'
698 699 kwargs['button'] = 'Save'
699 700 kwargs['action'] = conf.get_absolute_url_edit()
700 701 kwargs['previous'] = conf.get_absolute_url()
701 702
702 703 ###### SIDEBAR ######
703 704 kwargs.update(sidebar(conf))
704 705
705 706 return render(request, '%s_conf_edit.html' % conf.device.device_type.name, kwargs)
706 707
707 708 messages.error(request, "Could not import parameters from file")
708 709
709 710 kwargs = {}
710 711 kwargs['id_dev'] = conf.id
711 712 kwargs['title'] = 'Device Configuration'
712 713 kwargs['form'] = file_form
713 714 kwargs['suptitle'] = 'Importing file'
714 715 kwargs['button'] = 'Import'
715 716
716 717 kwargs.update(sidebar(conf))
717 718
718 719 return render(request, 'dev_conf_import.html', kwargs)
719 720
720 721 def dev_conf_export(request, id_conf):
721 722
722 723 conf = get_object_or_404(Configuration, pk=id_conf)
723 724
724 725 DevConfModel = CONF_MODELS[conf.device.device_type.name]
725 726
726 727 conf = DevConfModel.objects.get(pk=id_conf)
727 728
728 729 if request.method == 'GET':
729 730 file_form = DownloadFileForm(conf.device.device_type.name)
730 731
731 732 if request.method == 'POST':
732 733 file_form = DownloadFileForm(conf.device.device_type.name, request.POST)
733 734
734 735 if file_form.is_valid():
735 736 fields = conf.export_to_file(format = file_form.cleaned_data['format'])
736 737
737 738 response = HttpResponse(content_type=fields['content_type'])
738 739 response['Content-Disposition'] = 'attachment; filename="%s"' %fields['filename']
739 740 response.write(fields['content'])
740 741
741 742 return response
742 743
743 744 messages.error(request, "Could not export parameters")
744 745
745 746 kwargs = {}
746 747 kwargs['id_dev'] = conf.id
747 748 kwargs['title'] = 'Device Configuration'
748 749 kwargs['form'] = file_form
749 750 kwargs['suptitle'] = 'Exporting file'
750 751 kwargs['button'] = 'Export'
751 752
752 753 return render(request, 'dev_conf_export.html', kwargs)
753 754
754 755 def dev_conf_delete(request, id_conf):
755 756
756 757 conf = get_object_or_404(Configuration, pk=id_conf)
757 758
758 759 if request.method=='POST':
759 760 if request.user.is_staff:
760 761 id_exp = conf.experiment.id
761 762 conf.delete()
762 763 return redirect('url_experiment', id_exp=id_exp)
763 764
764 765 return HttpResponse("Not enough permission to delete this object")
765 766
766 767 kwargs = {'object':conf, 'conf_active':'active',
767 768 'url_cancel':'url_dev_conf', 'id_item':id_conf}
768 769
769 770 ###### SIDEBAR ######
770 771 kwargs.update(sidebar(conf))
771 772
772 773 return render(request, 'item_delete.html', kwargs)
773 774
774 775 def sidebar(conf):
775 776
776 777 kwargs = {}
777 778
778 779 if conf.experiment:
779 780 experiments = Experiment.objects.filter(campaign=conf.experiment.campaign)
780 781 configurations = Configuration.objects.filter(experiment=conf.experiment, type=0)
781 782 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
782 783 kwargs['experiment_keys'] = exp_keys[1:]
783 784 kwargs['experiments'] = experiments.values(*exp_keys)
784 785 conf_keys = ['id', 'device']
785 786 kwargs['configuration_keys'] = conf_keys[1:]
786 787 kwargs['configurations'] = configurations #.values(*conf_keys)
787 788
788 789 return kwargs
789 790
790 791
791 792 def operation(request, id_camp=None):
792 793
793 794 if not id_camp:
794 795 campaigns = Campaign.objects.all().order_by('-start_date')
795 796
796 797 if not campaigns:
797 798 kwargs = {}
798 799 kwargs['title'] = 'No Campaigns'
799 800 kwargs['suptitle'] = 'Empty'
800 801 return render(request, 'operation.html', kwargs)
801 802
802 803 id_camp = campaigns[0].id
803 804
804 805 campaign = get_object_or_404(Campaign, pk = id_camp)
805 806
806 807 if request.method=='GET':
807 808 form = OperationForm(initial={'campaign': campaign.id}, length = 5)
808 809
809 810 if request.method=='POST':
810 811 form = OperationForm(request.POST, initial={'campaign':campaign.id}, length = 5)
811 812
812 813 if form.is_valid():
813 814 return redirect('url_operation', id_camp=campaign.id)
814 815 #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
815 816 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
817 for exs in experiments:
818 exs.get_status()
816 819 locations= Location.objects.filter(experiment=experiments).distinct()
817 820 #experiments = [Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id) for location in locations]
818 821 kwargs = {}
819 822 #---Campaign
820 823 kwargs['campaign'] = campaign
821 824 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
822 825 #---Experiment
823 826 keys = ['id', 'name', 'start_time', 'end_time', 'status']
824 827 kwargs['experiment_keys'] = keys[1:]
825 828 kwargs['experiments'] = experiments
826 829 #---Radar
827 830 kwargs['locations'] = locations
828 831 #---Else
829 832 kwargs['title'] = 'Campaign'
830 833 kwargs['suptitle'] = campaign.name
831 834 kwargs['form'] = form
832 835 kwargs['button'] = 'Search'
833 836 kwargs['details'] = True
834 837 kwargs['search_button'] = True
835 838
836 839 return render(request, 'operation.html', kwargs)
837 840
838 def operation_search(request, id_camp=None, location_play = None):
841 def operation_search(request, id_camp=None):
839 842
840 843
841 844 if not id_camp:
842 845 campaigns = Campaign.objects.all().order_by('-start_date')
843 form = OperationSearchForm()
844 846
845 847 if not campaigns:
846 848 return render(request, 'operation.html', {})
847 849
848 850 id_camp = campaigns[0].id
849 campaign = get_object_or_404(Campaign, pk = id_camp)
850
851 kwargs = {}
852 kwargs['title'] = 'All Campaigns'
853 kwargs['form'] = form
854 kwargs['details'] = True
855 return render(request, 'operation.html', kwargs)
851 campaign = get_object_or_404(Campaign, pk = id_camp)
856 852
857 else:
858 campaign = get_object_or_404(Campaign, pk = id_camp)
859 #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
860 #experiments = Experiment.objects.filter(campaign__pk=campaign.id)
861 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
862 locations= Location.objects.filter(experiment=experiments).distinct()
863 #experiments = [Experiment.objects.filter(location__pk=location.id).filter(campaign__pk=campaign.id) for location in locations]
853 if request.method=='GET':
864 854 form = OperationSearchForm(initial={'campaign': campaign.id})
865 855
866 kwargs = {}
867 #---Campaign
868 kwargs['campaign'] = campaign
869 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
870 #---Experiment
871 keys = ['id', 'name', 'start_time', 'end_time']
872 kwargs['experiment_keys'] = keys[1:]
873 kwargs['experiments'] = experiments
874 #---Radar
875 kwargs['locations'] = locations
876 #---Else
877 kwargs['title'] = 'Campaign'
878 kwargs['suptitle'] = campaign.name
879 kwargs['form'] = form
880 kwargs['button'] = 'Select'
881 kwargs['details'] = True
882 kwargs['search_button'] = False
883
884
885 856 if request.method=='POST':
886 857 form = OperationSearchForm(request.POST, initial={'campaign':campaign.id})
887 858
888 859 if form.is_valid():
889 return redirect('operation.html', id_camp=campaign.id)
860 return redirect('url_operation', id_camp=campaign.id)
890 861
862 #locations = Location.objects.filter(experiment__campaign__pk = campaign.id).distinct()
863 experiments = Experiment.objects.filter(campaign__pk=campaign.id)
864 for exs in experiments:
865 exs.get_status()
866 locations= Location.objects.filter(experiment=experiments).distinct()
867 form = OperationSearchForm(initial={'campaign': campaign.id})
868
869 kwargs = {}
870 #---Campaign
871 kwargs['campaign'] = campaign
872 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
873 #---Experiment
874 keys = ['id', 'name', 'start_time', 'end_time', 'status']
875 kwargs['experiment_keys'] = keys[1:]
876 kwargs['experiments'] = experiments
877 #---Radar
878 kwargs['locations'] = locations
879 #---Else
880 kwargs['title'] = 'Campaign'
881 kwargs['suptitle'] = campaign.name
882 kwargs['form'] = form
883 kwargs['button'] = 'Select'
884 kwargs['details'] = True
885 kwargs['search_button'] = False
886
887 return render(request, 'operation.html', kwargs)
888
889
890 def radar_play(request, id_camp, id_radar):
891 891
892 return render(request, 'operation.html', kwargs) No newline at end of file
892 route = request.META['HTTP_REFERER']
893 route = str(route)
894 if 'search' in route:
895 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
896 else:
897 return HttpResponseRedirect(reverse('url_operation', args=[id_camp]))
898
899 def radar_stop(request, id_camp, id_radar):
900
901 route = request.META['HTTP_REFERER']
902 route = str(route)
903 if 'search' in route:
904 return HttpResponseRedirect(reverse('url_operation_search', args=[id_camp]))
905 else:
906 return HttpResponseRedirect(reverse('url_operation', args=[id_camp])) No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now