Product Packaging Unit Price Calculator

product_packaging_unit_price_calculator
REPOSITORY
REPOSITORYOCA/product-attribute
GIT
GIThttps://github.com/OCA/product-attribute.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-attribute/tree/18.0/product_packaging_unit_price_calculator
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYProduct
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Khôi (Kiên Kim)
WEBSITE
WEBSITEhttps://github.com/OCA/product-attribute
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds a wizard that allows the user to compute a unit price
by selecting a specific product.packaging related to the product and the
price of that package. The computation is done based on the quantity qty
of product set on the packaging.

The wizard is accessible via buttons located in a few different places
in the UI

- Next to the sale price of the product on the product form
- Next to the price of a product supplier info form
- Next to the price of price list item in the tree view
- Below the fixed price of a price list item

When the wizard is saved the value of the unit price located next to the
button is updated by the computed unit price of the wizard.

The sale price of a product.packaging is displayed in the packaging list
on the Inventory page of the product form.

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
product_packaging_tree_view2 product.packaging.list.view2 product.packaging field Inherits product.product_packaging_tree_view2
product_pricelist_item_form_view product.pricelist.item.form.inherit product.pricelist.item group Inherits product.product_pricelist_item_form_view
product_pricelist_item_tree__view_from_product product.pricelist.item.list.inherit product.pricelist.item field Inherits product.product_pricelist_item_tree_view_from_product
product_supplierinfo_form_view product.supplierinfo.form.inherit product.supplierinfo field Inherits product.product_supplierinfo_form_view
product_template_form_view product.template.form product.template button Inherits product.product_template_form_view
view_product_package_price_form Product Package Price product.package.price.wizard form New
Models touched (6)

New fields (11)
  • current_unit_price Float
    compute='_compute_current_unit_price' digits='Product Price'
  • packaging_ids One2many → product.packaging
    compute='_compute_packaging_ids' string='Product Packages' args: 'product.packaging'
  • packaging_price Float
    default=0.0 digits='Product Price' args: 'Package Price'
  • product_id Many2one → product.product
    default=<expr> args: 'product.product'
  • product_pricelist_item_id Many2one → product.pricelist.item
    default=<expr> args: 'product.pricelist.item'
  • product_supplierinfo_id Many2one → product.supplierinfo
    default=<expr> args: 'product.supplierinfo'
  • product_tmpl_id Many2one → product.template
    default=<expr> args: 'product.template'
  • product_variant_ids One2many → product.product
    related='product_tmpl_id.product_variant_ids' args: 'product.product', 'product_tmpl_id'
  • selected_packaging_id Many2one → product.packaging
    domain="[('product_id', 'in', product_variant_ids)]" args: 'product.packaging'
  • unit_price Float
    compute='_compute_unit_price' digits='Product Price'
  • warning_message Char
    default=' ' readonly=True
Public methods (2)
  • action_set_price(self)
  • reset_unit_price(self)

New fields (3)
  • packaging_wizard_price Float
    digits='Product Price' store=False
  • sale_price Float
    compute='_compute_sale_price' digits='Product Price'
  • unit_price Float
    related='product_id.list_price'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)
REPOSITORY
REPOSITORYOCA/product-attribute
GIT
GIThttps://github.com/OCA/product-attribute.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-attribute/tree/14.0/product_packaging_unit_price_calculator
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYProduct
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSSébastien Alix, oca-travis, Weblate, OCA-git-bot, Dũng (Trần Đình)
WEBSITE
WEBSITEhttps://github.com/OCA/product-attribute
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
product_packaging_tree_view2 product.packaging.tree.view2 product.packaging field Inherits product.product_packaging_tree_view2
product_pricelist_item_form_view product.pricelist.item.form.inherit product.pricelist.item group Inherits product.product_pricelist_item_form_view
product_pricelist_item_tree__view_from_product product.pricelist.item.tree.inherit product.pricelist.item field Inherits product.product_pricelist_item_tree_view_from_product
product_supplierinfo_form_view product.supplierinfo.form.inherit product.supplierinfo field Inherits product.product_supplierinfo_form_view
product_template_form_view product.template.form product.template button Inherits product.product_template_form_view
view_product_package_price_form Product Package Price product.package.price.wizard form New
Models touched (6)

