Reputation: 431
Odoo10 - One module is res.partner and the other is attendance. From attendance I want to edit fields from the res.partner like mobile,phone etc.
From the attendance module I can view fields from the res.partner but cannot edit or save that information. Below code works for viewing fields but not editing. The fields I have commented out was me just testing and trying to get to work.
partner_id = fields.Many2one('res.partner', string="Partner", default=_default_partner, required=True, ondelete='cascade', index=True)
check_in = fields.Datetime(string="Check In", default=fields.Datetime.now, required=True)
check_out = fields.Datetime(string="Check Out")
worked_hours = fields.Float(string='Worked Hours', compute='_compute_worked_hours', store=True, readonly=True)
# membership_stop = fields.Date(related='partner_id.membership_stop', string="Membership End")
# mobile = fields.Char("Mobile")
mobile = fields.Char(related='partner_id.mobile' , string="Mobile")
#phone = fields.Many2one('res.partner', string="Phone", index=True)
@api.onchange('partner_id', 'mobile', 'membership_stop')
def _onchange_partner(self):
self.mobile = 'self.partner_id.mobile'
self.membership_stop = 'self.partner_id.membership_stop'
XML File
<record id="view_attendance_tree" model="ir.ui.view">
<field name="name">res.partner.attendance.tree</field>
<field name="model">res.partner.attendance</field>
<field name="arch" type="xml">
<tree string="Partner attendances">
<field name="partner_id"/>
<field name="check_in"/>
<field name="check_out"/>
<field name="mobile"/>
<field name="membership_stop"/>
</tree>
</field>
</record>
Could someone explain how to edit the mobile number from attendance.
Upvotes: 1
Views: 966
Reputation: 1841
Change your fields like the following
partner_id = fields.Many2one('res.partner', string="Partner", default=_default_partner, required=True, ondelete='cascade', index=True)
check_in = fields.Datetime(string="Check In", default=fields.Datetime.now, required=True)
check_out = fields.Datetime(string="Check Out")
membership_stop = fields.Date(string="Membership End")
mobile = fields.Char(string="Mobile")
This onchange will get the 'mobile number' and 'membership' while onchanging
@api.onchange('partner_id')
def _onchange_partner(self):
if self.partner_id:
self.mobile = self.partner_id.mobile
self.membership_stop = self.partner_id.membership_stop
This create method will update the partner record while creating attendance record.
@api.model
def create(self,vals)
if vals.get('partner_id')
partner_rec = self.env["res.partner"].browse(vals.get('partner_id'))
if vals.get('mobile') and vals.get('mobile') != partner_rec.mobile:
partner_rec.mobile = vals.get('mobile')
if vals.get('membership_stop') and vals.get('membership_stop') != partner_rec.membership_stop:
partner_rec.membership_stop = vals.get('membership_stop')
#replace yourclassname
return super(YourClassName, self).create(vals)
The following write method will update the partner record while editing the record.
@api.multi
def write(self,vals)
partner_rec = False
if vals.get('partner_id')
partner_rec = self.env["res.partner"].browse(vals.get('partner_id'))
else:
partner_rec = self.partner_id
if vals.get('mobile') and vals.get('mobile') != partner_rec.mobile:
partner_rec.mobile = vals.get('mobile')
if vals.get('membership_stop') and vals.get('membership_stop') != partner_rec.membership_stop:
partner_rec.membership_stop = vals.get('membership_stop')
#replace yourclassname
return super(YourClassName, self).write(vals)
Upvotes: 1