Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
4290958
[ADD] sale_attached_product: New module
chienandalu Jun 24, 2022
9919b97
[IMP] sale_attached_product: black, isort, prettier
ernesto-garcia-tecnativa Mar 2, 2023
e89b42d
[MIG] sale_attached_product: Migration to 15.0
ernesto-garcia-tecnativa Mar 2, 2023
38f337f
Added translation using Weblate (Spanish)
ChristianSantamaria Aug 7, 2023
36c0662
Translated using Weblate (Spanish)
Ivorra78 Aug 7, 2023
c8e205a
[16.0][MIG] sale_attached_product
cormaza Jun 2, 2024
7dfebc1
Update sale_attached_product/readme/DESCRIPTION.rst
cormaza Jun 9, 2024
e0d32bd
Update translation files
weblate Jun 12, 2024
0e1848c
Added translation using Weblate (Italian)
mymage Jun 14, 2024
0e89cc6
[IMP] sale_attached_product: pre-commit auto fixes
bizzappdev Jul 17, 2025
dfebd88
[MIG] sale_attached_product: Migration to 17.0
bizzappdev Jul 17, 2025
7135f40
[UPD] Update sale_attached_product.pot
Aug 20, 2025
4dd372f
[BOT] post-merge updates
OCA-git-bot Aug 20, 2025
3237a99
Added translation using Weblate (French)
williamphilippin-droid May 18, 2026
38b64de
Translated using Weblate (French)
williamphilippin-droid May 18, 2026
f05beab
[MIG] sale_attached_product: Migration to 18.0
bjouini-acsone Oct 2, 2025
c7fb06e
[FIX] sale_attached_product - bug with domain
anthonissen-a Dec 5, 2025
7cfbf6f
[ADD]sale_order_line_move_to_optional: move sale order line to optional
May 28, 2025
145c7a4
[UPD] Update sale_order_line_move_to_optional.pot
Jul 3, 2025
1a494ce
[BOT] post-merge updates
OCA-git-bot Jul 3, 2025
9d7676b
[IMP] sale_order_line_move_to_optional: pre-commit auto fixes
MarcusPDL Aug 10, 2026
48525d3
[MIG] sale_order_line_move_to_optional: Migration to 18.0
MarcusPDL Aug 10, 2026
80cdf4e
Merge PR #3925 into 18.0
OCA-git-bot Aug 17, 2026
876c787
[UPD] Update sale_attached_product.pot
Aug 17, 2026
923f8d0
[BOT] post-merge updates
OCA-git-bot Aug 17, 2026
04911f4
Merge PR #4521 into 18.0
OCA-git-bot Aug 17, 2026
c197c16
[UPD] Update sale_order_line_move_to_optional.pot
Aug 17, 2026
1458d71
[BOT] post-merge updates
OCA-git-bot Aug 17, 2026
44e9126
Added translation using Weblate (Croatian)
uvid-vlado Aug 17, 2026
fe6cfe3
Translated using Weblate (Croatian)
uvid-vlado Aug 17, 2026
34b411f
Translated using Weblate (Croatian)
uvid-vlado Aug 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ addon | version | maintainers | summary
[product_price_category](product_price_category/) | 18.0.1.0.0 | <a href='https://github.com/sbejaoui'><img src='https://github.com/sbejaoui.png' width='32' height='32' style='border-radius:50%;' alt='sbejaoui'/></a> | Add Price Category field on product and allow to apply a pricelist on this field.
[product_set_sell_only_by_packaging](product_set_sell_only_by_packaging/) | 18.0.1.0.0 | | Glue module between `sell_only_by_packaging` and `sale_product_set_packaging_qty`.
[sale_advance_payment](sale_advance_payment/) | 18.0.1.0.3 | | Allow to add advance payments on sales and then use them on invoices
[sale_attached_product](sale_attached_product/) | 18.0.1.0.0 | <a href='https://github.com/chienandalu'><img src='https://github.com/chienandalu.png' width='32' height='32' style='border-radius:50%;' alt='chienandalu'/></a> | Define products that will be added automatically when adding another in a sales order
[sale_automatic_workflow](sale_automatic_workflow/) | 18.0.1.2.0 | | Sale Automatic Workflow
[sale_automatic_workflow_auto_assign](sale_automatic_workflow_auto_assign/) | 18.0.1.1.0 | | Assign automatically a workflow at sale creation
[sale_automatic_workflow_force_invoiced](sale_automatic_workflow_force_invoiced/) | 18.0.1.0.0 | | Force Invoice as an automatic workflow option
Expand Down Expand Up @@ -96,6 +97,7 @@ addon | version | maintainers | summary
[sale_order_line_final_price](sale_order_line_final_price/) | 18.0.1.0.1 | <a href='https://github.com/eduezerouali-tecnativa'><img src='https://github.com/eduezerouali-tecnativa.png' width='32' height='32' style='border-radius:50%;' alt='eduezerouali-tecnativa'/></a> | Set the final price of a sale order line, and lock its unit price and discount for non sales managers
[sale_order_line_input](sale_order_line_input/) | 18.0.1.0.1 | | Search, create or modify directly sale order lines
[sale_order_line_menu](sale_order_line_menu/) | 18.0.1.0.0 | | Adds a Sale Order Lines Menu
[sale_order_line_move_to_optional](sale_order_line_move_to_optional/) | 18.0.1.0.0 | | Move sale order line to optional products.
[sale_order_line_no_print](sale_order_line_no_print/) | 18.0.1.0.0 | <a href='https://github.com/chienandalu'><img src='https://github.com/chienandalu.png' width='32' height='32' style='border-radius:50%;' alt='chienandalu'/></a> <a href='https://github.com/rafaelbn'><img src='https://github.com/rafaelbn.png' width='32' height='32' style='border-radius:50%;' alt='rafaelbn'/></a> | Hide order lines in reports
[sale_order_line_note](sale_order_line_note/) | 18.0.1.0.0 | | Note on sale order line
[sale_order_line_price_history](sale_order_line_price_history/) | 18.0.1.0.1 | <a href='https://github.com/CarlosRoca13'><img src='https://github.com/CarlosRoca13.png' width='32' height='32' style='border-radius:50%;' alt='CarlosRoca13'/></a> <a href='https://github.com/Shide'><img src='https://github.com/Shide.png' width='32' height='32' style='border-radius:50%;' alt='Shide'/></a> | Sale order line price history
Expand Down
126 changes: 126 additions & 0 deletions sale_attached_product/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

