**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.


\n* Transit Location: Counterpart location that should be used in inter-companies or inter-warehouses operations
                      """, select=True),
        'complete_name': fields.function(_complete_name, type='char', string="Location Name",
                            store={'stock.location': (_get_sublocations, ['name', 'location_id', 'active'], 10)}),
        'location_id': fields.many2one('stock.location', 'Parent Location', select=True, ondelete='cascade'),
        'child_ids': fields.one2many('stock.location', 'location_id', 'Contains'),
        'partner_id': fields.many2one('res.partner', 'Owner', help="Owner of the location if not internal"),
        'comment': fields.text('Additional Information'),
        'posx': fields.integer('Corridor (X)', help="Optional localization details, for information purpose only"),
        'posy': fields.integer('Shelves (Y)', help="Optional localization details, for information purpose only"),
        'posz': fields.integer('Height (Z)', help="Optional localization details, for information purpose only"),
        'parent_left': fields.integer('Left Parent', select=1),
        'parent_right': fields.integer('Right Parent', select=1),
        'company_id': fields.many2one('res.company', 'Company', select=1, help='Let this field empty if this location is shared between companies'),
        'scrap_location': fields.boolean('Is a Scrap Location?', help='Check this box to allow using this location to put scrapped/damaged goods.'),
        'removal_strategy_id': fields.many2one('product.removal', 'Removal Strategy', help="Defines the default method used for suggesting the exact location (shelf) where to take the products from, which lot etc. for this location. This method can be enforced at the product category level, and a fallback is made on the parent locations if none is set here."),
        'putaway_strategy_id': fields.many2one('product.putaway', 'Put Away Strategy', help="Defines the default method used for suggesting the exact location (shelf) where to store the products. This method can be enforced at the product category level, and a fallback is made on the parent locations if none is set here."),
        'loc_barcode': fields.char('Location Barcode'),
    }
    _defaults = {
        'active': True,
        'usage': 'internal',
        'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.location', context=c),
        'posx': 0,
        'posy': 0,
        'posz': 0,
        'scrap_location': False,
    }
    _sql_constraints = [('loc_barcode_company_uniq', 'unique (loc_barcode,company_id)', 'The barcode for a location must be unique per company !')]
    def create(self, cr, uid, default, context=None):