diff --git a/apps/cgs/views.py b/apps/cgs/views.py
index c38d214..623e2d2 100644
--- a/apps/cgs/views.py
+++ b/apps/cgs/views.py
@@ -54,7 +54,7 @@ def cgs_conf(request, id_conf):
# messages.error(request, message=status)
kwargs['dev_conf'] = conf
- kwargs['dev_conf_keys'] = ['experiment', 'device',
+ kwargs['dev_conf_keys'] = ['name',
'freq0', 'freq1',
'freq2', 'freq3']
diff --git a/apps/dds/views.py b/apps/dds/views.py
index 9c5fd45..dd9e0bf 100644
--- a/apps/dds/views.py
+++ b/apps/dds/views.py
@@ -21,8 +21,6 @@ def dds_conf(request, id_conf):
kwargs['dev_conf'] = conf
kwargs['dev_conf_keys'] = ['name',
- 'experiment',
- 'device',
'clock',
'multiplier',
'frequencyA_Mhz',
diff --git a/apps/jars/views.py b/apps/jars/views.py
index cb41027..a2694e9 100644
--- a/apps/jars/views.py
+++ b/apps/jars/views.py
@@ -22,7 +22,7 @@ def jars_conf(request, id_conf):
kwargs['dev_conf'] = conf
- kwargs['dev_conf_keys'] = ['experiment', 'device',
+ kwargs['dev_conf_keys'] = ['name',
'cards_number', 'channels_number', 'channels',
'rd_directory', 'raw_data_blocks', 'data_type',
'acq_profiles', 'profiles_block', 'fftpoints',
diff --git a/apps/main/fixtures/main_initial_data.json b/apps/main/fixtures/main_initial_data.json
index 3cebba3..b497e95 100644
--- a/apps/main/fixtures/main_initial_data.json
+++ b/apps/main/fixtures/main_initial_data.json
@@ -1,5 +1,5 @@
[
-{"fields": {"name": "MAIN RADAR", "description": ""}, "model": "main.location", "pk": 1},
+{"fields": {"name": "JRO Imaging", "description": ""}, "model": "main.location", "pk": 1},
{"fields": {"name": "JASMET", "description": ""}, "model": "main.location", "pk": 2},
{"fields": {"name": "SOUSY", "description": ""}, "model": "main.location", "pk": 3},
{"fields": {"name": "JULIA", "description": ""}, "model": "main.location", "pk": 4},
diff --git a/apps/main/forms.py b/apps/main/forms.py
index 36252da..ead9841 100644
--- a/apps/main/forms.py
+++ b/apps/main/forms.py
@@ -32,6 +32,20 @@ class DatepickerWidget(forms.widgets.TextInput):
html = '
'+input_html+'
'
return mark_safe(html)
+class DateRangepickerWidget(forms.widgets.TextInput):
+ def render(self, name, value, attrs=None):
+ start = attrs['start_date']
+ end = attrs['end_date']
+ html = '''
+
+
+
+
+
+
+
'''.format(start, end)
+ return mark_safe(html)
+
class TimepickerWidget(forms.widgets.TextInput):
def render(self, name, value, attrs=None):
input_html = super(TimepickerWidget, self).render(name, value, attrs)
@@ -132,6 +146,7 @@ class OperationForm(forms.Form):
super(OperationForm, self).__init__(*args, **kwargs)
self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')[:length]
+
class OperationSearchForm(forms.Form):
# -----ALL Campaigns------
campaign = forms.ChoiceField(label="Campaign")
@@ -140,6 +155,7 @@ class OperationSearchForm(forms.Form):
super(OperationSearchForm, self).__init__(*args, **kwargs)
self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')
+
class NewForm(forms.Form):
create_from = forms.ChoiceField(choices=((0, '-----'),
@@ -152,4 +168,23 @@ class NewForm(forms.Form):
template_choices = kwargs.pop('template_choices', [])
super(NewForm, self).__init__(*args, **kwargs)
self.fields['choose_template'].choices = add_empty_choice(template_choices)
+
+
+class FilterForm(forms.Form):
+
+ def __init__(self, *args, **kwargs):
+ extra_fields = kwargs.pop('extra_fields', [])
+ super(FilterForm, self).__init__(*args, **kwargs)
+
+ for field in extra_fields:
+ if 'range_date' in field:
+ self.fields[field] = forms.CharField(required=False)
+ self.fields[field].widget = DateRangepickerWidget()
+ if 'initial' in kwargs:
+ self.fields[field].widget.attrs = {'start_date':kwargs['initial'].get('start_date', ''),
+ 'end_date':kwargs['initial'].get('end_date', '')}
+ elif 'template' in field:
+ self.fields['template'] = forms.BooleanField(required=False)
+ else:
+ self.fields[field] = forms.CharField(required=False)
\ No newline at end of file
diff --git a/apps/main/models.py b/apps/main/models.py
index e1ed73d..5605086 100644
--- a/apps/main/models.py
+++ b/apps/main/models.py
@@ -75,7 +75,7 @@ class Location(models.Model):
return u'%s' % self.name
def get_absolute_url(self):
- return reverse('url_device', args=[str(self.id)])
+ return reverse('url_location', args=[str(self.id)])
class DeviceType(models.Model):
@@ -143,10 +143,11 @@ class Campaign(models.Model):
ordering = ('name',)
def __unicode__(self):
- return u'%s' % (self.name)
+ if self.template:
+ return u'{} (template)'.format(self.name)
+ else:
+ return u'{}'.format(self.name)
- def get_absolute_url(self):
- return reverse('url_campaign', args=[str(self.id)])
def parms_to_dict(self):
@@ -259,7 +260,7 @@ class Experiment(models.Model):
return u'%s' % (self.name)
@property
- def radar(self):
+ def radar_system(self):
return self.location
def clone(self, **kwargs):
@@ -434,8 +435,8 @@ class Configuration(PolymorphicModel):
name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
- experiment = models.ForeignKey('Experiment', null=True, blank=True, on_delete=models.CASCADE)
- device = models.ForeignKey(Device, null=True, on_delete=models.CASCADE)
+ experiment = models.ForeignKey('Experiment', verbose_name='Experiment', null=True, blank=True, on_delete=models.CASCADE)
+ device = models.ForeignKey('Device', verbose_name='Device', null=True, on_delete=models.CASCADE)
type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
@@ -450,8 +451,17 @@ class Configuration(PolymorphicModel):
db_table = 'db_configurations'
def __unicode__(self):
-
- return u'[{}]: {}'.format(self.device.device_type.name.upper(), self.name)
+
+ device = '{}:'.format(self.device.device_type.name.upper())
+
+ if 'mix' in self._meta.get_all_field_names():
+ if self.mix:
+ device = '{} MIXED:'.format(self.device.device_type.name.upper())
+
+ if self.template:
+ return u'{} {} (template)'.format(device, self.name)
+ else:
+ return u'{} {}'.format(device, self.name)
def clone(self, **kwargs):
diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html
index 2047838..57752b0 100644
--- a/apps/main/templates/base.html
+++ b/apps/main/templates/base.html
@@ -52,6 +52,7 @@
Experiment
Device Configuration
Device
+ Radar System
@@ -61,6 +62,7 @@
Experiments
Configurations
Devices
+ Radar Systems
diff --git a/apps/main/templates/campaigns.html b/apps/main/templates/base_list.html
similarity index 55%
rename from apps/main/templates/campaigns.html
rename to apps/main/templates/base_list.html
index d3f8c25..74c8fbc 100644
--- a/apps/main/templates/campaigns.html
+++ b/apps/main/templates/base_list.html
@@ -2,45 +2,72 @@
{% load bootstrap3 %}
{% load static %}
{% load main_tags %}
+
{% block extra-head %}
{% endblock %}
-{% block camp-active %}active{% endblock %}
-
+{% block search-active %}active{% endblock %}
{% block content-title %}{{title}}{% endblock %}
{% block content-suptitle %}{{suptitle}}{% endblock %}
{% block content %}
+
+{% block content-filter %}
+{% if form %}
+
+{% endif %}
+{% endblock %}
+
- # |
- {% for key in campaign_keys %}
- {{ key|title }} |
- {% endfor%}
+ # |
+ {% for key in keys %}
+ {{ key|title }} |
+ {% endfor%}
- {% for campaign in campaigns %}
-
- {{ forloop.counter }} |
- {% for key in campaign_keys %}
- {{ campaign|attr:key }} |
- {% endfor %}
-
+ {% for object in objects %}
+
+ {{ forloop.counter|add:offset }} |
+ {% for key in keys %}
+ {{ object|attr:key }} |
+ {% endfor %}
+
{% endfor %}
-{% endblock %}
+
-{% block sidebar%}
- {% include "sidebar_devices.html" %}
{% endblock %}
{% block extra-js%}
+
+
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/apps/main/templates/dev_confs.html b/apps/main/templates/dev_confs.html
deleted file mode 100644
index e732cd2..0000000
--- a/apps/main/templates/dev_confs.html
+++ /dev/null
@@ -1,45 +0,0 @@
-{% extends "base.html" %}
-{% load bootstrap3 %}
-{% load static %}
-{% load main_tags %}
-{% block extra-head %}
-
-{% endblock %}
-
-{% block conf-active %}active{% endblock %}
-
-{% block content-title %}{{title}}{% endblock %}
-{% block content-suptitle %}{{suptitle}}{% endblock %}
-
-{% block content %}
-
-
- # |
- {% for key in configuration_keys %}
- {{ key|title }} |
- {% endfor%}
-
- {% for item in configurations %}
-
- {{ forloop.counter }} |
- {% for key in configuration_keys %}
- {{ item|attr:key }} |
- {% endfor %}
-
- {% endfor %}
-
-{% endblock %}
-
-{% block sidebar%}
- {% include "sidebar_devices.html" %}
-{% endblock %}
-
-{% block extra-js%}
-
-{% endblock %}
\ No newline at end of file
diff --git a/apps/main/templates/device_edit.html b/apps/main/templates/device_edit.html
deleted file mode 100644
index 16ebf08..0000000
--- a/apps/main/templates/device_edit.html
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "base_edit.html" %}
\ No newline at end of file
diff --git a/apps/main/templates/devices.html b/apps/main/templates/devices.html
deleted file mode 100644
index 6f9a577..0000000
--- a/apps/main/templates/devices.html
+++ /dev/null
@@ -1,43 +0,0 @@
-{% extends "base.html" %}
-{% load bootstrap3 %}
-{% load static %}
-{% load main_tags %}
-
-{% block dev-active %}active{% endblock %}
-
-{% block content-title %}{{title}}{% endblock %}
-{% block content-suptitle %}{{suptitle}}{% endblock %}
-
-{% block content %}
-
-
- # |
- {% for key in device_keys %}
- {{ key|title }} |
- {% endfor%}
-
- {% for device in devices %}
-
- {{ forloop.counter }} |
- {% for key in device_keys %}
- {{ device|attr:key }} |
- {% endfor %}
-
- {% endfor %}
-
-
-{% endblock %}
-
-{% block sidebar%}
- {% include "sidebar_devices.html" %}
-{% endblock %}
-
-{% block extra-js%}
-
-{% endblock %}
\ No newline at end of file
diff --git a/apps/main/templates/experiments.html b/apps/main/templates/experiments.html
deleted file mode 100644
index 6c9cce1..0000000
--- a/apps/main/templates/experiments.html
+++ /dev/null
@@ -1,45 +0,0 @@
-{% extends "base.html" %}
-{% load bootstrap3 %}
-{% load static %}
-{% load main_tags %}
-{% block extra-head %}
-
-{% endblock %}
-
-{% block exp-active %}active{% endblock %}
-
-{% block content-title %}{{title}}{% endblock %}
-{% block content-suptitle %}{{suptitle}}{% endblock %}
-
-{% block content %}
-
-
- # |
- {% for key in experiment_keys %}
- {{ key|title }} |
- {% endfor%}
-
- {% for experiment in experiments %}
-
- {{ forloop.counter }} |
- {% for key in experiment_keys %}
- {{ experiment|attr:key }} |
- {% endfor %}
-
- {% endfor %}
-
-{% endblock %}
-
-{% block sidebar%}
- {% include "sidebar_devices.html" %}
-{% endblock %}
-
-{% block extra-js%}
-
-{% endblock %}
\ No newline at end of file
diff --git a/apps/main/templates/item_delete.html b/apps/main/templates/item_delete.html
deleted file mode 100644
index 0357f68..0000000
--- a/apps/main/templates/item_delete.html
+++ /dev/null
@@ -1,33 +0,0 @@
-{% extends "base.html" %}
-{% load bootstrap3 %}
-{% load static %}
-{% load main_tags %}
-
-{% block dev-active %}{{dev_active}}{% endblock %}
-{% block camp-active %}{{camp_active}}{% endblock %}
-{% block exp-active %}{{exp_active}}{% endblock %}
-{% block conf-active %}{{conf_active}}{% endblock %}
-
-{% block content-title %}{{title}}{% endblock %}
-{% block content-suptitle %}{{suptitle}}{% endblock %}
-
-{% block content %}
-
-{% endblock %}
-
-{% block sidebar%}
-{% include "sidebar_devices.html" %}
-{% endblock %}
-
-{% block extra-js%}
-
-{% endblock %}
\ No newline at end of file
diff --git a/apps/main/templates/location_edit.html b/apps/main/templates/location_edit.html
deleted file mode 100644
index 08ff6b5..0000000
--- a/apps/main/templates/location_edit.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{% extends "base.html" %}
-{% load bootstrap3 %}
-{% load static %}
-{% load main_tags %}
-{% block extra-head %}
-
-{% endblock %}
-
-{% block loc-active %}active{% endblock %}
-
-{% block content-title %}{{title}}{% endblock %}
-{% block content-suptitle %}{{suptitle}}{% endblock %}
-
-{% block content %}
-
-{% endblock %}
-
-{% block sidebar%}
- {% include "sidebar_devices.html" %}
-{% endblock %}
-
-{% block extra-js%}
-{% endblock %}
\ No newline at end of file
diff --git a/apps/main/templates/locations.html b/apps/main/templates/locations.html
deleted file mode 100644
index 1e8f58a..0000000
--- a/apps/main/templates/locations.html
+++ /dev/null
@@ -1,47 +0,0 @@
-{% extends "base.html" %}
-{% load bootstrap3 %}
-{% load static %}
-{% load main_tags %}
-
-{% block loc-active %}active{% endblock %}
-
-{% block content-title %}{{title}}{% endblock %}
-{% block content-suptitle %}{{suptitle}}{% endblock %}
-
-{% block content %}
-
-
- # |
- {% for key in location_keys %}
- {{ key|title }} |
- {% endfor%}
-
- {% for location in locations %}
-
- {{ forloop.counter }} |
- {% for key in location_keys %}
- {{ location|attr:key }} |
- {% endfor %}
-
- {% endfor %}
-
-
-{% endblock %}
-
-{% block sidebar%}
- {% include "sidebar_devices.html" %}
-{% endblock %}
-
-{% block extra-js%}
-
-{% endblock %}
\ No newline at end of file
diff --git a/apps/main/templates/operation.html b/apps/main/templates/operation.html
index 92b6ba7..25d9adf 100644
--- a/apps/main/templates/operation.html
+++ b/apps/main/templates/operation.html
@@ -33,7 +33,9 @@
{% endif %}
-
+
+Radar Systems
+
{% for location in locations %}
@@ -43,7 +45,7 @@
- {{location.name}}: Experiment List
+ {{location.name}}: Experiments
diff --git a/apps/main/templatetags/main_tags.py b/apps/main/templatetags/main_tags.py
index f2a3e11..0ce92c2 100644
--- a/apps/main/templatetags/main_tags.py
+++ b/apps/main/templatetags/main_tags.py
@@ -6,6 +6,9 @@ def attr(instance, key):
display_key = "get_" + key + "_display"
+ if key=='name':
+ return '{}'.format(instance)
+
if hasattr(instance, display_key):
return getattr(instance, display_key)()
@@ -35,5 +38,5 @@ def get_verbose_field_name(instance, field_name):
Returns verbose_name for a field.
"""
if field_name=='ipp_unit':
- return 'Inter pulse period [Km(Units)]'
+ return 'IPP [Km(Units)]'
return mark_safe(instance._meta.get_field(field_name).verbose_name)
\ No newline at end of file
diff --git a/apps/main/views.py b/apps/main/views.py
index 1b21df4..7850a7c 100644
--- a/apps/main/views.py
+++ b/apps/main/views.py
@@ -2,11 +2,14 @@ from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
from django.utils.safestring import mark_safe
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
+from django.db.models import Q
+from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.contrib import messages
from datetime import datetime
+import urllib
from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm
-from .forms import OperationSearchForm
+from .forms import OperationSearchForm, FilterForm
from apps.cgs.forms import CGSConfigurationForm
from apps.jars.forms import JARSConfigurationForm
from apps.usrp.forms import USRPConfigurationForm
@@ -21,6 +24,7 @@ from apps.usrp.models import USRPConfiguration
from apps.abs.models import ABSConfiguration
from apps.rc.models import RCConfiguration, RCLine, RCLineType
from apps.dds.models import DDSConfiguration
+from django.http.request import QueryDict
# Create your views here.
@@ -63,18 +67,16 @@ def index(request):
def locations(request):
- locations = Location.objects.all().order_by('name')
-
- keys = ['id', 'name', 'description']
+ page = request.GET.get('page')
+ order = ('name',)
+
+ kwargs = get_paginator(Location, page, order)
- kwargs = {}
- kwargs['location_keys'] = keys[1:]
- kwargs['locations'] = locations
- kwargs['title'] = 'Location'
+ kwargs['keys'] = ['name', 'description']
+ kwargs['title'] = 'Radar System'
kwargs['suptitle'] = 'List'
- kwargs['button'] = 'New Location'
- return render(request, 'locations.html', kwargs)
+ return render(request, 'base_list.html', kwargs)
def location(request, id_loc):
@@ -105,11 +107,11 @@ def location_new(request):
kwargs = {}
kwargs['form'] = form
- kwargs['title'] = 'Location'
+ kwargs['title'] = 'Radar System'
kwargs['suptitle'] = 'New'
kwargs['button'] = 'Create'
- return render(request, 'location_edit.html', kwargs)
+ return render(request, 'base_edit.html', kwargs)
def location_edit(request, id_loc):
@@ -132,7 +134,7 @@ def location_edit(request, id_loc):
kwargs['suptitle'] = 'Edit'
kwargs['button'] = 'Update'
- return render(request, 'location_edit.html', kwargs)
+ return render(request, 'base_edit.html', kwargs)
def location_delete(request, id_loc):
@@ -161,19 +163,15 @@ def location_delete(request, id_loc):
def devices(request):
- devices = Device.objects.all().order_by('device_type__name')
-
-# keys = ['id', 'device_type__name', 'name', 'ip_address']
- keys = ['id', 'name', 'ip_address', 'port_address', 'device_type']
-
- kwargs = {}
- kwargs['device_keys'] = keys[1:]
- kwargs['devices'] = devices#.values(*keys)
+ page = request.GET.get('page')
+ order = ('device_type', 'name')
+
+ kwargs = get_paginator(Device, page, order)
+ kwargs['keys'] = ['name', 'ip_address', 'port_address', 'device_type']
kwargs['title'] = 'Device'
kwargs['suptitle'] = 'List'
- kwargs['button'] = 'New Device'
- return render(request, 'devices.html', kwargs)
+ return render(request, 'base_list.html', kwargs)
def device(request, id_dev):
@@ -208,7 +206,7 @@ def device_new(request):
kwargs['suptitle'] = 'New'
kwargs['button'] = 'Create'
- return render(request, 'device_edit.html', kwargs)
+ return render(request, 'base_edit.html', kwargs)
def device_edit(request, id_dev):
@@ -231,7 +229,7 @@ def device_edit(request, id_dev):
kwargs['suptitle'] = 'Edit'
kwargs['button'] = 'Update'
- return render(request, 'device_edit.html', kwargs)
+ return render(request, 'base_edit.html', kwargs)
def device_delete(request, id_dev):
@@ -260,18 +258,21 @@ def device_delete(request, id_dev):
def campaigns(request):
- campaigns = Campaign.objects.all().order_by('start_date')
-
- keys = ['id', 'name', 'start_date', 'end_date']
+ page = request.GET.get('page')
+ order = ('start_date',)
+ filters = request.GET.copy()
+
+ kwargs = get_paginator(Campaign, page, order, filters)
- kwargs = {}
- kwargs['campaign_keys'] = keys[1:]
- kwargs['campaigns'] = campaigns#.values(*keys)
+ form = FilterForm(initial=request.GET, extra_fields=['range_date', 'tags','template'])
+ kwargs['keys'] = ['name', 'start_date', 'end_date']
kwargs['title'] = 'Campaign'
kwargs['suptitle'] = 'List'
- kwargs['button'] = 'New Campaign'
+ kwargs['form'] = form
+ filters.pop('page', None)
+ kwargs['q'] = urllib.urlencode(filters)
- return render(request, 'campaigns.html', kwargs)
+ return render(request, 'base_list.html', kwargs)
def campaign(request, id_camp):
@@ -286,7 +287,7 @@ def campaign(request, id_camp):
kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description']
kwargs['experiments'] = experiments
- kwargs['experiment_keys'] = ['name', 'radar', 'start_time', 'end_time']
+ kwargs['experiment_keys'] = ['name', 'radar_system', 'start_time', 'end_time']
kwargs['title'] = 'Campaign'
kwargs['suptitle'] = 'Details'
@@ -467,20 +468,22 @@ def campaign_import(request, id_camp):
def experiments(request):
- experiment_list = Experiment.objects.all()
-
- keys = ['id', 'name', 'start_time', 'end_time']
-
- kwargs = {}
+ page = request.GET.get('page')
+ order = ('location',)
+ filters = request.GET.copy()
+
+ kwargs = get_paginator(Experiment, page, order, filters)
- kwargs['experiment_keys'] = keys[1:]
- kwargs['experiments'] = experiment_list
+ form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
+ kwargs['keys'] = ['name', 'radar_system', 'start_time', 'end_time']
kwargs['title'] = 'Experiment'
kwargs['suptitle'] = 'List'
- kwargs['button'] = 'New Experiment'
+ kwargs['form'] = form
+ filters.pop('page', None)
+ kwargs['q'] = urllib.urlencode(filters)
- return render(request, 'experiments.html', kwargs)
+ return render(request, 'base_list.html', kwargs)
def experiment(request, id_exp):
@@ -491,7 +494,7 @@ def experiment(request, id_exp):
kwargs = {}
- kwargs['experiment_keys'] = ['template', 'radar', 'name', 'start_time', 'end_time']
+ kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
kwargs['experiment'] = experiment
kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
@@ -532,7 +535,8 @@ def experiment_new(request, id_camp=None):
form = NewForm()
if request.method == 'POST':
- form = ExperimentForm(request.POST)
+ form = ExperimentForm(request.POST)
+ print form.data
if form.is_valid():
experiment = form.save()
@@ -792,21 +796,26 @@ def parse_mask(l):
values.reverse()
return int(''.join([str(x) for x in values]), 2)
-
+
def dev_confs(request):
- configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
-
- kwargs = {}
- kwargs['configuration_keys'] = ['device', 'name', 'experiment', 'type', 'programmed_date']
- kwargs['configurations'] = configurations
+ page = request.GET.get('page')
+ order = ('type', 'device__device_type', 'experiment')
+ filters = request.GET.copy()
+
+ kwargs = get_paginator(Configuration, page, order, filters)
+ form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
+ kwargs['keys'] = ['name', 'experiment', 'type', 'programmed_date']
kwargs['title'] = 'Configuration'
kwargs['suptitle'] = 'List'
+ kwargs['form'] = form
+ filters.pop('page', None)
+ kwargs['q'] = urllib.urlencode(filters)
- return render(request, 'dev_confs.html', kwargs)
+ return render(request, 'base_list.html', kwargs)
def dev_conf(request, id_conf):
@@ -874,8 +883,7 @@ def dev_conf_new(request, id_exp=0, id_dev=0):
if conf.device.device_type.name=='jars':
conf.add_parms_to_filter()
- return redirect('url_dev_conf', id_conf=conf.pk)
-
+ return redirect('url_dev_conf', id_conf=conf.pk)
kwargs['id_exp'] = id_exp
kwargs['form'] = form
@@ -1172,6 +1180,44 @@ def sidebar(**kwargs):
return side_data
+def get_paginator(model, page, order, filters={}, n=10):
+
+ kwargs = {}
+ query = Q()
+ if isinstance(filters, QueryDict):
+ filters = filters.dict()
+ [filters.pop(key) for key in filters.keys() if filters[key] in ('', ' ')]
+ filters.pop('page', None)
+
+ if 'start_date' in filters:
+ filters['start_date__gte'] = filters.pop('start_date')
+ if 'end_date' in filters:
+ filters['start_date__lte'] = filters.pop('end_date')
+ if 'tags' in filters:
+ tags = filters.pop('tags')
+ if 'tags' in model._meta.get_all_field_names():
+ query = query | Q(tags__icontains=tags)
+ if 'name' in model._meta.get_all_field_names():
+ query = query | Q(name__icontains=tags)
+ if 'location' in model._meta.get_all_field_names():
+ query = query | Q(location__name__icontains=tags)
+ if 'device' in model._meta.get_all_field_names():
+ query = query | Q(device__name__icontains=tags)
+
+ object_list = model.objects.filter(query, **filters).order_by(*order)
+ paginator = Paginator(object_list, n)
+
+ try:
+ objects = paginator.page(page)
+ except PageNotAnInteger:
+ objects = paginator.page(1)
+ except EmptyPage:
+ objects = paginator.page(paginator.num_pages)
+
+ kwargs['objects'] = objects
+ kwargs['offset'] = (int(page)-1)*n if page else 0
+
+ return kwargs
def operation(request, id_camp=None):
diff --git a/apps/rc/models.py b/apps/rc/models.py
index 9715fd0..7f05dd6 100644
--- a/apps/rc/models.py
+++ b/apps/rc/models.py
@@ -57,8 +57,8 @@ DAT_CMDS = {
class RCConfiguration(Configuration):
- ipp = models.FloatField(verbose_name='Inter pulse period [Km]', validators=[MinValueValidator(1), MaxValueValidator(9000)], default=300)
- ntx = models.PositiveIntegerField(verbose_name='Number of TX', validators=[MinValueValidator(1), MaxValueValidator(300)], default=1)
+ ipp = models.FloatField(verbose_name='IPP [Km]', validators=[MinValueValidator(1), MaxValueValidator(9000)], default=300)
+ ntx = models.PositiveIntegerField(verbose_name='Number of TX', validators=[MinValueValidator(1), MaxValueValidator(400)], default=1)
clock_in = models.FloatField(verbose_name='Clock in [MHz]', validators=[MinValueValidator(1), MaxValueValidator(80)], default=1)
clock_divider = models.PositiveIntegerField(verbose_name='Clock divider', validators=[MinValueValidator(1), MaxValueValidator(256)], default=1)
clock = models.FloatField(verbose_name='Clock Master [MHz]', blank=True, default=1)
@@ -74,14 +74,6 @@ class RCConfiguration(Configuration):
class Meta:
db_table = 'rc_configurations'
-
- def __unicode__(self):
-
- if self.mix:
- return u'[RC MIXED]: {}'.format(self.name)
- else:
- return u'[RC]: {}'.format(self.name)
-
def get_absolute_url_plot(self):
return reverse('url_plot_rc_pulses', args=[str(self.id)])