mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-12-03 10:02:25 +00:00
Omnibus, Gestion des MX par re2o , creation d'un model Ns
This commit is contained in:
parent
d5904807da
commit
78d32d911c
9 changed files with 211 additions and 17 deletions
|
@ -1,7 +1,7 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from reversion.admin import VersionAdmin
|
from reversion.admin import VersionAdmin
|
||||||
|
|
||||||
from .models import IpType, Machine, MachineType, Alias, IpList, Interface, Extension
|
from .models import IpType, Machine, MachineType, Alias, IpList, Interface, Extension, Mx, Ns
|
||||||
|
|
||||||
class MachineAdmin(VersionAdmin):
|
class MachineAdmin(VersionAdmin):
|
||||||
list_display = ('user','name','active')
|
list_display = ('user','name','active')
|
||||||
|
@ -16,6 +16,12 @@ class MachineTypeAdmin(VersionAdmin):
|
||||||
class ExtensionAdmin(VersionAdmin):
|
class ExtensionAdmin(VersionAdmin):
|
||||||
list_display = ('name',)
|
list_display = ('name',)
|
||||||
|
|
||||||
|
class MxAdmin(VersionAdmin):
|
||||||
|
list_display = ('zone', 'priority', 'name')
|
||||||
|
|
||||||
|
class NsAdmin(VersionAdmin):
|
||||||
|
list_display = ('zone', 'interface')
|
||||||
|
|
||||||
class IpListAdmin(VersionAdmin):
|
class IpListAdmin(VersionAdmin):
|
||||||
list_display = ('ipv4','ip_type')
|
list_display = ('ipv4','ip_type')
|
||||||
|
|
||||||
|
@ -29,6 +35,8 @@ admin.site.register(Machine, MachineAdmin)
|
||||||
admin.site.register(MachineType, MachineTypeAdmin)
|
admin.site.register(MachineType, MachineTypeAdmin)
|
||||||
admin.site.register(IpType, IpTypeAdmin)
|
admin.site.register(IpType, IpTypeAdmin)
|
||||||
admin.site.register(Extension, ExtensionAdmin)
|
admin.site.register(Extension, ExtensionAdmin)
|
||||||
|
admin.site.register(Mx, MxAdmin)
|
||||||
|
admin.site.register(Ns, NsAdmin)
|
||||||
admin.site.register(IpList, IpListAdmin)
|
admin.site.register(IpList, IpListAdmin)
|
||||||
admin.site.register(Interface, InterfaceAdmin)
|
admin.site.register(Interface, InterfaceAdmin)
|
||||||
admin.site.register(Alias, AliasAdmin)
|
admin.site.register(Alias, AliasAdmin)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from django.forms import ModelForm, Form, ValidationError
|
from django.forms import ModelForm, Form, ValidationError
|
||||||
from django import forms
|
from django import forms
|
||||||
from .models import Alias, Machine, Interface, IpList, MachineType, Extension, IpType
|
from .models import Alias, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, IpType
|
||||||
|
|
||||||
class EditMachineForm(ModelForm):
|
class EditMachineForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -62,11 +62,18 @@ class BaseEditInterfaceForm(EditInterfaceForm):
|
||||||
class NewAliasForm(ModelForm):
|
class NewAliasForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Alias
|
model = Alias
|
||||||
fields = ['alias']
|
fields = ['alias','extension']
|
||||||
|
|
||||||
class EditAliasFullForm(NewAliasForm):
|
class EditAliasForm(NewAliasForm):
|
||||||
class Meta(NewAliasForm.Meta):
|
class Meta(NewAliasForm.Meta):
|
||||||
fields = '__all__'
|
fields = ['alias','extension']
|
||||||
|
|
||||||
|
class DelAliasForm(ModelForm):
|
||||||
|
del_alias = forms.ModelMultipleChoiceField(queryset=Alias.objects.all(), label="Alias actuels", widget=forms.CheckboxSelectMultiple)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
exclude = ['interface_parent', 'alias', 'extension']
|
||||||
|
model = Alias
|
||||||
|
|
||||||
class MachineTypeForm(ModelForm):
|
class MachineTypeForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -117,3 +124,16 @@ class DelExtensionForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
exclude = ['name']
|
exclude = ['name']
|
||||||
model = Extension
|
model = Extension
|
||||||
|
|
||||||
|
class MxForm(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Mx
|
||||||
|
fields = ['zone', 'priority', 'name']
|
||||||
|
|
||||||
|
class DelMxForm(ModelForm):
|
||||||
|
mx = forms.ModelMultipleChoiceField(queryset=Mx.objects.all(), label="MX actuels", widget=forms.CheckboxSelectMultiple)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
exclude = ['zone', 'priority', 'name']
|
||||||
|
model = Mx
|
||||||
|
|
||||||
|
|
43
machines/migrations/0031_auto_20161119_1709.py
Normal file
43
machines/migrations/0031_auto_20161119_1709.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import django.core.validators
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('machines', '0030_auto_20161118_1730'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Mx',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, verbose_name='ID', serialize=False)),
|
||||||
|
('priority', models.IntegerField(unique=True)),
|
||||||
|
('name', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='machines.Alias')),
|
||||||
|
('zone', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='machines.Extension')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Ns',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, verbose_name='ID', serialize=False)),
|
||||||
|
('interface', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='machines.Interface')),
|
||||||
|
('zone', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='machines.Extension')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='iptype',
|
||||||
|
name='domaine_ip',
|
||||||
|
field=models.GenericIPAddressField(protocol='IPv4'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='iptype',
|
||||||
|
name='domaine_range',
|
||||||
|
field=models.IntegerField(validators=[django.core.validators.MinValueValidator(8), django.core.validators.MaxValueValidator(32)]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -34,8 +34,8 @@ class IpType(models.Model):
|
||||||
type = models.CharField(max_length=255)
|
type = models.CharField(max_length=255)
|
||||||
extension = models.ForeignKey('Extension', on_delete=models.PROTECT)
|
extension = models.ForeignKey('Extension', on_delete=models.PROTECT)
|
||||||
need_infra = models.BooleanField(default=False)
|
need_infra = models.BooleanField(default=False)
|
||||||
domaine_ip = models.GenericIPAddressField(protocol='IPv4', unique=True, blank=True, null=True)
|
domaine_ip = models.GenericIPAddressField(protocol='IPv4')
|
||||||
domaine_range = models.IntegerField(blank=True, null=True, validators=[MinValueValidator(8), MaxValueValidator(32)])
|
domaine_range = models.IntegerField(validators=[MinValueValidator(8), MaxValueValidator(32)])
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.type
|
return self.type
|
||||||
|
@ -48,6 +48,22 @@ class Extension(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
class Mx(models.Model):
|
||||||
|
PRETTY_NAME = "Enregistrements MX"
|
||||||
|
|
||||||
|
zone = models.ForeignKey('Extension', on_delete=models.PROTECT)
|
||||||
|
priority = models.IntegerField(unique=True)
|
||||||
|
name = models.OneToOneField('Alias', on_delete=models.PROTECT)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.zone) + ' ' + str(self.priority) + ' ' + str(self.name)
|
||||||
|
|
||||||
|
class Ns(models.Model):
|
||||||
|
PRETTY_NAME = "Enregistrements NS"
|
||||||
|
|
||||||
|
zone = models.ForeignKey('Extension', on_delete=models.PROTECT)
|
||||||
|
interface = models.OneToOneField('Interface', on_delete=models.PROTECT)
|
||||||
|
|
||||||
class Interface(models.Model):
|
class Interface(models.Model):
|
||||||
PRETTY_NAME = "Interface"
|
PRETTY_NAME = "Interface"
|
||||||
|
|
||||||
|
@ -92,7 +108,7 @@ class Alias(models.Model):
|
||||||
raise ValidationError("Impossible d'ajouter l'alias, déjà utilisé par une machine")
|
raise ValidationError("Impossible d'ajouter l'alias, déjà utilisé par une machine")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.alias
|
return str(self.alias) + str(self.extension)
|
||||||
|
|
||||||
class IpList(models.Model):
|
class IpList(models.Model):
|
||||||
PRETTY_NAME = "Addresses ipv4"
|
PRETTY_NAME = "Addresses ipv4"
|
||||||
|
|
|
@ -36,8 +36,8 @@
|
||||||
<ul class="dropdown-menu" aria-labelledby="editioninterface">
|
<ul class="dropdown-menu" aria-labelledby="editioninterface">
|
||||||
{% for al in interface.alias_set.all %}
|
{% for al in interface.alias_set.all %}
|
||||||
<li>
|
<li>
|
||||||
<a href="http://{{ al }}{{ al.extension }}">
|
<a href="http://{{ al }}">
|
||||||
{{ al }}{{ al.extension }}
|
{{ al }}
|
||||||
<i class="glyphicon glyphicon-share-alt"></i>
|
<i class="glyphicon glyphicon-share-alt"></i>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
26
machines/templates/machines/aff_mx.html
Normal file
26
machines/templates/machines/aff_mx.html
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Zone concernée</th>
|
||||||
|
<th>Priorité</th>
|
||||||
|
<th>Enregistrement</th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for mx in mx_list %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ mx.zone }}</td>
|
||||||
|
<td>{{ mx.priority }}</td>
|
||||||
|
<td>{{ mx.name }}</td>
|
||||||
|
<td class="text-right">
|
||||||
|
{% if is_infra %}
|
||||||
|
{% include 'buttons/edit.html' with href='machines:edit-mx' id=mx.id %}
|
||||||
|
{% endif %}
|
||||||
|
{% include 'buttons/history.html' with href='machines:history' name='mx' id=mx.id %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,15 @@
|
||||||
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-extension' %}"><i class="glyphicon glyphicon-trash"></i> Supprimer une ou plusieurs extensions</a>
|
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-extension' %}"><i class="glyphicon glyphicon-trash"></i> Supprimer une ou plusieurs extensions</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% include "machines/aff_extension.html" with extension_list=extension_list %}
|
{% include "machines/aff_extension.html" with extension_list=extension_list %}
|
||||||
<br />
|
|
||||||
<br />
|
<h2>Liste des enregistrements MX</h2>
|
||||||
<br />
|
{% if is_infra %}
|
||||||
{% endblock %}
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:add-mx' %}"><i class="glyphicon glyphicon-plus"></i> Ajouter un enregistrement MX</a>
|
||||||
|
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-mx' %}"><i class="glyphicon glyphicon-trash"></i> Supprimer un enregistrement MX</a>
|
||||||
|
{% endif %}
|
||||||
|
{% include "machines/aff_mx.html" with mx_list=mx_list %}
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ urlpatterns = [
|
||||||
url(r'^del_machine/(?P<machineid>[0-9]+)$', views.del_machine, name='del-machine'),
|
url(r'^del_machine/(?P<machineid>[0-9]+)$', views.del_machine, name='del-machine'),
|
||||||
url(r'^new_interface/(?P<machineid>[0-9]+)$', views.new_interface, name='new-interface'),
|
url(r'^new_interface/(?P<machineid>[0-9]+)$', views.new_interface, name='new-interface'),
|
||||||
url(r'^del_interface/(?P<interfaceid>[0-9]+)$', views.del_interface, name='del-interface'),
|
url(r'^del_interface/(?P<interfaceid>[0-9]+)$', views.del_interface, name='del-interface'),
|
||||||
|
url(r'^manage_alias/(?P<interfaceid>[0-9]+)$', views.manage_alias, name='manage-alias'),
|
||||||
url(r'^add_machinetype/$', views.add_machinetype, name='add-machinetype'),
|
url(r'^add_machinetype/$', views.add_machinetype, name='add-machinetype'),
|
||||||
url(r'^edit_machinetype/(?P<machinetypeid>[0-9]+)$', views.edit_machinetype, name='edit-machinetype'),
|
url(r'^edit_machinetype/(?P<machinetypeid>[0-9]+)$', views.edit_machinetype, name='edit-machinetype'),
|
||||||
url(r'^del_machinetype/$', views.del_machinetype, name='del-machinetype'),
|
url(r'^del_machinetype/$', views.del_machinetype, name='del-machinetype'),
|
||||||
|
@ -19,11 +20,15 @@ urlpatterns = [
|
||||||
url(r'^add_extension/$', views.add_extension, name='add-extension'),
|
url(r'^add_extension/$', views.add_extension, name='add-extension'),
|
||||||
url(r'^edit_extension/(?P<extensionid>[0-9]+)$', views.edit_extension, name='edit-extension'),
|
url(r'^edit_extension/(?P<extensionid>[0-9]+)$', views.edit_extension, name='edit-extension'),
|
||||||
url(r'^del_extension/$', views.del_extension, name='del-extension'),
|
url(r'^del_extension/$', views.del_extension, name='del-extension'),
|
||||||
|
url(r'^add_mx/$', views.add_mx, name='add-mx'),
|
||||||
|
url(r'^edit_mx/(?P<mxid>[0-9]+)$', views.edit_mx, name='edit-mx'),
|
||||||
|
url(r'^del_mx/$', views.del_mx, name='del-mx'),
|
||||||
url(r'^index_extension/$', views.index_extension, name='index-extension'),
|
url(r'^index_extension/$', views.index_extension, name='index-extension'),
|
||||||
url(r'^history/(?P<object>machine)/(?P<id>[0-9]+)$', views.history, name='history'),
|
url(r'^history/(?P<object>machine)/(?P<id>[0-9]+)$', views.history, name='history'),
|
||||||
url(r'^history/(?P<object>interface)/(?P<id>[0-9]+)$', views.history, name='history'),
|
url(r'^history/(?P<object>interface)/(?P<id>[0-9]+)$', views.history, name='history'),
|
||||||
url(r'^history/(?P<object>machinetype)/(?P<id>[0-9]+)$', views.history, name='history'),
|
url(r'^history/(?P<object>machinetype)/(?P<id>[0-9]+)$', views.history, name='history'),
|
||||||
url(r'^history/(?P<object>extension)/(?P<id>[0-9]+)$', views.history, name='history'),
|
url(r'^history/(?P<object>extension)/(?P<id>[0-9]+)$', views.history, name='history'),
|
||||||
|
url(r'^history/(?P<object>mx)/(?P<id>[0-9]+)$', views.history, name='history'),
|
||||||
url(r'^history/(?P<object>iptype)/(?P<id>[0-9]+)$', views.history, name='history'),
|
url(r'^history/(?P<object>iptype)/(?P<id>[0-9]+)$', views.history, name='history'),
|
||||||
url(r'^$', views.index, name='index'),
|
url(r'^$', views.index, name='index'),
|
||||||
url(r'^rest/mac-ip/$', views.mac_ip, name='mac-ip'),
|
url(r'^rest/mac-ip/$', views.mac_ip, name='mac-ip'),
|
||||||
|
|
|
@ -22,8 +22,8 @@ from reversion import revisions as reversion
|
||||||
|
|
||||||
import re
|
import re
|
||||||
from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm, BaseEditInterfaceForm, BaseEditMachineForm, Alias
|
from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm, BaseEditInterfaceForm, BaseEditMachineForm, Alias
|
||||||
from .forms import IpTypeForm, DelIpTypeForm, NewAliasForm, EditAliasFullForm
|
from .forms import IpTypeForm, DelIpTypeForm, NewAliasForm, EditAliasForm, MxForm, DelMxForm
|
||||||
from .models import IpType, Machine, Interface, IpList, MachineType, Extension
|
from .models import IpType, Machine, Interface, IpList, MachineType, Extension, Mx, Ns
|
||||||
from users.models import User
|
from users.models import User
|
||||||
from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER
|
from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER
|
||||||
|
|
||||||
|
@ -146,6 +146,19 @@ def edit_interface(request, interfaceid):
|
||||||
return redirect("/users/profil/" + str(interface.machine.user.id))
|
return redirect("/users/profil/" + str(interface.machine.user.id))
|
||||||
return form({'machineform': machine_form, 'interfaceform': interface_form}, 'machines/machine.html', request)
|
return form({'machineform': machine_form, 'interfaceform': interface_form}, 'machines/machine.html', request)
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def manage_alias(request, interfaceid):
|
||||||
|
try:
|
||||||
|
interface = Interface.objects.get(pk=interfaceid)
|
||||||
|
except Interface.DoesNotExist:
|
||||||
|
messages.error(request, u"Interface inexistante" )
|
||||||
|
return redirect("/machines")
|
||||||
|
if not request.user.has_perms(('infra',)):
|
||||||
|
if not request.user.has_perms(('cableur',)) and interface.machine.user != request.user:
|
||||||
|
messages.error(request, "Vous ne pouvez pas éditer une machine d'un autre user que vous sans droit")
|
||||||
|
return redirect("/users/profil/" + str(request.user.id))
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def del_machine(request, machineid):
|
def del_machine(request, machineid):
|
||||||
try:
|
try:
|
||||||
|
@ -356,6 +369,54 @@ def del_extension(request):
|
||||||
return redirect("/machines/index_extension")
|
return redirect("/machines/index_extension")
|
||||||
return form({'machineform': extension, 'interfaceform': None}, 'machines/machine.html', request)
|
return form({'machineform': extension, 'interfaceform': None}, 'machines/machine.html', request)
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@permission_required('infra')
|
||||||
|
def add_mx(request):
|
||||||
|
mx = MxForm(request.POST or None)
|
||||||
|
if mx.is_valid():
|
||||||
|
with transaction.atomic(), reversion.create_revision():
|
||||||
|
mx.save()
|
||||||
|
reversion.set_user(request.user)
|
||||||
|
reversion.set_comment("Création")
|
||||||
|
messages.success(request, "Cet enregistrement mx a été ajouté")
|
||||||
|
return redirect("/machines/index_extension")
|
||||||
|
return form({'machineform': mx, 'interfaceform': None}, 'machines/machine.html', request)
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@permission_required('infra')
|
||||||
|
def edit_mx(request, mxid):
|
||||||
|
try:
|
||||||
|
mx_instance = Mx.objects.get(pk=mxid)
|
||||||
|
except Mx.DoesNotExist:
|
||||||
|
messages.error(request, u"Entrée inexistante" )
|
||||||
|
return redirect("/machines/index_extension/")
|
||||||
|
mx = MxForm(request.POST or None, instance=mx_instance)
|
||||||
|
if mx.is_valid():
|
||||||
|
with transaction.atomic(), reversion.create_revision():
|
||||||
|
mx.save()
|
||||||
|
reversion.set_user(request.user)
|
||||||
|
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in mx.changed_data))
|
||||||
|
messages.success(request, "Mx modifié")
|
||||||
|
return redirect("/machines/index_extension/")
|
||||||
|
return form({'machineform': mx}, 'machines/machine.html', request)
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@permission_required('infra')
|
||||||
|
def del_mx(request):
|
||||||
|
mx = DelMxForm(request.POST or None)
|
||||||
|
if mx.is_valid():
|
||||||
|
mx_dels = mx.cleaned_data['mx']
|
||||||
|
for mx_del in mx_dels:
|
||||||
|
try:
|
||||||
|
with transaction.atomic(), reversion.create_revision():
|
||||||
|
mx_del.delete()
|
||||||
|
reversion.set_user(request.user)
|
||||||
|
messages.success(request, "L'mx a été supprimée")
|
||||||
|
except ProtectedError:
|
||||||
|
messages.error(request, "Erreur le Mx suivant %s ne peut être supprimé" % mx_del)
|
||||||
|
return redirect("/machines/index_extension")
|
||||||
|
return form({'machineform': mx, 'interfaceform': None}, 'machines/machine.html', request)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('cableur')
|
@permission_required('cableur')
|
||||||
def index(request):
|
def index(request):
|
||||||
|
@ -388,7 +449,9 @@ def index_machinetype(request):
|
||||||
@permission_required('cableur')
|
@permission_required('cableur')
|
||||||
def index_extension(request):
|
def index_extension(request):
|
||||||
extension_list = Extension.objects.order_by('name')
|
extension_list = Extension.objects.order_by('name')
|
||||||
return render(request, 'machines/index_extension.html', {'extension_list':extension_list})
|
mx_list = Mx.objects.order_by('zone')
|
||||||
|
ns_list = Ns.objects.order_by('zone')
|
||||||
|
return render(request, 'machines/index_extension.html', {'extension_list':extension_list, 'mx_list': mx_list, 'ns_list': ns_list})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def history(request, object, id):
|
def history(request, object, id):
|
||||||
|
@ -428,6 +491,12 @@ def history(request, object, id):
|
||||||
except Extension.DoesNotExist:
|
except Extension.DoesNotExist:
|
||||||
messages.error(request, "Extension inexistante")
|
messages.error(request, "Extension inexistante")
|
||||||
return redirect("/machines/")
|
return redirect("/machines/")
|
||||||
|
elif object == 'mx' and request.user.has_perms(('cableur',)):
|
||||||
|
try:
|
||||||
|
object_instance = Mx.objects.get(pk=id)
|
||||||
|
except Mx.DoesNotExist:
|
||||||
|
messages.error(request, "Mx inexistant")
|
||||||
|
return redirect("/machines/")
|
||||||
else:
|
else:
|
||||||
messages.error(request, "Objet inconnu")
|
messages.error(request, "Objet inconnu")
|
||||||
return redirect("/machines/")
|
return redirect("/machines/")
|
||||||
|
|
Loading…
Reference in a new issue