==========================
Attached products in sales
==========================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:0d94e4aa9f4b7cb02bffa6470c616de4ba39400788e19bb96383d7fede9805a0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/sale-workflow/tree/18.0/sale_attached_product
:alt: OCA/sale-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-workflow-18-0/sale-workflow-18-0-sale_attached_product
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&target_branch=18.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows to define a set of products which will be added
automatically to the sales order whenever that product is present on it.

**Table of contents**

.. contents::
:local:

Configuration
=============

To configure attached products:

1. Go to *Sales > Products > Products* and choose on you want to attach
products to.
2. Go to the *Sales* tab and then to the *Attached products* section.
3. Add as many products as you want to.

If you want to autoupdate the products when they are added, set this
config parameter:

- sale_attached_product.auto_update_attached_lines

Otherwise, the lines will be added, but they can be modified, deleted,
etc.

Usage
=====

Now that you have your product configured:

1. Place a new sale order and then add that product in a new line.
2. Once you save your order, the attached products will be added in new
lines to the order with as many quantities as the main one.

If the global sale_attached_product.auto_update_attached_lines setting
is on:

1. Update the main product quantity and the attached product quantities
will be updated in the same amount as well.
2. If we delete the main line, the attached ones will go away in any
case.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-workflow/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/sale-workflow/issues/new?body=module:%20sale_attached_product%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Tecnativa

Contributors
------------

- `Tecnativa <https://www.tecnativa.com>`__:

- David Vidal

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

.. |maintainer-chienandalu| image:: https://github.com/chienandalu.png?size=40px
:target: https://github.com/chienandalu
:alt: chienandalu

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-chienandalu|

