| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/margin-analysis |
| GIT | |
| GIT | https://github.com/OCA/margin-analysis.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/margin-analysis/tree/16.0/product_margin_classification |
| VERSION | |
| VERSION | 1.3.1 |
| CATEGORY | |
| CATEGORY | Account |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Sylvain LE GAL, GitHub, Weblate, OCA-git-bot, Carmen Bianca BAKKER, oca-ci, hugues de keyzer, Simon Hick, Alicia Garzo Moreno |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/margin-analysis |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:54 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - account_payment - account - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - payment - utm |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_product_margin_classification_form |
product.margin.classification | form | New | |
view_product_margin_classification_tree |
product.margin.classification | tree | New | |
view_product_product_form |
product.product | label | Inherits product.product_normal_form_view | |
view_product_product_search |
product.product | field | Inherits product.product_search_form_view | |
view_product_product_tree |
product.product | tree | New | |
view_product_template_form |
product.template | label | Inherits product.product_template_only_form_view |
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
markup
Float
digits='Margin Rate'
help='Value that help you to compute the sale price, based on your cost, as defined: Sale Price = (Cost * (100 + Markup)) / 100\nIt is computed with the following formula Markup = 100 * (Sale Price - Cost) / Cost'
required=True
name
Char
required=True
price_round
Float
default=<expr>
digits='Product Price'
help='Sets the price so that it is a multiple of this value.\nRounding is applied after the margin and before the surcharge.\nTo have prices that end in 9.99, set rounding 1, surcharge -0.01'
string='Price Rounding'
price_surcharge
Float
digits='Product Price'
help='Specify the fixed amount to add or substract(if negative) to the amount calculated with the discount.'
product_correct_price_qty
Integer
compute='_compute_product_different_price_qty'
string='Total Products With Correct Price'
product_ids
One2many → product.product
comodel_name='product.product'
inverse_name='margin_classification_id'
string='Products'
product_incorrect_price_qty
Integer
compute='_compute_product_different_price_qty'
string='Total Products With Incorrect Price'
product_qty
Integer
compute='_compute_product_qty'
store=True
string='Products Quantity'
product_too_cheap_qty
Integer
compute='_compute_product_different_price_qty'
string='Total Products Too Cheap'
product_too_expensive_qty
Integer
compute='_compute_product_different_price_qty'
string='Total Products Too Expensive'
profit_margin
Float
compute='_compute_profit_margin'
digits='Margin Rate'
help="Also called 'Net margin' or 'Net Profit Ratio'.\nIt is computed with the following formula Profit Margin = 100 * (Sale Price - Cost) / Sale Price"
inverse='_inverse_profit_margin'
apply_theoretical_price(self)
apply_theoretical_price_too_cheap(self)
apply_theoretical_price_too_expensive(self)
margin_classification_id
Many2one → product.margin.classification
comodel_name='product.margin.classification'
string='Margin Classification'
margin_state
Selection
compute='_compute_theoretical_multi'
selection=MARGIN_STATE_SELECTION
store=True
string='Theoretical Price State'
theoretical_difference
Float
compute='_compute_theoretical_multi'
digits='Product Price'
store=True
theoretical_price
Float
compute='_compute_theoretical_multi'
digits='Product Price'
store=True
apply_theoretical_price(self)
apply_theoretical_price_too_cheap(self)
apply_theoretical_price_too_expensive(self)
use_theoretical_price(self)
margin_classification_id
Many2one → product.margin.classification
comodel_name='product.margin.classification'
compute='_compute_theoretical_multi_template'
inverse='_inverse_margin_classification_id'
search='_search_margin_classification_id'
string='Margin Classification'
margin_state
Selection
compute='_compute_theoretical_multi_template'
selection=MARGIN_STATE_SELECTION
string='Theoretical Price State'
theoretical_difference
Float
compute='_compute_theoretical_multi_template'
digits='Product Price'
theoretical_price
Float
compute='_compute_theoretical_multi_template'
digits='Product Price'
apply_theoretical_price(self)
apply_theoretical_price_too_cheap(self)
apply_theoretical_price_too_expensive(self)
use_theoretical_price(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/margin-analysis |
| GIT | |
| GIT | https://github.com/OCA/margin-analysis.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/margin-analysis/tree/12.0/product_margin_classification |
| VERSION | |
| VERSION | 1.0.4 |
| CATEGORY | |
| CATEGORY | Account |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Sylvain LE GAL, oca-travis, Weblate, OCA-git-bot, oca-ci |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/margin-analysis |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:22 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - payment - account - product - decimal_precision - uom - analytic - portal - http_routing - digest |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_product_margin_classification_form |
product.margin.classification | form | New | |
view_product_margin_classification_tree |
product.margin.classification | tree | New | |
view_product_product_form |
product.product | field | Inherits product.product_normal_form_view | |
view_product_product_search |
product.product | field | Inherits product.product_search_form_view | |
view_product_product_tree |
product.product | tree | New | |
view_product_template_form |
product.template | field | Inherits product.product_template_only_form_view |
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
markup
Float
digits=dp.get_precision('Margin Rate')
help='Value that help you to compute the sale price, based on your cost, as defined: Sale Price = (Cost * (100 + Markup)) / 100\nIt is computed with the following formula Markup = 100 * (Sale Price - Cost) / Cost'
required=True
string='Markup'
name
Char
required=True
string='Name'
price_round
Float
default=<expr>
digits=dp.get_precision('Product Price')
help='Sets the price so that it is a multiple of this value.\nRounding is applied after the margin and before the surcharge.\nTo have prices that end in 9.99, set rounding 1, surcharge -0.01'
string='Price Rounding'
price_surcharge
Float
digits=dp.get_precision('Product Price')
help='Specify the fixed amount to add or substract(if negative) to the amount calculated with the discount.'
string='Price Surcharge'
product_correct_price_qty
Integer
compute='_compute_product_different_price_qty'
string='Total Products With Correct Price'
product_ids
One2many → product.product
comodel_name='product.product'
inverse_name='margin_classification_id'
string='Products'
product_incorrect_price_qty
Integer
compute='_compute_product_different_price_qty'
string='Total Products With Incorrect Price'
product_qty
Integer
compute='_compute_product_qty'
store=True
string='Products Quantity'
product_too_cheap_qty
Integer
compute='_compute_product_different_price_qty'
string='Total Products Too Cheap'
product_too_expensive_qty
Integer
compute='_compute_product_different_price_qty'
string='Total Products Too Expensive'
profit_margin
Float
compute='_compute_profit_margin'
digits=dp.get_precision('Margin Rate')
help="Also called 'Net margin' or 'Net Profit Ratio'.\nIt is computed with the following formula Profit Margin = 100 * (Sale Price - Cost) / Sale Price"
inverse='_inverse_profit_margin'
string='Profit Margin'
apply_theoretical_price(self)
apply_theoretical_price_too_cheap(self)
apply_theoretical_price_too_expensive(self)
margin_classification_id
Many2one → product.margin.classification
comodel_name='product.margin.classification'
string='Margin Classification'
margin_state
Selection
compute='_compute_theoretical_multi'
selection=MARGIN_STATE_SELECTION
store=True
string='Theoretical Price State'
theoretical_difference
Float
compute='_compute_theoretical_multi'
digits=dp.get_precision('Product Price')
store=True
string='Theoretical Difference'
theoretical_price
Float
compute='_compute_theoretical_multi'
digits=dp.get_precision('Product Price')
store=True
string='Theoretical Price'
use_theoretical_price(self)
margin_classification_id
Many2one → product.margin.classification
comodel_name='product.margin.classification'
readonly=False
related='product_variant_ids.margin_classification_id'
string='Margin Classification'
margin_state
Selection
related='product_variant_ids.margin_state'
selection=MARGIN_STATE_SELECTION
string='Theoretical Price State'
theoretical_difference
Float
digits=dp.get_precision('Product Price')
related='product_variant_ids.theoretical_difference'
string='Theoretical Difference'
theoretical_price
Float
digits=dp.get_precision('Product Price')
related='product_variant_ids.theoretical_price'
string='Theoretical Price'
use_theoretical_price(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/10.0/product_margin_classification |
| VERSION | |
| VERSION | 2.0.2 |
| CATEGORY | |
| CATEGORY | Account |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Denis Roussel, Francisco Fernández @PlanetaTIC, OCA Transbot, Miquel Raïch, oca-travis, Weblate, OCA-git-bot |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:19:56 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale - sales_team - base - base_setup - web_kanban - web - bus - web_tour - account - product - decimal_precision - report - analytic - web_planner - procurement |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_product_margin_classification_form |
product.margin.classification | form | New | |
view_product_margin_classification_tree |
product.margin.classification | tree | New | |
view_product_template_form |
product.template | field | Inherits product.product_template_form_view | |
view_product_template_search |
product.template | field | Inherits product.product_template_search_view | |
view_product_template_tree |
product.template | tree | New |
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
markup
Float
digits=dp.get_precision('Margin Rate')
help='Value that help you to compute the sale price, based on your cost, as defined: Sale Price = (Cost * (100 + Markup)) / 100\nIt is computed with the following formula Markup = 100 * (Sale Price - Cost) / Cost'
old_name='margin'
required=True
string='Markup'
name
Char
required=True
string='Name'
price_round
Float
default=<expr>
digits=dp.get_precision('Product Price')
help='Sets the price so that it is a multiple of this value.\nRounding is applied after the margin and before the surcharge.\nTo have prices that end in 9.99, set rounding 1, surcharge -0.01'
string='Price Rounding'
price_surcharge
Float
digits=dp.get_precision('Product Price')
help='Specify the fixed amount to add or substract(if negative) to the amount calculated with the discount.'
string='Price Surcharge'
profit_margin
Float
compute='_compute_profit_margin'
digits=dp.get_precision('Margin Rate')
help="Also called 'Net margin' or 'Net Profit Ratio'.\nIt is computed with the following formula Profit Margin = 100 * (Sale Price - Cost) / Sale Price"
inverse='_inverse_profit_margin'
string='Profit Margin'
template_correct_price_qty
Integer
compute='_compute_template_different_price_qty'
store=True
string='Total Products With Correct Price'
template_ids
One2many → product.template
comodel_name='product.template'
inverse_name='margin_classification_id'
string='Products'
template_incorrect_price_qty
Integer
compute='_compute_template_different_price_qty'
store=True
string='Total Products With Incorrect Price'
template_qty
Integer
compute='_compute_template_qty'
store=True
string='Products Quantity'
template_too_cheap_qty
Integer
compute='_compute_template_different_price_qty'
store=True
string='Total Products Too Cheap'
template_too_expensive_qty
Integer
compute='_compute_template_different_price_qty'
store=True
string='Total Products Too Expensive'
apply_theoretical_price(self)
apply_theoretical_price_too_cheap(self)
apply_theoretical_price_too_expensive(self)
No new fields.
Public methods (1)use_theoretical_price_variant(self)
margin_classification_id
Many2one → product.margin.classification
comodel_name='product.margin.classification'
string='Margin Classification'
margin_state
Selection
compute='_compute_theoretical_multi'
selection=MARGIN_STATE_SELECTION
store=True
string='Theoretical Price State'
theoretical_difference
Float
compute='_compute_theoretical_multi'
digits=dp.get_precision('Product Price')
store=True
string='Theoretical Difference'
theoretical_price
Float
compute='_compute_theoretical_multi'
digits=dp.get_precision('Product Price')
store=True
string='Theoretical Price'
use_theoretical_price(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/8.0/product_margin_classification |
| VERSION | |
| VERSION | 2.1.0 |
| CATEGORY | |
| CATEGORY | Account |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), GRAP |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), GRAP |
| COMMITTERS | |
| COMMITTERS | Sylvain LE GAL, OCA Transbot, oca-travis, Weblate, OCA-git-bot |
| WEBSITE | |
| WEBSITE | http://www.grap.coop |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:11:22 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - account - base_setup - base - web_kanban - web - product - decimal_precision - report - analytic - board - edi - email_template |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_product_margin_classification_form |
product.margin.classification | form | New | |
view_product_margin_classification_tree |
product.margin.classification | tree | New | |
view_product_template_form |
product.template | field | Inherits product.product_template_form_view | |
view_product_template_search |
product.template | field | Inherits product.product_template_search_view | |
view_product_template_tree |
product.template | tree | New |
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
markup
Float
digits=dp.get_precision('Margin Rate')
help='Value that help you to compute the sale price, based on your cost, as defined: Sale Price = (Cost * (1 + Markup))\nIt is computed with the following formula Markup = (Sale Price - Cost) / Cost'
old_name='margin'
required=True
string='Markup'
name
Char
required=True
string='Name'
price_round
Float
default=<expr>
digits_compute=dp.get_precision('Product Price')
help='Sets the price so that it is a multiple of this value.\nRounding is applied after the margin and before the surcharge.\nTo have prices that end in 9.99, set rounding 1, surcharge -0.01'
string='Price Rounding'
price_surcharge
Float
digits_compute=dp.get_precision('Product Price')
help='Specify the fixed amount to add or substract(if negative) to the amount calculated with the discount.'
string='Price Surcharge'
profit_margin
Float
compute='_compute_profit_margin'
digits=dp.get_precision('Margin Rate')
help="Also called 'Net margin' or 'Net Profit Ratio'.\nIt is computed with the following formula Profit Margin = (Sale Price - Cost) / Sale Price"
inverse='_inverse_profit_margin'
string='Profit Margin'
template_cheap_qty
Integer
compute='_compute_template_different_price_qty'
multi='differente_price'
store=True
string='Products Cheaper'
template_different_price_qty
Integer
compute='_compute_template_different_price_qty'
multi='differente_price'
store=True
string='Total Products With Different Price'
template_expensive_qty
Integer
compute='_compute_template_different_price_qty'
multi='differente_price'
store=True
string='Products Too Expensive'
template_ids
One2many → product.template
comodel_name='product.template'
inverse_name='margin_classification_id'
readonly=True
string='Products'
template_qty
Integer
compute='_compute_template_qty'
store=True
string='Products Quantity'
apply_theoretical_price(self)
apply_theoretical_price_cheap(self)
apply_theoretical_price_expensive(self)
No new fields.
Public methods (1)use_theoretical_price_variant(self)
margin_classification_id
Many2one → product.margin.classification
comodel_name='product.margin.classification'
string='Margin Classification'
margin_state
Selection
compute='_compute_theoretical_multi'
multi='theoretical_multi'
selection=MARGIN_STATE_SELECTION
store=True
string='Theoretical Price State'
theoretical_difference
Float
compute='_compute_theoretical_multi'
digits=dp.get_precision('Product Price')
multi='theoretical_multi'
store=True
string='Theoretical Difference'
theoretical_price
Float
compute='_compute_theoretical_multi'
digits=dp.get_precision('Product Price')
multi='theoretical_multi'
store=True
string='Theoretical Price'
use_theoretical_price(self)