add some features
This commit is contained in:
parent
c12dcb3ca1
commit
6c877a90b9
12
message.xml
12
message.xml
|
@ -13,4 +13,16 @@ this repository contains the full copyright notices and license terms. -->
|
|||
<field name="text">Production "%(production)s" can not be done because their operation "%(operation)s" is not done.'</field>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<data grouped="1" depends="purchase_request">
|
||||
<record model="ir.message" id="purchase_missing">
|
||||
<field name="text">You can not finish an operation without create a purchase on Purchase request "%(request)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="purchase_pending">
|
||||
<field name="text">You can not finish an operation without finish purchase "%(purchase)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="purchase_request_wait">
|
||||
<field name="text">Operation "%(operation)s" on Production "%(production)s" already has a purchase request".</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
|
|
78
operation.py
78
operation.py
|
@ -415,7 +415,7 @@ class OperationSubcontrat(metaclass=PoolMeta):
|
|||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(Operation, cls).__setup__()
|
||||
super().__setup__()
|
||||
cls._buttons.update({
|
||||
'create_purchase_request': {
|
||||
'invisible': Eval('state') != 'planned',
|
||||
|
@ -428,7 +428,7 @@ class OperationSubcontrat(metaclass=PoolMeta):
|
|||
|
||||
product = self.subcontracted_product
|
||||
uom = product.purchase_uom
|
||||
quantity = self.total_quantity
|
||||
quantity = 1
|
||||
shortage_date = self.production.planned_date
|
||||
company = self.production.company
|
||||
supplier_pattern = {}
|
||||
|
@ -453,16 +453,11 @@ class OperationSubcontrat(metaclass=PoolMeta):
|
|||
@ModelView.button
|
||||
def create_purchase_request(cls, operations):
|
||||
pool = Pool()
|
||||
Request = pool.get('purchase.request')
|
||||
requests = []
|
||||
to_save = []
|
||||
for operation in operations:
|
||||
request = operation._get_purchase_request()
|
||||
# request.save()
|
||||
operation.purchase_request = request
|
||||
to_save.append(operation)
|
||||
#requests.append(requests)
|
||||
#Request.save(requests)
|
||||
cls.save(to_save)
|
||||
|
||||
|
||||
|
@ -479,23 +474,58 @@ class OperationSubcontrat(metaclass=PoolMeta):
|
|||
pool = Pool()
|
||||
Config = pool.get('production.configuration')
|
||||
Warning = pool.get('res.user.warning')
|
||||
operations = []
|
||||
op_warn = []
|
||||
config = Config(1)
|
||||
|
||||
operations = [op for op in operations if op.purchase_request]
|
||||
|
||||
if operations:
|
||||
operation, = operations
|
||||
op_warn = [op for op in operations if op.purchase_request]
|
||||
if op_warn:
|
||||
operation, = op_warn
|
||||
key ='operation_%d' % operation.id
|
||||
if config.check_state_operation == 'user_warning':
|
||||
if Warning.check(key):
|
||||
raise UserWarning(key,
|
||||
gettext('production_operation.purchase_request',
|
||||
gettext('production_operation.purchase_request_wait',
|
||||
production=operation.production.rec_name,
|
||||
operation=operation.rec_name))
|
||||
|
||||
super().wait(operations)
|
||||
|
||||
@classmethod
|
||||
def done(cls, operations):
|
||||
pool = Pool()
|
||||
Purchase = pool.get('purchase.purchase')
|
||||
requests = set([o.purchase_request for o in operations if
|
||||
o.purchase_request])
|
||||
purchases = [r.purchase for r in requests if r.purchase]
|
||||
print("purchases:", purchases)
|
||||
|
||||
for request in requests:
|
||||
if request.purchase:
|
||||
continue
|
||||
raise UserError(
|
||||
gettext('production_operation.purchase_missing',
|
||||
request=request.rec_name))
|
||||
|
||||
for purchase in purchases:
|
||||
if purchase.state in ('processing', 'done'):
|
||||
continue
|
||||
raise UserError(
|
||||
gettext('production_operation.purchase_pending',
|
||||
purchase=purchase.rec_name))
|
||||
|
||||
super().done(operations)
|
||||
Purchase.process(purchases)
|
||||
|
||||
|
||||
@classmethod
|
||||
def copy(cls, lines, default=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
else:
|
||||
default = default.copy()
|
||||
default.setdefault('purchase_request', None)
|
||||
super().copy(lines, default=default)
|
||||
|
||||
|
||||
class PurchaseLine(metaclass=PoolMeta):
|
||||
__name__ = 'purchase.line'
|
||||
|
@ -508,11 +538,13 @@ class PurchaseLine(metaclass=PoolMeta):
|
|||
|
||||
def _get_invoice_line_quantity(self):
|
||||
pool = Pool()
|
||||
PurchaseRequest = pool.get('purchase.request')
|
||||
if (self.purchase.invoice_method == 'shipment'
|
||||
and isinstance(self.origin, PurchaseRequest)
|
||||
and self.origin.state == 'done'):
|
||||
return self.quantity
|
||||
ProductionOperation = pool.get('production.operation')
|
||||
if not isinstance(self.origin, ProductionOperation):
|
||||
return super()._get_invoice_line_quantity()
|
||||
|
||||
if not (self.purchase.invoice_method == 'shipment'
|
||||
and self.origin.state == 'done'):
|
||||
return 0
|
||||
return super()._get_invoice_line_quantity()
|
||||
|
||||
@classmethod
|
||||
|
@ -526,6 +558,16 @@ class PurchaseLine(metaclass=PoolMeta):
|
|||
res.append([model.model, model.name])
|
||||
return res
|
||||
|
||||
@classmethod
|
||||
def copy(cls, lines, default=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
else:
|
||||
default = default.copy()
|
||||
default.setdefault('origin', None)
|
||||
super().copy(lines, default=default)
|
||||
|
||||
|
||||
class PurchaseRequest(metaclass=PoolMeta):
|
||||
__name__ = 'purchase.request'
|
||||
|
||||
|
|
|
@ -7,5 +7,8 @@
|
|||
<newline/>
|
||||
<label name="subcontracted_product"/>
|
||||
<field name="subcontracted_product"/>
|
||||
<label name="purchase_request"/>
|
||||
<field name="purchase_request"/>
|
||||
<button name="create_purchase_request" colspan="2"/>
|
||||
</xpath>
|
||||
</data>
|
||||
|
|
Loading…
Reference in New Issue