From d4fe0e1327354f57f87fa317555e58827bcea851 2016-04-06 21:55:54 From: Juan C. Espinoza Date: 2016-04-06 21:55:54 Subject: [PATCH] Update several views and models in main app git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@106 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71 --- diff --git a/apache/apache_radarsys.conf b/apache/apache_radarsys.conf index 0ba60e5..a0928fc 100644 --- a/apache/apache_radarsys.conf +++ b/apache/apache_radarsys.conf @@ -3,10 +3,7 @@ WSGIScriptAlias / /usr/local/radarsys/radarsys/wsgi.py WSGIPythonPath /usr/local/radarsys/:/usr/local/virtuals/radarsys/lib/python2.7/site-packages -Alias /static/ /usr/local/radarsys/apps/main/static/ - - Require all granted - +Alias /static/ /var/www/html/static/ @@ -14,6 +11,4 @@ Alias /static/ /usr/local/radarsys/apps/main/static/ Require all granted #Allow from all - - - + \ No newline at end of file diff --git a/apps/cgs/forms.py b/apps/cgs/forms.py index 254745f..8385de0 100644 --- a/apps/cgs/forms.py +++ b/apps/cgs/forms.py @@ -3,7 +3,7 @@ from apps.main.models import Device from .models import CGSConfiguration class CGSConfigurationForm(forms.ModelForm): - #freq0.widget = te + def __init__(self, *args, **kwargs): #request = kwargs.pop('request') super(CGSConfigurationForm, self).__init__(*args, **kwargs) @@ -13,10 +13,11 @@ class CGSConfigurationForm(forms.ModelForm): if instance and instance.pk: devices = Device.objects.filter(device_type__name='cgs') - items = devices.values('id', 'name', 'device_type__name', 'ip_address') - self.fields['experiment'].widget.attrs['readonly'] = True - self.fields['device'].widget.choices = [(item['id'], '[%s]: %s | %s' % (item['device_type__name'], item['name'], item['ip_address'])) for item in items] + if instance.experiment: + self.fields['experiment'].widget.attrs['disabled'] = 'disabled' + + self.fields['device'].widget.choices = [(device.id, device) for device in devices] def clean(self): return @@ -24,9 +25,8 @@ class CGSConfigurationForm(forms.ModelForm): class Meta: model = CGSConfiguration - #exclude = ('freqs', 'clk_in', 'mult','div',) -# exclude = ('freqs',) - fields = ('experiment', 'device', 'freq0', 'freq1', 'freq2', 'freq3') + exclude = ('type', 'parameters', 'status') + #fields = ('experiment', 'device', 'freq0', 'freq1', 'freq2', 'freq3') class UploadFileForm(forms.Form): diff --git a/apps/cgs/models.py b/apps/cgs/models.py index 04765cb..3ec678f 100644 --- a/apps/cgs/models.py +++ b/apps/cgs/models.py @@ -15,8 +15,6 @@ class CGSConfiguration(Configuration): freq1 = models.IntegerField(verbose_name='Frequency 1',validators=[MinValueValidator(0), MaxValueValidator(450e6)], blank=True, null=True) freq2 = models.IntegerField(verbose_name='Frequency 2',validators=[MinValueValidator(0), MaxValueValidator(450e6)], blank=True, null=True) freq3 = models.IntegerField(verbose_name='Frequency 3',validators=[MinValueValidator(0), MaxValueValidator(450e6)], blank=True, null=True) - #jfreqs = JSONField(default={"frequencies":[{"f0":freq0,"f1":freq1,"f2":freq2,"f3":freq3}]}, blank=True) - def verify_frequencies(self): diff --git a/apps/cgs/views.py b/apps/cgs/views.py index e3e799e..c38d214 100644 --- a/apps/cgs/views.py +++ b/apps/cgs/views.py @@ -66,7 +66,7 @@ def cgs_conf(request, id_conf): kwargs['no_play'] = True ###### SIDEBAR ###### - kwargs.update(sidebar(conf)) + kwargs.update(sidebar(conf=conf)) return render(request, 'cgs_conf.html', kwargs) @@ -101,10 +101,6 @@ def cgs_conf_edit(request, id_conf): kwargs['suptitle'] = 'Edit' kwargs['button'] = 'Save' - - ###### SIDEBAR ###### - kwargs.update(sidebar(conf)) - return render(request, 'cgs_conf_edit.html', kwargs) # # def cgs_conf_write(request, id_conf): diff --git a/apps/dds/forms.py b/apps/dds/forms.py index 26a4b91..28c4395 100644 --- a/apps/dds/forms.py +++ b/apps/dds/forms.py @@ -16,10 +16,8 @@ class DDSConfigurationForm(forms.ModelForm): devices = Device.objects.filter(device_type__name='dds') - self.fields['experiment'].widget.attrs['readonly'] = True - - if instance.experiment is not None: - self.fields['experiment'].widget.choices = [(instance.experiment.id, instance.experiment)] + if instance.experiment: + self.fields['experiment'].widget.attrs['disabled'] = 'disabled' self.fields['device'].widget.choices = [(device.id, device) for device in devices] diff --git a/apps/dds/views.py b/apps/dds/views.py index 8cb7d4b..9c5fd45 100644 --- a/apps/dds/views.py +++ b/apps/dds/views.py @@ -42,7 +42,7 @@ def dds_conf(request, id_conf): kwargs['button'] = 'Edit Configuration' ###### SIDEBAR ###### - kwargs.update(sidebar(conf)) + kwargs.update(sidebar(conf=conf)) return render(request, 'dds_conf.html', kwargs) @@ -73,9 +73,6 @@ def dds_conf_edit(request, id_conf): kwargs['suptitle'] = 'Edit' kwargs['button'] = 'Save' - ###### SIDEBAR ###### - kwargs.update(sidebar(conf)) - return render(request, 'dds_conf_edit.html', kwargs) # def dds_conf_import(request, id_conf): diff --git a/apps/main/fixtures/main_initial_data.json b/apps/main/fixtures/main_initial_data.json index 64cc4be..3cebba3 100644 --- a/apps/main/fixtures/main_initial_data.json +++ b/apps/main/fixtures/main_initial_data.json @@ -1,7 +1,8 @@ [ -{"fields": {"name": "JRO", "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": "MAIN RADAR", "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}, {"fields": {"name": "rc", "description": ""}, "model": "main.devicetype", "pk": 1}, {"fields": {"name": "dds", "description": ""}, "model": "main.devicetype", "pk": 2}, {"fields": {"name": "cgs", "description": ""}, "model": "main.devicetype", "pk": 3}, diff --git a/apps/main/forms.py b/apps/main/forms.py index afda942..42446bc 100644 --- a/apps/main/forms.py +++ b/apps/main/forms.py @@ -39,10 +39,16 @@ class TimepickerWidget(forms.widgets.TextInput): return mark_safe(html) class CampaignForm(forms.ModelForm): + + experiments = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple(), + queryset=Experiment.objects.filter(template=True), + required=False) + def __init__(self, *args, **kwargs): super(CampaignForm, self).__init__(*args, **kwargs) self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs) self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs) + self.fields['description'].widget.attrs = {'rows': 2} class Meta: model = Campaign @@ -54,8 +60,6 @@ class ExperimentForm(forms.ModelForm): super(ExperimentForm, self).__init__(*args, **kwargs) self.fields['start_time'].widget = TimepickerWidget(self.fields['start_time'].widget.attrs) self.fields['end_time'].widget = TimepickerWidget(self.fields['end_time'].widget.attrs) - - self.fields['campaign'].widget.attrs['readonly'] = True class Meta: model = Experiment @@ -72,6 +76,13 @@ class DeviceForm(forms.ModelForm): exclude = ['status'] class ConfigurationForm(forms.ModelForm): + + def __init__(self, *args, **kwargs): + super(ConfigurationForm, self).__init__(*args, **kwargs) + + if 'initial' in kwargs and 'experiment' in kwargs['initial'] and kwargs['initial']['experiment'] not in (0, '0'): + self.fields['experiment'].widget.attrs['disabled'] = 'disabled' + class Meta: model = Configuration exclude = ['type', 'created_date', 'programmed_date', 'parameters'] @@ -124,4 +135,17 @@ class OperationSearchForm(forms.Form): def __init__(self, *args, **kwargs): 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, '-----'), + (1, 'Empty (blank)'), + (2, 'Template'))) + choose_template = forms.ChoiceField() + + def __init__(self, *args, **kwargs): + + template_choices = kwargs.pop('template_choices', []) + super(NewForm, self).__init__(*args, **kwargs) + self.fields['choose_template'].choices = add_empty_choice(template_choices) \ No newline at end of file diff --git a/apps/main/models.py b/apps/main/models.py index 94b01a0..fe7d81e 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -1,3 +1,6 @@ + +from datetime import datetime + from django.db import models from polymorphic import PolymorphicModel @@ -103,35 +106,22 @@ class Device(models.Model): class Campaign(models.Model): - template = models.BooleanField(default=False) - - name = models.CharField(max_length=40, unique=True) - experiment = models.ManyToManyField('Experiment') - + template = models.BooleanField(default=False) + name = models.CharField(max_length=60, unique=True) start_date = models.DateTimeField(blank=True, null=True) end_date = models.DateTimeField(blank=True, null=True) tags = models.CharField(max_length=40) description = models.TextField(blank=True, null=True) + experiments = models.ManyToManyField('Experiment', blank=True) class Meta: db_table = 'db_campaigns' + ordering = ('name',) def __unicode__(self): return u'%s' % (self.name) - -# class Radar(models.Model): -# -# # name = models.CharField(max_length = 30) -# experiment = models.ForeignKey('Experiment', on_delete=models.CASCADE) -# location = models.OneToOneField('Location', on_delete=models.CASCADE) -# status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES) -# -# class Meta: -# db_table = 'db_radar' -# -# def __unicode__(self): -# return u'%s' % self.location + class RunningExperiment(models.Model): radar = models.OneToOneField('Location', on_delete=models.CASCADE) running_experiment = models.ManyToManyField('Experiment') @@ -140,22 +130,35 @@ class RunningExperiment(models.Model): class Experiment(models.Model): - template = models.BooleanField(default=False) - - #campaign = models.ForeignKey('Campaign', null=True, blank=True, on_delete=models.CASCADE) + template = models.BooleanField(default=False) + location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE) + name = models.CharField(max_length=40, default='', unique=True) location = models.ForeignKey('Location', null=True, blank=True, on_delete=models.CASCADE) - - name = models.CharField(max_length=40, default='') start_time = models.TimeField(default='00:00:00') end_time = models.TimeField(default='23:59:59') status = models.PositiveSmallIntegerField(default=0, choices=EXP_STATES) class Meta: db_table = 'db_experiments' + ordering = ('name',) def __unicode__(self): return u'%s' % (self.name) + def clone(self, **kwargs): + + confs = Configuration.objects.filter(experiment=self, type=0) + self.pk = None + self.name = '{} [{:%Y/%m/%d}]'.format(self.name, datetime.now()) + for attr, value in kwargs.items(): + setattr(self, attr, value) + + self.save() + + for conf in confs: + conf.clone(experiment=self, template=False) + + return self def get_status(self): configurations = Configuration.objects.filter(experiment=self) @@ -198,6 +201,7 @@ class Experiment(models.Model): return color + class Configuration(PolymorphicModel): template = models.BooleanField(default=False) @@ -228,7 +232,16 @@ class Configuration(PolymorphicModel): else: return u'%s' % self.device.name + def clone(self, **kwargs): + self.pk = None + self.id = None + for attr, value in kwargs.items(): + setattr(self, attr, value) + + self.save() + + return self def parms_to_dict(self): diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 1ccdf7e..2047838 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -13,7 +13,11 @@ body {padding-top: 60px} .logo {padding-top: 5px; height: 50px} .clickable-row {cursor: pointer;} - .col-no-padding { padding-left:0; } + .col-no-padding { padding-left:0;} + .gi-2x{font-size: 2em;} + .gi-3x{font-size: 3em;} + .gi-4x{font-size: 4em;} + .gi-5x{font-size: 5em;}