From 4fd88f10409365efb3b4a3d4a8f2c21b997cce34 2016-02-15 17:12:32 From: Miguel Urco Date: 2016-02-15 17:12:32 Subject: [PATCH] Location model added to RadarSys git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@62 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71 --- diff --git a/apps/main/forms.py b/apps/main/forms.py index 941069c..d8c46b9 100644 --- a/apps/main/forms.py +++ b/apps/main/forms.py @@ -1,7 +1,7 @@ from django import forms from django.utils.safestring import mark_safe -from .models import DeviceType, Device, Experiment, Campaign, Configuration +from .models import DeviceType, Device, Experiment, Campaign, Configuration, Location def add_empty_choice(choices, pos=0, label='-----'): if len(choices)>0: @@ -45,6 +45,11 @@ class ExperimentForm(forms.ModelForm): model = Experiment fields = ['campaign', 'name', 'start_time', 'end_time'] +class LocationForm(forms.ModelForm): + class Meta: + model = Location + exclude = [''] + class DeviceForm(forms.ModelForm): class Meta: model = Device @@ -57,4 +62,3 @@ class ConfigurationForm(forms.ModelForm): class DeviceTypeForm(forms.Form): device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name'))) - diff --git a/apps/main/models.py b/apps/main/models.py index 2e0fb2a..cd1e8d1 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -1,9 +1,14 @@ -from itertools import chain from django.db import models from polymorphic import PolymorphicModel from django.core.urlresolvers import reverse +CONF_STATES = ( + (0, 'Disconnected'), + (1, 'Connected'), + (1, 'Running'), + ) + CONF_TYPES = ( (0, 'Active'), (1, 'Historical'), @@ -27,15 +32,22 @@ DEV_TYPES = ( ) # Create your models here. + +class Location(models.Model): + + name = models.CharField(max_length = 30) + description = models.TextField(blank=True, null=True) + + class Meta: + db_table = 'db_location' + + def __unicode__(self): + return u'%s' % self.name class DeviceType(models.Model): name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc') - description = models.TextField(blank=True, null=True) - -# info = models.TextField(blank=True, null=True) -# status = models.PositiveSmallIntegerField(default=1, choices=STATES) class Meta: db_table = 'db_device_types' @@ -46,15 +58,13 @@ class DeviceType(models.Model): class Device(models.Model): device_type = models.ForeignKey(DeviceType) +# location = models.ForeignKey(Location) + name = models.CharField(max_length=40, default='') ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0') port_address = models.PositiveSmallIntegerField(default=2000) description = models.TextField(blank=True, null=True) status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES) - -# serial_number = models.CharField(max_length=40, default='') -# mac_address = models.CharField(max_length = 20, null=True, blank=True) - class Meta: db_table = 'db_devices' @@ -94,8 +104,12 @@ class Configuration(PolymorphicModel): experiment = models.ForeignKey(Experiment) device = models.ForeignKey(Device) + + status = models.PositiveSmallIntegerField(default=0, choices=CONF_STATES) type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES) + name = models.CharField(max_length=40, default='') + created_date = models.DateTimeField(auto_now_add=True) programmed_date = models.DateTimeField(auto_now=True) diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 992e3f2..7e6ac50 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -37,13 +37,15 @@
{% for item in configurations %} - {{item.device__name}} + {{item.device.name}} {% endfor %}
@@ -90,7 +90,7 @@
{% for item in configurations %} - {{item.device__name}} + {{item.device.name}} {% endfor %}
diff --git a/apps/main/templatetags/main_tags.py b/apps/main/templatetags/main_tags.py index b663cbb..76d2217 100644 --- a/apps/main/templatetags/main_tags.py +++ b/apps/main/templatetags/main_tags.py @@ -17,6 +17,17 @@ def attr(instance, key): def title(s): return s.replace('_', ' ').title() +@register.filter +def value(instance, key): + + item = instance + for my_key in key.split("__"): + print "TP Value", item, my_key + item = attr(item, my_key) + + print item + return item + @register.simple_tag def get_verbose_field_name(instance, field_name): """ diff --git a/apps/main/urls.py b/apps/main/urls.py index f5382da..f9b3cf0 100644 --- a/apps/main/urls.py +++ b/apps/main/urls.py @@ -1,6 +1,12 @@ from django.conf.urls import url urlpatterns = ( + url(r'^location/new/$', 'apps.main.views.location_new', name='url_add_location'), + url(r'^location/$', 'apps.main.views.locations', name='url_locations'), + url(r'^location/(?P-?\d+)/$', 'apps.main.views.location', name='url_location'), + url(r'^location/(?P-?\d+)/edit/$', 'apps.main.views.location_edit', name='url_edit_location'), + url(r'^location/(?P-?\d+)/delete/$', 'apps.main.views.location_delete', name='url_delete_location'), + url(r'^device/new/$', 'apps.main.views.device_new', name='url_add_device'), url(r'^device/$', 'apps.main.views.devices', name='url_devices'), url(r'^device/(?P-?\d+)/$', 'apps.main.views.device', name='url_device'), @@ -24,4 +30,5 @@ urlpatterns = ( url(r'^dev_conf/(?P-?\d+)/$', 'apps.main.views.dev_conf', name='url_dev_conf'), url(r'^dev_conf/(?P-?\d+)/edit/$', 'apps.main.views.dev_conf_edit', name='url_edit_dev_conf'), url(r'^dev_conf/(?P-?\d+)/delete/$', 'apps.main.views.dev_conf_delete', name='url_delete_dev_conf'), + ) diff --git a/apps/main/views.py b/apps/main/views.py index 7464e14..4b1e21f 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -1,7 +1,7 @@ from django.shortcuts import render, redirect, get_object_or_404, HttpResponse from django.contrib import messages -from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm +from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm from apps.cgs.forms import CGSConfigurationForm from apps.jars.forms import JARSConfigurationForm from apps.usrp.forms import USRPConfigurationForm @@ -9,7 +9,7 @@ from apps.abs.forms import ABSConfigurationForm from apps.rc.forms import RCConfigurationForm from apps.dds.forms import DDSConfigurationForm -from .models import Campaign, Experiment, Device, Configuration +from .models import Campaign, Experiment, Device, Configuration, Location from apps.cgs.models import CGSConfiguration from apps.jars.models import JARSConfiguration from apps.usrp.models import USRPConfiguration @@ -42,12 +42,99 @@ def index(request): return render(request, 'index.html', kwargs) +def locations(request): + + locations = Location.objects.all().order_by('name') + + keys = ['id', 'name', 'description'] + + kwargs = {} + kwargs['location_keys'] = keys[1:] + kwargs['locations'] = locations + kwargs['title'] = 'Location' + kwargs['suptitle'] = 'List' + kwargs['button'] = 'New Location' + + return render(request, 'locations.html', kwargs) + +def location(request, id_loc): + + location = get_object_or_404(Location, pk=id_loc) + + kwargs = {} + kwargs['location'] = location + kwargs['location_keys'] = ['name', 'description'] + + kwargs['title'] = 'Location' + kwargs['suptitle'] = 'Details' + + return render(request, 'location.html', kwargs) + +def location_new(request): + + if request.method == 'GET': + form = LocationForm() + + if request.method == 'POST': + form = LocationForm(request.POST) + + if form.is_valid(): + form.save() + return redirect('url_locations') + + kwargs = {} + kwargs['form'] = form + kwargs['title'] = 'Location' + kwargs['suptitle'] = 'New' + kwargs['button'] = 'Create' + + return render(request, 'location_edit.html', kwargs) + +def location_edit(request, id_loc): + + location = get_object_or_404(Location, pk=id_loc) + + if request.method=='GET': + form = LocationForm(instance=location) + + if request.method=='POST': + form = LocationForm(request.POST, instance=location) + + if form.is_valid(): + form.save() + return redirect('url_locations') + + kwargs = {} + kwargs['form'] = form + kwargs['title'] = 'Location' + kwargs['suptitle'] = 'Edit' + kwargs['button'] = 'Update' + + return render(request, 'location_edit.html', kwargs) + +def location_delete(request, id_loc): + + location = get_object_or_404(Location, pk=id_loc) + + if request.method=='POST': + + if request.user.is_staff: + location.delete() + return redirect('url_locations') + + return HttpResponse("Not enough permission to delete this object") + + kwargs = {'object':location, 'loc_active':'active', + 'url_cancel':'url_location', 'id_item':id_loc} + + return render(request, 'item_delete.html', kwargs) + 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', 'device_type'] + keys = ['id', 'name', 'ip_address', 'port_address', 'device_type'] kwargs = {} kwargs['device_keys'] = keys[1:] @@ -69,8 +156,6 @@ def device(request, id_dev): kwargs['title'] = 'Device' kwargs['suptitle'] = 'Details' - kwargs['button'] = 'Add Device' - return render(request, 'device.html', kwargs) def device_new(request): @@ -251,21 +336,23 @@ def experiment(request, id_exp): experiment = get_object_or_404(Experiment, pk=id_exp) experiments = Experiment.objects.filter(campaign=experiment.campaign) - configurations = Configuration.objects.filter(experiment=experiment) + configurations = Configuration.objects.filter(experiment=experiment, type=0) kwargs = {} exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time'] - conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address'] + conf_keys = ['id', 'device__name', 'device__device_type', 'device__ip_address', 'device__port_address'] + conf_labels = ['id', 'device__name', 'device_type', 'ip_address', 'port_address'] kwargs['experiment_keys'] = exp_keys[1:] kwargs['experiment'] = experiment kwargs['experiments'] = experiments.values(*exp_keys) + kwargs['configuration_labels'] = conf_labels[1:] kwargs['configuration_keys'] = conf_keys[1:] - kwargs['configurations'] = configurations.values(*conf_keys) + kwargs['configurations'] = configurations #.values(*conf_keys) kwargs['title'] = 'Experiment' kwargs['suptitle'] = 'Details' @@ -335,7 +422,7 @@ def experiment_delete(request, id_exp): def dev_confs(request): - configurations = Configuration.objects.all().order_by('experiment') + configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment') # keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name'] @@ -385,14 +472,15 @@ def dev_conf_new(request, id_exp=0): experiment = Experiment.objects.get(pk=request.POST['experiment']) device = Device.objects.get(pk=request.POST['device']) - exp_devices = Device.objects.filter(configuration__experiment=experiment) + exp_devices = Device.objects.filter(configuration__experiment=experiment, + configuration__type=0) if device.id not in exp_devices.values('id',): DevConfModel = CONF_MODELS[device.device_type.name] conf = DevConfModel(experiment=experiment, device=device) conf.save() - + return redirect('url_experiment', id_exp=experiment.id) kwargs = {} @@ -401,9 +489,6 @@ def dev_conf_new(request, id_exp=0): kwargs['suptitle'] = 'New' kwargs['button'] = 'Create' - ###### SIDEBAR ###### - kwargs.update(sidebar(conf)) - return render(request, 'dev_conf_edit.html', kwargs) def dev_conf_edit(request, id_conf): @@ -494,7 +579,7 @@ def sidebar(conf): configurations = Configuration.objects.filter(experiment=conf.experiment, type=0) exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time'] - conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address'] + conf_keys = ['id', 'device'] kwargs = {} @@ -504,6 +589,6 @@ def sidebar(conf): kwargs['experiments'] = experiments.values(*exp_keys) kwargs['configuration_keys'] = conf_keys[1:] - kwargs['configurations'] = configurations.values(*conf_keys) + kwargs['configurations'] = configurations #.values(*conf_keys) return kwargs \ No newline at end of file