Files
tradon/modules/incoterm/purchase.py
2026-03-14 09:42:12 +00:00

68 lines
2.2 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.
from trytond.i18n import gettext
from trytond.model import fields
from trytond.pool import PoolMeta
from trytond.pyson import Eval
from .common import IncotermAvailableMixin, IncotermMixin
class Purchase(IncotermAvailableMixin, metaclass=PoolMeta):
__name__ = 'purchase.purchase'
@classmethod
def __setup__(cls):
super().__setup__()
cls.incoterm_location.search_context['incoterm_type'] = 'purchase'
@property
@fields.depends('party')
def _party_incoterms(self):
return self.party.purchase_incoterms if self.party else []
@property
@fields.depends(methods=['_party_incoterms'])
def _incoterm_required(self):
return bool(self._party_incoterms)
def check_for_quotation(self):
from trytond.modules.purchase.exceptions import PurchaseQuotationError
super().check_for_quotation()
if not self.incoterm and self._incoterm_required:
for line in self.lines:
if line.movable:
raise PurchaseQuotationError(
gettext('incoterm'
'.msg_purchase_incoterm_required_for_quotation',
purchase=self.rec_name))
class RequestQuotation(IncotermMixin, metaclass=PoolMeta):
__name__ = 'purchase.request.quotation'
@classmethod
def __setup__(cls):
super().__setup__()
cls.incoterm_location.search_context['incoterm_type'] = 'purchase'
@classmethod
def _incoterm_related_party(cls):
return Eval('supplier'), {'supplier'}
class RequestCreatePurchase(metaclass=PoolMeta):
__name__ = 'purchase.request.create_purchase'
@classmethod
def _group_purchase_key(cls, requests, request):
return super()._group_purchase_key(requests, request) + (
('incoterm',
request.best_quotation_line.quotation.incoterm
if request.best_quotation_line else None),
('incoterm_location',
request.best_quotation_line.quotation.incoterm_location
if request.best_quotation_line else None),
)