[IMP] Add composite indexes for stock_move and stock_quant and do manual query for history_ids when splitting quants to avoid unnecessary full table scan on stock_move
[IMP] Improve indexes [IMP] history_ids opti [IMP] Clean and document [IMP] Clean
This commit is contained in:
parent
d42af010ce
commit
30b5285c9d
|
@ -320,6 +320,11 @@ class stock_quant(osv.osv):
|
|||
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.quant', context=c),
|
||||
}
|
||||
|
||||
def init(self, cr):
|
||||
cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('stock_quant_product_location_index',))
|
||||
if not cr.fetchone():
|
||||
cr.execute('CREATE INDEX stock_quant_product_location_index ON stock_quant (product_id, location_id, company_id, qty, in_date, reservation_id)')
|
||||
|
||||
def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True):
|
||||
''' Overwrite the read_group in order to sum the function field 'inventory_value' in group by'''
|
||||
res = super(stock_quant, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby, lazy=lazy)
|
||||
|
@ -530,7 +535,10 @@ class stock_quant(osv.osv):
|
|||
return False
|
||||
qty_round = float_round(qty, precision_rounding=rounding)
|
||||
new_qty_round = float_round(quant.qty - qty, precision_rounding=rounding)
|
||||
new_quant = self.copy(cr, SUPERUSER_ID, quant.id, default={'qty': new_qty_round, 'history_ids': [(4, x.id) for x in quant.history_ids]}, context=context)
|
||||
# Fetch the history_ids manually as it will not do a join with the stock moves then (=> a lot faster)
|
||||
cr.execute("""SELECT move_id FROM stock_quant_move_rel WHERE quant_id = %s""", (quant.id,))
|
||||
res = cr.fetchall()
|
||||
new_quant = self.copy(cr, SUPERUSER_ID, quant.id, default={'qty': new_qty_round, 'history_ids': [(4, x[0]) for x in res]}, context=context)
|
||||
self.write(cr, SUPERUSER_ID, quant.id, {'qty': qty_round}, context=context)
|
||||
return self.browse(cr, uid, new_quant, context=context)
|
||||
|
||||
|
@ -1838,6 +1846,10 @@ class stock_move(osv.osv):
|
|||
'You try to move a product using a UoM that is not compatible with the UoM of the product moved. Please use an UoM in the same UoM category.',
|
||||
['product_uom']),
|
||||
]
|
||||
def init(self, cr):
|
||||
cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = %s', ('stock_move_product_location_index',))
|
||||
if not cr.fetchone():
|
||||
cr.execute('CREATE INDEX stock_move_product_location_index ON stock_move (product_id, location_id, location_dest_id, company_id, state)')
|
||||
|
||||
@api.cr_uid_ids_context
|
||||
def do_unreserve(self, cr, uid, move_ids, context=None):
|
||||
|
|
Loading…
Reference in New Issue