Add admin-only extra order lines per fulfillment customer
Lets admins configure standing product+qty+price lines per c_bpartner (CUST_BPartner_ExtraOrderLine) that get automatically appended to every order generated for that customer via Fulfillment Customers > Generate Orders, so recurring per-customer invoice requirements no longer need manual ad-hoc entry each period.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U6KtDeLYZGDTg5SWKCiSjL
Fix extra order line UX per feedback: append order, plain product name, description text
- New rows append to the bottom of the list instead of the top, matching the order lines will appear in on the generated invoice - Show the plain product name (not the SKU-prefixed picker label) in the editor and when reloading saved rows - Stop overwriting the product name with the custom description on the generated order/preview/report line — the product name always comes from M_Product_ID; description is now only sent as supplementary line text when the admin actually entered one - Correct the section subtitle to reference the fulfillment order-generation flow instead of "invoice"
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U6KtDeLYZGDTg5SWKCiSjL
Fix remaining invoice wording on extra order lines section
Section title and description placeholder still referred to "invoice", inconsistent with the earlier fix that stopped the description from overwriting the product name. Now consistently frames it as sales order terminology and clarifies the description rides along as the order line's description text without replacing the product name.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U6KtDeLYZGDTg5SWKCiSjL
Make extra order line product search case-insensitive
Wraps the Name filter in tolower(...) and lowercases the search term client-side, matching the tolower() pattern already used for every other product search in this app. Also escapes single quotes in the search term to keep the OData filter valid for product names containing an apostrophe.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U6KtDeLYZGDTg5SWKCiSjL
Richer product picker results: BOM badge, bold name, small SKU
Custom item slot on the extra-order-lines product picker (SelectBox's default slot renders per dropdown row only, not the closed trigger): bold product name, a small muted SKU/Value, and an orange "BOM" badge when the product is a BOM/JTL-BOM article — same isBomOf() combined-flag check and badge styling already used in ProductSearchSelect.vue. Styles live in a non-scoped <style> block since the dropdown is teleported to <body> (same reasoning as SelectBox.vue's own item/trigger styles).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U6KtDeLYZGDTg5SWKCiSjL