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

I can't understand how wizards work

By
Uillino
on 8/4/15, 6:10 AM 1,008 views

I'm trying to create a wizard, but I'm confused about how a wizard works.

This is mymodule.py:

# -*- encoding: utf-8 -*-
from openerp import models, fields

class mymodule_attivita(models.Model):
_name = 'mymodule.tbl_attivita'
_description = 'Tabella Attivita'

scode_attivita_contr = fields.Char('Code', size=1, required=True)
sdescrizione = fields.Text('Descrizione', equired=True)

and this is mymodule_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_mymodule_attivita" model="ir.ui.view">
<field name="name">mymodule view</field>
<field name="model">mymodule.tbl_attivita</field>
<field name="arch" type="xml">
<form string="mymodule Attivita">
<sheet>
<notebook>
<page string="Tab 1">
<group name="top">
<group name="left">
<field name="scode_attivita_contr"/>
<field name="sdescrizione"/>
</group>
</group>
</page>
<page string="Tab 2">
<group name="top">
<group name="left">
<field name="id" attrs="{'invisible': [('write_date', '=', False)]}"/>
<field name="write_date" attrs="{'invisible': [('write_date', '=', False)]}"/> 
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
               <act_window id="action_bridge_attivita" name="Attivita" res_model="mymodule.tbl_attivita" view_mode="tree,form" />
                <menuitem id="menu_mymodule_attivita" name="Menu mymodule Attivita" parent="mail.mail_feeds" sequence="20" action="action_mymodule_attivita" />
 
    </data>
</openerp>

So, I have a form with 2 fields (plus id and write_date that I've set invisible).

I would like to create a wizard to open a page with a button Pushing this button, Odoo has to open the model 'mymodule.tbl_attivita'. So, I've written this wizard.py file:

# -*- encoding: utf-8 -*-
from openerp import models, api

class wizard(models.TransientModel):
_name = 'mymodule.wizard'
_description = "Wizard

@api.multi
def crea_attivita(self):
return {
'type': 'ir.actions.act_window',
'res_model': 'mymodule.tbl_attivita',
'view_type': 'form',
'view_mode': 'form',
'target': 'new',
}

with this wizard_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_mymodule_wizard_form" model="ir.ui.view">
<field name="name">Wizard</field>
<field name="model">mymodule.wizard</field>
<field name="arch" type="xml">
<form string="mymodule Wizard">
<sheet>
<group name="top">
<group name="left">
<h1>Demo Wizard</h1>
</group>
<group name="right">
<button type="object"
name="crea_attivita"
string="Create Attivita"/>

                                                </group>
                                     </group>
                             </sheet>


<footer>

<button string="cancella" special="cancel"/>

</footer>

</form>

</field>

</record>


<record id="view_mymodule_wizard" model="ir.actions.act_window">

<field name="name">Select link</field>

<field name="type">ir.actions.act_window</field>

<field name="res_model">mymodule.wizard</field>

<field name="view_type">form</field>

<field name="view_mode">form</field>

<field name="target">new</field>

</record>

 

<act_window id="action_mymodule_wizard" name="Attivita" res_model="mymodule.wizard" view_mode="tree,form" /> 

<menuitem id="menu_mymodule_wizard" name="Menu mymodule Wizard" parent="mail.mail_feeds" sequence="40" action="action_mymodule_wizard" />

</data>

</openerp>

In this way, I have a link 'Attivita' in the 'Messaging' menu. When I click on it, I open the wizard and I could click on 'Create' and then I could click on the button 'Create Attivita'. At this point, I have a pop up with the field of the model mymodule.tbl_attivita, without the option for saving my data.

I think that there is something about wizard that I haven't understood. Could anyone explain me what is missing?

1

Drees Far

--Drees Far--
1130
| 5 2 6
Tunis, Tunisia
--Drees Far--
Drees Far
On 8/4/15, 6:16 AM

Here is an example.

your_wizard.xml

<record model="ir.ui.view" id="wizard_with_step_form">

<field name="name">wizard_with_step.form</field>

<field name="model">wizard_with_step</field>

<field name="type">form</field>

<field name="arch" type="xml">

<form string="Wizard with step" version="7.0">

<field invisible="1" name="state" />

<group states="step1">

<field name="name1" />

</group>

<group states="step2">

<field name="name2" />

</group>

<footer states="step1">

<button name="action_next" string="Next" type="object" />

</footer>

<footer states="step2">

<button name="action_previous" string="Previous" type="object" />

</footer>

</form>

</field>

</record>

your_wizard.py


class wizard_with_step(osv.osv_memory):

_name = 'wizard_with_step'

_description = 'Wizard with step'

_columns = {

'name1': fields.char('Name 1',),

'name2': fields.char('Name 2',),

'state': fields.selection([('step1', 'step1'),('step2', 'step2')])

}

def action_next(self, cr, uid, ids, context=None):

#your treatment to click button next

#...

# update state to step2

self.write(cr, uid, ids, {'state': 'step2',}, context=context)

#return view

return {

'type': 'ir.actions.act_window',

'res_model': 'your_wizard',

'view_mode': 'form',

'view_type': 'form',

'res_id': this.id,

'views': [(False, 'form')],

'target': 'new',

}

def action_previous(self, cr, uid, ids, context=None):

#your treatment to click button previous

#...

# update state to step1

self.write(cr, uid, ids, {'state': 'step1',}, context=context)

#return view

return {

'type': 'ir.actions.act_window',

'res_model': 'your_wizard',

'view_mode': 'form',

'view_type': 'form',

'res_id': this.id,

'views': [(False, 'form')],

'target': 'new',

}

}

Here some useful links:

http://odoo-documents.readthedocs.org/en/latest/howtos/backend.html#wizards 

http://stackoverflow.com/questions/23005623/how-to-create-wizards-openerp

 

1

Bole

--Bole--
2385
| 5 4 6
Zagreb | Karlovac, Croatia
--Bole--

there is only 10 kind of people the ones that understand binary ... and others

Bole
On 8/4/15, 6:23 AM

First you need to understand the difference between models.Model and models.TransientModel... 

models.Model class is intended for permanently storing data in database... 

models.TransientModel is intended for temporary data, very simmilar to sql view , and most wizards will use TransientModel for storing data.. this is the main reason why you do not have option to save the data while on wizard screen.

If i got your need right, you would like to create some activity record and store it in database... 
If that is so, you should create a view on models.Model subclass (tbl_attivita! ) and you have no need to create a wizard.. 

That view can be opened as a popup window the way you opened wizard class (your code) but the class itself should be Model instead of TransientModel...


hope it helps a bit.. 


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: 8/4/15, 6:10 AM
Seen: 1008 times
Last updated: 8/5/15, 2:15 AM