76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
# The COPYRIGHT file at the top level of this repository contains the full
|
|
# copyright notices and license terms.
|
|
from trytond.pool import PoolMeta, Pool
|
|
from trytond.model import fields
|
|
from datetime import datetime
|
|
from trytond.transaction import Transaction
|
|
|
|
|
|
class Party(metaclass=PoolMeta):
|
|
__name__ = 'party.party'
|
|
|
|
shipment_in_quality_template = fields.Many2One('quality.template',
|
|
'Shipment In Quality Template')
|
|
shipment_out_quality_template = fields.Many2One('quality.template',
|
|
'Shipment Out Quality Template')
|
|
|
|
|
|
class CreateQualityModelTestsMixin(object):
|
|
__slots__ = ()
|
|
|
|
@classmethod
|
|
def create_model_test(cls, shipments, type_, party_field):
|
|
QualityTest = Pool().get('quality.test')
|
|
if not shipments:
|
|
return
|
|
to_save = []
|
|
with Transaction().set_context(_check_access=False):
|
|
for shipment in shipments:
|
|
party = getattr(shipment, party_field)
|
|
used_template = getattr(party, type_ + '_quality_template')
|
|
resource = str(shipment)
|
|
test = QualityTest(
|
|
test_date=datetime.now(),
|
|
templates=[used_template],
|
|
document=resource)
|
|
test.apply_template_values()
|
|
to_save.append(test)
|
|
|
|
QualityTest.save(to_save)
|
|
|
|
|
|
class ShipmentIn(CreateQualityModelTestsMixin, metaclass=PoolMeta):
|
|
__name__ = 'stock.shipment.in'
|
|
|
|
@classmethod
|
|
def shipments_for_quality_test(cls, shipments):
|
|
res = []
|
|
for shipment in shipments:
|
|
if shipment.supplier.shipment_in_quality_template:
|
|
res.append(shipment)
|
|
return res
|
|
|
|
@classmethod
|
|
def receive(cls, shipments):
|
|
super().receive(shipments)
|
|
to_test = cls.shipments_for_quality_test(shipments)
|
|
cls.create_model_test(to_test, 'shipment_in', 'supplier')
|
|
|
|
|
|
class ShipmentOut(CreateQualityModelTestsMixin, metaclass=PoolMeta):
|
|
__name__ = 'stock.shipment.out'
|
|
|
|
@classmethod
|
|
def shipments_for_quality_test(cls, shipments):
|
|
res = []
|
|
for shipment in shipments:
|
|
if shipment.customer.shipment_out_quality_template:
|
|
res.append(shipment)
|
|
return res
|
|
|
|
@classmethod
|
|
def pack(cls, shipments):
|
|
super().pack(shipments)
|
|
to_test = cls.shipments_for_quality_test(shipments)
|
|
cls.create_model_test(to_test, 'shipment_out', 'customer')
|