8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-05 01:16:27 +00:00

Merge branch 'fix-validators-positiveinteger' into 'dev'

Fix validators positiveinteger

See merge request re2o/re2o!579
This commit is contained in:
chirac 2020-12-28 16:42:34 +01:00
commit aea9398f34
2 changed files with 96 additions and 28 deletions

View file

@ -0,0 +1,59 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.29 on 2020-12-28 15:36
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("cotisations", "0050_auto_20201102_2342"),
]
operations = [
migrations.AlterField(
model_name="article",
name="duration_connection",
field=models.PositiveIntegerField(
verbose_name="duration of the connection (in months)"
),
),
migrations.AlterField(
model_name="article",
name="duration_days_connection",
field=models.PositiveIntegerField(
verbose_name="duration of the connection (in days, will be added to duration in months)"
),
),
migrations.AlterField(
model_name="article",
name="duration_days_membership",
field=models.PositiveIntegerField(
verbose_name="duration of the membership (in days, will be added to duration in months)"
),
),
migrations.AlterField(
model_name="article",
name="duration_membership",
field=models.PositiveIntegerField(
verbose_name="duration of the membership (in months)"
),
),
migrations.AlterField(
model_name="vente",
name="duration_days_connection",
field=models.PositiveIntegerField(
default=0,
verbose_name="duration of the connection (in days, will be added to duration in months)",
),
),
migrations.AlterField(
model_name="vente",
name="duration_days_membership",
field=models.PositiveIntegerField(
default=0,
verbose_name="duration of the membership (in days, will be added to duration in months)",
),
),
]

View file

@ -98,7 +98,7 @@ class BaseInvoice(RevMixin, AclMixin, FieldPermissionModelMixin, models.Model):
def name_detailed(self):
"""
Return:
Return:
- a list of strings with the name of all article in the invoice
and their quantity.
"""
@ -248,8 +248,8 @@ class Facture(BaseInvoice):
@staticmethod
def can_change_control(user_request, *_args, **_kwargs):
""" Returns True if the user can change the 'controlled' status of
this invoice """
"""Returns True if the user can change the 'controlled' status of
this invoice"""
can = user_request.has_perm("cotisations.change_facture_control")
return (
can,
@ -293,8 +293,7 @@ class Facture(BaseInvoice):
"""Returns every subscription associated with this invoice."""
return Cotisation.objects.filter(
vente__in=self.vente_set.filter(
~(Q(duration_membership=0)) |\
~(Q(duration_days_membership=0))
~(Q(duration_membership=0)) | ~(Q(duration_days_membership=0))
)
)
@ -454,7 +453,7 @@ class Vente(RevMixin, AclMixin, models.Model):
number = models.IntegerField(
validators=[MinValueValidator(1)], verbose_name=_("amount")
)
# TODO : change this field for a ForeinKey to Article
# TODO : change this field for a ForeinKey to Article
# Note: With a foreign key, modifing an Article modifis the Purchase, wich is bad.
# To use a foreign key, you need to make Article read only
name = models.CharField(max_length=255, verbose_name=_("article"))
@ -467,16 +466,18 @@ class Vente(RevMixin, AclMixin, models.Model):
)
duration_days_connection = models.PositiveIntegerField(
default=0,
validators=[MinValueValidator(0)],
verbose_name=_("duration of the connection (in days, will be added to duration in months)"),
verbose_name=_(
"duration of the connection (in days, will be added to duration in months)"
),
)
duration_membership = models.PositiveIntegerField(
default=0, verbose_name=_("duration of the membership (in months)")
)
duration_days_membership = models.PositiveIntegerField(
default=0,
validators=[MinValueValidator(0)],
verbose_name=_("duration of the membership (in days, will be added to duration in months)"),
verbose_name=_(
"duration of the membership (in days, will be added to duration in months)"
),
)
class Meta:
@ -513,7 +514,7 @@ class Vente(RevMixin, AclMixin, models.Model):
def create_cotis(self, date_start_con=False, date_start_memb=False):
"""
Creates a cotisation without initializing the dates (start and end ar set to self.facture.facture.date)
Creates a cotisation without initializing the dates (start and end ar set to self.facture.facture.date)
and without saving it. You should use Facture.reorder_purchases to set the right dates.
"""
try:
@ -631,12 +632,14 @@ class Vente(RevMixin, AclMixin, models.Model):
return str(self.name) + " " + str(self.facture)
def test_membership_or_connection(self):
""" Test if the purchase include membership or connecton
"""
return self.duration_membership or \
self.duration_days_membership or \
self.duration_connection or \
self.duration_days_connection
"""Test if the purchase include membership or connecton"""
return (
self.duration_membership
or self.duration_days_membership
or self.duration_connection
or self.duration_days_connection
)
# TODO : change vente to purchase
@receiver(post_save, sender=Vente)
@ -704,20 +707,20 @@ class Article(RevMixin, AclMixin, models.Model):
)
duration_membership = models.PositiveIntegerField(
validators=[MinValueValidator(0)],
verbose_name=_("duration of the membership (in months)")
)
duration_days_membership = models.PositiveIntegerField(
validators=[MinValueValidator(0)],
verbose_name=_("duration of the membership (in days, will be added to duration in months)"),
verbose_name=_(
"duration of the membership (in days, will be added to duration in months)"
),
)
duration_connection = models.PositiveIntegerField(
validators=[MinValueValidator(0)],
verbose_name=_("duration of the connection (in months)")
)
duration_days_connection = models.PositiveIntegerField(
validators=[MinValueValidator(0)],
verbose_name=_("duration of the connection (in days, will be added to duration in months)"),
verbose_name=_(
"duration of the connection (in days, will be added to duration in months)"
),
)
need_membership = models.BooleanField(
@ -793,8 +796,8 @@ class Article(RevMixin, AclMixin, models.Model):
if target_user is not None and not target_user.is_adherent():
objects_pool = objects_pool.filter(
Q(duration_membership__gt=0)
|Q(duration_days_membership__gt=0)
|Q(need_membership=False)
| Q(duration_days_membership__gt=0)
| Q(need_membership=False)
)
if user.has_perm("cotisations.buy_every_article"):
return objects_pool
@ -884,7 +887,9 @@ class Paiement(RevMixin, AclMixin, models.Model):
# In case a cotisation was bought, inform the user, the
# cotisation time has been extended too
if any(sell.test_membership_or_connection() for sell in invoice.vente_set.all()):
if any(
sell.test_membership_or_connection() for sell in invoice.vente_set.all()
):
messages.success(
request,
_(
@ -956,9 +961,13 @@ class Cotisation(RevMixin, AclMixin, models.Model):
vente = models.OneToOneField(
"Vente", on_delete=models.CASCADE, null=True, verbose_name=_("purchase")
)
date_start_con = models.DateTimeField(verbose_name=_("start date for the connection"))
date_start_con = models.DateTimeField(
verbose_name=_("start date for the connection")
)
date_end_con = models.DateTimeField(verbose_name=_("end date for the connection"))
date_start_memb = models.DateTimeField(verbose_name=_("start date for the membership"))
date_start_memb = models.DateTimeField(
verbose_name=_("start date for the membership")
)
date_end_memb = models.DateTimeField(verbose_name=_("end date for the membership"))
class Meta: