Pricing adj
This commit is contained in:
@@ -1551,10 +1551,12 @@ class Trigger(ModelSQL,ModelView):
|
||||
def default_average(cls):
|
||||
return True
|
||||
|
||||
@fields.depends('pricing_period')
|
||||
def on_change_with_application_period(self):
|
||||
if not self.application_period and self.pricing_period:
|
||||
return self.pricing_period
|
||||
@fields.depends('pricing_period', 'application_period')
|
||||
def on_change_with_application_period(self):
|
||||
if self.application_period:
|
||||
return self.application_period
|
||||
if self.pricing_period:
|
||||
return self.pricing_period
|
||||
|
||||
@fields.depends('from_p', 'from_a', 'application_period')
|
||||
def on_change_from_p(self):
|
||||
@@ -1727,14 +1729,16 @@ class Period(ModelSQL,ModelView):
|
||||
current -= datetime.timedelta(days=7)
|
||||
|
||||
elif self.nb_quotation:
|
||||
current = t - datetime.timedelta(days=1)
|
||||
step = 1 if self.nb_quotation > 0 else -1
|
||||
current = t + datetime.timedelta(days=step)
|
||||
while len(dates) < abs(self.nb_quotation):
|
||||
date = datetime.datetime(
|
||||
current.year, current.month, current.day)
|
||||
if self._calendar_is_quote(cal, date):
|
||||
dates.append(date)
|
||||
current -= datetime.timedelta(days=1)
|
||||
dates.reverse()
|
||||
current += datetime.timedelta(days=step)
|
||||
if self.nb_quotation < 0:
|
||||
dates.reverse()
|
||||
else:
|
||||
if self.startday == 'before':
|
||||
date_from = t - datetime.timedelta(days=(self.nbds if self.nbds else 0))
|
||||
|
||||
@@ -3359,13 +3359,13 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
datetime.date(2026, 4, 3),
|
||||
])
|
||||
|
||||
def test_pricing_period_blank_every_uses_available_dates_before_trigger(self):
|
||||
'Blank Every and Nb quotation returns available dates before trigger'
|
||||
def test_pricing_period_blank_every_positive_uses_available_dates_after_trigger(self):
|
||||
'Blank Every and positive Nb quotation returns dates after trigger'
|
||||
Period = Pool().get('pricing.period')
|
||||
calendar = Mock()
|
||||
excluded = {
|
||||
datetime.date(2026, 4, 8),
|
||||
datetime.date(2026, 4, 10),
|
||||
datetime.date(2026, 5, 14),
|
||||
datetime.date(2026, 5, 16),
|
||||
}
|
||||
calendar.IsQuote = Mock(
|
||||
side_effect=lambda date: date.date() not in excluded)
|
||||
@@ -3374,15 +3374,15 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
period.every = None
|
||||
period.nb_quotation = 4
|
||||
|
||||
_, _, dates = period.getDates(datetime.date(2026, 4, 13), calendar)
|
||||
_, _, dates = period.getDates(datetime.date(2026, 5, 12), calendar)
|
||||
|
||||
self.assertEqual(
|
||||
[date.date() for date in dates],
|
||||
[
|
||||
datetime.date(2026, 4, 6),
|
||||
datetime.date(2026, 4, 7),
|
||||
datetime.date(2026, 4, 9),
|
||||
datetime.date(2026, 4, 12),
|
||||
datetime.date(2026, 5, 13),
|
||||
datetime.date(2026, 5, 15),
|
||||
datetime.date(2026, 5, 17),
|
||||
datetime.date(2026, 5, 18),
|
||||
])
|
||||
|
||||
def test_pricing_period_blank_every_negative_uses_available_dates_before_trigger(self):
|
||||
@@ -3393,17 +3393,40 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
period.every = None
|
||||
period.nb_quotation = -4
|
||||
|
||||
_, _, dates = period.getDates(datetime.date(2026, 4, 13))
|
||||
_, _, dates = period.getDates(datetime.date(2026, 5, 12))
|
||||
|
||||
self.assertEqual(
|
||||
[date.date() for date in dates],
|
||||
[
|
||||
datetime.date(2026, 4, 9),
|
||||
datetime.date(2026, 4, 10),
|
||||
datetime.date(2026, 4, 11),
|
||||
datetime.date(2026, 4, 12),
|
||||
datetime.date(2026, 5, 8),
|
||||
datetime.date(2026, 5, 9),
|
||||
datetime.date(2026, 5, 10),
|
||||
datetime.date(2026, 5, 11),
|
||||
])
|
||||
|
||||
def test_pricing_trigger_application_period_defaults_to_pricing_period(self):
|
||||
'application period defaults to pricing period without being cleared'
|
||||
Trigger = Pool().get('pricing.trigger')
|
||||
trigger = Trigger()
|
||||
trigger.pricing_period = Mock(id=21)
|
||||
trigger.application_period = None
|
||||
|
||||
self.assertEqual(
|
||||
trigger.on_change_with_application_period(),
|
||||
trigger.pricing_period)
|
||||
|
||||
def test_pricing_trigger_application_period_keeps_existing_value(self):
|
||||
'application period keeps explicit value when pricing period changes'
|
||||
Trigger = Pool().get('pricing.trigger')
|
||||
application_period = Mock(id=22)
|
||||
trigger = Trigger()
|
||||
trigger.pricing_period = Mock(id=21)
|
||||
trigger.application_period = application_period
|
||||
|
||||
self.assertEqual(
|
||||
trigger.on_change_with_application_period(),
|
||||
application_period)
|
||||
|
||||
def test_purchase_line_get_avg_accepts_decimal_matrix_prices(self):
|
||||
'purchase pricing averages Decimal matrix prices without float mixing'
|
||||
PurchaseLine = Pool().get('purchase.line')
|
||||
|
||||
Reference in New Issue
Block a user