odoo_18_Education_management/models/fee_structure.py

67 lines
3.2 KiB
Python
Raw Normal View History

2025-08-04 07:27:45 +00:00
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})]