8
0
Fork 0
mirror of https://gitlab.federez.net/re2o/re2o synced 2024-07-04 05:04:06 +00:00
This commit is contained in:
chirac 2016-12-01 03:14:46 +01:00
commit e5eb84882d
6 changed files with 42 additions and 9 deletions

View file

@ -32,11 +32,14 @@ def form(ctx, template, request):
def create_cotis(vente, user, duration, date_start=False): def create_cotis(vente, user, duration, date_start=False):
""" Update et crée l'objet cotisation associé à une facture, prend en argument l'user, la facture pour la quantitéi, et l'article pour la durée""" """ Update et crée l'objet cotisation associé à une facture, prend en argument l'user, la facture pour la quantitéi, et l'article pour la durée"""
cotisation=Cotisation(vente=vente) cotisation=Cotisation(vente=vente)
if date_start:
end_adhesion = Cotisation.objects.filter(vente=Vente.objects.filter(facture=Facture.objects.filter(user=user).exclude(valid=False))).filter(date_start__lt=date_start).aggregate(Max('date_end'))['date_end__max']
else:
end_adhesion = user.end_adhesion()
date_start = date_start or timezone.now() date_start = date_start or timezone.now()
date_max = user.end_adhesion() or date_start end_adhesion = end_adhesion or date_start
if date_max < date_start: date_max = max(end_adhesion, date_start)
date_max = date_start cotisation.date_start = date_max
cotisation.date_start=date_max
cotisation.date_end = cotisation.date_start + relativedelta(months=duration) cotisation.date_end = cotisation.date_start + relativedelta(months=duration)
cotisation.save() cotisation.save()
return return

View file

@ -1,6 +1,7 @@
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, Mx, Ns, IpType from .models import Alias, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, IpType
from django.db.models import Q
class EditMachineForm(ModelForm): class EditMachineForm(ModelForm):
class Meta: class Meta:
@ -41,7 +42,9 @@ class AddInterfaceForm(EditInterfaceForm):
self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4" self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4"
if not infra: if not infra:
self.fields['type'].queryset = MachineType.objects.filter(ip_type=IpType.objects.filter(need_infra=False)) self.fields['type'].queryset = MachineType.objects.filter(ip_type=IpType.objects.filter(need_infra=False))
self.fields['ipv4'].queryset = IpList.objects.filter(ip_type=IpType.objects.filter(need_infra=False)) self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True).filter(ip_type=IpType.objects.filter(need_infra=False)).filter(need_infra=False)
else:
self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True)
class NewInterfaceForm(EditInterfaceForm): class NewInterfaceForm(EditInterfaceForm):
class Meta(EditInterfaceForm.Meta): class Meta(EditInterfaceForm.Meta):
@ -57,7 +60,9 @@ class BaseEditInterfaceForm(EditInterfaceForm):
self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4" self.fields['ipv4'].empty_label = "Assignation automatique de l'ipv4"
if not infra: if not infra:
self.fields['type'].queryset = MachineType.objects.filter(ip_type=IpType.objects.filter(need_infra=False)) self.fields['type'].queryset = MachineType.objects.filter(ip_type=IpType.objects.filter(need_infra=False))
self.fields['ipv4'].queryset = IpList.objects.filter(ip_type=IpType.objects.filter(need_infra=False)) self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True).filter(ip_type=IpType.objects.filter(need_infra=False)).filter(need_infra=False)
else:
self.fields['ipv4'].queryset = IpList.objects.filter(interface__isnull=True)
class AliasForm(ModelForm): class AliasForm(ModelForm):
class Meta: class Meta:

View file

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('machines', '0033_extension_need_infra'),
]
operations = [
migrations.AddField(
model_name='iplist',
name='need_infra',
field=models.BooleanField(default=False),
),
]

View file

@ -124,6 +124,7 @@ class IpList(models.Model):
ipv4 = models.GenericIPAddressField(protocol='IPv4', unique=True) ipv4 = models.GenericIPAddressField(protocol='IPv4', unique=True)
ip_type = models.ForeignKey('IpType', on_delete=models.PROTECT) ip_type = models.ForeignKey('IpType', on_delete=models.PROTECT)
need_infra = models.BooleanField(default=False)
def __str__(self): def __str__(self):
return self.ipv4 return self.ipv4

View file

@ -60,7 +60,10 @@ def assign_ips(user):
def free_ip(type): def free_ip(type):
""" Renvoie la liste des ip disponibles """ """ Renvoie la liste des ip disponibles """
return IpList.objects.filter(interface__isnull=True).filter(ip_type=type) if not type.need_infra:
return IpList.objects.filter(interface__isnull=True).filter(ip_type=type).filter(need_infra=False)
else:
return IpList.objects.filter(interface__isnull=True).filter(ip_type=type)
def assign_ipv4(interface): def assign_ipv4(interface):
""" Assigne une ip à l'interface """ """ Assigne une ip à l'interface """
@ -142,6 +145,8 @@ def edit_interface(request, interfaceid):
new_machine.save() new_machine.save()
reversion.set_user(request.user) reversion.set_user(request.user)
reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in machine_form.changed_data)) reversion.set_comment("Champs modifié(s) : %s" % ', '.join(field for field in machine_form.changed_data))
if free_ip(new_interface.type.ip_type) and not new_interface.ipv4:
new_interface = assign_ipv4(new_interface)
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
new_interface.save() new_interface.save()
reversion.set_user(request.user) reversion.set_user(request.user)
@ -197,7 +202,7 @@ def new_interface(request, machineid):
reversion.set_user(request.user) reversion.set_user(request.user)
reversion.set_comment("Création") reversion.set_comment("Création")
messages.success(request, "L'interface a été ajoutée") messages.success(request, "L'interface a été ajoutée")
return redirect("/users/profil/" + str(request.user.id)) return redirect("/users/profil/" + str(machine.user.id))
return form({'interfaceform': interface_form}, 'machines/machine.html', request) return form({'interfaceform': interface_form}, 'machines/machine.html', request)
@login_required @login_required

View file

@ -125,7 +125,7 @@ def edit_info(request, userid):
if not request.user.has_perms(('cableur',)): if not request.user.has_perms(('cableur',)):
user = BaseInfoForm(request.POST or None, instance=user) user = BaseInfoForm(request.POST or None, instance=user)
else: else:
user = EditInfoForm(request.POST or None, instance=user) user = InfoForm(request.POST or None, instance=user)
if user.is_valid(): if user.is_valid():
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
user.save() user.save()