Skip to content

[19.0][RFC] hr_shift: support multiple shifts per employee per day (split shifts) #39

Description

@XtremXpert

Context

hr_shift structurally assumes one hr.shift.planning.line per employee per day: _generate_shift_lines creates exactly one line per weekday, the assignment kanban maps one template to that line, and days_data/state computations rely on that uniqueness.

This fits many teams, but not two common scheduling realities:

  • Split shifts: home-care and cleaning organizations commonly schedule 7:00-11:00 + 16:00-20:00 on the same day for the same employee.
  • Double shifts: 24/7 residential facilities occasionally need an employee to cover two contiguous shifts (day + evening).

What we considered

We maintain a module suite on top of hr_shift (coverage rules, open-shift claims, swaps, replacement cascades — pending the 19.0 migration in #38). We considered relaxing the one-line-per-day assumption in an extension module, but concluded it would fight the base module: line generation, the day-colored kanban cards (days_data serialized field), conflict detection and downstream logic all assume day uniqueness. An extension would be fragile against upstream evolutions.

Proposal (for discussion)

  1. Make the day-line relationship explicitly 1-N: keep generating one line per day by default, but allow adding extra lines on a day (new action_add_extra_line + relaxed constraints).
  2. Conflict detection becomes overlap-based (template start/end times) instead of day-based.
  3. days_data/kanban render a day as a set of templates rather than a single color.
  4. Related fix in the same area: duration_hours is currently negative for shifts crossing midnight (_compute_shift_time combines start and end on the same date) — any overlap-based conflict detection needs that fixed first. We can submit a separate PR for it.

Would the maintainers be open to this direction for 19.0 (or master)? We are happy to implement and test it upstream — we'd rather build it here than diverge.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions