Reviewers: ,


Please review this at http://codereview.tryton.org/231004/

Affected files:
  M CHANGELOG
  M doc/index.rst
  M stock.py
  M tests/scenario_account_stock_continental.rst


Index: CHANGELOG
===================================================================
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,5 @@
+* Use cost price instead of unit price when cost method is "fixed"
+
 Version 2.2.0 - 2011-10-24
 * Bug fixes (see mercurial logs for details)

Index: doc/index.rst
===================================================================
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -23,9 +23,10 @@
 the type "Storage" and an the other has the type "Supplier", "Customer" or
 "Lost and Found".

-If the Stock Move has a "Supplier" Location as origin, then the Account
-Stock of the Product is debited and the Account Stock Supplier of the Product is
-credited. The amount is the Unit Price of the move.
+If the Stock Move has a "Supplier" Location as origin, then the Account Stock
+of the Product is debited and the Account Stock Supplier of the Product is
+credited. The amount is the Unit Price of the move or the Cost Price of the
+Product if it uses the "fixed" method.
 The account move is inverted if it is the destination.

If the Stock Move has a "Customer" Location as destination, then the Account
Index: stock.py
===================================================================
--- a/stock.py
+++ b/stock.py
@@ -22,7 +22,8 @@
         move_line = {
             'name': move.rec_name,
         }
