Repository
odoo/odoo · module folder
Module version
1.0
Category
Website
Folder size
5.12 MB
License
LGPL-3
Application
No
Auto-installable
No
Website
https://www.odoo.com/page/quote-builder
Last tracking update
2026-08-07 05:03:19
Authors
Maintainers
None
Committers
Xavier Morel, Olivier Dony, Christophe Simonis, Thibault Delavallée, Martin Trigaux, Odoo Translation Bot, Denis Ledoux, Joren Van Onder, Nicolas Martinelli, Jérome Maes, Richard Mathot, qdp-odoo, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Laurent Smet, Toufik Benjaa, tbe-odoo, len-odoo, Jorge Pinna Puissant, Denis Vermylen, fda-odoo, Rémi Rahir
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
None
Description

Code Analysis

Views touched (20)
XML IDNameModelTypeStatus
assets_editor Website Quote Editor assets ir.ui.view qweb Inherits web_editor.assets_editor
assets_frontend Website Quote frontend assets ir.ui.view qweb Inherits website.assets_frontend
change_quantity Change Quantity ir.ui.view qweb Inherits website_quote.pricing
chatter Allow Comments & History ir.ui.view qweb Inherits website_quote.so_quotation
navigation_menu navigation_menu ir.ui.view qweb New
optional_products optional_products ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
portal_my_quotations_inherit_quote portal_my_quotations_inherit_quote ir.ui.view qweb Inherits sale.portal_my_quotations
pricing Price ir.ui.view qweb New
report_quote report_quote ir.ui.view qweb New
report_saleorder_validity_date report_saleorder_validity_date ir.ui.view qweb Inherits sale.report_saleorder_document
res_config_settings_view_form res.config.settings.view.form.inherit.website.quote res.config.settings form Inherits sale.res_config_settings_view_form
sale_order_form_quote sale.order.form.payment sale.order form Inherits sale.view_order_form
so_quotation Product Quotation ir.ui.view qweb New
so_quotation_content Quotation Content ir.ui.view qweb New
so_template SO Template ir.ui.view qweb New
view_sale_quote_template_form sale.quote.template.form sale.quote.template form New
view_sale_quote_template_search sale.quote.template.search sale.quote.template search New
view_sale_quote_template_tree sale.quote.template.tree sale.quote.template tree New
website.layout_footer_copyright Footer Copyright ir.ui.view qweb Inherits website.layout
HTTP endpoints (11)
Route(s)HandlerAuthTypeMethodsFlags
(inherited route override) CustomerPortal.portal_order_page inherited http ALL
/quote/add_line/<int:option_id>/<int:order_id>/<token> sale_quote.add public http ALL sudo website
/quote/<int:order_id>/<token>/decline sale_quote.decline public http POST sudo website
/quote/<int:order_id>/transaction/token sale_quote.payment_token public http ALL sudo website
/quote/<int:order_id>/transaction/json_token sale_quote.payment_token_json public json ALL sudo
/quote/<int:order_id>/transaction/ sale_quote.payment_transaction_token public json ALL sudo website
/quote/template/<model('sale.quote.template'):quote> sale_quote.template_view user http ALL website
/quote/update_line sale_quote.update public json ALL website
/quote/update_line_dict sale_quote.update_line_dict public json ALL sudo website
/quote/<int:order_id>/<token> sale_quote.view public http ALL sudo website
/quote/<int:order_id> sale_quote.view_user user http ALL website
Models touched (9)

New fields (0)

No new fields.

Public methods (1)
  • unlink(self)
    @api.multi

New fields (2)
  • quote_description Html
    sanitize_attributes=False translate=html_translate args: 'Description for the quote'
  • website_description Html
    sanitize_attributes=False args: 'Description for the website'
Public methods (0)

No public methods.

New fields (1)
  • default_template_id Many2one → sale.quote.template
    default_model='sale.order' string='Default Template' args: 'sale.quote.template'
Public methods (0)

No public methods.

New fields (6)
  • amount_undiscounted Float
    compute='_compute_amount_undiscounted' digits=0 args: 'Amount Before Discount'
  • options One2many → sale.order.option
    copy=True readonly=True states={'draft': [('readonly', False)], 'sent': [('readonly', False)]} args: 'sale.order.option', 'order_id', 'Optional Products Lines'
  • quote_viewed Boolean
    args: 'Quotation Viewed'
  • require_payment Selection
    default=_get_default_online_payment help='Choose how you want to confirm an order to launch the delivery process. You can either request a digital signature or an upfront payment. With a digital signature, you can request the payment when issuing the invoice.' string='Confirmation Mode' args: [(0, 'Online Signature'), (1, 'Online Payment')]
  • template_id Many2one → sale.quote.template
    default=_get_default_template readonly=True states={'draft': [('readonly', False)], 'sent': [('readonly', False)]} args: 'sale.quote.template', 'Quotation Template'
  • website_description Html
    sanitize_attributes=False translate=html_translate args: 'Description'
