diff --git a/stock.py b/stock.py index 978feee6ad..72eab2f0a2 100644 --- a/stock.py +++ b/stock.py @@ -28,41 +28,34 @@ class Move(ModelSQL, ModelView): lines = super(Move, self)._get_account_stock_move_lines(move, type_) if (type_.endswith('supplier') and move.product.cost_price_method == 'fixed'): - move_line = { - 'name': move.rec_name, - } cost_price = uom_obj.compute_price(move.product.default_uom, move.cost_price, move.uom) amount = currency_obj.round(move.company.currency, Decimal(str(move.quantity)) * (move.unit_price - cost_price)) if currency_obj.is_zero(move.company.currency, amount): return lines + account_id = move.product.account_stock_supplier_used.id + for move_line in lines: + if move_line['account'] == account_id: + break + else: + return lines if type_.startswith('in_'): - if amount > Decimal(0): - move_line['debit'] = Decimal(0) - move_line['credit'] = amount - else: - move_line['debit'] = -amount - move_line['credit'] = Decimal(0) - account_type = type_[3:] + move_line['credit'] += amount + debit = amount + credit = Decimal(0) else: - if amount > Decimal(0): - move_line['debit'] = amount - move_line['credit'] = Decimal(0) - else: - move_line['debit'] = Decimal(0) - move_line['credit'] = -amount - account_type = type_[4:] - move_line['account'] = getattr(move.product, - 'account_stock_%s_used' % account_type).id - lines.append(move_line) - move_line = move_line.copy() - move_line['debit'], move_line['credit'] = \ - move_line['credit'], move_line['debit'] - if account_type == 'supplier': - move_line['account'] = move.product.account_expense_used.id - else: - move_line['account'] = move.product.account_revenue_used.id + move_line['debit'] += amount + debit = Decimal(0) + credit = amount + if amount < Decimal(0): + debit, credit = -credit, -debit + move_line = { + 'name': move.rec_name, + 'debit': debit, + 'credit': credit, + 'account': move.product.account_expense_used.id, + } lines.append(move_line) return lines diff --git a/tests/scenario_account_stock_anglo_saxon.rst b/tests/scenario_account_stock_anglo_saxon.rst index 41ae661e6f..bbfdb18ae7 100644 --- a/tests/scenario_account_stock_anglo_saxon.rst +++ b/tests/scenario_account_stock_anglo_saxon.rst @@ -223,8 +223,9 @@ Receive 9 products:: >>> shipment.state u'done' >>> stock_supplier.reload() + >>> stock.reload() >>> (stock_supplier.debit, stock_supplier.credit) == \ - ... (Decimal('4.00'), Decimal('50.00')) + ... (Decimal('0.00'), Decimal('46.00')) True >>> stock.reload() >>> (stock.debit, stock.credit) == \ @@ -258,7 +259,7 @@ Open supplier invoice:: True >>> stock_supplier.reload() >>> (stock_supplier.debit, stock_supplier.credit) == \ - ... (Decimal('50.00'), Decimal('50.00')) + ... (Decimal('46.00'), Decimal('46.00')) True Sale 5 products::