TIP: You can type at any time to perform a new search.
Product Abc Classification
product_abc_classification · OCA/product-attribute
- Repository
- OCA/product-attribute · module folder · Try on Runboat
- Module version
- 2.1.0
- Category
- Uncategorized
- Folder size
- 0.18 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/product-attribute
- Last tracking update
- 2026-08-07 08:42:54
- Authors
- ACSONE SA/NV, Odoo Community Association (OCA), ForgeFlow
- Maintainers
- ACSONE SA/NV, Odoo Community Association (OCA), ForgeFlow
- Committers
- JordiMForgeFlow, Weblate, OCA-git-bot, oca-ci, Hoang Diep
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- product_abc_classification_sale_stock
- Description
This modules provides the bases to build ABC analysis (or ABC classification) addons. These classification are used by inventory management teams to help identify the most important products in their portfolio and ensure they prioritize managing them above those less valuable. Managers will create a profile with several levels (percentages) and then the profiled products will automatically get a corresponding level using the ABC classification. The addon *product_abc_classification_sale_stock* defines a computation profile based on the number of sale order line delivered by product.
Code Analysis ⓘ
Views touched (8)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
abc_classification_product_level_form_view |
abc.classification.product.level.form (in product_abc_classification) | abc.classification.product.level | form | New |
abc_classification_product_level_search_view |
abc.classification.product.level.search (in product_abc_classification) | abc.classification.product.level | search | New |
abc_classification_product_level_tree_view |
abc.classification.product.level.tree (in product_abc_classification) | abc.classification.product.level | list | New |
abc_classification_profile_form_view |
abc.classification.profile.form (in product_abc_classification) | abc.classification.profile | form | New |
abc_classification_profile_tree_view |
abc.classification.profile.tree (in product_abc_classification) | abc.classification.profile | list | New |
product_product_form_view |
product.product.form (ABC Classification) | product.product | form | Inherits product.product_normal_form_view |
product_template_form_view |
product.template.form (ABC Classification) | product.template | form | Inherits product.product_template_form_view |
view_product_category_form |
product.category.form - product_abc_classification | product.category | form | Inherits product.product_category_form_view |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (6)
New fields (4)
-
nameCharhelp='Classification A, B or C'required=True -
percentageFloatdefault=0.0required=Truestring='% Indicator' -
percentage_productsFloatdefault=0.0required=Truestring='% Products' -
profile_idMany2one → abc.classification.profileondelete='cascade' args: 'abc.classification.profile'
No public methods.
New fields (10)
-
allowed_profile_idsMany2many → abc.classification.profilecomodel_name='abc.classification.profile'related='product_id.abc_classification_profile_ids' -
company_idMany2one → res.companycompute='_compute_company_id'index=Truereadonly=Truestore=True args: 'res.company' -
computed_level_idMany2one → abc.classification.levelreadonly=Truestring='Computed classification level' args: 'abc.classification.level' -
flagBooleancompute='_compute_flag'default=Falseindex=Truestore=Truestring='If True, this means that the manual classification is different from the computed one' -
level_idMany2one → abc.classification.levelcompute='_compute_level_id'domain="[('profile_id', '=', profile_id)]"store=Truestring='Classification level' args: 'abc.classification.level' -
manual_level_idMany2one → abc.classification.leveldomain="[('profile_id', '=', profile_id)]"string='Manual classification level'tracking=True args: 'abc.classification.level' -
product_idMany2one → product.productcheck_company=Trueindex=Trueondelete='cascade'required=Truestring='Product' args: 'product.product' -
product_tmpl_idMany2one → product.templateindex=Truereadonly=Truestring='Product template' args: 'product.template' -
profile_idMany2one → abc.classification.profilecheck_company=Truerequired=Truestring='Profile' args: 'abc.classification.profile' -
profile_typeSelectionreadonly=Truerelated='profile_id.profile_type'store=True
-
create(self, vals_list)@api.model_create_multi -
write(self, vals)We apply the manual level to the product level if computed level is modified and only for profiles with auto_apply_computed_value = =True
New fields (8)
-
auto_apply_computed_valueBooleandefault=Falsehelp='Check this if you want to apply the computed level on each product that has this profile.' -
company_idMany2one → res.companycomodel_name='res.company'string='Company' -
level_idsOne2many → abc.classification.levelcomodel_name='abc.classification.level'inverse_name='profile_id' -
nameCharrequired=True -
periodIntegerdefault=365required=Truestring='Period on which to compute the classification (Days)' -
product_countIntegercompute='_compute_product_count'readonly=True -
product_variant_idsMany2many → product.productcolumn1='profile_id'column2='product_id'comodel_name='product.product'index=Truerelation='abc_classification_profile_product_rel' -
profile_typeSelectionindex=Truerequired=Trueselection=[('manual', 'Manual')]string='Type of ABC classification'
-
action_view_products(self) -
copy_data(self, default=None) -
write(self, vals)
New fields (1)
-
abc_classification_profile_idsMany2many → abc.classification.profilecolumn1='categ_id'column2='profile_id'comodel_name='abc.classification.profile'index=Truerelation='abc_classification_profile_product_categ_rel'
-
update_product_abc_classification_profile(self)
New fields (3)
-
abc_classification_product_level_idsOne2many → abc.classification.product.levelindex=Trueinverse_name='product_id' args: 'abc.classification.product.level' -
abc_classification_profile_idsMany2many → abc.classification.profilecheck_company=Truecolumn1='product_id'column2='profile_id'comodel_name='abc.classification.profile'index=Truerelation='abc_classification_profile_product_rel' -
abc_classification_profile_updatable_from_categoryBooleandefault=True
-
create(self, vals_list)@api.model_create_multi -
write(self, vals)
New fields (2)
-
abc_classification_product_level_idsOne2many → abc.classification.product.levelcompute='_compute_abc_classification_product_level_ids'inverse='_inverse_abc_classification_product_level_ids'inverse_name='product_tmpl_id'store=True args: 'abc.classification.product.level' -
abc_classification_profile_idsMany2many → abc.classification.profilecheck_company=Truecompute='_compute_abc_classification_profile_ids'inverse='_inverse_abc_classification_profile_ids'store=True args: 'abc.classification.profile'
No public methods.
Loading…
Loading…
Loading…
- Status
- Open migration PR — not merged yet for this version
- CI status
- green — ready to merge
- Open since
- 16 days ago
- Last activity
- 7 days ago
- Repository
- OCA/product-attribute
- Pull request
- [19.0][MIG] product_abc_classification: Migration to 19.0 (#2366)
- Status
- Open migration PR — not merged yet for this version
- CI status
- green — ready to merge
- Open since
- 220 days ago
- Last activity
- 115 days ago
- Repository
- OCA/product-attribute
- Pull request
- [19.0][MIG] product_abc_classification: Migration to 19.0 (#2188)