changes
This commit is contained in:
63
fusion_clock/models/clock_shift.py
Normal file
63
fusion_clock/models/clock_shift.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2026 Nexa Systems Inc.
|
||||
# License OPL-1 (Odoo Proprietary License v1.0)
|
||||
|
||||
from odoo import models, fields
|
||||
|
||||
|
||||
class FusionClockShift(models.Model):
|
||||
_name = 'fusion.clock.shift'
|
||||
_description = 'Clock Shift Schedule'
|
||||
_order = 'sequence, name'
|
||||
_rec_name = 'name'
|
||||
|
||||
name = fields.Char(
|
||||
string='Shift Name',
|
||||
required=True,
|
||||
help="E.g. 'Morning Shift', 'Evening Shift'.",
|
||||
)
|
||||
start_time = fields.Float(
|
||||
string='Start Time',
|
||||
required=True,
|
||||
default=9.0,
|
||||
help="Shift start in 24h float (e.g. 7.0 = 7:00 AM).",
|
||||
)
|
||||
end_time = fields.Float(
|
||||
string='End Time',
|
||||
required=True,
|
||||
default=17.0,
|
||||
help="Shift end in 24h float (e.g. 15.0 = 3:00 PM).",
|
||||
)
|
||||
break_minutes = fields.Float(
|
||||
string='Break Duration (min)',
|
||||
default=30.0,
|
||||
help="Unpaid break duration in minutes for this shift.",
|
||||
)
|
||||
sequence = fields.Integer(default=10)
|
||||
company_id = fields.Many2one(
|
||||
'res.company',
|
||||
string='Company',
|
||||
default=lambda self: self.env.company,
|
||||
required=True,
|
||||
)
|
||||
active = fields.Boolean(default=True)
|
||||
color = fields.Char(string='Color', default='#3B82F6')
|
||||
employee_ids = fields.One2many(
|
||||
'hr.employee',
|
||||
'x_fclk_shift_id',
|
||||
string='Assigned Employees',
|
||||
)
|
||||
employee_count = fields.Integer(
|
||||
string='Employees',
|
||||
compute='_compute_employee_count',
|
||||
)
|
||||
|
||||
def _compute_employee_count(self):
|
||||
for rec in self:
|
||||
rec.employee_count = len(rec.employee_ids)
|
||||
|
||||
@property
|
||||
def scheduled_hours(self):
|
||||
"""Return the scheduled work hours for this shift (excluding break)."""
|
||||
raw = self.end_time - self.start_time
|
||||
return max(raw - (self.break_minutes / 60.0), 0.0)
|
||||
Reference in New Issue
Block a user