feat(plant_kanban): post-shop states visible on board (Tasks 9-13)
Controller (plant_kanban.py):
- Widen domain: state IN (confirmed, in_progress, awaiting_cert,
awaiting_ship). Done jobs still drop off.
- _resolve_card_area: state=awaiting_cert → 'inspection' column,
state=awaiting_ship → 'shipping' column. State drives column
regardless of recipe shape.
- _state_chip: 🏷️ Awaiting CoC (amber) + 📦 Ready to ship (green).
- _SORT_PRIORITY: awaiting_cert=3.5, awaiting_ship=8.5.
- KPI dict: awaiting_cert + awaiting_ship counts.
- Filter clauses for the two new chips.
Model (fp_job.py):
- _compute_card_state handles new states in BOTH branches: the
no-active-step early return (where awaiting_cert/ship cards
land — all steps terminal) AND the per-step branch (defensive).
- _compute_mini_timeline_json: awaiting_cert paints inspection
dot 'current'; awaiting_ship paints shipping dot 'current'.
All earlier dots show 'done'.
SCSS (_plant_tokens.scss + _plant_card.scss):
- New tokens for amber (cert) + green (ship), light + dark variants
via the existing $o-webclient-color-scheme compile-time branch.
- .state-awaiting_cert / .state-awaiting_ship modifier classes
match the existing border-left pattern.
XML (plant_kanban.xml):
- Two new KPI tiles + two new filter chips wired to the state
filter clauses.
Manifest: fusion_plating_shopfloor 19.0.33.2.0 → 19.0.34.0.0.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -34,6 +34,12 @@ $_plant-noparts-border-hex: #6c757d;
|
||||
$_plant-done-bg-hex: #f0f9f4;
|
||||
$_plant-done-border-hex: #28a745;
|
||||
|
||||
// Spec 2026-05-25 — post-shop states
|
||||
$_plant-awaiting-cert-bg-hex: #fff3cd;
|
||||
$_plant-awaiting-cert-border-hex: #ff9800;
|
||||
$_plant-awaiting-ship-bg-hex: #d1f1d4;
|
||||
$_plant-awaiting-ship-border-hex: #2e7d32;
|
||||
|
||||
// === Dark-mode overrides (compile-time branch per project rule) ===
|
||||
@if $o-webclient-color-scheme == dark {
|
||||
$_plant-bg-hex: #1a1d21 !global;
|
||||
@@ -51,6 +57,12 @@ $_plant-done-border-hex: #28a745;
|
||||
$_plant-locked-bg-hex: #2d3138 !global;
|
||||
$_plant-noparts-bg-hex: #2d3138 !global;
|
||||
$_plant-done-bg-hex: #14281a !global;
|
||||
|
||||
// Spec 2026-05-25 — post-shop states (dark)
|
||||
$_plant-awaiting-cert-bg-hex: #3a2f15 !global;
|
||||
$_plant-awaiting-cert-border-hex: #ffb74d !global;
|
||||
$_plant-awaiting-ship-bg-hex: #1a2d1f !global;
|
||||
$_plant-awaiting-ship-border-hex: #66bb6a !global;
|
||||
}
|
||||
|
||||
// === CSS-custom-property wrappers so future themes can override ===
|
||||
@@ -78,3 +90,9 @@ $plant-noparts-bg: var(--fp-plant-noparts-bg, $_plant-noparts-bg-hex);
|
||||
$plant-noparts-border: var(--fp-plant-noparts-border, $_plant-noparts-border-hex);
|
||||
$plant-done-bg: var(--fp-plant-done-bg, $_plant-done-bg-hex);
|
||||
$plant-done-border: var(--fp-plant-done-border, $_plant-done-border-hex);
|
||||
|
||||
// Spec 2026-05-25 — post-shop states
|
||||
$plant-awaiting-cert-bg: var(--fp-plant-awaiting-cert-bg, $_plant-awaiting-cert-bg-hex);
|
||||
$plant-awaiting-cert-border: var(--fp-plant-awaiting-cert-border, $_plant-awaiting-cert-border-hex);
|
||||
$plant-awaiting-ship-bg: var(--fp-plant-awaiting-ship-bg, $_plant-awaiting-ship-bg-hex);
|
||||
$plant-awaiting-ship-border: var(--fp-plant-awaiting-ship-border, $_plant-awaiting-ship-border-hex);
|
||||
|
||||
@@ -66,6 +66,17 @@
|
||||
border-left: 4px solid $plant-done-border;
|
||||
padding-left: 7px;
|
||||
}
|
||||
// Spec 2026-05-25 — post-shop states
|
||||
&.state-awaiting_cert {
|
||||
background: $plant-awaiting-cert-bg;
|
||||
border-left: 4px solid $plant-awaiting-cert-border;
|
||||
padding-left: 7px;
|
||||
}
|
||||
&.state-awaiting_ship {
|
||||
background: $plant-awaiting-ship-bg;
|
||||
border-left: 4px solid $plant-awaiting-ship-border;
|
||||
padding-left: 7px;
|
||||
}
|
||||
&.overdue:not(.mine):not(.state-on_hold):not(.state-bake_due) {
|
||||
border-left: 4px solid $plant-hold-border;
|
||||
padding-left: 7px;
|
||||
|
||||
@@ -47,6 +47,17 @@
|
||||
kind="'urgent'"
|
||||
active="!!state.filters.on_hold"
|
||||
onClick="() => this.toggleFilter('on_hold')"/>
|
||||
<!-- Spec 2026-05-25 — post-shop state tiles -->
|
||||
<FpKpiTile value="state.data.kpis.awaiting_cert"
|
||||
label="'Awaiting CoC'"
|
||||
kind="'warn'"
|
||||
active="!!state.filters.awaiting_cert"
|
||||
onClick="() => this.toggleFilter('awaiting_cert')"/>
|
||||
<FpKpiTile value="state.data.kpis.awaiting_ship"
|
||||
label="'Ready to Ship'"
|
||||
kind="'good'"
|
||||
active="!!state.filters.awaiting_ship"
|
||||
onClick="() => this.toggleFilter('awaiting_ship')"/>
|
||||
<FpKpiTile value="state.data.kpis.overdue"
|
||||
label="'Overdue'"
|
||||
kind="'urgent'"
|
||||
@@ -78,6 +89,13 @@
|
||||
<FpFilterChip label="'FAIR'"
|
||||
active="!!state.filters.fair"
|
||||
onToggle="() => this.toggleFilter('fair')"/>
|
||||
<!-- Spec 2026-05-25 — post-shop state chips -->
|
||||
<FpFilterChip label="'Awaiting CoC'"
|
||||
active="!!state.filters.awaiting_cert"
|
||||
onToggle="() => this.toggleFilter('awaiting_cert')"/>
|
||||
<FpFilterChip label="'Ready to Ship'"
|
||||
active="!!state.filters.awaiting_ship"
|
||||
onToggle="() => this.toggleFilter('awaiting_ship')"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user