Dies ist mein Python-Code. welches hr.employee, res.partner und sale.order erbt.Baumansicht Felder werden nicht aktualisiert, während Onchange in Odoo-8
from openerp.osv import fields, osv
#Inheriting the hr.employee object
class hr_employee(osv.osv):
_inherit = "hr.employee"
_columns = {
'customer_ids': fields.many2many('res.partner', 'lead_employee_rel', 'emp_id', 'partner_id', 'Customers'),
'rating_ids':fields.one2many('hr.employee','rating_id',"Employee Rating"),
}
#Inheriting the res.partner object
class res_partner(osv.osv):
_inherit ="res.partner"
_columns = {
#creating many2many functionality
'partner_id' : fields.integer('ID'),
'employee_ids': fields.many2many('hr.employee', 'lead_employee_rel', 'partner_id', 'emp_id', 'Employees'),
}
#Inheriting sale.order object
class sale_order(osv.osv):
_inherit = "sale.order"
_description = "Sales Order"
_columns = {
'employee_ids': fields.many2many('hr.employee', 'lead_employee_rel', 'partner_id', 'emp_id', 'Employees'),
'rating_id':fields.many2one('hr.employee',"Employee Rating"),
'emp_select':fields.selection([
('auto', 'Auto'),
('manual', 'Manual'),
], string='Employee Selection Mode',index=True),
}
#create method for allotting the employees to the client
def create(self, cr, uid, values, context=None):
partner_id=values.get('partner_id')
if partner_id:
emp_ids=values.get('employee_ids')
for line in emp_ids:
self.pool.get('res.partner').write(cr, uid, partner_id, {'employee_ids': [(4, line[2])]}, context=context)
return super(sale_order, self).create(cr, uid, values, context=context)
#write method for updating the employees list
def write(self, cr, uid, ids, vals, context=None):
partner_id=vals.get('partner_id')
quotation_obj=self.browse(cr, uid, ids,context=context)
if not partner_id:
#if partner id not found, find the employee ids
emp_ids=vals.get('employee_ids')
if emp_ids:
# for line in emp_ids:
# employee_ids=line[2]
# else:#update the employee ids
# employee_ids=quotation_obj.employee_ids
for line in emp_ids:
self.pool.get('res.partner').write(cr, uid, quotation_obj.partner_id.id, {'employee_ids': [(4, line[2])]}, context=context)
if partner_id:
emp_ids=vals.get('employee_ids')
if emp_ids:
for line in emp_ids:
self.pool.get('res.partner').write(cr, uid, partner_id, {'employee_ids': [(4, line[2])]}, context=context)
return super(sale_order, self).write(cr, uid, ids, vals, context=context)
#load the employees while onchanging the customer (inherited from sale.order)
def onchange_partner_id(self, cr, uid, ids, part, emp_select, context=None):
if not part:
return {'value': {'partner_invoice_id': False, 'partner_shipping_id': False, 'payment_term': False, 'fiscal_position': False}}
part = self.pool.get('res.partner').browse(cr, uid, part, context=context)
addr = self.pool.get('res.partner').address_get(cr, uid, [part.id], ['delivery', 'invoice', 'contact'])
pricelist = part.property_product_pricelist and part.property_product_pricelist.id or False
invoice_part = self.pool.get('res.partner').browse(cr, uid, addr['invoice'], context=context)
payment_term = invoice_part.property_payment_term and invoice_part.property_payment_term.id or False
dedicated_salesman = part.user_id and part.user_id.id or uid
val = {
'partner_invoice_id': addr['invoice'],
'partner_shipping_id': addr['delivery'],
'payment_term': payment_term,
'user_id': dedicated_salesman,
}
#loading the alloted employee list from res.partner while changing the customer
emp_ids=[]
for line in part.employee_ids:
emp_ids.append(line.id)
val.update({'employee_ids':emp_ids})
delivery_onchange = self.onchange_delivery_id(cr, uid, ids, False, part.id, addr['delivery'], False, context=context)
val.update(delivery_onchange['value'])
if pricelist:
val['pricelist_id'] = pricelist
if not self._get_default_section_id(cr, uid, context=context) and part.section_id:
val['section_id'] = part.section_id.id
sale_note = self.get_salenote(cr, uid, ids, part.id, context=context)
if sale_note: val.update({'note': sale_note})
return {'value': val}
das ist mein XML-Code
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="view_order_form_inherited">
<field name="name">sale.order.form.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="before">
<field name="emp_select" widget="radio" required="1" />
</xpath>
<xpath expr="//field[@name='partner_id']" position="replace">
<field name="partner_id"
on_change="onchange_partner_id(partner_id, emp_select, context)"
domain="[('customer','=',True)]" context="{'search_default_customer':1, 'show_address': 1}"
options='{"always_reload": True}' />
</xpath>
<xpath expr="//form/sheet/notebook/page[@string='Order Lines']"
position="after">
<page name="employees" string="Employee Allocation">
<field name="employee_ids" widget="many2many"
attrs="{'readonly': [('emp_select','=', 'auto')]}">
<tree> <field name="name" /> <field name="rating_id" /> </tree>
</field>
</page>
</xpath>
</field>
</record>
</data>
</openerp>
während OnChanging die customer_id, die Seite müssen die Mitarbeiter Details mit nur zwei Felder (Name des Mitarbeiters und Mitarbeiterbewertung) in der Baumansicht laden. Die Felder werden zum ersten Mal richtig geladen, aber während ich die Kundennummer ändere, werden die Baumansichtsfelder nicht aktualisiert.