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 IDNameModelTypeStatus
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_included Boolean
  • sale_line_recommendation_domain Char
    default='[]'
Public methods (0)

No public methods.

New fields (6)
  • default_line_amount Integer
    default=15 default_model='sale.order.recommendation' string='Default sale number of recommendations'
  • default_months Float
    default=6 default_model='sale.order.recommendation' string='Default sale recommendation months'
  • default_sale_recommendation_price_origin Selection
    default='pricelist' default_model='sale.order.recommendation' required=True string='Price origin' args: [('pricelist', 'Pricelist'), ('last_sale_price', 'Last sale price')]
  • default_use_delivery_address Boolean
    default_model='sale.order.recommendation' string='Use delivery address'
  • force_zero_units_included Boolean
    help='Add recomented products in so even if units included is zero.' readonly=False related='company_id.force_zero_units_included'
  • sale_line_recommendation_domain Char
    help='Domain applied to find SO lines to propose as recommended products.' readonly=False related='company_id.sale_line_recommendation_domain'
Public methods (0)

No public methods.

New fields (7)
  • line_amount Integer
    default=15 help='The less, the faster they will be found.' required=True args: 'Number of recommendations'
  • line_ids One2many → sale.order.recommendation.line
    args: 'sale.order.recommendation.line', 'wizard_id', 'Products'
  • months Float
    default=6 help='Consider these months backwards to generate recommendations.' required=True
  • order_id Many2one → sale.order
    default=<expr> ondelete='cascade' readonly=True required=True args: 'sale.order', 'Sale Order'
  • recommendations_order Selection
    default='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_origin Selection
    default='pricelist' string='Product price origin' args: [('pricelist', 'Pricelist'), ('last_sale_price', 'Last sale price')]
  • use_delivery_address Boolean
    string='Use delivery address'
Public methods (3)
  • 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_id Many2one
    related='product_id.currency_id'
  • image_128 Image
    readonly=True related='product_id.image_128'
  • partner_id Many2one
    related='wizard_id.order_id.partner_id'
  • price_unit Float
    compute='_compute_price_unit' digits='Product Price'
  • pricelist_id Many2one
    related='wizard_id.order_id.pricelist_id'
  • product_categ_complete_name Char
    readonly=True related='product_id.categ_id.complete_name' store=True string='Product category'
  • product_default_code Char
    readonly=True related='product_id.default_code' store=True
  • product_id Many2one → product.product
    args: 'product.product'
  • product_is_favorite Boolean
    readonly=False related='product_id.is_favorite' store=True
  • product_name Char
    readonly=True related='product_id.name'
  • product_uom_readonly Boolean
    related='sale_line_id.product_uom_readonly'
  • sale_line_id Many2one → sale.order.line
    comodel_name='sale.order.line'
  • sale_uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_sale_uom_id' readonly=False store=True string='Unit of Measure'
  • times_delivered Integer
    readonly=True
  • units_delivered Float
    readonly=True
  • units_included Float
  • wizard_id Many2one → sale.order.recommendation
    ondelete='cascade' readonly=True required=True args: 'sale.order.recommendation', 'Wizard'
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…