'Unreserve quants then try to reassign quants.'

def rereserve_quants(self, move_ids=[]):

    if (not move_ids):
        self.do_unreserve()
        self.action_assign()
    else:
        moves = self.env['stock.move'].browse(move_ids)
        if self.env.context.get('no_state_change'):
            moves = moves.filtered((lambda m: m.reserved_quant_ids))
        moves.do_unreserve()
        moves.action_assign(no_prepare=True)
