116 lines
3.1 KiB
ReStructuredText
116 lines
3.1 KiB
ReStructuredText
==============================
|
|
Stock Product Replace Scenario
|
|
==============================
|
|
|
|
Imports::
|
|
|
|
>>> from decimal import Decimal
|
|
|
|
>>> from proteus import Model, Wizard
|
|
>>> from trytond.modules.company.tests.tools import create_company, get_company
|
|
>>> from trytond.tests.tools import (
|
|
... activate_modules, assertEqual, assertFalse, assertTrue)
|
|
|
|
Activate modules::
|
|
|
|
>>> config = activate_modules('stock')
|
|
|
|
>>> Cron = Model.get('ir.cron')
|
|
>>> Location = Model.get('stock.location')
|
|
>>> Move = Model.get('stock.move')
|
|
>>> ProductTemplate = Model.get('product.template')
|
|
>>> UoM = Model.get('product.uom')
|
|
|
|
Create company::
|
|
|
|
>>> _ = create_company()
|
|
>>> company = get_company()
|
|
|
|
Get stock locations::
|
|
|
|
>>> supplier_loc, = Location.find([('code', '=', "SUP")])
|
|
>>> storage_loc, = Location.find([('code', '=', "STO")])
|
|
>>> customer_loc, = Location.find([('code', '=', "CUS")])
|
|
|
|
Create a product::
|
|
|
|
>>> unit, = UoM.find([('name', '=', "Unit")])
|
|
|
|
>>> template = ProductTemplate()
|
|
>>> template.name = "Product"
|
|
>>> template.type = 'goods'
|
|
>>> template.default_uom = unit
|
|
>>> template.save()
|
|
>>> product1, = template.products
|
|
|
|
Create a second product::
|
|
|
|
>>> template = ProductTemplate()
|
|
>>> template.name = "Product"
|
|
>>> template.type = 'goods'
|
|
>>> template.default_uom = unit
|
|
>>> template.save()
|
|
>>> product2, = template.products
|
|
|
|
Fill storage location::
|
|
|
|
>>> move = Move(product=product1)
|
|
>>> move.quantity = 1
|
|
>>> move.from_location = supplier_loc
|
|
>>> move.to_location = storage_loc
|
|
>>> move.unit_price = Decimal('10.0000')
|
|
>>> move.currency = company.currency
|
|
>>> move.click('do')
|
|
>>> move.state
|
|
'done'
|
|
|
|
Replace the product::
|
|
|
|
>>> replace = Wizard('product.product.replace', models=[product1])
|
|
>>> replace.form.destination = product2
|
|
>>> replace.execute('replace')
|
|
>>> assertEqual(product1.replaced_by, product2)
|
|
>>> assertTrue(product1.active)
|
|
|
|
Create a draft move::
|
|
|
|
>>> move = Move(product=product1)
|
|
>>> move.quantity = 1
|
|
>>> move.from_location = storage_loc
|
|
>>> move.to_location = customer_loc
|
|
>>> move.unit_price = Decimal('20.0000')
|
|
>>> move.currency = company.currency
|
|
>>> move.save()
|
|
>>> move.state
|
|
'draft'
|
|
|
|
Empty storage location::
|
|
|
|
>>> move = Move(product=product1)
|
|
>>> move.quantity = 1
|
|
>>> move.from_location = storage_loc
|
|
>>> move.to_location = customer_loc
|
|
>>> move.unit_price = Decimal('20.0000')
|
|
>>> move.currency = company.currency
|
|
>>> move.click('do')
|
|
>>> move.state
|
|
'done'
|
|
|
|
Check replaced product is deactivated and draft move is deleted::
|
|
|
|
>>> product1.reload()
|
|
>>> assertFalse(product1.active)
|
|
>>> Move.find([('state', '=', 'draft')])
|
|
[]
|
|
|
|
Create a move for replaced product change the product::
|
|
|
|
>>> move = Move(product=product1)
|
|
>>> move.quantity = 1
|
|
>>> move.from_location = storage_loc
|
|
>>> move.to_location = customer_loc
|
|
>>> move.unit_price = Decimal('20.0000')
|
|
>>> move.currency = company.currency
|
|
>>> move.save()
|
|
>>> assertEqual(move.product, product2)
|