[FIX] mrp: public/rpc methods not returning any value
XML-RPC can't serialize None, as a result methods callable over RPC must return something (True, False, an actual value) otherwise an error is generated when their result is serialized and sent back to the client. It happens that JSON-RPC has different limitations and can serialize None, so MRP had multiple button/action methods which could be called over JSON-RPC but would break when called in XML-RPC for no reason. Fix them by returning `True` or result of `write`. OPW-728844
This commit is contained in:
committed by
Nicolas Martinelli
parent
79519ce400
commit
0550da4d88
@@ -410,7 +410,7 @@ class MrpProduction(models.Model):
|
||||
quantity = order.product_uom_id._compute_quantity(order.product_qty, order.bom_id.product_uom_id) / order.bom_id.product_qty
|
||||
boms, lines = order.bom_id.explode(order.product_id, quantity, picking_type=order.bom_id.picking_type_id)
|
||||
order._generate_workorders(boms)
|
||||
orders_to_plan.write({'state': 'planned'})
|
||||
return orders_to_plan.write({'state': 'planned'})
|
||||
|
||||
@api.multi
|
||||
def _generate_workorders(self, exploded_boms):
|
||||
@@ -539,17 +539,19 @@ class MrpProduction(models.Model):
|
||||
moves_to_cancel.action_cancel()
|
||||
self.write({'state': 'done', 'date_finished': fields.Datetime.now()})
|
||||
self.env["procurement.order"].search([('production_id', 'in', self.ids)]).check()
|
||||
self.write({'state': 'done'})
|
||||
return self.write({'state': 'done'})
|
||||
|
||||
@api.multi
|
||||
def do_unreserve(self):
|
||||
for production in self:
|
||||
production.move_raw_ids.filtered(lambda x: x.state not in ('done', 'cancel')).do_unreserve()
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def button_unreserve(self):
|
||||
self.ensure_one()
|
||||
self.do_unreserve()
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def button_scrap(self):
|
||||
|
||||
@@ -131,7 +131,7 @@ class MrpUnbuild(models.Model):
|
||||
produced_quant_ids = produce_moves.mapped('quant_ids').filtered(lambda quant: quant.qty > 0)
|
||||
consume_move.quant_ids.sudo().write({'produced_quant_ids': [(6, 0, produced_quant_ids.ids)]})
|
||||
|
||||
self.write({'state': 'done'})
|
||||
return self.write({'state': 'done'})
|
||||
|
||||
def _generate_consume_moves(self):
|
||||
moves = self.env['stock.move']
|
||||
|
||||
@@ -342,6 +342,7 @@ class MrpWorkorder(models.Model):
|
||||
self.final_lot_id = False
|
||||
if self.qty_produced >= self.production_id.product_qty:
|
||||
self.button_finish()
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def button_start(self):
|
||||
@@ -369,7 +370,7 @@ class MrpWorkorder(models.Model):
|
||||
'date_start': datetime.now(),
|
||||
'user_id': self.env.user.id
|
||||
})
|
||||
self.write({'state': 'progress',
|
||||
return self.write({'state': 'progress',
|
||||
'date_start': datetime.now(),
|
||||
})
|
||||
|
||||
@@ -377,7 +378,7 @@ class MrpWorkorder(models.Model):
|
||||
def button_finish(self):
|
||||
self.ensure_one()
|
||||
self.end_all()
|
||||
self.write({'state': 'done', 'date_finished': fields.Datetime.now()})
|
||||
return self.write({'state': 'done', 'date_finished': fields.Datetime.now()})
|
||||
|
||||
@api.multi
|
||||
def end_previous(self, doall=False):
|
||||
@@ -405,6 +406,7 @@ class MrpWorkorder(models.Model):
|
||||
if not len(loss_id):
|
||||
raise UserError(_("You need to define at least one unactive productivity loss in the category 'Performance'. Create one from the Manufacturing app, menu: Configuration / Productivity Losses."))
|
||||
timeline.copy({'date_start': maxdate, 'date_end': enddate, 'loss_id': loss_id.id})
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def end_all(self):
|
||||
@@ -413,22 +415,24 @@ class MrpWorkorder(models.Model):
|
||||
@api.multi
|
||||
def button_pending(self):
|
||||
self.end_previous()
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def button_unblock(self):
|
||||
for order in self:
|
||||
order.workcenter_id.unblock()
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def action_cancel(self):
|
||||
self.write({'state': 'cancel'})
|
||||
return self.write({'state': 'cancel'})
|
||||
|
||||
@api.multi
|
||||
def button_done(self):
|
||||
if any([x.state in ('done', 'cancel') for x in self]):
|
||||
raise UserError(_('A Manufacturing Order is already done or cancelled!'))
|
||||
self.end_all()
|
||||
self.write({'state': 'done',
|
||||
return self.write({'state': 'done',
|
||||
'date_finished': datetime.now()})
|
||||
|
||||
@api.multi
|
||||
|
||||
Reference in New Issue
Block a user