New fields (11)
  • current_unit_price Float
    compute='_compute_current_unit_price' digits='Product Price'
  • packaging_ids One2many → product.packaging
    compute='_compute_packaging_ids' string='Product Packages' args: 'product.packaging'
  • packaging_price Float
    default=0.0 digits='Product Price' args: 'Package Price'
  • product_id Many2one → product.product
    default=<expr> args: 'product.product'
  • product_pricelist_item_id Many2one → product.pricelist.item
    default=<expr> args: 'product.pricelist.item'
  • product_supplierinfo_id Many2one → product.supplierinfo
    default=<expr> args: 'product.supplierinfo'
  • product_tmpl_id Many2one → product.template
    default=<expr> args: 'product.template'
  • product_variant_ids One2many → product.product
    related='product_tmpl_id.product_variant_ids' args: 'product.product', 'product_tmpl_id'
  • selected_packaging_id Many2one → product.packaging
    domain="[('product_id', 'in', product_variant_ids)]" args: 'product.packaging'
  • unit_price Float
    compute='_compute_unit_price' digits='Product Price' readonly=True args: 'Unit Price'
  • warning_message Char
    default=' ' readonly=True
Public methods (2)
  • action_set_price(self)
  • reset_unit_price(self)

New fields (3)
  • packaging_wizard_price Float
    digits='Product Price' store=False
  • sale_price Float
    compute='_compute_sale_price' digits='Product Price'
  • unit_price Float
    related='product_id.list_price'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)
REPOSITORY
REPOSITORYOCA/product-attribute
GIT
GIThttps://github.com/OCA/product-attribute.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-attribute/tree/13.0/product_packaging_unit_price_calculator
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYProduct
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, João Marques, oca-travis, Weblate, OCA-git-bot, Carlos Roca
WEBSITE
WEBSITEhttps://github.com/OCA/product-attribute
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
product_packaging_tree_view2 product.packaging.tree.view2 product.packaging field Inherits product.product_packaging_tree_view2
product_pricelist_item_form_view product.pricelist.item.form.inherit product.pricelist.item group Inherits product.product_pricelist_item_form_view
product_pricelist_item_tree__view_from_product product.pricelist.item.tree.inherit product.pricelist.item field Inherits product.product_pricelist_item_tree_view_from_product
product_supplierinfo_form_view product.supplierinfo.form.inherit product.supplierinfo field Inherits product.product_supplierinfo_form_view
product_template_form_view product.template.form product.template button Inherits product.product_template_form_view
view_product_package_price_form Product Package Price product.package.price.wizard form New
Models touched (6)

New fields (11)
  • current_unit_price Float
    compute='_compute_current_unit_price' digits='Product Price'
  • packaging_ids One2many → product.packaging
    compute='_compute_packaging_ids' string='Product Packages' args: 'product.packaging'
  • packaging_price Float
    default=0.0 digits='Product Price' args: 'Package Price'
  • product_id Many2one → product.product
    default=<expr> args: 'product.product'
  • product_pricelist_item_id Many2one → product.pricelist.item
    default=<expr> args: 'product.pricelist.item'
  • product_supplierinfo_id Many2one → product.supplierinfo
    default=<expr> args: 'product.supplierinfo'
  • product_tmpl_id Many2one → product.template
    default=<expr> args: 'product.template'
  • product_variant_ids One2many → product.product
    related='product_tmpl_id.product_variant_ids' args: 'product.product', 'product_tmpl_id'
  • selected_packaging_id Many2one → product.packaging
    domain="[('product_id', 'in', product_variant_ids)]" args: 'product.packaging'
  • unit_price Float
    compute='_compute_unit_price' digits='Product Price' readonly=True args: 'Unit Price'
  • warning_message Char
    default=' ' readonly=True
Public methods (2)
  • action_set_price(self)
  • reset_unit_price(self)

New fields (3)
  • packaging_wizard_price Float
    digits='Product Price' store=False
  • sale_price Float
    compute='_compute_sale_price' digits='Product Price'
  • unit_price Float
    related='product_id.list_price'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)

New fields (0)

No new fields.

Public methods (1)
  • open_packaging_price(self)