{
    "name": "Xenoptics Overtime",
    "version": "19.0.2.4.0",
    "summary": "OT request -> Manager/HOD approval -> weekly timesheet -> HR/Payroll charge calculation",
    "description": """
Full Overtime (OT) workflow, role-based across Employee / Manager / Head of
Department / HR-Payroll, per the flowchart:

- OT Request: Employee picks Date, OT Start/End Time, Supervisor (Manager),
  Head of Department, Working Place, Description, an optional work file.
  Routing is per-request (whoever the employee names on that request), not
  a company-configured chain -- Manager approves/rejects first, then Head
  of Department. Either rejection stage notifies the employee (chatter +
  email). Once Approved (HOD), the request itself is finished.
- Weekly Timesheet (hr.overtime.timesheet): every HOD-approved OT request
  is pulled into ONE weekly container per employee (Monday-Sunday),
  matching the real reference system's weekly timesheet screen -- Date/In
  Time/Out Time/Break Hrs/Hrs Work/OT Hrs/Description per day, a Weekly
  Summary total, and a single "Head of Department Authorisation" for the
  whole week (not one approval per day). The employee enters actual
  In/Out/Break per day (can differ from the original planned request
  time) and submits the week at once; the Head of Department approves or
  rejects the WHOLE WEEK together (rejection notifies the employee to
  revise and resubmit).
- HR/Payroll: reviews the (HR-editable, since HR's own write access isn't
  state-locked) weekly timeline and calculates the final OT charge --
  hours-only, no monetary rate is modeled anywhere in this system.
  "Calculate OT Charges" locks the week into Charged/Completed and
  notifies the employee of the final weekly hours.
- Business rules enforced on OT request submission (all bypassable only by
  HR/Payroll creating on an employee's behalf, mirroring xeno_leave's own
  on-behalf convention): a request can only be submitted within 3 days
  before/after the OT date; the requested OT time range can't overlap the
  employee's own regular weekday working hours
  (hr.employee.resource_calendar_id); the 12:30-1:30pm lunch window can't
  be chosen as a start/end time on a weekend/public holiday; 6:00-6:30pm
  can't be chosen as a start/end time on any day. On a weekend/public
  holiday, OT Hrs automatically deducts any overlap with those same two
  windows from the clocked In/Out span (on top of whatever Hrs Work
  already deducted via the entered Break Hours) -- "Managers must not
  approve unjustified OT" is a soft reminder, not a system-enforced rule,
  per the spec.
- Visibility: an employee sees their own requests/timesheets; a
  Manager/HOD sees ones where they're the chosen approver; HR/Payroll
  (hr_holidays.group_hr_holidays_user, this codebase's existing "Leave
  Approver"/HR-officer tier) sees and can act on everything.
- Approver notification emails, same idiom as xeno_leave's own: right
  after creation, the Supervisor gets an emailed request card with the
  full details and one-click Approve/Reject links (an HMAC-signed,
  time-boxed token -- proves the link is genuine, doesn't replace the
  real permission check); right after the Manager approves, the same
  email goes to the Head of Department, now also showing the Manager's
  own decision. The employee gets a read-only version of the same emailed
  card on rejection at either stage.
""",
    "author": "Xenoptics",
    "license": "LGPL-3",
    "category": "Human Resources",
    "depends": ["hr", "hr_holidays", "xeno_leave"],
    "data": [
        "security/ir.model.access.csv",
        "security/hr_overtime_security.xml",
        "views/hr_overtime_request_views.xml",
        "views/hr_overtime_timesheet_views.xml",
    ],
    "assets": {
        "web.assets_backend": [
            "xeno_overtime/static/src/js/no_autosave_forms.js",
            "xeno_overtime/static/src/js/overtime_summary_report_action.js",
            "xeno_overtime/static/src/xml/overtime_summary_report_templates.xml",
            "xeno_overtime/static/src/scss/overtime_summary_report.scss",
        ],
    },
    "installable": True,
    "application": False,
}
