Hi,
In my custom wizard with different steps, I want to populate a m2m field defined on second step by selecting records with choice of first step... How can I do that in python code of action_choose ?
class account_change_lotnbr_wizard(osv.osv_memory):
_name='iota.change.lotnbr.wizard'
def act_cancel(self, cr, uid, ids, context=None):
#self.unlink(cr, uid, ids, context)
return {'type':'ir.actions.act_window_close' }
def act_destroy(self, *args):
return {'type':'ir.actions.act_window_close' }
def action_choose(self,cr,uid,ids,context=None):
if not context:
context={}
this = self.browse(cr, uid, ids)[0]
wizard=self.browse(cr,uid,ids[0],context=context)
# Contrôle pour recherche
if not wizard.date_invoice:
raise osv.except_osv(_('Error !'), _('No date !'))
if not wizard.product_id:
raise osv.except_osv(_('Error !'), _('No product !'))
if not wizard.new_lot_nbr:
raise osv.except_osv(_('Error !'), _('No new lot number !'))
# Définition des objets
invoice_obj = self.pool.get('account.invoice')
# Recherche des factures à réaffecter
inv_select_ids = []
inv_ids = invoice_obj.search(cr, uid, [('date_invoice', '=', wizard.date_invoice), ('type', '=', 'out_invoice')])
invs = invoice_obj.browse(cr, uid, inv_ids, context)
for inv in invs:
inv_select = False
for line in inv.invoice_line:
if line.product_id.id == wizard.product_id.id:
inv_select = True
break
if inv_select:
inv_select_ids.append(inv.id)
# Mise à jour du wizard pour passer à l'étape suivante
self.write(cr, uid, ids, {'state':'get'}, {'invoice_ids':inv_select_ids})
return {
'type': 'ir.actions.act_window',
'res_model': 'iota.change.lotnbr.wizard',
'view_mode': 'form',
'view_type': 'form',
'res_id': this.id,
'views': [(False, 'form')],
'target': 'new',
}
def action_confirm(self,cr,uid,ids,context=None):
if not context:
context={}
#this = self.browse(cr, uid, ids)[0]
wizard=self.browse(cr,uid,ids[0],context=context)
# Contrôle pour recherche
if not wizard.invoice_ids:
raise osv.except_osv(_('Error !'), _('No invoice !'))
return {'type':'ir.actions.act_window_close' }
_columns = {
'date_invoice': fields.date('Invoice Date'),
'product_id': fields.many2one('product.product', 'Product'),
'new_lot_nbr': fields.char('Lot number', size=15),
'invoice_ids':fields.many2many('account.invoice','wiz_change_lotnbr','wiz_id','invoice_id','Invoices'),
'state': fields.selection( ( ('choose','choose'),
('get','get'),
) ),
}
_defaults = {
'date_invoice': fields.date.context_today,
'state': lambda *a: 'choose',
}
account_change_lotnbr_wizard()
E.g : In the first step, I give a date and product_id when I go to step 2, i want to obtain a list of invoices with a date and which have one line of product in invoice_ids field