112 lines
3.2 KiB
ReStructuredText
112 lines
3.2 KiB
ReStructuredText
==============================
|
|
Stock Inventory Count Scenario
|
|
==============================
|
|
|
|
Imports::
|
|
|
|
>>> from decimal import Decimal
|
|
|
|
>>> from proteus import Model
|
|
>>> from trytond.modules.company.tests.tools import create_company
|
|
>>> from trytond.tests.tools import activate_modules
|
|
|
|
Activate modules::
|
|
|
|
>>> config = activate_modules('stock', create_company)
|
|
|
|
Get stock locations::
|
|
|
|
>>> Location = Model.get('stock.location')
|
|
>>> supplier_loc, = Location.find([('code', '=', 'SUP')])
|
|
>>> storage_loc, = Location.find([('code', '=', 'STO')])
|
|
>>> customer_loc, = Location.find([('code', '=', 'CUS')])
|
|
|
|
Create products::
|
|
|
|
>>> ProductUom = Model.get('product.uom')
|
|
>>> ProductTemplate = Model.get('product.template')
|
|
|
|
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
|
|
>>> template = ProductTemplate()
|
|
>>> template.name = 'Product'
|
|
>>> template.default_uom = unit
|
|
>>> template.type = 'goods'
|
|
>>> template.list_price = Decimal('300')
|
|
>>> template.cost_price_method = 'average'
|
|
>>> product, = template.products
|
|
>>> product.cost_price = Decimal('80')
|
|
>>> template.save()
|
|
>>> product, = template.products
|
|
|
|
>>> kg, = ProductUom.find([('name', '=', 'Kilogram')])
|
|
>>> template2 = ProductTemplate()
|
|
>>> template2.name = 'Product'
|
|
>>> template2.default_uom = kg
|
|
>>> template2.type = 'goods'
|
|
>>> template2.list_price = Decimal('140')
|
|
>>> template2.cost_price_method = 'average'
|
|
>>> product2, = template2.products
|
|
>>> product2.cost_price = Decimal('60')
|
|
>>> template2.save()
|
|
>>> product2, = template2.products
|
|
|
|
Create an inventory::
|
|
|
|
>>> Inventory = Model.get('stock.inventory')
|
|
>>> inventory = Inventory()
|
|
>>> inventory.location = storage_loc
|
|
>>> inventory.empty_quantity = 'keep'
|
|
>>> inventory.save()
|
|
|
|
Count inventory::
|
|
|
|
>>> count = inventory.click('do_count')
|
|
|
|
>>> count.form.search = product
|
|
|
|
>>> count.execute('quantity')
|
|
Traceback (most recent call last):
|
|
...
|
|
InventoryCountWarning: ...
|
|
|
|
>>> Model.get('res.user.warning')(user=config.user,
|
|
... name='stock.inventory,%s.product.product,%s.count_create' % (
|
|
... inventory.id, product.id)).save()
|
|
>>> count.execute('quantity')
|
|
>>> count.form.quantity
|
|
1.0
|
|
>>> count.form.total_quantity
|
|
1.0
|
|
>>> count.execute('add')
|
|
|
|
>>> count.form.search = product
|
|
>>> count.execute('quantity')
|
|
>>> count.form.total_quantity
|
|
2.0
|
|
>>> count.execute('add')
|
|
|
|
>>> count.form.search = product2
|
|
>>> Model.get('res.user.warning')(user=config.user,
|
|
... name='stock.inventory,%s.product.product,%s.count_create' % (
|
|
... inventory.id, product2.id)).save()
|
|
>>> count.execute('quantity')
|
|
>>> count.form.quantity
|
|
>>> count.form.total_quantity
|
|
>>> count.form.quantity = 10
|
|
>>> count.form.total_quantity
|
|
10.0
|
|
>>> count.execute('add')
|
|
|
|
>>> count.execute('end')
|
|
|
|
Check inventory::
|
|
|
|
>>> len(inventory.lines)
|
|
2
|
|
>>> line1, = [l for l in inventory.lines if l.product == product]
|
|
>>> line1.quantity
|
|
2.0
|
|
>>> line2, = [l for l in inventory.lines if l.product == product2]
|
|
>>> line2.quantity
|
|
10.0
|