This question has been flagged
4587 Views

How can I call a wizard in a return of a function? 

This is the first wizard that appears: 

class get_ticket(osv.osv_memory):    
    _name = 'get.tickets.wizard'    

    def _tickets_control(self, cr, uid, context=None):         active_ids = []         partner_ids = {}         for active_id in context.get('active_ids'):             active_ids.append(active_id)             for partner_id in self.pool.get('tickets').browse(cr, uid, active_id, context=context).partner_id:                 partner_ids[partner_id.id] = partner_id.id         if len(active_ids) <= 1:             self.display_error_message(cr, uid, 'You have to select more than 1 tickets.')             return False          elif len(partner_ids) > 1:             self.display_error_message(cr, uid, 'You have selected 2 or more tickets of different partners.')             return False         return True
    
    def display_error_message(self, cr, uid, error, context=None):         view_id = self.pool.get('ir.model.data').get(cr, uid, 'get_ticket_wizard', 'close_wizard_form_view', context=context)         view_id = view_id[0]         return {             'name': _("Error"),             'view_type': 'form',             'view_mode': 'form',             'view_id': view_id,             'res_model': 'close.wizard',             'type': 'ir.actions.act_window',             'target': 'new',             'context': {'error': error},     }     _columns = {         'ticket_id': fields.many2one('tickets', string='Ticket to keep'),         'control': fields.boolean(compute='_tickets_control'),     }     def onchange_get_tickets(self, cr, uid, ids, context=None):         active_ids = []         for active_id in context.get('active_ids'):             active_ids.append(active_id)         return {'domain': {'ticket_id': [('id', 'in', active_ids)]}}     _defaults = {         'control': _tickets_control,     }

And this is the wizard that I want to call (that has the function like an error message and close the wizard before and this [this I don't know if really does it]): 

class close_wizard(osv.osv_memory):    
    _name = 'close.wizard'    

    def _display_error(self, cr, uid, ids, context=None):        
        return context.get('error')    

    def _close_window_wizard(self, cr, uid, ids, context=None):         return {'type': 'ir.actions.act_window_close'}     _columns = {         'error': fields.char(string=''),     }     _defaults = {         'error': _display_error,     }

And this is its view: 

<!-- ********** Form view of close wizard ********** -->
<record model="ir.ui.view" id="close_wizard_form_view">    
    <field name="name">close.wizard.form</field>    
    <field name="model">close.wizard</field>    
    <field name="arch" type="xml">        
        <form string="Error">            
            <group>                
                <field name="error"/>            
            </group>            
            <footer>                
                <button string="Accept" name="%(_close_wizard_window)d" type="action" class="oe_highlight"/>         
            </footer>        
        </form>    
    </field>
</record>
<!-- ********** Option get tickets in menu 'More' ********** -->
<act_window id="close_wizard_action"            
    multi="True"            
    key2="client_action_multi"            
    name="Error"            
    res_model="close.wizard"            
    src_model="get.tickets.wizard"            
    view_mode="form"            
    target="new"            
    view_type="form"/>


Avatar
Discard

Can you explain your main objective to achieve from wizard ? It will help us to understand your code as well as your requirement. Based on that we can give you exact suggestion or solution.

Author

The module that I'm developing has the objective to have tickets as part of after-sales services. That tickets can being fused or separated in 2 tickets and other actions. Here I'm going to fuse 2 tickets, to do this I have to check 2 tickets in the tree view and in the 'more' button I have an option 'Fuse tickets' that call the wizard (get.tickets.wizard), here appears the wizard that has a many2one where I have to select the ticket that I want to preserve (the other is going to go over to another status, that is fused), but if the tickets that I have checked are of differents partners I have to display a message with the error, and I have to close the message error and the wizard when the user press the 'accept' button. So in code is: I call _tickets_control function, and if is something wrong (like the tickets have differents partners), this function calls display_error_message function that has to return the error message wizard (or window or view)