67 lines
3.2 KiB
Python
67 lines
3.2 KiB
Python
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})]
|