implémente la contrainte sur les dates de livraison en jours ouvrés, fixes #1598
This commit is contained in:
parent
2af81291f2
commit
2a7a41053a
|
@ -9,8 +9,8 @@ LDAP_BIND_PASSWORD = getattr(settings, 'LDAP_BIND_PASSWORD', '')
|
|||
LDAP_BASE = getattr(settings, 'LDAP_BASE', '')
|
||||
LDAP_USER_QUERY = getattr(settings, 'LDAP_USER_QUERY', '')
|
||||
|
||||
# Request minimum delivery delay
|
||||
MINIMUM_DELIVERY_DELAY = getattr(settings, 'MINIMUM_DELIVERY_DELAY', { 'days': 2 })
|
||||
# Request minimum delivery delay, measured in days
|
||||
MINIMUM_DELIVERY_DELAY = getattr(settings, 'MINIMUM_DELIVERY_DELAY', 2)
|
||||
|
||||
# Maximum lifetime for request, measured in days
|
||||
MAXIMUM_DAYS_BEFORE_PURGE = 545
|
||||
|
|
|
@ -99,7 +99,7 @@ def get_default_status():
|
|||
return workflow.Status.objects.get(default=True)
|
||||
|
||||
def minimum_delivery_timedelta():
|
||||
return datetime.timedelta(**app_settings.MINIMUM_DELIVERY_DELAY)
|
||||
return datetime.timedelta(days=app_settings.MINIMUM_DELIVERY_DELAY)
|
||||
|
||||
class RequestQueryset(utils.QuerySet):
|
||||
def total_cost(self):
|
||||
|
@ -182,8 +182,8 @@ class Request(models.Model):
|
|||
details = models.TextField(verbose_name=_(u'Vos observations ou commentaires'), blank=True)
|
||||
delivery_date = models.DateField(verbose_name=_(u'Date de livraison souhaitée'),
|
||||
blank=True, null=True,
|
||||
help_text=string_concat(_(u'Délai minimum à respecter '), app_settings.MINIMUM_DELIVERY_DELAY['days'], _(' jours.')),
|
||||
default=lambda:utils.get_next_workable_day(**app_settings.MINIMUM_DELIVERY_DELAY))
|
||||
help_text=string_concat(_(u'Délai minimum à respecter '), app_settings.MINIMUM_DELIVERY_DELAY, _(' jours.')),
|
||||
default=lambda:utils.get_next_workable_day(app_settings.MINIMUM_DELIVERY_DELAY))
|
||||
delivery_place = models.ForeignKey(DeliveryPlace, verbose_name=_(u'Lieu de livraison'), blank=True, null=True, on_delete=models.PROTECT)
|
||||
comments = models.TextField(verbose_name=_(u'Remarques et commentaires'), blank=True)
|
||||
creation_date = models.DateTimeField(verbose_name=_(u'Date de création'), default=now, editable=False, db_index=True)
|
||||
|
|
|
@ -365,7 +365,7 @@ class DeliveryForm(BaseModelForm):
|
|||
delivery_date = self.cleaned_data['delivery_date']
|
||||
if not self.check_delivery_date(delivery_date):
|
||||
msg = u"La date de livraison souhaitée doit être au minimum"
|
||||
days = base_app_settings.MINIMUM_DELIVERY_DELAY.get('days', 0)
|
||||
days = base_app_settings.MINIMUM_DELIVERY_DELAY
|
||||
msg += " %s jour(s) plus tard que la date de la demande." % days
|
||||
raise ValidationError(msg)
|
||||
return delivery_date
|
||||
|
|
|
@ -12,13 +12,16 @@ from django.db.models import query
|
|||
import django.forms
|
||||
from django.contrib.admin.options import BaseModelAdmin
|
||||
|
||||
def get_next_workable_day(today=None, hours=0, days=2, increment_hours=0, increment_days=1):
|
||||
if today is None:
|
||||
today = datetime.date.today()
|
||||
next = today + datetime.timedelta(hours=hours, days=days)
|
||||
while next.weekday() in (5,6):
|
||||
next = next + datetime.timedelta(hours=increment_hours, days=increment_days)
|
||||
return next
|
||||
def get_next_workable_day(increment=2, increment_hours=0, increment_days=1, today=None):
|
||||
nextday = datetime.date.today()
|
||||
if today is not None:
|
||||
nextday = today
|
||||
i = 0
|
||||
while i < increment:
|
||||
nextday = nextday + datetime.timedelta(hours=increment_hours, days=increment_days)
|
||||
if nextday.weekday() not in (5,6):
|
||||
i += 1
|
||||
return nextday
|
||||
|
||||
def profile(func):
|
||||
def f(*args, **kwargs):
|
||||
|
|
Reference in New Issue