天天看点

odoo10(基于python2)使用向导的完整用法

首先是views的xml

<?xml version="1.0"?>
<openerp>
    <data>
        <record id="finance_period_tree" model="ir.ui.view">
            <field name="name">finance.period.tree</field>
            <field name="model">finance.period</field>
            <field name="arch" type="xml">
                <tree editable="TOP" string="会计期间"> <!-- delete='false'这个是控制删除按钮的-->
                    <field name="name"/>
                    <field name="year" attrs="{'readonly': [('is_closed','=',True)]}"/>
                    <field name="month" attrs="{'readonly': [('is_closed','=',True)]}"/>
                    <field name="is_closed" /><!--readonly='1' 用来控制只读-->
                </tree>
            </field>
        </record>

        <record id="create_finance_period_wizard_form" model="ir.ui.view">
            <field name="name">create.finance.period.wizard.form</field>
            <field name="model">create.finance.period.wizard</field>
            <field name="arch" type="xml">
                <form>
                    <group>
                        <group>
                            <field name="company_id" readonly='1'/>
                        </group>
                    </group>
                    <footer>
                        <button name="create_finance_period" string="会计期间" type="object" class="oe_highlight"/>
                        或者
                        <button string="取消" class="oe_link" special="cancel"/>
                    </footer>
                </form>
            </field>
        </record>

        <record id="finance_period_search" model="ir.ui.view">
            <field name="name">finance.period.search</field>
            <field name="model">finance.period</field>
            <field name="arch" type="xml">
                <search string="会计期间">
                	<filter name='unclosed' string='未结账' domain="[('is_closed', '=', False)]"/>
                    <filter name='closed' string='已结账' domain="[('is_closed', '=', True)]"/>
                    <group expand="0" string="分组">
                        <filter string="会计年度" domain="[]" context="{'group_by':'year'}"/>
                    </group>
                </search>
            </field>
        </record>

        <record id="profit_statement_tree_template" model="ir.ui.view">
            <field name="name">profit_statement_tree_template</field>
            <field name="model">profit.statement</field>
            <field name="arch" type="xml">
                <tree string='利润表模板' editable="bottom" >
                    <field name="sequence" widget="handle"/>
                    <field name="balance"/>
                    <field name="line_num"/>
                    <field name="occurrence_balance_formula"/>
                </tree>
            </field>
        </record>

        <record id="create_profit_statement_wizard_form" model="ir.ui.view">
            <field name="name">create.profit.statement.wizard.form</field>
            <field name="model">create.profit.statement.wizard</field>
            <field name="arch" type="xml">
                <form>
                    <group>
                        <group>
                            <field name="company_id" readonly='1'/>
                        </group>
                    </group>
                    <footer>
                        <button name="create_profit_statement" string="利润表模版" type="object" class="oe_highlight"/>
                        或者
                        <button string="取消" class="oe_link" special="cancel"/>
                    </footer>
                </form>
            </field>
        </record>

        <record id="balance_sheet_tree_two" model="ir.ui.view">
            <field name="name">balance_sheet_tree_two</field>
            <field name="model">balance.sheet</field>
            <field name="arch" type="xml">
                <tree string="资产负债表模板" editable="bottom" >
                    <field name="sequence" widget="handle"/>
                    <field name="balance"/>
                    <field name="line_num"/>
                    <field name="balance_formula"/>
                    <field name="balance_two" />
                    <field name="line_num_two"/>
                    <field name="balance_two_formula"  />
                </tree>
            </field>
        </record>

        <record id="create_balance_sheet_two_wizard_form" model="ir.ui.view">
            <field name="name">create.balance.sheet.two.wizard.form</field>
            <field name="model">create.balance.sheet.two.wizard</field>
            <field name="arch" type="xml">
                <form>
                    <group>
                        <group>
                            <field name="company_id" readonly='1'/>
                        </group>
                    </group>
                    <footer>
                        <button name="create_balance_sheet_two" string="资产负债表模版" type="object" class="oe_highlight"/>
                        或者
                        <button string="取消" class="oe_link" special="cancel"/>
                    </footer>
                </form>
            </field>
        </record>
        <record model="ir.ui.view" id="gl_company_year_balance_tree_view">
            <field name="name">gl.company.year.balance.tree.view</field>
            <field name="model">gl.company.year.balance</field>
            <field name="arch" type="xml">
                <tree string="年初余额设置">
                    <field name="company_id"/>
                    <field name="annual"/>
                </tree>
            </field>
        </record>
        <record id="create_gl_opening_balance_wizard_form" model="ir.ui.view">
            <field name="name">create.gl.opening.balance.form</field>
            <field name="model">create.gl.opening.balance.wizard</field>
            <field name="arch" type="xml">
                <form>
                    <group>
                        <group>
                            <field name="company_id" readonly='1'/>
                            <field name="annual"/>
                        </group>
                    </group>
                    <footer>
                        <button name="create_gl_opening_balance" string="年初余额设置" type="object" class="oe_highlight"/>
                        或者
                        <button string="取消" class="oe_link" special="cancel"/>
                    </footer>
                </form>
            </field>
        </record>
        <act_window id="action_gl_opening_balance"
                      name="年初余额"
                      res_model="create.gl.opening.balance.wizard"
                      multi="True"
                      view_type="form"
                      view_mode="form,tree"
                      target="new"
        />
        <act_window id="create_profit_statement_wizard_action"
                    name='利润表模版'
                    res_model="create.profit.statement.wizard"
                    multi="True"
                    view_type="form"
                    view_mode="form"
                    target="new"
        />
        <act_window id="create_balance_sheet_two_wizard_action"
                    name='资产负债表模版'
                    res_model="create.balance.sheet.two.wizard"
                    multi="True"
                    view_type="form"
                    view_mode="form"
                    target="new"
        />
        <act_window id="create_finance_period_wizard_action"
                    name='会计期间'
                    res_model="create.finance.period.wizard"
                    multi="True"
                    view_type="form"
                    view_mode="form"
                    target="new"
        />
        <!--会计根菜单-->
        <menuitem id='finance_menu' name='会计报表' />

        <menuitem id='finance_setting_menu' name= '报表设置' parent='finance_menu'/>


        <menuitem id='period_menu_test1' action='create_finance_period_wizard_action' parent='finance_setting_menu' name="会计期间"/>
        <menuitem id='period_menu_test2' action='create_profit_statement_wizard_action' parent='finance_setting_menu' name="利润表模版"/>
        <menuitem id='period_menu_test3' action='create_balance_sheet_two_wizard_action' parent='finance_setting_menu' name="资产负债表模版"/>
        <menuitem id='period_menu_test4' action='action_gl_opening_balance' parent='finance_setting_menu' name="年初余额设置"/>

    </data>
