This question has been flagged
10 Replies
31795 Views

Hello, I am developing a new module in Odoo 8.

I need to display a confirm message (I see that I can do this adding the confirm="confirm message" in button XML) from the Python code, in a method.

For example: I override the create method of sale.order model.  I want to check if the total of the sale is under X value. If the value > X, I display a confirm message like "Do you really confirm this sale?" and catch the button pressed for the user to decide what action I do.

Thanks!

Avatar
Discard

So what is your question?

Author

My question is, how can I display the message from Python code and how can I catch the button pressed by the user?

Best Answer

Yes you can do that.. using a wizzard
This approach needs the method to be split in parts (before,during and after wizard)
Steps you need to do

1. create you custom method, make some computation/data colection
;then create a record in transient model and return wizard wiev for created record
2. in wizard display whatever user needs to make a choice
3. accoring to choice continue or cancel futrher actions...

hope it helps.... 

 

Avatar
Discard
Best Answer

AFAIK, this is a feature lacking in Odoo.  If you want to stop the processing forward (not a confirmation but a validation that stops the processing from moving forward) you can raise an exception.  But I am not aware of anyway to display a confirmation message that user can choose to go forward or not.  You can display a warning message using on_change (e.g. when the sale order line is changed, trap it using on_change, then calculate the total sales value and if it is more than X, then display a warning message).

Avatar
Discard
Author Best Answer

Bole: I have created the method, and the wizard (py and xml files). How can I display the wizard message and catch the result from Python code?

Ivan: the warning message not helps me because this stops the execution of the method.

Avatar
Discard

You cannot return an action/wizard from `create` method. So this won't work.

Best Answer

How to add or display confirmation display box / message box on button click. Before going into deep we need to know problem statement. In some scenario we need to ask from user is he/she want to do further processing or not on button click.

For example we have some document which needs to be approved by vice chancellor of a university. And before submitting it to the vice chancellor we want to ask confirmation from user.

Models.py

# Confirmation msg box for ORIC
from openerp.osv import fields,osv
from openerp.tools.translate import _
class thesis_approval_message_oric(osv.osv_memory):
    _name = "thesis.approval.message.oric"
    _columns={
        'text': fields.text(),
    }
thesis_approval_message_oric() 

Xml

     <!--Wizard For Raise Apprval Messages Thesis ORIC-->
    <record id="wizard_message_form_for_oric" model="ir.ui.view">
            <field name="name">Thesis Wizard Message Approval Message ORIC</field>
            <field name="model">thesis.approval.message.oric</field>
            <field name="type">form</field>
            <field name="arch" type="xml">
                <form string="Message" version="7.0">
                    <separator string="Message" colspan="6"/>
                    <field name="text" colspan="4" nolabel="1" readonly="1"  widget="html"/>                                                            
                    <newline/>
                    <separator colspan="6"/>
                    <footer>
                        <button name="btn_approve_oric" type="object" string="Yes" class="oe_highlight"/>                             
                        <button special="cancel" string="No"/>                    
                    </footer>                                    
                </form>
            </field>
    </record>  

Button click function

    @api.multi
    def btn_approve(self):
 text = """The case """+str(self.case_no)+""" will be forward to VC for further Approval. Are you want to proceed."""
 query='delete from thesis_approval_message_oric'
 self.env.cr.execute(query)
 value=self.env['thesis.approval.message.oric'].sudo().create({'text':text})
 return{
  'type':'ir.actions.act_window',
  'name':'Message',
  'res_model':'thesis.approval.message.oric',
  'view_type':'form',
  'view_mode':'form',
  'target':'new',
  # 'context':{'thesis_obj':self.id,'flag':'course Work completed'},
  'res_id':value.id                
       }  

For code understanding and description please visit: http://learnopenerp.blogspot.com/2017/12/how-to-display-confirmation-display-box.html

Avatar
Discard
Best Answer

You could use the confirm attribute of buttons:

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

Avatar
Discard