Odoo Help

Welcome!

This community is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.

1

Confirming a dialogue box on a condition and with dynamic text in openerp

By
vivek
on 10/14/13, 4:15 AM 3,525 views

I found that the below pops me up a confirmation dialogue on button press action in openerp

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

I would like the confirm text to be displayed only if one of the products in the orderlines is service and the text should be

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

Where Ac Services is the service product name (i.e dynamic text based on the orderlines). Kindly suggest me a way to do this. Thanks

0
vivek
On 10/15/13, 5:19 AM

I've created a wizard for alert on a condition and that does a good job to me. For people with similar prob i am placing my idea below

My New Wizard class

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()

My view record

<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>

I've changed my action_button_confirm function in the sale_order.py slightly

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,
            }

Thanks All and Cheers!!

0
Ximo
On 4/10/14, 9:23 AM

My problem was similar, I solved this way... I create a bolean field that its true or false depending of a many2one; if this many2one have records my boolean field is false and change the button depending this field...

 xml
     ...
        <header>
             <button string="Confirmar Devolucion" type="object" name="accion_confirmar_devolucion" class="oe_highlight" attrs="{'invisible':['|',('devol_vacio', '==', False),('state','!=','sent')]}"/>
             <button string="Confirmar Devolucion" type="object" name="accion_confirmar_devolucion" class="oe_highlight" attrs="{'invisible':['|',('devol_vacio', '!=', False),('state','!=','sent')]}" confirm="No hay productos en las devoluciones, ¿desea continuar?"/>
        </header>
        <div name="general" attrs="{'readonly': [('state', '==', 'cancel')]}">
           <separator string="Datos Generales"/>
              <group name="General">
                <field name="devol_vacio" invisible="1"/>
                <field name="devol_ids" on_change="onchange_devol_ids(devol_ids)"/>
        ...


    py

    ...
    columns={
    ...
    'devol_vacio'       : fields.boolean('devol_vacio'),
    ...}

    defaults={'devol_vacio'       :False}


    def onchange_devol_ids(self, cr, uid, ids, campo=False context=None):
            '''
            bla bla bla devol_ids change

            :param cr: Fila actual, para el cursor de la base de datos.
            :param uid: Id del usuario actual. Se utiliza para comprobaciones de seguridad.
            :param ids: Lista de ids del modelo sale.order.
            :param context: openerp request context.
            :return: {}
            '''
            val={}
            if campo != False:
                if campo!=[]:
                    val['devol_vacio']=True
                else:
                    val['devol_vacio']=False
            if val:
                return {'value':val}
            return {}

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This community is for professionals and enthusiasts of our products and services. Read Guidelines

Question tools

1 follower(s)

Stats

Asked: 10/14/13, 4:15 AM
Seen: 3525 times
Last updated: 3/16/15, 8:10 AM