8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-22 19:33:11 +00:00

Ajout de la suppression d'une stack

This commit is contained in:
Guillaume Goessel 2017-08-18 14:20:51 +02:00
parent ed403870df
commit eba1606290
5 changed files with 52 additions and 2 deletions

View file

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-08-18 08:21
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('topologie', '0023_auto_20170817_1654'),
]
operations = [
migrations.AlterField(
model_name='switch',
name='stack',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='topologie.Stack'),
),
]

View file

@ -21,6 +21,8 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from django.db import models from django.db import models
from django.db.models.signals import post_delete
from django.dispatch import receiver
from django.forms import ModelForm, Form from django.forms import ModelForm, Form
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.fields import GenericForeignKey
@ -69,7 +71,7 @@ class Switch(models.Model):
location = models.CharField(max_length=255) location = models.CharField(max_length=255)
number = models.IntegerField() number = models.IntegerField()
details = models.CharField(max_length=255, blank=True) details = models.CharField(max_length=255, blank=True)
stack = models.ForeignKey(Stack, blank=True, null=True) stack = models.ForeignKey(Stack, blank=True, null=True, on_delete=models.SET_NULL)
stack_member_id = models.IntegerField(blank=True, null=True) stack_member_id = models.IntegerField(blank=True, null=True)
class Meta: class Meta:
@ -138,3 +140,6 @@ class Room(models.Model):
def __str__(self): def __str__(self):
return str(self.name) return str(self.name)
@receiver(post_delete, sender=Stack)
def stack_post_delete(sender, **kwargs):
Switch.objects.filter(stack=None).update(stack_member_id = None)

View file

@ -43,6 +43,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-stack' stack.id %}"> <a class="btn btn-primary btn-sm" role="button" title="Éditer" href="{% url 'topologie:edit-stack' stack.id %}">
<i class="glyphicon glyphicon-edit"></i> <i class="glyphicon glyphicon-edit"></i>
</a> </a>
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'topologie:del-stack' stack.pk %}">
<i class="glyphicon glyphicon-trash"></i>
</a>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>

View file

@ -42,5 +42,6 @@ urlpatterns = [
url(r'^new_stack/$', views.new_stack, name='new-stack'), url(r'^new_stack/$', views.new_stack, name='new-stack'),
url(r'^index_stack/$', views.index_stack, name='index-stack'), url(r'^index_stack/$', views.index_stack, name='index-stack'),
url(r'^edit_stack/(?P<stack_id>[0-9]+)$', views.edit_stack, name='edit-stack'), url(r'^edit_stack/(?P<stack_id>[0-9]+)$', views.edit_stack, name='edit-stack'),
url(r'^del_stack/(?P<stack_id>[0-9]+)$', views.del_stack, name='del-stack'),
] ]

View file

@ -179,7 +179,7 @@ def edit_stack(request,stack_id):
stack = Stack.objects.get(pk=stack_id) stack = Stack.objects.get(pk=stack_id)
except Stack.DoesNotExist: except Stack.DoesNotExist:
messages.error(request, u"Stack inexistante") messages.error(request, u"Stack inexistante")
return redirect("/topologie/index_stack/") return redirect('/topologie/index_stack/')
stack = StackForm(request.POST or None, instance=stack) stack = StackForm(request.POST or None, instance=stack)
if stack.is_valid(): if stack.is_valid():
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
@ -189,6 +189,26 @@ def edit_stack(request,stack_id):
return redirect('/topologie/index_stack') return redirect('/topologie/index_stack')
return form({'topoform':stack}, 'topologie/topo.html', request) return form({'topoform':stack}, 'topologie/topo.html', request)
@login_required
@permission_required('infra')
def del_stack(request,stack_id):
try:
stack = Stack.objects.get(pk=stack_id)
except Stack.DoesNotExist:
messages.error(request, u"Stack inexistante")
return redirect('/topologie/index_stack')
if request.method == "POST":
try:
with transaction.atomic(), reversion.create_revision():
stack.delete()
reversion.set_user(request.user)
reversion.set_comment("Destruction")
messages.success(request, "La stack a eté détruite")
except ProtectedError:
messages.error(request, "La stack %s est affectée à un autre objet, impossible de la supprimer" % stack)
return redirect('/topologie/index_stack')
return form({'objet':stack}, 'topologie/delete.html', request)
@login_required @login_required
@permission_required('infra') @permission_required('infra')
def new_switch(request): def new_switch(request):