##// END OF EJS Templates
delete interface added to views...
Miguel Urco -
r18:b1ece123c007
parent child
Show More
@@ -0,0 +1,33
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
3 {% load static %}
4 {% load main_tags %}
5
6 {% block dev-active %}{{dev_active}}{% endblock %}
7 {% block camp-active %}{{camp_active}}{% endblock %}
8 {% block exp-active %}{{exp_active}}{% endblock %}
9 {% block conf-active %}{{conf_active}}{% endblock %}
10
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
14 {% block content %}
15 <form action="" method="post">
16 {% csrf_token %}
17 <p>Are you sure you want to delete "{{ object }}"?</p>
18 <button type="button" class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_cancel">Cancel</button>
19 <button type=submit class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_ok">Confirm</button>
20 </form>
21 {% endblock %}
22
23 {% block sidebar%}
24 {% include "sidebar_devices.html" %}
25 {% endblock %}
26
27 {% block extra-js%}
28 <script type="text/javascript">
29 $("#bt_cancel").click(function() {
30 document.location = "{%if url_cancel%} {% url url_cancel id_item %} {%endif%}";
31 });
32 </script>
33 {% endblock %} No newline at end of file
@@ -1,104 +1,106
1 from itertools import chain
1 from itertools import chain
2 from django.db import models
2 from django.db import models
3 from polymorphic import PolymorphicModel
3 from polymorphic import PolymorphicModel
4
4
5 CONF_STATES = (
5 CONF_STATES = (
6 (0, 'Active'),
6 (0, 'Active'),
7 (1, 'Historial'),
7 (1, 'Historial'),
8 )
8 )
9
9
10 DEV_STATES = (
10 DEV_STATES = (
11 (0, 'No connected'),
11 (0, 'No connected'),
12 (1, 'Connected'),
12 (1, 'Connected'),
13 (2, 'Configured'),
13 (2, 'Configured'),
14 (3, 'Running'),
14 (3, 'Running'),
15 )
15 )
16
16
17 DEV_TYPES = (
17 DEV_TYPES = (
18 ('', 'Select a device type'),
18 ('', 'Select a device type'),
19 ('rc', 'Radar Controller'),
19 ('rc', 'Radar Controller'),
20 ('dds', 'Direct Digital Synthesizer'),
20 ('dds', 'Direct Digital Synthesizer'),
21 ('jars', 'Jicamarca Radar System'),
21 ('jars', 'Jicamarca Radar System'),
22 ('usrp', 'Universal Software Radio Peripheral'),
22 ('usrp', 'Universal Software Radio Peripheral'),
23 ('cgs', 'Clock Generator System'),
23 ('cgs', 'Clock Generator System'),
24 ('abs', 'Automatic Beam Switching'),
24 ('abs', 'Automatic Beam Switching'),
25 )
25 )
26
26
27 # Create your models here.
27 # Create your models here.
28
28
29 class DeviceType(models.Model):
29 class DeviceType(models.Model):
30
30
31 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
31 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
32
32
33 description = models.TextField(blank=True, null=True)
33 description = models.TextField(blank=True, null=True)
34
34
35 # info = models.TextField(blank=True, null=True)
35 # info = models.TextField(blank=True, null=True)
36 # status = models.PositiveSmallIntegerField(default=1, choices=STATES)
36 # status = models.PositiveSmallIntegerField(default=1, choices=STATES)
37
37
38 class Meta:
38 class Meta:
39 db_table = 'db_device_types'
39 db_table = 'db_device_types'
40
40
41 def __unicode__(self):
41 def __unicode__(self):
42 return u'%s' % self.name
42 return u'%s' % self.name
43
43
44 class Device(models.Model):
44 class Device(models.Model):
45
45
46 device_type = models.ForeignKey(DeviceType)
46 device_type = models.ForeignKey(DeviceType)
47 name = models.CharField(max_length=40, default='')
47 name = models.CharField(max_length=40, default='')
48 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
48 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
49 port_address = models.PositiveSmallIntegerField(default=2000)
49 port_address = models.PositiveSmallIntegerField(default=2000)
50 description = models.TextField(blank=True, null=True)
50 description = models.TextField(blank=True, null=True)
51 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
51 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
52
52
53 # serial_number = models.CharField(max_length=40, default='')
53 # serial_number = models.CharField(max_length=40, default='')
54 # mac_address = models.CharField(max_length = 20, null=True, blank=True)
54 # mac_address = models.CharField(max_length = 20, null=True, blank=True)
55
55
56
56
57 class Meta:
57 class Meta:
58 db_table = 'db_devices'
58 db_table = 'db_devices'
59
59
60 def __unicode__(self):
60 def __unicode__(self):
61 return u'[%s]: %s | %s' % (self.device_type.name, self.name, self.ip_address)
61 return u'[%s]: %s | %s' % (self.device_type.name, self.name, self.ip_address)
62
62
63 class Campaign(models.Model):
63 class Campaign(models.Model):
64
64
65 name = models.CharField(max_length=40, unique=True)
65 name = models.CharField(max_length=40, unique=True)
66 start_date = models.DateTimeField(blank=True, null=True)
66 start_date = models.DateTimeField(blank=True, null=True)
67 end_date = models.DateTimeField(blank=True, null=True)
67 end_date = models.DateTimeField(blank=True, null=True)
68 tags = models.CharField(max_length=40)
68 tags = models.CharField(max_length=40)
69 description = models.TextField(blank=True, null=True)
69 description = models.TextField(blank=True, null=True)
70 template = models.BooleanField(default=False)
70 template = models.BooleanField(default=False)
71
71
72 class Meta:
72 class Meta:
73 db_table = 'db_campaigns'
73 db_table = 'db_campaigns'
74
74
75 def __unicode__(self):
75 def __unicode__(self):
76 return u'%s: %s - %s' % (self.name, self.start_date.date(), self.end_date.date())
76 return u'%s: %s - %s' % (self.name, self.start_date.date(), self.end_date.date())
77
77
78 class Experiment(models.Model):
78 class Experiment(models.Model):
79
79
80 campaign = models.ForeignKey(Campaign)
80 campaign = models.ForeignKey(Campaign)
81 name = models.CharField(max_length=40, default='')
81 name = models.CharField(max_length=40, default='')
82 start_time = models.TimeField(default='00:00:00')
82 start_time = models.TimeField(default='00:00:00')
83 end_time = models.TimeField(default='23:59:59')
83 end_time = models.TimeField(default='23:59:59')
84
84
85 class Meta:
85 class Meta:
86 db_table = 'db_experiments'
86 db_table = 'db_experiments'
87
87
88 def __unicode__(self):
88 def __unicode__(self):
89 return u'[%s]: %s: %s - %s' % (self.campaign.name, self.name, self.start_time, self.end_time)
89 return u'[%s]: %s: %s - %s' % (self.campaign.name, self.name, self.start_time, self.end_time)
90
90
91 class Configuration(PolymorphicModel):
91 class Configuration(PolymorphicModel):
92
92
93 experiment = models.ForeignKey(Experiment)
93 experiment = models.ForeignKey(Experiment)
94 device = models.ForeignKey(Device)
94 device = models.ForeignKey(Device)
95 status = models.PositiveSmallIntegerField(default=0, choices=CONF_STATES)
95 status = models.PositiveSmallIntegerField(default=0, choices=CONF_STATES)
96 date = models.DateTimeField(auto_now=True, blank=True)
96 date = models.DateTimeField(auto_now=True, blank=True)
97
97
98 # parameters = models.TextField(default='{}')
98 # parameters = models.TextField(default='{}')
99 class Meta:
99 class Meta:
100 db_table = 'db_configurations'
100 db_table = 'db_configurations'
101
101
102 def __unicode__(self):
102 def __unicode__(self):
103 return u'%s [%s]' % (self.experiment.name, self.device.name)
103 return u'[%s - %s]: %s' % (self.experiment.campaign.name,
104 self.experiment.name,
105 self.device.name)
104 No newline at end of file
106
@@ -1,117 +1,117
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="screen" rel="stylesheet">
11 <link href="{% static 'css/bootstrap-flatly.min.css' %}" media="screen" 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>
40 <li class=" dropdown {% block camp-active %}{% endblock %}"><a href="{% url 'url_campaigns'%}">Campaigns</a>
42 <li class=" dropdown {% block camp-active %}{% endblock %}"><a href="{% url 'url_campaigns'%}">Campaigns</a>
41 </li>
43 </li>
42 <li class=" dropdown {% block exp-active %}{% endblock %}"><a href="{% url 'url_experiments'%}">Experiments</a>
44 <li class=" dropdown {% block exp-active %}{% endblock %}"><a href="{% url 'url_experiments'%}">Experiments</a>
43 </li>
45 </li>
44 <li class=" dropdown {% block dev-active %}{% endblock %}"><a href="{% url 'url_devices'%}">Devices</a>
45 </li>
46 <li class=" dropdown {% block conf-active %}{% endblock %}"><a href="{% url 'url_dev_confs'%}">Device Configurations</a>
46 <li class=" dropdown {% block conf-active %}{% endblock %}"><a href="{% url 'url_dev_confs'%}">Device Configurations</a>
47 </li>
47 </li>
48 </ul>
48 </ul>
49 <ul class="nav navbar-nav navbar-right">
49 <ul class="nav navbar-nav navbar-right">
50 <li class="nav-divider"></li>
50 <li class="nav-divider"></li>
51 {% if user.is_authenticated %}
51 {% if user.is_authenticated %}
52 <li class="dropdown">
52 <li class="dropdown">
53 <a href="#" class="dropdown-toggle" data-toggle="dropdown">Hi {{ user.username }}<span class="caret"></span></a>
53 <a href="#" class="dropdown-toggle" data-toggle="dropdown">Hi {{ user.username }}<span class="caret"></span></a>
54 <ul class="dropdown-menu" role="menu">
54 <ul class="dropdown-menu" role="menu">
55 <li><a href="#">Control Panel</a></li>
55 <li><a href="#">Control Panel</a></li>
56 <li><a href="{% url 'django.contrib.auth.views.logout' %}">Logout</a></li>
56 <li><a href="{% url 'django.contrib.auth.views.logout' %}">Logout</a></li>
57 </ul>
57 </ul>
58 </li>
58 </li>
59 {% else %}
59 {% else %}
60 <li><a href="{% url 'django.contrib.auth.views.login' %}?next={{request.get_full_path}}">Login</a></li>
60 <li><a href="{% url 'django.contrib.auth.views.login' %}?next={{request.get_full_path}}">Login</a></li>
61 {% endif %}
61 {% endif %}
62 </ul>
62 </ul>
63 </div>
63 </div>
64 </div>
64 </div>
65 </nav>
65 </nav>
66 <div style="clear: both;"></div>
66 <div style="clear: both;"></div>
67 {% endblock %}
67 {% endblock %}
68
68
69 <div class="container">
69 <div class="container">
70 <div id="page" class="row" style="min-height:600px">
70 <div id="page" class="row" style="min-height:600px">
71
71
72 <div class="col-md-3 hidden-xs hidden-sm" role="complementary">
72 <div class="col-md-3 hidden-xs hidden-sm" role="complementary">
73 <br><br>
73 <br><br>
74 <div id="sidebar">
74 <div id="sidebar">
75 {% block sidebar%}
75 {% block sidebar%}
76 {% endblock %}
76 {% endblock %}
77 </div>
77 </div>
78 </div>
78 </div>
79
79
80 <div class="col-md-9 col-xs-12" role="main">
80 <div class="col-md-9 col-xs-12" role="main">
81 <div class="page-header">
81 <div class="page-header">
82 <h1>{% block content-title %}{% endblock %} <small>{% block content-suptitle %}{% endblock %}</small></h1>
82 <h1>{% block content-title %}{% endblock %} <small>{% block content-suptitle %}{% endblock %}</small></h1>
83 <hr>
83 <hr>
84 </div>
84 </div>
85 {% block content %}
85 {% block content %}
86 {% endblock %}
86 {% endblock %}
87 <br>
87 <br>
88 {% block messages %}
88 {% block messages %}
89 {% endblock %}
89 {% endblock %}
90 </div>
90 </div>
91
91
92
92
93 </div><!--/row-->
93 </div><!--/row-->
94 </div> <!-- container -->
94 </div> <!-- container -->
95
95
96 <div id="debug">{{debug}}</div>
96 <div id="debug">{{debug}}</div>
97
97
98 {% block footer %}
98 {% block footer %}
99 <footer class="footer">
99 <footer class="footer">
100 <div class="container">
100 <div class="container">
101 <p><hr></p>
101 <p><hr></p>
102 <p>
102 <p>
103 &copy; <a href="http://jro.igp.gob.pe">Jicamarca Radio Observatory</a> - {% now "Y" %}
103 &copy; <a href="http://jro.igp.gob.pe">Jicamarca Radio Observatory</a> - {% now "Y" %}
104 </p>
104 </p>
105 </div>
105 </div>
106 </footer>
106 </footer>
107 {% endblock %}
107 {% endblock %}
108
108
109 {# bootstrap_javascript jquery=True #}
109 {# bootstrap_javascript jquery=True #}
110 <script src="{% static 'js/jquery.min.js' %}"></script>
110 <script src="{% static 'js/jquery.min.js' %}"></script>
111 <script src="{% static 'js/bootstrap.min.js' %}"></script>
111 <script src="{% static 'js/bootstrap.min.js' %}"></script>
112
112
113 {% block extra-js %}
113 {% block extra-js %}
114 {% endblock%}
114 {% endblock%}
115 </body>
115 </body>
116 </html>
116 </html>
117
117
@@ -1,86 +1,84
1 {% extends "base.html" %}
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
2 {% load bootstrap3 %}
3 {% load static %}
3 {% load static %}
4 {% load main_tags %}
4 {% load main_tags %}
5 {% block extra-head %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
7 {% endblock %}
8
8
9 {% block camp-active %}active{% endblock %}
9 {% block camp-active %}active{% endblock %}
10
10
11 {% block content-title %}{{title}}{% endblock %}
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
13
14 {% block content %}
14 {% block content %}
15 <table class="table table-bordered">
15 <table class="table table-bordered">
16 {% for key in campaign_keys %}
16 {% for key in campaign_keys %}
17 <tr><th>{{key|title}}</th><td>{{campaign|attr:key}}</td></tr>
17 <tr><th>{{key|title}}</th><td>{{campaign|attr:key}}</td></tr>
18 {% endfor %}
18 {% endfor %}
19 </table>
19 </table>
20
20
21 <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_export">Export</button>
22 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_edit">Edit</button>
22 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_edit">Edit</button>
23
23
24 <br></br>
24 <br></br>
25 <br></br>
25 <br></br>
26
26
27 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
27 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
28
28
29 <div class="panel panel-default">
29 <div class="panel panel-default">
30 <div class="panel-heading" role="tab" id="headingTwo">
30 <div class="panel-heading" role="tab" id="headingTwo">
31 <h4 class="panel-title">
31 <h4 class="panel-title">
32 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
32 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
33 Experiment List
33 Experiment List
34 </a>
34 </a>
35 </h4>
35 </h4>
36 </div>
36 </div>
37
37
38 <div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">
38 <div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">
39 <div class="panel-body">
39 <div class="panel-body">
40 <table class="table table-hover">
40 <table class="table table-hover">
41 <tr>
41 <tr>
42 <th>#</th>
42 <th>#</th>
43 {% for header in experiment_keys %}
43 {% for header in experiment_keys %}
44 <th>{{ header|title }}</th>
44 <th>{{ header|title }}</th>
45 {% endfor%}
45 {% endfor%}
46 </tr>
46 </tr>
47 {% for item in experiments %}
47 {% for item in experiments %}
48 <tr class="clickable-row" data-href="{% url 'url_experiment' item.id %}">
48 <tr class="clickable-row" data-href="{% url 'url_experiment' item.id %}">
49 <td>{{ forloop.counter }}</td>
49 <td>{{ forloop.counter }}</td>
50 {% for key in experiment_keys %}
50 {% for key in experiment_keys %}
51 <td>{{ item|attr:key }}</td>
51 <td>{{ item|attr:key }}</td>
52 {% endfor %}
52 {% endfor %}
53 </tr>
53 </tr>
54 {% endfor %}
54 {% endfor %}
55 </table>
55 </table>
56 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
56 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
57 </div>
57 </div>
58 </div>
58 </div>
59 </div>
59 </div>
60 </div>
60 </div>
61 {% endblock %}
61 {% endblock %}
62
62
63 {% block sidebar%}
63 {% block sidebar%}
64 {% include "sidebar_devices.html" %}
64 {% include "sidebar_devices.html" %}
65 {% endblock %}
65 {% endblock %}
66
66
67 {% block extra-js%}
67 {% block extra-js%}
68 <script src="{% static 'js/moment.min.js' %}"></script>
69 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
70 <script type="text/javascript">
68 <script type="text/javascript">
71 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
69 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
72
70
73 $(".clickable-row").click(function() {
71 $(".clickable-row").click(function() {
74 document.location = $(this).data("href");
72 document.location = $(this).data("href");
75 });
73 });
76
74
77 $("#bt_edit").click(function() {
75 $("#bt_edit").click(function() {
78 document.location = "{% url 'url_edit_campaign' campaign.id%}";
76 document.location = "{% url 'url_edit_campaign' campaign.id%}";
79 });
77 });
80
78
81 $("#bt_add").click(function() {
79 $("#bt_add").click(function() {
82 document.location = "{% url 'url_add_experiment' campaign.id%}";
80 document.location = "{% url 'url_add_experiment' campaign.id%}";
83 });
81 });
84
82
85 </script>
83 </script>
86 {% endblock %} No newline at end of file
84 {% endblock %}
@@ -1,35 +1,34
1 {% extends "base.html" %}
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
2 {% load bootstrap3 %}
3 {% load static %}
3 {% load static %}
4 {% load main_tags %}
4 {% load main_tags %}
5 {% block extra-head %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
7 {% endblock %}
8
8
9 {% block camp-active %}active{% endblock %}
9 {% block camp-active %}active{% endblock %}
10
10
11 {% block content-title %}{{title}}{% endblock %}
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
13
14 {% block content %}
14 {% block content %}
15 <form class="form" method="post" action="">
15 <form class="form" method="post" action="">
16 {% csrf_token %}
16 {% csrf_token %}
17 {% bootstrap_form form layout='horizontal' size='medium' %}
17 {% bootstrap_form form layout='horizontal' size='medium' %}
18 <div style="clear: both;"></div>
18 <div style="clear: both;"></div>
19 <br>
19 <br>
20 <button type="submit" class="btn btn-primary pull-right">{{button}}</button>
20 <button type="submit" class="btn btn-primary pull-right">{{button}}</button>
21 </form>
21 </form>
22 {% endblock %}
22 {% endblock %}
23
23
24 {% block sidebar%}
24 {% block sidebar%}
25 {% include "sidebar_devices.html" %}
25 {% include "sidebar_devices.html" %}
26 {% endblock %}
26 {% endblock %}
27
27
28 {% block extra-js%}
28 {% block extra-js%}
29 <script src="{% static 'js/moment.min.js' %}"></script>
30 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
29 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
31 <script type="text/javascript">
30 <script type="text/javascript">
32 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
31 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
33
32
34 </script>
33 </script>
35 {% endblock %} No newline at end of file
34 {% endblock %}
@@ -1,54 +1,50
1 {% extends "base.html" %}
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
2 {% load bootstrap3 %}
3 {% load static %}
3 {% load static %}
4 {% load main_tags %}
4 {% load main_tags %}
5 {% block extra-head %}
5 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
7 {% endblock %}
8
8
9 {% block camp-active %}active{% endblock %}
9 {% block camp-active %}active{% endblock %}
10
10
11 {% block content-title %}{{title}}{% endblock %}
11 {% block content-title %}{{title}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13
13
14 {% block content %}
14 {% block content %}
15 <table class="table table-hover">
15 <table class="table table-hover">
16 <tr>
16 <tr>
17 <th>#</th>
17 <th>#</th>
18 {% for key in campaign_keys %}
18 {% for key in campaign_keys %}
19 <th>{{ key|title }}</th>
19 <th>{{ key|title }}</th>
20 {% endfor%}
20 {% endfor%}
21 </tr>
21 </tr>
22 {% for campaign in campaigns %}
22 {% for campaign in campaigns %}
23 <tr class="clickable-row" data-href="{% url 'url_campaign' campaign.id %}">
23 <tr class="clickable-row" data-href="{% url 'url_campaign' campaign.id %}">
24 <td>{{ forloop.counter }}</td>
24 <td>{{ forloop.counter }}</td>
25 {% for key in campaign_keys %}
25 {% for key in campaign_keys %}
26 <td>{{ campaign|attr:key }}</td>
26 <td>{{ campaign|attr:key }}</td>
27 {% endfor %}
27 {% endfor %}
28 </tr>
28 </tr>
29 {% endfor %}
29 {% endfor %}
30 </table>
30 </table>
31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
32 {% endblock %}
32 {% endblock %}
33
33
34 {% block sidebar%}
34 {% block sidebar%}
35 {% include "sidebar_devices.html" %}
35 {% include "sidebar_devices.html" %}
36 {% endblock %}
36 {% endblock %}
37
37
38 {% block extra-js%}
38 {% block extra-js%}
39 <script src="{% static 'js/moment.min.js' %}"></script>
40 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
41 <script type="text/javascript">
39 <script type="text/javascript">
42 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
43 $('.input-group.time').datetimepicker({"format": "HH:mm"});
44
40
45 $("#bt_add").click(function() {
41 $("#bt_add").click(function() {
46 document.location = "{% url 'url_add_campaign' %}";
42 document.location = "{% url 'url_add_campaign' %}";
47 });
43 });
48
44
49 $(".clickable-row").click(function() {
45 $(".clickable-row").click(function() {
50 document.location = $(this).data("href");
46 document.location = $(this).data("href");
51 });
47 });
52
48
53 </script>
49 </script>
54 {% endblock %} No newline at end of file
50 {% endblock %}
@@ -1,54 +1,50
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 conf-active %}active{% endblock %}
9 {% block conf-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-hover">
15 <table class="table table-hover">
16 <tr>
16 <tr>
17 <th>#</th>
17 <th>#</th>
18 {% for key in configuration_keys %}
18 {% for key in configuration_keys %}
19 <th>{{ key|title }}</th>
19 <th>{{ key|title }}</th>
20 {% endfor%}
20 {% endfor%}
21 </tr>
21 </tr>
22 {% for item in configurations %}
22 {% for item in configurations %}
23 <tr class="clickable-row" data-href="/{{item.device__device_type__name}}/{{item.id}}/">
23 <tr class="clickable-row" data-href="/{{item.device__device_type__name}}/{{item.id}}/">
24 <td>{{ forloop.counter }}</td>
24 <td>{{ forloop.counter }}</td>
25 {% for key in configuration_keys %}
25 {% for key in configuration_keys %}
26 <td>{{ item|attr:key }}</td>
26 <td>{{ item|attr:key }}</td>
27 {% endfor %}
27 {% endfor %}
28 </tr>
28 </tr>
29 {% endfor %}
29 {% endfor %}
30 </table>
30 </table>
31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
32 {% endblock %}
32 {% endblock %}
33
33
34 {% block sidebar%}
34 {% block sidebar%}
35 {% include "sidebar_devices.html" %}
35 {% include "sidebar_devices.html" %}
36 {% endblock %}
36 {% endblock %}
37
37
38 {% block extra-js%}
38 {% block extra-js%}
39 <script src="{% static 'js/moment.min.js' %}"></script>
40 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
41 <script type="text/javascript">
39 <script type="text/javascript">
42 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
40
43 $('.input-group.time').datetimepicker({"format": "HH:mm"});
44
45 $("#bt_add").click(function() {
41 $("#bt_add").click(function() {
46 document.location = "{% url 'url_add_dev_conf' 0%}";
42 document.location = "{% url 'url_add_dev_conf' 0%}";
47 });
43 });
48
44
49 $(".clickable-row").click(function() {
45 $(".clickable-row").click(function() {
50 document.location = $(this).data("href");
46 document.location = $(this).data("href");
51 });
47 });
52
48
53 </script>
49 </script>
54 {% endblock %} No newline at end of file
50 {% endblock %}
@@ -1,36 +1,34
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 dev-active %}active{% endblock %}
6 {% block dev-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 <table class="table table-bordered">
12 <table class="table table-bordered">
13 {% for key in device_keys %}
13 {% for key in device_keys %}
14 <tr><th>{{key|title}}</th><td>{{device|attr:key}}</td></tr>
14 <tr><th>{{key|title}}</th><td>{{device|attr:key}}</td></tr>
15 {% endfor %}
15 {% endfor %}
16 </table>
16 </table>
17 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_edit_device">Edit</button>
17 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_edit_device">Edit</button>
18 <br></br>
18 <br></br>
19 <br></br>
19 <br></br>
20 {% endblock %}
20 {% endblock %}
21
21
22 {% block sidebar%}
22 {% block sidebar%}
23 {% include "sidebar_devices.html" %}
23 {% include "sidebar_devices.html" %}
24 {% endblock %}
24 {% endblock %}
25
25
26 {% block extra-js%}
26 {% block extra-js%}
27 <script src="{% static 'js/moment.min.js' %}"></script>
28 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
29 <script type="text/javascript">
27 <script type="text/javascript">
30
28
31 $("#bt_edit_device").click(function() {
29 $("#bt_edit_device").click(function() {
32 document.location = "{% url 'url_edit_device' device.id%}";
30 document.location = "{% url 'url_edit_device' device.id%}";
33 });
31 });
34
32
35 </script>
33 </script>
36 {% endblock %} No newline at end of file
34 {% endblock %}
@@ -1,49 +1,47
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 dev-active %}active{% endblock %}
6 {% block dev-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 <table class="table table-hover">
12 <table class="table table-hover">
13 <tr>
13 <tr>
14 <th>#</th>
14 <th>#</th>
15 {% for key in device_keys %}
15 {% for key in device_keys %}
16 <th>{{ key|title }}</th>
16 <th>{{ key|title }}</th>
17 {% endfor%}
17 {% endfor%}
18 </tr>
18 </tr>
19 {% for device in devices %}
19 {% for device in devices %}
20 <tr class="clickable-row" data-href="{% url 'url_device' device.id %}">
20 <tr class="clickable-row" data-href="{% url 'url_device' device.id %}">
21 <td>{{ forloop.counter }}</td>
21 <td>{{ forloop.counter }}</td>
22 {% for key in device_keys %}
22 {% for key in device_keys %}
23 <td>{{ device|attr:key }}</td>
23 <td>{{ device|attr:key }}</td>
24 {% endfor %}
24 {% endfor %}
25 </tr>
25 </tr>
26 {% endfor %}
26 {% endfor %}
27 </table>
27 </table>
28 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
28 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
29 {% endblock %}
29 {% endblock %}
30
30
31 {% block sidebar%}
31 {% block sidebar%}
32 {% include "sidebar_devices.html" %}
32 {% include "sidebar_devices.html" %}
33 {% endblock %}
33 {% endblock %}
34
34
35 {% block extra-js%}
35 {% block extra-js%}
36 <script src="{% static 'js/moment.min.js' %}"></script>
37 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
38 <script type="text/javascript">
36 <script type="text/javascript">
39
37
40 $("#bt_add").click(function() {
38 $("#bt_add").click(function() {
41 document.location = "{% url 'url_add_device' %}";
39 document.location = "{% url 'url_add_device' %}";
42 });
40 });
43
41
44 $(".clickable-row").click(function() {
42 $(".clickable-row").click(function() {
45 document.location = $(this).data("href");
43 document.location = $(this).data("href");
46 });
44 });
47
45
48 </script>
46 </script>
49 {% endblock %} No newline at end of file
47 {% endblock %}
@@ -1,83 +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_keys %}
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.device__device_type__name}}/{{item.id}}/">
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|attr: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
66 <script src="{% static 'js/moment.min.js' %}"></script>
67 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
68 <script type="text/javascript">
65 <script type="text/javascript">
69
66
70 $(".clickable-row").click(function() {
67 $(".clickable-row").click(function() {
71 document.location = $(this).data("href");
68 document.location = $(this).data("href");
72 });
69 });
73
70
74 $("#bt_edit").click(function() {
71 $("#bt_edit").click(function() {
75 document.location = "{% url 'url_edit_experiment' experiment.id%}";
72 document.location = "{% url 'url_edit_experiment' experiment.id%}";
76 });
73 });
77
74
78 $("#bt_add_conf").click(function() {
75 $("#bt_add_conf").click(function() {
79 document.location = "{% url 'url_add_dev_conf' experiment.id%}";
76 document.location = "{% url 'url_add_dev_conf' experiment.id%}";
80 });
77 });
81
78
82 </script>
79 </script>
83 {% endblock %} No newline at end of file
80 {% endblock %}
@@ -1,35 +1,33
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 <form class="form" method="post" action="">
15 <form class="form" method="post" action="">
16 {% csrf_token %}
16 {% csrf_token %}
17 {% bootstrap_form form layout='horizontal' size='medium' %}
17 {% bootstrap_form form layout='horizontal' size='medium' %}
18 <div style="clear: both;"></div>
18 <div style="clear: both;"></div>
19 <br>
19 <br>
20 <button type="submit" class="btn btn-primary pull-right">{{button}}</button>
20 <button type="submit" class="btn btn-primary pull-right">{{button}}</button>
21 </form>
21 </form>
22 {% endblock %}
22 {% endblock %}
23
23
24 {% block sidebar%}
24 {% block sidebar%}
25 {% include "sidebar_devices.html" %}
25 {% include "sidebar_devices.html" %}
26 {% endblock %}
26 {% endblock %}
27
27
28 {% block extra-js%}
28 {% block extra-js%}
29
30 <script src="{% static 'js/moment.min.js' %}"></script>
31 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
29 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
32 <script type="text/javascript">
30 <script type="text/javascript">
33 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
31 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
34 </script>
32 </script>
35 {% endblock %} No newline at end of file
33 {% endblock %}
@@ -1,54 +1,50
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-hover">
15 <table class="table table-hover">
16 <tr>
16 <tr>
17 <th>#</th>
17 <th>#</th>
18 {% for key in experiment_keys %}
18 {% for key in experiment_keys %}
19 <th>{{ key|title }}</th>
19 <th>{{ key|title }}</th>
20 {% endfor%}
20 {% endfor%}
21 </tr>
21 </tr>
22 {% for experiment in experiments %}
22 {% for experiment in experiments %}
23 <tr class="clickable-row" data-href="{% url 'url_experiment' experiment.id %}">
23 <tr class="clickable-row" data-href="{% url 'url_experiment' experiment.id %}">
24 <td>{{ forloop.counter }}</td>
24 <td>{{ forloop.counter }}</td>
25 {% for key in experiment_keys %}
25 {% for key in experiment_keys %}
26 <td>{{ experiment|attr:key }}</td>
26 <td>{{ experiment|attr:key }}</td>
27 {% endfor %}
27 {% endfor %}
28 </tr>
28 </tr>
29 {% endfor %}
29 {% endfor %}
30 </table>
30 </table>
31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
32 {% endblock %}
32 {% endblock %}
33
33
34 {% block sidebar%}
34 {% block sidebar%}
35 {% include "sidebar_devices.html" %}
35 {% include "sidebar_devices.html" %}
36 {% endblock %}
36 {% endblock %}
37
37
38 {% block extra-js%}
38 {% block extra-js%}
39
40 <script src="{% static 'js/moment.min.js' %}"></script>
41 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
42 <script type="text/javascript">
39 <script type="text/javascript">
43 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
40
44
45 $(".clickable-row").click(function() {
41 $(".clickable-row").click(function() {
46 document.location = $(this).data("href");
42 document.location = $(this).data("href");
47 });
43 });
48
44
49 $("#bt_add").click(function() {
45 $("#bt_add").click(function() {
50 document.location = "{% url 'url_add_experiment' 0 %}";
46 document.location = "{% url 'url_add_experiment' 0 %}";
51 });
47 });
52
48
53 </script>
49 </script>
54 {% endblock %} No newline at end of file
50 {% endblock %}
@@ -1,25 +1,27
1 from django.conf.urls import url
1 from django.conf.urls import url
2
2
3 urlpatterns = (
3 urlpatterns = (
4
5 url(r'^device/add/$', 'apps.main.views.add_device', name='url_add_device'),
4 url(r'^device/add/$', 'apps.main.views.add_device', name='url_add_device'),
6 url(r'^device/$', 'apps.main.views.devices', name='url_devices'),
5 url(r'^device/$', 'apps.main.views.devices', name='url_devices'),
7 url(r'^device/(?P<id_dev>-?\d+)/$', 'apps.main.views.device', name='url_device'),
6 url(r'^device/(?P<id_dev>-?\d+)/$', 'apps.main.views.device', name='url_device'),
8 url(r'^device/(?P<id_dev>-?\d+)/edit/$', 'apps.main.views.edit_device', name='url_edit_device'),
7 url(r'^device/(?P<id_dev>-?\d+)/edit/$', 'apps.main.views.edit_device', name='url_edit_device'),
8 url(r'^device/(?P<id_dev>-?\d+)/delete/$', 'apps.main.views.delete_device', name='url_delete_device'),
9
9
10 url(r'^campaign/add/$', 'apps.main.views.add_campaign', name='url_add_campaign'),
10 url(r'^campaign/add/$', 'apps.main.views.add_campaign', name='url_add_campaign'),
11 url(r'^campaign/$', 'apps.main.views.campaigns', name='url_campaigns'),
11 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'),
12 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.edit_campaign', name='url_edit_campaign'),
13 url(r'^campaign/(?P<id_camp>-?\d+)/edit/$', 'apps.main.views.edit_campaign', name='url_edit_campaign'),
14 url(r'^campaign/(?P<id_camp>-?\d+)/delete/$', 'apps.main.views.delete_campaign', name='url_delete_campaign'),
14
15
15 url(r'^campaign/(?P<id_camp>-?\d+)/add_experiment/$', 'apps.main.views.add_experiment', name='url_add_experiment'),
16 url(r'^campaign/(?P<id_camp>-?\d+)/add_experiment/$', 'apps.main.views.add_experiment', name='url_add_experiment'),
16 url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'),
17 url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'),
17 url(r'^experiment/(?P<id_exp>-?\d+)/$', 'apps.main.views.experiment', name='url_experiment'),
18 url(r'^experiment/(?P<id_exp>-?\d+)/$', 'apps.main.views.experiment', name='url_experiment'),
18 url(r'^experiment/(?P<id_exp>-?\d+)/edit/$', 'apps.main.views.edit_experiment', name='url_edit_experiment'),
19 url(r'^experiment/(?P<id_exp>-?\d+)/edit/$', 'apps.main.views.edit_experiment', name='url_edit_experiment'),
19
20 url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', 'apps.main.views.delete_experiment', name='url_delete_experiment'),
21
20 url(r'^experiment/(?P<id_exp>-?\d+)/add_dev_conf/$', 'apps.main.views.add_dev_conf', name='url_add_dev_conf'),
22 url(r'^experiment/(?P<id_exp>-?\d+)/add_dev_conf/$', 'apps.main.views.add_dev_conf', name='url_add_dev_conf'),
21 url(r'^dev_conf/$', 'apps.main.views.dev_confs', name='url_dev_confs'),
23 url(r'^dev_conf/$', 'apps.main.views.dev_confs', name='url_dev_confs'),
22 url(r'^dev_conf/(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_dev_conf'),
24 url(r'^dev_conf/(?P<id_conf>-?\d+)/$', 'apps.main.views.dev_conf', name='url_dev_conf'),
23 url(r'^dev_conf/(?P<id_conf>-?\d+)/edit/$', 'apps.main.views.edit_dev_conf', name='url_edit_dev_conf'),
25 url(r'^dev_conf/(?P<id_conf>-?\d+)/edit/$', 'apps.main.views.edit_dev_conf', name='url_edit_dev_conf'),
24
26 url(r'^dev_conf/(?P<id_conf>-?\d+)/delete/$', 'apps.main.views.delete_dev_conf', name='url_delete_dev_conf'),
25 )
27 )
@@ -1,507 +1,569
1 from django.shortcuts import render, redirect
1 from django.shortcuts import render, redirect, HttpResponse
2
2
3 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm
3 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm
4 from apps.cgs.forms import CGSConfigurationForm
4 from apps.cgs.forms import CGSConfigurationForm
5 from apps.jars.forms import JARSConfigurationForm
5 from apps.jars.forms import JARSConfigurationForm
6 from apps.usrp.forms import USRPConfigurationForm
6 from apps.usrp.forms import USRPConfigurationForm
7 from apps.abs.forms import ABSConfigurationForm
7 from apps.abs.forms import ABSConfigurationForm
8 from apps.rc.forms import RCConfigurationForm
8 from apps.rc.forms import RCConfigurationForm
9 from apps.dds.forms import DDSConfigurationForm
9 from apps.dds.forms import DDSConfigurationForm
10
10
11 from .models import Campaign, Experiment, Device, Configuration
11 from .models import Campaign, Experiment, Device, Configuration
12 from apps.cgs.models import CGSConfiguration
12 from apps.cgs.models import CGSConfiguration
13 from apps.jars.models import JARSConfiguration
13 from apps.jars.models import JARSConfiguration
14 from apps.usrp.models import USRPConfiguration
14 from apps.usrp.models import USRPConfiguration
15 from apps.abs.models import ABSConfiguration
15 from apps.abs.models import ABSConfiguration
16 from apps.rc.models import RCConfiguration
16 from apps.rc.models import RCConfiguration
17 from apps.dds.models import DDSConfiguration
17 from apps.dds.models import DDSConfiguration
18
18
19 # Create your views here.
19 # Create your views here.
20
20
21 CONF_FORMS = {
21 CONF_FORMS = {
22 'rc': RCConfigurationForm,
22 'rc': RCConfigurationForm,
23 'dds': DDSConfigurationForm,
23 'dds': DDSConfigurationForm,
24 'jars': JARSConfigurationForm,
24 'jars': JARSConfigurationForm,
25 'cgs': CGSConfigurationForm,
25 'cgs': CGSConfigurationForm,
26 'abs': ABSConfigurationForm,
26 'abs': ABSConfigurationForm,
27 'usrp': USRPConfigurationForm,
27 'usrp': USRPConfigurationForm,
28 }
28 }
29
29
30 CONF_MODELS = {
30 CONF_MODELS = {
31 'rc': RCConfiguration,
31 'rc': RCConfiguration,
32 'dds': DDSConfiguration,
32 'dds': DDSConfiguration,
33 'jars': JARSConfiguration,
33 'jars': JARSConfiguration,
34 'cgs': CGSConfiguration,
34 'cgs': CGSConfiguration,
35 'abs': ABSConfiguration,
35 'abs': ABSConfiguration,
36 'usrp': USRPConfiguration,
36 'usrp': USRPConfiguration,
37 }
37 }
38
38
39 def index(request):
39 def index(request):
40 kwargs = {}
40 kwargs = {}
41
41
42 return render(request, 'index.html', kwargs)
42 return render(request, 'index.html', kwargs)
43
43
44 def devices(request):
44 def devices(request):
45
45
46 devices = Device.objects.all().order_by('device_type__name')
46 devices = Device.objects.all().order_by('device_type__name')
47
47
48 keys = ['id', 'device_type__name', 'name', 'ip_address']
48 keys = ['id', 'device_type__name', 'name', 'ip_address']
49
49
50 kwargs = {}
50 kwargs = {}
51 kwargs['device_keys'] = keys[1:]
51 kwargs['device_keys'] = keys[1:]
52 kwargs['devices'] = devices.values(*keys)
52 kwargs['devices'] = devices.values(*keys)
53 kwargs['title'] = 'Device'
53 kwargs['title'] = 'Device'
54 kwargs['suptitle'] = 'List'
54 kwargs['suptitle'] = 'List'
55 kwargs['button'] = 'New Device'
55 kwargs['button'] = 'New Device'
56
56
57 return render(request, 'devices.html', kwargs)
57 return render(request, 'devices.html', kwargs)
58
58
59 def device(request, id_dev):
59 def device(request, id_dev):
60
60
61 device = Device.objects.get(pk=id_dev)
61 device = Device.objects.get(pk=id_dev)
62
62
63 # form = DeviceForm(instance=device)
64
65 kwargs = {}
63 kwargs = {}
66 kwargs['device'] = device
64 kwargs['device'] = device
67 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
65 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
68
66
69 kwargs['title'] = 'Device'
67 kwargs['title'] = 'Device'
70 kwargs['suptitle'] = 'Details'
68 kwargs['suptitle'] = 'Details'
71
69
72 # kwargs['form'] = form
73 kwargs['button'] = 'Add Device'
70 kwargs['button'] = 'Add Device'
74
71
75 return render(request, 'device.html', kwargs)
72 return render(request, 'device.html', kwargs)
76
73
77 def add_device(request):
74 def add_device(request):
78
75
79 if request.method == 'GET':
76 if request.method == 'GET':
80 form = DeviceForm()
77 form = DeviceForm()
81
78
82 if request.method == 'POST':
79 if request.method == 'POST':
83 form = DeviceForm(request.POST)
80 form = DeviceForm(request.POST)
84
81
85 if form.is_valid():
82 if form.is_valid():
86 form.save()
83 form.save()
87 return redirect('url_devices')
84 return redirect('url_devices')
88
85
89 kwargs = {}
86 kwargs = {}
90 kwargs['form'] = form
87 kwargs['form'] = form
91 kwargs['title'] = 'Device'
88 kwargs['title'] = 'Device'
92 kwargs['suptitle'] = 'New'
89 kwargs['suptitle'] = 'New'
93 kwargs['button'] = 'Create'
90 kwargs['button'] = 'Create'
94
91
95 return render(request, 'device_edit.html', kwargs)
92 return render(request, 'device_edit.html', kwargs)
96
93
97 def edit_device(request, id_dev):
94 def edit_device(request, id_dev):
98
95
99 device = Device.objects.get(pk=id_dev)
96 device = Device.objects.get(pk=id_dev)
100
97
101 if request.method=='GET':
98 if request.method=='GET':
102 form = DeviceForm(instance=device)
99 form = DeviceForm(instance=device)
103
100
104 if request.method=='POST':
101 if request.method=='POST':
105 form = DeviceForm(request.POST, instance=device)
102 form = DeviceForm(request.POST, instance=device)
106
103
107 if form.is_valid():
104 if form.is_valid():
108 form.save()
105 form.save()
109 return redirect('url_devices')
106 return redirect('url_devices')
110
107
111 kwargs = {}
108 kwargs = {}
112 kwargs['form'] = form
109 kwargs['form'] = form
113 kwargs['title'] = 'Device'
110 kwargs['title'] = 'Device'
114 kwargs['suptitle'] = 'Edit'
111 kwargs['suptitle'] = 'Edit'
115 kwargs['button'] = 'Update'
112 kwargs['button'] = 'Update'
116
113
117 return render(request, 'device_edit.html', kwargs)
114 return render(request, 'device_edit.html', kwargs)
118
115
116 def delete_device(request, id_dev):
117
118 device = Device.objects.get(pk=id_dev)
119
120 if request.method=='POST':
121
122 if request.user.is_staff:
123 device.delete()
124 return redirect('url_devices')
125
126 return HttpResponse("Not enough permission to delete this object")
127
128 kwargs = {'object':device, 'dev_active':'active',
129 'url_cancel':'url_device', 'id_item':id_dev}
130
131 return render(request, 'item_delete.html', kwargs)
132
119 def campaigns(request):
133 def campaigns(request):
120
134
121 campaigns = Campaign.objects.all().order_by('start_date')
135 campaigns = Campaign.objects.all().order_by('start_date')
122
136
123 keys = ['id', 'name', 'start_date', 'end_date']
137 keys = ['id', 'name', 'start_date', 'end_date']
124
138
125 kwargs = {}
139 kwargs = {}
126 kwargs['campaign_keys'] = keys[1:]
140 kwargs['campaign_keys'] = keys[1:]
127 kwargs['campaigns'] = campaigns.values(*keys)
141 kwargs['campaigns'] = campaigns.values(*keys)
128 kwargs['title'] = 'Campaign'
142 kwargs['title'] = 'Campaign'
129 kwargs['suptitle'] = 'List'
143 kwargs['suptitle'] = 'List'
130 kwargs['button'] = 'New Campaign'
144 kwargs['button'] = 'New Campaign'
131
145
132 return render(request, 'campaigns.html', kwargs)
146 return render(request, 'campaigns.html', kwargs)
133
147
134 def campaign(request, id_camp):
148 def campaign(request, id_camp):
135
149
136 campaign = Campaign.objects.get(pk=id_camp)
150 campaign = Campaign.objects.get(pk=id_camp)
137 experiments = Experiment.objects.filter(campaign=campaign)
151 experiments = Experiment.objects.filter(campaign=campaign)
138
152
139 form = CampaignForm(instance=campaign)
153 form = CampaignForm(instance=campaign)
140
154
141 kwargs = {}
155 kwargs = {}
142 kwargs['campaign'] = campaign
156 kwargs['campaign'] = campaign
143 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
157 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
144
158
145 keys = ['id', 'name', 'start_time', 'end_time']
159 keys = ['id', 'name', 'start_time', 'end_time']
146
160
147 kwargs['experiment_keys'] = keys[1:]
161 kwargs['experiment_keys'] = keys[1:]
148 kwargs['experiments'] = experiments.values(*keys)
162 kwargs['experiments'] = experiments.values(*keys)
149
163
150 kwargs['title'] = 'Campaign'
164 kwargs['title'] = 'Campaign'
151 kwargs['suptitle'] = 'Details'
165 kwargs['suptitle'] = 'Details'
152
166
153 kwargs['form'] = form
167 kwargs['form'] = form
154 kwargs['button'] = 'Add Experiment'
168 kwargs['button'] = 'Add Experiment'
155
169
156 return render(request, 'campaign.html', kwargs)
170 return render(request, 'campaign.html', kwargs)
157
171
158 def add_campaign(request):
172 def add_campaign(request):
159
173
160 if request.method == 'GET':
174 if request.method == 'GET':
161 form = CampaignForm()
175 form = CampaignForm()
162
176
163 if request.method == 'POST':
177 if request.method == 'POST':
164 form = CampaignForm(request.POST)
178 form = CampaignForm(request.POST)
165
179
166 if form.is_valid():
180 if form.is_valid():
167 campaign = form.save()
181 campaign = form.save()
168 return redirect('url_campaign', id_camp=campaign.id)
182 return redirect('url_campaign', id_camp=campaign.id)
169
183
170 kwargs = {}
184 kwargs = {}
171 kwargs['form'] = form
185 kwargs['form'] = form
172 kwargs['title'] = 'Campaign'
186 kwargs['title'] = 'Campaign'
173 kwargs['suptitle'] = 'New'
187 kwargs['suptitle'] = 'New'
174 kwargs['button'] = 'Create'
188 kwargs['button'] = 'Create'
175
189
176 return render(request, 'campaign_edit.html', kwargs)
190 return render(request, 'campaign_edit.html', kwargs)
177
191
178 def edit_campaign(request, id_camp):
192 def edit_campaign(request, id_camp):
179
193
180 campaign = Campaign.objects.get(pk=id_camp)
194 campaign = Campaign.objects.get(pk=id_camp)
181
195
182 if request.method=='GET':
196 if request.method=='GET':
183 form = CampaignForm(instance=campaign)
197 form = CampaignForm(instance=campaign)
184
198
185 if request.method=='POST':
199 if request.method=='POST':
186 form = CampaignForm(request.POST, instance=campaign)
200 form = CampaignForm(request.POST, instance=campaign)
187
201
188 if form.is_valid():
202 if form.is_valid():
189 form.save()
203 form.save()
190 return redirect('url_campaign', id_camp=id_camp)
204 return redirect('url_campaign', id_camp=id_camp)
191
205
192 kwargs = {}
206 kwargs = {}
193 kwargs['form'] = form
207 kwargs['form'] = form
194 kwargs['title'] = 'Campaign'
208 kwargs['title'] = 'Campaign'
195 kwargs['suptitle'] = 'Edit'
209 kwargs['suptitle'] = 'Edit'
196 kwargs['button'] = 'Update'
210 kwargs['button'] = 'Update'
197
211
198 return render(request, 'campaign_edit.html', kwargs)
212 return render(request, 'campaign_edit.html', kwargs)
199
213
214 def delete_campaign(request, id_camp):
215
216 campaign = Campaign.objects.get(pk=id_camp)
217
218 if request.method=='POST':
219 if request.user.is_staff:
220 campaign.delete()
221 return redirect('url_campaigns')
222
223 return HttpResponse("Not enough permission to delete this object")
224
225 kwargs = {'object':campaign, 'camp_active':'active',
226 'url_cancel':'url_campaign', 'id_item':id_camp}
227
228 return render(request, 'item_delete.html', kwargs)
229
200 def experiments(request):
230 def experiments(request):
201
231
202 campaigns = Experiment.objects.all().order_by('start_time')
232 campaigns = Experiment.objects.all().order_by('start_time')
203
233
204 keys = ['id', 'campaign__name', 'name', 'start_time', 'end_time']
234 keys = ['id', 'campaign__name', 'name', 'start_time', 'end_time']
205
235
206 kwargs = {}
236 kwargs = {}
207
237
208 kwargs['experiment_keys'] = keys[1:]
238 kwargs['experiment_keys'] = keys[1:]
209 kwargs['experiments'] = campaigns.values(*keys)
239 kwargs['experiments'] = campaigns.values(*keys)
210
240
211 kwargs['title'] = 'Experiment'
241 kwargs['title'] = 'Experiment'
212 kwargs['suptitle'] = 'List'
242 kwargs['suptitle'] = 'List'
213 kwargs['button'] = 'New Experiment'
243 kwargs['button'] = 'New Experiment'
214
244
215 return render(request, 'experiments.html', kwargs)
245 return render(request, 'experiments.html', kwargs)
216
246
217 def experiment(request, id_exp):
247 def experiment(request, id_exp):
218
248
219 experiment = Experiment.objects.get(pk=id_exp)
249 experiment = Experiment.objects.get(pk=id_exp)
220
250
221 experiments = Experiment.objects.filter(campaign=experiment.campaign)
251 experiments = Experiment.objects.filter(campaign=experiment.campaign)
222 configurations = Configuration.objects.filter(experiment=experiment)
252 configurations = Configuration.objects.filter(experiment=experiment)
223
253
224 kwargs = {}
254 kwargs = {}
225
255
226 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
256 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
227 conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address']
257 conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address']
228
258
229
259
230 kwargs['experiment_keys'] = exp_keys[1:]
260 kwargs['experiment_keys'] = exp_keys[1:]
231 kwargs['experiment'] = experiment
261 kwargs['experiment'] = experiment
232
262
233 kwargs['experiments'] = experiments.values(*exp_keys)
263 kwargs['experiments'] = experiments.values(*exp_keys)
234
264
235 kwargs['configuration_keys'] = conf_keys[1:]
265 kwargs['configuration_keys'] = conf_keys[1:]
236 kwargs['configurations'] = configurations.values(*conf_keys)
266 kwargs['configurations'] = configurations.values(*conf_keys)
237
267
238 kwargs['title'] = 'Experiment'
268 kwargs['title'] = 'Experiment'
239 kwargs['suptitle'] = 'Details'
269 kwargs['suptitle'] = 'Details'
240
270
241 # kwargs['form'] = form
242 kwargs['button'] = 'Add Device'
271 kwargs['button'] = 'Add Device'
243
272
244 return render(request, 'experiment.html', kwargs)
273 return render(request, 'experiment.html', kwargs)
245
274
246 def add_experiment(request, id_camp=0):
275 def add_experiment(request, id_camp=0):
247
276
248 if request.method == 'GET':
277 if request.method == 'GET':
249 form = ExperimentForm(initial={'campaign':id_camp})
278 form = ExperimentForm(initial={'campaign':id_camp})
250
279
251 if request.method == 'POST':
280 if request.method == 'POST':
252 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
281 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
253
282
254 if form.is_valid():
283 if form.is_valid():
255 experiment = form.save()
284 experiment = form.save()
256 return redirect('url_experiment', id_exp=experiment.id)
285 return redirect('url_experiment', id_exp=experiment.id)
257
286
258 kwargs = {}
287 kwargs = {}
259 kwargs['form'] = form
288 kwargs['form'] = form
260 kwargs['title'] = 'Experiment'
289 kwargs['title'] = 'Experiment'
261 kwargs['suptitle'] = 'New'
290 kwargs['suptitle'] = 'New'
262 kwargs['button'] = 'Create'
291 kwargs['button'] = 'Create'
263
292
264 return render(request, 'experiment_edit.html', kwargs)
293 return render(request, 'experiment_edit.html', kwargs)
265
294
266 def edit_experiment(request, id_exp):
295 def edit_experiment(request, id_exp):
267
296
268 experiment = Experiment.objects.get(pk=id_exp)
297 experiment = Experiment.objects.get(pk=id_exp)
269
298
270 if request.method == 'GET':
299 if request.method == 'GET':
271 form = ExperimentForm(instance=experiment)
300 form = ExperimentForm(instance=experiment)
272
301
273 if request.method=='POST':
302 if request.method=='POST':
274 form = ExperimentForm(request.POST, instance=experiment)
303 form = ExperimentForm(request.POST, instance=experiment)
275
304
276 if form.is_valid():
305 if form.is_valid():
277 experiment = form.save()
306 experiment = form.save()
278 return redirect('url_experiment', id_exp=experiment.id)
307 return redirect('url_experiment', id_exp=experiment.id)
279
308
280 kwargs = {}
309 kwargs = {}
281 kwargs['form'] = form
310 kwargs['form'] = form
282 kwargs['title'] = 'Experiment'
311 kwargs['title'] = 'Experiment'
283 kwargs['suptitle'] = 'Edit'
312 kwargs['suptitle'] = 'Edit'
284 kwargs['button'] = 'Update'
313 kwargs['button'] = 'Update'
285
314
286 return render(request, 'experiment_edit.html', kwargs)
315 return render(request, 'experiment_edit.html', kwargs)
287
316
317 def delete_experiment(request, id_exp):
318
319 experiment = Experiment.objects.get(pk=id_exp)
320
321 if request.method=='POST':
322 if request.user.is_staff:
323 id_camp = experiment.campaign.id
324 experiment.delete()
325 return redirect('url_campaign', id_camp=id_camp)
326
327 return HttpResponse("Not enough permission to delete this object")
328
329 kwargs = {'object':experiment, 'exp_active':'active',
330 'url_cancel':'url_experiment', 'id_item':id_exp}
331
332 return render(request, 'item_delete.html', kwargs)
333
288 def dev_confs(request):
334 def dev_confs(request):
289
335
290 configurations = Configuration.objects.all().order_by('device__device_type')
336 configurations = Configuration.objects.all().order_by('device__device_type')
291
337
292 keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
338 keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
293
339
294 kwargs = {}
340 kwargs = {}
295
341
296 kwargs['configuration_keys'] = keys[1:]
342 kwargs['configuration_keys'] = keys[1:]
297 kwargs['configurations'] = configurations.values(*keys)
343 kwargs['configurations'] = configurations.values(*keys)
298
344
299 kwargs['title'] = 'Configuration'
345 kwargs['title'] = 'Configuration'
300 kwargs['suptitle'] = 'List'
346 kwargs['suptitle'] = 'List'
301 kwargs['button'] = 'New Configuration'
347 kwargs['button'] = 'New Configuration'
302
348
303 return render(request, 'dev_confs.html', kwargs)
349 return render(request, 'dev_confs.html', kwargs)
304
350
305 def dev_conf(request, id_conf):
351 def dev_conf(request, id_conf):
306
352
307 conf = Configuration.objects.get(pk=id_conf)
353 conf = Configuration.objects.get(pk=id_conf)
308
354
309 DevConfModel = CONF_MODELS[conf.device.device_type.name]
355 DevConfModel = CONF_MODELS[conf.device.device_type.name]
310 dev_conf = DevConfModel.objects.get(pk=id_conf)
356 dev_conf = DevConfModel.objects.get(pk=id_conf)
311
357
312 kwargs = {}
358 kwargs = {}
313 kwargs['dev_conf'] = dev_conf
359 kwargs['dev_conf'] = dev_conf
314 kwargs['dev_conf_keys'] = ['experiment', 'device']
360 kwargs['dev_conf_keys'] = ['experiment', 'device']
315
361
316 kwargs['title'] = 'Configuration'
362 kwargs['title'] = 'Configuration'
317 kwargs['suptitle'] = 'Details'
363 kwargs['suptitle'] = 'Details'
318
364
319 kwargs['button'] = 'Edit Configuration'
365 kwargs['button'] = 'Edit Configuration'
320
366
321 ###### SIDEBAR ######
367 ###### SIDEBAR ######
322 experiments = Experiment.objects.filter(campaign=conf.experiment.campaign)
368 experiments = Experiment.objects.filter(campaign=conf.experiment.campaign)
323 configurations = Configuration.objects.filter(experiment=conf.experiment)
369 configurations = Configuration.objects.filter(experiment=conf.experiment)
324
370
325 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
371 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
326 conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address']
372 conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address']
327
373
328 kwargs['experiment_keys'] = exp_keys[1:]
374 kwargs['experiment_keys'] = exp_keys[1:]
329 kwargs['experiments'] = experiments.values(*exp_keys)
375 kwargs['experiments'] = experiments.values(*exp_keys)
330
376
331 kwargs['configuration_keys'] = conf_keys[1:]
377 kwargs['configuration_keys'] = conf_keys[1:]
332 kwargs['configurations'] = configurations.values(*conf_keys)
378 kwargs['configurations'] = configurations.values(*conf_keys)
333
379
334 return render(request, 'dev_conf.html', kwargs)
380 return render(request, 'dev_conf.html', kwargs)
335
381
336 def add_dev_conf(request, id_exp=0):
382 def add_dev_conf(request, id_exp=0):
337
383
338 if request.method == 'GET':
384 if request.method == 'GET':
339 form = ConfigurationForm(initial={'experiment':id_exp})
385 form = ConfigurationForm(initial={'experiment':id_exp})
340
386
341 if request.method == 'POST':
387 if request.method == 'POST':
342 form = ConfigurationForm(request.POST)
388 form = ConfigurationForm(request.POST)
343
389
344 if form.is_valid():
390 if form.is_valid():
345 experiment = Experiment.objects.get(pk=request.POST['experiment'])
391 experiment = Experiment.objects.get(pk=request.POST['experiment'])
346 device = Device.objects.get(pk=request.POST['device'])
392 device = Device.objects.get(pk=request.POST['device'])
347
393
348 exp_devices = Device.objects.filter(configuration__experiment=experiment)
394 exp_devices = Device.objects.filter(configuration__experiment=experiment)
349
395
350 if device.id not in exp_devices.values('id',):
396 if device.id not in exp_devices.values('id',):
351
397
352 DevConfModel = CONF_MODELS[device.device_type.name]
398 DevConfModel = CONF_MODELS[device.device_type.name]
353 conf = DevConfModel(experiment=experiment, device=device)
399 conf = DevConfModel(experiment=experiment, device=device)
354 conf.save()
400 conf.save()
355
401
356 return redirect('url_experiment', id_exp=experiment.id)
402 return redirect('url_experiment', id_exp=experiment.id)
357
403
358 kwargs = {}
404 kwargs = {}
359 kwargs['form'] = form
405 kwargs['form'] = form
360 kwargs['title'] = 'Configuration'
406 kwargs['title'] = 'Configuration'
361 kwargs['suptitle'] = 'New'
407 kwargs['suptitle'] = 'New'
362 kwargs['button'] = 'Create'
408 kwargs['button'] = 'Create'
363
409
364 return render(request, 'dev_conf_edit.html', kwargs)
410 return render(request, 'dev_conf_edit.html', kwargs)
365
411
366 def edit_dev_conf(request, id_conf):
412 def edit_dev_conf(request, id_conf):
367
413
368 conf = Configuration.objects.get(pk=id_conf)
414 conf = Configuration.objects.get(pk=id_conf)
369
415
370 DevConfModel = CONF_MODELS[conf.device.device_type.name]
416 DevConfModel = CONF_MODELS[conf.device.device_type.name]
371 DevConfForm = CONF_FORMS[conf.device.device_type.name]
417 DevConfForm = CONF_FORMS[conf.device.device_type.name]
372
418
373 dev_conf = DevConfModel.objects.get(pk=id_conf)
419 dev_conf = DevConfModel.objects.get(pk=id_conf)
374
420
375 if request.method=='GET':
421 if request.method=='GET':
376 form = DevConfForm(instance=dev_conf)
422 form = DevConfForm(instance=dev_conf)
377
423
378 if request.method=='POST':
424 if request.method=='POST':
379 form = DevConfForm(request.POST, instance=dev_conf)
425 form = DevConfForm(request.POST, instance=dev_conf)
380
426
381 if form.is_valid():
427 if form.is_valid():
382 form.save()
428 form.save()
383 return redirect('url_dev_conf', id_conf=id_conf)
429 return redirect('url_dev_conf', id_conf=id_conf)
384
430
385 kwargs = {}
431 kwargs = {}
386 kwargs['form'] = form
432 kwargs['form'] = form
387 kwargs['title'] = 'Device Configuration'
433 kwargs['title'] = 'Device Configuration'
388 kwargs['suptitle'] = 'Edit'
434 kwargs['suptitle'] = 'Edit'
389 kwargs['button'] = 'Update'
435 kwargs['button'] = 'Update'
390
436
391 return render(request, 'dev_conf_edit.html', kwargs)
437 return render(request, 'dev_conf_edit.html', kwargs)
392
438
439 def delete_dev_conf(request, id_conf):
440
441 conf = Configuration.objects.get(pk=id_conf)
442
443 if request.method=='POST':
444 if request.user.is_staff:
445 id_exp = conf.experiment.id
446 conf.delete()
447 return redirect('url_experiment', id_exp=id_exp)
448
449 return HttpResponse("Not enough permission to delete this object")
450
451 kwargs = {'object':conf, 'conf_active':'active',
452 'url_cancel':'url_dev_conf', 'id_item':id_conf}
453
454 return render(request, 'item_delete.html', kwargs)
393
455
394 # def experiment(request, id_exp=0, id_dev_type=0):
456 # def experiment(request, id_exp=0, id_dev_type=0):
395 # kwargs = {}
457 # kwargs = {}
396 # if id_exp:
458 # if id_exp:
397 # experiment = Experiment.objects.get(pk=id_exp)
459 # experiment = Experiment.objects.get(pk=id_exp)
398 # devices = Configuration.objects.filter(configuration__experiment=experiment)
460 # devices = Configuration.objects.filter(configuration__experiment=experiment)
399 # kwargs['experiment'] = experiment
461 # kwargs['experiment'] = experiment
400 # kwargs['experiment_keys'] = ['campaign', 'name', 'start_time', 'end_time']
462 # kwargs['experiment_keys'] = ['campaign', 'name', 'start_time', 'end_time']
401 #
463 #
402 # form = ExperimentForm(instance=experiment)
464 # form = ExperimentForm(instance=experiment)
403 #
465 #
404 # if id_dev_type:
466 # if id_dev_type:
405 # subform = DeviceTypeForm(initial={'device_type':id_dev_type})
467 # subform = DeviceTypeForm(initial={'device_type':id_dev_type})
406 # kwargs['keys'] = ['ip_address']
468 # kwargs['keys'] = ['ip_address']
407 # keys = ['id']+kwargs['keys']
469 # keys = ['id']+kwargs['keys']
408 # kwargs['items'] = Device.objects.filter(device_type=id_dev_type).values(*keys)
470 # kwargs['items'] = Device.objects.filter(device_type=id_dev_type).values(*keys)
409 # else:
471 # else:
410 # subform = DeviceTypeForm()
472 # subform = DeviceTypeForm()
411 #
473 #
412 # kwargs['form'] = form
474 # kwargs['form'] = form
413 # kwargs['subform'] = subform
475 # kwargs['subform'] = subform
414 # kwargs['device_keys'] = ['device_type__name', 'ip_address']
476 # kwargs['device_keys'] = ['device_type__name', 'ip_address']
415 # kwargs['devices'] = devices.values('device_type__name', 'ip_address', 'configuration__id')
477 # kwargs['devices'] = devices.values('device_type__name', 'ip_address', 'configuration__id')
416 # kwargs['suptitle'] = 'Detail'
478 # kwargs['suptitle'] = 'Detail'
417 # else:
479 # else:
418 # experiments = Experiment.objects.all().order_by('start_time')
480 # experiments = Experiment.objects.all().order_by('start_time')
419 # kwargs['keys'] = ['name', 'start_time', 'end_time']
481 # kwargs['keys'] = ['name', 'start_time', 'end_time']
420 # keys = ['id']+kwargs['keys']
482 # keys = ['id']+kwargs['keys']
421 # kwargs['items'] = experiments.values(*keys)
483 # kwargs['items'] = experiments.values(*keys)
422 # kwargs['suptitle'] = 'List'
484 # kwargs['suptitle'] = 'List'
423 # kwargs['button'] = 'Add Experiment'
485 # kwargs['button'] = 'Add Experiment'
424 #
486 #
425 # kwargs['id_dev_type'] = id_dev_type
487 # kwargs['id_dev_type'] = id_dev_type
426 # kwargs['id_exp'] = id_exp
488 # kwargs['id_exp'] = id_exp
427 # return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request))
489 # return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request))
428
490
429 # def edit_experiment(request, id_exp):
491 # def edit_experiment(request, id_exp):
430 # if request.method=='POST':
492 # if request.method=='POST':
431 # experiment = Experiment.objects.get(pk=id_exp)
493 # experiment = Experiment.objects.get(pk=id_exp)
432 # form = ExperimentForm(request.POST, instance=experiment)
494 # form = ExperimentForm(request.POST, instance=experiment)
433 # if form.is_valid():
495 # if form.is_valid():
434 # form.save()
496 # form.save()
435 # return redirect('experiment', id_exp=id_exp)
497 # return redirect('experiment', id_exp=id_exp)
436
498
437 # def experiment_add_device(request, id_exp):
499 # def experiment_add_device(request, id_exp):
438 # if request.method=='POST':
500 # if request.method=='POST':
439 # experiment = Experiment.objects.get(pk=id_exp)
501 # experiment = Experiment.objects.get(pk=id_exp)
440 #
502 #
441 # exp_devices = Device.objects.filter(configuration__experiment=experiment)
503 # exp_devices = Device.objects.filter(configuration__experiment=experiment)
442 #
504 #
443 # device = Device.objects.get(pk=request.POST['device'])
505 # device = Device.objects.get(pk=request.POST['device'])
444 #
506 #
445 # if device.id in exp_devices.values('id',):
507 # if device.id in exp_devices.values('id',):
446 # return redirect('experiment', id_exp=id_exp)
508 # return redirect('experiment', id_exp=id_exp)
447 #
509 #
448 # model = MODELS[device.device_type.alias]
510 # model = MODELS[device.device_type.alias]
449 # conf = model(experiment=experiment, device=device)
511 # conf = model(experiment=experiment, device=device)
450 # conf.save()
512 # conf.save()
451 # return redirect('experiment', id_exp=id_exp)
513 # return redirect('experiment', id_exp=id_exp)
452
514
453 # def add_experiment(request):
515 # def add_experiment(request):
454 #
516 #
455 # kwargs = {}
517 # kwargs = {}
456 # if request.method == 'POST':
518 # if request.method == 'POST':
457 # form = ExperimentForm(request.POST)
519 # form = ExperimentForm(request.POST)
458 # if form.is_valid():
520 # if form.is_valid():
459 # experiment = form.save()
521 # experiment = form.save()
460 # return redirect('experiment', id_exp=experiment.id)
522 # return redirect('experiment', id_exp=experiment.id)
461 # else:
523 # else:
462 # form = ExperimentForm()
524 # form = ExperimentForm()
463 # kwargs['form_new'] = form
525 # kwargs['form_new'] = form
464 # kwargs['title'] = 'Experiment'
526 # kwargs['title'] = 'Experiment'
465 # kwargs['suptitle'] = 'New'
527 # kwargs['suptitle'] = 'New'
466 # kwargs['id_exp'] = 0
528 # kwargs['id_exp'] = 0
467 # return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request))
529 # return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request))
468
530
469 # def device(request, id_dev=0):
531 # def device(request, id_dev=0):
470 # kwargs = {}
532 # kwargs = {}
471 # if id_dev:
533 # if id_dev:
472 # device = Device.objects.get(pk=id_dev)
534 # device = Device.objects.get(pk=id_dev)
473 # kwargs['form'] = DeviceForm(instance=device)
535 # kwargs['form'] = DeviceForm(instance=device)
474 # kwargs['action'] = 'edit/'
536 # kwargs['action'] = 'edit/'
475 # kwargs['button'] = 'Update'
537 # kwargs['button'] = 'Update'
476 # kwargs['suptitle'] = 'Detail'
538 # kwargs['suptitle'] = 'Detail'
477 # else:
539 # else:
478 # devices = Device.objects.all()
540 # devices = Device.objects.all()
479 # kwargs['keys'] = ['device_type__name', 'ip_address']
541 # kwargs['keys'] = ['device_type__name', 'ip_address']
480 # keys = ['id']+kwargs['keys']
542 # keys = ['id']+kwargs['keys']
481 # kwargs['items'] = devices.values(*keys)
543 # kwargs['items'] = devices.values(*keys)
482 # kwargs['suptitle'] = 'List'
544 # kwargs['suptitle'] = 'List'
483 # kwargs['button'] = 'Add Device'
545 # kwargs['button'] = 'Add Device'
484 # return render_to_response("device.html", kwargs, context_instance=RequestContext(request))
546 # return render_to_response("device.html", kwargs, context_instance=RequestContext(request))
485 #
547 #
486 # def edit_device(request, id_dev):
548 # def edit_device(request, id_dev):
487 # if request.method=='POST':
549 # if request.method=='POST':
488 # device = Device.objects.get(pk=id_dev)
550 # device = Device.objects.get(pk=id_dev)
489 # form = DeviceForm(request.POST, instance=device)
551 # form = DeviceForm(request.POST, instance=device)
490 # if form.is_valid():
552 # if form.is_valid():
491 # form.save()
553 # form.save()
492 # return redirect('devices')
554 # return redirect('devices')
493 #
555 #
494 # def add_device(request):
556 # def add_device(request):
495 # kwargs = {}
557 # kwargs = {}
496 # if request.method == 'POST':
558 # if request.method == 'POST':
497 # form = DeviceForm(request.POST)
559 # form = DeviceForm(request.POST)
498 # if form.is_valid():
560 # if form.is_valid():
499 # form.save()
561 # form.save()
500 # return redirect('devices')
562 # return redirect('devices')
501 # else:
563 # else:
502 # form = DeviceForm()
564 # form = DeviceForm()
503 # kwargs['form'] = form
565 # kwargs['form'] = form
504 # kwargs['button'] = 'Create'
566 # kwargs['button'] = 'Create'
505 # kwargs['suptitle'] = 'New'
567 # kwargs['suptitle'] = 'New'
506 # return render_to_response("device.html", kwargs, context_instance=RequestContext(request))
568 # return render_to_response("device.html", kwargs, context_instance=RequestContext(request))
507
569
General Comments 0
You need to be logged in to leave comments. Login now