diff --git a/addons/stock_account/models/stock_move.py b/addons/stock_account/models/stock_move.py index 882d23c4bfb..32b71da0617 100644 --- a/addons/stock_account/models/stock_move.py +++ b/addons/stock_account/models/stock_move.py @@ -159,21 +159,7 @@ class StockMove(models.Model): :param forced_quantity: under some circunstances, the quantity to value is different than the initial demand of the move (Default value = None) """ - svl_vals_list = [] - for move in self: - move = move.with_company(move.company_id) - valued_move_lines = move._get_in_move_lines() - valued_quantity = 0 - for valued_move_line in valued_move_lines: - valued_quantity += valued_move_line.product_uom_id._compute_quantity(valued_move_line.qty_done, move.product_id.uom_id) - unit_cost = abs(move._get_price_unit()) # May be negative (i.e. decrease an out move). - if move.product_id.cost_method == 'standard': - unit_cost = move.product_id.standard_price - svl_vals = move.product_id._prepare_in_svl_vals(forced_quantity or valued_quantity, unit_cost) - svl_vals.update(move._prepare_common_svl_vals()) - if forced_quantity: - svl_vals['description'] = 'Correction of %s (modification of past move)' % move.picking_id.name or move.name - svl_vals_list.append(svl_vals) + svl_vals_list = self._get_in_svl_vals(forced_quantity) return self.env['stock.valuation.layer'].sudo().create(svl_vals_list) def _create_out_svl(self, forced_quantity=None): @@ -366,6 +352,24 @@ class StockMove(models.Model): journal_id = accounts_data['stock_journal'].id return journal_id, acc_src, acc_dest, acc_valuation + def _get_in_svl_vals(self, forced_quantity): + svl_vals_list = [] + for move in self: + move = move.with_company(move.company_id) + valued_move_lines = move._get_in_move_lines() + valued_quantity = 0 + for valued_move_line in valued_move_lines: + valued_quantity += valued_move_line.product_uom_id._compute_quantity(valued_move_line.qty_done, move.product_id.uom_id) + unit_cost = abs(move._get_price_unit()) # May be negative (i.e. decrease an out move). + if move.product_id.cost_method == 'standard': + unit_cost = move.product_id.standard_price + svl_vals = move.product_id._prepare_in_svl_vals(forced_quantity or valued_quantity, unit_cost) + svl_vals.update(move._prepare_common_svl_vals()) + if forced_quantity: + svl_vals['description'] = 'Correction of %s (modification of past move)' % move.picking_id.name or move.name + svl_vals_list.append(svl_vals) + return svl_vals_list + def _get_src_account(self, accounts_data): return self.location_id.valuation_out_account_id.id or accounts_data['stock_input'].id