2

我发现下面会弹出一个关于 openerp 中按钮按下操作的确认对话框

<button name="action_button_confirm" states="draft" string="Confirm Sale" 
type="object" groups="base.group_user" confirm="Do you confirm this sale?"/>

我希望仅当订单行中的产品之一是服务时才显示确认文本,并且文本应该是

Do you like to confirm sale with service "AC Service"?

其中 Ac Services 是服务产品名称(即基于订单的动态文本)。请建议我一种方法来做到这一点。谢谢

4

2 回答 2

4

我创建了一个向导,用于在某种情况下发出警报,这对我来说做得很好。对于有类似问题的人,我将我的想法放在下面

我的新向导类

class sale_order_confirm(osv.osv):
    _name = "sale.order.confirm"
    _description = "Sales Order Confirm"
    def action_confirm(self, cr, uid, ids, context=None):
        assert len(ids) == 1, 'This option should only be used for a single id at a time.'
        wf_service = netsvc.LocalService('workflow')
        wf_service.trg_validate(uid, 'sale.order', ids[0], 'order_confirm', cr)

        # redisplay the record as a sales order
        view_ref = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'sale', 'view_order_form')
        view_id = view_ref and view_ref[1] or False,
        return {
            'type': 'ir.actions.act_window',
            'name': _('Sales Order'),
            'res_model': 'sale.order',
            'res_id': ids[0],
            'view_type': 'form',
            'view_mode': 'form',
            'view_id': view_id,
            'target': 'current',
            'nodestroy': True,
        }
sale_order_confirm()

我的浏览记录

<record id="view_cancel_order" model="ir.ui.view">
            <field name="name">Cancel Repair</field>
            <field name="model">sale.order.confirm</field>
            <field name="arch" type="xml">
                <form string="Confirm Sale Order" version="7.0">
                    <group>
                        <label string="This Sale Order will be confirmed with service Product. Agree?"/>
                    </group>
                    <footer>
                        <button name="action_confirm" string="Yes" type="object" class="oe_highlight"/>
                        or
                        <button string="Cancel" class="oe_link" special="cancel" />
                    </footer>
                </form>
            </field>
        </record>

我稍微改变了 sale_order.py 中的 action_button_confirm 函数

def action_button_confirm(self, cr, uid, ids, context=None):
        assert len(ids) == 1, 'This option should only be used for a single id at a time.'
        is_optional_item_exists = False    # here i can check for wt ever condition and this variable will have the resul
        so_obj = self.browse(cr, uid, ids, context)
        if so_obj:
            for line in so_obj[0].order_line:
                print line.name
                if line.is_optional_item:
                     is_optional_item_exists = True

        if(is_optional_item_exists):
            return {
                'name': 'Order Confirmation',
                'view_type': 'form',
                'view_mode': 'form',
                'res_model': 'sale.order.confirm',
                'type': 'ir.actions.act_window',
                'nodestroy': True,
                'target': 'new',
                }
        else:
            wf_service = netsvc.LocalService('workflow')
            wf_service.trg_validate(uid, 'sale.order', ids[0], 'order_confirm', cr)

            # redisplay the record as a sales order
            view_ref = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'sale', 'view_order_form')
            view_id = view_ref and view_ref[1] or False,
            return {
                'type': 'ir.actions.act_window',
                'name': _('Sales Order'),
                'res_model': 'sale.order',
                'res_id': ids[0],
                'view_type': 'form',
                'view_mode': 'form',
                'view_id': view_id,
                'target': 'current',
                'nodestroy': True,
            }

谢谢大家,干杯!!

于 2013-10-15T07:18:58.147 回答
2

如果您希望能够对此进行自定义,那么 AFAIK 您将需要使用向导。

扩展表单并将按钮名称更改为确定是否需要显示向导的方法(返回包含窗口操作的字典),或者直接调用现有的 action_button_confirm 方法。如果用户单击确定,向导然后可以调用操作按钮确认。

这当然是可行的,但是对于大多数用户无论如何都会忽略的警告有点麻烦。

于 2013-10-14T19:54:18.867 回答