##// END OF EJS Templates
Location model added to RadarSys...
Miguel Urco -
r41:4fd88f104093
parent child
Show More
@@ -0,0 +1,34
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5
6 {% block loc-active %}active{% endblock %}
7
8 {% block content-title %}{{title}}{% endblock %}
9 {% block content-suptitle %}{{suptitle}}{% endblock %}
10
11 {% block content %}
12 <table class="table table-bordered">
13 {% for key in location_keys %}
14 <tr><th>{{key|title}}</th><td>{{location|attr:key}}</td></tr>
15 {% endfor %}
16 </table>
17 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_edit">Edit</button>
18 <br></br>
19 <br></br>
20 {% endblock %}
21
22 {% block sidebar%}
23 {% include "sidebar_devices.html" %}
24 {% endblock %}
25
26 {% block extra-js%}
27 <script type="text/javascript">
28
29 $("#bt_edit").click(function() {
30 document.location = "{% url 'url_edit_location' location.id%}";
31 });
32
33 </script>
34 {% endblock %} No newline at end of file
@@ -0,0 +1,29
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8
9 {% block loc-active %}active{% endblock %}
10
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 <form class="form" method="post" action="">
16 {% csrf_token %}
17 {% bootstrap_form form layout='horizontal' size='medium' %}
18 <div style="clear: both;"></div>
19 <br>
20 <button type="submit" class="btn btn-primary pull-right">{{button}}</button>
21 </form>
22 {% endblock %}
23
24 {% block sidebar%}
25 {% include "sidebar_devices.html" %}
26 {% endblock %}
27
28 {% block extra-js%}
29 {% endblock %} No newline at end of file
@@ -0,0 +1,47
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5
6 {% block loc-active %}active{% endblock %}
7
8 {% block content-title %}{{title}}{% endblock %}
9 {% block content-suptitle %}{{suptitle}}{% endblock %}
10
11 {% block content %}
12 <table class="table table-hover">
13 <tr>
14 <th>#</th>
15 {% for key in location_keys %}
16 <th>{{ key|title }}</th>
17 {% endfor%}
18 </tr>
19 {% for location in locations %}
20 <tr class="clickable-row" data-href="{% url 'url_location' location.id %}">
21 <td>{{ forloop.counter }}</td>
22 {% for key in location_keys %}
23 <td>{{ location|attr:key }}</td>
24 {% endfor %}
25 </tr>
26 {% endfor %}
27 </table>
28 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
29 {% endblock %}
30
31 {% block sidebar%}
32 {% include "sidebar_devices.html" %}
33 {% endblock %}
34
35 {% block extra-js%}
36 <script type="text/javascript">
37
38 $("#bt_add").click(function() {
39 document.location = "{% url 'url_add_location' %}";
40 });
41
42 $(".clickable-row").click(function() {
43 document.location = $(this).data("href");
44 });
45
46 </script>
47 {% endblock %} No newline at end of file
@@ -1,60 +1,64
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
4 from .models import DeviceType, Device, Experiment, Campaign, Configuration, Location
5
5
6 def add_empty_choice(choices, pos=0, label='-----'):
6 def add_empty_choice(choices, pos=0, label='-----'):
7 if len(choices)>0:
7 if len(choices)>0:
8 choices = list(choices)
8 choices = list(choices)
9 choices.insert(0, (0, label))
9 choices.insert(0, (0, label))
10 return choices
10 return choices
11 else:
11 else:
12 return [(0, label)]
12 return [(0, label)]
13
13
14 class DatepickerWidget(forms.widgets.TextInput):
14 class DatepickerWidget(forms.widgets.TextInput):
15 def render(self, name, value, attrs=None):
15 def render(self, name, value, attrs=None):
16 input_html = super(DatepickerWidget, self).render(name, value, attrs)
16 input_html = super(DatepickerWidget, self).render(name, value, attrs)
17 html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>'
17 html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>'
18 return mark_safe(html)
18 return mark_safe(html)
19
19
20 class TimepickerWidget(forms.widgets.TextInput):
20 class TimepickerWidget(forms.widgets.TextInput):
21 def render(self, name, value, attrs=None):
21 def render(self, name, value, attrs=None):
22 input_html = super(TimepickerWidget, self).render(name, value, attrs)
22 input_html = super(TimepickerWidget, self).render(name, value, attrs)
23 html = '<div class="input-group time">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span></div>'
23 html = '<div class="input-group time">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span></div>'
24 return mark_safe(html)
24 return mark_safe(html)
25
25
26 class CampaignForm(forms.ModelForm):
26 class CampaignForm(forms.ModelForm):
27 def __init__(self, *args, **kwargs):
27 def __init__(self, *args, **kwargs):
28 super(CampaignForm, self).__init__(*args, **kwargs)
28 super(CampaignForm, self).__init__(*args, **kwargs)
29 self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs)
29 self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs)
30 self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs)
30 self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs)
31
31
32 class Meta:
32 class Meta:
33 model = Campaign
33 model = Campaign
34 fields = ['name', 'start_date', 'end_date', 'tags', 'description', 'template']
34 fields = ['name', 'start_date', 'end_date', 'tags', 'description', 'template']
35
35
36 class ExperimentForm(forms.ModelForm):
36 class ExperimentForm(forms.ModelForm):
37 def __init__(self, *args, **kwargs):
37 def __init__(self, *args, **kwargs):
38 super(ExperimentForm, self).__init__(*args, **kwargs)
38 super(ExperimentForm, self).__init__(*args, **kwargs)
39 self.fields['start_time'].widget = TimepickerWidget(self.fields['start_time'].widget.attrs)
39 self.fields['start_time'].widget = TimepickerWidget(self.fields['start_time'].widget.attrs)
40 self.fields['end_time'].widget = TimepickerWidget(self.fields['end_time'].widget.attrs)
40 self.fields['end_time'].widget = TimepickerWidget(self.fields['end_time'].widget.attrs)
41
41
42 self.fields['campaign'].widget.attrs['readonly'] = True
42 self.fields['campaign'].widget.attrs['readonly'] = True
43
43
44 class Meta:
44 class Meta:
45 model = Experiment
45 model = Experiment
46 fields = ['campaign', 'name', 'start_time', 'end_time']
46 fields = ['campaign', 'name', 'start_time', 'end_time']
47
47
48 class LocationForm(forms.ModelForm):
49 class Meta:
50 model = Location
51 exclude = ['']
52
48 class DeviceForm(forms.ModelForm):
53 class DeviceForm(forms.ModelForm):
49 class Meta:
54 class Meta:
50 model = Device
55 model = Device
51 exclude = ['status']
56 exclude = ['status']
52
57
53 class ConfigurationForm(forms.ModelForm):
58 class ConfigurationForm(forms.ModelForm):
54 class Meta:
59 class Meta:
55 model = Configuration
60 model = Configuration
56 fields = ['experiment', 'device']
61 fields = ['experiment', 'device']
57
62
58 class DeviceTypeForm(forms.Form):
63 class DeviceTypeForm(forms.Form):
59 device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name')))
64 device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name')))
60
@@ -1,128 +1,142
1 from itertools import chain
2 from django.db import models
1 from django.db import models
3 from polymorphic import PolymorphicModel
2 from polymorphic import PolymorphicModel
4
3
5 from django.core.urlresolvers import reverse
4 from django.core.urlresolvers import reverse
6
5
6 CONF_STATES = (
7 (0, 'Disconnected'),
8 (1, 'Connected'),
9 (1, 'Running'),
10 )
11
7 CONF_TYPES = (
12 CONF_TYPES = (
8 (0, 'Active'),
13 (0, 'Active'),
9 (1, 'Historical'),
14 (1, 'Historical'),
10 )
15 )
11
16
12 DEV_STATES = (
17 DEV_STATES = (
13 (0, 'No connected'),
18 (0, 'No connected'),
14 (1, 'Connected'),
19 (1, 'Connected'),
15 (2, 'Configured'),
20 (2, 'Configured'),
16 (3, 'Running'),
21 (3, 'Running'),
17 )
22 )
18
23
19 DEV_TYPES = (
24 DEV_TYPES = (
20 ('', 'Select a device type'),
25 ('', 'Select a device type'),
21 ('rc', 'Radar Controller'),
26 ('rc', 'Radar Controller'),
22 ('dds', 'Direct Digital Synthesizer'),
27 ('dds', 'Direct Digital Synthesizer'),
23 ('jars', 'Jicamarca Radar Acquisition System'),
28 ('jars', 'Jicamarca Radar Acquisition System'),
24 ('usrp', 'Universal Software Radio Peripheral'),
29 ('usrp', 'Universal Software Radio Peripheral'),
25 ('cgs', 'Clock Generator System'),
30 ('cgs', 'Clock Generator System'),
26 ('abs', 'Automatic Beam Switching'),
31 ('abs', 'Automatic Beam Switching'),
27 )
32 )
28
33
29 # Create your models here.
34 # Create your models here.
30
35
36 class Location(models.Model):
37
38 name = models.CharField(max_length = 30)
39 description = models.TextField(blank=True, null=True)
40
41 class Meta:
42 db_table = 'db_location'
43
44 def __unicode__(self):
45 return u'%s' % self.name
46
31 class DeviceType(models.Model):
47 class DeviceType(models.Model):
32
48
33 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
49 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
34
35 description = models.TextField(blank=True, null=True)
50 description = models.TextField(blank=True, null=True)
36
51
37 # info = models.TextField(blank=True, null=True)
38 # status = models.PositiveSmallIntegerField(default=1, choices=STATES)
39
40 class Meta:
52 class Meta:
41 db_table = 'db_device_types'
53 db_table = 'db_device_types'
42
54
43 def __unicode__(self):
55 def __unicode__(self):
44 return u'%s' % self.get_name_display()
56 return u'%s' % self.get_name_display()
45
57
46 class Device(models.Model):
58 class Device(models.Model):
47
59
48 device_type = models.ForeignKey(DeviceType)
60 device_type = models.ForeignKey(DeviceType)
61 # location = models.ForeignKey(Location)
62
49 name = models.CharField(max_length=40, default='')
63 name = models.CharField(max_length=40, default='')
50 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
64 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
51 port_address = models.PositiveSmallIntegerField(default=2000)
65 port_address = models.PositiveSmallIntegerField(default=2000)
52 description = models.TextField(blank=True, null=True)
66 description = models.TextField(blank=True, null=True)
53 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
67 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
54
68
55 # serial_number = models.CharField(max_length=40, default='')
56 # mac_address = models.CharField(max_length = 20, null=True, blank=True)
57
58
59 class Meta:
69 class Meta:
60 db_table = 'db_devices'
70 db_table = 'db_devices'
61
71
62 def __unicode__(self):
72 def __unicode__(self):
63 return u'%s | %s' % (self.name, self.ip_address)
73 return u'%s | %s' % (self.name, self.ip_address)
64
74
65 class Campaign(models.Model):
75 class Campaign(models.Model):
66
76
67 name = models.CharField(max_length=40, unique=True)
77 name = models.CharField(max_length=40, unique=True)
68 start_date = models.DateTimeField(blank=True, null=True)
78 start_date = models.DateTimeField(blank=True, null=True)
69 end_date = models.DateTimeField(blank=True, null=True)
79 end_date = models.DateTimeField(blank=True, null=True)
70 tags = models.CharField(max_length=40)
80 tags = models.CharField(max_length=40)
71 description = models.TextField(blank=True, null=True)
81 description = models.TextField(blank=True, null=True)
72 template = models.BooleanField(default=False)
82 template = models.BooleanField(default=False)
73
83
74 class Meta:
84 class Meta:
75 db_table = 'db_campaigns'
85 db_table = 'db_campaigns'
76
86
77 def __unicode__(self):
87 def __unicode__(self):
78 return u'%s' % (self.name)
88 return u'%s' % (self.name)
79
89
80 class Experiment(models.Model):
90 class Experiment(models.Model):
81
91
82 campaign = models.ForeignKey(Campaign)
92 campaign = models.ForeignKey(Campaign)
83 name = models.CharField(max_length=40, default='')
93 name = models.CharField(max_length=40, default='')
84 start_time = models.TimeField(default='00:00:00')
94 start_time = models.TimeField(default='00:00:00')
85 end_time = models.TimeField(default='23:59:59')
95 end_time = models.TimeField(default='23:59:59')
86
96
87 class Meta:
97 class Meta:
88 db_table = 'db_experiments'
98 db_table = 'db_experiments'
89
99
90 def __unicode__(self):
100 def __unicode__(self):
91 return u'[%s]: %s' % (self.campaign.name, self.name)
101 return u'[%s]: %s' % (self.campaign.name, self.name)
92
102
93 class Configuration(PolymorphicModel):
103 class Configuration(PolymorphicModel):
94
104
95 experiment = models.ForeignKey(Experiment)
105 experiment = models.ForeignKey(Experiment)
96 device = models.ForeignKey(Device)
106 device = models.ForeignKey(Device)
107
108 status = models.PositiveSmallIntegerField(default=0, choices=CONF_STATES)
97 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
109 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
98
110
111 name = models.CharField(max_length=40, default='')
112
99 created_date = models.DateTimeField(auto_now_add=True)
113 created_date = models.DateTimeField(auto_now_add=True)
100 programmed_date = models.DateTimeField(auto_now=True)
114 programmed_date = models.DateTimeField(auto_now=True)
101
115
102 parameters = models.TextField(default='{}')
116 parameters = models.TextField(default='{}')
103
117
104 class Meta:
118 class Meta:
105 db_table = 'db_configurations'
119 db_table = 'db_configurations'
106
120
107 def __unicode__(self):
121 def __unicode__(self):
108 return u'[%s - %s]: %s' % (self.experiment.campaign.name,
122 return u'[%s - %s]: %s' % (self.experiment.campaign.name,
109 self.experiment.name,
123 self.experiment.name,
110 self.device.name)
124 self.device.name)
111 def get_absolute_url(self):
125 def get_absolute_url(self):
112
126
113 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
127 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
114
128
115 def get_absolute_url_edit(self):
129 def get_absolute_url_edit(self):
116 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
130 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
117
131
118 def get_absolute_url_import(self):
132 def get_absolute_url_import(self):
119 return reverse('url_import_%s_conf' % self.device.device_type.name, args=[str(self.id)])
133 return reverse('url_import_%s_conf' % self.device.device_type.name, args=[str(self.id)])
120
134
121 def get_absolute_url_export(self):
135 def get_absolute_url_export(self):
122 return reverse('url_export_%s_conf' % self.device.device_type.name, args=[str(self.id)])
136 return reverse('url_export_%s_conf' % self.device.device_type.name, args=[str(self.id)])
123
137
124 def get_absolute_url_write(self):
138 def get_absolute_url_write(self):
125 return reverse('url_write_%s_conf' % self.device.device_type.name, args=[str(self.id)])
139 return reverse('url_write_%s_conf' % self.device.device_type.name, args=[str(self.id)])
126
140
127 def get_absolute_url_read(self):
141 def get_absolute_url_read(self):
128 return reverse('url_read_%s_conf' % self.device.device_type.name, args=[str(self.id)]) No newline at end of file
142 return reverse('url_read_%s_conf' % self.device.device_type.name, args=[str(self.id)])
@@ -1,126 +1,128
1 <!DOCTYPE html>
1 <!DOCTYPE html>
2 {% load static %}
2 {% load static %}
3 <html lang="en">
3 <html lang="en">
4 <head>
4 <head>
5 <meta charset="utf-8">
5 <meta charset="utf-8">
6 <title>{% block title %}Jicamarca Integrated Radar System:::::{% endblock %}</title>
6 <title>{% block title %}Jicamarca Integrated Radar System:::::{% endblock %}</title>
7 <meta name="description" content="">
7 <meta name="description" content="">
8 <meta name="author" content="">
8 <meta name="author" content="">
9 <meta name="viewport" content="width=device-width, initial-scale=1">
9 <meta name="viewport" content="width=device-width, initial-scale=1">
10 {# bootstrap_css #}
10 {# bootstrap_css #}
11 <link href="{% static 'css/bootstrap-flatly.min.css' %}" media="all" rel="stylesheet">
11 <link href="{% static 'css/bootstrap-flatly.min.css' %}" media="all" rel="stylesheet">
12 <style type="text/css">
12 <style type="text/css">
13 body {padding-top: 60px}
13 body {padding-top: 60px}
14 .logo {padding-top: 5px; height: 50px}
14 .logo {padding-top: 5px; height: 50px}
15 .clickable-row {cursor: pointer;}
15 .clickable-row {cursor: pointer;}
16 </style>
16 </style>
17 <!--[if lt IE 9]>
17 <!--[if lt IE 9]>
18 <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
18 <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
19 <![endif]-->
19 <![endif]-->
20 {% block extra-head %}
20 {% block extra-head %}
21 {% endblock %}
21 {% endblock %}
22 </head>
22 </head>
23
23
24 <body>
24 <body>
25
25
26 {% block main_menu %}
26 {% block main_menu %}
27 <nav class="navbar navbar-default navbar-fixed-top" role="banner">
27 <nav class="navbar navbar-default navbar-fixed-top" role="banner">
28 <div class="container-fluid">
28 <div class="container-fluid">
29 <div class="navbar-header">
29 <div class="navbar-header">
30 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navigationbar">
30 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navigationbar">
31 <span class="sr-only">Toggle navigation</span>
31 <span class="sr-only">Toggle navigation</span>
32 <span class="icon-bar"></span>
32 <span class="icon-bar"></span>
33 <span class="icon-bar"></span>
33 <span class="icon-bar"></span>
34 <span class="icon-bar"></span>
34 <span class="icon-bar"></span>
35 </button>
35 </button>
36 <a class="navbar-brand" href="{% url 'index' %}" style="padding-top:1px"><img class="logo" alt="JRO" src="{% static "images/logo-jro-white-trans.png" %}"></a>
36 <a class="navbar-brand" href="{% url 'index' %}" style="padding-top:1px"><img class="logo" alt="JRO" src="{% static "images/logo-jro-white-trans.png" %}"></a>
37 </div>
37 </div>
38 <div class="collapse navbar-collapse" id="navigationbar">
38 <div class="collapse navbar-collapse" id="navigationbar">
39 <ul class="nav navbar-nav">
39 <ul class="nav navbar-nav">
40 <li class=" dropdown {% block dev-active %}{% endblock %}"><a href="{% url 'url_devices'%}">Devices</a>
41 </li>
42 <li class=" dropdown {% block camp-active %}{% endblock %}"><a href="{% url 'url_campaigns'%}">Campaigns</a>
40 <li class=" dropdown {% block camp-active %}{% endblock %}"><a href="{% url 'url_campaigns'%}">Campaigns</a>
43 </li>
41 </li>
44 <li class=" dropdown {% block exp-active %}{% endblock %}"><a href="{% url 'url_experiments'%}">Experiments</a>
42 <li class=" dropdown {% block exp-active %}{% endblock %}"><a href="{% url 'url_experiments'%}">Experiments</a>
45 </li>
43 </li>
46 <li class=" dropdown {% block conf-active %}{% endblock %}"><a href="{% url 'url_dev_confs'%}">Device Configurations</a>
44 <li class=" dropdown {% block conf-active %}{% endblock %}"><a href="{% url 'url_dev_confs'%}">Configurations</a>
45 </li>
46 <li class=" dropdown {% block dev-active %}{% endblock %}"><a href="{% url 'url_devices'%}">Devices</a>
47 </li>
48 <li class=" dropdown {% block loc-active %}{% endblock %}"><a href="{% url 'url_locations'%}">Locations</a>
47 </li>
49 </li>
48 </ul>
50 </ul>
49 <ul class="nav navbar-nav navbar-right">
51 <ul class="nav navbar-nav navbar-right">
50 <li class="nav-divider"></li>
52 <li class="nav-divider"></li>
51 {% if user.is_authenticated %}
53 {% if user.is_authenticated %}
52 <li class="dropdown">
54 <li class="dropdown">
53 <a href="#" class="dropdown-toggle" data-toggle="dropdown">Hi {{ user.username }}<span class="caret"></span></a>
55 <a href="#" class="dropdown-toggle" data-toggle="dropdown">Hi {{ user.username }}<span class="caret"></span></a>
54 <ul class="dropdown-menu" role="menu">
56 <ul class="dropdown-menu" role="menu">
55 <li><a href="#">Control Panel</a></li>
57 <li><a href="#">Control Panel</a></li>
56 <li><a href="{% url 'django.contrib.auth.views.logout' %}">Logout</a></li>
58 <li><a href="{% url 'django.contrib.auth.views.logout' %}">Logout</a></li>
57 </ul>
59 </ul>
58 </li>
60 </li>
59 {% else %}
61 {% else %}
60 <li><a href="{% url 'django.contrib.auth.views.login' %}?next={{request.get_full_path}}">Login</a></li>
62 <li><a href="{% url 'django.contrib.auth.views.login' %}?next={{request.get_full_path}}">Login</a></li>
61 {% endif %}
63 {% endif %}
62 </ul>
64 </ul>
63 </div>
65 </div>
64 </div>
66 </div>
65 </nav>
67 </nav>
66 <div style="clear: both;"></div>
68 <div style="clear: both;"></div>
67 {% endblock %}
69 {% endblock %}
68
70
69 <div class="container">
71 <div class="container">
70 <div id="page" class="row" style="min-height:600px">
72 <div id="page" class="row" style="min-height:600px">
71
73
72 <div class="col-md-3 hidden-xs hidden-sm" role="complementary">
74 <div class="col-md-3 hidden-xs hidden-sm" role="complementary">
73 <br><br>
75 <br><br>
74 <div id="sidebar">
76 <div id="sidebar">
75 {% block sidebar%}
77 {% block sidebar%}
76 {% endblock %}
78 {% endblock %}
77 </div>
79 </div>
78 </div>
80 </div>
79
81
80 <div class="col-md-9 col-xs-12" role="main">
82 <div class="col-md-9 col-xs-12" role="main">
81 <div class="page-header">
83 <div class="page-header">
82 <h1>{% block content-title %}{% endblock %} <small>{% block content-suptitle %}{% endblock %}</small></h1>
84 <h1>{% block content-title %}{% endblock %} <small>{% block content-suptitle %}{% endblock %}</small></h1>
83 <hr>
85 <hr>
84 </div>
86 </div>
85 {% block messages %}
87 {% block messages %}
86 {% if messages %}
88 {% if messages %}
87 {% for message in messages %}
89 {% for message in messages %}
88 <div class="alert alert-{% if message.tags %}{% if 'error' in message.tags %}danger{% else %}{{ message.tags }}{% endif %}{% else %}info{% endif %} alert-dismissible" role="alert">
90 <div class="alert alert-{% if message.tags %}{% if 'error' in message.tags %}danger{% else %}{{ message.tags }}{% endif %}{% else %}info{% endif %} alert-dismissible" role="alert">
89 <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
91 <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
90 <strong>{{message.tags|title}}!</strong> {{ message }}
92 <strong>{{message.tags|title}}!</strong> {{ message }}
91 </div>
93 </div>
92 {% endfor %}
94 {% endfor %}
93 {% endif %}
95 {% endif %}
94 {% endblock %}
96 {% endblock %}
95
97
96 {% block content %}
98 {% block content %}
97 {% endblock %}
99 {% endblock %}
98
100
99 </div>
101 </div>
100
102
101
103
102 </div><!--/row-->
104 </div><!--/row-->
103 </div> <!-- container -->
105 </div> <!-- container -->
104
106
105 <div id="debug">{{debug}}</div>
107 <div id="debug">{{debug}}</div>
106
108
107 {% block footer %}
109 {% block footer %}
108 <footer class="footer">
110 <footer class="footer">
109 <div class="container">
111 <div class="container">
110 <p><hr></p>
112 <p><hr></p>
111 <p>
113 <p>
112 &copy; <a href="http://jro.igp.gob.pe">Jicamarca Radio Observatory</a> - {% now "Y" %}
114 &copy; <a href="http://jro.igp.gob.pe">Jicamarca Radio Observatory</a> - {% now "Y" %}
113 </p>
115 </p>
114 </div>
116 </div>
115 </footer>
117 </footer>
116 {% endblock %}
118 {% endblock %}
117
119
118 {# bootstrap_javascript jquery=True #}
120 {# bootstrap_javascript jquery=True #}
119 <script src="{% static 'js/jquery.min.js' %}"></script>
121 <script src="{% static 'js/jquery.min.js' %}"></script>
120 <script src="{% static 'js/bootstrap.min.js' %}"></script>
122 <script src="{% static 'js/bootstrap.min.js' %}"></script>
121 <script src="{% static 'js/jquery-ui.min.js' %}"></script>
123 <script src="{% static 'js/jquery-ui.min.js' %}"></script>
122 {% block extra-js %}
124 {% block extra-js %}
123 {% endblock%}
125 {% endblock%}
124 </body>
126 </body>
125 </html>
127 </html>
126
128
@@ -1,35 +1,35
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
5
6 {% block conf-active %}active{% endblock %}
6 {% block conf-active %}active{% endblock %}
7
7
8 {% block content-title %}{{title}}{% endblock %}
8 {% block content-title %}{{title}}{% endblock %}
9 {% block content-suptitle %}{{suptitle}}{% endblock %}
9 {% block content-suptitle %}{{suptitle}}{% endblock %}
10
10
11 {% block content %}
11 {% block content %}
12
12
13 {% if form.is_multipart %}
13 {% if form.is_multipart %}
14 <form class="form" enctype="multipart/form-data" method="post" action="">
14 <form class="form" enctype="multipart/form-data" method="post" action="{{action}}">
15 {% else %}
15 {% else %}
16 <form class="form" method="post" action="">
16 <form class="form" method="post" action="{{action}}">
17 {% endif %}
17 {% endif %}
18
18
19 {% csrf_token %}
19 {% csrf_token %}
20 {% bootstrap_form form layout='horizontal' size='medium' %}
20 {% bootstrap_form form layout='horizontal' size='medium' %}
21 <div style="clear: both;"></div>
21 <div style="clear: both;"></div>
22 <br>
22 <br>
23 <div class="pull-right">
23 <div class="pull-right">
24 <button type="button" class="btn btn-primary" onclick="{% if previous %}window.location.replace('{{ previous }}');{% else %}history.go(-1);{% endif %}">Cancel</button>
24 <button type="button" class="btn btn-primary" onclick="{% if previous %}window.location.replace('{{ previous }}');{% else %}history.go(-1);{% endif %}">Cancel</button>
25 <button type="submit" class="btn btn-primary">{{button}}</button>
25 <button type="submit" class="btn btn-primary">{{button}}</button>
26 </div>
26 </div>
27 </form>
27 </form>
28 {% endblock %}
28 {% endblock %}
29
29
30 {% block sidebar%}
30 {% block sidebar%}
31 {% include "sidebar_devices.html" %}
31 {% include "sidebar_devices.html" %}
32 {% endblock %}
32 {% endblock %}
33
33
34 {% block extra-js%}
34 {% block extra-js%}
35 {% endblock %} No newline at end of file
35 {% endblock %}
@@ -1,80 +1,80
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 exp-active %}active{% endblock %}
9 {% block exp-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 <table class="table table-bordered">
15 <table class="table table-bordered">
16 {% for key in experiment_keys %}
16 {% for key in experiment_keys %}
17 <tr><th>{{key|title}}</th><td>{{experiment|attr:key}}</td></tr>
17 <tr><th>{{key|title}}</th><td>{{experiment|attr:key}}</td></tr>
18 {% endfor %}
18 {% endfor %}
19 </table>
19 </table>
20 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_export">Export</button>
20 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_export">Export</button>
21 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_edit">Edit</button>
21 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_edit">Edit</button>
22 <br></br>
22 <br></br>
23 <br></br>
23 <br></br>
24
24
25 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
25 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
26
26
27 <div class="panel panel-default">
27 <div class="panel panel-default">
28 <div class="panel-heading" role="tab" id="headingTwo">
28 <div class="panel-heading" role="tab" id="headingTwo">
29 <h4 class="panel-title">
29 <h4 class="panel-title">
30 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseThree">
30 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseThree">
31 Device Configurations
31 Device Configurations
32 </a>
32 </a>
33 </h4>
33 </h4>
34 </div>
34 </div>
35 <div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">
35 <div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">
36 <div class="panel-body">
36 <div class="panel-body">
37 <table class="table table-hover">
37 <table class="table table-hover">
38 <tr>
38 <tr>
39 <th>#</th>
39 <th>#</th>
40 {% for key in configuration_keys %}
40 {% for key in configuration_labels %}
41 <th>{{ key|title }}</th>
41 <th>{{ key|title }}</th>
42 {% endfor%}
42 {% endfor%}
43 </tr>
43 </tr>
44 {% for item in configurations %}
44 {% for item in configurations %}
45 <tr class="clickable-row" data-href="/{{item.device__device_type__name}}/{{item.id}}/">
45 <tr class="clickable-row" data-href="{{item.get_absolute_url}}">
46 <td>{{ forloop.counter }}</td>
46 <td>{{ forloop.counter }}</td>
47 {% for key in configuration_keys %}
47 {% for key in configuration_keys %}
48 <td>{{ item|attr:key }}</td>
48 <td>{{ item|value:key }}</td>
49 {% endfor %}
49 {% endfor %}
50 </tr>
50 </tr>
51 {% endfor %}
51 {% endfor %}
52 </table>
52 </table>
53 <button class="btn btn-primary pull-right" id="bt_add_conf">{{button}}</button>
53 <button class="btn btn-primary pull-right" id="bt_add_conf">{{button}}</button>
54 </div>
54 </div>
55 </div>
55 </div>
56 </div>
56 </div>
57 </div>
57 </div>
58 {% endblock %}
58 {% endblock %}
59
59
60 {% block sidebar%}
60 {% block sidebar%}
61 {% include "sidebar_devices.html" %}
61 {% include "sidebar_devices.html" %}
62 {% endblock %}
62 {% endblock %}
63
63
64 {% block extra-js%}
64 {% block extra-js%}
65 <script type="text/javascript">
65 <script type="text/javascript">
66
66
67 $(".clickable-row").click(function() {
67 $(".clickable-row").click(function() {
68 document.location = $(this).data("href");
68 document.location = $(this).data("href");
69 });
69 });
70
70
71 $("#bt_edit").click(function() {
71 $("#bt_edit").click(function() {
72 document.location = "{% url 'url_edit_experiment' experiment.id%}";
72 document.location = "{% url 'url_edit_experiment' experiment.id%}";
73 });
73 });
74
74
75 $("#bt_add_conf").click(function() {
75 $("#bt_add_conf").click(function() {
76 document.location = "{% url 'url_add_dev_conf' experiment.id%}";
76 document.location = "{% url 'url_add_dev_conf' experiment.id%}";
77 });
77 });
78
78
79 </script>
79 </script>
80 {% endblock %} No newline at end of file
80 {% endblock %}
@@ -1,100 +1,100
1 {% if campaign %}
1 {% if campaign %}
2 <div class="panel panel-default">
2 <div class="panel panel-default">
3 <div class="panel-heading">
3 <div class="panel-heading">
4 <h4>Campaign</h4>
4 <h4>Campaign</h4>
5 </div>
5 </div>
6 <div class="list-group">
6 <div class="list-group">
7 <a href="{% url 'url_campaign' campaign.id %}" class="list-group-item active" >{{ campaign.name }}</a>
7 <a href="{% url 'url_campaign' campaign.id %}" class="list-group-item active" >{{ campaign.name }}</a>
8 </div>
8 </div>
9 </div>
9 </div>
10
10
11 {% if experiments %}
11 {% if experiments %}
12 <div class="panel panel-default">
12 <div class="panel panel-default">
13 <div class="panel-heading">
13 <div class="panel-heading">
14 <h4>Experiments</h4>
14 <h4>Experiments</h4>
15 </div>
15 </div>
16 <div class="list-group">
16 <div class="list-group">
17 {% for item in experiments %}
17 {% for item in experiments %}
18 <a href="{% url 'url_experiment' item.id %}" class="list-group-item {{item.active}}">{{item.name}}</a>
18 <a href="{% url 'url_experiment' item.id %}" class="list-group-item {{item.active}}">{{item.name}}</a>
19 {% endfor %}
19 {% endfor %}
20 </div>
20 </div>
21 </div>
21 </div>
22 {% endif %}
22 {% endif %}
23 {% endif %}
23 {% endif %}
24
24
25 {% if experiment %}
25 {% if experiment %}
26 <div class="panel panel-default">
26 <div class="panel panel-default">
27 <div class="panel-heading">
27 <div class="panel-heading">
28 <h4>Campaign</h4>
28 <h4>Campaign</h4>
29 </div>
29 </div>
30 <div class="list-group">
30 <div class="list-group">
31 <a href="{% url 'url_campaign' experiment.campaign.id %}" class="list-group-item active" >{{ experiment.campaign.name }}</a>
31 <a href="{% url 'url_campaign' experiment.campaign.id %}" class="list-group-item active" >{{ experiment.campaign.name }}</a>
32 </div>
32 </div>
33 </div>
33 </div>
34
34
35 {% if experiments %}
35 {% if experiments %}
36 <div class="panel panel-default">
36 <div class="panel panel-default">
37 <div class="panel-heading">
37 <div class="panel-heading">
38 <h4>Experiments</h4>
38 <h4>Experiments</h4>
39 </div>
39 </div>
40 <div class="list-group">
40 <div class="list-group">
41 {% for item in experiments %}
41 {% for item in experiments %}
42 <a href="{% url 'url_experiment' item.id %}" class="list-group-item {%if item.id == experiment.id%}active{%endif%}">{{item.name}}</a>
42 <a href="{% url 'url_experiment' item.id %}" class="list-group-item {%if item.id == experiment.id%}active{%endif%}">{{item.name}}</a>
43 {% endfor %}
43 {% endfor %}
44 </div>
44 </div>
45 </div>
45 </div>
46 {% endif %}
46 {% endif %}
47
47
48 {% if configurations %}
48 {% if configurations %}
49 <div class="panel panel-default">
49 <div class="panel panel-default">
50 <div class="panel-heading">
50 <div class="panel-heading">
51 <h4>Device Configurations</h4>
51 <h4>Device Configurations</h4>
52 </div>
52 </div>
53 <div class="list-group">
53 <div class="list-group">
54 {% for item in configurations %}
54 {% for item in configurations %}
55 <a href="/{{item.device__device_type__name}}/{{item.id}}" class="list-group-item {{item.active}}">{{item.device__name}}</a>
55 <a href="{{item.get_absolute_url}}" class="list-group-item {{item.active}}">{{item.device.name}}</a>
56 {% endfor %}
56 {% endfor %}
57 </div>
57 </div>
58 </div>
58 </div>
59 {% endif %}
59 {% endif %}
60
60
61 {% endif %}
61 {% endif %}
62
62
63 {% if dev_conf %}
63 {% if dev_conf %}
64 <div class="panel panel-default">
64 <div class="panel panel-default">
65 <div class="panel-heading">
65 <div class="panel-heading">
66 <h4>Campaign</h4>
66 <h4>Campaign</h4>
67 </div>
67 </div>
68 <div class="list-group">
68 <div class="list-group">
69 <a href="{% url 'url_campaign' dev_conf.experiment.campaign.id %}" class="list-group-item active" >{{ dev_conf.experiment.campaign.name }}</a>
69 <a href="{% url 'url_campaign' dev_conf.experiment.campaign.id %}" class="list-group-item active" >{{ dev_conf.experiment.campaign.name }}</a>
70 </div>
70 </div>
71 </div>
71 </div>
72
72
73 {% if experiments %}
73 {% if experiments %}
74 <div class="panel panel-default">
74 <div class="panel panel-default">
75 <div class="panel-heading">
75 <div class="panel-heading">
76 <h4>Experiments</h4>
76 <h4>Experiments</h4>
77 </div>
77 </div>
78 <div class="list-group">
78 <div class="list-group">
79 {% for item in experiments %}
79 {% for item in experiments %}
80 <a href="{% url 'url_experiment' item.id %}" class="list-group-item {%if item.id == dev_conf.experiment.id%}active{%endif%}">{{item.name}}</a>
80 <a href="{% url 'url_experiment' item.id %}" class="list-group-item {%if item.id == dev_conf.experiment.id%}active{%endif%}">{{item.name}}</a>
81 {% endfor %}
81 {% endfor %}
82 </div>
82 </div>
83 </div>
83 </div>
84 {% endif %}
84 {% endif %}
85
85
86 {% if configurations %}
86 {% if configurations %}
87 <div class="panel panel-default">
87 <div class="panel panel-default">
88 <div class="panel-heading">
88 <div class="panel-heading">
89 <h4>Device Configurations</h4>
89 <h4>Device Configurations</h4>
90 </div>
90 </div>
91 <div class="list-group">
91 <div class="list-group">
92 {% for item in configurations %}
92 {% for item in configurations %}
93 <a href="/{{item.device__device_type__name}}/{{item.id}}" class="list-group-item {%if item.id == dev_conf.id%}active{%endif%}">{{item.device__name}}</a>
93 <a href="{{item.get_absolute_url}}" class="list-group-item {%if item.id == dev_conf.id%}active{%endif%}">{{item.device.name}}</a>
94 {% endfor %}
94 {% endfor %}
95 </div>
95 </div>
96 </div>
96 </div>
97 {% endif %}
97 {% endif %}
98
98
99
99
100 {% endif %}
100 {% endif %}
@@ -1,25 +1,36
1 from django.template.defaulttags import register
1 from django.template.defaulttags import register
2
2
3 @register.filter
3 @register.filter
4 def attr(instance, key):
4 def attr(instance, key):
5
5
6 display_key = "get_" + key + "_display"
6 display_key = "get_" + key + "_display"
7
7
8 if hasattr(instance, display_key):
8 if hasattr(instance, display_key):
9 return getattr(instance, display_key)()
9 return getattr(instance, display_key)()
10
10
11 if hasattr(instance, key):
11 if hasattr(instance, key):
12 return getattr(instance, key)
12 return getattr(instance, key)
13
13
14 return instance.get(key)
14 return instance.get(key)
15
15
16 @register.filter
16 @register.filter
17 def title(s):
17 def title(s):
18 return s.replace('_', ' ').title()
18 return s.replace('_', ' ').title()
19
19
20 @register.filter
21 def value(instance, key):
22
23 item = instance
24 for my_key in key.split("__"):
25 print "TP Value", item, my_key
26 item = attr(item, my_key)
27
28 print item
29 return item
30
20 @register.simple_tag
31 @register.simple_tag
21 def get_verbose_field_name(instance, field_name):
32 def get_verbose_field_name(instance, field_name):
22 """
33 """
23 Returns verbose_name for a field.
34 Returns verbose_name for a field.
24 """
35 """
25 return instance._meta.get_field(field_name).verbose_name.title() No newline at end of file
36 return instance._meta.get_field(field_name).verbose_name.title()
@@ -1,27 +1,34
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'),
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'),
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'),
9
4 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'),
5 url(r'^device/$', 'apps.main.views.devices', name='url_devices'),
11 url(r'^device/$', 'apps.main.views.devices', name='url_devices'),
6 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'),
7 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'),
8 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'),
9
15
10 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'),
11 url(r'^campaign/$', 'apps.main.views.campaigns', name='url_campaigns'),
17 url(r'^campaign/$', 'apps.main.views.campaigns', name='url_campaigns'),
12 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'),
13 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'),
14 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'),
15
21
16 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'),
17 url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'),
23 url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'),
18 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'),
19 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'),
20 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'),
21
27
22 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'),
23 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'),
24 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'),
25 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'),
26 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
27 )
34 )
@@ -1,509 +1,594
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
4 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm
5 from apps.cgs.forms import CGSConfigurationForm
5 from apps.cgs.forms import CGSConfigurationForm
6 from apps.jars.forms import JARSConfigurationForm
6 from apps.jars.forms import JARSConfigurationForm
7 from apps.usrp.forms import USRPConfigurationForm
7 from apps.usrp.forms import USRPConfigurationForm
8 from apps.abs.forms import ABSConfigurationForm
8 from apps.abs.forms import ABSConfigurationForm
9 from apps.rc.forms import RCConfigurationForm
9 from apps.rc.forms import RCConfigurationForm
10 from apps.dds.forms import DDSConfigurationForm
10 from apps.dds.forms import DDSConfigurationForm
11
11
12 from .models import Campaign, Experiment, Device, Configuration
12 from .models import Campaign, Experiment, Device, Configuration, Location
13 from apps.cgs.models import CGSConfiguration
13 from apps.cgs.models import CGSConfiguration
14 from apps.jars.models import JARSConfiguration
14 from apps.jars.models import JARSConfiguration
15 from apps.usrp.models import USRPConfiguration
15 from apps.usrp.models import USRPConfiguration
16 from apps.abs.models import ABSConfiguration
16 from apps.abs.models import ABSConfiguration
17 from apps.rc.models import RCConfiguration
17 from apps.rc.models import RCConfiguration
18 from apps.dds.models import DDSConfiguration
18 from apps.dds.models import DDSConfiguration
19
19
20 # Create your views here.
20 # Create your views here.
21
21
22 CONF_FORMS = {
22 CONF_FORMS = {
23 'rc': RCConfigurationForm,
23 'rc': RCConfigurationForm,
24 'dds': DDSConfigurationForm,
24 'dds': DDSConfigurationForm,
25 'jars': JARSConfigurationForm,
25 'jars': JARSConfigurationForm,
26 'cgs': CGSConfigurationForm,
26 'cgs': CGSConfigurationForm,
27 'abs': ABSConfigurationForm,
27 'abs': ABSConfigurationForm,
28 'usrp': USRPConfigurationForm,
28 'usrp': USRPConfigurationForm,
29 }
29 }
30
30
31 CONF_MODELS = {
31 CONF_MODELS = {
32 'rc': RCConfiguration,
32 'rc': RCConfiguration,
33 'dds': DDSConfiguration,
33 'dds': DDSConfiguration,
34 'jars': JARSConfiguration,
34 'jars': JARSConfiguration,
35 'cgs': CGSConfiguration,
35 'cgs': CGSConfiguration,
36 'abs': ABSConfiguration,
36 'abs': ABSConfiguration,
37 'usrp': USRPConfiguration,
37 'usrp': USRPConfiguration,
38 }
38 }
39
39
40 def index(request):
40 def index(request):
41 kwargs = {}
41 kwargs = {}
42
42
43 return render(request, 'index.html', kwargs)
43 return render(request, 'index.html', kwargs)
44
44
45 def locations(request):
46
47 locations = Location.objects.all().order_by('name')
48
49 keys = ['id', 'name', 'description']
50
51 kwargs = {}
52 kwargs['location_keys'] = keys[1:]
53 kwargs['locations'] = locations
54 kwargs['title'] = 'Location'
55 kwargs['suptitle'] = 'List'
56 kwargs['button'] = 'New Location'
57
58 return render(request, 'locations.html', kwargs)
59
60 def location(request, id_loc):
61
62 location = get_object_or_404(Location, pk=id_loc)
63
64 kwargs = {}
65 kwargs['location'] = location
66 kwargs['location_keys'] = ['name', 'description']
67
68 kwargs['title'] = 'Location'
69 kwargs['suptitle'] = 'Details'
70
71 return render(request, 'location.html', kwargs)
72
73 def location_new(request):
74
75 if request.method == 'GET':
76 form = LocationForm()
77
78 if request.method == 'POST':
79 form = LocationForm(request.POST)
80
81 if form.is_valid():
82 form.save()
83 return redirect('url_locations')
84
85 kwargs = {}
86 kwargs['form'] = form
87 kwargs['title'] = 'Location'
88 kwargs['suptitle'] = 'New'
89 kwargs['button'] = 'Create'
90
91 return render(request, 'location_edit.html', kwargs)
92
93 def location_edit(request, id_loc):
94
95 location = get_object_or_404(Location, pk=id_loc)
96
97 if request.method=='GET':
98 form = LocationForm(instance=location)
99
100 if request.method=='POST':
101 form = LocationForm(request.POST, instance=location)
102
103 if form.is_valid():
104 form.save()
105 return redirect('url_locations')
106
107 kwargs = {}
108 kwargs['form'] = form
109 kwargs['title'] = 'Location'
110 kwargs['suptitle'] = 'Edit'
111 kwargs['button'] = 'Update'
112
113 return render(request, 'location_edit.html', kwargs)
114
115 def location_delete(request, id_loc):
116
117 location = get_object_or_404(Location, pk=id_loc)
118
119 if request.method=='POST':
120
121 if request.user.is_staff:
122 location.delete()
123 return redirect('url_locations')
124
125 return HttpResponse("Not enough permission to delete this object")
126
127 kwargs = {'object':location, 'loc_active':'active',
128 'url_cancel':'url_location', 'id_item':id_loc}
129
130 return render(request, 'item_delete.html', kwargs)
131
45 def devices(request):
132 def devices(request):
46
133
47 devices = Device.objects.all().order_by('device_type__name')
134 devices = Device.objects.all().order_by('device_type__name')
48
135
49 # keys = ['id', 'device_type__name', 'name', 'ip_address']
136 # keys = ['id', 'device_type__name', 'name', 'ip_address']
50 keys = ['id', 'name', 'ip_address', 'device_type']
137 keys = ['id', 'name', 'ip_address', 'port_address', 'device_type']
51
138
52 kwargs = {}
139 kwargs = {}
53 kwargs['device_keys'] = keys[1:]
140 kwargs['device_keys'] = keys[1:]
54 kwargs['devices'] = devices#.values(*keys)
141 kwargs['devices'] = devices#.values(*keys)
55 kwargs['title'] = 'Device'
142 kwargs['title'] = 'Device'
56 kwargs['suptitle'] = 'List'
143 kwargs['suptitle'] = 'List'
57 kwargs['button'] = 'New Device'
144 kwargs['button'] = 'New Device'
58
145
59 return render(request, 'devices.html', kwargs)
146 return render(request, 'devices.html', kwargs)
60
147
61 def device(request, id_dev):
148 def device(request, id_dev):
62
149
63 device = get_object_or_404(Device, pk=id_dev)
150 device = get_object_or_404(Device, pk=id_dev)
64
151
65 kwargs = {}
152 kwargs = {}
66 kwargs['device'] = device
153 kwargs['device'] = device
67 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
154 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
68
155
69 kwargs['title'] = 'Device'
156 kwargs['title'] = 'Device'
70 kwargs['suptitle'] = 'Details'
157 kwargs['suptitle'] = 'Details'
71
158
72 kwargs['button'] = 'Add Device'
73
74 return render(request, 'device.html', kwargs)
159 return render(request, 'device.html', kwargs)
75
160
76 def device_new(request):
161 def device_new(request):
77
162
78 if request.method == 'GET':
163 if request.method == 'GET':
79 form = DeviceForm()
164 form = DeviceForm()
80
165
81 if request.method == 'POST':
166 if request.method == 'POST':
82 form = DeviceForm(request.POST)
167 form = DeviceForm(request.POST)
83
168
84 if form.is_valid():
169 if form.is_valid():
85 form.save()
170 form.save()
86 return redirect('url_devices')
171 return redirect('url_devices')
87
172
88 kwargs = {}
173 kwargs = {}
89 kwargs['form'] = form
174 kwargs['form'] = form
90 kwargs['title'] = 'Device'
175 kwargs['title'] = 'Device'
91 kwargs['suptitle'] = 'New'
176 kwargs['suptitle'] = 'New'
92 kwargs['button'] = 'Create'
177 kwargs['button'] = 'Create'
93
178
94 return render(request, 'device_edit.html', kwargs)
179 return render(request, 'device_edit.html', kwargs)
95
180
96 def device_edit(request, id_dev):
181 def device_edit(request, id_dev):
97
182
98 device = get_object_or_404(Device, pk=id_dev)
183 device = get_object_or_404(Device, pk=id_dev)
99
184
100 if request.method=='GET':
185 if request.method=='GET':
101 form = DeviceForm(instance=device)
186 form = DeviceForm(instance=device)
102
187
103 if request.method=='POST':
188 if request.method=='POST':
104 form = DeviceForm(request.POST, instance=device)
189 form = DeviceForm(request.POST, instance=device)
105
190
106 if form.is_valid():
191 if form.is_valid():
107 form.save()
192 form.save()
108 return redirect('url_devices')
193 return redirect('url_devices')
109
194
110 kwargs = {}
195 kwargs = {}
111 kwargs['form'] = form
196 kwargs['form'] = form
112 kwargs['title'] = 'Device'
197 kwargs['title'] = 'Device'
113 kwargs['suptitle'] = 'Edit'
198 kwargs['suptitle'] = 'Edit'
114 kwargs['button'] = 'Update'
199 kwargs['button'] = 'Update'
115
200
116 return render(request, 'device_edit.html', kwargs)
201 return render(request, 'device_edit.html', kwargs)
117
202
118 def device_delete(request, id_dev):
203 def device_delete(request, id_dev):
119
204
120 device = get_object_or_404(Device, pk=id_dev)
205 device = get_object_or_404(Device, pk=id_dev)
121
206
122 if request.method=='POST':
207 if request.method=='POST':
123
208
124 if request.user.is_staff:
209 if request.user.is_staff:
125 device.delete()
210 device.delete()
126 return redirect('url_devices')
211 return redirect('url_devices')
127
212
128 return HttpResponse("Not enough permission to delete this object")
213 return HttpResponse("Not enough permission to delete this object")
129
214
130 kwargs = {'object':device, 'dev_active':'active',
215 kwargs = {'object':device, 'dev_active':'active',
131 'url_cancel':'url_device', 'id_item':id_dev}
216 'url_cancel':'url_device', 'id_item':id_dev}
132
217
133 return render(request, 'item_delete.html', kwargs)
218 return render(request, 'item_delete.html', kwargs)
134
219
135 def campaigns(request):
220 def campaigns(request):
136
221
137 campaigns = Campaign.objects.all().order_by('start_date')
222 campaigns = Campaign.objects.all().order_by('start_date')
138
223
139 keys = ['id', 'name', 'start_date', 'end_date']
224 keys = ['id', 'name', 'start_date', 'end_date']
140
225
141 kwargs = {}
226 kwargs = {}
142 kwargs['campaign_keys'] = keys[1:]
227 kwargs['campaign_keys'] = keys[1:]
143 kwargs['campaigns'] = campaigns#.values(*keys)
228 kwargs['campaigns'] = campaigns#.values(*keys)
144 kwargs['title'] = 'Campaign'
229 kwargs['title'] = 'Campaign'
145 kwargs['suptitle'] = 'List'
230 kwargs['suptitle'] = 'List'
146 kwargs['button'] = 'New Campaign'
231 kwargs['button'] = 'New Campaign'
147
232
148 return render(request, 'campaigns.html', kwargs)
233 return render(request, 'campaigns.html', kwargs)
149
234
150 def campaign(request, id_camp):
235 def campaign(request, id_camp):
151
236
152 campaign = get_object_or_404(Campaign, pk=id_camp)
237 campaign = get_object_or_404(Campaign, pk=id_camp)
153 experiments = Experiment.objects.filter(campaign=campaign)
238 experiments = Experiment.objects.filter(campaign=campaign)
154
239
155 form = CampaignForm(instance=campaign)
240 form = CampaignForm(instance=campaign)
156
241
157 kwargs = {}
242 kwargs = {}
158 kwargs['campaign'] = campaign
243 kwargs['campaign'] = campaign
159 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
244 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
160
245
161 keys = ['id', 'name', 'start_time', 'end_time']
246 keys = ['id', 'name', 'start_time', 'end_time']
162
247
163 kwargs['experiment_keys'] = keys[1:]
248 kwargs['experiment_keys'] = keys[1:]
164 kwargs['experiments'] = experiments.values(*keys)
249 kwargs['experiments'] = experiments.values(*keys)
165
250
166 kwargs['title'] = 'Campaign'
251 kwargs['title'] = 'Campaign'
167 kwargs['suptitle'] = 'Details'
252 kwargs['suptitle'] = 'Details'
168
253
169 kwargs['form'] = form
254 kwargs['form'] = form
170 kwargs['button'] = 'Add Experiment'
255 kwargs['button'] = 'Add Experiment'
171
256
172 return render(request, 'campaign.html', kwargs)
257 return render(request, 'campaign.html', kwargs)
173
258
174 def campaign_new(request):
259 def campaign_new(request):
175
260
176 if request.method == 'GET':
261 if request.method == 'GET':
177 form = CampaignForm()
262 form = CampaignForm()
178
263
179 if request.method == 'POST':
264 if request.method == 'POST':
180 form = CampaignForm(request.POST)
265 form = CampaignForm(request.POST)
181
266
182 if form.is_valid():
267 if form.is_valid():
183 campaign = form.save()
268 campaign = form.save()
184 return redirect('url_campaign', id_camp=campaign.id)
269 return redirect('url_campaign', id_camp=campaign.id)
185
270
186 kwargs = {}
271 kwargs = {}
187 kwargs['form'] = form
272 kwargs['form'] = form
188 kwargs['title'] = 'Campaign'
273 kwargs['title'] = 'Campaign'
189 kwargs['suptitle'] = 'New'
274 kwargs['suptitle'] = 'New'
190 kwargs['button'] = 'Create'
275 kwargs['button'] = 'Create'
191
276
192 return render(request, 'campaign_edit.html', kwargs)
277 return render(request, 'campaign_edit.html', kwargs)
193
278
194 def campaign_edit(request, id_camp):
279 def campaign_edit(request, id_camp):
195
280
196 campaign = get_object_or_404(Campaign, pk=id_camp)
281 campaign = get_object_or_404(Campaign, pk=id_camp)
197
282
198 if request.method=='GET':
283 if request.method=='GET':
199 form = CampaignForm(instance=campaign)
284 form = CampaignForm(instance=campaign)
200
285
201 if request.method=='POST':
286 if request.method=='POST':
202 form = CampaignForm(request.POST, instance=campaign)
287 form = CampaignForm(request.POST, instance=campaign)
203
288
204 if form.is_valid():
289 if form.is_valid():
205 form.save()
290 form.save()
206 return redirect('url_campaign', id_camp=id_camp)
291 return redirect('url_campaign', id_camp=id_camp)
207
292
208 kwargs = {}
293 kwargs = {}
209 kwargs['form'] = form
294 kwargs['form'] = form
210 kwargs['title'] = 'Campaign'
295 kwargs['title'] = 'Campaign'
211 kwargs['suptitle'] = 'Edit'
296 kwargs['suptitle'] = 'Edit'
212 kwargs['button'] = 'Update'
297 kwargs['button'] = 'Update'
213
298
214 return render(request, 'campaign_edit.html', kwargs)
299 return render(request, 'campaign_edit.html', kwargs)
215
300
216 def campaign_delete(request, id_camp):
301 def campaign_delete(request, id_camp):
217
302
218 campaign = get_object_or_404(Campaign, pk=id_camp)
303 campaign = get_object_or_404(Campaign, pk=id_camp)
219
304
220 if request.method=='POST':
305 if request.method=='POST':
221 if request.user.is_staff:
306 if request.user.is_staff:
222 campaign.delete()
307 campaign.delete()
223 return redirect('url_campaigns')
308 return redirect('url_campaigns')
224
309
225 return HttpResponse("Not enough permission to delete this object")
310 return HttpResponse("Not enough permission to delete this object")
226
311
227 kwargs = {'object':campaign, 'camp_active':'active',
312 kwargs = {'object':campaign, 'camp_active':'active',
228 'url_cancel':'url_campaign', 'id_item':id_camp}
313 'url_cancel':'url_campaign', 'id_item':id_camp}
229
314
230 return render(request, 'item_delete.html', kwargs)
315 return render(request, 'item_delete.html', kwargs)
231
316
232 def experiments(request):
317 def experiments(request):
233
318
234 experiment_list = Experiment.objects.all().order_by('campaign')
319 experiment_list = Experiment.objects.all().order_by('campaign')
235
320
236 keys = ['id', 'name', 'start_time', 'end_time', 'campaign']
321 keys = ['id', 'name', 'start_time', 'end_time', 'campaign']
237
322
238 kwargs = {}
323 kwargs = {}
239
324
240 kwargs['experiment_keys'] = keys[1:]
325 kwargs['experiment_keys'] = keys[1:]
241 kwargs['experiments'] = experiment_list#.values(*keys)
326 kwargs['experiments'] = experiment_list#.values(*keys)
242
327
243 kwargs['title'] = 'Experiment'
328 kwargs['title'] = 'Experiment'
244 kwargs['suptitle'] = 'List'
329 kwargs['suptitle'] = 'List'
245 kwargs['button'] = 'New Experiment'
330 kwargs['button'] = 'New Experiment'
246
331
247 return render(request, 'experiments.html', kwargs)
332 return render(request, 'experiments.html', kwargs)
248
333
249 def experiment(request, id_exp):
334 def experiment(request, id_exp):
250
335
251 experiment = get_object_or_404(Experiment, pk=id_exp)
336 experiment = get_object_or_404(Experiment, pk=id_exp)
252
337
253 experiments = Experiment.objects.filter(campaign=experiment.campaign)
338 experiments = Experiment.objects.filter(campaign=experiment.campaign)
254 configurations = Configuration.objects.filter(experiment=experiment)
339 configurations = Configuration.objects.filter(experiment=experiment, type=0)
255
340
256 kwargs = {}
341 kwargs = {}
257
342
258 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
343 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
259 conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address']
344 conf_keys = ['id', 'device__name', 'device__device_type', 'device__ip_address', 'device__port_address']
260
345
346 conf_labels = ['id', 'device__name', 'device_type', 'ip_address', 'port_address']
261
347
262 kwargs['experiment_keys'] = exp_keys[1:]
348 kwargs['experiment_keys'] = exp_keys[1:]
263 kwargs['experiment'] = experiment
349 kwargs['experiment'] = experiment
264
350
265 kwargs['experiments'] = experiments.values(*exp_keys)
351 kwargs['experiments'] = experiments.values(*exp_keys)
266
352
353 kwargs['configuration_labels'] = conf_labels[1:]
267 kwargs['configuration_keys'] = conf_keys[1:]
354 kwargs['configuration_keys'] = conf_keys[1:]
268 kwargs['configurations'] = configurations.values(*conf_keys)
355 kwargs['configurations'] = configurations #.values(*conf_keys)
269
356
270 kwargs['title'] = 'Experiment'
357 kwargs['title'] = 'Experiment'
271 kwargs['suptitle'] = 'Details'
358 kwargs['suptitle'] = 'Details'
272
359
273 kwargs['button'] = 'Add Device'
360 kwargs['button'] = 'Add Device'
274
361
275 return render(request, 'experiment.html', kwargs)
362 return render(request, 'experiment.html', kwargs)
276
363
277 def experiment_new(request, id_camp=0):
364 def experiment_new(request, id_camp=0):
278
365
279 if request.method == 'GET':
366 if request.method == 'GET':
280 form = ExperimentForm(initial={'campaign':id_camp})
367 form = ExperimentForm(initial={'campaign':id_camp})
281
368
282 if request.method == 'POST':
369 if request.method == 'POST':
283 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
370 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
284
371
285 if form.is_valid():
372 if form.is_valid():
286 experiment = form.save()
373 experiment = form.save()
287 return redirect('url_experiment', id_exp=experiment.id)
374 return redirect('url_experiment', id_exp=experiment.id)
288
375
289 kwargs = {}
376 kwargs = {}
290 kwargs['form'] = form
377 kwargs['form'] = form
291 kwargs['title'] = 'Experiment'
378 kwargs['title'] = 'Experiment'
292 kwargs['suptitle'] = 'New'
379 kwargs['suptitle'] = 'New'
293 kwargs['button'] = 'Create'
380 kwargs['button'] = 'Create'
294
381
295 return render(request, 'experiment_edit.html', kwargs)
382 return render(request, 'experiment_edit.html', kwargs)
296
383
297 def experiment_edit(request, id_exp):
384 def experiment_edit(request, id_exp):
298
385
299 experiment = get_object_or_404(Experiment, pk=id_exp)
386 experiment = get_object_or_404(Experiment, pk=id_exp)
300
387
301 if request.method == 'GET':
388 if request.method == 'GET':
302 form = ExperimentForm(instance=experiment)
389 form = ExperimentForm(instance=experiment)
303
390
304 if request.method=='POST':
391 if request.method=='POST':
305 form = ExperimentForm(request.POST, instance=experiment)
392 form = ExperimentForm(request.POST, instance=experiment)
306
393
307 if form.is_valid():
394 if form.is_valid():
308 experiment = form.save()
395 experiment = form.save()
309 return redirect('url_experiment', id_exp=experiment.id)
396 return redirect('url_experiment', id_exp=experiment.id)
310
397
311 kwargs = {}
398 kwargs = {}
312 kwargs['form'] = form
399 kwargs['form'] = form
313 kwargs['title'] = 'Experiment'
400 kwargs['title'] = 'Experiment'
314 kwargs['suptitle'] = 'Edit'
401 kwargs['suptitle'] = 'Edit'
315 kwargs['button'] = 'Update'
402 kwargs['button'] = 'Update'
316
403
317 return render(request, 'experiment_edit.html', kwargs)
404 return render(request, 'experiment_edit.html', kwargs)
318
405
319 def experiment_delete(request, id_exp):
406 def experiment_delete(request, id_exp):
320
407
321 experiment = get_object_or_404(Experiment, pk=id_exp)
408 experiment = get_object_or_404(Experiment, pk=id_exp)
322
409
323 if request.method=='POST':
410 if request.method=='POST':
324 if request.user.is_staff:
411 if request.user.is_staff:
325 id_camp = experiment.campaign.id
412 id_camp = experiment.campaign.id
326 experiment.delete()
413 experiment.delete()
327 return redirect('url_campaign', id_camp=id_camp)
414 return redirect('url_campaign', id_camp=id_camp)
328
415
329 return HttpResponse("Not enough permission to delete this object")
416 return HttpResponse("Not enough permission to delete this object")
330
417
331 kwargs = {'object':experiment, 'exp_active':'active',
418 kwargs = {'object':experiment, 'exp_active':'active',
332 'url_cancel':'url_experiment', 'id_item':id_exp}
419 'url_cancel':'url_experiment', 'id_item':id_exp}
333
420
334 return render(request, 'item_delete.html', kwargs)
421 return render(request, 'item_delete.html', kwargs)
335
422
336 def dev_confs(request):
423 def dev_confs(request):
337
424
338 configurations = Configuration.objects.all().order_by('experiment')
425 configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
339
426
340 # keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
427 # keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
341
428
342 keys = ['id', 'device', 'experiment', 'type', 'programmed_date']
429 keys = ['id', 'device', 'experiment', 'type', 'programmed_date']
343
430
344 kwargs = {}
431 kwargs = {}
345
432
346 kwargs['configuration_keys'] = keys[1:]
433 kwargs['configuration_keys'] = keys[1:]
347 kwargs['configurations'] = configurations#.values(*keys)
434 kwargs['configurations'] = configurations#.values(*keys)
348
435
349 kwargs['title'] = 'Configuration'
436 kwargs['title'] = 'Configuration'
350 kwargs['suptitle'] = 'List'
437 kwargs['suptitle'] = 'List'
351 kwargs['button'] = 'New Configuration'
438 kwargs['button'] = 'New Configuration'
352
439
353 return render(request, 'dev_confs.html', kwargs)
440 return render(request, 'dev_confs.html', kwargs)
354
441
355 def dev_conf(request, id_conf):
442 def dev_conf(request, id_conf):
356
443
357 conf = get_object_or_404(Configuration, pk=id_conf)
444 conf = get_object_or_404(Configuration, pk=id_conf)
358
445
359 DevConfModel = CONF_MODELS[conf.device.device_type.name]
446 DevConfModel = CONF_MODELS[conf.device.device_type.name]
360 dev_conf = DevConfModel.objects.get(pk=id_conf)
447 dev_conf = DevConfModel.objects.get(pk=id_conf)
361
448
362 kwargs = {}
449 kwargs = {}
363 kwargs['dev_conf'] = dev_conf
450 kwargs['dev_conf'] = dev_conf
364 kwargs['dev_conf_keys'] = ['experiment', 'device']
451 kwargs['dev_conf_keys'] = ['experiment', 'device']
365
452
366 kwargs['title'] = 'Configuration'
453 kwargs['title'] = 'Configuration'
367 kwargs['suptitle'] = 'Details'
454 kwargs['suptitle'] = 'Details'
368
455
369 kwargs['button'] = 'Edit Configuration'
456 kwargs['button'] = 'Edit Configuration'
370
457
371 ###### SIDEBAR ######
458 ###### SIDEBAR ######
372 kwargs.update(sidebar(conf))
459 kwargs.update(sidebar(conf))
373
460
374 return render(request, 'dev_conf.html', kwargs)
461 return render(request, 'dev_conf.html', kwargs)
375
462
376 def dev_conf_new(request, id_exp=0):
463 def dev_conf_new(request, id_exp=0):
377
464
378 if request.method == 'GET':
465 if request.method == 'GET':
379 form = ConfigurationForm(initial={'experiment':id_exp})
466 form = ConfigurationForm(initial={'experiment':id_exp})
380
467
381 if request.method == 'POST':
468 if request.method == 'POST':
382 form = ConfigurationForm(request.POST)
469 form = ConfigurationForm(request.POST)
383
470
384 if form.is_valid():
471 if form.is_valid():
385 experiment = Experiment.objects.get(pk=request.POST['experiment'])
472 experiment = Experiment.objects.get(pk=request.POST['experiment'])
386 device = Device.objects.get(pk=request.POST['device'])
473 device = Device.objects.get(pk=request.POST['device'])
387
474
388 exp_devices = Device.objects.filter(configuration__experiment=experiment)
475 exp_devices = Device.objects.filter(configuration__experiment=experiment,
476 configuration__type=0)
389
477
390 if device.id not in exp_devices.values('id',):
478 if device.id not in exp_devices.values('id',):
391
479
392 DevConfModel = CONF_MODELS[device.device_type.name]
480 DevConfModel = CONF_MODELS[device.device_type.name]
393 conf = DevConfModel(experiment=experiment, device=device)
481 conf = DevConfModel(experiment=experiment, device=device)
394 conf.save()
482 conf.save()
395
483
396 return redirect('url_experiment', id_exp=experiment.id)
484 return redirect('url_experiment', id_exp=experiment.id)
397
485
398 kwargs = {}
486 kwargs = {}
399 kwargs['form'] = form
487 kwargs['form'] = form
400 kwargs['title'] = 'Configuration'
488 kwargs['title'] = 'Configuration'
401 kwargs['suptitle'] = 'New'
489 kwargs['suptitle'] = 'New'
402 kwargs['button'] = 'Create'
490 kwargs['button'] = 'Create'
403
491
404 ###### SIDEBAR ######
405 kwargs.update(sidebar(conf))
406
407 return render(request, 'dev_conf_edit.html', kwargs)
492 return render(request, 'dev_conf_edit.html', kwargs)
408
493
409 def dev_conf_edit(request, id_conf):
494 def dev_conf_edit(request, id_conf):
410
495
411 conf = get_object_or_404(Configuration, pk=id_conf)
496 conf = get_object_or_404(Configuration, pk=id_conf)
412
497
413 DevConfModel = CONF_MODELS[conf.device.device_type.name]
498 DevConfModel = CONF_MODELS[conf.device.device_type.name]
414 DevConfForm = CONF_FORMS[conf.device.device_type.name]
499 DevConfForm = CONF_FORMS[conf.device.device_type.name]
415
500
416 dev_conf = DevConfModel.objects.get(pk=id_conf)
501 dev_conf = DevConfModel.objects.get(pk=id_conf)
417
502
418 if request.method=='GET':
503 if request.method=='GET':
419 form = DevConfForm(instance=dev_conf)
504 form = DevConfForm(instance=dev_conf)
420
505
421 if request.method=='POST':
506 if request.method=='POST':
422 form = DevConfForm(request.POST, instance=dev_conf)
507 form = DevConfForm(request.POST, instance=dev_conf)
423
508
424 if form.is_valid():
509 if form.is_valid():
425 form.save()
510 form.save()
426 return redirect('url_dev_conf', id_conf=id_conf)
511 return redirect('url_dev_conf', id_conf=id_conf)
427
512
428 kwargs = {}
513 kwargs = {}
429 kwargs['form'] = form
514 kwargs['form'] = form
430 kwargs['title'] = 'Device Configuration'
515 kwargs['title'] = 'Device Configuration'
431 kwargs['suptitle'] = 'Edit'
516 kwargs['suptitle'] = 'Edit'
432 kwargs['button'] = 'Update'
517 kwargs['button'] = 'Update'
433
518
434 ###### SIDEBAR ######
519 ###### SIDEBAR ######
435 kwargs.update(sidebar(conf))
520 kwargs.update(sidebar(conf))
436
521
437 return render(request, 'dev_conf_edit.html', kwargs)
522 return render(request, 'dev_conf_edit.html', kwargs)
438
523
439 def dev_conf_read(request, id_conf):
524 def dev_conf_read(request, id_conf):
440
525
441 conf = get_object_or_404(Configuration, pk=id_conf)
526 conf = get_object_or_404(Configuration, pk=id_conf)
442
527
443 messages.error(request, "Read View not implemented yet")
528 messages.error(request, "Read View not implemented yet")
444
529
445 return redirect('url_dev_conf', id_conf=conf.id)
530 return redirect('url_dev_conf', id_conf=conf.id)
446
531
447 def dev_conf_write(request, id_conf):
532 def dev_conf_write(request, id_conf):
448
533
449 conf = get_object_or_404(Configuration, pk=id_conf)
534 conf = get_object_or_404(Configuration, pk=id_conf)
450
535
451 messages.error(request, "Write View not implemented yet")
536 messages.error(request, "Write View not implemented yet")
452
537
453 return redirect('url_dev_conf', id_conf=conf.id)
538 return redirect('url_dev_conf', id_conf=conf.id)
454
539
455 def dev_conf_import(request, id_conf):
540 def dev_conf_import(request, id_conf):
456
541
457 conf = get_object_or_404(Configuration, pk=id_conf)
542 conf = get_object_or_404(Configuration, pk=id_conf)
458
543
459 messages.error(request, "Import View not implemented yet")
544 messages.error(request, "Import View not implemented yet")
460
545
461 return redirect('url_dev_conf', id_conf=conf.id)
546 return redirect('url_dev_conf', id_conf=conf.id)
462
547
463 def dev_conf_export(request, id_conf):
548 def dev_conf_export(request, id_conf):
464
549
465 conf = get_object_or_404(Configuration, pk=id_conf)
550 conf = get_object_or_404(Configuration, pk=id_conf)
466
551
467 messages.error(request, "Export View not implemented yet")
552 messages.error(request, "Export View not implemented yet")
468
553
469 return redirect('url_dev_conf', id_conf=conf.id)
554 return redirect('url_dev_conf', id_conf=conf.id)
470
555
471 def dev_conf_delete(request, id_conf):
556 def dev_conf_delete(request, id_conf):
472
557
473 conf = get_object_or_404(Configuration, pk=id_conf)
558 conf = get_object_or_404(Configuration, pk=id_conf)
474
559
475 if request.method=='POST':
560 if request.method=='POST':
476 if request.user.is_staff:
561 if request.user.is_staff:
477 id_exp = conf.experiment.id
562 id_exp = conf.experiment.id
478 conf.delete()
563 conf.delete()
479 return redirect('url_experiment', id_exp=id_exp)
564 return redirect('url_experiment', id_exp=id_exp)
480
565
481 return HttpResponse("Not enough permission to delete this object")
566 return HttpResponse("Not enough permission to delete this object")
482
567
483 kwargs = {'object':conf, 'conf_active':'active',
568 kwargs = {'object':conf, 'conf_active':'active',
484 'url_cancel':'url_dev_conf', 'id_item':id_conf}
569 'url_cancel':'url_dev_conf', 'id_item':id_conf}
485
570
486 ###### SIDEBAR ######
571 ###### SIDEBAR ######
487 kwargs.update(sidebar(conf))
572 kwargs.update(sidebar(conf))
488
573
489 return render(request, 'item_delete.html', kwargs)
574 return render(request, 'item_delete.html', kwargs)
490
575
491 def sidebar(conf):
576 def sidebar(conf):
492
577
493 experiments = Experiment.objects.filter(campaign=conf.experiment.campaign)
578 experiments = Experiment.objects.filter(campaign=conf.experiment.campaign)
494 configurations = Configuration.objects.filter(experiment=conf.experiment, type=0)
579 configurations = Configuration.objects.filter(experiment=conf.experiment, type=0)
495
580
496 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
581 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
497 conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address']
582 conf_keys = ['id', 'device']
498
583
499 kwargs = {}
584 kwargs = {}
500
585
501 kwargs['dev_conf'] = conf
586 kwargs['dev_conf'] = conf
502
587
503 kwargs['experiment_keys'] = exp_keys[1:]
588 kwargs['experiment_keys'] = exp_keys[1:]
504 kwargs['experiments'] = experiments.values(*exp_keys)
589 kwargs['experiments'] = experiments.values(*exp_keys)
505
590
506 kwargs['configuration_keys'] = conf_keys[1:]
591 kwargs['configuration_keys'] = conf_keys[1:]
507 kwargs['configurations'] = configurations.values(*conf_keys)
592 kwargs['configurations'] = configurations #.values(*conf_keys)
508
593
509 return kwargs No newline at end of file
594 return kwargs
General Comments 0
You need to be logged in to leave comments. Login now