68 lines
2.2 KiB
Python
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),
|
|
)
|