TIP: You can type at any time to perform a new search.
Sale Order Product Recommendation
sale_order_product_recommendation · OCA/sale-workflow
- Repository
- OCA/sale-workflow · module folder · Try on Runboat
- Module version
- 1.1.0
- Category
- Sales
- Folder size
- 0.18 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/sale-workflow
- Last tracking update
- 2026-08-07 09:06:23
- Authors
- Odoo Community Association (OCA), Tecnativa
- Maintainers
- Odoo Community Association (OCA), Tecnativa
- Committers
- Omar (Comunitea), OCA-git-bot, oca-ci, joaoc
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- None
- Description
This module adds a recommended products wizard to current sale order. It is based on recent delivered products, and allows the salesman to quickly know the most sold products for current customer, which results in an easy to use hint to improve sale. If you want a better mobile usability, the module is ready to use with the 'web_widget_numeric_step' module. Just install it and you will get a better numeric input experience.
Code Analysis ⓘ
Views touched (3)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
res_config_settings_view_form_sale |
res.config.settings | form | Inherits sale.res_config_settings_view_form | |
sale_order_recommendation_view_form |
Recommended Products for this Customer | sale.order.recommendation | form | New |
view_order_form |
Recommended products button | sale.order | form | Inherits sale.view_order_form |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (4)
New fields (2)
-
force_zero_units_includedBoolean -
sale_line_recommendation_domainChardefault='[]'
No public methods.
New fields (6)
-
default_line_amountIntegerdefault=15default_model='sale.order.recommendation'string='Default sale number of recommendations' -
default_monthsFloatdefault=6default_model='sale.order.recommendation'string='Default sale recommendation months' -
default_sale_recommendation_price_originSelectiondefault='pricelist'default_model='sale.order.recommendation'required=Truestring='Price origin' args: [('pricelist', 'Pricelist'), ('last_sale_price', 'Last sale price')] -
default_use_delivery_addressBooleandefault_model='sale.order.recommendation'string='Use delivery address' -
force_zero_units_includedBooleanhelp='Add recomented products in so even if units included is zero.'readonly=Falserelated='company_id.force_zero_units_included' -
sale_line_recommendation_domainCharhelp='Domain applied to find SO lines to propose as recommended products.'readonly=Falserelated='company_id.sale_line_recommendation_domain'
No public methods.
New fields (7)
-
line_amountIntegerdefault=15help='The less, the faster they will be found.'required=True args: 'Number of recommendations' -
line_idsOne2many → sale.order.recommendation.lineargs: 'sale.order.recommendation.line', 'wizard_id', 'Products' -
monthsFloatdefault=6help='Consider these months backwards to generate recommendations.'required=True -
order_idMany2one → sale.orderdefault=<expr>ondelete='cascade'readonly=Truerequired=True args: 'sale.order', 'Sale Order' -
recommendations_orderSelectiondefault='times_delivered desc'required=True args: [('times_delivered desc', 'Times delivered'), ('units_delivered desc', 'Units delivered'), ('product_categ_complete_name asc', 'Product category'), ('product_default_code asc', 'Product code'), ('product_name asc', 'Product name')] -
sale_recommendation_price_originSelectiondefault='pricelist'string='Product price origin' args: [('pricelist', 'Pricelist'), ('last_sale_price', 'Last sale price')] -
use_delivery_addressBooleanstring='Use delivery address'
-
action_accept(self)Propagate recommendations to sale order. -
action_reset(self)Empty the list of recommendations. -
generate_recommendations(self)Generate lines according to context sale order.
New fields (17)
-
currency_idMany2onerelated='product_id.currency_id' -
image_128Imagereadonly=Truerelated='product_id.image_128' -
partner_idMany2onerelated='wizard_id.order_id.partner_id' -
price_unitFloatcompute='_compute_price_unit'digits='Product Price' -
pricelist_idMany2onerelated='wizard_id.order_id.pricelist_id' -
product_categ_complete_nameCharreadonly=Truerelated='product_id.categ_id.complete_name'store=Truestring='Product category' -
product_default_codeCharreadonly=Truerelated='product_id.default_code'store=True -
product_idMany2one → product.productargs: 'product.product' -
product_is_favoriteBooleanreadonly=Falserelated='product_id.is_favorite'store=True -
product_nameCharreadonly=Truerelated='product_id.name' -
product_uom_readonlyBooleanrelated='sale_line_id.product_uom_readonly' -
sale_line_idMany2one → sale.order.linecomodel_name='sale.order.line' -
sale_uom_idMany2one → uom.uomcomodel_name='uom.uom'compute='_compute_sale_uom_id'readonly=Falsestore=Truestring='Unit of Measure' -
times_deliveredIntegerreadonly=True -
units_deliveredFloatreadonly=True -
units_includedFloat -
wizard_idMany2one → sale.order.recommendationondelete='cascade'readonly=Truerequired=True args: 'sale.order.recommendation', 'Wizard'
No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…