feat(fusion_planning): new module bridging fusion_clock with Odoo Planning

Adds a 'My Schedule' tab to the Fusion Clock portal that lists the current
employee's published planning.slot records, grouped by day. Reuses the
fusion_clock dark theme and reuses Odoo Planning's stock backend UI
(Gantt, send wizard, recurrence) unchanged.

- Controller /my/clock/schedule: pulls published slots in next 60 days
- Portal template with next-shift hero card, summary stats, grouped list
- Bottom-nav xpath inherits target the nav bar specifically (not the
  Recent Activity 'View All' link, which also linked to /my/clock/timesheets)
- 4-tab nav fits via reduced padding and flex sizing

Module depends on stock 'planning' (Enterprise) + fusion_clock.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-05-06 22:16:02 -04:00
parent 3b7dba32a4
commit 19c1cbdf15
7 changed files with 469 additions and 0 deletions

View File

@@ -0,0 +1,115 @@
/* Fusion Planning - Portal Schedule
* Inherits Fusion Clock dark-theme tokens (--fclk-card, --fclk-green, etc.)
*/
/* ---- 4-tab nav fit ---- */
.fclk-nav-bar {
justify-content: space-around !important;
}
.fclk-nav-item {
padding: 8px 12px !important;
flex: 1;
max-width: 96px;
}
/* ---- Next Shift hero card ---- */
.fpl-next-shift {
text-align: center;
padding: 20px 16px;
}
.fpl-next-label {
font-size: 11px;
color: var(--fclk-text-dim);
text-transform: uppercase;
letter-spacing: 0.08em;
margin-bottom: 6px;
}
.fpl-next-date {
font-size: 18px;
color: var(--fclk-text);
font-weight: 600;
margin-bottom: 4px;
}
.fpl-next-time {
font-size: 32px;
color: var(--fclk-green);
font-weight: 700;
letter-spacing: 0.02em;
margin-bottom: 6px;
}
.fpl-next-role {
display: inline-block;
font-size: 12px;
color: var(--fclk-text-dim);
background: rgba(16, 185, 129, 0.08);
border: 1px solid rgba(16, 185, 129, 0.18);
padding: 4px 12px;
border-radius: 12px;
}
/* ---- Empty state ---- */
.fpl-empty-card {
text-align: center;
padding: 28px 16px;
}
.fpl-empty-icon {
margin-bottom: 12px;
opacity: 0.7;
}
.fpl-empty-title {
font-size: 16px;
color: var(--fclk-text);
font-weight: 600;
margin-bottom: 6px;
}
.fpl-empty-sub {
font-size: 13px;
color: var(--fclk-text-dim);
}
/* ---- Group headers ---- */
.fpl-group {
margin-bottom: 18px;
}
.fpl-group-title {
font-size: 13px;
color: var(--fclk-text-dim);
text-transform: uppercase;
letter-spacing: 0.08em;
font-weight: 600;
margin: 12px 16px 8px;
}
.fpl-list {
display: flex;
flex-direction: column;
gap: 8px;
}
/* ---- Shift item polish ---- */
.fpl-shift-item .fclk-recent-info {
display: flex;
flex-direction: column;
gap: 2px;
}
.fpl-shift-note {
font-size: 11px;
color: var(--fclk-text-dim);
margin-top: 2px;
font-style: italic;
}
/* ---- Bottom padding so nav doesn't cover last shift ---- */
.fclk-container {
padding-bottom: 80px;
}