# -*- coding: utf-8 -*- # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). from dateutil.relativedelta import relativedelta from odoo import fields, models, api STATUS = [ ("minor", "Minor"), ("major", "Major"), ] class ResPartner(models.Model): _inherit = "res.partner" age = fields.Integer(store=True) majority_date = fields.Date( string="Majority date", compute="_get_majority", compute_sudo=True, store=True, ) majority_years = fields.Integer( string="Majority years", compute="_get_majority", compute_sudo=True, store=True, ) is_major = fields.Boolean( string="Is major", compute="_get_majority", compute_sudo=True, ) legal_status = fields.Selection( selection=STATUS, string="Legal status", compute="_get_legal_status", ) emancipation_date = fields.Date( string="Emancipation", readonly=True, ) is_emancipated = fields.Boolean( string="Is emancipated", compute="_get_majority", compute_sudo=True, store=True, ) @api.depends( "nationality_id", "nationality_id.majority_age", "birthdate_date", "emancipation_date", ) def _get_majority(self): for partner in self: country_age = ( partner.nationality_id.majority_age if partner.nationality_id else False ) birth = partner.birthdate_date emancipation = partner.emancipation_date major = False today = fields.Date.today() if emancipation: major = emancipation <= today partner.is_emancipated = True partner.majority_date = emancipation partner.is_major = major partner.majority_years = ( relativedelta(today, emancipation).years if major else relativedelta(emancipation, today).years ) elif country_age and birth: majority = birth + relativedelta(years=country_age) major = majority <= today partner.is_emancipated = False partner.majority_date = majority partner.is_major = major partner.majority_years = ( relativedelta(today, majority).years if major else relativedelta(majority, today).years ) else: partner.is_emancipated = False partner.majority_date = False partner.is_major = False partner.majority_years = 0 @api.depends("is_major") def _get_legal_status(self): for partner in self: partner.legal_status = "major" if partner.is_major else "minor"