Commit 7bd2e318 authored by chirac's avatar chirac
Browse files

Gestion de l'historique dans topologie

parent 13d4e2e7
<table class="table table-striped">
<thead>
<tr>
<th>Date</th>
<th>Cableur</th>
<th>Commentaire</th>
</tr>
</thead>
{% for rev in reversions %}
<tr>
<td>{{ rev.revision.date_created }}</td>
<td>{{ rev.revision.user }}</td>
<td>{{ rev.revision.comment }}</td>
</tr>
{% endfor %}
</table>
{% extends "re2o/sidebar.html" %}
{% load bootstrap3 %}
{% block title %}Historique{% endblock %}
{% block content %}
<h2>Historique de {{ object }}</h2>
{% include "re2o/aff_history.html" with reversions=reversions %}
<br />
<br />
<br />
{% endblock %}
from django.contrib import admin from django.contrib import admin
from reversion.admin import VersionAdmin
from .models import Port, Room, Switch from .models import Port, Room, Switch
class SwitchAdmin(admin.ModelAdmin): class SwitchAdmin(VersionAdmin):
list_display = ('building','number','details') list_display = ('building','number','details')
class PortAdmin(admin.ModelAdmin): class PortAdmin(VersionAdmin):
list_display = ('switch', 'port','room','machine_interface','details') list_display = ('switch', 'port','room','machine_interface','details')
class RoomAdmin(admin.ModelAdmin): class RoomAdmin(VersionAdmin):
list_display = ('name','details') list_display = ('name','details')
admin.site.register(Port, PortAdmin) admin.site.register(Port, PortAdmin)
......
...@@ -3,6 +3,7 @@ from django.forms import ModelForm, Form ...@@ -3,6 +3,7 @@ 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
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
import reversion
def make_port_related(port): def make_port_related(port):
related_port = port.related related_port = port.related
......
...@@ -11,7 +11,8 @@ ...@@ -11,7 +11,8 @@
<td>{{room.name}}</td> <td>{{room.name}}</td>
<td>{{room.details}}</td> <td>{{room.details}}</td>
<td>{% if is_infra %}<a class="btn btn-primary btn-sm" role="button" href="{% url 'topologie:edit-room' room.id %}"><i class="glyphicon glyphicon-random"></i> Editer</a> <td>{% if is_infra %}<a class="btn btn-primary btn-sm" role="button" href="{% url 'topologie:edit-room' room.id %}"><i class="glyphicon glyphicon-random"></i> Editer</a>
<a class="btn btn-danger btn-sm" role="button" href="{% url 'topologie:del-room' room.id %}"><i class="glyphicon glyphicon-trash"></i> Supprimer</a>{% endif %}</td> <a class="btn btn-danger btn-sm" role="button" href="{% url 'topologie:del-room' room.id %}"><i class="glyphicon glyphicon-trash"></i> Supprimer</a>{% endif %}
<a class="btn btn-info btn-sm" role="button" href="{% url 'topologie:history' 'room' room.pk %}"><i class="glyphicon glyphicon-repeat"></i> Historique</a></td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
...@@ -16,7 +16,8 @@ ...@@ -16,7 +16,8 @@
<td>{{ port.machine_interface }}</td> <td>{{ port.machine_interface }}</td>
<td>{{ port.related }}</td> <td>{{ port.related }}</td>
<td>{{ port.details }}</td> <td>{{ port.details }}</td>
<td>{% if is_infra %}<a class="btn btn-primary btn-sm" role="button" href="{% url 'topologie:edit-port' port.id %}"><i class="glyphicon glyphicon-random"></i> Editer</a>{% endif %}</td> <td>{% if is_infra %}<a class="btn btn-primary btn-sm" role="button" href="{% url 'topologie:edit-port' port.id %}"><i class="glyphicon glyphicon-random"></i> Editer</a>{% endif %}
<a class="btn btn-info btn-sm" role="button" href="{% url 'topologie:history' 'port' port.pk %}"><i class="glyphicon glyphicon-repeat"></i> Historique</a></td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
...@@ -12,7 +12,8 @@ ...@@ -12,7 +12,8 @@
<td>{{switch.building}}</td> <td>{{switch.building}}</td>
<td>{{switch.number}}</td> <td>{{switch.number}}</td>
<td>{{switch.details}}</td> <td>{{switch.details}}</td>
<td><a class="btn btn-primary btn-sm" role="button" href="{% url 'topologie:index-port' switch.pk %}"><i class="glyphicon glyphicon-cog"></i> Configurer</a></td> <td><a class="btn btn-primary btn-sm" role="button" href="{% url 'topologie:index-port' switch.pk %}"><i class="glyphicon glyphicon-cog"></i> Configurer</a>
<a class="btn btn-info btn-sm" role="button" href="{% url 'topologie:history' 'switch' switch.pk %}"><i class="glyphicon glyphicon-repeat"></i> Historique</a></td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
...@@ -10,6 +10,9 @@ urlpatterns = [ ...@@ -10,6 +10,9 @@ urlpatterns = [
url(r'^edit_room/(?P<room_id>[0-9]+)$', views.edit_room, name='edit-room'), url(r'^edit_room/(?P<room_id>[0-9]+)$', views.edit_room, name='edit-room'),
url(r'^del_room/(?P<room_id>[0-9]+)$', views.del_room, name='del-room'), url(r'^del_room/(?P<room_id>[0-9]+)$', views.del_room, name='del-room'),
url(r'^switch/(?P<switch_id>[0-9]+)$', views.index_port, name='index-port'), url(r'^switch/(?P<switch_id>[0-9]+)$', views.index_port, name='index-port'),
url(r'^history/(?P<object>switch)/(?P<id>[0-9]+)$', views.history, name='history'),
url(r'^history/(?P<object>port)/(?P<id>[0-9]+)$', views.history, name='history'),
url(r'^history/(?P<object>room)/(?P<id>[0-9]+)$', views.history, name='history'),
url(r'^edit_port/(?P<port_id>[0-9]+)$', views.edit_port, name='edit-port'), url(r'^edit_port/(?P<port_id>[0-9]+)$', views.edit_port, name='edit-port'),
url(r'^new_port/(?P<switch_id>[0-9]+)$', views.new_port, name='new-port'), url(r'^new_port/(?P<switch_id>[0-9]+)$', views.new_port, name='new-port'),
url(r'^edit_switch/(?P<switch_id>[0-9]+)$', views.edit_switch, name='edit-switch'), url(r'^edit_switch/(?P<switch_id>[0-9]+)$', views.edit_switch, name='edit-switch'),
......
...@@ -2,6 +2,8 @@ from django.shortcuts import render, redirect ...@@ -2,6 +2,8 @@ from django.shortcuts import render, redirect
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import login_required, permission_required
from django.db import IntegrityError from django.db import IntegrityError
from django.db import transaction
from reversion import revisions as reversion
from topologie.models import Switch, Port, Room from topologie.models import Switch, Port, Room
from topologie.forms import EditPortForm, EditSwitchForm, AddPortForm, EditRoomForm from topologie.forms import EditPortForm, EditSwitchForm, AddPortForm, EditRoomForm
...@@ -13,6 +15,33 @@ def index(request): ...@@ -13,6 +15,33 @@ def index(request):
switch_list = Switch.objects.order_by('building', 'number') switch_list = Switch.objects.order_by('building', 'number')
return render(request, 'topologie/index.html', {'switch_list': switch_list}) return render(request, 'topologie/index.html', {'switch_list': switch_list})
@login_required
@permission_required('cableur')
def history(request, object, id):
if object == 'switch':
try:
object_instance = Switch.objects.get(pk=id)
except Switch.DoesNotExist:
messages.error(request, "Switch inexistant")
return redirect("/topologie/")
elif object == 'port':
try:
object_instance = Port.objects.get(pk=id)
except Port.DoesNotExist:
messages.error(request, "Port inexistant")
return redirect("/topologie/")
elif object == 'room':
try:
object_instance = Room.objects.get(pk=id)
except Room.DoesNotExist:
messages.error(request, "Chambre inexistante")
return redirect("/topologie/")
else:
messages.error(request, "Objet inconnu")
return redirect("/topologie/")
reversions = reversion.get_for_object(object_instance)
return render(request, 're2o/history.html', {'reversions': reversions, 'object': object_instance})
@login_required @login_required
@permission_required('cableur') @permission_required('cableur')
def index_port(request, switch_id): def index_port(request, switch_id):
...@@ -43,7 +72,10 @@ def new_port(request, switch_id): ...@@ -43,7 +72,10 @@ def new_port(request, switch_id):
port = port.save(commit=False) port = port.save(commit=False)
port.switch = switch port.switch = switch
try: try:
port.save() with transaction.atomic(), reversion.create_revision():
port.save()
reversion.set_user(request.user)
reversion.set_comment("Création")
messages.success(request, "Port ajouté") messages.success(request, "Port ajouté")
except IntegrityError: except IntegrityError:
messages.error(request,"Ce port existe déjà" ) messages.error(request,"Ce port existe déjà" )
...@@ -60,7 +92,10 @@ def edit_port(request, port_id): ...@@ -60,7 +92,10 @@ def edit_port(request, port_id):
return redirect("/topologie/") return redirect("/topologie/")
port = EditPortForm(request.POST or None, instance=port) port = EditPortForm(request.POST or None, instance=port)
if port.is_valid(): if port.is_valid():
port.save() with transaction.atomic(), reversion.create_revision():
port.save()
reversion.set_user(request.user)
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in port.changed_data))
messages.success(request, "Le port a bien été modifié") messages.success(request, "Le port a bien été modifié")
return redirect("/topologie/") return redirect("/topologie/")
return form({'topoform':port}, 'topologie/topo.html', request) return form({'topoform':port}, 'topologie/topo.html', request)
...@@ -70,7 +105,10 @@ def edit_port(request, port_id): ...@@ -70,7 +105,10 @@ def edit_port(request, port_id):
def new_switch(request): def new_switch(request):
switch = EditSwitchForm(request.POST or None) switch = EditSwitchForm(request.POST or None)
if switch.is_valid(): if switch.is_valid():
switch.save() with transaction.atomic(), reversion.create_revision():
switch.save()
reversion.set_user(request.user)
reversion.set_comment("Création")
messages.success(request, "Le switch a été créé") messages.success(request, "Le switch a été créé")
return redirect("/topologie/") return redirect("/topologie/")
return form({'topoform':switch}, 'topologie/topo.html', request) return form({'topoform':switch}, 'topologie/topo.html', request)
...@@ -85,7 +123,10 @@ def edit_switch(request, switch_id): ...@@ -85,7 +123,10 @@ def edit_switch(request, switch_id):
return redirect("/topologie/") return redirect("/topologie/")
switch = EditSwitchForm(request.POST or None, instance=switch) switch = EditSwitchForm(request.POST or None, instance=switch)
if switch.is_valid(): if switch.is_valid():
switch.save() with transaction.atomic(), reversion.create_revision():
switch.save()
reversion.set_user(request.user)
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in switch.changed_data))
messages.success(request, "Le switch a bien été modifié") messages.success(request, "Le switch a bien été modifié")
return redirect("/topologie/") return redirect("/topologie/")
return form({'topoform':switch}, 'topologie/topo.html', request) return form({'topoform':switch}, 'topologie/topo.html', request)
...@@ -95,7 +136,10 @@ def edit_switch(request, switch_id): ...@@ -95,7 +136,10 @@ def edit_switch(request, switch_id):
def new_room(request): def new_room(request):
room = EditRoomForm(request.POST or None) room = EditRoomForm(request.POST or None)
if room.is_valid(): if room.is_valid():
room.save() with transaction.atomic(), reversion.create_revision():
room.save()
reversion.set_user(request.user)
reversion.set_comment("Création")
messages.success(request, "La chambre a été créé") messages.success(request, "La chambre a été créé")
return redirect("/topologie/index_room/") return redirect("/topologie/index_room/")
return form({'topoform':room}, 'topologie/topo.html', request) return form({'topoform':room}, 'topologie/topo.html', request)
...@@ -110,7 +154,10 @@ def edit_room(request, room_id): ...@@ -110,7 +154,10 @@ def edit_room(request, room_id):
return redirect("/topologie/index_room/") return redirect("/topologie/index_room/")
room = EditRoomForm(request.POST or None, instance=room) room = EditRoomForm(request.POST or None, instance=room)
if room.is_valid(): if room.is_valid():
room.save() with transaction.atomic(), reversion.create_revision():
room.save()
reversion.set_user(request.user)
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in room.changed_data))
messages.success(request, "La chambre a bien été modifiée") messages.success(request, "La chambre a bien été modifiée")
return redirect("/topologie/index_room/") return redirect("/topologie/index_room/")
return form({'topoform':room}, 'topologie/topo.html', request) return form({'topoform':room}, 'topologie/topo.html', request)
...@@ -124,7 +171,10 @@ def del_room(request, room_id): ...@@ -124,7 +171,10 @@ def del_room(request, room_id):
messages.error(request, u"Chambre inexistante" ) messages.error(request, u"Chambre inexistante" )
return redirect("/topologie/index_room/") return redirect("/topologie/index_room/")
if request.method == "POST": if request.method == "POST":
room.delete() with transaction.atomic(), reversion.create_revision():
room.delete()
reversion.set_user(request.user)
reversion.set_comment("Destruction")
messages.success(request, "La chambre/prise a été détruite") messages.success(request, "La chambre/prise a été détruite")
return redirect("/topologie/index_room/") return redirect("/topologie/index_room/")
return form({'objet': room, 'objet_name': 'Chambre'}, 'topologie/delete.html', request) return form({'objet': room, 'objet_name': 'Chambre'}, 'topologie/delete.html', request)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment