I have created a custom module and i am redefining the create and write methods. When i create a new sale order, the method create is called, but also the write method.. How it is possible ? Thanks
def create(self, cr, uid, vals, context=None):
# creation du devis par heritage(et des lignes de commandes du devis) // obligatoire de creer le devis pour acceder aux lignes du devis
id = super(sale_order, self).create(cr, uid, vals, context)
# creation d'une liste vide qui contiendra tous les numeros de sections saisis dans la vue
liste_numeros_section = []
# recuperation des id de chaque ligne du devis (qui ne sont pas des options)
order_line_ids = self.pool.get('sale.order.line').search(cr, uid, [('order_id', '=', id), ('is_option', '=', False)], context=context)
#recuperation de l'objet section
section_pool = self.pool.get('sale.order.section')
for i in self.pool.get('sale.order.line').browse(cr,uid,order_line_ids, context=context): # pour chaque ligne du devis
# si nouveau numero de section, alors creation section + lien avec ligne de devis actuelle
if not(i.number_section in liste_numeros_section):
liste_numeros_section.append(i.number_section)
dict_section = {
'order_id': id,
'order_line': [(4, i.id)], # lier ligne du devis actuelle a la section (creation d'une relation)
'number': i.number_section,
}
section_pool.create(cr,uid,dict_section, context=context)
else:
# si le numero de section existe deja, alors creation lien ligne du devis actuelle /section
id_section = self.pool.get('sale.order.section').search(cr,uid, [('number', '=', i.number_section), ('order_id', '=', id)], context=context) #recupere section qui correspond a la ligne du devis
dict_section = {
'order_line': [(4, i.id)], # lier ligne du devis actuelle a la section (creation d'une relation)
}
section_pool.write(cr,uid,id_section,dict_section, context=context)
return id
def write(self, cr, user, ids, vals, context=None):
raise osv.except_osv(_('Erreur!'),_('Vous ne pouvez pas confirmer une commande qui contient une ou des options'))
# mise a jour du devis par heritage
super(sale_order, self).write(cr, user, ids, vals, context)
order_id = ids[0] # recuperation de l'id du devis courant
# recuperation de l'objet ligne de devis
order_line_pool = self.pool.get('sale.order.line')
# recuperation de l'objet section
section_pool = self.pool.get('sale.order.section')
# recuperation des id de chaque ligne du devis (qui ne sont pas des options)
order_line_ids = order_line_pool.search(cr, user, [('order_id', '=', order_id), ('is_option', '=', False)], context=context)
# recuperation des id de chaque section du devis
section_ids = section_pool.search(cr, user, [('order_id', '=', order_id)], context=context)
# creation d'une liste vide qui contiendra tous les numeros de sections saisis dans la vue
liste_numeros_section = []
# pour chaque ligne du devis
for i in self.pool.get('sale.order.line').browse(cr,user,order_line_ids, context=context):
if not (i.section_id in section_ids): # si nouvelle section
dict_section = {
'order_id': order_id,
# lier ligne du devis actuelle a la section (creation d'une relation)
'order_line': [(4, i.id)],
'number': i.number_section,
}
section_pool.create(cr,user,dict_section, context=context)
else:
dict_section = {
# mise a jour de la relation entre la section et la ligne du devis
'order_line': [(6, 0, i.id)],
'number': i.number_section,
}
section_pool.write(cr,user,i.section_id,dict_section, context=context)
return True
↧