57 lines
2.6 KiB
Python
57 lines
2.6 KiB
Python
from odoo import api, fields, models, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class EducationLibraryMember(models.Model):
|
|
_name = 'education.library.member'
|
|
_description = 'Library Member'
|
|
_rec_name = 'member_number'
|
|
|
|
member_number = fields.Char(string='Member Number', required=True, copy=False)
|
|
member_type = fields.Selection([
|
|
('student', 'Student'),
|
|
('faculty', 'Faculty'),
|
|
('staff', 'Staff')
|
|
], string='Member Type', required=True, default='student')
|
|
|
|
student_id = fields.Many2one('education.student', string='Student')
|
|
user_id = fields.Many2one('res.users', string='Related User')
|
|
library_id = fields.Many2one('education.library', string='Library', required=True)
|
|
|
|
membership_start = fields.Date(string='Membership Start Date', default=fields.Date.context_today)
|
|
membership_end = fields.Date(string='Membership End Date')
|
|
issue_limit = fields.Integer(string='Issue Limit', compute='_compute_issue_limit', store=True, readonly=False)
|
|
active = fields.Boolean(default=True)
|
|
|
|
issue_ids = fields.One2many('education.library.issue', 'member_id', string='Issues')
|
|
|
|
_member_number_unique = models.Constraint('unique(member_number)', 'Member Number must be unique!')
|
|
|
|
@api.constrains('student_id', 'member_type', 'active')
|
|
def _check_student_member(self):
|
|
for record in self:
|
|
if record.member_type == 'student' and not record.student_id:
|
|
raise ValidationError(_('Student member must reference a student record.'))
|
|
if record.student_id and record.active:
|
|
existing = self.search([('student_id', '=', record.student_id.id), ('id', '!=', record.id), ('active', '=', True)])
|
|
if existing:
|
|
raise ValidationError(_('A student can only have one active membership.'))
|
|
|
|
@api.depends('member_type')
|
|
def _compute_issue_limit(self):
|
|
# We fetch default limit from settings
|
|
student_limit = int(self.env['ir.config_parameter'].sudo().get_param('education_library.student_issue_limit', 3))
|
|
faculty_limit = int(self.env['ir.config_parameter'].sudo().get_param('education_library.faculty_issue_limit', 5))
|
|
|
|
for record in self:
|
|
if not record.issue_limit:
|
|
if record.member_type == 'student':
|
|
record.issue_limit = student_limit
|
|
else:
|
|
record.issue_limit = faculty_limit
|
|
|
|
@api.onchange('student_id')
|
|
def _onchange_student_id(self):
|
|
if self.student_id and self.student_id.portal_user_id:
|
|
self.user_id = self.student_id.portal_user_id.id
|