49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
import datetime
|
|
|
|
from trytond.model import ModelSQL, fields
|
|
from trytond.pool import PoolMeta
|
|
|
|
|
|
class ProductSupplier(metaclass=PoolMeta):
|
|
__name__ = 'purchase.product_supplier'
|
|
weekdays = fields.Many2Many(
|
|
'purchase.product_supplier.day', 'product_supplier', 'day',
|
|
"Week Days")
|
|
|
|
def compute_supply_date(self, date=None):
|
|
date = super().compute_supply_date(date=date)
|
|
earlier_date = None
|
|
if date != datetime.date.max:
|
|
for weekday in self.weekdays:
|
|
diff = weekday.index - date.weekday()
|
|
if diff < 0:
|
|
diff += 7
|
|
new_date = date + datetime.timedelta(diff)
|
|
|
|
if earlier_date and earlier_date <= new_date:
|
|
continue
|
|
earlier_date = new_date
|
|
return earlier_date or date
|
|
|
|
def compute_purchase_date(self, date):
|
|
later_date = None
|
|
for weekday in self.weekdays:
|
|
diff = (date.weekday() - weekday.index) % 7
|
|
new_date = date - datetime.timedelta(diff)
|
|
if later_date and later_date >= new_date:
|
|
continue
|
|
later_date = new_date
|
|
if later_date:
|
|
date = later_date
|
|
return super().compute_purchase_date(date)
|
|
|
|
|
|
class ProductSupplierDay(ModelSQL):
|
|
__name__ = 'purchase.product_supplier.day'
|
|
product_supplier = fields.Many2One(
|
|
'purchase.product_supplier', 'Supplier',
|
|
required=True, ondelete='CASCADE')
|
|
day = fields.Many2One('ir.calendar.day', "Day", required=True)
|