Odoo 10 从销售订单创建项目

Odoo 10 create project from sales order

我正在为 select/create 销售订单中的新项目设计一个按钮。

这是我的模块:

@api.multi
def action_create_project_project(self):
    view_id = self.env.ref('project.project_project_view_form_simplified').id
    context = self._context.copy()
    return {
        'name': 'Create project',
        'view_type': 'form',
        'view_mode': 'tree',
        'views' : [(view_id, 'form')],
        'res_model': 'project.project',
        'view_id': view_id,
        'type': 'ir.actions.act_window',
        # 'res_id': self.id,
        'target': 'new',
        'context': context,
    }

和视图:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
        <record id="view_order_form_inherit_sale_timesheet" model="ir.ui.view">
            <field name="name">Sale Order create project</field>
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="arch" type="xml">
                <data>
                    <xpath expr="//field[@name='partner_shipping_id']" position="after">
                        <field name="project_project_id" invisible="1"/>
                        <label for="action_create_project_project" string="Create project" invisible="[('project_project_id', '!=', False)]"/>
                        <button type="object"
                            name="action_create_project_project"
                            class="fa fa-external-link btn btn-default o_external_button"
                            string="New project"
                            groups="base.group_user"
                            attrs="{'invisible': [('project_project_id', '!=', False)]}">
                        </button>
                    </xpath>
                </data>
        </field>
    </record>
</odoo>

但我真正想要的是 select 现有项目或创建一个新项目,当项目 selected 我需要访问该项目,获得 analytic_account_id 并使用此信息填写销售订单。

有什么帮助吗?

也许我可以修改 project_project_id 定义,让它可以在销售订单草稿上写入(由 sale_timesheet 创建,只读标志为 true),但我不知道我可以覆盖一个来自插件的字段(希望保持核心完整)...

原文:

project_project_id = fields.Many2one('project.project',
    compute='_compute_project_project_id',
    string='Project associated to this sale',
    )

期望:

project_project_id = fields.Many2one('project.project',
    'Project associated to this sale',
    compute='_compute_project_project_id',
    readonly=True,
    states={'draft': [('readonly', False)]},
    copy=False,
    )

要覆盖现有字段,只需添加您需要的属性,如下所示:

project_project_id = fields.Many2one(
    readonly=True,
    states={'draft': [('readonly', False)]},
    copy=False)

希望这个回答能对您有所帮助。