Pricing adj
This commit is contained in:
@@ -50,7 +50,6 @@ WEEKDAY_MAP = {
|
||||
|
||||
DAYS = [
|
||||
(None,''),
|
||||
('before_after', 'Before/After'),
|
||||
('monday', 'Monday'),
|
||||
('tuesday', 'Tuesday'),
|
||||
('wednesday', 'Wednesday'),
|
||||
@@ -1666,9 +1665,11 @@ class Period(ModelSQL,ModelView):
|
||||
endday = fields.Selection(DAYTYPES,"End day")
|
||||
nbde = fields.Integer("Nb")
|
||||
nbms = fields.Integer("Starting month")
|
||||
nbme = fields.Integer("Ending month")
|
||||
every = fields.Selection(DAYS,"Every")
|
||||
nb_quotation = fields.Integer("Nb quotation")
|
||||
nbme = fields.Integer("Ending month")
|
||||
every = fields.Selection(DAYS,"Every")
|
||||
nb_quotation_before = fields.Integer("Nb quotes before")
|
||||
nb_quotation_after = fields.Integer("Nb quotes after")
|
||||
nb_quotation = fields.Integer("Nb quotation")
|
||||
|
||||
@classmethod
|
||||
def default_nbds(cls):
|
||||
@@ -1683,8 +1684,16 @@ class Period(ModelSQL,ModelView):
|
||||
return 0
|
||||
|
||||
@classmethod
|
||||
def default_nbme(cls):
|
||||
return 0
|
||||
def default_nbme(cls):
|
||||
return 0
|
||||
|
||||
@classmethod
|
||||
def default_nb_quotation_before(cls):
|
||||
return 0
|
||||
|
||||
@classmethod
|
||||
def default_nb_quotation_after(cls):
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def _calendar_is_quote(cal, date):
|
||||
@@ -1712,19 +1721,44 @@ class Period(ModelSQL,ModelView):
|
||||
dates.reverse()
|
||||
return dates
|
||||
|
||||
def _quotation_counts(self):
|
||||
before = self.nb_quotation_before or 0
|
||||
after = self.nb_quotation_after or 0
|
||||
if before or after or not self.nb_quotation:
|
||||
return max(before, 0), max(after, 0)
|
||||
if self.every == 'before_after':
|
||||
count = abs(self.nb_quotation)
|
||||
return count, count
|
||||
if self.nb_quotation < 0:
|
||||
return abs(self.nb_quotation), 0
|
||||
return 0, self.nb_quotation
|
||||
|
||||
@staticmethod
|
||||
def _weekday_dates(trigger_date, weekday_target, count, step):
|
||||
dates = []
|
||||
current = trigger_date
|
||||
while len(dates) < count:
|
||||
current += datetime.timedelta(days=step)
|
||||
if current.weekday() == weekday_target:
|
||||
dates.append(datetime.datetime(
|
||||
current.year, current.month, current.day))
|
||||
if step < 0:
|
||||
dates.reverse()
|
||||
return dates
|
||||
|
||||
def getDates(self,t, cal=None):
|
||||
date_from = None
|
||||
date_to = None
|
||||
dates = []
|
||||
if t:
|
||||
before_count, after_count = self._quotation_counts()
|
||||
if self.every:
|
||||
if t:
|
||||
j = self.every
|
||||
if j == 'before_after' and self.nb_quotation:
|
||||
count = abs(self.nb_quotation)
|
||||
if j == 'before_after':
|
||||
dates.extend(
|
||||
self._available_quotation_dates(
|
||||
t, count, -1, cal))
|
||||
t, before_count, -1, cal))
|
||||
trigger_date = self._as_datetime(t)
|
||||
if (self.include
|
||||
and self._calendar_is_quote(
|
||||
@@ -1732,7 +1766,7 @@ class Period(ModelSQL,ModelView):
|
||||
dates.append(trigger_date)
|
||||
dates.extend(
|
||||
self._available_quotation_dates(
|
||||
t, count, 1, cal))
|
||||
t, after_count, 1, cal))
|
||||
return date_from, date_to, dates
|
||||
if j not in WEEKDAY_MAP:
|
||||
raise ValueError(f"Invalid day : '{j}'")
|
||||
@@ -1743,34 +1777,30 @@ class Period(ModelSQL,ModelView):
|
||||
first_day = t.replace(day=1)
|
||||
days_to_add = (weekday_target - first_day.weekday()) % 7
|
||||
current = first_day + datetime.timedelta(days=days_to_add)
|
||||
while current.month == t.month:
|
||||
dates.append(datetime.datetime(current.year, current.month, current.day))
|
||||
current += datetime.timedelta(days=7)
|
||||
elif self.nb_quotation > 0:
|
||||
days_to_add = (weekday_target - t.weekday()) % 7
|
||||
current = t + datetime.timedelta(days=days_to_add)
|
||||
while len(dates) < self.nb_quotation:
|
||||
dates.append(datetime.datetime(current.year, current.month, current.day))
|
||||
current += datetime.timedelta(days=7)
|
||||
elif self.nb_quotation < 0:
|
||||
days_to_sub = (t.weekday() - weekday_target) % 7
|
||||
current = t - datetime.timedelta(days=days_to_sub)
|
||||
while len(dates) < -self.nb_quotation:
|
||||
while current.month == t.month:
|
||||
dates.append(datetime.datetime(current.year, current.month, current.day))
|
||||
current -= datetime.timedelta(days=7)
|
||||
current += datetime.timedelta(days=7)
|
||||
elif before_count or after_count:
|
||||
dates.extend(self._weekday_dates(
|
||||
t, weekday_target, before_count, -1))
|
||||
trigger_date = self._as_datetime(t)
|
||||
if (self.include
|
||||
and trigger_date.weekday() == weekday_target):
|
||||
dates.append(trigger_date)
|
||||
dates.extend(self._weekday_dates(
|
||||
t, weekday_target, after_count, 1))
|
||||
|
||||
elif self.nb_quotation:
|
||||
step = 1 if self.nb_quotation > 0 else -1
|
||||
elif before_count or after_count:
|
||||
dates.extend(
|
||||
self._available_quotation_dates(
|
||||
t, abs(self.nb_quotation), step, cal))
|
||||
t, before_count, -1, cal))
|
||||
trigger_date = self._as_datetime(t)
|
||||
if (self.include
|
||||
and self._calendar_is_quote(cal, trigger_date)):
|
||||
if self.nb_quotation > 0:
|
||||
dates.insert(0, trigger_date)
|
||||
else:
|
||||
dates.append(trigger_date)
|
||||
dates.append(trigger_date)
|
||||
dates.extend(
|
||||
self._available_quotation_dates(
|
||||
t, after_count, 1, cal))
|
||||
else:
|
||||
if self.startday == 'before':
|
||||
date_from = t - datetime.timedelta(days=(self.nbds if self.nbds else 0))
|
||||
|
||||
Reference in New Issue
Block a user