implémente la contrainte sur les dates de livraison en jours ouvrés, fixes #1598

This commit is contained in:
Benjamin Dauvergne 2012-09-05 14:40:20 +02:00
parent 2af81291f2
commit 2a7a41053a
4 changed files with 16 additions and 13 deletions

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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):