Sale By Packaging

sale_by_packaging
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/14.0/sale_by_packaging
VERSION
VERSION 2.1.1
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSOCA Transbot, Thierry Ducrest, Sébastien BEAU, oca-travis, Weblate, OCA-git-bot, Simone Orsi, Iryna Vyshnevska, oca-ci, KevinKhao, Hai Lang
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/product-attribute:
    - product_packaging_type
OCA/sale-workflow:
    - sale_order_line_packaging_qty
odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
    - stock_account
    - stock
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
product_packaging_form_view_inherit product.packaging.form.view.inherit product.packaging xpath Inherits product.product_packaging_form_view
product_packaging_tree_view_inherit product.packaging.tree.view.inherit product.packaging field Inherits product.product_packaging_tree_view
product_product_tree_view product.product.tree.inherit product.product field Inherits product.product_product_tree_view
product_template_form_view product.template.form.view product.template div Inherits product.product_template_form_view
product_template_tree_view product.template.tree.inherit product.template field Inherits product.product_template_tree_view
view_order_form_inherit_sale_stock_inherit sale.order.form.sale.stock.inherit sale.order xpath Inherits sale_stock.view_order_form_inherit_sale_stock
view_product_packaging_type_form product.packaging.type field Inherits product_packaging_type.view_product_packaging_type_form
Models touched (5)

New fields (3)
  • active Boolean
    default=True
  • can_be_sold Boolean
    compute='_compute_can_be_sold' readonly=False store=True string='Can be sold'
  • force_sale_qty Boolean
    help='Determine if during the creation of a sale order line, the quantity should be forced with a multiple of the packaging.\nExample:\nYou sell a product by packaging of 5 products.\nWhen the user will put 3 as quantity, the system can force the quantity to the superior unit (5 for this example).' string='Force sale quantity'
Public methods (1)
  • write(self, vals)

New fields (2)
  • can_be_sold Boolean
    default=True string='Can be sold'
  • packaging_ids One2many → product.packaging
    comodel_name='product.packaging' inverse_name='packaging_type_id'
Public methods (0)

No public methods.

New fields (1)
  • min_sellable_qty Float
    compute='_compute_variant_min_sellable_qty' help='Minimum sellable quantity, according to the available packagings, if Only Sell by Packaging is set.' readonly=True
Public methods (1)
  • get_first_packaging_with_multiple_qty(self, qty)
    Return multiple of product packaging for one quantity if exist.

New fields (2)
  • min_sellable_qty Float
    compute='_compute_template_min_sellable_qty' help='Minimum sellable quantity, according to the available packagings, if Only Sell by Packaging is set.' readonly=True
  • sell_only_by_packaging Boolean
    copy=False default=False help='Restrict the usage of this product on sale order lines without packaging defined' string='Only sell by packaging'
Public methods (0)

No public methods.

New fields (1)
  • product_packaging Many2one
    ondelete='restrict'
Public methods (2)
  • create(self, vals)
    @api.model
    Auto assign packaging if needed
  • write(self, vals)
    Auto assign packaging if needed
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/13.0/sale_by_packaging
VERSION
VERSION 1.6.2
CATEGORY
CATEGORYWarehouse Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSGuewen Baconnier, Pedro M. Baeza, Akim Juillerat, OCA Transbot, Thierry Ducrest, oca-travis, OCA-git-bot, François Honoré, Iryna Vushnevska, Matthieu Méquignon, Zina Rasoamanana
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/product-attribute:
    - product_packaging_type
OCA/sale-workflow:
    - sale_order_line_packaging_qty
odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
    - stock_account
    - stock
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
product_packaging_form_view_inherit product.packaging.form.view.inherit product.packaging field Inherits product.product_packaging_form_view
product_packaging_tree_view_inherit product.packaging.tree.view.inherit product.packaging field Inherits product.product_packaging_tree_view
product_template_form_view product.template.form.view product.template div Inherits product.product_template_form_view
view_order_form_inherit_sale_stock_inherit sale.order.form.sale.stock.inherit sale.order xpath Inherits sale_stock.view_order_form_inherit_sale_stock
view_product_packaging_type_form product.packaging.type field Inherits product_packaging_type.view_product_packaging_type_form
Models touched (5)

New fields (2)
  • can_be_sold Boolean
    compute='_compute_can_be_sold' readonly=False store=True string='Can be sold'
  • force_sale_qty Boolean
    help='Determine if during the creation of a sale order line, the quantity should be forced with a multiple of the packaging.\nExample:\nYou sell a product by packaging of 5 products.\nWhen the user will put 3 as quantity, the system can force the quantity to the superior unit (5 for this example).' string='Force sale quantity'
Public methods (0)

No public methods.

New fields (2)
  • can_be_sold Boolean
    default=True string='Can be sold'
  • packaging_ids One2many → product.packaging
    comodel_name='product.packaging' inverse_name='packaging_type_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • get_first_packaging_with_multiple_qty(self, qty)
    Return multiple of product packaging for one quantity if exist.

New fields (1)
  • sell_only_by_packaging Boolean
    default=False help='Restrict the usage of this product on sale order lines without packaging defined' string='Only sell by packaging'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals)
    @api.model
    Auto assign packaging if needed
  • write(self, vals)
    Auto assign packaging if needed