ui(jobs): Finish & Next becomes pulsing vivid-green icon

User wanted Finish & Next to drop its text label like the other row
buttons, but stand out visually as the primary action. Solution:
icon-only with a vivid green color and a subtle pulse animation.

- New SCSS: fp_finish_btn.scss with branch-on-$o-webclient-color-
  scheme so the dark bundle uses green-400 (pops on dark bg) and
  light bundle uses green-600. Pulse animation 1.8s ease-in-out
  infinite, scale 1.0 ↔ 1.18. Pauses on hover/focus so the click
  target is steady.
- Registered in both web.assets_backend and web.assets_web_dark
  per the project's dark-mode rule (CLAUDE.md).
- View: string="Finish & Next" → title="Finish & Next",
  class drops "text-primary", gains "o_fp_finish_btn".

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-05-12 01:05:28 -04:00
parent 30a1141997
commit 798458c834
3 changed files with 47 additions and 3 deletions

View File

@@ -3,7 +3,7 @@
# License OPL-1 (Odoo Proprietary License v1.0) # License OPL-1 (Odoo Proprietary License v1.0)
{ {
'name': 'Fusion Plating — Native Jobs', 'name': 'Fusion Plating — Native Jobs',
'version': '19.0.8.20.8', 'version': '19.0.8.20.9',
'category': 'Manufacturing/Plating', 'category': 'Manufacturing/Plating',
'summary': 'Native plating job model — replaces mrp.production / mrp.workorder bridge.', 'summary': 'Native plating job model — replaces mrp.production / mrp.workorder bridge.',
'author': 'Nexa Systems Inc.', 'author': 'Nexa Systems Inc.',
@@ -84,12 +84,14 @@ full design rationale and §6.2 of the implementation plan for task list.
'web.assets_backend': [ 'web.assets_backend': [
'fusion_plating_jobs/static/src/scss/fp_step_quick_look.scss', 'fusion_plating_jobs/static/src/scss/fp_step_quick_look.scss',
'fusion_plating_jobs/static/src/scss/fp_record_inputs_dialog.scss', 'fusion_plating_jobs/static/src/scss/fp_record_inputs_dialog.scss',
'fusion_plating_jobs/static/src/scss/fp_finish_btn.scss',
'fusion_plating_jobs/static/src/js/fp_record_inputs_dialog.js', 'fusion_plating_jobs/static/src/js/fp_record_inputs_dialog.js',
'fusion_plating_jobs/static/src/xml/fp_record_inputs_dialog.xml', 'fusion_plating_jobs/static/src/xml/fp_record_inputs_dialog.xml',
], ],
'web.assets_web_dark': [ 'web.assets_web_dark': [
'fusion_plating_jobs/static/src/scss/fp_step_quick_look.scss', 'fusion_plating_jobs/static/src/scss/fp_step_quick_look.scss',
'fusion_plating_jobs/static/src/scss/fp_record_inputs_dialog.scss', 'fusion_plating_jobs/static/src/scss/fp_record_inputs_dialog.scss',
'fusion_plating_jobs/static/src/scss/fp_finish_btn.scss',
'fusion_plating_jobs/static/src/js/fp_record_inputs_dialog.js', 'fusion_plating_jobs/static/src/js/fp_record_inputs_dialog.js',
'fusion_plating_jobs/static/src/xml/fp_record_inputs_dialog.xml', 'fusion_plating_jobs/static/src/xml/fp_record_inputs_dialog.xml',
], ],

View File

@@ -0,0 +1,42 @@
// Pulsing vivid-green Finish & Next icon for the embedded step list.
// Compiled into both web.assets_backend (bright) and web.assets_web_dark
// (dark) — see fusion-plating/CLAUDE.md for the SCSS branch convention.
$o-webclient-color-scheme: bright !default;
// Vivid finish-button colour. Branch at compile time so the dark
// variant uses a lighter green that pops against the dark backdrop.
$_fp_finish_color_hex: #16a34a; // Tailwind green-600
@if $o-webclient-color-scheme == dark {
$_fp_finish_color_hex: #4ade80 !global; // green-400
}
$fp-finish-color: var(--fp-finish-color, $_fp_finish_color_hex);
.o_fp_finish_btn {
color: $fp-finish-color !important;
i.fa, i.oi {
font-size: 1.25rem;
line-height: 1;
animation: fp_finish_pulse 1.8s ease-in-out infinite;
transform-origin: center center;
will-change: transform;
}
// Pause the pulse on hover so the click target is steady.
&:hover, &:focus {
color: $fp-finish-color !important;
opacity: 0.85;
i.fa, i.oi {
animation: none;
}
}
}
@keyframes fp_finish_pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.18); }
}

View File

@@ -154,8 +154,8 @@
class="btn-link text-success" class="btn-link text-success"
invisible="state != 'paused'"/> invisible="state != 'paused'"/>
<button name="action_finish_and_advance" type="object" <button name="action_finish_and_advance" type="object"
string="Finish &amp; Next" icon="fa-check-circle" title="Finish &amp; Next" icon="fa-check-circle"
class="btn-link text-primary" class="btn-link o_fp_finish_btn"
invisible="state != 'in_progress'"/> invisible="state != 'in_progress'"/>
<!-- Secondary actions — small icons only. Pause is <!-- Secondary actions — small icons only. Pause is