fix(configurator): proper column widths via arch + show blanket SO checkbox

Root cause for column widths: Odoo 19's column_width_hook.js dynamically
sets inline widths on every cell at render time, overriding any CSS
width on td/th selectors. Confirmed by reading the hook source on
entech: 'A width can also be hardcoded in the arch (width="60px").'

Fix: set width='Npx' as an ARCH ATTRIBUTE on each <field> in the line
list:
- Part Number 230px, Line Job # 80px, Thickness 100px, Mask 55px,
  Bake 120px, Qty 55px, Price 80px, Subtotal 90px, Action stack 60px
- Specification + Internal Notes get NO width → take remaining flex
  space (responsive: layout adapts to viewport)

Root cause for missing checkbox: my SCSS underline-style override
selected ALL .o_field_widget input including type=checkbox, rendering
checkboxes as 30px-tall full-width transparent text inputs.

Fix: exclude type=checkbox/radio/file from the underline rule, and
add explicit rendering for type=checkbox (18px square, accent-coloured)
inside .o_fp_xpr_cell. The Blanket Sales Order checkbox + the inline
Block partial shipments checkbox are now both visible.
This commit is contained in:
gsinghpal
2026-05-26 22:48:59 -04:00
parent 15e25ca50b
commit faffdca592
2 changed files with 38 additions and 50 deletions

View File

@@ -66,8 +66,11 @@
display: block;
}
// Field input visual — underline style like the mockup
.o_input, .o_field_widget input,
// Field input visual — underline style like the mockup.
// EXCLUDES checkboxes / radios / file inputs (they have their own
// visual treatment and would disappear under this style).
.o_input,
.o_field_widget input:not([type="checkbox"]):not([type="radio"]):not([type="file"]),
.o_field_widget select {
border: none;
border-bottom: 1px solid $xpr-border-strong;
@@ -91,6 +94,17 @@
}
.o_field_widget select { cursor: pointer; }
// Native checkboxes inside Express cells — keep them visible at
// a comfortable size. Boolean toggle widget retains its own look.
.o_field_widget input[type="checkbox"] {
width: 18px;
height: 18px;
min-height: 18px;
margin: 6px 0;
cursor: pointer;
accent-color: $xpr-accent;
}
// Ensure Boolean/toggle aligns visually with the underline
.o_field_boolean,
.o_field_boolean_toggle {
@@ -216,47 +230,15 @@
table-layout: auto;
}
// Column widths — give Part Number + Specification room,
// tighten Qty/Price/Subtotal/Mask
// Column widths are set via `width="Npx"` ARCH ATTRIBUTES on the
// <field> elements (the proper Odoo 19 mechanism). The
// column_width_hook.js dynamically applies inline widths after
// render and overrides any CSS-only width, so we don't fight it
// here. We only add a few visual tweaks per-column:
.o_fp_xpr_lines .o_list_view {
th[data-name="part_catalog_id"],
td[name="part_catalog_id"] {
min-width: 230px;
width: 230px;
}
th[data-name="line_description"],
td[name="line_description"] {
min-width: 220px;
}
th[data-name="customer_line_ref"],
td[name="customer_line_ref"] { width: 75px; }
th[data-name="thickness_range"],
td[name="thickness_range"] { width: 110px; }
th[data-name="masking_enabled"],
td[name="masking_enabled"] {
width: 55px;
text-align: center;
}
th[data-name="bake_instructions"],
td[name="bake_instructions"] { width: 130px; }
th[data-name="internal_description"],
td[name="internal_description"] { min-width: 140px; }
th[data-name="quantity"],
td[name="quantity"] { width: 60px; }
th[data-name="unit_price"],
td[name="unit_price"] { width: 80px; }
th[data-name="line_subtotal"],
td[name="line_subtotal"] {
width: 90px;
font-weight: 600;
}
// Stacked DWG / OPEN action column
th[data-name="action_btns_anchor"],
td[name="action_btns_anchor"] {
width: 60px;
text-align: center;
padding: 2px !important;
}
td[name="masking_enabled"] { text-align: center; }
td[name="line_subtotal"] { font-weight: 600; }
td[name="action_btns_anchor"] { padding: 2px !important; text-align: center; }
}
.o_fp_xpr_lines .o_list_view thead th {
background: $xpr-table-head;