Public methods (9)
  • action_confirm(self)
    @api.multi
  • copy(self, default=None)
    @api.multi
  • get_access_action(self, access_uid=None)
    @api.multi
    Instead of the classic form view, redirect to the online quote if it exists.
  • get_mail_url(self)
  • get_portal_confirmation_action(self)
    Template override default behavior of pay / sign chosen in sales settings
  • onchange_partner_id(self)
    @api.onchange('partner_id')
  • onchange_template_id(self)
    @api.onchange('template_id')
  • onchange_update_description_lang(self)
    @api.onchange('partner_id')
  • open_quotation(self)
    @api.multi

New fields (2)
  • option_line_id One2many → sale.order.option
    args: 'sale.order.option', 'line_id', 'Optional Products Lines'
  • website_description Html
    sanitize=False translate=html_translate args: 'Line Description'
Public methods (3)
  • create(self, values)
    @api.model
  • product_id_change(self)
    @api.onchange('product_id')
  • write(self, values)
    @api.multi

New fields (11)
  • discount Float
    digits=dp.get_precision('Discount') args: 'Discount (%)'
  • layout_category_id Many2one → sale.layout_category
    string='Section' args: 'sale.layout_category'
  • line_id Many2one → sale.order.line
    on_delete='set null' args: 'sale.order.line'
  • name Text
    required=True args: 'Description'
  • order_id Many2one → sale.order
    index=True ondelete='cascade' args: 'sale.order', 'Sales Order Reference'
  • price_unit Float
    digits=dp.get_precision('Product Price') required=True args: 'Unit Price'
  • product_id Many2one → product.product
    domain=[('sale_ok', '=', True)] args: 'product.product', 'Product'
  • quantity Float
    default=1 digits=dp.get_precision('Product UoS') required=True args: 'Quantity'
  • sequence Integer
    help='Gives the sequence order when displaying a list of suggested product.' args: 'Sequence'
  • uom_id Many2one → product.uom
    required=True args: 'product.uom', 'Unit of Measure '
  • website_description Html
    sanitize_attributes=False translate=html_translate args: 'Line Description'
Public methods (1)
  • button_add_to_order(self)
    @api.multi

New fields (10)
  • discount Float
    default=0.0 digits=dp.get_precision('Discount') args: 'Discount (%)'
  • layout_category_id Many2one → sale.layout_category
    string='Section' args: 'sale.layout_category'
  • name Text
    required=True translate=True args: 'Description'
  • price_unit Float
    digits=dp.get_precision('Product Price') required=True args: 'Unit Price'
  • product_id Many2one → product.product
    domain=[('sale_ok', '=', True)] required=True args: 'product.product', 'Product'
  • product_uom_id Many2one → product.uom
    required=True args: 'product.uom', 'Unit of Measure '
  • product_uom_qty Float
    default=1 digits=dp.get_precision('Product UoS') required=True args: 'Quantity'
  • quote_id Many2one → sale.quote.template
    index=True ondelete='cascade' required=True args: 'sale.quote.template', 'Quotation Template Reference'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of sale quote lines.' args: 'Sequence'
  • website_description Html
    related='product_id.product_tmpl_id.quote_description' translate=html_translate args: 'Line Description'
Public methods (2)
  • create(self, values)
    @api.model
  • write(self, values)
    @api.multi

New fields (9)
  • discount Float
    digits=dp.get_precision('Discount') args: 'Discount (%)'
  • layout_category_id Many2one → sale.layout_category
    string='Section' args: 'sale.layout_category'
  • name Text
    required=True translate=True args: 'Description'
  • price_unit Float
    digits=dp.get_precision('Product Price') required=True args: 'Unit Price'
  • product_id Many2one → product.product
    domain=[('sale_ok', '=', True)] required=True args: 'product.product', 'Product'
  • quantity Float
    default=1 digits=dp.get_precision('Product UoS') required=True args: 'Quantity'
  • template_id Many2one → sale.quote.template
    index=True ondelete='cascade' required=True args: 'sale.quote.template', 'Quotation Template Reference'
  • uom_id Many2one → product.uom
    required=True args: 'product.uom', 'Unit of Measure '
  • website_description Html
    sanitize_attributes=False translate=html_translate args: 'Option Description'
Public methods (0)

No public methods.

New fields (9)
  • active Boolean
    default=True help='If unchecked, it will allow you to hide the quotation template without removing it.'
  • mail_template_id Many2one → mail.template
    domain=[('model', '=', 'sale.order')] help='This e-mail template will be sent on confirmation. Leave empty to send nothing.' args: 'mail.template', 'Confirmation Mail'
  • name Char
    required=True args: 'Quotation Template'
  • note Text
    args: 'Terms and conditions'
  • number_of_days Integer
    help='Number of days for the validity date computation of the quotation' args: 'Quotation Duration'
  • options One2many → sale.quote.option
    copy=True args: 'sale.quote.option', 'template_id', 'Optional Products Lines'
  • quote_line One2many → sale.quote.line
    copy=True args: 'sale.quote.line', 'quote_id', 'Quotation Template Lines'
  • require_payment Selection
    default=0 help='Choose how you want to confirm an order to launch the delivery process. You can either request a digital signature or an upfront payment. With a digital signature, you can request the payment when issuing the invoice.' string='Confirmation Mode' args: [(0, 'Online Signature'), (1, 'Online Payment')]
  • website_description Html
    sanitize_attributes=False translate=html_translate args: 'Description'
Public methods (1)
  • open_template(self)
    @api.multi

Loading…

Loading…

Loading…