Adapt to Tryton 5.2

This commit is contained in:
Albert Cervera i Areny 2019-06-15 01:54:39 +02:00
parent f1626d756a
commit 2b36540c25
9 changed files with 128 additions and 202 deletions

View File

@ -2,16 +2,16 @@
# copyright notices and license terms. # copyright notices and license terms.
from trytond.pool import Pool from trytond.pool import Pool
from .nutrition_program import * from . import nutrition_program
def register(): def register():
Pool.register( Pool.register(
Animal, nutrition_program.Animal,
AnimalGroup, nutrition_program.AnimalGroup,
NutritionProgram, nutrition_program.NutritionProgram,
Specie, nutrition_program.Specie,
module='farm_nutrition_program', type_='model') module='farm_nutrition_program', type_='model')
Pool.register( Pool.register(
OpenBOM, nutrition_program.OpenBOM,
module='farm_nutrition_program', type_='wizard') module='farm_nutrition_program', type_='wizard')

View File

@ -7,7 +7,6 @@ from trytond.transaction import Transaction
from trytond.wizard import Wizard, StateAction from trytond.wizard import Wizard, StateAction
__all__ = ['NutritionProgram', 'Animal', 'AnimalGroup', 'OpenBOM', 'Specie'] __all__ = ['NutritionProgram', 'Animal', 'AnimalGroup', 'OpenBOM', 'Specie']
__metaclass__ = PoolMeta
class NutritionProgram(ModelSQL, ModelView): class NutritionProgram(ModelSQL, ModelView):
@ -15,7 +14,9 @@ class NutritionProgram(ModelSQL, ModelView):
__name__ = 'farm.nutrition.program' __name__ = 'farm.nutrition.program'
specie = fields.Many2One('farm.specie', 'Specie', required=True, specie = fields.Many2One('farm.specie', 'Specie', required=True,
readonly=True, select=True) select=True, states={
'readonly': True,
})
animal_type = fields.Selection([ animal_type = fields.Selection([
('male', 'Male'), ('male', 'Male'),
('female', 'Female'), ('female', 'Female'),
@ -58,7 +59,7 @@ def _get_nutrition_program(animal):
return programs[0].id return programs[0].id
class Animal: class Animal(metaclass=PoolMeta):
__name__ = 'farm.animal' __name__ = 'farm.animal'
nutrition_program = fields.Function( nutrition_program = fields.Function(
@ -69,7 +70,7 @@ class Animal:
return _get_nutrition_program(self) return _get_nutrition_program(self)
class AnimalGroup: class AnimalGroup(metaclass=PoolMeta):
__name__ = 'farm.animal.group' __name__ = 'farm.animal.group'
nutrition_program = fields.Function( nutrition_program = fields.Function(
@ -104,7 +105,7 @@ class OpenBOM(Wizard):
return 'end' return 'end'
class Specie: class Specie(metaclass=PoolMeta):
__name__ = 'farm.specie' __name__ = 'farm.specie'
def _create_additional_menus(self, specie_menu, specie_submenu_seq, def _create_additional_menus(self, specie_menu, specie_submenu_seq,

View File

@ -4,7 +4,7 @@
from setuptools import setup from setuptools import setup
import re import re
import os import os
import ConfigParser import configparser
MODULE = 'farm_nutrition_program' MODULE = 'farm_nutrition_program'
PREFIX = 'nantic' PREFIX = 'nantic'
@ -14,7 +14,7 @@ MODULE2PREFIX = {}
def read(fname): def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read() return open(os.path.join(os.path.dirname(__file__), fname)).read()
config = ConfigParser.ConfigParser() config = configparser.ConfigParser()
config.readfp(open('tryton.cfg')) config.readfp(open('tryton.cfg'))
info = dict(config.items('tryton')) info = dict(config.items('tryton'))
for key in ('depends', 'extras_depend', 'xml'): for key in ('depends', 'extras_depend', 'xml'):

View File

@ -2,204 +2,129 @@
Nutrition Program Scenario Nutrition Program Scenario
========================== ==========================
=============
General Setup
=============
Imports:: Imports::
>>> import datetime >>> import datetime
>>> from dateutil.relativedelta import relativedelta >>> from dateutil.relativedelta import relativedelta
>>> from decimal import Decimal >>> from decimal import Decimal
>>> from proteus import config, Model, Wizard >>> from proteus import Model, Wizard
>>> from trytond.tests.tools import activate_modules
>>> from trytond.modules.company.tests.tools import create_company, \ >>> from trytond.modules.company.tests.tools import create_company, \
... get_company ... get_company
>>> from trytond.modules.account.tests.tools import create_fiscalyear, \
... create_chart, get_accounts
>>> from trytond.modules.farm.tests.tools import create_specie, \
... create_users, create_feed_product
>>> now = datetime.datetime.now() >>> now = datetime.datetime.now()
>>> yesterday = datetime.datetime.now() - relativedelta(days=1) >>> yesterday = datetime.datetime.now() - relativedelta(days=1)
>>> today = datetime.date.today() >>> today = datetime.date.today()
Create database:: Install module::
>>> config = config.set_trytond() >>> config = activate_modules('farm_nutrition_program')
>>> config.pool.test = True
Install farm::
>>> Module = Model.get('ir.module')
>>> modules = Module.find([
... ('name', '=', 'farm_nutrition_program'),
... ])
>>> Module.install([x.id for x in modules], config.context)
>>> Wizard('ir.module.install_upgrade').execute('upgrade')
Create company:: Create company::
>>> _ = create_company() >>> _ = create_company()
>>> company = get_company() >>> company = get_company()
>>> party = company.party
Reload the context::
>>> User = Model.get('res.user')
>>> config._context = User.get_preferences(True, config.context)
Create products::
>>> ProductUom = Model.get('product.uom')
>>> kg, = ProductUom.find([('name', '=', 'Kilogram')])
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
>>> ProductTemplate = Model.get('product.template')
>>> Product = Model.get('product.product')
>>> individual_template = ProductTemplate(
... name='Male Pig',
... default_uom=unit,
... type='goods',
... list_price=Decimal('40'),
... cost_price=Decimal('25'))
>>> individual_template.save()
>>> individual_product = Product(template=individual_template)
>>> individual_product.save()
>>> group_template = ProductTemplate(
... name='Group of Pig',
... default_uom=unit,
... type='goods',
... list_price=Decimal('30'),
... cost_price=Decimal('20'))
>>> group_template.save()
>>> group_product = Product(template=group_template)
>>> group_product.save()
>>> feed_template = ProductTemplate(
... name='Feed',
... default_uom=kg,
... type='goods',
... list_price=Decimal('40'),
... cost_price=Decimal('25'))
>>> feed_template.save()
>>> feed_product = Product(template=feed_template)
>>> feed_product.save()
>>> feed_product.reload()
Create sequence::
>>> Sequence = Model.get('ir.sequence')
>>> event_order_sequence = Sequence(
... name='Event Order Pig Warehouse 1',
... code='farm.event.order',
... padding=4)
>>> event_order_sequence.save()
>>> individual_sequence = Sequence(
... name='Individual Pig Warehouse 1',
... code='farm.animal',
... padding=4)
>>> individual_sequence.save()
>>> group_sequence = Sequence(
... name='Groups Pig Warehouse 1',
... code='farm.animal.group',
... padding=4)
>>> group_sequence.save()
Create specie:: Create specie::
>>> specie, breed, products = create_specie('Pig')
>>> individual_product = products['individual']
>>> group_product = products['group']
>>> female_product = products['female']
>>> male_product = products['male']
>>> semen_product = products['semen']
Create farm users::
>>> users = create_users(company)
>>> individual_user = users['individual']
>>> group_user = users['group']
>>> female_user = users['female']
>>> male_user = users['male']
Get locations::
>>> Location = Model.get('stock.location') >>> Location = Model.get('stock.location')
>>> lost_found_location, = Location.find([('type', '=', 'lost_found')]) >>> lost_found_location, = Location.find([('type', '=', 'lost_found')])
>>> warehouse, = Location.find([('type', '=', 'warehouse')]) >>> warehouse, = Location.find([('type', '=', 'warehouse')])
>>> Specie = Model.get('farm.specie') >>> production_location, = Location.find([('type', '=', 'production')])
>>> SpecieBreed = Model.get('farm.specie.breed')
>>> SpecieFarmLine = Model.get('farm.specie.farm_line') Create feed product::
>>> pigs_specie = Specie(
... name='Pigs', >>> feed_product = create_feed_product('Feed', 40, 25)
... male_enabled=False,
... female_enabled=False,
... individual_enabled=True,
... individual_product=individual_product,
... group_enabled=True,
... group_product=group_product,
... removed_location=lost_found_location,
... foster_location=lost_found_location,
... lost_found_location=lost_found_location,
... feed_lost_found_location=lost_found_location)
>>> pigs_specie.save()
>>> pigs_breed = SpecieBreed(
... specie=pigs_specie,
... name='Holland')
>>> pigs_breed.save()
>>> pigs_farm_line = SpecieFarmLine(
... specie=pigs_specie,
... farm=warehouse,
... event_order_sequence=event_order_sequence,
... has_individual=True,
... individual_sequence=individual_sequence,
... has_group=True,
... group_sequence=group_sequence)
>>> pigs_farm_line.save()
Create farm locations:: Create farm locations::
>>> location1_id, location2_id = Location.create([{ >>> Location = Model.get('stock.location')
... 'name': 'Location 1', >>> location1 = Location()
... 'code': 'L1', >>> location1.name = 'Location 1'
... 'type': 'storage', >>> location1.code = 'L1'
... 'parent': warehouse.storage_location.id, >>> location1.type = 'storage'
... }, { >>> location1.parent = warehouse.storage_location
... 'name': 'Location 2', >>> location1.save()
... 'code': 'L2', >>> location2 = Location()
... 'type': 'storage', >>> location2.name = 'Location 2'
... 'parent': warehouse.storage_location.id, >>> location2.code = 'L2'
... }], config.context) >>> location2.type = 'storage'
>>> silo = Location( >>> location2.parent = warehouse.storage_location
... name='Silo', >>> location2.save()
... code='S', >>> silo = Location()
... type='storage', >>> silo.name = 'Silo'
... parent=warehouse.storage_location, >>> silo.code = 'S'
... silo=True, >>> silo.type = 'storage'
... locations_to_fed=[location1_id, location2_id]) >>> silo.parent = warehouse.storage_location
>>> silo.silo = True
>>> silo.locations_to_fed.append(location1)
>>> silo.locations_to_fed.append(location2)
>>> silo.save() >>> silo.save()
Put 500 Kg of feed into silo location:: Put 500 Kg of feed into silo location::
>>> Move = Model.get('stock.move') >>> Move = Model.get('stock.move')
>>> provisioning_moves = Move.create([{ >>> provisioning_move = Move()
... 'product': feed_product.id, >>> provisioning_move.product = feed_product
... 'uom': kg.id, >>> provisioning_move.uom = feed_product.default_uom
... 'quantity': 500.0, >>> provisioning_move.quantity = 500.0
... 'from_location': party.supplier_location.id, >>> provisioning_move.from_location = company.party.supplier_location
... 'to_location': silo.id, >>> provisioning_move.to_location = silo
... 'planned_date': (now - relativedelta(days=10)).date(), >>> provisioning_move.planned_date = (now - relativedelta(days=10)).date()
... 'effective_date': (now - relativedelta(days=10)).date(), >>> provisioning_move.effective_date = (now - relativedelta(days=10)).date()
... 'company': config.context.get('company'), >>> provisioning_move.company = company
... 'unit_price': feed_product.template.list_price, >>> provisioning_move.unit_price = feed_product.template.list_price
... }], >>> provisioning_move.save()
... config.context) >>> provisioning_move.click('assign')
>>> Move.assign(provisioning_moves, config.context) >>> provisioning_move.click('do')
>>> Move.do(provisioning_moves, config.context)
Create individual:: Create individual::
>>> Animal = Model.get('farm.animal') >>> Animal = Model.get('farm.animal')
>>> individual = Animal( >>> individual = Animal()
... type='individual', >>> individual.type = 'individual'
... specie=pigs_specie, >>> individual.specie = specie
... breed=pigs_breed, >>> individual.breed = breed
... number='0001', >>> individual.number = '0001'
... initial_location=location1_id, >>> individual.initial_location = location1
... arrival_date=(now - relativedelta(days=5)).date()) >>> individual.arrival_date = (now - relativedelta(days=5)).date()
>>> individual.save() >>> individual.save()
>>> individual.location.code >>> individual.location.code
u'L1' 'L1'
>>> individual.farm.code >>> individual.farm.code
u'WH' 'WH'
>>> individual.nutrition_program == None >>> individual.nutrition_program == None
True True
Create nutrition program:: Create nutrition program::
>>> NutritionProgram = Model.get('farm.nutrition.program') >>> NutritionProgram = Model.get('farm.nutrition.program')
>>> nutrition_program = NutritionProgram( >>> nutrition_program = NutritionProgram()
... specie=pigs_specie, >>> nutrition_program.specie = specie
... animal_type='individual', >>> nutrition_program.animal_type = 'individual'
... min_consumed_feed=2.0, >>> nutrition_program.min_consumed_feed = 2.0
... max_consumed_feed=10.0, >>> nutrition_program.max_consumed_feed = 10.0
... product=feed_product) >>> nutrition_program.product = feed_product
>>> nutrition_program.save() >>> nutrition_program.save()
>>> individual.nutrition_program == None >>> individual.nutrition_program == None
True True
@ -207,20 +132,20 @@ Create nutrition program::
Feed the animal:: Feed the animal::
>>> FeedEvent = Model.get('farm.feed.event') >>> FeedEvent = Model.get('farm.feed.event')
>>> feed_event1 = FeedEvent( >>> feed_event1 = FeedEvent()
... animal_type='individual', >>> feed_event1.animal_type = 'individual'
... specie=pigs_specie, >>> feed_event1.specie = specie
... farm=warehouse, >>> feed_event1.farm = warehouse
... animal=individual, >>> feed_event1.animal = individual
... timestamp=yesterday, >>> feed_event1.timestamp = yesterday
... location=individual.location, >>> feed_event1.location = individual.location
... feed_location=silo, >>> feed_event1.feed_location = silo
... feed_product=feed_product, >>> feed_event1.feed_product = feed_product
... uom=kg, >>> feed_event1.uom = feed_product.default_uom
... feed_quantity=Decimal('6.0')) >>> feed_event1.feed_quantity = Decimal('6.0')
>>> feed_event1.feed_product = feed_product >>> feed_event1.feed_product = feed_product
>>> feed_event1.save() >>> feed_event1.save()
>>> FeedEvent.validate_event([feed_event1.id], config.context) >>> feed_event1.click('validate_event')
>>> individual.reload() >>> individual.reload()
>>> individual.consumed_feed.quantize(Decimal('0.1')) >>> individual.consumed_feed.quantize(Decimal('0.1'))
Decimal('6.0') Decimal('6.0')
@ -229,35 +154,35 @@ Feed the animal::
Create another nutrition program:: Create another nutrition program::
>>> nutrition_program2 = NutritionProgram( >>> nutrition_program2 = NutritionProgram()
... specie=pigs_specie, >>> nutrition_program2.specie = specie
... animal_type='individual', >>> nutrition_program2.animal_type = 'individual'
... min_consumed_feed=10.0, >>> nutrition_program2.min_consumed_feed = 10.0
... max_consumed_feed=50.0, >>> nutrition_program2.max_consumed_feed = 50.0
... product=feed_product) >>> nutrition_program2.product = feed_product
>>> nutrition_program2.save() >>> nutrition_program2.save()
>>> individual.nutrition_program == nutrition_program >>> individual.nutrition_program == nutrition_program
True True
Feed the animal:: Feed the animal::
>>> feed_event2 = FeedEvent( >>> feed_event2 = FeedEvent()
... animal_type='individual', >>> feed_event2.animal_type = 'individual'
... specie=pigs_specie, >>> feed_event2.specie = specie
... farm=warehouse, >>> feed_event2.farm = warehouse
... animal=individual, >>> feed_event2.animal = individual
... timestamp=(yesterday + relativedelta(days=5)), >>> feed_event2.timestamp = now
... start_date=yesterday.date(), >>> feed_event2.start_date = yesterday.date()
... location=individual.location, >>> feed_event2.location = individual.location
... feed_location=silo, >>> feed_event2.feed_location = silo
... feed_product=feed_product, >>> feed_event2.feed_product = feed_product
... uom=kg, >>> feed_event2.uom = feed_product.default_uom
... feed_quantity=Decimal('25.0')) >>> feed_event2.feed_quantity = Decimal('25.0')
>>> feed_event2.feed_product = feed_product >>> feed_event2.feed_product = feed_product
>>> feed_event2.save() >>> feed_event2.save()
>>> FeedEvent.validate_event([feed_event2.id], config.context) >>> feed_event2.click('validate_event')
>>> individual.reload() >>> individual.reload()
>>> individual.consumed_feed.quantize(Decimal('0.1')) >>> individual.consumed_feed.quantize(Decimal('0.1'))
Decimal('11.0') Decimal('31.0')
>>> individual.nutrition_program == nutrition_program2 >>> individual.nutrition_program == nutrition_program2
True True

View File

@ -1,5 +1,5 @@
[tryton] [tryton]
version=4.1.0 version=5.2.0
depends: depends:
farm farm
xml: xml:

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- The COPYRIGHT file at the top level of this repository contains the full <!-- The COPYRIGHT file at the top level of this repository contains the full
copyright notices and license terms. --> copyright notices and license terms. -->
<form string="Nutrition Program" col="4"> <form>
<label name="animal_type"/> <label name="animal_type"/>
<field name="animal_type"/> <field name="animal_type"/>
<newline/> <newline/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- The COPYRIGHT file at the top level of this repository contains the full <!-- The COPYRIGHT file at the top level of this repository contains the full
copyright notices and license terms. --> copyright notices and license terms. -->
<tree string="Nutrition Programs"> <tree>
<field name="product"/> <field name="product"/>
<field name="animal_type"/> <field name="animal_type"/>
<field name="min_consumed_feed"/> <field name="min_consumed_feed"/>