This module is part of the `OCA/sale-workflow <https://github.com/OCA/sale-workflow/tree/18.0/sale_attached_product>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions sale_attached_product/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
16 changes: 16 additions & 0 deletions sale_attached_product/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Copyright 2022 Tecnativa - David Vidal
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Attached products in sales",
"summary": "Define products that will be added automatically when adding another "
"in a sales order",
"version": "18.0.1.0.0",
"development_status": "Beta",
"category": "Sale",
"website": "https://github.com/OCA/sale-workflow",
"author": "Tecnativa, Odoo Community Association (OCA)",
"maintainers": ["chienandalu"],
"license": "AGPL-3",
"depends": ["sale"],
"data": ["views/product_template_views.xml"],
}
78 changes: 78 additions & 0 deletions sale_attached_product/i18n/es.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_attached_product
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-08-07 12:10+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_sale_order_line__attached_from_line_id
msgid "Attached From Line"
msgstr "Adjunto desde la línea"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_sale_order_line__attached_line_ids
msgid "Attached Line"
msgstr "Línea adjunta"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_product_product__attached_product_ids
#: model:ir.model.fields,field_description:sale_attached_product.field_product_template__attached_product_ids
#: model_terms:ir.ui.view,arch_db:sale_attached_product.product_template_form_view
msgid "Attached Products"
msgstr "Productos adjuntos"

#. module: sale_attached_product
#: model:ir.model.fields,help:sale_attached_product.field_sale_order_line__is_attached_line
msgid "Flag products that are attached to their main counterpart"
msgstr "Marcar productos que están unidos a su contraparte principal"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_sale_order_line__is_attached_line
msgid "Is Attached Line"
msgstr "es línea adjunta"

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_sale_attached_product_mixin
msgid "Mixin class for sale attached product features"
msgstr "Clase Mixta para la venta de productos adjuntos"

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_product_template
msgid "Product"
msgstr ""

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_sale_order
msgid "Sales Order"
msgstr "Órdenes de venta"

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_sale_order_line
msgid "Sales Order Line"
msgstr "Línea de Orden de Venta"

#. module: sale_attached_product
#: model:ir.model.fields,help:sale_attached_product.field_product_product__attached_product_ids
#: model:ir.model.fields,help:sale_attached_product.field_product_template__attached_product_ids
msgid ""
"Similar to optional products, although they're added automatically to "
"thesale order and optionally removed when the main product goes away."
msgstr ""
"Similares a los productos opcionales, aunque se añaden automáticamente al "
"pedido de venta y se eliminan opcionalmente cuando desaparece el producto "
"principal."

#~ msgid "Product Template"
#~ msgstr "Plantilla del Producto"
75 changes: 75 additions & 0 deletions sale_attached_product/i18n/fr.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_attached_product
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 17.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-05-18 14:46+0000\n"
"Last-Translator: williamphilippin-droid <william.philippin@acsone.eu>\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.15.2\n"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_sale_order_line__attached_from_line_id
msgid "Attached From Line"
msgstr "Attaché depuis la ligne"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_sale_order_line__attached_line_ids
msgid "Attached Line"
msgstr "Ligne attachée"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_product_product__attached_product_ids
#: model:ir.model.fields,field_description:sale_attached_product.field_product_template__attached_product_ids
#: model_terms:ir.ui.view,arch_db:sale_attached_product.product_template_form_view
msgid "Attached Products"
msgstr "Produits attachés"

#. module: sale_attached_product
#: model:ir.model.fields,help:sale_attached_product.field_sale_order_line__is_attached_line
msgid "Flag products that are attached to their main counterpart"
msgstr "Marquer les produits qui sont rattachés à leur produit principal"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_sale_order_line__is_attached_line
msgid "Is Attached Line"
msgstr "Est une ligne attachée"

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_sale_attached_product_mixin
msgid "Mixin class for sale attached product features"
msgstr ""

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_product_template
msgid "Product"
msgstr "Produit"

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_sale_order
msgid "Sales Order"
msgstr "Commande"

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_sale_order_line
msgid "Sales Order Line"
msgstr "Ligne de commande"

#. module: sale_attached_product
#: model:ir.model.fields,help:sale_attached_product.field_product_product__attached_product_ids
#: model:ir.model.fields,help:sale_attached_product.field_product_template__attached_product_ids
msgid ""
"Similar to optional products, although they're added automatically to "
"thesale order and optionally removed when the main product goes away."
msgstr ""
"Tout comme les produits optionnels, ils sont ajoutés automatiquement à la "
"commande, mais peuvent être supprimés si le produit principal n'est plus "
"disponible."
76 changes: 76 additions & 0 deletions sale_attached_product/i18n/it.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_attached_product
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-06-14 17:42+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_sale_order_line__attached_from_line_id
msgid "Attached From Line"
msgstr "Allegato dalla riga"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_sale_order_line__attached_line_ids
msgid "Attached Line"
msgstr "Riga allegata"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_product_product__attached_product_ids
#: model:ir.model.fields,field_description:sale_attached_product.field_product_template__attached_product_ids
#: model_terms:ir.ui.view,arch_db:sale_attached_product.product_template_form_view
msgid "Attached Products"
msgstr "Prodotti allegati"

#. module: sale_attached_product
#: model:ir.model.fields,help:sale_attached_product.field_sale_order_line__is_attached_line
msgid "Flag products that are attached to their main counterpart"
msgstr ""
"Prodotti di riferimento che sono allegati alle loro controparti principali"

#. module: sale_attached_product
#: model:ir.model.fields,field_description:sale_attached_product.field_sale_order_line__is_attached_line
msgid "Is Attached Line"
msgstr "È una riga allegata"

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_sale_attached_product_mixin
msgid "Mixin class for sale attached product features"
msgstr "Classe mixin per caratteristiche prodotto allegato alla vendita"

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_product_template
msgid "Product"
msgstr "Prodotto"

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_sale_order
msgid "Sales Order"
msgstr "Ordine di vendita"

#. module: sale_attached_product
#: model:ir.model,name:sale_attached_product.model_sale_order_line
msgid "Sales Order Line"
msgstr "Riga ordine di vendita"

#. module: sale_attached_product
#: model:ir.model.fields,help:sale_attached_product.field_product_product__attached_product_ids
#: model:ir.model.fields,help:sale_attached_product.field_product_template__attached_product_ids
msgid ""
"Similar to optional products, although they're added automatically to "
"thesale order and optionally removed when the main product goes away."
msgstr ""
"Simile ai prodotti opzionali, sebbene vengano aggiunti automaticamente "
"all'ordine di vendita e rimossi opzionalmente quando il prodotto principale "
"va via."
Loading