-        if type_.endswith('supplier'):
+        if (type_.endswith('supplier')
+                and move.product.cost_price_method != 'fixed'):
             unit_price = move.unit_price
         else:
             unit_price = uom_obj.compute_price(move.product.default_uom,
Index: tests/scenario_account_stock_continental.rst
===================================================================
--- a/tests/scenario_account_stock_continental.rst
+++ b/tests/scenario_account_stock_continental.rst
@@ -148,6 +148,7 @@
     >>> product.salable = True
     >>> product.list_price = Decimal('10')
     >>> product.cost_price = Decimal('5')
+    >>> product.cost_price_method = 'fixed'
     >>> product.account_expense = expense
     >>> product.account_revenue = revenue
     >>> product.account_stock = stock
@@ -158,6 +159,9 @@
     >>> product.account_journal_stock_customer = stock_journal
     >>> product.account_journal_stock_lost_found = stock_journal
     >>> product.save()
+    >>> product_average = Product(Product.copy(product.id, config.context))
+    >>> product_average.cost_price_method = 'average'
+    >>> product_average.save()

 Create payment term::

@@ -168,7 +172,7 @@
     >>> payment_term.lines.append(payment_term_line)
     >>> payment_term.save()

-Purchase 5 products::
+Purchase 12 products::

     >>> Purchase = Model.get('purchase.purchase')
     >>> PurchaseLine = Model.get('purchase.line')
@@ -180,6 +184,12 @@
     >>> purchase.lines.append(purchase_line)
     >>> purchase_line.product = product
     >>> purchase_line.quantity = 5.0
+    >>> purchase_line.unit_price = Decimal(4)
+    >>> purchase_line = PurchaseLine()
+    >>> purchase.lines.append(purchase_line)
+    >>> purchase_line.product = product_average
+    >>> purchase_line.quantity = 7.0
+    >>> purchase_line.unit_price = Decimal(6)
     >>> purchase.save()
     >>> Purchase.workflow_trigger_validate(purchase.id, 'quotation',
     ...     config.context)
@@ -188,7 +198,7 @@
     >>> purchase.state
     u'confirmed'

-Receive 4 products::
+Receive 9 products::

     >>> ShipmentIn = Model.get('stock.shipment.in')
     >>> Move = Model.get('stock.move')
@@ -196,6 +206,9 @@
     >>> move = Move(purchase.moves[0].id)
     >>> shipment.incoming_moves.append(move)
     >>> move.quantity = 4.0
+    >>> move = Move(purchase.moves[1].id)
+    >>> shipment.incoming_moves.append(move)
+    >>> move.quantity = 5.0
     >>> shipment.save()
     >>> ShipmentIn.workflow_trigger_validate(shipment.id, 'received',
     ...     config.context)
@@ -205,11 +218,11 @@
     u'done'
     >>> stock_supplier.reload()
     >>> (stock_supplier.debit, stock_supplier.credit) == \
-    ... (Decimal('0.00'), Decimal('20.00'))
+    ... (Decimal('0.00'), Decimal('50.00'))
     True
     >>> stock.reload()
     >>> (stock.debit, stock.credit) == \
-    ... (Decimal('20.00'), Decimal('0.00'))
+    ... (Decimal('50.00'), Decimal('0.00'))
     True

 Open supplier invoice::
@@ -217,27 +230,24 @@
     >>> Invoice = Model.get('account.invoice')
     >>> purchase.reload()
     >>> invoice, = purchase.invoices
-    >>> invoice_line, = invoice.lines
+    >>> invoice_line = invoice.lines[0]
     >>> invoice_line.unit_price = Decimal('6')
+    >>> invoice_line = invoice.lines[1]
+    >>> invoice_line.unit_price = Decimal('4')
     >>> invoice.save()
>>> Invoice.workflow_trigger_validate(invoice.id, 'open', config.context)
     >>> invoice.state
     u'open'
     >>> payable.reload()
     >>> (payable.debit, payable.credit) == \
-    ... (Decimal('0.00'), Decimal('24.00'))
+    ... (Decimal('0.00'), Decimal('44.00'))
     True
     >>> expense.reload()
     >>> (expense.debit, expense.credit) == \
-    ... (Decimal('24.00'), Decimal('0.00'))
+    ... (Decimal('44.00'), Decimal('0.00'))
     True

-Update cost price of product::
-
-    >>> product.cost_price = Decimal('6')
-    >>> product.save()
-
-Sale 2 products::
+Sale 5 products::

     >>> Sale = Model.get('sale.sale')
     >>> SaleLine = Model.get('sale.line')
@@ -249,6 +259,10 @@
     >>> sale.lines.append(sale_line)
     >>> sale_line.product = product
     >>> sale_line.quantity = 2.0
+    >>> sale_line = SaleLine()
+    >>> sale.lines.append(sale_line)
+    >>> sale_line.product = product_average
+    >>> sale_line.quantity = 3.0
     >>> sale.save()
>>> Sale.workflow_trigger_validate(sale.id, 'quotation', config.context)
     >>> Sale.workflow_trigger_validate(sale.id, 'confirm', config.context)
@@ -256,7 +270,7 @@
     >>> sale.state
     u'processing'

-Send 2 products::
+Send 5 products::

     >>> ShipmentOut = Model.get('stock.shipment.out')
     >>> shipment, = sale.shipments
@@ -276,11 +290,11 @@
     u'done'
     >>> stock_customer.reload()
     >>> (stock_customer.debit, stock_customer.credit) == \
-    ... (Decimal('12.00'), Decimal('0.00'))
+    ... (Decimal('28.00'), Decimal('0.00'))
     True
     >>> stock.reload()
     >>> (stock.debit, stock.credit) == \
-    ... (Decimal('20.00'), Decimal('12.00'))
+    ... (Decimal('50.00'), Decimal('28.00'))
     True

 Open customer invoice::
@@ -292,11 +306,11 @@
     u'open'
     >>> receivable.reload()
     >>> (receivable.debit, receivable.credit) == \
-    ... (Decimal('20.00'), Decimal('0.00'))
+    ... (Decimal('50.00'), Decimal('0.00'))
     True
     >>> revenue.reload()
     >>> (revenue.debit, revenue.credit) == \
-    ... (Decimal('0.00'), Decimal('20.00'))
+    ... (Decimal('0.00'), Decimal('50.00'))
     True

 Create an Inventory::
@@ -310,7 +324,9 @@
     >>> inventory.location = storage
     >>> inventory.save()
     >>> Inventory.complete_lines(inventory.id, config.context)
-    >>> inventory_line, = inventory.lines
+    >>> inventory_line = inventory.lines[0]
+    >>> inventory_line.quantity = 1.0
+    >>> inventory_line = inventory.lines[1]
     >>> inventory_line.quantity = 1.0
     >>> inventory.save()
>>> Inventory.workflow_trigger_validate(inventory.id, 'done', config.context)
@@ -318,9 +334,9 @@
     u'done'
     >>> stock_lost_found.reload()
     >>> (stock_lost_found.debit, stock_lost_found.credit) == \
-    ... (Decimal('6.00'), Decimal('0.00'))
+    ... (Decimal('11.00'), Decimal('0.00'))
     True
     >>> stock.reload()
     >>> (stock.debit, stock.credit) == \
-    ... (Decimal('20.00'), Decimal('18.00'))
+    ... (Decimal('50.00'), Decimal('39.00'))
     True


--
[email protected] mailing list

Reply via email to