diff --git a/__init__.py b/__init__.py index 72ffb34..0508d27 100644 --- a/__init__.py +++ b/__init__.py @@ -9,3 +9,6 @@ def register(): Pool.register( NutritionProgram, module='nutrition_program', type_='model') + Pool.register( + OpenBOM, + module='nutrition_program', type_='wizard') diff --git a/nutrition_program.py b/nutrition_program.py index 407eea8..d413631 100644 --- a/nutrition_program.py +++ b/nutrition_program.py @@ -1,9 +1,12 @@ #The COPYRIGHT file at the top level of this repository contains the full #copyright notices and license terms. from trytond.model import ModelView, ModelSQL, fields -from trytond.pyson import Eval +from trytond.pool import Pool +from trytond.pyson import Eval, PYSONEncoder +from trytond.wizard import Wizard, StateAction +from trytond.transaction import Transaction -__all__ = ['NutritionProgram'] +__all__ = ['NutritionProgram', 'OpenBOM'] class NutritionProgram(ModelSQL, ModelView): @@ -13,12 +16,40 @@ class NutritionProgram(ModelSQL, ModelView): start_weight = fields.Float('Start Weight') end_weight = fields.Float('End Weight') product = fields.Many2One('product.product', 'Product', required=True) - bom = fields.Many2One('production.bom', 'BOM', + bom = fields.Function(fields.Many2One('production.bom', 'BOM', domain=[ ('output_products', '=', Eval('product', 0)), ], - depends=['product']) + depends=['product']), 'get_bom') + + def get_bom(self, name): + if self.product and self.product.boms: + return self.product.boms[0].bom.id def get_rec_name(self, name=None): return ' %s ( %s - %s) ' % (self.product.rec_name, self.start_weight or '', self.end_weight or '') + + +class OpenBOM(Wizard): + 'Open BOM' + __name__ = 'nutrition.program.open.bom' + start_state = 'open_' + open_ = StateAction('production.act_bom_list') + + def do_open_(self, action): + pool = Pool() + NutritionProgram = pool.get('nutrition.program') + + program = NutritionProgram(Transaction().context.get('active_id')) + + bom_ids = [] + if program.product.boms: + bom_ids = [bom.bom.id for bom in program.product.boms] + action['pyson_domain'] = PYSONEncoder().encode( + [('id', 'in', bom_ids)]) + + return action, {} + + def transition_open_(self): + return 'end' diff --git a/nutrition_program.xml b/nutrition_program.xml index 689a4fc..fe2abe3 100644 --- a/nutrition_program.xml +++ b/nutrition_program.xml @@ -70,5 +70,16 @@ + + BOMs + nutrition.program.open.bom + + + form_relate + nutrition.program,-1 + + +