odex30_standard/to_attendance_device/models/attendance_state.py

50 lines
2.0 KiB
Python

from odoo import models, fields, api
class AttendanceState(models.Model):
_name = 'attendance.state'
_inherit = 'mail.thread'
_description = 'Attendance State'
name = fields.Char(string='Name', help="The name of the attendance state. E.g. Login, Logout, Overtime Start, etc", required=True, translate=True,
tracking=True)
activity_id = fields.Many2one('attendance.activity', string='Activity', required=True,
help="Attendance activity, e.g. Normal Working, Overtime, etc", tracking=True)
code = fields.Integer(string='Code Number', help="An integer to express the state code", required=True, tracking=True)
type = fields.Selection([('checkin', 'Check-in'),
('checkout', 'Check-out')], string='Activity Type', required=True, tracking=True)
active = fields.Boolean(default=True)
_sql_constraints = [
('code_unique',
'UNIQUE(code)',
"The Code must be unique!"),
('name_activity_id_unique',
'UNIQUE(name, activity_id)',
"The state name must be unique within the same activity!"),
('name_activity_id_unique',
'UNIQUE(type, activity_id)',
"The Activity Type and Activity must be unique! Please recheck if you have previously defined an attendance status with the same Activity Type and Activity"),
]
def name_get(self):
"""
name_get that supports displaying tags with their code as prefix
"""
result = []
for r in self:
result.append((r.id, '[' + r.activity_id.name + '] ' + r.name))
return result
@api.model
def name_search(self, name, args=None, operator='ilike', limit=100):
"""
name search that supports searching by tag code
"""
args = args or []
domain = []
if name:
domain = ['|', ('activity_id.name', '=ilike', name + '%'), ('name', operator, name)]
state = self.search(domain + args, limit=limit)
return state.name_get()