</openerp>
           

然后是关联的py文件

# -*- coding: utf-8 -*-
from odoo import models, fields, api


class CreateProfitStatementWizard(models.TransientModel):
    _name = "create.profit.statement.wizard"
    _description = u'利润表模版的创建向导'

    company_id = fields.Many2one('res.company', string=u'查询的公司', change_default=True,
                                 default=lambda self: self.env['res.company']._company_default_get())

    @api.multi
    def create_profit_statement(self):
        current_company = self.company_id.id
        sql = '''select id from 
                  profit_statement where company_id = {}'''.format(current_company)
        self.env.cr.execute(sql)
        my_end_dic = self.env.cr.dictfetchall()
        # print my_end_dic
        create_profit_ids = []
        for dic in my_end_dic:
            create_profit_ids.append(dic.get('id'))
        # print trial_balance_ids
        # trial_balance_ids = [self.env['profit.statement'].create(vals).id for (key, vals) in my_end_dic.items()]
        view_id = self.env.ref('juxinerp.profit_statement_tree_template').id  #得到插入的视图 id
        return {
            'type': 'ir.actions.act_window',
            'name': u'利润表模版',
            'view_type': 'form',
            'view_mode': 'tree',
            'res_model': 'profit.statement',
            'target': 'current',
            'view_id': False,
            'views': [(view_id, 'tree')],
            'domain': [('id', 'in', create_profit_ids)],  # 对应的输出修改对应的接收
        }
class CreateFinancePeriodWizard(models.TransientModel):
    _name = "create.finance.period.wizard"
    _description = u'会计期间的创建向导'

    company_id = fields.Many2one('res.company', string=u'查询的公司', change_default=True,
                                 default=lambda self: self.env['res.company']._company_default_get())

    @api.multi
    def create_finance_period(self):
        current_company = self.company_id.id
        sql = '''select id from 
                  finance_period where company_id = {}'''.format(current_company)
        self.env.cr.execute(sql)
        my_end_dic = self.env.cr.dictfetchall()
        finance_period_ids = []
        for dic in my_end_dic:
            finance_period_ids.append(dic.get('id'))
        view_id = self.env.ref('juxinerp.finance_period_tree').id  #得到插入的视图 id
        return {
            'type': 'ir.actions.act_window',
            'name': u'会计期间',
            'view_type': 'form',
            'view_mode': 'tree',
            'res_model': 'finance.period',
            'target': 'current',
            'view_id': False,
            'views': [(view_id, 'tree')],
            'domain': [('id', 'in', finance_period_ids)],  # 对应的输出修改对应的接收
        }
class CreateBalanceSheetTwoWizard(models.TransientModel):
    _name = "create.balance.sheet.two.wizard"
    _description = u'资产负债表的创建向导'

    company_id = fields.Many2one('res.company', string=u'查询的公司', change_default=True,
                                 default=lambda self: self.env['res.company']._company_default_get())

    @api.multi
    def create_balance_sheet_two(self):
        current_company = self.company_id.id
        sql = '''select id from 
                  balance_sheet where company_id = {}'''.format(current_company)
        self.env.cr.execute(sql)
        my_end_dic = self.env.cr.dictfetchall()
        balance_sheet_two_ids = []
        for dic in my_end_dic:
            balance_sheet_two_ids.append(dic.get('id'))
        view_id = self.env.ref('juxinerp.balance_sheet_tree_two').id  #得到插入的视图 id
        return {
            'type': 'ir.actions.act_window',
            'name': u'资产负债表模版',
            'view_type': 'form',
            'view_mode': 'tree',
            'res_model': 'balance.sheet',
            'target': 'current',
            'view_id': False,
            'views': [(view_id, 'tree')],
            'domain': [('id', 'in', balance_sheet_two_ids)],  # 对应的输出修改对应的接收
        }