odoo_18_Education_management/models/school_subject.py

88 lines
3.9 KiB
Python

from odoo import models, fields, api
from odoo.exceptions import UserError
class SchoolSubject(models.Model):
_name = 'school.subject'
_description = 'Subject'
name = fields.Selection([
('math', 'Math'),
('english', 'English'),
('science', 'Science'),
('physical_science', 'Physical Science'),
('life_science', 'Life Science'),
('geography', 'Geography'),
('history', 'History'),
('political_science', 'Political Science'),
('economic_science', 'Economic Science'),
('physics', 'Physics'),
('chemistry', 'Chemistry'),
('biology', 'Biology'),
('it', 'IT'),
('computer_science', 'Computer Science'),
('mil', 'MIL'),
('odia', 'Odia'),
('english_grammar', 'English Grammar'),
('drawing', 'Drawing'),
('odia_grammar', 'Odia Grammar'),
], string="Subject", required=True)
class_name = fields.Selection([
('Class 1', 'Class 1'),
('Class 2', 'Class 2'),
('Class 3', 'Class 3'),
('Class 4', 'Class 4'),
('Class 5', 'Class 5'),
('Class 6', 'Class 6'),
('Class 7', 'Class 7'),
('Class 8', 'Class 8'),
('Class 9', 'Class 9'),
('Class 10', 'Class 10'),
('Class 11', 'Class 11'),
('Class 12', 'Class 12'),
], string="Class Name", required=True)
lesson_plan = fields.Text(string='Lesson Plan')
teacher = fields.Many2one('res.users', string='Teacher')
lesson_plan_line_ids = fields.One2many('school.subject.lesson', 'subject_id', string='Lesson Plans')
teacher_info_line_ids = fields.One2many('school.subject.teacher.info', 'subject_id', string="Teacher Info")
@api.depends('class_name')
def _compute_subjects(self):
subject_mapping = {
'Class 1': ['Math', 'English', 'Science', 'MIL'],
'Class 2': ['Math', 'English', 'Science', 'Drawing', 'MIL'],
'Class 3': ['Math', 'English', 'Science', 'Odia', 'Drawing', 'English Grammar'],
'Class 4': ['Math', 'English', 'Science', 'Odia', 'Drawing', 'English Grammar'],
'Class 5': ['Math', 'English', 'Science', 'Odia', 'History', 'Drawing', 'English Grammar'],
'Class 6': ['Math', 'English', 'Science', 'Geography', 'MIL', 'English Grammar'],
'Class 7': ['Math', 'English', 'Science', 'Political Science', 'MIL', 'English Grammar', 'History', 'Geography'],
'Class 8': ['Math', 'English', 'Science', 'Political Science', 'MIL', 'English Grammar', 'History', 'Geography'],
'Class 9': ['Math', 'English', 'Physical Science', 'Life Science', 'English Grammar', 'Economic Science', 'History', 'Geography'],
'Class 10': ['Math', 'English', 'Physical Science', 'Life Science', 'English Grammar', 'Economic Science', 'History', 'Geography'],
'Class 11': ['Physics', 'Chemistry', 'Math', 'Biology', 'English', 'English Grammar', 'Computer Science', 'MIL', 'Economic Science'],
'Class 12': ['Physics', 'Chemistry', 'Math', 'Biology', 'Computer Science', 'English Grammar', 'English', 'MIL', 'Economic Science'],
}
for rec in self:
rec.subject_list = ', '.join(subject_mapping.get(rec.class_name, []))
def action_generate_subjects(self):
if not self.class_name:
raise UserError("Please select a class name first.")
existing_subjects = self.search([
('class_name', '=', self.class_name)
]).mapped('name')
subject_list = self.get_subjects_by_class().get(self.class_name, [])
new_subjects = [sub for sub in subject_list if sub not in existing_subjects]
for subject in new_subjects:
self.create({
'class_name': self.class_name,
'name': subject,
})
if not new_subjects:
raise UserError("All subjects for this class already exist.")