trytond-quality_control/stock.py

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')