from odoo import models, fields, api class SchoolFeeStructure(models.Model): _name = 'school.fee.structure' _description = 'Fee Structure' name = fields.Char(string="Structure Name", compute='_compute_name', store=True) class_name = fields.Selection([ ('1', 'Class 1'), ('2', 'Class 2'), ('3', 'Class 3'), ('4', 'Class 4'), ('5', 'Class 5'), ('6', 'Class 6'), ('7', 'Class 7'), ('8', 'Class 8'), ('9', 'Class 9'), ('10', 'Class 10'), ('11', 'Class 11'), ('12', 'Class 12'), ], string="Class", required=True) tuition_fee = fields.Float(string="Tuition Fees") admission_fee = fields.Float(string="Admission Charges") annual_charge = fields.Float(string="Annual Charges") total_fee = fields.Float(string="Total Fee", compute="_compute_total_fee", store=True) component_line_ids = fields.One2many('school.fee.component', 'structure_id', string="Fee Components", readonly=True) @api.depends('class_name') def _compute_name(self): for rec in self: rec.name = f"Fee Structure for Class {rec.class_name}" if rec.class_name else "" @api.depends('tuition_fee', 'admission_fee', 'annual_charge') def _compute_total_fee(self): for rec in self: rec.total_fee = (rec.tuition_fee or 0) + (rec.admission_fee or 0) + (rec.annual_charge or 0) @api.onchange('class_name') def _onchange_class_name(self): fee_data = { '1': {'admission_fee': 5000, 'tuition_fee': 72000, 'annual_charge': 1000}, '2': {'admission_fee': 6000, 'tuition_fee': 84000, 'annual_charge': 1000}, '3': {'admission_fee': 6500, 'tuition_fee': 90000, 'annual_charge': 1000}, '4': {'admission_fee': 7000, 'tuition_fee': 96000, 'annual_charge': 1000}, '5': {'admission_fee': 7500, 'tuition_fee': 100000, 'annual_charge': 1000}, '6': {'admission_fee': 8000, 'tuition_fee': 105000, 'annual_charge': 1000}, '7': {'admission_fee': 8500, 'tuition_fee': 110000, 'annual_charge': 1000}, '8': {'admission_fee': 9000, 'tuition_fee': 115000, 'annual_charge': 1000}, '9': {'admission_fee': 9500, 'tuition_fee': 120000, 'annual_charge': 1000}, '10': {'admission_fee': 10000, 'tuition_fee': 125000, 'annual_charge': 1000}, '11': {'admission_fee': 11000, 'tuition_fee': 130000, 'annual_charge': 1000}, '12': {'admission_fee': 12000, 'tuition_fee': 135000, 'annual_charge': 1000}, } if self.class_name: values = fee_data.get(self.class_name, {}) self.admission_fee = values.get('admission_fee', 0) self.tuition_fee = values.get('tuition_fee', 0) self.annual_charge = values.get('annual_charge', 0) self.component_line_ids = [(5, 0, 0)] # Clear self.component_line_ids = [(0, 0, {'component_name': 'Admission Charges', 'amount': self.admission_fee}), (0, 0, {'component_name': 'Tuition Fees', 'amount': self.tuition_fee}), (0, 0, {'component_name': 'Annual Charges', 'amount': self.annual_charge})]