# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, models, tools class Partner(models.Model): _inherit = ['res.partner'] street_name = fields.Char( 'Street Name', compute='_compute_street_data', inverse='_inverse_street_data', store=True) street_number = fields.Char( 'House', compute='_compute_street_data', inverse='_inverse_street_data', store=True) street_number2 = fields.Char( 'Door', compute='_compute_street_data', inverse='_inverse_street_data', store=True) city_id = fields.Many2one(comodel_name='res.city', string='City ID') country_enforce_cities = fields.Boolean(related='country_id.enforce_cities') @api.model def _address_fields(self): return super()._address_fields() + ['city_id'] def _inverse_street_data(self): """ update self.street based on street_name, street_number and street_number2 """ for partner in self: street = ((partner.street_name or '') + " " + (partner.street_number or '')).strip() if partner.street_number2: street = street + " - " + partner.street_number2 partner.street = street @api.depends('street') def _compute_street_data(self): """Splits street value into sub-fields. Recomputes the fields of STREET_FIELDS when `street` of a partner is updated""" for partner in self: partner.update(tools.street_split(partner.street)) def _get_street_split(self): self.ensure_one() return { 'street_name': self.street_name, 'street_number': self.street_number, 'street_number2': self.street_number2 } @api.onchange('city_id') def _onchange_city_id(self): if self.city_id: self.city = self.city_id.name self.zip = self.city_id.zipcode self.state_id = self.city_id.state_id elif self._origin: self.city = False self.zip = False self.state_id = False