8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-25 04:43:10 +00:00

Profile default different for dormitories (option)

This commit is contained in:
chirac 2019-07-21 01:02:32 +02:00
parent a51c5f4b57
commit 3ec4fdd9d9
3 changed files with 54 additions and 4 deletions

View file

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2019-07-20 21:18
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('topologie', '0071_auto_20190218_1936'),
]
operations = [
migrations.AlterModelOptions(
name='room',
options={'ordering': ['building__name'], 'permissions': (('view_room', 'Can view a room object'),), 'verbose_name': 'room', 'verbose_name_plural': 'rooms'},
),
migrations.AddField(
model_name='portprofile',
name='on_dormitory',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dormitory_ofprofil', to='topologie.Dormitory', verbose_name='Profil on dormitory'),
),
migrations.AlterField(
model_name='portprofile',
name='profil_default',
field=models.CharField(blank=True, choices=[('room', 'Room'), ('access_point', 'Access point'), ('uplink', 'Uplink'), ('asso_machine', 'Organisation machine'), ('nothing', 'Nothing')], max_length=32, null=True, verbose_name='Default profile'),
),
migrations.AlterUniqueTogether(
name='portprofile',
unique_together=set([('on_dormitory', 'profil_default')]),
),
]

View file

@ -650,7 +650,7 @@ class Port(AclMixin, RevMixin, models.Model):
:returns: the profile of self (port)""" :returns: the profile of self (port)"""
def profile_or_nothing(profile): def profile_or_nothing(profile):
port_profile = PortProfile.objects.filter( port_profile = PortProfile.objects.filter(
profil_default=profile).first() profil_default=profile).filter(switch__switchbay__building__dormitory).first()
if port_profile: if port_profile:
return port_profile return port_profile
else: else:
@ -791,9 +791,16 @@ class PortProfile(AclMixin, RevMixin, models.Model):
choices=PROFIL_DEFAULT, choices=PROFIL_DEFAULT,
blank=True, blank=True,
null=True, null=True,
unique=True,
verbose_name=_("Default profile") verbose_name=_("Default profile")
) )
on_dormitory = models.ForeignKey(
'topologie.Dormitory',
related_name='dormitory_ofprofil',
on_delete=models.SET_NULL,
blank=True,
null=True,
verbose_name=_("Profil on dormitory")
)
vlan_untagged = models.ForeignKey( vlan_untagged = models.ForeignKey(
'machines.Vlan', 'machines.Vlan',
related_name='vlan_untagged', related_name='vlan_untagged',
@ -871,6 +878,7 @@ class PortProfile(AclMixin, RevMixin, models.Model):
) )
verbose_name = _("port profile") verbose_name = _("port profile")
verbose_name_plural = _("port profiles") verbose_name_plural = _("port profiles")
unique_together = ['on_dormitory', 'profil_default']
security_parameters_fields = [ security_parameters_fields = [
'loop_protect', 'loop_protect',
@ -893,6 +901,14 @@ class PortProfile(AclMixin, RevMixin, models.Model):
def security_parameters_as_str(self): def security_parameters_as_str(self):
return ','.join(self.security_parameters_enabled) return ','.join(self.security_parameters_enabled)
def clean(self):
""" Check that there is only one generic profil default"""
super(PortProfile, self).clean()
if self.profil_default and not self.on_dormitory and PortProfile.objects.exclude(id=self.id).filter(profil_default=self.profil_default).exclude(on_dormitory__isnull=False).exists():
raise ValidationError(
{'profil_default': _("A default profile for all dormitory of that type already exists.")}
)
def __str__(self): def __str__(self):
return self.name return self.name

View file

@ -35,7 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<thead> <thead>
<tr> <tr>
<th>{% trans "Name" %}</th> <th>{% trans "Name" %}</th>
<th>{% trans "Default for" %}</th> <th>{% trans "Default for and place" %}</th>
<th>{% trans "VLANs" %}</th> <th>{% trans "VLANs" %}</th>
<th>{% trans "RADIUS settings" %}</th> <th>{% trans "RADIUS settings" %}</th>
<th>{% trans "Speed limit" %}</th> <th>{% trans "Speed limit" %}</th>
@ -47,7 +47,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% for port_profile in port_profile_list %} {% for port_profile in port_profile_list %}
<tr> <tr>
<td>{{ port_profile.name }}</td> <td>{{ port_profile.name }}</td>
<td>{{ port_profile.profil_default }}</td> <td>{{ port_profile.profil_default }} {% if port_profile.profil_default%}<b> - {% if port_profile.on_dormitory %} on {{ port_profile.on_dormitory }} {% else %} Everywhere {% endif %}</b>{% endif %}</td>
<td> <td>
{% if port_profile.vlan_untagged %} {% if port_profile.vlan_untagged %}
<b>{% trans "Untagged: " %}</b>{{ port_profile.vlan_untagged }} <b>{% trans "Untagged: " %}</b>{{ port_profile.vlan_untagged }}