diff --git a/machines/models.py b/machines/models.py index 9bfb4b55..ff94f3b1 100644 --- a/machines/models.py +++ b/machines/models.py @@ -37,6 +37,9 @@ from django.core.validators import MaxValueValidator from macaddress.fields import MACAddressField +import users.models +import preferences.models + class Machine(models.Model): """ Class définissant une machine, object parent user, objets fils @@ -52,6 +55,23 @@ class Machine(models.Model): ) active = models.BooleanField(default=True) + def can_create(user_request, userid_dest): + try: + user = users.models.User.objects.get(pk=userid_dest) + except users.models.User.DoesNotExist: + return False, u"Utilisateur inexistant" + options, created = preferences.models.OptionalMachine.objects.get_or_create() + max_lambdauser_interfaces = options.max_lambdauser_interfaces + if not user_request.has_perms(('cableur',)): + if user != user_request: + return False, u"Vous ne pouvez pas ajouter une machine à un\ + autre user que vous sans droit" + if user.user_interfaces().count() >= max_lambdauser_interfaces: + return False, u"Vous avez atteint le maximum d'interfaces\ + autorisées que vous pouvez créer vous même (%s) "\ + % max_lambdauser_interfaces + return True, None + def __str__(self): return str(self.user) + ' - ' + str(self.id) + ' - ' + str(self.name) diff --git a/machines/views.py b/machines/views.py index a59e493c..129b586f 100644 --- a/machines/views.py +++ b/machines/views.py @@ -214,30 +214,22 @@ def new_machine(request, userid): """ Fonction de creation d'une machine. Cree l'objet machine, le sous objet interface et l'objet domain à partir de model forms. Trop complexe, devrait être simplifié""" - try: - user = User.objects.get(pk=userid) - except User.DoesNotExist: - messages.error(request, u"Utilisateur inexistant" ) - return redirect(reverse('machines:index')) - options, created = OptionalMachine.objects.get_or_create() - max_lambdauser_interfaces = options.max_lambdauser_interfaces - if not request.user.has_perms(('cableur',)): - if user != request.user: - messages.error( - request, - "Vous ne pouvez pas ajouter une machine à un autre user que vous sans droit") - return redirect(reverse( - 'users:profil', - kwargs={'userid':str(request.user.id)} - )) - if user.user_interfaces().count() >= max_lambdauser_interfaces: - messages.error(request, "Vous avez atteint le maximum d'interfaces autorisées que vous pouvez créer vous même (%s) " % max_lambdauser_interfaces) - return redirect(reverse( - 'users:profil', - kwargs={'userid':str(request.user.id)} - )) + + can, reason = Machine.can_create(request.user, userid) + if not can: + messages.error(request, reason) + return redirect(reverse( + 'users:profil', + kwargs={'userid':str(request.user.id)} + )) + + # No need to check if userid exist, already done in can_create + user = User.objects.get(pk=userid) machine = NewMachineForm(request.POST or None) - interface = AddInterfaceForm(request.POST or None, infra=request.user.has_perms(('infra',))) + interface = AddInterfaceForm( + request.POST or None, + infra=request.user.has_perms(('infra',)) + ) domain = DomainForm(request.POST or None, user=user) if machine.is_valid() and interface.is_valid(): new_machine = machine.save(commit=False) @@ -264,9 +256,18 @@ def new_machine(request, userid): return redirect(reverse( 'users:profil', kwargs={'userid':str(user.id)} - )) - i_mbf_param = generate_ipv4_mbf_param( interface, False ) - return form({'machineform': machine, 'interfaceform': interface, 'domainform': domain, 'i_mbf_param': i_mbf_param}, 'machines/machine.html', request) + )) + i_mbf_param = generate_ipv4_mbf_param(interface, False) + return form( + { + 'machineform': machine, + 'interfaceform': interface, + 'domainform': domain, + 'i_mbf_param': i_mbf_param + }, + 'machines/machine.html', + request + ) @login_required def edit_interface(request, interfaceid): diff --git a/preferences/models.py b/preferences/models.py index 2e803b66..3124683d 100644 --- a/preferences/models.py +++ b/preferences/models.py @@ -26,7 +26,7 @@ Reglages généraux, machines, utilisateurs, mail, general pour l'application. from __future__ import unicode_literals from django.db import models -from cotisations.models import Paiement +import cotisations.models class OptionalUser(models.Model): @@ -50,7 +50,7 @@ class OptionalUser(models.Model): def clean(self): """Creation du mode de paiement par solde""" if self.user_solde: - Paiement.objects.get_or_create(moyen="Solde") + cotisations.models.Paiement.objects.get_or_create(moyen="Solde") class OptionalMachine(models.Model):