return {'value': v}
return {}
+ def get_cancel_ids(self, cr, uid, ids, context=None):
+ return [proc.id for proc in self.browse(cr, uid, ids, context=context) if proc.state != 'done']
+
def cancel(self, cr, uid, ids, context=None):
- return self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
+ #cancel only the procurements that aren't done already
+ to_cancel_ids = self.get_cancel_ids(cr, uid, ids, context=context)
+ if to_cancel_ids:
+ return self.write(cr, uid, to_cancel_ids, {'state': 'cancel'}, context=context)
def reset_to_confirmed(self, cr, uid, ids, context=None):
return self.write(cr, uid, ids, {'state': 'confirmed'}, context=context)
def cancel(self, cr, uid, ids, context=None):
if context is None:
context = {}
+ to_cancel_ids = self.get_cancel_ids(cr, uid, ids, context=context)
ctx = context.copy()
#set the context for the propagation of the procurement cancelation
ctx['cancel_procurement'] = True
- for procurement in self.browse(cr, uid, ids, context=ctx):
+ for procurement in self.browse(cr, uid, to_cancel_ids, context=ctx):
if procurement.rule_id and procurement.rule_id.propagate:
self.propagate_cancel(cr, uid, procurement, context=ctx)
- return super(procurement_order, self).cancel(cr, uid, ids, context=ctx)
+ return super(procurement_order, self).cancel(cr, uid, to_cancel_ids, context=ctx)
def _find_parent_locations(self, cr, uid, procurement, context=None):
location = procurement.location_id
'date_expected': newdate,
'propagate': procurement.rule_id.propagate,
}
+ #look if the procurement was in exception (because all its moves were cancelled) and cancel the previously made attempt to avoid duplicates
+ cancelled_moves = [m.id for m in procurement.move_ids if m.state == 'cancel']
+ if cancelled_moves:
+ previous_attempt = self.search(cr, uid, [('move_dest_id', 'in', cancelled_moves)], context=context)
+ if previous_attempt:
+ self.cancel(cr, uid, previous_attempt, context=context)
return vals
def _run(self, cr, uid, procurement, context=None):
self.write(cr, uid, [procurement.id], {'state': 'exception'}, context=context)
self.message_post(cr, uid, [procurement.id], body=_('All stock moves have been cancelled for this procurement.'), context=context)
return False
-
+
return super(procurement_order, self)._check(cr, uid, procurement, context)
def do_view_pickings(self, cr, uid, ids, context=None):