2026-09-15 10:47:19 +05:30

65 lines
2.6 KiB
Python

# pyrefly: ignore [missing-import]
from odoo import api, fields, models
# pyrefly: ignore [missing-import]
from odoo.exceptions import ValidationError
class EducationFeeStructure(models.Model):
_name = 'education.fee.structure'
_description = 'Fee Structure'
_order = 'name'
name = fields.Char(required=True, string='Structure Name')
academic_year_id = fields.Many2one('education.academic.year', string='Academic Year', required=True, index=True)
level_id = fields.Many2one('education.academic.level', string='Academic Level', required=True, index=True)
program_id = fields.Many2one('education.program', string='Program', index=True)
department_id = fields.Many2one('education.department', string='Department', index=True)
semester_id = fields.Many2one('education.semester', string='Semester', index=True)
currency_id = fields.Many2one(
'res.currency',
string='Currency',
required=True,
default=lambda self: self.env.company.currency_id,
)
line_ids = fields.One2many('education.fee.structure.line', 'fee_structure_id', string='Fee Lines', copy=True)
active = fields.Boolean(default=True)
company_id = fields.Many2one(
'res.company',
string='Company',
required=True,
default=lambda self: self.env.company,
index=True,
)
class EducationFeeStructureLine(models.Model):
_name = 'education.fee.structure.line'
_description = 'Fee Structure Line'
_order = 'sequence, id'
fee_structure_id = fields.Many2one('education.fee.structure', string='Fee Structure', required=True, ondelete='cascade')
fee_type_id = fields.Many2one('education.fee.type', string='Fee Type', required=True)
currency_id = fields.Many2one('res.currency', related='fee_structure_id.currency_id', store=True)
amount = fields.Monetary(string='Amount', required=True, currency_field='currency_id')
mandatory = fields.Boolean(string='Mandatory', default=True)
sequence = fields.Integer(string='Sequence', default=10)
active = fields.Boolean(default=True)
company_id = fields.Many2one(
'res.company',
related='fee_structure_id.company_id',
store=True,
index=True,
)
@api.onchange('fee_type_id')
def _onchange_fee_type(self):
if self.fee_type_id:
self.amount = self.fee_type_id.amount
self.mandatory = self.fee_type_id.mandatory
@api.constrains('amount')
def _check_amount(self):
for rec in self:
if rec.amount < 0:
raise ValidationError('Line amount cannot be negative.')