| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Invoicing (account) |
| Community Apps Dependencies | Show |
| Lines of code | 558 |
| Technical Name |
nexterp_product_kit_sale |
| License | OPL-1 |
| Website | https://www.nexterp.ro |
| Versions | 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Invoicing (account) |
| Community Apps Dependencies | Show |
| Lines of code | 558 |
| Technical Name |
nexterp_product_kit_sale |
| License | OPL-1 |
| Website | https://www.nexterp.ro |
| Versions | 19.0 |
NextERP - Product Kit Sale
NextERP - Product Kit Sale
Overview
Explode product kits into per-component lines on Sale Orders. When
a sale order line carries a kit product, the module mirrors the kit
definition (product.product.kit) into a dedicated Kit Order Lines
tab on the order, one row per component, with quantities and prices
priced through the order's pricelist, partner, currency and fiscal
position.
Kit lines live in a new model sale.order.line.kit that inherits
sale.order.line for behaviour reuse but is detached from the main
order_line field, so the customer-facing order shows the kit as a
single SKU while accounting, invoicing and reporting still see the
detailed components through the dedicated table.
Edits flow both ways: changing a kit line's quantity, price, tax or
product reprices the parent SO line via get_sale_kit_price, and
deleting the parent SO line cascades through unlink. Orphan kit
rows left over from one2many resets are swept on every write, so the
explosion stays in sync with the order line.
Built & supported by NextERP Romania
Romanian Odoo specialists, here for the long run — from implementation to localization and day-to-day production support.
What we do
Odoo Solutions
From quick-start rollouts to multi-company deployments and custom modules built for your processes.
Romanian Localization
SAF-T (D406), e-Factura, e-Transport, D300 / D390 / D394, ANAF integration, full chart of accounts and fiscal positions.
Our Services
Implementation, customization, migration, integration, support and consultancy — Romanian-speaking, SLA-backed.
Features
- New model
sale.order.line.kit(inheritssale.order.line) that stores the exploded component lines, linked back to the parent SO line viasale_line_id. - New one2many
kit_line_idson bothsale.order(all kit lines of the order) andsale.order.line(kit lines for that SO line). - Automatic explosion on
createand onwritefor orders indraftorsentstate:generate_sale_order_line_kitre-creates the kit lines fromproduct.product.kitwhenever the order lines change. - Per-component pricing through the order's pricelist, partner,
currency, UoM and date — taxes are recomputed via
tax_ids.compute_allsoprice_tax,price_subtotalandprice_totalare kept consistent on each kit line. - Parent SO line
price_unitis recomputed from the sum of the kit lines' subtotals throughget_sale_kit_price, so the customer sees the kit as a single priced line. - Recursion guard via the
change_from_solinecontext key avoids loops between parent and kit line writes. - Orphan-line cleanup: stale
sale.order.line.kitrows whosesale_line_idwas reset by a one2many replace are unlinked automatically on write. - Dedicated Kit Order Lines tab on the sale order form, grouped by SO line, with editable quantities, prices, taxes and UoM.
- Cascade
unlinkfromsale.order.linecleans the related kit lines;_check_line_unlinkis overridden so kit rows are always deletable. product_document_idsandinvoice_linesare mirrored on kit lines for document attachments and invoicing hooks.
Configuration
There is no dedicated configuration screen — the module activates itself as soon as kit data exists on the products you sell.
1. Prepare the kit catalog
- Configure the kit product and its components in the base module:
- Tick Is a Kit Component on each component at Sales → Products → Products.
- Open the kit product and fill the Kit Products tab.
See the
nexterp_product_kitdocumentation for the full setup.
2. Pricelist and taxes
- Make sure each component product has the correct entries in any Sales → Configuration → Pricelists that you use, because the explosion prices each kit line through the order's pricelist (not from the parent SO line).
- Set taxes (
tax_ids) on the kit product as usual — the parent SO line copies them to every generated kit line.
3. Access rights
The sale.order.line.kit model is delivered with its own
ir.model.access.csv entry. Users who already have access to sale
orders (Salesperson / Sales Manager) automatically see and edit the
Kit Order Lines tab.
4. Sale order form
No further configuration is needed. The Kit Order Lines tab is
appended automatically to the standard sale order form
(sale.view_order_form). The tab is grouped by parent SO line and
becomes read-only once the order is cancelled or locked.
To install this module, you need to:
- clone the branch 16.0 of the repository https://github.com/NextERP-Romania/odoo-community
- add the path to this repository in your configuration (addons-path)
- update the module list
- search for "NextERP - Product Kit Sale" in your addons
- install the module
How it works
Adding a kit to a quotation
- Open Sales → Orders → Quotations and create a quotation.
- On the Order Lines tab, add a line with a kit product (any product that has entries in its Kit Products tab).
- Save the order. The module reads
product.product.kitand automatically creates onesale.order.line.kitper component under the new Kit Order Lines tab, with:- Sale Order Line — back-pointer to the parent SO line.
- Product — the component product.
- Quantity —
parent_qty * kit_line.product_qty, converted through the parent's UoM. - Unit Price — taken from the component's contextual price (pricelist, partner, date, UoM).
- Tax — copied from the parent SO line and recomputed.
- Subtotal — recomputed via
tax_ids.compute_all.
Adjusting a kit on the order
- Kit Order Lines tab is editable: change quantities, prices, discounts, taxes or even the component product on a kit row.
- The parent SO line's Unit Price is recomputed automatically
from
sum(kit_lines.price_subtotal) / parent.product_uom_qty, so the customer-facing total stays in sync. - Changing the parent SO line (product, quantity, taxes) re-explodes the kit lines on save: the existing kit rows are unlinked and a fresh set is generated from the kit definition.
- Removing the parent SO line cascades and removes its kit lines.
Pricelist behaviour
Each kit line is priced through the order's pricelist using the component's own UoM and quantity. Switching the order's pricelist re-prices each kit line on the next save; promotions or quantity-based rules on the component product apply directly.
Limitations
- Re-explosion only runs while the order is in
draftorsent. On confirmed / locked orders, kit lines can still be edited individually but the standard order line will not regenerate them. - Kit lines are reference rows for pricing and reporting; they do
not produce their own delivery or invoice unless other modules
hook into
sale.order.line.kit(e.g.nexterp_product_kit_sale_timesheetfor tasks).
Versions
19.0.1.0.0 (2026-05-25)
- Changelog tracking starts at this release.
Discover the NextERP suite
Other modules from the same publisher, built to work together.
NextERP Romania
Odoo implementation, customization, Romanian localization and long-term support since 2018.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module