**Impacted versions:** 8.0

**Steps to reproduce:**
To reproduce it is necessary the fifo configuration in the assignation of quants in moves.

- Create a sale order with two lines of the same product, one of that line with a route that generate moves between warehouse.

<img width="1231" alt="skitch 65" src="https://cloud.githubusercontent.com/assets/11341058/24102907/d575a638-0d53-11e7-922e-a3f034d43e94.png">

The route used has three pull rules:

1. From Stock Warehouse_1 to Virtual Locations/Inter Company Transit
2. From Virtual Locations/Inter Company Transit to Stock Warehouse_2
3. From Stock Warehouse_2 to Customers

<img width="1224" alt="skitch 66" src="https://cloud.githubusercontent.com/assets/11341058/24103147/b7c2bfbc-0d54-11e7-955c-87247a10e0bd.png">

- Confirm the sale order. It must be created three pickings:

<img width="1226" alt="skitch 67" src="https://cloud.githubusercontent.com/assets/11341058/24103498/d90c9b38-0d55-11e7-97ff-f986df8cdd9b.png">

- Transfer first two pickings.

<img width="1230" alt="skitch 70" src="https://cloud.githubusercontent.com/assets/11341058/24104496/b7b0be8a-0d58-11e7-89a2-4331fceec1d8.png">

- Before transfer third picking, review that one move has reserved the quant correctly because was reserved from the previous pickings.

<img width="1215" alt="skitch 68" src="https://cloud.githubusercontent.com/assets/11341058/24103908/23952cc8-0d57-11e7-9346-bd48d7edb54a.png">

**Current behavior:**

When check availability of this third picking, the quant already reserved is moved to the other move.

<img width="1264" alt="skitch 69" src="https://cloud.githubusercontent.com/assets/11341058/24104056/8be11616-0d57-11e7-8763-a90507315b19.png">
 
**Expected behavior:**

When check availability of this third picking, the moves already reserved must not be altered.


addons/stock/stock.py
''' This function tries to find quants in the given location for the given domain, by trying to first limit
            the choice on the quants that match the first item of prefered_domain_list as well. But if the qty requested is not reached
            it tries to find the remaining quantity by looping on the prefered_domain_list (tries with the second item and so on).
            Make sure the quants aren't found twice => all the domains of prefered_domain_list should be orthogonal
        '''
        if domain is None:
            domain = []
        quants = [(None, qty)]
        
        if location.usage in ['inventory', 'production', 'supplier']:
            return quants
        res_qty = qty
        if not prefered_domain_list:
            return self.quants_get(cr, uid, location, product, qty, domain=domain, restrict_lot_id=restrict_lot_id, restrict_partner_id=restrict_partner_id, context=context)
        for prefered_domain in prefered_domain_list:
            res_qty_cmp = float_compare(res_qty, 0, precision_rounding=product.uom_id.rounding)
            if res_qty_cmp > 0:
                
                quants.pop()
                tmp_quants = self.quants_get(cr, uid, location, product, res_qty, domain=domain + prefered_domain, restrict_lot_id=restrict_lot_id, restrict_partner_id=restrict_partner_id, context=context)
                for quant in tmp_quants:
                    if quant[0]:
                        res_qty -= quant[1]
                quants += tmp_quants
        return quants
    def quants_get(self, cr, uid, location, product, qty, domain=None, restrict_lot_id=False, restrict_partner_id=False, context=None):