Skip to content
Extraits de code Groupes Projets
Valider 34b1aa84 rédigé par Juliana's avatar Juliana
Parcourir les fichiers

Modifs sur créneau dispo du jour

parent bce76465
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -65,7 +65,8 @@ class VracoopPointRetrait(models.Model): ...@@ -65,7 +65,8 @@ class VracoopPointRetrait(models.Model):
string="Configuration des horaires") string="Configuration des horaires")
nb_max_retrait = fields.Integer( nb_max_retrait = fields.Integer(
"Nombre de retrait max par tranche horaire") "Nombre de retrait max par tranche horaire")
nb_day_available = fields.Integer("Nombre de jours pour commande") nb_day_available = fields.Integer(
"Nombre de jours pour commande", default=7)
@api.multi @api.multi
def slot_calculate(self): def slot_calculate(self):
...@@ -100,12 +101,16 @@ class VracoopPointRetrait(models.Model): ...@@ -100,12 +101,16 @@ class VracoopPointRetrait(models.Model):
('active_day', '=', False)]) ('active_day', '=', False)])
count_day = rec.nb_day_available + exclure_days_nb count_day = rec.nb_day_available + exclure_days_nb
# Liste des jours où je peux récupérer la commande
# en fonction nombre de jour dispo sur la fiche du point retrait
list_week = list(rrule( list_week = list(rrule(
DAILY, DAILY,
count=count_day, count=count_day,
dtstart=datetime.today())) dtstart=datetime.today()))
for week in list_week: for week in list_week:
# On exclut les jours où la journée
# du point de retrait n'est pas actif
exclure_the_day = rec.vracoop_retrait_time_ids.search([ exclure_the_day = rec.vracoop_retrait_time_ids.search([
('vracoop_point_retrait_id', '=', rec.id), ('vracoop_point_retrait_id', '=', rec.id),
('active_day', '=', False), ('active_day', '=', False),
...@@ -113,13 +118,18 @@ class VracoopPointRetrait(models.Model): ...@@ -113,13 +118,18 @@ class VracoopPointRetrait(models.Model):
if exclure_the_day: if exclure_the_day:
pass pass
else: else:
# Récupération de la ligne du jour correpsondant
corresponding_line = rec.vracoop_retrait_time_ids.search([ corresponding_line = rec.vracoop_retrait_time_ids.search([
('vracoop_point_retrait_id', '=', rec.id), ('vracoop_point_retrait_id', '=', rec.id),
('name', '=', week.strftime("%w"))]) ('name', '=', week.strftime("%w"))])
# Récupération du nom du jour et du Short name du jour
for week_day in LIST_WEEK_DAY: for week_day in LIST_WEEK_DAY:
if week_day[2] == int(week.strftime("%w")): if week_day[2] == int(week.strftime("%w")):
byweekday = week_day[1] byweekday = week_day[1]
day_short_name = week_day[3] day_short_name = week_day[3]
# Calcul de l'heure à laquelle la commande est disponible
time_available_week = datetime( time_available_week = datetime(
week.year, week.month, week.day) + timedelta( week.year, week.month, week.day) + timedelta(
hours=corresponding_line.availability_time) hours=corresponding_line.availability_time)
...@@ -140,6 +150,9 @@ class VracoopPointRetrait(models.Model): ...@@ -140,6 +150,9 @@ class VracoopPointRetrait(models.Model):
week.year, week.month, week.day) + timedelta( week.year, week.month, week.day) + timedelta(
hours=corresponding_line.last_noon_heure) hours=corresponding_line.last_noon_heure)
# Calcul des Slots (matin et après-midi) par jour en
# fonction de l'intervalle (correspondant au temps de mis
# à disposition) et des dates de début et de fin de retrait
list_slot_per_day_morning = list( list_slot_per_day_morning = list(
rrule( rrule(
MINUTELY, MINUTELY,
...@@ -156,26 +169,47 @@ class VracoopPointRetrait(models.Model): ...@@ -156,26 +169,47 @@ class VracoopPointRetrait(models.Model):
slots = [] slots = []
nb_sale_slot = 0 nb_sale_slot = 0
# Heure disponible pour un retrait
# en fonction du temps de préparation
today_hour_available = today_datetime + timedelta( today_hour_available = today_datetime + timedelta(
hours=corresponding_line.preparation_time) hours=corresponding_line.preparation_time)
# Boucle pour les créneaux du matin
for slot_elem in list_slot_per_day_morning: for slot_elem in list_slot_per_day_morning:
# Conversion du 1er Slot en HH:MM
first_slot = slot_elem.strftime("%H:%M") first_slot = slot_elem.strftime("%H:%M")
# Calcul du dernier slot
# en fonction du temps de mis à dsiposition
slot_elem_last = slot_elem + timedelta( slot_elem_last = slot_elem + timedelta(
hours=corresponding_line.availability_time) hours=corresponding_line.availability_time)
# Conversion du Dernier Slot en HH:MM
last_slot = slot_elem_last.strftime("%H:%M") last_slot = slot_elem_last.strftime("%H:%M")
if slot_elem >= last_morning_hour_week: if slot_elem >= last_morning_hour_week:
continue continue
# Si le jour est égal à la date du jour
if slot_elem.date() == today_datetime.date(): if slot_elem.date() == today_datetime.date():
if (slot_elem_last > last_morning_hour_week): if (slot_elem_last > last_morning_hour_week):
if (today_hour_available > last_morning_hour_week): if (today_hour_available > last_morning_hour_week):
continue continue
if (today_hour_available > slot_elem_last): if (today_hour_available > slot_elem_last):
continue continue
if (today_hour_available > slot_elem):
slot_elem_first = today_hour_available + timedelta(
hours=1.0)
first_slot = slot_elem_first.strftime("%H:00")
if first_slot == last_slot:
continue
if slot_elem_last >= last_morning_hour_week: if slot_elem_last >= last_morning_hour_week:
slot_elem_last = last_morning_hour_week slot_elem_last = last_morning_hour_week
last_slot = slot_elem_last.strftime("%H:%M") last_slot = slot_elem_last.strftime("%H:%M")
# Check number of maximum withdrawal not reached
# Vérification si
# Nombre max de retrait défini a été atteint
# Pas de controle si La valeur définie est 0
if rec.nb_max_retrait > 0:
first_slot_hour = first_slot.split(":") first_slot_hour = first_slot.split(":")
first_slot_float = float( first_slot_float = float(
'%s.%s' % (first_slot_hour[0], first_slot_hour[1])) '%s.%s' % (first_slot_hour[0], first_slot_hour[1]))
...@@ -185,27 +219,44 @@ class VracoopPointRetrait(models.Model): ...@@ -185,27 +219,44 @@ class VracoopPointRetrait(models.Model):
('hour_retrait', '=', first_slot_float)]) ('hour_retrait', '=', first_slot_float)])
if nb_sale_slot < rec.nb_max_retrait: if nb_sale_slot < rec.nb_max_retrait:
slots.append((first_slot, last_slot)) slots.append((first_slot, last_slot))
else:
slots.append((first_slot, last_slot))
# Boucle pour les créneaux de l'après-midi
for slot_elem in list_slot_per_day_noon: for slot_elem in list_slot_per_day_noon:
# Conversion du 1er Slot en HH:MM
first_slot = slot_elem.strftime("%H:%M") first_slot = slot_elem.strftime("%H:%M")
# Calcul du dernier slot
# en fonction du temps de mis à dsiposition
slot_elem_last = slot_elem + timedelta( slot_elem_last = slot_elem + timedelta(
hours=corresponding_line.availability_time) hours=corresponding_line.availability_time)
# Conversion du Dernier Slot en HH:MM
last_slot = slot_elem_last.strftime("%H:%M") last_slot = slot_elem_last.strftime("%H:%M")
if slot_elem >= last_noon_hour_week: if slot_elem >= last_noon_hour_week:
continue continue
# Si le jour est égal à la date du jour
if slot_elem.date() == today_datetime.date(): if slot_elem.date() == today_datetime.date():
if (slot_elem_last > last_noon_hour_week): if (slot_elem_last > last_noon_hour_week):
if (today_hour_available > last_noon_hour_week): if (today_hour_available > last_noon_hour_week):
continue continue
if (today_hour_available > slot_elem_last): if (today_hour_available > slot_elem_last):
continue continue
if (today_hour_available > slot_elem):
slot_elem_first = today_hour_available + timedelta(
hours=1.0)
first_slot = slot_elem_first.strftime("%H:00")
if first_slot == last_slot:
continue
if slot_elem_last >= last_noon_hour_week: if slot_elem_last >= last_noon_hour_week:
slot_elem_last = last_noon_hour_week slot_elem_last = last_noon_hour_week
last_slot = slot_elem_last.strftime("%H:%M") last_slot = slot_elem_last.strftime("%H:%M")
# Check number of maximum withdrawal not reached # Vérification si
# Nombre max de retrait défini a été atteint
# Pas de controle si La valeur définie est 0
if rec.nb_max_retrait > 0:
first_slot_hour = first_slot.split(":") first_slot_hour = first_slot.split(":")
first_slot_float = float( first_slot_float = float(
'%s.%s' % (first_slot_hour[0], first_slot_hour[1])) '%s.%s' % (first_slot_hour[0], first_slot_hour[1]))
...@@ -215,6 +266,8 @@ class VracoopPointRetrait(models.Model): ...@@ -215,6 +266,8 @@ class VracoopPointRetrait(models.Model):
('hour_retrait', '=', first_slot_float)]) ('hour_retrait', '=', first_slot_float)])
if nb_sale_slot < rec.nb_max_retrait: if nb_sale_slot < rec.nb_max_retrait:
slots.append((first_slot, last_slot)) slots.append((first_slot, last_slot))
else:
slots.append((first_slot, last_slot))
return_slot_list = slots return_slot_list = slots
if return_slot_list: if return_slot_list:
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter