125 lines
4.3 KiB
Python
125 lines
4.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2026 Nexa Systems Inc.
|
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
|
|
|
from odoo import models, fields, api
|
|
|
|
|
|
class ResConfigSettings(models.TransientModel):
|
|
_inherit = 'res.config.settings'
|
|
|
|
# -- Work Schedule --
|
|
fclk_default_clock_in_time = fields.Float(
|
|
string='Default Clock-In Time',
|
|
config_parameter='fusion_clock.default_clock_in_time',
|
|
default=9.0,
|
|
help="Default scheduled clock-in time (24h format, e.g. 9.0 = 9:00 AM).",
|
|
)
|
|
fclk_default_clock_out_time = fields.Float(
|
|
string='Default Clock-Out Time',
|
|
config_parameter='fusion_clock.default_clock_out_time',
|
|
default=17.0,
|
|
help="Default scheduled clock-out time (24h format, e.g. 17.0 = 5:00 PM).",
|
|
)
|
|
|
|
# -- Break --
|
|
fclk_default_break_minutes = fields.Float(
|
|
string='Default Break Duration (min)',
|
|
config_parameter='fusion_clock.default_break_minutes',
|
|
default=30.0,
|
|
help="Default unpaid break duration in minutes.",
|
|
)
|
|
fclk_auto_deduct_break = fields.Boolean(
|
|
string='Auto-Deduct Break',
|
|
config_parameter='fusion_clock.auto_deduct_break',
|
|
default=True,
|
|
help="Automatically deduct break from worked hours on clock-out.",
|
|
)
|
|
fclk_break_threshold_hours = fields.Float(
|
|
string='Break Threshold (hours)',
|
|
config_parameter='fusion_clock.break_threshold_hours',
|
|
default=5.0,
|
|
help="Only deduct break if shift is longer than this many hours.",
|
|
)
|
|
|
|
# -- Grace Period & Auto Clock-Out --
|
|
fclk_grace_period_minutes = fields.Float(
|
|
string='Grace Period (min)',
|
|
config_parameter='fusion_clock.grace_period_minutes',
|
|
default=15.0,
|
|
help="Minutes allowed after scheduled end before auto clock-out.",
|
|
)
|
|
fclk_enable_auto_clockout = fields.Boolean(
|
|
string='Enable Auto Clock-Out',
|
|
config_parameter='fusion_clock.enable_auto_clockout',
|
|
default=True,
|
|
)
|
|
fclk_max_shift_hours = fields.Float(
|
|
string='Max Shift Length (hours)',
|
|
config_parameter='fusion_clock.max_shift_hours',
|
|
default=12.0,
|
|
help="Maximum shift length before auto clock-out (safety net).",
|
|
)
|
|
|
|
# -- Penalties --
|
|
fclk_enable_penalties = fields.Boolean(
|
|
string='Enable Penalty Tracking',
|
|
config_parameter='fusion_clock.enable_penalties',
|
|
default=True,
|
|
)
|
|
fclk_penalty_grace_minutes = fields.Float(
|
|
string='Penalty Grace (min)',
|
|
config_parameter='fusion_clock.penalty_grace_minutes',
|
|
default=5.0,
|
|
help="Minutes of grace before a late/early penalty is recorded.",
|
|
)
|
|
|
|
# -- Pay Period --
|
|
fclk_pay_period_type = fields.Selection(
|
|
[
|
|
('weekly', 'Weekly'),
|
|
('biweekly', 'Bi-Weekly'),
|
|
('semi_monthly', 'Semi-Monthly'),
|
|
('monthly', 'Monthly'),
|
|
],
|
|
string='Pay Period',
|
|
config_parameter='fusion_clock.pay_period_type',
|
|
default='biweekly',
|
|
)
|
|
fclk_pay_period_start = fields.Char(
|
|
string='Pay Period Anchor Date',
|
|
config_parameter='fusion_clock.pay_period_start',
|
|
help="Start date for pay period calculations (YYYY-MM-DD format, anchor for weekly/biweekly).",
|
|
)
|
|
|
|
# -- Reports --
|
|
fclk_auto_generate_reports = fields.Boolean(
|
|
string='Auto-Generate Reports',
|
|
config_parameter='fusion_clock.auto_generate_reports',
|
|
default=True,
|
|
)
|
|
fclk_report_recipient_emails = fields.Char(
|
|
string='Report Recipient Emails',
|
|
config_parameter='fusion_clock.report_recipient_emails',
|
|
help="Comma-separated email addresses for batch report delivery.",
|
|
)
|
|
fclk_send_employee_reports = fields.Boolean(
|
|
string='Send Employee Copies',
|
|
config_parameter='fusion_clock.send_employee_reports',
|
|
default=True,
|
|
help="Send individual report copies to each employee's work email.",
|
|
)
|
|
|
|
# -- Google Maps --
|
|
fclk_google_maps_api_key = fields.Char(
|
|
string='Google Maps API Key',
|
|
config_parameter='fusion_clock.google_maps_api_key',
|
|
)
|
|
|
|
# -- Sounds --
|
|
fclk_enable_sounds = fields.Boolean(
|
|
string='Enable Clock Sounds',
|
|
config_parameter='fusion_clock.enable_sounds',
|
|
default=True,
|
|
)
|