Le serveur gitlab sera inaccessible le mercredi 19 février 2020 de 13h à 14h pour une intervention de maintenance programmée.

...
 
Commits (4)
......@@ -46,7 +46,7 @@ from users.models import User
from re2o.settings import LOGO_PATH
from re2o import settings
from re2o.views import form
from re2o.utils import SortTable, re2o_paginator
from re2o.utils import SortTable, re2o_paginator, messages_protected_error
from re2o.acl import (
can_create,
can_edit,
......@@ -528,14 +528,8 @@ def del_paiement(request, instances):
'method_name': payment_del
}
)
except ProtectedError:
messages.error(
request,
_("The payment method %(method_name)s can't be deleted \
because there are invoices using it.") % {
'method_name': payment_del
}
)
except ProtectedError as err:
messages_protected_error(messages, request, payment_del, err)
return redirect(reverse('cotisations:index-paiement'))
return form({
'factureform': payment,
......@@ -606,14 +600,8 @@ def del_banque(request, instances):
'bank_name': bank_del
}
)
except ProtectedError:
messages.error(
request,
_("The bank %(bank_name)s can't be deleted \
because there are invoices using it.") % {
'bank_name': bank_del
}
)
except ProtectedError as err:
messages_protected_error(messages, request, bank_del, err)
return redirect(reverse('cotisations:index-banque'))
return form({
'factureform': bank,
......
......@@ -39,6 +39,8 @@ from django.contrib.auth.decorators import login_required, permission_required
from django.db.models import ProtectedError, F
from django.forms import modelformset_factory
from django.views.decorators.csrf import csrf_exempt
from django.utils.translation import ugettext as _
from rest_framework.renderers import JSONRenderer
......@@ -49,6 +51,7 @@ from re2o.utils import (
filter_active_interfaces,
SortTable,
re2o_paginator,
messages_protected_error,
)
from re2o.acl import (
can_create,
......@@ -504,12 +507,8 @@ def del_iptype(request, instances):
try:
iptype_del.delete()
messages.success(request, "Le type d'ip a été supprimé")
except ProtectedError:
messages.error(
request,
("Le type d'ip %s est affectée à au moins une machine, "
"vous ne pouvez pas le supprimer" % iptype_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, iptype_del, err)
return redirect(reverse('machines:index-iptype'))
return form(
{'iptypeform': iptype, 'action_name': 'Supprimer'},
......@@ -565,13 +564,8 @@ def del_machinetype(request, instances):
try:
machinetype_del.delete()
messages.success(request, "Le type de machine a été supprimé")
except ProtectedError:
messages.error(
request,
("Le type de machine %s est affectée à au moins une "
"machine, vous ne pouvez pas le supprimer"
% machinetype_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, machinetype_del, err)
return redirect(reverse('machines:index-machinetype'))
return form(
{'machinetypeform': machinetype, 'action_name': 'Supprimer'},
......@@ -627,13 +621,8 @@ def del_extension(request, instances):
try:
extension_del.delete()
messages.success(request, "L'extension a été supprimée")
except ProtectedError:
messages.error(
request,
("L'extension %s est affectée à au moins un type de "
"machine, vous ne pouvez pas la supprimer"
% extension_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, extension_del, err)
return redirect(reverse('machines:index-extension'))
return form(
{'extensionform': extension, 'action_name': 'Supprimer'},
......@@ -686,12 +675,8 @@ def del_soa(request, instances):
try:
soa_del.delete()
messages.success(request, "Le SOA a été supprimée")
except ProtectedError:
messages.error(
request,
("Erreur le SOA suivant %s ne peut être supprimé"
% soa_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, soa_del, err)
return redirect(reverse('machines:index-extension'))
return form(
{'soaform': soa, 'action_name': 'Supprimer'},
......@@ -744,12 +729,8 @@ def del_mx(request, instances):
try:
mx_del.delete()
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)
)
except ProtectedError as err:
messages_protected_error(messages, request, mx_del, err)
return redirect(reverse('machines:index-extension'))
return form(
{'mxform': mx, 'action_name': 'Supprimer'},
......@@ -802,12 +783,8 @@ def del_ns(request, instances):
try:
ns_del.delete()
messages.success(request, "Le ns a été supprimée")
except ProtectedError:
messages.error(
request,
("Erreur le Ns suivant %s ne peut être supprimé"
% ns_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, ns_del, err)
return redirect(reverse('machines:index-extension'))
return form(
{'nsform': ns, 'action_name': 'Supprimer'},
......@@ -860,12 +837,8 @@ def del_txt(request, instances):
try:
txt_del.delete()
messages.success(request, "Le txt a été supprimé")
except ProtectedError:
messages.error(
request,
("Erreur le Txt suivant %s ne peut être supprimé"
% txt_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, txt_del, err)
return redirect(reverse('machines:index-extension'))
return form(
{'txtform': txt, 'action_name': 'Supprimer'},
......@@ -918,12 +891,8 @@ def del_srv(request, instances):
try:
srv_del.delete()
messages.success(request, "L'srv a été supprimée")
except ProtectedError:
messages.error(
request,
("Erreur le Srv suivant %s ne peut être supprimé"
% srv_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, srv_del, err)
return redirect(reverse('machines:index-extension'))
return form(
{'srvform': srv, 'action_name': 'Supprimer'},
......@@ -994,12 +963,8 @@ def del_alias(request, interface, interfaceid):
request,
"L'alias %s a été supprimé" % alias_del
)
except ProtectedError:
messages.error(
request,
("Erreur l'alias suivant %s ne peut être supprimé"
% alias_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, alias_del, err)
return redirect(reverse(
'machines:index-alias',
kwargs={'interfaceid': str(interfaceid)}
......@@ -1055,12 +1020,8 @@ def del_service(request, instances):
try:
service_del.delete()
messages.success(request, "Le service a été supprimée")
except ProtectedError:
messages.error(
request,
("Erreur le service suivant %s ne peut être supprimé"
% service_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, service_del, err)
return redirect(reverse('machines:index-service'))
return form(
{'serviceform': service, 'action_name': 'Supprimer'},
......@@ -1113,12 +1074,8 @@ def del_vlan(request, instances):
try:
vlan_del.delete()
messages.success(request, "Le vlan a été supprimée")
except ProtectedError:
messages.error(
request,
("Erreur le Vlan suivant %s ne peut être supprimé"
% vlan_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, vlan_del, err)
return redirect(reverse('machines:index-vlan'))
return form(
{'vlanform': vlan, 'action_name': 'Supprimer'},
......@@ -1171,12 +1128,8 @@ def del_nas(request, instances):
try:
nas_del.delete()
messages.success(request, "Le nas a été supprimé")
except ProtectedError:
messages.error(
request,
("Erreur le Nas suivant %s ne peut être supprimé"
% nas_del)
)
except ProtectedError as err:
messages_protected_error(messages, request, nas_del, err)
return redirect(reverse('machines:index-nas'))
return form(
{'nasform': nas, 'action_name': 'Supprimer'},
......
......@@ -36,11 +36,13 @@ from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.db.models import ProtectedError
from django.db import transaction
from django.utils.translation import ugettext as _
from reversion import revisions as reversion
from re2o.views import form
from re2o.acl import can_create, can_edit, can_delete_set, can_view_all
from re2o.utils import messages_protected_error
from .forms import ServiceForm, DelServiceForm
from .models import (
......@@ -180,9 +182,8 @@ def del_services(request, instances):
services_del.delete()
reversion.set_user(request.user)
messages.success(request, "Le service a été supprimée")
except ProtectedError:
messages.error(request, "Erreur le service\
suivant %s ne peut être supprimé" % services_del)
except ProtectedError as err:
messages_protected_error(messages, request, service_del, err)
return redirect(reverse('preferences:display-options'))
return form(
{'preferenceform': services, 'action_name': 'Supprimer'},
......
......@@ -39,6 +39,7 @@ from __future__ import unicode_literals
from django.utils import timezone
from django.db.models import Q
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.utils.translation import ugettext as _
from cotisations.models import Cotisation, Facture, Vente
from machines.models import Interface, Machine
......@@ -377,3 +378,29 @@ def get_input_formats_help_text(input_formats):
)
)
return help_text
# TODO : Use verbose names
def messages_protected_error(messages, request, item, error):
"""Add an error message, specific to ProtectedError exception."""
if len(error.protected_objects) > 1:
messages.error(
request,
_("[{item_classname}] {item_name} can't be deleted \
because it it used by many [{foreign_classname}].".format(
item_classname=item.get_classname(),
item_name=item,
foreign_classname=error.protected_objects[0].get_classname()
))
)
else:
messages.error(
request,
_("[{item_classname}] {item_name} can't be deleted \
because it is used by [{foreign_classname}] {foreign_name}.".format(
item_classname=item.get_classname(),
item_name=item,
foreign_classname=error.protected_objects[0].get_classname(),
foreign_name=error.protected_objects[0]
))
)
......@@ -47,11 +47,12 @@ from django.template.loader import get_template
from django.template import Context, Template, loader
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.utils.translation import ugettext as _
import tempfile
from users.views import form
from re2o.utils import re2o_paginator, SortTable
from re2o.utils import re2o_paginator, SortTable, messages_protected_error
from re2o.acl import (
can_create,
can_edit,
......@@ -350,12 +351,8 @@ def del_port(request, port, **_kwargs):
try:
port.delete()
messages.success(request, "Le port a été détruit")
except ProtectedError:
messages.error(
request,
("Le port %s est affecté à un autre objet, impossible "
"de le supprimer" % port)
)
except ProtectedError as err:
messages_protected_error(messages, request, port, err)
return redirect(reverse(
'topologie:index-port',
kwargs={'switchid': str(port.switch.id)}
......@@ -404,11 +401,7 @@ def del_stack(request, stack, **_kwargs):
stack.delete()
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)
)
messages_protected_error(messages, request, satck, err)
return redirect(reverse('topologie:index-physical-grouping'))
return form({'objet': stack}, 'topologie/delete.html', request)
......@@ -715,11 +708,7 @@ def del_room(request, room, **_kwargs):
room.delete()
messages.success(request, "La chambre/prise a été détruite")
except ProtectedError:
messages.error(
request,
("La chambre %s est affectée à un autre objet, impossible "
"de la supprimer (switch ou user)" % room)
)
messages_protected_error(messages, request, room, err)
return redirect(reverse('topologie:index-room'))
return form(
{'objet': room, 'objet_name': 'Chambre'},
......@@ -774,11 +763,7 @@ def del_model_switch(request, model_switch, **_kwargs):
model_switch.delete()
messages.success(request, "Le modèle a été détruit")
except ProtectedError:
messages.error(
request,
("Le modèle %s est affectée à un autre objet, impossible "
"de la supprimer (switch ou user)" % model_switch)
)
messages_protected_error(messages, request, model_switch, err)
return redirect(reverse('topologie:index-model-switch'))
return form(
{'objet': model_switch, 'objet_name': 'Modèle de switch'},
......@@ -829,11 +814,7 @@ def del_switch_bay(request, switch_bay, **_kwargs):
switch_bay.delete()
messages.success(request, "La baie a été détruite")
except ProtectedError:
messages.error(
request,
("La baie %s est affecté à un autre objet, impossible "
"de la supprimer (switch ou user)" % switch_bay)
)
messages_protected_error(messages, request, switch_bay, err)
return redirect(reverse('topologie:index-physical-grouping'))
return form(
{'objet': switch_bay, 'objet_name': 'Baie de switch'},
......@@ -883,12 +864,8 @@ def del_building(request, building, **_kwargs):
try:
building.delete()
messages.success(request, "La batiment a été détruit")
except ProtectedError:
messages.error(
request,
("Le batiment %s est affecté à un autre objet, impossible "
"de la supprimer (switch ou user)" % building)
)
except ProtectedError as err:
messages_protected_error(messages, request, building, err)
return redirect(reverse('topologie:index-physical-grouping'))
return form(
{'objet': building, 'objet_name': 'Bâtiment'},
......@@ -943,11 +920,7 @@ def del_constructor_switch(request, constructor_switch, **_kwargs):
constructor_switch.delete()
messages.success(request, "Le constructeur a été détruit")
except ProtectedError:
messages.error(
request,
("Le constructeur %s est affecté à un autre objet, impossible "
"de la supprimer (switch ou user)" % constructor_switch)
)
messages_protected_error(messages, request, constructor_switch, err)
return redirect(reverse('topologie:index-model-switch'))
return form({
'objet': constructor_switch,
......
......@@ -45,6 +45,7 @@ from django.db import transaction
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.views.decorators.csrf import csrf_exempt
from django.utils.translation import ugettext as _
from rest_framework.renderers import JSONRenderer
from reversion import revisions as reversion
......@@ -56,7 +57,8 @@ from re2o.views import form
from re2o.utils import (
all_has_access,
SortTable,
re2o_paginator
re2o_paginator,
messages_protected_error
)
from re2o.acl import (
can_create,
......@@ -510,10 +512,7 @@ def del_school(request, instances):
school_del.delete()
messages.success(request, "L'établissement a été supprimé")
except ProtectedError:
messages.error(
request,
"L'établissement %s est affecté à au moins un user, \
vous ne pouvez pas le supprimer" % school_del)
messages_protected_error(messages, request, school_del, err)
return redirect(reverse('users:index-school'))
return form(
{'userform': school, 'action_name': 'Supprimer'},
......@@ -621,10 +620,7 @@ def del_listright(request, instances):
listright_del.delete()
messages.success(request, "Le droit/groupe a été supprimé")
except ProtectedError:
messages.error(
request,
"Le groupe %s est affecté à au moins un user, \
vous ne pouvez pas le supprimer" % listright_del)
messages_protected_error(messages, request, listright_del, err)
return redirect(reverse('users:index-listright'))
return form(
{'userform': listright, 'action_name': 'Supprimer'},
......