feat(configurator): Sub 3 Phase B — part-scoped Process Composer client action + part form Compose button
- Add fp_part_composer_controller with 3 JSON-RPC endpoints:
/fp/part/composer/state, /fp/part/composer/templates,
/fp/part/composer/load_template (deep-clones a shared template
into a part-owned tree inside a cr.savepoint, sets
fp.part.catalog.default_process_id atomically)
- _clone_subtree copies name/sequence/opt_in_out/treatment_uom plus
description/notes/icon/color/timing/behaviour/work_center/process_type
and stamps part_catalog_id + cloned_from_id on every node
- Add fp_part_process_composer OWL client action (JS + XML + SCSS):
picks template from dropdown, clones, hands off to existing
fp_recipe_tree_editor via context={recipe_id, part_id}
- Add Process tab on part form with readonly default_process_id
field and Compose button calling action_open_part_composer
- Register new assets in web.assets_backend, bump configurator
version to 19.0.11.0.0
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
// Copyright 2026 Nexa Systems Inc.
|
||||
// License OPL-1 (Odoo Proprietary License v1.0)
|
||||
// Part of the Fusion Plating product family.
|
||||
//
|
||||
// Sub 3 — Process Composer styles.
|
||||
|
||||
.o_fp_part_composer {
|
||||
padding: 16px;
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
|
||||
&_state {
|
||||
padding: 32px;
|
||||
text-align: center;
|
||||
color: var(--bs-secondary-color, #666);
|
||||
|
||||
.fa {
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
&_error {
|
||||
color: var(--bs-danger, #c00);
|
||||
}
|
||||
|
||||
&_header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
margin-bottom: 24px;
|
||||
padding-bottom: 16px;
|
||||
border-bottom: 1px solid var(--bs-border-color, #e0e0e0);
|
||||
}
|
||||
|
||||
&_title {
|
||||
h2 {
|
||||
margin: 0;
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
&_loader {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
margin-bottom: 24px;
|
||||
padding: 16px;
|
||||
background: var(--bs-tertiary-bg, #f5f5f5);
|
||||
border-radius: 8px;
|
||||
|
||||
label {
|
||||
margin: 0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
select {
|
||||
flex: 1;
|
||||
max-width: 400px;
|
||||
}
|
||||
}
|
||||
|
||||
&_tree {
|
||||
min-height: 300px;
|
||||
padding: 24px;
|
||||
background: var(--bs-body-bg, #ffffff);
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--bs-border-color, #d8dadd);
|
||||
}
|
||||
|
||||
&_hint,
|
||||
&_empty {
|
||||
text-align: center;
|
||||
padding: 48px 16px;
|
||||
|
||||
.fa {
|
||||
color: var(--bs-secondary-color, #999);
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
p {
|
||||
color: var(--bs-secondary-color, #666);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user