eCommerce

website_sale
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/website_sale
VERSION
VERSION 1.1
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Fabien Pinckaers, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Xavier ALT, David Monjoie, Mohammed Shekha, Nicolas Martinelli, Nicolas Lempereur, Atul Patel, Géry Debongnie, Aaron Bohy, qsm-odoo, Julien Castiaux, Victor Feyens, Andrea Grazioso (agr-odoo), Julien Mougenot, Achraf (abz), Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Arnaud Joset, William Braeckman, Benjamin Vray, Kishan Gajjar, odoo, Benoit Socias, Nicolas Bayet, Antoine Vandevenne (anv), Demesmaeker, Aurelien van Delft (avd), Hubert Van De Walle, Valentin Chevalier, Renaud Thiry, Habib (ayh), alsh-odoo, Louis Wicket (wil), Victor Piryns (pivi), Julien (jula), Mahamadasif Ansari, amdi-odoo, Pieter Claeys (clpi), Soukéina Bojabza, Robin Lejeune (role), Louis (loco), Levi Siuzdak (sile), Dylan Kiss (dyki), FrancoisGe, Valeriya(vchu), tong-odoo, Anita (anko), Brieuc-brd, Maksym Yankin, divy-odoo, Walid (wasa), sesn-odoo, stefanorigano (SRI), Mattis Megevand, lase@odoo.com, Aurelien MARIE (auma), Maryam Kia, Louis (loti), jorv-odoo, Mehdi Outagant (MOU), Serge Bayet (seba), reka-odoo, “Beekan”, Julien Carion (juca), kcv-odoo, dere-odoo, Julien Segers (juse), Louis Gobert, Lina (liew), Chrysanthe (chgo), Rodolpho Lima, aath-odoo, mano-odoo, Sanjay Sharma, aamo-odoo, Majed Alhanash (malh), kago-odoo, Patricia Daloze (pda), Manisha Tulsiyani, Xavier Luyckx (xlu), Stéphane Diez, Ryan Cen, Antoine (anso), Manushi Shah, Rahil Ghanchi, Sébastien (blse), Pierre Pulinckx (PIPU), Arib Ansari, Julien Schwanen, paan-odoo, Victor Miguel Armenta Carrillo, dija-odoo, sben-odoo, David Van Droogenbroeck (DROD), pkgu-odoo, Mohammad Abdulmoneim (abdu), khsr-odoo, Pierre Lamotte (pila), nikj-odoo, Pierre Pulinckx, Bastien PIERRE, Anton Romanova (roan), masm-odoo, Corentin Heinix (cohe), Shrey Mehta, pish-odoo, bona-odoo, lse-odoo, Thomas Josse (THJO), Damien Decleire (deda), Krzysztof Magusiak (krma), Mahdi Alijani (malj), Florian Malfroid, Omar (OSAH), nipl-odoo, Ajit Singh, krip-odoo, Basioni (basm), utma-odoo, Hadi El Yakhni, kdes-odoo, Ester Andreetto, Rushil Patel, Elier Ayala Bernal, bhra-odoo, pajo, defl, Giorgio Tocco (gito), josm-odoo, MAGREMENT, sawer, agbr-odoo, Junqi, Valeriya (vchu), Lancelot Semal, rusp-odoo, alap-odoo, Alessandro Lupo, chdh-odoo, Parth Pujara, Julien Launois (jula), Laetitia (ldau), Augustin (duau), romo, Serhii Rubanskyi, Alice Gaudon, adip-odoo, josv-odoo, Nisarg (nipl), assh-odoo, Lionel Piraux (lipi), lecr, Ravij Parikh, Merlin Guillaume, YoussefM890, Mazen, saurabh, Rudra Patel, Stephane Vanmeerhaeghe (stva), Julien (jdeh), Zachary (zavan), ibo-odoo, Farah (ahmfa), Nikhil Kajavadra, ELCO, khaj-odoo, Levi Bensley, Khaj-odoo, chpa-odoo, panj-odoo, Oussema Heni, stefanorigano (sri), Claire Nguyen (clan), Romain ROSANO (rros), Serhii Rubanskyi - seru, metu-odoo, dabo-odoo, ahham, nealwebdev, rudo, syna-odoo, chga-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/ecommerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - portal
    - http_routing
    - auth_signup
    - resource
    - social_media
    - google_recaptcha
    - utm
    - html_builder
    - sale
    - sales_team
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - payment
    - website_payment
    - website_mail
    - portal_rating
    - rating
    - delivery
    - payment_custom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES geoip2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (213)
XML IDNameModelTypeStatus
accept_terms_and_conditions Accept Terms & Conditions ir.ui.view qweb Inherits navigation_buttons
accordion_more_information More Information Accordion Item ir.ui.view qweb Inherits website_sale.product_accordion
account_move_view_form account.move.form.inherit.website_sale account.move group Inherits account.view_move_form
address_b2b Show b2b fields ir.ui.view qweb Inherits website_sale.address
address_edit_button Address edit button ir.ui.view qweb New
address_on_checkout Address on payment ir.ui.view qweb New
all_products_link_name All Products name ir.ui.view qweb New
alternative_products Alternative Products ir.ui.view qweb Inherits website_sale.product
attribute_tree_view product.attribute.list product.attribute field Inherits product.attribute_tree_view
badge_extra_price Badge Extra Price ir.ui.view qweb New
base_unit_price Product Base unit price ir.ui.view qweb New
billing_address_list billing_address_list ir.ui.view qweb New
carousel_product_indicators Carousel Product ir.ui.view qweb New
carousel_product_indicators_bottom Carousel Product Indicators Bottom ir.ui.view qweb Inherits website_sale.shop_product_carousel
carousel_product_indicators_left Carousel Product Indicators Left ir.ui.view qweb Inherits website_sale.shop_product_carousel
cart Shopping Cart ir.ui.view qweb New
cart_combo_item_line cart_combo_item_line ir.ui.view qweb New
cart_line_description_following_lines Shopping Cart Line Description Following Lines ir.ui.view qweb New
cart_line_product_link Shopping Cart Line Product Link ir.ui.view qweb New
cart_lines Shopping Cart Lines ir.ui.view qweb New
cart_lines_price Shopping Cart Line Price ir.ui.view qweb New
cart_lines_quantity Shopping Cart Line quantity ir.ui.view qweb New
cart_product_price cart_product_price ir.ui.view qweb New
categorie_link Category Link ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
checkout_layout Checkout layout page ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
coupon_form Coupon form ir.ui.view qweb New
delivery_address_list delivery_address_list ir.ui.view qweb New
delivery_form delivery_form ir.ui.view qweb New
delivery_method delivery_method ir.ui.view qweb New
digest_digest_view_form digest.digest.view.form.inherit.website_sale digest.digest group Inherits digest.digest_digest_view_form
dynamic_filter_template_product_product_products_item Generic Product Template (customizable) ir.ui.view qweb New
dynamic_filter_template_product_public_category_clickable_items dynamic_filter_template_product_public_category_clickable_items ir.ui.view qweb Inherits website_sale.dynamic_filter_template_product_public_category_default
dynamic_filter_template_product_public_category_default dynamic_filter_template_product_public_category_default ir.ui.view qweb New
ecom_show_extra_fields Show Extra Fields ir.ui.view qweb Inherits website_sale.product
extra_info Checkout Extra Info ir.ui.view qweb New
filter_products_price Filter by Prices ir.ui.view qweb New
filter_products_tags Filter by Tags ir.ui.view qweb New
filter_products_tags_list filter_products_tags_list ir.ui.view qweb New
gmc_xml gmc_xml ir.ui.view qweb New
header_cart_link Header Cart Link ir.ui.view qweb New
header_hide_empty_cart_link Header Hide Empty Cart link ir.ui.view qweb Inherits website_sale.header_cart_link
navigation_buttons Navigation buttons ir.ui.view qweb New
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories_list
payment Payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
price_dynamic_filter_template_product_product Dynamic Product Filter Price ir.ui.view qweb New
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product_accordion Accordion On Product Page ir.ui.view qweb New
product_attribute_view_form product.attribute.view.form product.attribute group Inherits product.product_attribute_view_form
product_category_extra_link Product Category Extra Link ir.ui.view qweb New
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_document_form product.document.form.website_sale product.document sheet Inherits sale.product_document_form
product_document_kanban product.document.kanban.website_sale product.document xpath Inherits sale.product_document_kanban
product_document_list product.document.list.website_sale product.document field Inherits sale.product_document_list
product_document_search product.document.search.sale product.document search Inherits sale.product_document_search
product_feed_form product.feed.view.form product.feed form New
product_feed_list product.feed.view.list product.feed list New
product_feed_search product.feed.view.search product.feed search New
product_image_view_kanban product.image.view.kanban product.image kanban New
product_pages_kanban_view Product Pages Kanban product.template kanban Inherits product_template_view_kanban_website_sale
product_pages_tree_view Product Pages List product.template xpath Inherits product_template_view_tree_website_sale
product_picture_magnify_click Image Zoom On Click ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_pricelist_item_form product.pricelist.item.view.form.inherit product.pricelist.item div Inherits sale.product_pricelist_item_form
product_product_normal_website_form_view product.product.normal.view.website product.product field Inherits product.product_normal_form_view
product_product_view_form_easy_inherit_website_sale product.product.view.form.easy.inherit.website_sale product.product group Inherits product.product_variant_easy_edit_view
product_product_view_form_normalized product.product.view.form.normalized.website.sale product.product div Inherits product.product_product_view_form_normalized
product_product_view_form_normalized_website_sale product.product.view.form.normalized.website.sale.inherit product.product xpath Inherits product.product_product_view_form_normalized
product_product_website_tree_view product.product.website.list product.product field Inherits product.product_product_tree_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.list product.public.category list New
product_ribbon_form_view product.ribbon.form.view product.ribbon form New
product_ribbon_view_tree product.ribbon.list product.ribbon list New
product_template_form_view product.template.product.website.form product.template span Inherits product.product_template_form_view
product_template_only_website_form_view product.template.product.only.website.form product.template field Inherits product.product_template_only_form_view
product_template_search_view_website product.template.search.published product.template filter Inherits product.product_template_search_view
product_template_view_kanban_website_sale product.template.view.kanban.website_sale product.template kanban Inherits product.product_template_kanban_view
product_template_view_tree product.template.view.list.inherit.website_sale product.template field Inherits product.product_template_tree_view
product_template_view_tree_website_sale product.template.view.list.website_sale product.template list Inherits website_sale.product_template_view_tree
product_variant_preview product_variant_preview ir.ui.view qweb New
products Products ir.ui.view qweb New
products_attributes Attributes & Variants filters ir.ui.view qweb Inherits website_sale.products
products_attributes_collapsible Collapsed Attributes & Variants filters ir.ui.view qweb Inherits website_sale.product_attribute_filters_form
products_breadcrumb Products Breadcrumb ir.ui.view qweb New
products_list_view List View (by default) ir.ui.view qweb Inherits website_sale.products
quick_reorder_button quick_reorder_button ir.ui.view qweb New
quick_reorder_history quick_reorder_history ir.ui.view qweb New
quick_reorder_sidebar quick_reorder_sidebar ir.ui.view qweb New
reduction_code Promo Code ir.ui.view qweb Inherits website_sale.total
res_config_settings_view_form res.config.settings.view.form.inherit.website.sale res.config.settings setting Inherits website_payment.res_config_settings_view_form
res_config_settings_view_form_inherit_sale res.config.settings.view.form.inherit.sale res.config.settings setting Inherits sale.res_config_settings_view_form
s_add_to_cart Add to Cart Button ir.ui.view qweb New
s_dynamic_snippet_category_list Category List ir.ui.view qweb New
s_dynamic_snippet_category_preview_data Category List Preview Data ir.ui.view qweb New
s_dynamic_snippet_products Products ir.ui.view qweb New
s_dynamic_snippet_products_preview_data Products Preview Data ir.ui.view qweb New
sale_order_portal_content_inherit_website_sale Orders Followup Products Links ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_re_order_btn Sale Order Order Again ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_tree sale.order.list.inherit.website.sale sale.order field Inherits sale.sale_order_tree
sale_order_view_form sale.order.form sale.order button Inherits sale.view_order_form
sale_report_view_graph_website sale.report.view.graph.website sale.report graph New
sale_report_view_pivot_website sale.report.view.pivot.website sale.report pivot New
sale_report_view_search_website sale.report.search sale.report search New
sale_report_view_tree sale.report.view.list.inherit.website.sale sale.report field Inherits sale.sale_report_view_tree
search Search Box ir.ui.view qweb New
snippets e-commerce snippets ir.ui.view qweb Inherits website.snippets
suggested_products_list Accessory Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
template_footer_website_sale eCommerce Footer ir.ui.view qweb Inherits website.layout
template_header_boxed template_header_boxed ir.ui.view qweb Inherits website.template_header_boxed
template_header_default template_header_default ir.ui.view qweb Inherits website.template_header_default
template_header_hamburger template_header_hamburger ir.ui.view qweb Inherits website.template_header_hamburger
template_header_mobile template_header_mobile ir.ui.view qweb Inherits website.template_header_mobile
template_header_sales_four template_header_sales_four ir.ui.view qweb Inherits website.template_header_sales_four
template_header_sales_one template_header_sales_one ir.ui.view qweb Inherits website.template_header_sales_one
template_header_sales_three template_header_sales_three ir.ui.view qweb Inherits website.template_header_sales_three
template_header_sales_two template_header_sales_two ir.ui.view qweb Inherits website.template_header_sales_two
template_header_search template_header_search ir.ui.view qweb Inherits website.template_header_search
template_header_sidebar template_header_sidebar ir.ui.view qweb Inherits website.template_header_sidebar
template_header_stretch template_header_stretch ir.ui.view qweb Inherits website.template_header_stretch
template_header_vertical template_header_vertical ir.ui.view qweb Inherits website.template_header_vertical
total total ir.ui.view qweb New
variants variants ir.ui.view qweb New
view_delivery_carrier_form_website_delivery delivery.carrier.website.form delivery.carrier field Inherits delivery.view_delivery_carrier_form
view_delivery_carrier_search delivery.carrier.search.inherit delivery.carrier filter Inherits delivery.view_delivery_carrier_search
view_delivery_carrier_tree delivery.carrier.list.inherit delivery.carrier field Inherits delivery.view_delivery_carrier_tree
view_product_image_form product.image.view.form product.image form New
view_sales_order_filter_ecommerce sale.order.ecommerce.search.view sale.order filter Inherits sale.view_sales_order_filter
view_sales_order_filter_ecommerce_abondand sale.order.ecommerce.abandonned.view sale.order search New
view_sales_order_filter_ecommerce_unpaid sale.order.ecommerce.search.unpaid.view sale.order filter Inherits sale.view_sales_order_filter
view_website_sale_website_form website_sale.website.form website notebook Inherits website.view_website_form
website_sale.address Address Management ir.ui.view qweb New
website_sale.address_card website_sale.address_card ir.ui.view qweb Inherits portal.address_card
website_sale.address_form_fields website_sale.address_form_fields ir.ui.view qweb Inherits portal.address_form_fields
website_sale.address_list website_sale.address_list ir.ui.view qweb Inherits portal.address_list
website_sale.brand_promotion website_sale.brand_promotion ir.ui.view qweb Inherits website.brand_promotion
website_sale.cart_summary_content website_sale.cart_summary_content ir.ui.view qweb New
website_sale.cta_separator Product Info - Dividers ir.ui.view qweb Inherits website_sale.product
website_sale.cta_wrapper CTA Wrapper ir.ui.view qweb New
website_sale.cta_wrapper_boxed Bordered CTA Wrapper ir.ui.view qweb Inherits website_sale.cta_wrapper
website_sale.cta_wrapper_large Large CTA Wrapper ir.ui.view qweb Inherits website_sale.cta_wrapper
website_sale.editor_previews Enable edit previews ir.ui.view qweb Inherits website_sale.products
website_sale.empty_cart_svg website_sale.empty_cart_svg ir.ui.view qweb New
website_sale.filmstrip_categories Categories Filmstrip ir.ui.view qweb New
website_sale.filmstrip_categories_bordered Categories Filmstrip Bordered ir.ui.view qweb Inherits website_sale.filmstrip_categories
website_sale.filmstrip_categories_grid Categories Filmstrip Grid ir.ui.view qweb Inherits website_sale.filmstrip_categories
website_sale.filmstrip_categories_images Categories Filmstrip Basic ir.ui.view qweb Inherits website_sale.filmstrip_categories
website_sale.filmstrip_categories_large_images Categories Filmstrip Cover ir.ui.view qweb Inherits website_sale.filmstrip_categories
website_sale.filmstrip_categories_pills Categories Filmstrip Tabs ir.ui.view qweb Inherits website_sale.filmstrip_categories
website_sale.filmstrip_categories_tabs Categories Filmstrip Tabs ir.ui.view qweb Inherits website_sale.filmstrip_categories
website_sale.filter_color_attributes Color attributes in Filter ir.ui.view qweb New
website_sale.filter_image_attributes Image attributes in Filter ir.ui.view qweb New
website_sale.filter_pills_attributes Pills attributes in Filter ir.ui.view qweb New
website_sale.filter_radio_and_multi_attributes Radio and Multi attributes in Filter ir.ui.view qweb New
website_sale.filter_select_attributes Select attributes in Filter ir.ui.view qweb New
website_sale.floating_bar Shop Floating Bar ir.ui.view qweb Inherits website_sale.products
website_sale.o_wsale_offcanvas Offcanvas ir.ui.view qweb New
website_sale.packaging_title Packaging title ir.ui.view qweb New
website_sale.product Product ir.ui.view qweb New
website_sale.product_attribute_filters_form Product Attribute Filters Form ir.ui.view qweb New
website_sale.product_buy_now Buy Now Button ir.ui.view qweb Inherits website_sale.cta_wrapper
website_sale.product_buy_now_large Large Buy Now Button ir.ui.view qweb Inherits website_sale.product_buy_now
website_sale.product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.cta_wrapper
website_sale.product_quantity_large Select Quantity Large ir.ui.view qweb Inherits website_sale.product_quantity
website_sale.product_search Searchbar On Product Page ir.ui.view qweb Inherits website_sale.product
website_sale.product_tags Product Tags ir.ui.view qweb New
website_sale.product_terms_and_conditions Terms and Conditions ir.ui.view qweb New
website_sale.product_tile_element_visibility Product tile elements visibility ir.ui.view qweb New
website_sale.product_title website_sale.product_title ir.ui.view qweb New
website_sale.products_attributes_top Attributes in top-nav ir.ui.view qweb New
website_sale.products_categories Categories in Left Side ir.ui.view qweb New
website_sale.products_categories_list eCommerce Categories ir.ui.view qweb New
website_sale.products_categories_list_collapsible Collapsed eCommerce Categories ir.ui.view qweb Inherits website_sale.products_categories_list
website_sale.products_categories_top Categories in top-nav ir.ui.view qweb New
website_sale.products_item Products item ir.ui.view qweb New
website_sale.products_mobile_cols_single Mobile: Show 1 product for row ir.ui.view qweb Inherits website_sale.products
website_sale.products_shop_title Show Shop Title ir.ui.view qweb New
website_sale.products_shop_title_align Align Shop Title ir.ui.view qweb New
website_sale.s_dynamic_snippet_category_template website_sale.s_dynamic_snippet_category_template ir.ui.view qweb Inherits website.s_dynamic_snippet_template
website_sale.s_mega_menu_big_icons_subtitles eCommerce: Menu - Big icons & subtitles ir.ui.view qweb New
website_sale.s_mega_menu_cards eCommerce: Menu - Cards ir.ui.view qweb New
website_sale.s_mega_menu_images_subtitles eCommerce: Menu - images & subtitles ir.ui.view qweb New
website_sale.s_mega_menu_little_icons eCommerce: Menu - Little icons ir.ui.view qweb New
website_sale.s_mega_menu_menu_image_menu eCommerce: Menu - Image - Menu ir.ui.view qweb New
website_sale.s_mega_menu_menus_logos eCommerce: Menus & logos ir.ui.view qweb New
website_sale.s_mega_menu_multi_menus eCommerce: Multi-Menus ir.ui.view qweb New
website_sale.s_mega_menu_odoo_menu eCommerce: Odoo Menu ir.ui.view qweb New
website_sale.s_mega_menu_thumbnails eCommerce: Menu - Thumbnails ir.ui.view qweb New
website_sale.shop_product_buttons Products Actions ir.ui.view qweb New
website_sale.shop_product_carousel Shop Product Carousel ir.ui.view qweb New
website_sale.shop_product_grid Shop Product Grid ir.ui.view qweb New
website_sale.shop_product_image website_sale.shop_product_image ir.ui.view qweb New
website_sale.shop_product_images Shop Product Images ir.ui.view qweb New
website_sale.shorter_cart_summary website_sale.shorter_cart_summary ir.ui.view qweb New
website_sale.sidebar_dropzone_at_bottom website_sale.sidebar_dropzone_at_bottom ir.ui.view qweb New
website_sale.sidebar_dropzone_at_top website_sale.sidebar_dropzone_at_top ir.ui.view qweb New
website_sale.sort Sort-by Template ir.ui.view qweb New
website_sale.tax_indication website_sale.tax_indication ir.ui.view qweb New
website_sale_layout website_sale_layout ir.ui.view qweb Inherits website.layout
website_sale_pricelist_form_view website_sale.pricelist.form product.pricelist notebook Inherits product.product_pricelist_view
website_sale_pricelist_tree_view product.pricelist.list.inherit.product product.pricelist field Inherits product.product_pricelist_view_tree
website_sale_visitor_page_view_graph website.track.view.graph website.track graph New
website_sale_visitor_page_view_search website.track.view.search website.track field Inherits website.website_visitor_page_view_search
website_sale_visitor_page_view_tree website.track.view.list website.track list New
website_sale_visitor_track_view_graph website.track.view.graph website.track field Inherits website.website_visitor_track_view_graph
website_sale_visitor_track_view_tree website.track.view.list website.track field Inherits website.website_visitor_track_view_tree
website_sale_visitor_view_form website.visitor.view.form website.visitor xpath Inherits website.website_visitor_view_form
website_sale_visitor_view_kanban website.visitor.view.kanban website.visitor field Inherits website.website_visitor_view_kanban
website_sale_visitor_view_tree website.visitor.view.list website.visitor field Inherits website.website_visitor_view_tree
wizard_checkout Wizard Checkout ir.ui.view qweb New
Models touched (36)

New fields (1)
  • website_id Many2one → website
    compute='_compute_website_id' help='Website through which this invoice was created for eCommerce orders.' readonly=True store=True string='Website' tracking=True args: 'website'
Public methods (1)
  • preview_invoice(self)

New fields (3)
  • abandoned_carts_amount Integer
    compute='_compute_abandoned_carts' string='Amount of Abandoned Carts'
  • abandoned_carts_count Integer
    compute='_compute_abandoned_carts' string='Number of Abandoned Carts'
  • website_ids One2many → website
    comodel_name='website' inverse_name='salesteam_id' string='Websites'
Public methods (1)
  • get_abandoned_carts(self)

New fields (1)
  • website_description Text
    readonly=False related='product_id.description_sale' string='Description for Online Quotations'
Public methods (0)

No public methods.

New fields (2)
  • kpi_website_sale_total Boolean
    string='eCommerce Sales'
  • kpi_website_sale_total_value Monetary
    compute='_compute_kpi_website_sale_total_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • get_frontend_session_info(self)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • is_thumbnail_visible Boolean
    help='Use product variant images instead of the attribute values displays.' string='Show Thumbnails'
  • preview_variants Selection
    default='hidden' help='Instantly created variants are available for selection from your\xa0/shop page.' selection=[('visible', 'Visible'), ('hidden', 'Hidden'), ('hover', 'Hover')] string='On Product Cards'
  • visibility Selection
    default='visible' selection=[('visible', 'Visible'), ('hidden', 'Hidden')]
Public methods (0)

No public methods.

New fields (1)
  • shown_on_product_page Boolean
    string='Publish on website'
Public methods (0)

No public methods.

New fields (12)
  • access_token Char
    copy=False default=<expr> readonly=True required=True
  • cache_expiry Datetime
    default=fields.Datetime.now readonly=True required=True
  • feed_cache Binary
    compute='_compute_feed_cache' readonly=True store=True
  • lang_id Many2one → res.lang
    compute='_compute_lang_id' domain="[('id', 'in', website_lang_ids)]" help='Select the language to translate product names, descriptions, and other text in the feed.' precompute=True readonly=False required=True store=True string='Language' args: 'res.lang'
  • last_notification_date Date
  • name Char
    required=True
  • pricelist_id Many2one → product.pricelist
    domain="[('website_id', 'in', (False, website_id)), ('selectable', '=', True)]" help='Specify a pricelist to localize the feed with a specific currency. If not set, the default website pricelist will be used.\nNote that the pricelist must be selectable on the website.' args: 'product.pricelist'
  • product_category_ids Many2many → product.public.category
    string='Categories' args: 'product.public.category'
  • target Selection
    default='gmc' required=True selection=[('gmc', 'Google Merchant Center')]
  • url Char
    compute='_compute_url'
  • website_id Many2one → website
    required=True args: 'website'
  • website_lang_ids Many2many
    related='website_id.language_ids'
Public methods (1)
  • action_invalidate_cache(self)

New fields (8)
  • can_image_1024_be_zoomed Boolean
    compute='_compute_can_image_1024_be_zoomed' store=True string='Can Image 1024 be zoomed'
  • embed_code Html
    compute='_compute_embed_code' sanitize=False
  • image_1920 Image
  • name Char
    required=True string='Name'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' index=True ondelete='cascade' string='Product Template'
  • product_variant_id Many2one → product.product
    comodel_name='product.product' index=True ondelete='cascade' string='Product Variant'
  • sequence Integer
    default=10
  • video_url Char
    help='URL of a video for showcasing your product.' string='Video URL'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the default_product_tmpl_id from the context to be applied if we have a product_variant_id set to avoid having the variant images to show also as template images. But we want it if we don't have a product_variant_id set.

New fields (3)
  • code Char
    groups='base.group_user' string='E-commerce Promotional Code'
  • selectable Boolean
    help='Allow the end user to choose this price list'
  • website_id Many2one → website
    comodel_name='website' default=_default_website domain="[('company_id', '=?', company_id)]" help='If you want a pricelist to be available on a website,you must fill in this field or make it selectable.Otherwise, the pricelist will not apply to any website.' ondelete='restrict' string='Website' tracking=20
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • base_unit_count Float
    default=1 digits=0 help='Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.' required=True string='Base Unit Count'
  • base_unit_id Many2one → website.base.unit
    comodel_name='website.base.unit' help='Define a custom unit to display in the price per unit of measure field.' string='Custom Unit of Measure'
  • base_unit_name Char
    compute='_compute_base_unit_name' help='Displays the custom unit for the products if defined or the selected unit of measure otherwise.'
  • base_unit_price Monetary
    compute='_compute_base_unit_price' string='Price Per Unit'
  • product_variant_image_ids One2many → product.image
    comodel_name='product.image' inverse_name='product_variant_id' string='Extra Variant Images'
  • variant_ribbon_id Many2one → product.ribbon
    comodel_name='product.ribbon' string='Variant Ribbon'
  • website_id Many2one
    readonly=False related='product_tmpl_id.website_id'
  • website_url Char
    compute='_compute_product_website_url' help='The full URL to access the document through the website.' string='Website URL'
Public methods (3)
  • open_website_url(self)
  • website_publish_button(self)
  • write(self, vals)

New fields (14)
  • align_category_content Boolean
    default=False help="Align the category content on the shop page. Corresponds to the 'Center Content' editor option." string='Align Category Content'
  • child_id One2many → product.public.category
    comodel_name='product.public.category' inverse_name='parent_id' string='Children Categories'
  • cover_image Image
    help='Displayed only in the Category List Snippet.' string='Cover Image'
  • has_published_products Boolean
    compute='_compute_has_published_products' compute_sudo=True search='_search_has_published_products'
  • name Char
    required=True translate=True
  • parent_id Many2one → product.public.category
    comodel_name='product.public.category' index=True ondelete='cascade' string='Parent'
  • parent_path Char
    index=True
  • parents_and_self Many2many → product.public.category
    comodel_name='product.public.category' compute='_compute_parents_and_self'
  • product_tmpl_ids Many2many → product.template
    comodel_name='product.template' relation='product_public_category_product_template_rel'
  • sequence Integer
    default=_default_sequence index=True
  • show_category_description Boolean
    default=True help="Display the category description on the shop page. Corresponds to the 'Show Description' editor option." string='Show Category Description'
  • show_category_title Boolean
    default=False help="Display the category title on the shop page. Corresponds to the 'Show Title' editor option." string='Show Category Title'
  • website_description Html
    sanitize_attributes=False sanitize_form=False sanitize_overridable=True string='Description' translate=html_translate
  • website_footer Html
    sanitize_attributes=False sanitize_form=False string='Category Footer' translate=html_translate
Public methods (2)
  • check_parent_id(self)
    @api.constrains('parent_id')
  • get_available_snippet_categories(self, website_id)
    @api.model
    Return parent categories available for selection in the dynamic category snippet. :param int website_id: ID of the current website :return: Available parent categories :rtype: list[dict]

New fields (8)
  • assign Selection
    default='manual' help='Defines how this ribbon is assigned to products:\n- Manually: You assign the ribbon manually to products.\n- Sale: Applied when the product is visibly on sale.\n- New: Applied based on the New period you will define.\n' required=True selection=[('manual', 'Manually'), ('sale', 'On Sale'), ('new', 'When New')] string='Assign'
  • bg_color Char
    default='#000000' required=True string='Background Color'
  • name Char
    required=True size=20 string='Ribbon Name' translate=True
  • new_period Integer
    default=30
  • position Selection
    default='left' required=True selection=[('left', 'Left'), ('right', 'Right')] string='Position'
  • sequence Integer
    default=10
  • style Selection
    default='ribbon' help='Defines the display style:\n- Ribbon: Shows a ribbon banner on the product image.\n- Badge: Shows a small badge label on the product image.' required=True selection=[('ribbon', 'Ribbon'), ('tag', 'Badge')] string='Style'
  • text_color Char
    default='#FFFFFF' required=True string='Text Color'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (19)
  • accessory_product_ids Many2many → product.product
    check_company=True column1='src_id' column2='dest_id' comodel_name='product.product' help='Accessories show up when the customer reviews the cart before payment (cross-sell strategy).' relation='product_accessory_rel' string='Accessory Products'
  • alternative_product_ids Many2many → product.template
    check_company=True column1='src_id' column2='dest_id' comodel_name='product.template' help='Suggest alternatives to your customer (upsell strategy). Those products show up on the product page.' relation='product_alternative_rel' string='Alternative Products'
  • base_unit_count Float
    compute='_compute_base_unit_count' default=0 digits=0 help='Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.' inverse='_set_base_unit_count' required=True store=True string='Base Unit Count'
  • base_unit_id Many2one → website.base.unit
    comodel_name='website.base.unit' compute='_compute_base_unit_id' help='Define a custom unit to display in the price per unit of measure field.' inverse='_set_base_unit_id' store=True string='Custom Unit of Measure'
  • base_unit_name Char
    compute='_compute_base_unit_name' help='Displays the custom unit for the products if defined or the selected unit of measure otherwise.'
  • base_unit_price Monetary
    compute='_compute_base_unit_price' string='Price Per Unit'
  • compare_list_price Monetary
    help='Add a strikethrough price to your /shop and product pages for comparison purposes.It will not be displayed if pricelists apply.' string='Compare to Price'
  • description Html
    index='trigram'
  • description_ecommerce Html
    sanitize_attributes=False sanitize_form=False sanitize_overridable=True string='eCommerce Description' translate=html_translate
  • description_sale Text
    index='trigram'
  • product_template_image_ids One2many → product.image
    comodel_name='product.image' copy=True inverse_name='product_tmpl_id' string='Extra Product Media'
  • public_categ_ids Many2many → product.public.category
    comodel_name='product.public.category' help="The product will be available in each mentioned eCommerce category. Go to Shop > Edit Click on the page and enable 'Categories' to view all eCommerce categories." relation='product_public_category_product_template_rel' string='Website Product Category'
  • publish_date Datetime
    compute='_compute_publish_date' default=fields.Datetime.now required=True store=True string='Publish Date'
  • variants_default_code Char
    compute='_compute_variants_default_code' help='Technical field to enhance performance when looking up default code of productvariants (LIKE/ILIKE)' index='trigram' store=True
  • website_description Html
    index='trigram' sanitize_attributes=False sanitize_form=False sanitize_overridable=True string='Description for the website' translate=html_translate
  • website_ribbon_id Many2one → product.ribbon
    comodel_name='product.ribbon' string='Ribbon'
  • website_sequence Integer
    copy=False default=_default_website_sequence help='Determine the display order in the Website E-commerce' index=True string='Website Sequence'
  • website_size_x Integer
    default=1 string='Size X'
  • website_size_y Integer
    default=1 string='Size Y'
Public methods (6)
  • create_product_variant(self, product_template_attribute_value_ids)
    Create if necessary and possible and return the id of the product variant matching the given combination for this template. Note AWA: Known "exploit" issues with this method: - This method could be used by an unauthenticated user to generate a lot of useless variants. Unfortunately, after discussing the matter with ODO, there's no easy and user-friendly way to block that behavior. We would have to use captcha/server actions to clean/... that are all not user-friendly/overkill mechanisms. - This method could be used to try to guess what product variant ids are created in the system and what product template ids are configured as "dynamic", but that does not seem like a big deal. The error messages are identical on purpose to avoid giving too much information to a potential attacker: - returning 0 when failing - returning the variant id whether it already existed or not :param product_template_attribute_value_ids: the combination for which to get or create variant :type product_template_attribute_value_ids: list of id of `product.template.attribute.value` :return: id of the product variant matching the combination or 0 :rtype: int
  • set_sequence_bottom(self)
  • set_sequence_down(self)
  • set_sequence_top(self)
  • set_sequence_up(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (17)
  • account_on_checkout Selection
    compute='_compute_account_on_checkout' inverse='_inverse_account_on_checkout' readonly=False required=True selection=[('optional', 'Optional'), ('disabled', 'Disabled'), ('mandatory', 'Mandatory')] string='Customer Accounts'
  • add_to_cart_action Selection
    readonly=False related='website_id.add_to_cart_action'
  • cart_abandoned_delay Float
    readonly=False related='website_id.cart_abandoned_delay'
  • cart_recovery_mail_template Many2one
    readonly=False related='website_id.cart_recovery_mail_template_id'
  • confirmation_email_template_id Many2one
    readonly=False related='website_id.confirmation_email_template_id'
  • ecommerce_access Selection
    readonly=False related='website_id.ecommerce_access'
  • group_gmc_feed Boolean
    group='base.group_user' implied_group='website_sale.group_product_feed' readonly=False related='website_id.enabled_gmc_src' string='Google Merchant Center'
  • group_product_price_comparison Boolean
    group='base.group_user' help='Add a strikethrough price to your /shop and product pages for comparison purposes.It will not be displayed if pricelists apply.' implied_group='website_sale.group_product_price_comparison' string='Comparison Price'
  • group_show_uom_price Boolean
    default=False group='base.group_user' implied_group='website_sale.group_show_uom_price' string='Base Unit Price'
  • module_website_sale_autocomplete Boolean
    args: 'Address Autocomplete'
  • module_website_sale_collect Boolean
    args: 'Click & Collect'
  • salesperson_id Many2one
    readonly=False related='website_id.salesperson_id'
  • salesteam_id Many2one
    readonly=False related='website_id.salesteam_id'
  • send_abandoned_cart_email Boolean
    readonly=False related='website_id.send_abandoned_cart_email' string='Abandoned Email'
  • show_line_subtotals_tax_selection Selection
    readonly=False related='website_id.show_line_subtotals_tax_selection'
  • website_sale_contact_us_button_url Char
    readonly=False related='website_id.contact_us_button_url' string='Button Url'
  • website_sale_prevent_zero_price_sale Boolean
    readonly=False related='website_id.prevent_zero_price_sale' string='Prevent Sale of Zero Priced Product'
Public methods (6)
  • action_open_abandoned_cart_mail_template(self)
    @api.readonly
  • action_open_extra_info(self)
  • action_open_product_feeds(self)
    @api.readonly
    Open the list view to manage the feed specific to the current website.
  • action_open_sale_mail_templates(self)
    @api.readonly
  • action_view_delivery_provider_modules(self)
  • set_values(self)

New fields (0)

No new fields.

Public methods (1)
  • write(self, vals)

New fields (8)
  • amount_delivery Monetary
    compute='_compute_amount_delivery' help='Tax included or excluded depending on the website configuration.' string='Delivery Amount'
  • cart_quantity Integer
    compute='_compute_cart_info' string='Cart Quantity'
  • cart_recovery_email_sent Boolean
    string='Cart recovery email already sent'
  • is_abandoned_cart Boolean
    compute='_compute_abandoned_cart' search='_search_abandoned_cart' string='Abandoned Cart'
  • only_services Boolean
    compute='_compute_cart_info' string='Only Services'
  • shop_warning Char
    string='Warning'
  • website_id Many2one → website
    comodel_name='website' help='Website through which this order was placed for eCommerce orders.' readonly=True
  • website_order_line One2many → sale.order.line
    comodel_name='sale.order.line' compute='_compute_website_order_line' string='Order Lines displayed on Website'
Public methods (4)
  • action_confirm(self)
  • action_preview_sale_order(self)
  • action_recovery_email_send(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (2)
  • name_short Char
    compute='_compute_name_short'
  • shop_warning Char
    string='Warning'
Public methods (1)
  • get_description_following_lines(self)

New fields (3)
  • is_abandoned_cart Boolean
    readonly=True string='Abandoned Cart'
  • public_categ_ids Many2many
    related='product_tmpl_id.public_categ_ids' string='eCommerce Categories'
  • website_id Many2one → website
    readonly=True args: 'website'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • enable_view(self, xml_id)
    @api.model
    Override of `theme.utils` to disable all category style templates when enabling one.

New fields (33)
  • account_on_checkout Selection
    default='optional' selection=[('optional', 'Optional'), ('disabled', 'Disabled (buy as guest)'), ('mandatory', 'Mandatory (no guest checkout)')] string='Customer Accounts'
  • add_to_cart_action Selection
    default='stay' selection=[('stay', 'Stay on Product Page'), ('go_to_cart', 'Go to cart')]
  • auth_signup_uninvited Selection
    default='b2c'
  • cart_abandoned_delay Float
    default=10.0 string='Abandoned Delay'
  • cart_recovery_mail_template_id Many2one → mail.template
    comodel_name='mail.template' default=_default_recovery_mail_template domain=[('model', '=', 'sale.order')] string='Cart Recovery Email'
  • confirmation_email_template_id Many2one → mail.template
    comodel_name='mail.template' default=_default_confirmation_email_template domain=[('model', '=', 'sale.order')]
  • contact_us_button_url Char
    default='/contactus' string='Contact Us Button URL' translate=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' string='Default Currency'
  • ecommerce_access Selection
    default='everyone' required=True selection=[('everyone', 'All users'), ('logged_in', 'Logged in users')]
  • enabled_gmc_src Boolean
    default=<expr> string='Google Merchant Center'
  • prevent_zero_price_sale Boolean
    string="Hide 'Add To Cart' when price = 0"
  • pricelist_ids One2many → product.pricelist
    comodel_name='product.pricelist' compute='_compute_pricelist_ids' string='Price list available for this Ecommerce/Website'
  • product_page_cols_order Selection
    default='regular' selection=[('regular', 'Regular order'), ('inverse', 'Inverse order')] string='Product Page main columns order'
  • product_page_container Selection
    default='unset' selection=[('unset', 'Unset'), ('regular', 'Regular'), ('fluid', 'Full-width')]
  • product_page_grid_columns Integer
    default=2
  • product_page_image_layout Selection
    default='carousel' required=True selection=[('carousel', 'Carousel'), ('grid', 'Grid')]
  • product_page_image_ratio Selection
    default='1_1' required=True selection=[('auto', 'Auto'), ('21_9', 'Wider (21/9)'), ('16_9', 'Wide (16/9)'), ('4_3', 'Landscape (4/3)'), ('6_5', 'Horizontal (6/5)'), ('1_1', 'Default (1/1)'), ('4_5', 'Portrait (4/5)'), ('2_3', 'Vertical (2/3)')]
  • product_page_image_ratio_mobile Selection
    default='auto' required=True selection=[('auto', 'Auto'), ('21_9', 'Wider (21/9)'), ('16_9', 'Wide (16/9)'), ('4_3', 'Landscape (4/3)'), ('6_5', 'Horizontal (6/5)'), ('1_1', 'Default (1/1)'), ('4_5', 'Portrait (4/5)'), ('2_3', 'Vertical (2/3)')]
  • product_page_image_roundness Selection
    default='none' required=True selection=[('none', 'None'), ('small', 'Small'), ('medium', 'Medium'), ('big', 'Big')]
  • product_page_image_spacing Selection
    default='none' required=True selection=[('none', 'None'), ('small', 'Small'), ('medium', 'Medium'), ('big', 'Big')]
  • product_page_image_width Selection
    default='50_pc' required=True selection=[('none', 'Hidden'), ('33_pc', '33 %'), ('50_pc', '50 %'), ('66_pc', '66 %'), ('100_pc', '100 %')]
  • salesperson_id Many2one → res.users
    comodel_name='res.users' domain=[('share', '=', False)] string='Salesperson'
  • salesteam_id Many2one → crm.team
    comodel_name='crm.team' default=_default_salesteam_id index='btree_not_null' ondelete='set null' string='Sales Team'
  • send_abandoned_cart_email Boolean
    string='Send email to customers who abandoned their cart.'
  • send_abandoned_cart_email_activation_time Datetime
    compute='_compute_send_abandoned_cart_email_activation_time' store=True string="Time when the 'Send abandoned cart email' feature was activated."
  • shop_default_sort Selection
    default='website_sequence asc' required=True selection='_get_product_sort_mapping'
  • shop_extra_field_ids One2many → website.sale.extra.field
    comodel_name='website.sale.extra.field' inverse_name='website_id' string='E-Commerce Extra Fields'
  • shop_gap Char
    default='16px' required=False string='Grid-gap on the shop'
  • shop_opt_products_design_classes Char
    default='o_wsale_products_opt_layout_catalog o_wsale_products_opt_design_thumbs o_wsale_products_opt_name_color_regular o_wsale_products_opt_rounded_2 o_wsale_products_opt_thumb_cover o_wsale_products_opt_img_secondary_show o_wsale_products_opt_img_hover_zoom_out_light o_wsale_products_opt_has_cta o_wsale_products_opt_actions_onhover o_wsale_products_opt_has_wishlist o_wsale_products_opt_wishlist_fixed o_wsale_products_opt_has_description o_wsale_products_opt_actions_subtle o_wsale_products_opt_cc1' help='CSS class for shop products design' string='Shop Design Class'
  • shop_page_container Selection
    default='regular' selection=[('regular', 'Regular'), ('fluid', 'Full-width')]
  • shop_ppg Integer
    default=21 string='Number of products in the grid on the shop'
  • shop_ppr Integer
    default=3 string='Number of grid columns on the shop'
  • show_line_subtotals_tax_selection Selection
    compute='_compute_show_line_subtotals_tax_selection' readonly=False selection=[('tax_excluded', 'Tax Excluded'), ('tax_included', 'Tax Included')] store=True string='Line Subtotals Tax Display'
Public methods (12)
  • action_dashboard_redirect(self)
    @api.model
  • configurator_addons_apply(self, industry_name=None, **kwargs)
    Override of `website` to generate eCommerce categories for a given industry using AI.
  • configurator_apply(self, *, shop_page_style_option=None, product_page_style_option=None, **kwargs)
    @api.model
    Override of `website` to apply eCommerce page style configurations. :param str shop_page_style_option: The key of the selected shop page style option. See `const.SHOP_PAGE_STYLE_MAPPING`. :param str product_page_style_option: The key of the selected product page style option. See `const.PRODUCT_PAGE_STYLE_MAPPING`.
  • create(self, vals_list)
    @api.model_create_multi
  • get_configurator_product_page_styles(self)
    @api.model
    Format and return ids and images of each product page style for website onboarding. :return: The product page style information. :rtype: list[dict]
  • get_configurator_shop_page_styles(self)
    @api.model
    Format and return the ids and images of each shop page style for website onboarding. :return: The shop page style information. :rtype: list[dict]
  • get_pricelist_available(self, show_visible=False)
    Return the list of pricelists that can be used on website for the current user. Country restrictions will be detected with GeoIP (if installed). :param bool show_visible: if True, we don't display pricelist where selectable is False (Eg: Code promo) :returns: pricelist recordset
  • get_suggested_controllers(self)
  • has_ecommerce_access(self)
    Return whether the current user is allowed to access eCommerce-related content.
  • is_pricelist_available(self, pl_id)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_product_domain(self)
  • sale_reset(self)

New fields (1)
  • name Char
    help='Define a custom unit to display in the price per unit of measure field.' required=True translate=True
Public methods (0)

No public methods.

New fields (6)
  • back_button_label Char
    translate=True
  • main_button_label Char
    translate=True
  • name Char
    required=True translate=True
  • sequence Integer
  • step_href Char
    required=True string='Href'
  • website_id Many2one → website
    ondelete='cascade' args: 'website'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • field_id Many2one → ir.model.fields
    comodel_name='ir.model.fields' domain=[('model_id.model', '=', 'product.template'), ('ttype', 'in', ['char', 'binary'])] ondelete='cascade' required=True
  • label Char
    related='field_id.field_description'
  • name Char
    related='field_id.name'
  • sequence Integer
    default=10
  • website_id Many2one → website
    comodel_name='website' index='btree_not_null'
Public methods (0)

No public methods.

New fields (1)
  • product_cross_selling Boolean
    help='True only for product filters that require a product_id because they relate to cross selling' string='About cross selling products'
Public methods (1)
  • default_get(self, fields)
    @api.model

New fields (1)
  • product_id Many2one → product.product
    comodel_name='product.product' index='btree_not_null' ondelete='cascade' readonly=True
Public methods (0)

No public methods.

New fields (3)
  • product_count Integer
    compute='_compute_product_statistics' help='Total number of product viewed' string='Products Views'
  • product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_product_statistics' string='Visited Products'
  • visitor_product_count Integer
    compute='_compute_product_statistics' help='Total number of views on products' string='Product Views'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/website_sale
VERSION
VERSION 1.1
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Denis Ledoux, Xavier ALT, Christophe Simonis, David Monjoie, Xavier Morel, Nicolas Martinelli, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, GitHub, Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Romain Derie, Laurent Smet, Jorge Pinna Puissant, Arnold Moyaux, Aurélien Warnon, Xavier-Do, Victor Feyens, Andrea Grazioso (agr-odoo), William Henrotin, Sébastien Theys, Julien Mougenot, Anh Thao Pham (pta), Achraf (abz), Tiffany Chang (tic), Gorash, Pierre Paridans, Arnaud Joset, William Braeckman, Benjamin Vray, Kishan Gajjar, odoo, Benoit Socias, Florian Vranckx, Arthur Detroux (ard), Abdelouahab (abla), Ruben Gomes, Antoine Vandevenne (anv), Demesmaeker, Aurelien van Delft (avd), Achraf, Florian(flg), Valentin Chevalier, Vincent Larcin, Ipsita Borisagar, tarteo, Loan (LSE), Thomas Lefebvre (thle), alsh-odoo, Louis Wicket (wil), Walid, nda, Victor Piryns (pivi), Yash Vaishnav, Julien (jula), Mahamadasif Ansari, Gauthier Wala (gawa), Pieter Claeys (clpi), Robin Lejeune (role), Louis (loco), Levi Siuzdak (sile), Dylan Kiss (dyki), Antoine (ande), FrancoisGe, imanie383, Valeriya(vchu), Chong Wang (cwg), Leloup Loïc (lole), Simon Goffaux (sigo), Adrien Schoffeniels, Martin Maes, tong-odoo, Anita (anko), Brieuc-brd, AH-Yussef, Harsh Modi, Mahdi Cheikh Rouhou (macr), ilru-odoo, omra-odoo, Walid (wasa), sesn-odoo, stefanorigano (SRI), Mattis Megevand, Youssef Bashandy, Ethan Vincent, Mathieu (mcou), lase@odoo.com, Aurelien MARIE (auma), bary, Maryam Kia, Louis (loti), Guillaume-gdi, Serge Bayet (seba), Seif (segn), vava-odoo, Julien Carion (juca), kcv-odoo, adsh-odoo, Tanguy Quéguineur, dere-odoo, Julien Segers (juse), Louis Gobert, Ahmad (khah), Lina (liew), Chrysanthe (chgo), sami odoo, Louis (wil), Travis Waelbroeck, mano-odoo, Joseph (jcb), aamo-odoo, Parth Solanki[PASO], Shaan Thakkar (THSH), mathysPaul, Patricia Daloze (pda), Ryan Cen, Antoine (anso), Manushi Shah, Pierre Pulinckx (PIPU), Julien Schwanen, Abdessamad Zouiten (abzo), Jitendra Prajapat, sben-odoo, st-yes, David Van Droogenbroeck (DROD), khsr-odoo, Pierre Lamotte (pila), nikj-odoo, Pierre Pulinckx (pipu), Pierre Pulinckx, Bastien PIERRE, jeep-odoo, Corentin Heinix (cohe), kpt-odoo, Shrey Mehta, kusi-odoo, pish-odoo, lse-odoo, Krzysztof Magusiak (krma), Mahdi Alijani (malj), Florian Malfroid, Omar (OSAH), nipl-odoo, rupa-odoo, krip-odoo, Basioni (basm), utma-odoo, Rushil Patel, Gurpreet Singh, defl, Giorgio Tocco (gito), sawer, Valeriya (vchu), sjai-odoo, alap-odoo, Parth Pujara, josv-odoo, Nisarg (nipl), Lionel Piraux (lipi), Thomas Carlier(THC), shrm-odoo, charliedao, YoussefM890, Mazen, Soumya M, saurabh, yoelf, Zachary (zavan), khaj-odoo, Levi Bensley, Sherif213, iManie383, Khaj-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/ecommerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 13:43:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - social_media
    - google_recaptcha
    - utm
    - sale
    - sales_team
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - payment
    - website_payment
    - website_mail
    - portal_rating
    - rating
    - delivery
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES geoip2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (200)
XML IDNameModelTypeStatus
accept_terms_and_conditions Accept Terms & Conditions ir.ui.view qweb Inherits navigation_buttons
accordion_more_information More Information Accordion Item ir.ui.view qweb Inherits website_sale.product_accordion
account_move_view_form account.move.form.inherit.website_sale account.move group Inherits account.view_move_form
add_to_cart_redirect Cart Redirection ir.ui.view qweb Inherits website.layout
address_b2b Show b2b fields ir.ui.view qweb Inherits website_sale.address
address_kanban Kanban address ir.ui.view qweb New
address_on_payment Address on payment ir.ui.view qweb New
address_row address_row ir.ui.view qweb New
alternative_products Alternative Products ir.ui.view qweb Inherits website_sale.product
attribute_tree_view product.attribute.list product.attribute field Inherits product.attribute_tree_view
badge_extra_price Badge Extra Price ir.ui.view qweb New
base_unit_price Product Base unit price ir.ui.view qweb New
billing_address_row billing_address_row ir.ui.view qweb New
carousel_product_indicators Carousel Product ir.ui.view qweb New
carousel_product_indicators_bottom Carousel Product Indicators Bottom ir.ui.view qweb Inherits website_sale.shop_product_carousel
carousel_product_indicators_left Carousel Product Indicators Left ir.ui.view qweb Inherits website_sale.shop_product_carousel
cart Shopping Cart ir.ui.view qweb New
cart_combo_item_line cart_combo_item_line ir.ui.view qweb New
cart_line_description_following_lines Shopping Cart Line Description Following Lines ir.ui.view qweb New
cart_line_product_link Shopping Cart Line Product Link ir.ui.view qweb New
cart_lines Shopping Cart Lines ir.ui.view qweb New
cart_product_price cart_product_price ir.ui.view qweb New
categorie_link Category Link ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
checkout_layout Checkout layout page ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
coupon_form Coupon form ir.ui.view qweb New
crm_team_view_kanban_dashboard crm.team.view.kanban.dashboard.inherit.website.sale crm.team data Inherits sales_team.crm_team_view_kanban_dashboard
delivery_address_row delivery_address_row ir.ui.view qweb New
delivery_form delivery_form ir.ui.view qweb New
delivery_method delivery_method ir.ui.view qweb New
digest_digest_view_form digest.digest.view.form.inherit.website.sale.order digest.digest group Inherits digest.digest_digest_view_form
dynamic_filter_template_product_product_add_to_cart Classic Card ir.ui.view qweb New
dynamic_filter_template_product_product_banner Large Banner ir.ui.view qweb New
dynamic_filter_template_product_product_borderless_1 Borderless Product n°1 ir.ui.view qweb New
dynamic_filter_template_product_product_borderless_2 Borderless Product n°2 ir.ui.view qweb New
dynamic_filter_template_product_product_card_group Card group ir.ui.view qweb New
dynamic_filter_template_product_product_centered Centered Product ir.ui.view qweb New
dynamic_filter_template_product_product_horizontal_card Horizontal Card ir.ui.view qweb New
dynamic_filter_template_product_product_horizontal_card_2 Horizontal Card width covered image ir.ui.view qweb New
dynamic_filter_template_product_product_mini_image Image only ir.ui.view qweb New
dynamic_filter_template_product_product_mini_name Image with name ir.ui.view qweb New
dynamic_filter_template_product_product_mini_price Image with price ir.ui.view qweb New
dynamic_filter_template_product_product_view_detail Classic Card - Detailed ir.ui.view qweb New
ecom_show_extra_fields Show Extra Fields ir.ui.view qweb Inherits website_sale.product
extra_info Checkout Extra Info ir.ui.view qweb New
filter_products_price Filter by Prices ir.ui.view qweb New
filter_products_tags Filter by Tags ir.ui.view qweb New
filter_products_tags_list filter_products_tags_list ir.ui.view qweb New
header_cart_link Header Cart Link ir.ui.view qweb New
header_hide_empty_cart_link Header Hide Empty Cart link ir.ui.view qweb Inherits website_sale.header_cart_link
navigation_buttons Navigation buttons ir.ui.view qweb New
o_wsale_offcanvas_color_attribute Color type attribute in filter ir.ui.view qweb New
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories_list
payment Payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
price_dynamic_filter_template_product_product Dynamic Product Filter Price ir.ui.view qweb New
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product Product ir.ui.view qweb New
product_accordion Accordion On Product Page ir.ui.view qweb New
product_attribute_view_form product.attribute.view.form product.attribute group Inherits product.product_attribute_view_form
product_buy_now Buy Now Button ir.ui.view qweb Inherits website_sale.product
product_category_extra_link Product Category Extra Link ir.ui.view qweb New
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_custom_text Terms and Conditions ir.ui.view qweb Inherits website_sale.product
product_document_form product.document.form.website_sale product.document sheet Inherits sale.product_document_form
product_document_kanban product.document.kanban.website_sale product.document xpath Inherits sale.product_document_kanban
product_document_list product.document.list.website_sale product.document field Inherits sale.product_document_list
product_document_search product.document.search.sale product.document search Inherits sale.product_document_search
product_image_view_kanban product.image.view.kanban product.image kanban New
product_pages_kanban_view Product Pages Kanban product.template kanban Inherits product_template_view_kanban_website_sale
product_pages_tree_view Product Pages List product.template xpath Inherits product_template_view_tree_website_sale
product_picture_magnify_both Automatic Image Zoom And On Click ir.ui.view qweb Inherits website_sale.product
product_picture_magnify_click Image Zoom On Click ir.ui.view qweb Inherits website_sale.product
product_picture_magnify_hover Automatic Image Zoom ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_product_normal_website_form_view product.product.normal.view.website product.product field Inherits product.product_normal_form_view
product_product_view_form_easy_inherit_website_sale product.product.view.form.easy.inherit.website_sale product.product group Inherits product.product_variant_easy_edit_view
product_product_view_form_normalized product.product.view.form.normalized.website.sale product.product div Inherits product.product_product_view_form_normalized
product_product_view_form_normalized_website_sale product.product.view.form.normalized.website.sale.inherit product.product xpath Inherits product.product_product_view_form_normalized
product_product_website_tree_view product.product.website.list product.product field Inherits product.product_product_tree_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.list product.public.category list New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_ribbon_form_view product.ribbon.form.view product.ribbon form New
product_ribbon_view_tree product.ribbon.list product.ribbon list New
product_searchbar_input_snippet_options product search bar snippet options ir.ui.view qweb Inherits website.searchbar_input_snippet_options
product_share_buttons Share Buttons ir.ui.view qweb Inherits website_sale.product
product_tag_form_view_inherit_website_sale product.tag.form.inherit.website.sale product.tag field Inherits product.product_tag_form_view
product_tag_tree_view_inherit_website_sale product.tag.list.inherit.website.sale product.tag field Inherits product.product_tag_tree_view
product_tags Product Tags ir.ui.view qweb New
product_template_form_view product.template.product.website.form product.template span Inherits product.product_template_form_view
product_template_only_website_form_view product.template.product.only.website.form product.template field Inherits product.product_template_only_form_view
product_template_search_view_website product.template.search.published product.template filter Inherits product.product_template_search_view
product_template_view_kanban_website_sale product.template.view.kanban.website_sale product.template kanban Inherits product.product_template_kanban_view
product_template_view_tree product.template.view.list.inherit.website_sale product.template field Inherits product.product_template_tree_view
product_template_view_tree_website_sale product.template.view.list.website_sale product.template list Inherits website_sale.product_template_view_tree
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Attributes & Variants filters ir.ui.view qweb Inherits website_sale.products
products_attributes_collapsible Collapsed Attributes & Variants filters ir.ui.view qweb Inherits website_sale.products_attributes
products_breadcrumb Products Breadcrumb ir.ui.view qweb New
products_carousel_16x9 carousel_img_ratio_16x9 ir.ui.view qweb Inherits website_sale.shop_product_carousel
products_carousel_21x9 carousel_img_ratio_21x9 ir.ui.view qweb Inherits website_sale.shop_product_carousel
products_carousel_4x3 carousel_img_ratio_4x3 ir.ui.view qweb Inherits website_sale.shop_product_carousel
products_carousel_4x5 carousel_img_ratio_4x5 ir.ui.view qweb Inherits website_sale.shop_product_carousel
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_design_card Card Design ir.ui.view qweb Inherits website_sale.products
products_design_grid Grid Design ir.ui.view qweb Inherits website_sale.products
products_design_thumbs Thumbnails Design ir.ui.view qweb Inherits website_sale.products
products_item Products item ir.ui.view qweb New
products_list_view List View (by default) ir.ui.view qweb Inherits website_sale.products
products_thumb_2_3 thumb_2_3 ir.ui.view qweb Inherits website_sale.products
products_thumb_4_3 thumb_4_3 ir.ui.view qweb Inherits website_sale.products
products_thumb_4_5 thumb_4_5 ir.ui.view qweb Inherits website_sale.products
products_thumb_cover thumb_cover ir.ui.view qweb Inherits website_sale.products
reduction_code Promo Code ir.ui.view qweb Inherits website_sale.total
res_config_settings_view_form res.config.settings.view.form.inherit.website.sale res.config.settings block Inherits website.res_config_settings_view_form
res_config_settings_view_form_inherit_sale res.config.settings.view.form.inherit.sale res.config.settings setting Inherits sale.res_config_settings_view_form
s_add_to_cart Add to Cart Button ir.ui.view qweb New
s_add_to_cart_options s_add_to_cart_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_products Products ir.ui.view qweb New
s_dynamic_snippet_products_options s_dynamic_snippet_products_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_products_preview_data Products Preview Data ir.ui.view qweb New
s_dynamic_snippet_products_template_options s_dynamic_snippet_products_template_options ir.ui.view qweb Inherits website.s_dynamic_snippet_options_template
sale_order_portal_content_inherit_website_sale Orders Followup Products Links ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_re_order_btn Sale Order Order Again ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_tree sale.order.list.inherit.website.sale sale.order field Inherits sale.sale_order_tree
sale_order_view_form sale.order.form sale.order field Inherits sale.view_order_form
sale_order_view_form_cart_recovery sale.order.form.abandoned.cart sale.order field Inherits sale.view_order_form
sale_report_view_graph_website sale.report.view.graph.website sale.report graph New
sale_report_view_pivot_website sale.report.view.pivot.website sale.report pivot New
sale_report_view_search_website sale.report.search sale.report search New
sale_report_view_tree sale.report.view.list.inherit.website.sale sale.report field Inherits sale.sale_report_view_tree
search Search Box ir.ui.view qweb New
snippet_options e-commerce snippet options ir.ui.view qweb Inherits website.snippet_options
snippets e-commerce snippets ir.ui.view qweb Inherits website.snippets
snippets_options_web_editor e-commerce base snippet options ir.ui.view qweb Inherits web_editor.snippet_options
suggested_products_list Accessory Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
template_header_boxed template_header_boxed ir.ui.view qweb Inherits website.template_header_boxed
template_header_default template_header_default ir.ui.view qweb Inherits website.template_header_default
template_header_hamburger template_header_hamburger ir.ui.view qweb Inherits website.template_header_hamburger
template_header_mobile template_header_mobile ir.ui.view qweb Inherits website.template_header_mobile
template_header_sales_four template_header_sales_four ir.ui.view qweb Inherits website.template_header_sales_four
template_header_sales_one template_header_sales_one ir.ui.view qweb Inherits website.template_header_sales_one
template_header_sales_three template_header_sales_three ir.ui.view qweb Inherits website.template_header_sales_three
template_header_sales_two template_header_sales_two ir.ui.view qweb Inherits website.template_header_sales_two
template_header_search template_header_search ir.ui.view qweb Inherits website.template_header_search
template_header_sidebar template_header_sidebar ir.ui.view qweb Inherits website.template_header_sidebar
template_header_stretch template_header_stretch ir.ui.view qweb Inherits website.template_header_stretch
template_header_vertical template_header_vertical ir.ui.view qweb Inherits website.template_header_vertical
total total ir.ui.view qweb New
variants variants ir.ui.view qweb New
view_delivery_carrier_form_website_delivery delivery.carrier.website.form delivery.carrier field Inherits delivery.view_delivery_carrier_form
view_delivery_carrier_search delivery.carrier.search.inherit delivery.carrier filter Inherits delivery.view_delivery_carrier_search
view_delivery_carrier_tree delivery.carrier.list.inherit delivery.carrier field Inherits delivery.view_delivery_carrier_tree
view_product_image_form product.image.view.form product.image form New
view_sales_order_filter_ecommerce sale.order.ecommerce.search.view sale.order filter Inherits sale.view_sales_order_filter
view_sales_order_filter_ecommerce_abondand sale.order.ecommerce.abondand.view sale.order search New
view_sales_order_filter_ecommerce_unpaid sale.order.ecommerce.search.unpaid.view sale.order filter Inherits sale.view_sales_order_filter
view_website_sale_website_form website_sale.website.form website notebook Inherits website.view_website_form
website_sale.add_grid_or_list_option Grid or List button ir.ui.view qweb New
website_sale.address Address Management ir.ui.view qweb New
website_sale.brand_promotion website_sale.brand_promotion ir.ui.view qweb Inherits website.brand_promotion
website_sale.filmstrip_categories Categories Filmstrip ir.ui.view qweb New
website_sale.o_wsale_offcanvas Offcanvas ir.ui.view qweb New
website_sale.products_attributes_top Attributes in top-nav ir.ui.view qweb New
website_sale.products_categories Categories in Left Side ir.ui.view qweb New
website_sale.products_categories_list eCommerce Categories ir.ui.view qweb New
website_sale.products_categories_list_collapsible Collapsed eCommerce Categories ir.ui.view qweb Inherits website_sale.products_categories_list
website_sale.products_categories_top Categories in top-nav ir.ui.view qweb New
website_sale.s_mega_menu_big_icons_subtitles eCommerce: Menu - Big icons & subtitles ir.ui.view qweb New
website_sale.s_mega_menu_cards eCommerce: Menu - Cards ir.ui.view qweb New
website_sale.s_mega_menu_images_subtitles eCommerce: Menu - images & subtitles ir.ui.view qweb New
website_sale.s_mega_menu_little_icons eCommerce: Menu - Little icons ir.ui.view qweb New
website_sale.s_mega_menu_menu_image_menu eCommerce: Menu - Image - Menu ir.ui.view qweb New
website_sale.s_mega_menu_menus_logos eCommerce: Menus & logos ir.ui.view qweb New
website_sale.s_mega_menu_multi_menus eCommerce: Multi-Menus ir.ui.view qweb New
website_sale.s_mega_menu_odoo_menu eCommerce: Odoo Menu ir.ui.view qweb New
website_sale.s_mega_menu_thumbnails eCommerce: Menu - Thumbnails ir.ui.view qweb New
website_sale.shop_product_carousel Shop Product Carousel ir.ui.view qweb New
website_sale.shop_product_grid Shop Product Grid ir.ui.view qweb New
website_sale.shop_product_image website_sale.shop_product_image ir.ui.view qweb New
website_sale.shop_product_images Shop Product Images ir.ui.view qweb New
website_sale.sort Sort-by Template ir.ui.view qweb New
website_sale.tax_indication website_sale.tax_indication ir.ui.view qweb New
website_sale_pricelist_form_view website_sale.pricelist.form product.pricelist notebook Inherits product.product_pricelist_view
website_sale_pricelist_tree_view product.pricelist.list.inherit.product product.pricelist field Inherits product.product_pricelist_view_tree
website_sale_visitor_page_view_graph website.track.view.graph website.track graph New
website_sale_visitor_page_view_search website.track.view.search website.track field Inherits website.website_visitor_page_view_search
website_sale_visitor_page_view_tree website.track.view.list website.track list New
website_sale_visitor_track_view_graph website.track.view.graph website.track field Inherits website.website_visitor_track_view_graph
website_sale_visitor_track_view_tree website.track.view.list website.track field Inherits website.website_visitor_track_view_tree
website_sale_visitor_view_form website.visitor.view.form website.visitor xpath Inherits website.website_visitor_view_form
website_sale_visitor_view_kanban website.visitor.view.kanban website.visitor field Inherits website.website_visitor_view_kanban
website_sale_visitor_view_tree website.visitor.view.list website.visitor field Inherits website.website_visitor_view_tree
wizard_checkout Wizard Checkout ir.ui.view qweb New
Models touched (31)

New fields (1)
  • website_id Many2one → website
    compute='_compute_website_id' help='Website through which this invoice was created for eCommerce orders.' readonly=True store=True string='Website' tracking=True args: 'website'
Public methods (1)
  • preview_invoice(self)

New fields (3)
  • abandoned_carts_amount Integer
    compute='_compute_abandoned_carts' string='Amount of Abandoned Carts'
  • abandoned_carts_count Integer
    compute='_compute_abandoned_carts' string='Number of Abandoned Carts'
  • website_ids One2many → website
    comodel_name='website' inverse_name='salesteam_id' string='Websites'
Public methods (1)
  • get_abandoned_carts(self)

New fields (1)
  • website_description Text
    readonly=False related='product_id.description_sale' string='Description for Online Quotations'
Public methods (0)

No public methods.

New fields (2)
  • kpi_website_sale_total Boolean
    string='eCommerce Sales'
  • kpi_website_sale_total_value Monetary
    compute='_compute_kpi_website_sale_total_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • visibility Selection
    default='visible' selection=[('visible', 'Visible'), ('hidden', 'Hidden')]
Public methods (0)

No public methods.

New fields (1)
  • shown_on_product_page Boolean
    string='Publish on website'
Public methods (0)

No public methods.

New fields (8)
  • can_image_1024_be_zoomed Boolean
    compute='_compute_can_image_1024_be_zoomed' store=True string='Can Image 1024 be zoomed'
  • embed_code Html
    compute='_compute_embed_code' sanitize=False
  • image_1920 Image
  • name Char
    required=True string='Name'
  • product_tmpl_id Many2one → product.template
    comodel_name='product.template' index=True ondelete='cascade' string='Product Template'
  • product_variant_id Many2one → product.product
    comodel_name='product.product' index=True ondelete='cascade' string='Product Variant'
  • sequence Integer
    default=10
  • video_url Char
    help='URL of a video for showcasing your product.' string='Video URL'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the default_product_tmpl_id from the context to be applied if we have a product_variant_id set to avoid having the variant images to show also as template images. But we want it if we don't have a product_variant_id set.

New fields (3)
  • code Char
    groups='base.group_user' string='E-commerce Promotional Code'
  • selectable Boolean
    help='Allow the end user to choose this price list'
  • website_id Many2one → website
    comodel_name='website' default=_default_website domain="[('company_id', '=?', company_id)]" help='If you want a pricelist to be available on a website,you must fill in this field or make it selectable.Otherwise, the pricelist will not apply to any website.' ondelete='restrict' string='Website' tracking=20
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, data)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • base_unit_count Float
    default=1 help='Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.' required=True string='Base Unit Count'
  • base_unit_id Many2one → website.base.unit
    comodel_name='website.base.unit' help='Define a custom unit to display in the price per unit of measure field.' string='Custom Unit of Measure'
  • base_unit_name Char
    compute='_compute_base_unit_name' help='Displays the custom unit for the products if defined or the selected unit of measure otherwise.'
  • base_unit_price Monetary
    compute='_compute_base_unit_price' string='Price Per Unit'
  • product_variant_image_ids One2many → product.image
    comodel_name='product.image' inverse_name='product_variant_id' string='Extra Variant Images'
  • variant_ribbon_id Many2one → product.ribbon
    comodel_name='product.ribbon' string='Variant Ribbon'
  • website_id Many2one
    readonly=False related='product_tmpl_id.website_id'
  • website_url Char
    compute='_compute_product_website_url' help='The full URL to access the document through the website.' string='Website URL'
Public methods (3)
  • open_website_url(self)
  • website_publish_button(self)
  • write(self, vals)

New fields (9)
  • child_id One2many → product.public.category
    comodel_name='product.public.category' inverse_name='parent_id' string='Children Categories'
  • name Char
    required=True translate=True
  • parent_id Many2one → product.public.category
    comodel_name='product.public.category' index=True ondelete='cascade' string='Parent Category'
  • parent_path Char
    index=True
  • parents_and_self Many2many → product.public.category
    comodel_name='product.public.category' compute='_compute_parents_and_self'
  • product_tmpl_ids Many2many → product.template
    comodel_name='product.template' relation='product_public_category_product_template_rel'
  • sequence Integer
    default=_default_sequence index=True
  • website_description Html
    sanitize_attributes=False sanitize_form=False sanitize_overridable=True string='Category Description' translate=html_translate
  • website_footer Html
    sanitize_attributes=False sanitize_form=False string='Category Footer' translate=html_translate
Public methods (1)
  • check_parent_id(self)
    @api.constrains('parent_id')

New fields (4)
  • bg_color Char
    default='#000000' required=True string='Background Color'
  • name Char
    required=True size=20 string='Ribbon Name' translate=True
  • position Selection
    default='left' required=True selection=[('left', 'Left'), ('right', 'Right')] string='Position'
  • text_color Char
    default='#FFFFFF' required=True string='Text Color'
Public methods (0)

No public methods.

New fields (2)
  • image Image
    max_height=200 max_width=200 string='Image'
  • visible_on_ecommerce Boolean
    default=True help='Whether the tag is displayed on the eCommerce.' string='Visible on eCommerce'
Public methods (0)

No public methods.

New fields (15)
  • accessory_product_ids Many2many → product.product
    check_company=True column1='src_id' column2='dest_id' comodel_name='product.product' help='Accessories show up when the customer reviews the cart before payment (cross-sell strategy).' relation='product_accessory_rel' string='Accessory Products'
  • alternative_product_ids Many2many → product.template
    check_company=True column1='src_id' column2='dest_id' comodel_name='product.template' help='Suggest alternatives to your customer (upsell strategy). Those products show up on the product page.' relation='product_alternative_rel' string='Alternative Products'
  • base_unit_count Float
    compute='_compute_base_unit_count' default=0 help='Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.' inverse='_set_base_unit_count' required=True store=True string='Base Unit Count'
  • base_unit_id Many2one → website.base.unit
    comodel_name='website.base.unit' compute='_compute_base_unit_id' help='Define a custom unit to display in the price per unit of measure field.' inverse='_set_base_unit_id' store=True string='Custom Unit of Measure'
  • base_unit_name Char
    compute='_compute_base_unit_name' help='Displays the custom unit for the products if defined or the selected unit of measure otherwise.'
  • base_unit_price Monetary
    compute='_compute_base_unit_price' string='Price Per Unit'
  • compare_list_price Monetary
    help='Add a strikethrough price to your /shop and product pages for comparison purposes.It will not be displayed if pricelists apply.' string='Compare to Price'
  • description_ecommerce Html
    sanitize_attributes=False sanitize_form=False sanitize_overridable=True string='eCommerce Description' translate=html_translate
  • product_template_image_ids One2many → product.image
    comodel_name='product.image' copy=True inverse_name='product_tmpl_id' string='Extra Product Media'
  • public_categ_ids Many2many → product.public.category
    comodel_name='product.public.category' help="The product will be available in each mentioned eCommerce category. Go to Shop > Edit Click on the page and enable 'Categories' to view all eCommerce categories." relation='product_public_category_product_template_rel' string='Website Product Category'
  • website_description Html
    sanitize_attributes=False sanitize_form=False sanitize_overridable=True string='Description for the website' translate=html_translate
  • website_ribbon_id Many2one → product.ribbon
    comodel_name='product.ribbon' string='Ribbon'
  • website_sequence Integer
    copy=False default=_default_website_sequence help='Determine the display order in the Website E-commerce' index=True string='Website Sequence'
  • website_size_x Integer
    default=1 string='Size X'
  • website_size_y Integer
    default=1 string='Size Y'
Public methods (6)
  • create_product_variant(self, product_template_attribute_value_ids)
    Create if necessary and possible and return the id of the product variant matching the given combination for this template. Note AWA: Known "exploit" issues with this method: - This method could be used by an unauthenticated user to generate a lot of useless variants. Unfortunately, after discussing the matter with ODO, there's no easy and user-friendly way to block that behavior. We would have to use captcha/server actions to clean/... that are all not user-friendly/overkill mechanisms. - This method could be used to try to guess what product variant ids are created in the system and what product template ids are configured as "dynamic", but that does not seem like a big deal. The error messages are identical on purpose to avoid giving too much information to a potential attacker: - returning 0 when failing - returning the variant id whether it already existed or not :param product_template_attribute_value_ids: the combination for which to get or create variant :type product_template_attribute_value_ids: list of id of `product.template.attribute.value` :return: id of the product variant matching the combination or 0 :rtype: int
  • set_sequence_bottom(self)
  • set_sequence_down(self)
  • set_sequence_top(self)
  • set_sequence_up(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (23)
  • account_on_checkout Selection
    compute='_compute_account_on_checkout' inverse='_inverse_account_on_checkout' readonly=False required=True selection=[('optional', 'Optional'), ('disabled', 'Disabled (buy as guest)'), ('mandatory', 'Mandatory (no guest checkout)')] string='Customer Accounts'
  • add_to_cart_action Selection
    readonly=False related='website_id.add_to_cart_action'
  • cart_abandoned_delay Float
    readonly=False related='website_id.cart_abandoned_delay'
  • cart_recovery_mail_template Many2one
    readonly=False related='website_id.cart_recovery_mail_template_id'
  • ecommerce_access Selection
    readonly=False related='website_id.ecommerce_access'
  • enabled_buy_now_button Boolean
    compute='_compute_checkout_process_steps' readonly=False store=True string='Buy Now'
  • enabled_extra_checkout_step Boolean
    compute='_compute_checkout_process_steps' readonly=False store=True string='Extra Step During Checkout'
  • group_delivery_invoice_address Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_delivery_invoice_address' string='Shipping Address'
  • group_product_price_comparison Boolean
    group='base.group_portal,base.group_user,base.group_public' help='Add a strikethrough price to your /shop and product pages for comparison purposes.It will not be displayed if pricelists apply.' implied_group='website_sale.group_product_price_comparison' string='Comparison Price'
  • group_show_uom_price Boolean
    default=False group='base.group_portal,base.group_user,base.group_public' implied_group='website_sale.group_show_uom_price' string='Base Unit Price'
  • module_account Boolean
    args: 'Invoicing'
  • module_delivery_mondialrelay Boolean
    args: 'Mondial Relay Connector'
  • module_website_sale_autocomplete Boolean
    args: 'Address Autocomplete'
  • module_website_sale_collect Boolean
    args: 'Click & Collect'
  • module_website_sale_comparison Boolean
    args: 'Product Comparison Tool'
  • module_website_sale_wishlist Boolean
    args: 'Wishlists'
  • salesperson_id Many2one
    readonly=False related='website_id.salesperson_id'
  • salesteam_id Many2one
    readonly=False related='website_id.salesteam_id'
  • send_abandoned_cart_email Boolean
    readonly=False related='website_id.send_abandoned_cart_email' string='Abandoned Email'
  • show_line_subtotals_tax_selection Selection
    readonly=False related='website_id.show_line_subtotals_tax_selection'
  • website_sale_contact_us_button_url Char
    readonly=False related='website_id.contact_us_button_url' string='Button Url'
  • website_sale_enabled_portal_reorder_button Boolean
    readonly=False related='website_id.enabled_portal_reorder_button'
  • website_sale_prevent_zero_price_sale Boolean
    readonly=False related='website_id.prevent_zero_price_sale' string='Prevent Sale of Zero Priced Product'
Public methods (4)
  • action_open_abandoned_cart_mail_template(self)
  • action_open_extra_info(self)
  • action_open_sale_mail_templates(self)
  • set_values(self)

New fields (1)
  • last_website_so_id Many2one → sale.order
    comodel_name='sale.order' compute='_compute_last_website_so_id' string='Last Online Sales Order'
Public methods (1)
  • write(self, vals)

New fields (8)
  • amount_delivery Monetary
    compute='_compute_amount_delivery' help='Tax included or excluded depending on the website configuration.' string='Delivery Amount'
  • cart_quantity Integer
    compute='_compute_cart_info' string='Cart Quantity'
  • cart_recovery_email_sent Boolean
    string='Cart recovery email already sent'
  • is_abandoned_cart Boolean
    compute='_compute_abandoned_cart' search='_search_abandoned_cart' string='Abandoned Cart'
  • only_services Boolean
    compute='_compute_cart_info' string='Only Services'
  • shop_warning Char
    string='Warning'
  • website_id Many2one → website
    comodel_name='website' help='Website through which this order was placed for eCommerce orders.' readonly=True
  • website_order_line One2many → sale.order.line
    comodel_name='sale.order.line' compute='_compute_website_order_line' string='Order Lines displayed on Website'
Public methods (3)
  • action_preview_sale_order(self)
  • action_recovery_email_send(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (2)
  • name_short Char
    compute='_compute_name_short'
  • shop_warning Char
    string='Warning'
Public methods (1)
  • get_description_following_lines(self)

New fields (2)
  • is_abandoned_cart Boolean
    readonly=True string='Abandoned Cart'
  • website_id Many2one → website
    readonly=True args: 'website'
Public methods (0)

No public methods.

New fields (28)
  • account_on_checkout Selection
    default='optional' selection=[('optional', 'Optional'), ('disabled', 'Disabled (buy as guest)'), ('mandatory', 'Mandatory (no guest checkout)')] string='Customer Accounts'
  • add_to_cart_action Selection
    default='stay' selection=[('stay', 'Stay on Product Page'), ('go_to_cart', 'Go to cart'), ('force_dialog', 'Let the user decide (dialog)')]
  • all_pricelist_ids One2many → product.pricelist
    comodel_name='product.pricelist' inverse_name='website_id' string='All pricelists'
  • auth_signup_uninvited Selection
    default='b2c'
  • cart_abandoned_delay Float
    default=10.0 string='Abandoned Delay'
  • cart_recovery_mail_template_id Many2one → mail.template
    comodel_name='mail.template' default=_default_recovery_mail_template domain=[('model', '=', 'sale.order')] string='Cart Recovery Email'
  • contact_us_button_url Char
    default='/contactus' string='Contact Us Button URL' translate=True
  • currency_id Many2one → res.currency
    comodel_name='res.currency' compute='_compute_currency_id' string='Default Currency'
  • ecommerce_access Selection
    default='everyone' required=True selection=[('everyone', 'All users'), ('logged_in', 'Logged in users')]
  • enabled_portal_reorder_button Boolean
    string='Re-order From Portal'
  • fiscal_position_id Many2one → account.fiscal.position
    comodel_name='account.fiscal.position' compute='_compute_fiscal_position_id'
  • prevent_zero_price_sale Boolean
    string="Hide 'Add To Cart' when price = 0"
  • prevent_zero_price_sale_text Char
    default='Not Available For Sale' string='Text to show instead of price' translate=True
  • pricelist_id Many2one → product.pricelist
    comodel_name='product.pricelist' compute='_compute_pricelist_id' string='Default Pricelist if any'
  • pricelist_ids One2many → product.pricelist
    comodel_name='product.pricelist' compute='_compute_pricelist_ids' string='Price list available for this Ecommerce/Website'
  • product_page_grid_columns Integer
    default=2
  • product_page_image_layout Selection
    default='carousel' required=True selection=[('carousel', 'Carousel'), ('grid', 'Grid')]
  • product_page_image_spacing Selection
    default='small' required=True selection=[('none', 'None'), ('small', 'Small'), ('medium', 'Medium'), ('big', 'Big')]
  • product_page_image_width Selection
    default='50_pc' required=True selection=[('none', 'Hidden'), ('50_pc', '50 %'), ('66_pc', '66 %'), ('100_pc', '100 %')]
  • salesperson_id Many2one → res.users
    comodel_name='res.users' domain=[('share', '=', False)] string='Salesperson'
  • salesteam_id Many2one → crm.team
    comodel_name='crm.team' default=_default_salesteam_id ondelete='set null' string='Sales Team'
  • send_abandoned_cart_email Boolean
    string='Send email to customers who abandoned their cart.'
  • shop_default_sort Selection
    default='website_sequence asc' required=True selection='_get_product_sort_mapping'
  • shop_extra_field_ids One2many → website.sale.extra.field
    comodel_name='website.sale.extra.field' inverse_name='website_id' string='E-Commerce Extra Fields'
  • shop_gap Char
    default='16px' required=False string='Grid-gap on the shop'
  • shop_ppg Integer
    default=20 string='Number of products in the grid on the shop'
  • shop_ppr Integer
    default=4 string='Number of grid columns on the shop'
  • show_line_subtotals_tax_selection Selection
    default='tax_excluded' required=True selection=[('tax_excluded', 'Tax Excluded'), ('tax_included', 'Tax Included')] string='Line Subtotals Tax Display'
Public methods (8)
  • action_dashboard_redirect(self)
    @api.model
  • get_pricelist_available(self, show_visible=False)
    Return the list of pricelists that can be used on website for the current user. Country restrictions will be detected with GeoIP (if installed). :param bool show_visible: if True, we don't display pricelist where selectable is False (Eg: Code promo) :returns: pricelist recordset
  • get_suggested_controllers(self)
  • has_ecommerce_access(self)
    Return whether the current user is allowed to access eCommerce-related content.
  • is_pricelist_available(self, pl_id)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_get_order(self, force_create=False)
    Return the current sales order after mofications specified by params. :param bool force_create: Create sales order if not already existing :returns: current cart, as a sudoed `sale.order` recordset (might be empty)
  • sale_product_domain(self)
  • sale_reset(self)

New fields (1)
  • name Char
    help='Define a custom unit to display in the price per unit of measure field.' required=True translate=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • field_id Many2one → ir.model.fields
    comodel_name='ir.model.fields' domain=[('model_id.model', '=', 'product.template'), ('ttype', 'in', ['char', 'binary'])] ondelete='cascade' required=True
  • label Char
    related='field_id.field_description'
  • name Char
    related='field_id.name'
  • sequence Integer
    default=10
  • website_id Many2one → website
    comodel_name='website'
Public methods (0)

No public methods.

New fields (1)
  • product_cross_selling Boolean
    help='True only for product filters that require a product_id because they relate to cross selling' string='About cross selling products'
Public methods (0)

No public methods.

New fields (1)
  • product_id Many2one → product.product
    comodel_name='product.product' index='btree_not_null' ondelete='cascade' readonly=True
Public methods (0)

No public methods.

New fields (3)
  • product_count Integer
    compute='_compute_product_statistics' help='Total number of product viewed' string='Products Views'
  • product_ids Many2many → product.product
    comodel_name='product.product' compute='_compute_product_statistics' string='Visited Products'
  • visitor_product_count Integer
    compute='_compute_product_statistics' help='Total number of views on products' string='Product Views'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/website_sale
VERSION
VERSION 1.1
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Xavier Morel, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Romain Derie, Laurent Smet, Christophe Monniez, Jorge Pinna Puissant, Alexandre Kühn, Arnold Moyaux, Julien Castiaux, Aurélien Warnon, Xavier-Do, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, Joseph Caburnay, Florent de Labarre, Anh Thao Pham (pta), Samuel Degueldre, Alvaro Fuentes, std-odoo, Achraf (abz), Lucas Lefèvre, Ivan Yelizariev, Nasreddin Boulif (bon), Tiffany Chang (tic), Rémy Voet (ryv), Pierre Rousseau, Gorash, Pierre Paridans, William Braeckman, Romain Estievenart, Benjamin Vray, Benoit Socias, Guillaume (gdi), Jigar Vaghela, Nicolas (vin), william-andre, Julien Van Roy, Florian Damhaut, MerlinGuillaume, mafo-odoo, Antoine Guenet, Arthur Detroux (ard), Florian Charlier, Nshimiyimana Séna, Walid HANNICHE (waha), Abdelouahab (abla), Nicolas Bayet, Antoine Vandevenne (anv), Jinjiu Liu, Demesmaeker, Donatas, Aurelien van Delft (avd), luvi, Achraf, Valentin Chevalier, Roy Le, Renaud Thiry, niyasraphy, Thomas Lefebvre (thle), Gaetan Vanden Bergh (gavb), Merel Geens (mege), Louis Wicket (wil), tsm-odoo, Walid, Mylyna Hy, nda, Maximilien (malb), Victor Piryns (pivi), Julien (jula), Saurabh Mishra, Pieter Claeys (clpi), Andrew Gavgavian, Valentin Vallaeys (vava), Soukéina Bojabza, Robin Lejeune (role), Louis (loco), Saurabh Choraria, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Dylan Kiss (dyki), Sanket Brahmbhatt, Antoine (ande), Kamlesh Pathekar, FrancoisGe, imanie383, Michael (mcm), Horacio Tellez (hote), Valeriya(vchu), rolandojduartem, Chong Wang (cwg), Leloup Loïc (lole), Simon Goffaux (sigo), Martin Maes, tong-odoo, stcc-odoo, Anita (anko), Brieuc-brd, Ivan Rasputin, Mohit Beniwal, divy-odoo, AH-Yussef, Mahdi Cheikh Rouhou (macr), Adrien Guilliams (adgu), ilru-odoo, Walid (wasa), kdeb@odoo.com, stefanorigano (SRI), Mattis Megevand, Youssef Bashandy, Eteil Djoumatchoua(etdj), Ethan Vincent, Mathieu (mcou), lase@odoo.com, Aurelien MARIE (auma), bary, Jordan D. (Joda), Louis (loti), Eteil Djoumatchoua (etdj), Serge Bayet (seba), reka-odoo, Seif (segn), vava-odoo, kcv-odoo, moerradi, adsh-odoo, Tanguy Quéguineur, dere-odoo, Alexandre de Pape (alpa), Louis Gobert, Ahmad (khah), Lina (liew), kanda999, Chrysanthe (chgo), Louis (wil), Travis Waelbroeck, mano-odoo, aamo-odoo, Mathieu (mano), mathysPaul, Patricia Daloze (pda), Xavier Luyckx (xlu), Ryan Cen, Antoine (anso), Manushi Shah, Pierre Pulinckx (PIPU), Jonathan Castillo (jcs), Abdessamad Zouiten (abzo), luve-odoo, sben-odoo, Kawtar Drissi El Bouzaidi (kdeb), Morgane (morm), Pierre Lamotte (pila), nikj-odoo, Pierre Pulinckx (pipu), Bastien PIERRE, Corentin Heinix (cohe), joda-odoo, Shrey Mehta, Mahdi Alijani (malj), Danial Sheikhani, Lucas Vermeulen (luve), Florian Malfroid, Omar (OSAH), nipl-odoo, rupa-odoo, Pulinckx Pierre (PIPU), krip-odoo, sawer, kmdi-odoo, Lionel Piraux (lipi), Thomas Carlier(THC), Andrea Geraldo, shrm-odoo, charliedao, YoussefM890, Beshoy Nabeih, Mazen
WEBSITE
WEBSITEhttps://www.odoo.com/app/ecommerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:10
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - social_media
    - google_recaptcha
    - utm
    - sale
    - sales_team
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - payment
    - website_payment
    - website_mail
    - portal_rating
    - rating
    - delivery
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES geoip2
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (179)
XML IDNameModelTypeStatus
accept_terms_and_conditions Accept Terms & Conditions ir.ui.view qweb Inherits navigation_buttons
account_move_view_form account.move.form.inherit.website_sale account.move group Inherits account.view_move_form
add_to_cart_redirect Cart Redirection ir.ui.view qweb Inherits website.layout
address Address Management ir.ui.view qweb New
address_b2b Show b2b fields ir.ui.view qweb Inherits address
address_kanban Kanban address ir.ui.view qweb New
address_on_payment Address on payment ir.ui.view qweb New
alternative_products Alternative Products ir.ui.view qweb Inherits website_sale.product
attribute_tree_view product.attribute.tree product.attribute field Inherits product.attribute_tree_view
badge_extra_price Badge Extra Price ir.ui.view qweb New
base_unit_price Product Base unit price ir.ui.view qweb New
carousel_product_indicators Carousel Product ir.ui.view qweb New
carousel_product_indicators_bottom Carousel Product Indicators Bottom ir.ui.view qweb Inherits website_sale.shop_product_carousel
carousel_product_indicators_left Carousel Product Indicators Left ir.ui.view qweb Inherits website_sale.shop_product_carousel
cart Shopping Cart ir.ui.view qweb New
cart_delivery Delivery Costs ir.ui.view qweb Inherits website_sale.total
cart_line_description_following_lines Shopping Cart Line Description Following Lines ir.ui.view qweb New
cart_line_product_link Shopping Cart Line Product Link ir.ui.view qweb New
cart_lines Shopping Cart Lines ir.ui.view qweb New
categorie_link Category Link ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
checkout_layout Checkout layout page ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
coupon_form Coupon form ir.ui.view qweb New
crm_team_view_kanban_dashboard crm.team.view.kanban.dashboard.inherit.website.sale crm.team data Inherits sales_team.crm_team_view_kanban_dashboard
digest_digest_view_form digest.digest.view.form.inherit.website.sale.order digest.digest group Inherits digest.digest_digest_view_form
dynamic_filter_template_product_product_add_to_cart Classic Card ir.ui.view qweb New
dynamic_filter_template_product_product_banner Large Banner ir.ui.view qweb New
dynamic_filter_template_product_product_borderless_1 Borderless Product n°1 ir.ui.view qweb New
dynamic_filter_template_product_product_borderless_2 Borderless Product n°2 ir.ui.view qweb New
dynamic_filter_template_product_product_card_group Card group ir.ui.view qweb New
dynamic_filter_template_product_product_centered Centered Product ir.ui.view qweb New
dynamic_filter_template_product_product_horizontal_card Horizontal Card ir.ui.view qweb New
dynamic_filter_template_product_product_horizontal_card_2 Horizontal Card width covered image ir.ui.view qweb New
dynamic_filter_template_product_product_mini_image Image only ir.ui.view qweb New
dynamic_filter_template_product_product_mini_name Image with name ir.ui.view qweb New
dynamic_filter_template_product_product_mini_price Image with price ir.ui.view qweb New
dynamic_filter_template_product_product_view_detail Classic Card - Detailed ir.ui.view qweb New
ecom_show_extra_fields Show Extra Fields ir.ui.view qweb Inherits website_sale.product
extra_info Checkout Extra Info ir.ui.view qweb New
filter_products_price Filter by Prices ir.ui.view qweb New
filter_products_tags Filter by Tags ir.ui.view qweb New
filter_products_tags_list filter_products_tags_list ir.ui.view qweb New
header_cart_link Header Cart Link ir.ui.view qweb New
header_hide_empty_cart_link Header Hide Empty Cart link ir.ui.view qweb Inherits website_sale.header_cart_link
navigation_buttons Navigation buttons ir.ui.view qweb New
o_wsale_offcanvas_color_attribute Color type attribute in filter ir.ui.view qweb New
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories_list
payment Payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_delivery Delivery Costs ir.ui.view qweb Inherits website_sale.payment
payment_delivery_methods payment_delivery_methods ir.ui.view qweb New
price_dynamic_filter_template_product_product Dynamic Product Filter Price ir.ui.view qweb New
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product Product ir.ui.view qweb New
product_attribute_view_form product.attribute.view.form product.attribute group Inherits product.product_attribute_view_form
product_buy_now Buy Now Button ir.ui.view qweb Inherits website_sale.product
product_category_extra_link Product Category Extra Link ir.ui.view qweb New
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_custom_text Terms and Conditions ir.ui.view qweb Inherits website_sale.product
product_document_form product.document.form.website_sale product.document sheet Inherits sale.product_document_form
product_document_kanban product.document.kanban.website_sale product.document div Inherits sale.product_document_kanban
product_document_list product.document.list.website_sale product.document field Inherits sale.product_document_list
product_document_search product.document.search.sale product.document search Inherits sale.product_document_search
product_image_view_kanban product.image.view.kanban product.image kanban New
product_pages_kanban_view Product Pages Kanban product.template kanban Inherits product_template_view_kanban_website_sale
product_pages_tree_view Product Pages Tree product.template xpath Inherits product_template_view_tree_website_sale
product_picture_magnify_both Automatic Image Zoom And On Click ir.ui.view qweb Inherits website_sale.product
product_picture_magnify_click Image Zoom On Click ir.ui.view qweb Inherits website_sale.product
product_picture_magnify_hover Automatic Image Zoom ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_product_normal_website_form_view product.product.normal.view.website product.product field Inherits product.product_normal_form_view
product_product_view_form_add product.product.view.form.add product.product form New
product_product_view_form_easy_inherit_website_sale product.product.view.form.easy.inherit.website_sale product.product group Inherits product.product_variant_easy_edit_view
product_product_website_tree_view product.product.website.tree product.product field Inherits product.product_product_tree_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.tree product.public.category tree New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_ribbon_form_view product.ribbon form view product.ribbon form New
product_ribbon_view_tree product.ribbon.tree product.ribbon tree New
product_searchbar_input_snippet_options product search bar snippet options ir.ui.view qweb Inherits website.searchbar_input_snippet_options
product_share_buttons Share Buttons ir.ui.view qweb Inherits website_sale.product
product_tag_form_view_inherit_website_sale product.tag.form.inherit.website.sale product.tag field Inherits product.product_tag_form_view
product_tag_tree_view_inherit_website_sale product.tag.tree.inherit.website.sale product.tag field Inherits product.product_tag_tree_view
product_tags Product Tags ir.ui.view qweb New
product_template_form_view product.template.product.website.form product.template div Inherits product.product_template_form_view
product_template_only_website_form_view product.template.product.only.website.form product.template div Inherits product.product_template_only_form_view
product_template_search_view_website product.template.search.published product.template filter Inherits product.product_template_search_view
product_template_view_kanban_website_sale product.template.view.kanban.website_sale product.template kanban Inherits product.product_template_kanban_view
product_template_view_tree product.template.view.tree.inherit.website_sale product.template field Inherits product.product_template_tree_view
product_template_view_tree_website_sale product.template.view.tree.website_sale product.template tree Inherits website_sale.product_template_view_tree
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Attributes & Variants filters ir.ui.view qweb Inherits website_sale.products
products_breadcrumb Products Breadcrumb ir.ui.view qweb New
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_design_card Card Design ir.ui.view qweb Inherits website_sale.products
products_design_grid Grid Design ir.ui.view qweb Inherits website_sale.products
products_design_thumbs Thumbnails Design ir.ui.view qweb Inherits website_sale.products
products_fiscal_position products_fiscal_position ir.ui.view qweb Inherits website_sale.products
products_item Products item ir.ui.view qweb New
products_list_view List View (by default) ir.ui.view qweb Inherits website_sale.products
products_thumb_2_3 thumb_2_3 ir.ui.view qweb Inherits website_sale.products
products_thumb_4_3 thumb_4_3 ir.ui.view qweb Inherits website_sale.products
products_thumb_4_5 thumb_4_5 ir.ui.view qweb Inherits website_sale.products
products_thumb_cover thumb_cover ir.ui.view qweb Inherits website_sale.products
reduction_code Promo Code ir.ui.view qweb Inherits website_sale.total
res_config_settings_view_form res.config.settings.view.form.inherit.website.sale res.config.settings block Inherits website.res_config_settings_view_form
res_config_settings_view_form_inherit_sale res.config.settings.view.form.inherit.sale res.config.settings setting Inherits sale.res_config_settings_view_form
row_addresses row_addresses ir.ui.view qweb New
s_add_to_cart Add to Cart Button ir.ui.view qweb New
s_add_to_cart_options s_add_to_cart_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_products Products ir.ui.view qweb New
s_dynamic_snippet_products_options s_dynamic_snippet_products_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_products_template_options s_dynamic_snippet_products_template_options ir.ui.view qweb Inherits website.s_dynamic_snippet_options_template
sale_order_portal_content_inherit_website_sale Orders Followup Products Links ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_re_order_btn Sale Order Order Again ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_tree sale.order.tree.inherit.website.sale sale.order field Inherits sale.sale_order_tree
sale_order_view_form sale.order.form sale.order field Inherits sale.view_order_form
sale_order_view_form_cart_recovery sale.order.form.abandoned.cart sale.order field Inherits sale.view_order_form
sale_report_view_graph_website sale.report.view.graph.website sale.report graph New
sale_report_view_pivot_website sale.report.view.pivot.website sale.report pivot New
sale_report_view_search_website sale.report.search sale.report search New
sale_report_view_tree sale.report.view.tree.inherit.website.sale sale.report field Inherits sale.sale_report_view_tree
search Search Box ir.ui.view qweb New
snippet_options e-commerce snippet options ir.ui.view qweb Inherits website.snippet_options
snippets e-commerce snippets ir.ui.view qweb Inherits website.snippets
snippets_options_web_editor e-commerce base snippet options ir.ui.view qweb Inherits web_editor.snippet_options
suggested_products_list Accessory Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
template_header_boxed template_header_boxed ir.ui.view qweb Inherits website.template_header_boxed
template_header_default template_header_default ir.ui.view qweb Inherits website.template_header_default
template_header_hamburger template_header_hamburger ir.ui.view qweb Inherits website.template_header_hamburger
template_header_mobile template_header_mobile ir.ui.view qweb Inherits website.template_header_mobile
template_header_sales_four template_header_sales_four ir.ui.view qweb Inherits website.template_header_sales_four
template_header_sales_one template_header_sales_one ir.ui.view qweb Inherits website.template_header_sales_one
template_header_sales_three template_header_sales_three ir.ui.view qweb Inherits website.template_header_sales_three
template_header_sales_two template_header_sales_two ir.ui.view qweb Inherits website.template_header_sales_two
template_header_search template_header_search ir.ui.view qweb Inherits website.template_header_search
template_header_sidebar template_header_sidebar ir.ui.view qweb Inherits website.template_header_sidebar
template_header_stretch template_header_stretch ir.ui.view qweb Inherits website.template_header_stretch
template_header_vertical template_header_vertical ir.ui.view qweb Inherits website.template_header_vertical
total total ir.ui.view qweb New
variants variants ir.ui.view qweb New
view_delivery_carrier_form_website_delivery delivery.carrier.website.form delivery.carrier field Inherits delivery.view_delivery_carrier_form
view_delivery_carrier_search delivery.carrier.search.inherit delivery.carrier filter Inherits delivery.view_delivery_carrier_search
view_delivery_carrier_tree delivery.carrier.tree.inherit delivery.carrier field Inherits delivery.view_delivery_carrier_tree
view_product_image_form product.image.view.form product.image form New
view_sales_order_filter_ecommerce sale.order.ecommerce.search.view sale.order filter Inherits sale.view_sales_order_filter
view_sales_order_filter_ecommerce_abondand sale.order.ecommerce.abondand.view sale.order search New
view_sales_order_filter_ecommerce_unpaid sale.order.ecommerce.search.unpaid.view sale.order filter Inherits sale.view_sales_order_filter
view_website_sale_website_form website_sale.website.form website notebook Inherits website.view_website_form
website_sale.add_grid_or_list_option Grid or List button ir.ui.view qweb New
website_sale.brand_promotion website_sale.brand_promotion ir.ui.view qweb Inherits website.brand_promotion
website_sale.filmstrip_categories Categories Filmstrip ir.ui.view qweb New
website_sale.o_wsale_offcanvas Offcanvas ir.ui.view qweb New
website_sale.products_attributes_top Attributes in top-nav ir.ui.view qweb New
website_sale.products_categories Categories in Left Side ir.ui.view qweb New
website_sale.products_categories_list eCommerce Categories ir.ui.view qweb New
website_sale.products_categories_top Categories in top-nav ir.ui.view qweb New
website_sale.shop_product_carousel Shop Product Carousel ir.ui.view qweb New
website_sale.shop_product_grid Shop Product Grid ir.ui.view qweb New
website_sale.shop_product_image website_sale.shop_product_image ir.ui.view qweb New
website_sale.shop_product_images Shop Product Images ir.ui.view qweb New
website_sale.sort Sort-by Template ir.ui.view qweb New
website_sale.tax_indication website_sale.tax_indication ir.ui.view qweb New
website_sale_pricelist_form_view website_sale.pricelist.form product.pricelist group Inherits product.product_pricelist_view
website_sale_pricelist_tree_view product.pricelist.tree.inherit.product product.pricelist field Inherits product.product_pricelist_view_tree
website_sale_visitor_page_view_graph website.track.view.graph website.track graph New
website_sale_visitor_page_view_search website.track.view.search website.track field Inherits website.website_visitor_page_view_search
website_sale_visitor_page_view_tree website.track.view.tree website.track tree New
website_sale_visitor_track_view_graph website.track.view.graph website.track field Inherits website.website_visitor_track_view_graph
website_sale_visitor_track_view_tree website.track.view.tree website.track field Inherits website.website_visitor_track_view_tree
website_sale_visitor_view_form website.visitor.view.form website.visitor xpath Inherits website.website_visitor_view_form
website_sale_visitor_view_kanban website.visitor.view.kanban website.visitor field Inherits website.website_visitor_view_kanban
website_sale_visitor_view_tree website.visitor.view.tree website.visitor field Inherits website.website_visitor_view_tree
wizard_checkout Wizard Checkout ir.ui.view qweb New
Models touched (33)

New fields (1)
  • website_id Many2one → website
    compute='_compute_website_id' help='Website through which this invoice was created for eCommerce orders.' readonly=True store=True string='Website' tracking=True args: 'website'
Public methods (1)
  • preview_invoice(self)

New fields (3)
  • abandoned_carts_amount Integer
    compute='_compute_abandoned_carts' readonly=True string='Amount of Abandoned Carts'
  • abandoned_carts_count Integer
    compute='_compute_abandoned_carts' readonly=True string='Number of Abandoned Carts'
  • website_ids One2many → website
    string='Websites' args: 'website', 'salesteam_id'
Public methods (1)
  • get_abandoned_carts(self)

New fields (1)
  • website_description Text
    readonly=False related='product_id.description_sale' string='Description for Online Quotations'
Public methods (0)

No public methods.

New fields (2)
  • kpi_website_sale_total Boolean
    args: 'eCommerce Sales'
  • kpi_website_sale_total_value Monetary
    compute='_compute_kpi_website_sale_total_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • visibility Selection
    default='visible' selection=[('visible', 'Visible'), ('hidden', 'Hidden')]
Public methods (0)

No public methods.

New fields (1)
  • shown_on_product_page Boolean
    string='Show on product page'
Public methods (0)

No public methods.

New fields (8)
  • can_image_1024_be_zoomed Boolean
    compute='_compute_can_image_1024_be_zoomed' store=True args: 'Can Image 1024 be zoomed'
  • embed_code Html
    compute='_compute_embed_code' sanitize=False
  • image_1920 Image
  • name Char
    required=True args: 'Name'
  • product_tmpl_id Many2one → product.template
    index=True ondelete='cascade' args: 'product.template', 'Product Template'
  • product_variant_id Many2one → product.product
    index=True ondelete='cascade' args: 'product.product', 'Product Variant'
  • sequence Integer
    default=10
  • video_url Char
    help='URL of a video for showcasing your product.' args: 'Video URL'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the default_product_tmpl_id from the context to be applied if we have a product_variant_id set to avoid having the variant images to show also as template images. But we want it if we don't have a product_variant_id set.

New fields (3)
  • code Char
    groups='base.group_user' string='E-commerce Promotional Code'
  • selectable Boolean
    help='Allow the end user to choose this price list'
  • website_id Many2one → website
    comodel_name='website' default=_default_website domain="[('company_id', '=?', company_id)]" ondelete='restrict' string='Website' tracking=20
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, data)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • base_unit_count Float
    default=1 help='Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.' required=True args: 'Base Unit Count'
  • base_unit_id Many2one → website.base.unit
    help='Define a custom unit to display in the price per unit of measure field.' string='Custom Unit of Measure' args: 'website.base.unit'
  • base_unit_name Char
    compute='_compute_base_unit_name' help='Displays the custom unit for the products if defined or the selected unit of measure otherwise.'
  • base_unit_price Monetary
    compute='_compute_base_unit_price' currency_field='currency_id' args: 'Price Per Unit'
  • product_variant_image_ids One2many → product.image
    string='Extra Variant Images' args: 'product.image', 'product_variant_id'
  • ribbon_id Many2one → product.ribbon
    comodel_name='product.ribbon' string='Variant Ribbon'
  • website_id Many2one
    readonly=False related='product_tmpl_id.website_id'
  • website_url Char
    compute='_compute_product_website_url' help='The full URL to access the document through the website.' args: 'Website URL'
Public methods (2)
  • open_website_url(self)
  • website_publish_button(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • child_id One2many → product.public.category
    string='Children Categories' args: 'product.public.category', 'parent_id'
  • name Char
    required=True translate=True
  • parent_id Many2one → product.public.category
    index=True ondelete='cascade' string='Parent Category' args: 'product.public.category'
  • parent_path Char
    index=True unaccent=False
  • parents_and_self Many2many → product.public.category
    compute='_compute_parents_and_self' args: 'product.public.category'
  • product_tmpl_ids Many2many → product.template
    relation='product_public_category_product_template_rel' args: 'product.template'
  • sequence Integer
    default=_default_sequence help='Gives the sequence order when displaying a list of product categories.' index=True
  • website_description Html
    sanitize_attributes=False sanitize_form=False sanitize_overridable=True translate=html_translate args: 'Category Description'
Public methods (1)
  • check_parent_id(self)
    @api.constrains('parent_id')

New fields (4)
  • bg_color Char
    required=False string='Ribbon background color'
  • html Html
    required=True sanitize=False string='Ribbon html' translate=True
  • html_class Char
    default='' required=True string='Ribbon class'
  • text_color Char
    required=False string='Ribbon text color'
Public methods (0)

No public methods.

New fields (2)
  • image Image
    max_height=200 max_width=200 string='Image'
  • visible_on_ecommerce Boolean
    default=True help='Whether the tag is displayed on the eCommerce.' string='Visible on eCommerce'
Public methods (0)

No public methods.

New fields (15)
  • accessory_product_ids Many2many → product.product
    check_company=True column1='src_id' column2='dest_id' comodel_name='product.product' help='Accessories show up when the customer reviews the cart before payment (cross-sell strategy).' relation='product_accessory_rel' string='Accessory Products'
  • alternative_product_ids Many2many → product.template
    check_company=True column1='src_id' column2='dest_id' comodel_name='product.template' help='Suggest alternatives to your customer (upsell strategy). Those products show up on the product page.' relation='product_alternative_rel' string='Alternative Products'
  • base_unit_count Float
    compute='_compute_base_unit_count' default=0 help='Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.' inverse='_set_base_unit_count' required=True store=True string='Base Unit Count'
  • base_unit_id Many2one → website.base.unit
    comodel_name='website.base.unit' compute='_compute_base_unit_id' help='Define a custom unit to display in the price per unit of measure field.' inverse='_set_base_unit_id' store=True string='Custom Unit of Measure'
  • base_unit_name Char
    compute='_compute_base_unit_name' help='Displays the custom unit for the products if defined or the selected unit of measure otherwise.'
  • base_unit_price Monetary
    compute='_compute_base_unit_price' string='Price Per Unit'
  • compare_list_price Monetary
    help='The amount will be displayed strikethroughed on the eCommerce product page' string='Compare to Price'
  • description_ecommerce Html
    sanitize_attributes=False sanitize_form=False sanitize_overridable=True string='eCommerce Description' translate=html_translate
  • product_template_image_ids One2many → product.image
    comodel_name='product.image' copy=True inverse_name='product_tmpl_id' string='Extra Product Media'
  • public_categ_ids Many2many → product.public.category
    comodel_name='product.public.category' help="The product will be available in each mentioned eCommerce category. Go to Shop > Edit Click on the page and enable 'Categories' to view all eCommerce categories." relation='product_public_category_product_template_rel' string='Website Product Category'
  • website_description Html
    sanitize_attributes=False sanitize_form=False sanitize_overridable=True string='Description for the website' translate=html_translate
  • website_ribbon_id Many2one → product.ribbon
    comodel_name='product.ribbon' string='Ribbon'
  • website_sequence Integer
    copy=False default=_default_website_sequence help='Determine the display order in the Website E-commerce' index=True string='Website Sequence'
  • website_size_x Integer
    default=1 string='Size X'
  • website_size_y Integer
    default=1 string='Size Y'
Public methods (6)
  • create_product_variant(self, product_template_attribute_value_ids)
    Create if necessary and possible and return the id of the product variant matching the given combination for this template. Note AWA: Known "exploit" issues with this method: - This method could be used by an unauthenticated user to generate a lot of useless variants. Unfortunately, after discussing the matter with ODO, there's no easy and user-friendly way to block that behavior. We would have to use captcha/server actions to clean/... that are all not user-friendly/overkill mechanisms. - This method could be used to try to guess what product variant ids are created in the system and what product template ids are configured as "dynamic", but that does not seem like a big deal. The error messages are identical on purpose to avoid giving too much information to a potential attacker: - returning 0 when failing - returning the variant id whether it already existed or not :param product_template_attribute_value_ids: the combination for which to get or create variant :type product_template_attribute_value_ids: list of id of `product.template.attribute.value` :return: id of the product variant matching the combination or 0 :rtype: int
  • set_sequence_bottom(self)
  • set_sequence_down(self)
  • set_sequence_top(self)
  • set_sequence_up(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (23)
  • account_on_checkout Selection
    compute='_compute_account_on_checkout' inverse='_inverse_account_on_checkout' readonly=False required=True selection=[('optional', 'Optional'), ('disabled', 'Disabled (buy as guest)'), ('mandatory', 'Mandatory (no guest checkout)')] string='Customer Accounts'
  • add_to_cart_action Selection
    readonly=False related='website_id.add_to_cart_action'
  • cart_abandoned_delay Float
    readonly=False related='website_id.cart_abandoned_delay' string='Send After'
  • cart_recovery_mail_template Many2one → mail.template
    domain="[('model', '=', 'sale.order')]" readonly=False related='website_id.cart_recovery_mail_template_id' string='Cart Recovery Email' args: 'mail.template'
  • enabled_buy_now_button Boolean
    compute='_compute_checkout_process_steps' readonly=False store=True string='Buy Now'
  • enabled_extra_checkout_step Boolean
    compute='_compute_checkout_process_steps' readonly=False store=True string='Extra Step During Checkout'
  • group_delivery_invoice_address Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_delivery_invoice_address' string='Shipping Address'
  • group_product_price_comparison Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='website_sale.group_product_price_comparison' string='Comparison Price'
  • group_product_pricelist Boolean
    compute='_compute_group_product_pricelist' readonly=False store=True
  • group_show_uom_price Boolean
    default=False group='base.group_portal,base.group_user,base.group_public' implied_group='website_sale.group_show_uom_price' string='Base Unit Price'
  • module_account Boolean
    args: 'Invoicing'
  • module_delivery_mondialrelay Boolean
    args: 'Mondial Relay Connector'
  • module_website_sale_autocomplete Boolean
    args: 'Address Autocomplete'
  • module_website_sale_comparison Boolean
    args: 'Product Comparison Tool'
  • module_website_sale_picking Boolean
    args: 'On Site Payments & Picking'
  • module_website_sale_wishlist Boolean
    args: 'Wishlists'
  • salesperson_id Many2one → res.users
    domain="[('share', '=', False)]" readonly=False related='website_id.salesperson_id' string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    readonly=False related='website_id.salesteam_id' string='Sales Team' args: 'crm.team'
  • send_abandoned_cart_email Boolean
    readonly=False related='website_id.send_abandoned_cart_email' args: 'Abandoned Email'
  • show_line_subtotals_tax_selection Selection
    readonly=False related='website_id.show_line_subtotals_tax_selection'
  • website_sale_contact_us_button_url Char
    readonly=False related='website_id.contact_us_button_url' string='Button URL'
  • website_sale_enabled_portal_reorder_button Boolean
    readonly=False related='website_id.enabled_portal_reorder_button' string='Re-order From Portal'
  • website_sale_prevent_zero_price_sale Boolean
    readonly=False related='website_id.prevent_zero_price_sale' string='Prevent Sale of Zero Priced Product'
Public methods (4)
  • action_open_abandoned_cart_mail_template(self)
  • action_open_extra_info(self)
  • action_open_sale_mail_templates(self)
  • set_values(self)

New fields (0)

No new fields.

Public methods (2)
  • get_website_sale_countries(self, mode='billing')
  • get_website_sale_states(self, mode='billing')

New fields (1)
  • last_website_so_id Many2one → sale.order
    compute='_compute_last_website_so_id' string='Last Online Sales Order' args: 'sale.order'
Public methods (1)
  • write(self, vals)

New fields (9)
  • access_point_address Json
    args: 'Delivery Point Address'
  • amount_delivery Monetary
    compute='_compute_amount_delivery' help='Tax included or excluded depending on the website configuration.' string='Delivery Amount'
  • cart_quantity Integer
    compute='_compute_cart_info' string='Cart Quantity'
  • cart_recovery_email_sent Boolean
    args: 'Cart recovery email already sent'
  • is_abandoned_cart Boolean
    compute='_compute_abandoned_cart' search='_search_abandoned_cart' args: 'Abandoned Cart'
  • only_services Boolean
    compute='_compute_cart_info' string='Only Services'
  • shop_warning Char
    args: 'Warning'
  • website_id Many2one → website
    help='Website through which this order was placed for eCommerce orders.' readonly=True string='Website' args: 'website'
  • website_order_line One2many → sale.order.line
    compute='_compute_website_order_line' string='Order Lines displayed on Website' args: 'sale.order.line'
Public methods (3)
  • action_preview_sale_order(self)
  • action_recovery_email_send(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (4)
  • linked_line_id Many2one → sale.order.line
    copy=False domain="[('order_id', '=', order_id)]" index=True ondelete='cascade' string='Linked Order Line' args: 'sale.order.line'
  • name_short Char
    compute='_compute_name_short'
  • option_line_ids One2many → sale.order.line
    string='Options Linked' args: 'sale.order.line', 'linked_line_id'
  • shop_warning Char
    args: 'Warning'
Public methods (1)
  • get_description_following_lines(self)

New fields (2)
  • is_abandoned_cart Boolean
    readonly=True string='Abandoned Cart'
  • website_id Many2one → website
    readonly=True args: 'website'
Public methods (0)

No public methods.

New fields (27)
  • account_on_checkout Selection
    default='optional' selection=[('optional', 'Optional'), ('disabled', 'Disabled (buy as guest)'), ('mandatory', 'Mandatory (no guest checkout)')] string='Customer Accounts'
  • add_to_cart_action Selection
    default='stay' selection=[('stay', 'Stay on Product Page'), ('go_to_cart', 'Go to cart')]
  • all_pricelist_ids One2many → product.pricelist
    string='All pricelists' args: 'product.pricelist', 'website_id'
  • auth_signup_uninvited Selection
    default='b2c'
  • cart_abandoned_delay Float
    default=10.0 string='Abandoned Delay'
  • cart_recovery_mail_template_id Many2one → mail.template
    default=_default_recovery_mail_template domain="[('model', '=', 'sale.order')]" string='Cart Recovery Email' args: 'mail.template'
  • contact_us_button_url Char
    default='/contactus' string='Contact Us Button URL' translate=True
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' string='Default Currency' args: 'res.currency'
  • enabled_delivery Boolean
    compute='_compute_enabled_delivery' string='Enable Shipping'
  • enabled_portal_reorder_button Boolean
    string='Re-order From Portal'
  • fiscal_position_id Many2one → account.fiscal.position
    compute='_compute_fiscal_position_id' args: 'account.fiscal.position'
  • prevent_zero_price_sale Boolean
    string="Hide 'Add To Cart' when price = 0"
  • prevent_zero_price_sale_text Char
    default='Not Available For Sale' string='Text to show instead of price' translate=True
  • pricelist_id Many2one → product.pricelist
    compute='_compute_pricelist_id' string='Default Pricelist if any' args: 'product.pricelist'
  • pricelist_ids One2many → product.pricelist
    compute='_compute_pricelist_ids' string='Price list available for this Ecommerce/Website' args: 'product.pricelist'
  • product_page_grid_columns Integer
    default=2
  • product_page_image_layout Selection
    default='carousel' required=True args: [('carousel', 'Carousel'), ('grid', 'Grid')]
  • product_page_image_spacing Selection
    default='small' required=True args: [('none', 'None'), ('small', 'Small'), ('medium', 'Medium'), ('big', 'Big')]
  • product_page_image_width Selection
    default='50_pc' required=True args: [('none', 'Hidden'), ('50_pc', '50 %'), ('66_pc', '66 %'), ('100_pc', '100 %')]
  • salesperson_id Many2one → res.users
    string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    default=_default_salesteam_id ondelete='set null' string='Sales Team' args: 'crm.team'
  • send_abandoned_cart_email Boolean
    string='Send email to customers who abandoned their cart.'
  • shop_default_sort Selection
    default='website_sequence asc' required=True selection='_get_product_sort_mapping'
  • shop_extra_field_ids One2many → website.sale.extra.field
    string='E-Commerce Extra Fields' args: 'website.sale.extra.field', 'website_id'
  • shop_ppg Integer
    default=20 string='Number of products in the grid on the shop'
  • shop_ppr Integer
    default=4 string='Number of grid columns on the shop'
  • show_line_subtotals_tax_selection Selection
    default='tax_excluded' required=True selection=[('tax_excluded', 'Tax Excluded'), ('tax_included', 'Tax Included')] string='Line Subtotals Tax Display'
Public methods (8)
  • action_dashboard_redirect(self)
    @api.model
  • get_pricelist_available(self, show_visible=False)
    Return the list of pricelists that can be used on website for the current user. Country restrictions will be detected with GeoIP (if installed). :param bool show_visible: if True, we don't display pricelist where selectable is False (Eg: Code promo) :returns: pricelist recordset
  • get_suggested_controllers(self)
  • is_pricelist_available(self, pl_id)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_get_order(self, force_create=False, update_pricelist=False)
    Return the current sales order after mofications specified by params. :param bool force_create: Create sales order if not already existing :param bool update_pricelist: Force to recompute all the lines from sales order to adapt the price with the current pricelist. :returns: record for the current sales order (might be empty) :rtype: `sale.order` recordset
  • sale_get_payment_term(self, partner)
    @api.model
  • sale_product_domain(self)
  • sale_reset(self)

New fields (1)
  • name Char
    help='Define a custom unit to display in the price per unit of measure field.' required=True translate=True
Public methods (0)

No public methods.

New fields (5)
  • field_id Many2one → ir.model.fields
    domain=[('model_id.model', '=', 'product.template'), ('ttype', 'in', ['char', 'binary'])] ondelete='cascade' required=True args: 'ir.model.fields'
  • label Char
    related='field_id.field_description'
  • name Char
    related='field_id.name'
  • sequence Integer
    default=10
  • website_id Many2one → website
    args: 'website'
Public methods (0)

No public methods.

New fields (1)
  • product_cross_selling Boolean
    default=False help='True only for product filters that require a product_id because they relate to cross selling' string='About cross selling products'
Public methods (0)

No public methods.

New fields (1)
  • product_id Many2one → product.product
    index='btree_not_null' ondelete='cascade' readonly=True args: 'product.product'
Public methods (0)

No public methods.

New fields (3)
  • product_count Integer
    compute='_compute_product_statistics' help='Total number of product viewed' args: 'Products Views'
  • product_ids Many2many → product.product
    compute='_compute_product_statistics' string='Visited Products' args: 'product.product'
  • visitor_product_count Integer
    compute='_compute_product_statistics' help='Total number of views on products' args: 'Product Views'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/website_sale
VERSION
VERSION 1.1
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Xavier Morel, Goffin Simon, Nicolas Martinelli, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Yannick Tivisse, qsm-odoo, Pierre Masereel, Romain Derie, Laurent Smet, Christophe Monniez, Jorge Pinna Puissant, Lucas Perais, Alexandre Kühn, Julien Castiaux, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Akim Juillerat, alt-odoo, Florent de Labarre, Anh Thao Pham (pta), svs-odoo, Alvaro Fuentes, Achraf (abz), Ivan Yelizariev, Nasreddin Boulif (bon), Tiffany Chang (tic), Gorash, Younn Olivier, Mathieu Duckerts-Antoine, Pierre Paridans, Kamen Zhekov, William Braeckman, Romain Estievenart, Benjamin Vray, Benoit Socias, Laurent Desausoi (lade), Guillaume (gdi), Nicolas (vin), Florian Damhaut, MerlinGuillaume, thcl-odoo, mafo-odoo, Antoine Guenet, Arthur Detroux (ard), Florian Charlier, Nshimiyimana Séna, Walid HANNICHE (waha), Yolann Sabaux, Abdelouahab (abla), Nicolas Bayet, Antoine Vandevenne (anv), Thibault Libioulle, Jinjiu Liu, Demesmaeker, Donatas, Aurelien van Delft (avd), luvi, Achraf, Valentin Chevalier, Roy Le, Fabio Barbero, Renaud Thiry, Pierrot (prro), niyasraphy, Simone Rubino, Thomas Lefebvre (thle), Gaetan Vanden Bergh (gavb), Merel Geens (mege), Mylyna Hy, nda, Victor Piryns (pivi), Julien (jula), Gauthier Wala (gawa), Pierre-Yves Dufays, Saurabh Mishra, Pieter Claeys (clpi), Huy Lee, Soukéina Bojabza, Robin Lejeune (role), Louis (loco), Saurabh Choraria, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Sébastien Geelen (sge), Sanket Brahmbhatt, Bruno Boi, Antoine (ande), Kamlesh Pathekar, imanie383, Horacio Tellez, Horacio Tellez (hote), Leloup Loïc (lole), stcc-odoo, Anita (anko), David Vidal, AH-Yussef, Mahdi Cheikh Rouhou (macr), stefanorigano (SRI), Mattis Megevand, Eteil Djoumatchoua(etdj), lase@odoo.com, Jordan D. (Joda), Louis (loti), Eteil Djoumatchoua (etdj), vava-odoo, kcv-odoo, moerradi, Tanguy Quéguineur, dere-odoo, Alexandre de Pape (alpa), Martin Trigaux (mat), Lina (liew), kanda999, CarlosRoca13, mano-odoo, Mathieu (mano), Xavier Luyckx (xlu), Ryan Cen, Pierre Pulinckx (PIPU), luve-odoo, joda-odoo, Danial Sheikhani, Lucas Vermeulen (luve), Florian Malfroid, Omar (OSAH), nipl-odoo, rupa-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/ecommerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:54
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - social_media
    - google_recaptcha
    - utm
    - sale
    - sales_team
    - account_payment
    - account
    - product
    - uom
    - analytic
    - payment
    - website_payment
    - website_mail
    - portal_rating
    - rating
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (166)
XML IDNameModelTypeStatus
account_move_view_form account.move.form.inherit.website_sale account.move xpath Inherits account.view_move_form
add_to_cart_redirect Cart Redirection ir.ui.view qweb Inherits website.layout
address Address Management ir.ui.view qweb New
address_b2b Show b2b fields ir.ui.view qweb Inherits address
address_kanban Kanban address ir.ui.view qweb New
address_on_payment Address on payment ir.ui.view qweb New
alternative_products Alternative Products ir.ui.view qweb Inherits website_sale.product
attribute_tree_view product.attribute.tree product.attribute field Inherits product.attribute_tree_view
base_unit_price Product Bas eunit price ir.ui.view qweb New
carousel_product_indicators Carousel Product ir.ui.view qweb New
carousel_product_indicators_bottom Carousel Product Indicators Bottom ir.ui.view qweb Inherits website_sale.shop_product_carousel
carousel_product_indicators_left Carousel Product Indicators Left ir.ui.view qweb Inherits website_sale.shop_product_carousel
cart Shopping Cart ir.ui.view qweb New
cart_line_description_following_lines Shopping Cart Line Description Following Lines ir.ui.view qweb New
cart_line_product_link Shopping Cart Line Product Link ir.ui.view qweb New
cart_lines Shopping Cart Lines ir.ui.view qweb New
cart_popover Cart Popover ir.ui.view qweb New
cart_summary Cart right column ir.ui.view qweb New
categorie_link Category Link ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
coupon_form Coupon form ir.ui.view qweb New
crm_team_view_kanban_dashboard crm.team.view.kanban.dashboard.inherit.website.sale crm.team data Inherits sales_team.crm_team_view_kanban_dashboard
digest_digest_view_form digest.digest.view.form.inherit.website.sale.order digest.digest xpath Inherits digest.digest_digest_view_form
dynamic_filter_template_product_product_add_to_cart Classic Card ir.ui.view qweb New
dynamic_filter_template_product_product_banner Large Banner ir.ui.view qweb New
dynamic_filter_template_product_product_borderless_1 Borderless Product n°1 ir.ui.view qweb New
dynamic_filter_template_product_product_borderless_2 Borderless Product n°2 ir.ui.view qweb New
dynamic_filter_template_product_product_card_group Card group ir.ui.view qweb New
dynamic_filter_template_product_product_centered Centered Product ir.ui.view qweb New
dynamic_filter_template_product_product_horizontal_card Horizontal Card ir.ui.view qweb New
dynamic_filter_template_product_product_horizontal_card_2 Horizontal Card width covered image ir.ui.view qweb New
dynamic_filter_template_product_product_mini_image Image only ir.ui.view qweb New
dynamic_filter_template_product_product_mini_name Image with name ir.ui.view qweb New
dynamic_filter_template_product_product_mini_price Image with price ir.ui.view qweb New
dynamic_filter_template_product_product_view_detail Classic Card - Detailed ir.ui.view qweb New
ecom_show_extra_fields Show Extra Fields ir.ui.view qweb Inherits website_sale.product
extra_info Checkout Extra Info ir.ui.view qweb New
extra_info_option Extra Step Option ir.ui.view qweb Inherits wizard_checkout
filter_products_price Filter by Prices ir.ui.view qweb New
header_cart_link Header Cart Link ir.ui.view qweb New
header_hide_empty_cart_link Header Hide Empty Cart link ir.ui.view qweb Inherits website_sale.header_cart_link
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories_list
payment Payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_footer Payment ir.ui.view qweb New
payment_sale_note Accept Terms & Conditions ir.ui.view qweb Inherits payment_footer
price_dynamic_filter_template_product_product Dynamic Product Filter Price ir.ui.view qweb New
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product Product ir.ui.view qweb New
product_attribute_view_form product.attribute.view.form product.attribute field Inherits product.product_attribute_view_form
product_buy_now Buy Now Button ir.ui.view qweb Inherits website_sale.product
product_category_extra_link Product Category Extra Link ir.ui.view qweb New
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_custom_text Terms and Conditions ir.ui.view qweb Inherits website_sale.product
product_image_view_kanban product.image.view.kanban product.image kanban New
product_pages_kanban_view Product Pages Kanban product.template xpath Inherits product_template_view_kanban_website_sale
product_pages_tree_view Product Pages Tree product.template xpath Inherits product_template_view_tree_website_sale
product_picture_magnify_both Automatic Image Zoom And On Click ir.ui.view qweb Inherits website_sale.product
product_picture_magnify_click Image Zoom On Click ir.ui.view qweb Inherits website_sale.product
product_picture_magnify_hover Automatic Image Zoom ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_product_normal_website_form_view product.product.normal.view.website product.product xpath Inherits product.product_normal_form_view
product_product_view_form_add product.product.view.form.add product.product form New
product_product_view_form_easy_inherit_website_sale product.product.view.form.easy.inherit.website_sale product.product xpath Inherits product.product_variant_easy_edit_view
product_product_website_tree_view product.product.website.tree product.product field Inherits product.product_product_tree_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.tree product.public.category tree New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_ribbon_form_view product.ribbon form view product.ribbon form New
product_ribbon_view_tree product.ribbon.tree product.ribbon tree New
product_searchbar_input_snippet_options product search bar snippet options ir.ui.view qweb Inherits website.searchbar_input_snippet_options
product_share_buttons Share Buttons ir.ui.view qweb Inherits website_sale.product
product_tag_form_view_inherit_website_sale product.tag.form.inherit.website.sale product.tag field Inherits product.product_tag_form_view
product_tag_tree_view_inherit_website_sale product.tag.tree.inherit.website.sale product.tag field Inherits product.product_tag_tree_view
product_template_form_view product.template.product.website.form product.template div Inherits product.product_template_form_view
product_template_only_website_form_view product.template.product.only.website.form product.template div Inherits product.product_template_only_form_view
product_template_search_view_website product.template.search.published product.template xpath Inherits product.product_template_search_view
product_template_view_kanban_website_sale product.template.view.kanban.website_sale product.template xpath Inherits product.product_template_kanban_view
product_template_view_tree product.template.view.tree.inherit.website_sale product.template field Inherits product.product_template_tree_view
product_template_view_tree_website_sale product.template.view.tree.website_sale product.template xpath Inherits website_sale.product_template_view_tree
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Attributes & Variants filters ir.ui.view qweb Inherits website_sale.products
products_breadcrumb Products Breadcrumb ir.ui.view qweb New
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_design_card Card Design ir.ui.view qweb Inherits website_sale.products
products_design_grid Grid Design ir.ui.view qweb Inherits website_sale.products
products_design_thumbs Thumbnails Design ir.ui.view qweb Inherits website_sale.products
products_fiscal_position products_fiscal_position ir.ui.view qweb Inherits website_sale.products
products_item Products item ir.ui.view qweb New
products_list_view List View (by default) ir.ui.view qweb Inherits website_sale.products
products_thumb_2_3 thumb_2_3 ir.ui.view qweb Inherits website_sale.products
products_thumb_4_3 thumb_4_3 ir.ui.view qweb Inherits website_sale.products
products_thumb_4_5 thumb_4_5 ir.ui.view qweb Inherits website_sale.products
products_thumb_cover thumb_cover ir.ui.view qweb Inherits website_sale.products
reduction_code Promo Code ir.ui.view qweb Inherits website_sale.total
res_config_settings_view_form res.config.settings.view.form.inherit.website.sale res.config.settings div Inherits website.res_config_settings_view_form
res_config_settings_view_form_inherit_sale res.config.settings.view.form.inherit.sale res.config.settings xpath Inherits sale.res_config_settings_view_form
res_config_settings_view_form_web_terms res.config.settings.view.form.inherit.account.web.terms res.config.settings xpath Inherits account.res_config_settings_view_form
s_add_to_cart Add to Cart Button ir.ui.view qweb New
s_add_to_cart_options s_add_to_cart_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_products Products ir.ui.view qweb New
s_dynamic_snippet_products_options s_dynamic_snippet_products_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_products_template_options s_dynamic_snippet_products_template_options ir.ui.view qweb Inherits website.s_dynamic_snippet_options_template
sale_order_portal_content_inherit_website_sale Orders Followup Products Links ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_re_order_btn Sale Order Order Again ir.ui.view qweb Inherits sale.sale_order_portal_template
sale_order_view_form sale.order.form sale.order field Inherits sale.view_order_form
sale_order_view_form_cart_recovery sale.order.form.abandoned.cart sale.order xpath Inherits sale.view_order_form
sale_report_view_graph_website sale.report.view.graph.website sale.report graph New
sale_report_view_pivot_website sale.report.view.pivot.website sale.report pivot New
sale_report_view_search_website sale.report.search sale.report search New
sale_report_view_tree sale.report.view.tree.inherit.website.sale sale.report field Inherits sale.sale_report_view_tree
search Search Box ir.ui.view qweb New
short_cart_summary Short Cart right column ir.ui.view qweb New
snippet_options e-commerce snippet options ir.ui.view qweb Inherits website.snippet_options
snippets e-commerce snippets ir.ui.view qweb Inherits website.snippets
snippets_options_web_editor e-commerce base snippet options ir.ui.view qweb Inherits web_editor.snippet_options
suggested_products_list Accessory Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
template_header_boxed template_header_boxed ir.ui.view qweb Inherits website.template_header_boxed
template_header_centered_logo template_header_centered_logo ir.ui.view qweb Inherits website.template_header_centered_logo
template_header_contact template_header_contact ir.ui.view qweb Inherits website.template_header_contact
template_header_default template_header_default ir.ui.view qweb Inherits website.template_header_default
template_header_hamburger template_header_hamburger ir.ui.view qweb Inherits website.template_header_hamburger
template_header_hamburger_full template_header_hamburger_full ir.ui.view qweb Inherits website.template_header_hamburger_full
template_header_image template_header_image ir.ui.view qweb Inherits website.template_header_image
template_header_magazine template_header_magazine ir.ui.view qweb Inherits website.template_header_magazine
template_header_sidebar template_header_sidebar ir.ui.view qweb Inherits website.template_header_sidebar
template_header_slogan template_header_slogan ir.ui.view qweb Inherits website.template_header_slogan
template_header_vertical template_header_vertical ir.ui.view qweb Inherits website.template_header_vertical
total total ir.ui.view qweb New
view_order_tree sale.order.tree.inherit.website.sale sale.order xpath Inherits sale.view_order_tree
view_product_image_form product.image.view.form product.image form New
view_quotation_tree sale.order.tree.inherit.website.sale sale.order xpath Inherits sale.view_quotation_tree
view_sales_order_filter_ecommerce sale.order.ecommerce.search.view sale.order xpath Inherits sale.view_sales_order_filter
view_sales_order_filter_ecommerce_abondand sale.order.ecommerce.abondand.view sale.order search New
view_sales_order_filter_ecommerce_unpaid sale.order.ecommerce.search.unpaid.view sale.order xpath Inherits sale.view_sales_order_filter
view_website_sale_website_form website_sale.website.form website xpath Inherits website.view_website_form
website_sale.add_grid_or_list_option Grid or List button ir.ui.view qweb New
website_sale.brand_promotion website_sale.brand_promotion ir.ui.view qweb Inherits website.brand_promotion
website_sale.filmstrip_categories Categories Filmstrip ir.ui.view qweb New
website_sale.o_wsale_offcanvas Offcanvas ir.ui.view qweb New
website_sale.products_attributes_top Attributes in top-nav ir.ui.view qweb New
website_sale.products_categories Categories in Left Side ir.ui.view qweb New
website_sale.products_categories_list eCommerce Categories ir.ui.view qweb New
website_sale.products_categories_top Categories in top-nav ir.ui.view qweb New
website_sale.shop_product_carousel Shop Product Carousel ir.ui.view qweb New
website_sale.shop_product_grid Shop Product Grid ir.ui.view qweb New
website_sale.shop_product_image website_sale.shop_product_image ir.ui.view qweb New
website_sale.shop_product_images Shop Product Images ir.ui.view qweb New
website_sale.sort Sort-by Template ir.ui.view qweb New
website_sale.tax_indication website_sale.tax_indication ir.ui.view qweb New
website_sale_pricelist_form_view website_sale.pricelist.form product.pricelist xpath Inherits product.product_pricelist_view
website_sale_pricelist_tree_view product.pricelist.tree.inherit.product product.pricelist field Inherits product.product_pricelist_view_tree
website_sale_visitor_page_view_graph website.track.view.graph website.track graph New
website_sale_visitor_page_view_search website.track.view.search website.track xpath Inherits website.website_visitor_page_view_search
website_sale_visitor_page_view_tree website.track.view.tree website.track tree New
website_sale_visitor_track_view_graph website.track.view.graph website.track xpath Inherits website.website_visitor_track_view_graph
website_sale_visitor_track_view_tree website.track.view.tree website.track xpath Inherits website.website_visitor_track_view_tree
website_sale_visitor_view_form website.visitor.view.form website.visitor xpath Inherits website.website_visitor_view_form
website_sale_visitor_view_kanban website.visitor.view.kanban website.visitor xpath Inherits website.website_visitor_view_kanban
website_sale_visitor_view_tree website.visitor.view.tree website.visitor xpath Inherits website.website_visitor_view_tree
wizard_checkout Wizard Checkout ir.ui.view qweb New
Models touched (28)

New fields (1)
  • website_id Many2one → website
    compute='_compute_website_id' help='Website through which this invoice was created for eCommerce orders.' readonly=True store=True string='Website' tracking=True args: 'website'
Public methods (1)
  • preview_invoice(self)

New fields (3)
  • abandoned_carts_amount Integer
    compute='_compute_abandoned_carts' readonly=True string='Amount of Abandoned Carts'
  • abandoned_carts_count Integer
    compute='_compute_abandoned_carts' readonly=True string='Number of Abandoned Carts'
  • website_ids One2many → website
    string='Websites' args: 'website', 'salesteam_id'
Public methods (1)
  • get_abandoned_carts(self)

New fields (2)
  • kpi_website_sale_total Boolean
    args: 'eCommerce Sales'
  • kpi_website_sale_total_value Monetary
    compute='_compute_kpi_website_sale_total_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • visibility Selection
    default='visible' args: [('visible', 'Visible'), ('hidden', 'Hidden')]
Public methods (0)

No public methods.

New fields (8)
  • can_image_1024_be_zoomed Boolean
    compute='_compute_can_image_1024_be_zoomed' store=True args: 'Can Image 1024 be zoomed'
  • embed_code Html
    compute='_compute_embed_code' sanitize=False
  • image_1920 Image
  • name Char
    required=True args: 'Name'
  • product_tmpl_id Many2one → product.template
    index=True ondelete='cascade' args: 'product.template', 'Product Template'
  • product_variant_id Many2one → product.product
    index=True ondelete='cascade' args: 'product.product', 'Product Variant'
  • sequence Integer
    default=10
  • video_url Char
    help='URL of a video for showcasing your product.' args: 'Video URL'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the default_product_tmpl_id from the context to be applied if we have a product_variant_id set to avoid having the variant images to show also as template images. But we want it if we don't have a product_variant_id set.

New fields (3)
  • code Char
    groups='base.group_user' string='E-commerce Promotional Code'
  • selectable Boolean
    help='Allow the end user to choose this price list'
  • website_id Many2one → website
    default=_default_website domain="[('company_id', '=?', company_id)]" ondelete='restrict' string='Website' args: 'website'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, data)

New fields (7)
  • base_unit_count Float
    default=1 help='Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.' required=True args: 'Base Unit Count'
  • base_unit_id Many2one → website.base.unit
    help='Define a custom unit to display in the price per unit of measure field.' string='Custom Unit of Measure' args: 'website.base.unit'
  • base_unit_name Char
    compute='_compute_base_unit_name' help='Displays the custom unit for the products if defined or the selected unit of measure otherwise.'
  • base_unit_price Monetary
    compute='_compute_base_unit_price' currency_field='currency_id' args: 'Price Per Unit'
  • product_variant_image_ids One2many → product.image
    string='Extra Variant Images' args: 'product.image', 'product_variant_id'
  • website_id Many2one
    readonly=False related='product_tmpl_id.website_id'
  • website_url Char
    compute='_compute_product_website_url' help='The full URL to access the document through the website.' args: 'Website URL'
Public methods (2)
  • open_website_url(self)
  • website_publish_button(self)

New fields (8)
  • child_id One2many → product.public.category
    string='Children Categories' args: 'product.public.category', 'parent_id'
  • name Char
    required=True translate=True
  • parent_id Many2one → product.public.category
    index=True ondelete='cascade' string='Parent Category' args: 'product.public.category'
  • parent_path Char
    index=True unaccent=False
  • parents_and_self Many2many → product.public.category
    compute='_compute_parents_and_self' args: 'product.public.category'
  • product_tmpl_ids Many2many → product.template
    relation='product_public_category_product_template_rel' args: 'product.template'
  • sequence Integer
    default=_default_sequence help='Gives the sequence order when displaying a list of product categories.' index=True
  • website_description Html
    sanitize_attributes=False sanitize_form=False sanitize_overridable=True translate=html_translate args: 'Category Description'
Public methods (2)
  • check_parent_id(self)
    @api.constrains('parent_id')
  • name_get(self)

New fields (5)
  • bg_color Char
    required=False string='Ribbon background color'
  • html Html
    required=True sanitize=False string='Ribbon html' translate=True
  • html_class Char
    default='' required=True string='Ribbon class'
  • product_tag_ids One2many → product.tag
    string='Product Tags' args: 'product.tag', 'ribbon_id'
  • text_color Char
    required=False string='Ribbon text color'
Public methods (1)
  • name_get(self)

New fields (1)
  • ribbon_id Many2one → product.ribbon
    string='Ribbon' args: 'product.ribbon'
Public methods (0)

No public methods.

New fields (14)
  • accessory_product_ids Many2many → product.product
    check_company=True help='Accessories show up when the customer reviews the cart before payment (cross-sell strategy).' string='Accessory Products' args: 'product.product', 'product_accessory_rel', 'src_id', 'dest_id'
  • alternative_product_ids Many2many → product.template
    check_company=True help='Suggest alternatives to your customer (upsell strategy). Those products show up on the product page.' string='Alternative Products' args: 'product.template', 'product_alternative_rel', 'src_id', 'dest_id'
  • base_unit_count Float
    compute='_compute_base_unit_count' default=0 help='Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.' inverse='_set_base_unit_count' required=True store=True args: 'Base Unit Count'
  • base_unit_id Many2one → website.base.unit
    compute='_compute_base_unit_id' help='Define a custom unit to display in the price per unit of measure field.' inverse='_set_base_unit_id' store=True string='Custom Unit of Measure' args: 'website.base.unit'
  • base_unit_name Char
    compute='_compute_base_unit_name' help='Displays the custom unit for the products if defined or the selected unit of measure otherwise.'
  • base_unit_price Monetary
    compute='_compute_base_unit_price' currency_field='currency_id' args: 'Price Per Unit'
  • compare_list_price Float
    digits='Product Price' help='The amount will be displayed strikethroughed on the eCommerce product page' args: 'Compare to Price'
  • product_template_image_ids One2many → product.image
    copy=True string='Extra Product Media' args: 'product.image', 'product_tmpl_id'
  • public_categ_ids Many2many → product.public.category
    help="The product will be available in each mentioned eCommerce category. Go to Shop > Edit Click on the page and enable 'Categories' to view all eCommerce categories." relation='product_public_category_product_template_rel' string='Website Product Category' args: 'product.public.category'
  • website_description Html
    sanitize_attributes=False sanitize_form=False sanitize_overridable=True translate=html_translate args: 'Description for the website'
  • website_ribbon_id Many2one → product.ribbon
    string='Ribbon' args: 'product.ribbon'
  • website_sequence Integer
    copy=False default=<expr> help='Determine the display order in the Website E-commerce' index=True args: 'Website Sequence'
  • website_size_x Integer
    default=1 args: 'Size X'
  • website_size_y Integer
    default=1 args: 'Size Y'
Public methods (5)
  • get_google_analytics_data(self, combination)
    @api.model
  • set_sequence_bottom(self)
  • set_sequence_down(self)
  • set_sequence_top(self)
  • set_sequence_up(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • website_sale_onboarding_payment_provider_state Selection
    default='not_done' string='State of the website sale onboarding payment provider step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
Public methods (1)
  • action_open_website_sale_onboarding_payment_provider(self)
    @api.model
    Called by onboarding panel above the quotation list.

New fields (28)
  • account_on_checkout Selection
    compute='_compute_account_on_checkout' inverse='_inverse_account_on_checkout' readonly=False required=True selection=[('optional', 'Optional'), ('disabled', 'Disabled (buy as guest)'), ('mandatory', 'Mandatory (no guest checkout)')] string='Customer Accounts'
  • add_to_cart_action Selection
    readonly=False related='website_id.add_to_cart_action'
  • cart_abandoned_delay Float
    readonly=False related='website_id.cart_abandoned_delay' string='Send After'
  • cart_recovery_mail_template Many2one → mail.template
    domain="[('model', '=', 'sale.order')]" readonly=False related='website_id.cart_recovery_mail_template_id' string='Cart Recovery Email' args: 'mail.template'
  • enabled_buy_now_button Boolean
    compute='_compute_checkout_process_steps' readonly=False store=True string='Buy Now'
  • enabled_extra_checkout_step Boolean
    compute='_compute_checkout_process_steps' readonly=False store=True string='Extra Step During Checkout'
  • group_delivery_invoice_address Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='account.group_delivery_invoice_address' string='Shipping Address'
  • group_product_price_comparison Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='website_sale.group_product_price_comparison' string='Comparison Price'
  • group_product_pricelist Boolean
    compute='_compute_group_product_pricelist' readonly=False store=True
  • group_show_uom_price Boolean
    default=False group='base.group_portal,base.group_user,base.group_public' implied_group='website_sale.group_show_uom_price' string='Base Unit Price'
  • module_account Boolean
    args: 'Invoicing'
  • module_delivery Boolean
    compute='_compute_module_delivery' readonly=False store=True
  • module_delivery_mondialrelay Boolean
    args: 'Mondial Relay Connector'
  • module_website_sale_autocomplete Boolean
    args: 'Address Autocomplete'
  • module_website_sale_comparison Boolean
    args: 'Product Comparison Tool'
  • module_website_sale_delivery Boolean
    args: 'eCommerce Shipping Costs'
  • module_website_sale_delivery Boolean
    compute='_compute_module_delivery' readonly=False store=True
  • module_website_sale_digital Boolean
    args: 'Digital Content'
  • module_website_sale_picking Boolean
    args: 'On Site Payments & Picking'
  • module_website_sale_wishlist Boolean
    args: 'Wishlists'
  • sale_delivery_settings Selection
    string='Shipping Management' args: [('none', 'No shipping management on website'), ('internal', "Delivery methods are only used internally: the customer doesn't pay for shipping costs"), ('website', 'Delivery methods are selectable on the website: the customer pays for shipping costs')]
  • salesperson_id Many2one → res.users
    domain="[('share', '=', False)]" readonly=False related='website_id.salesperson_id' string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    readonly=False related='website_id.salesteam_id' string='Sales Team' args: 'crm.team'
  • send_abandoned_cart_email Boolean
    readonly=False related='website_id.send_abandoned_cart_email' args: 'Abandoned Email'
  • terms_url Char
    compute='_compute_terms_url' help='A preview will be available at this URL.' string='URL'
  • website_sale_contact_us_button_url Char
    readonly=False related='website_id.contact_us_button_url' string='Button URL'
  • website_sale_enabled_portal_reorder_button Boolean
    readonly=False related='website_id.enabled_portal_reorder_button' string='Re-order From Portal'
  • website_sale_prevent_zero_price_sale Boolean
    readonly=False related='website_id.prevent_zero_price_sale' string='Prevent Sale of Zero Priced Product'
Public methods (6)
  • action_open_abandoned_cart_mail_template(self)
  • action_open_extra_info(self)
  • action_open_sale_mail_templates(self)
  • action_update_terms(self)
  • get_values(self)
    @api.model
  • set_values(self)

New fields (0)

No new fields.

Public methods (2)
  • get_website_sale_countries(self, mode='billing')
  • get_website_sale_states(self, mode='billing')

New fields (1)
  • last_website_so_id Many2one → sale.order
    compute='_compute_last_website_so_id' string='Last Online Sales Order' args: 'sale.order'
Public methods (1)
  • write(self, vals)

New fields (7)
  • cart_quantity Integer
    compute='_compute_cart_info' string='Cart Quantity'
  • cart_recovery_email_sent Boolean
    args: 'Cart recovery email already sent'
  • is_abandoned_cart Boolean
    compute='_compute_abandoned_cart' search='_search_abandoned_cart' args: 'Abandoned Cart'
  • only_services Boolean
    compute='_compute_cart_info' string='Only Services'
  • shop_warning Char
    args: 'Warning'
  • website_id Many2one → website
    help='Website through which this order was placed for eCommerce orders.' readonly=True string='Website' args: 'website'
  • website_order_line One2many → sale.order.line
    compute='_compute_website_order_line' string='Order Lines displayed on Website' args: 'sale.order.line'
Public methods (4)
  • action_confirm(self)
  • action_preview_sale_order(self)
  • action_recovery_email_send(self)
  • create(self, vals_list)
    @api.model_create_multi

New fields (4)
  • linked_line_id Many2one → sale.order.line
    copy=False domain="[('order_id', '=', order_id)]" index=True ondelete='cascade' string='Linked Order Line' args: 'sale.order.line'
  • name_short Char
    compute='_compute_name_short'
  • option_line_ids One2many → sale.order.line
    string='Options Linked' args: 'sale.order.line', 'linked_line_id'
  • shop_warning Char
    args: 'Warning'
Public methods (1)
  • get_description_following_lines(self)

New fields (1)
  • website_id Many2one → website
    readonly=True args: 'website'
Public methods (0)

No public methods.

New fields (24)
  • account_on_checkout Selection
    default='optional' selection=[('optional', 'Optional'), ('disabled', 'Disabled (buy as guest)'), ('mandatory', 'Mandatory (no guest checkout)')] string='Customer Accounts'
  • add_to_cart_action Selection
    default='stay' selection=[('stay', 'Stay on Product Page'), ('go_to_cart', 'Go to cart')]
  • all_pricelist_ids One2many → product.pricelist
    string='All pricelists' args: 'product.pricelist', 'website_id'
  • auth_signup_uninvited Selection
    default='b2c'
  • cart_abandoned_delay Float
    default=10.0 string='Abandoned Delay'
  • cart_recovery_mail_template_id Many2one → mail.template
    default=_default_recovery_mail_template domain="[('model', '=', 'sale.order')]" string='Cart Recovery Email' args: 'mail.template'
  • contact_us_button_url Char
    default='/contactus' string='Contact Us Button URL' translate=True
  • currency_id Many2one
    depends=() readonly=False related='pricelist_id.currency_id' related_sudo=False string='Default Currency'
  • enabled_portal_reorder_button Boolean
    string='Re-order From Portal'
  • prevent_zero_price_sale Boolean
    string="Hide 'Add To Cart' when price = 0"
  • prevent_zero_price_sale_text Char
    default='Not Available For Sale' string='Text to show instead of price' translate=True
  • pricelist_id Many2one → product.pricelist
    compute='_compute_pricelist_id' string='Default Pricelist' args: 'product.pricelist'
  • pricelist_ids One2many → product.pricelist
    compute='_compute_pricelist_ids' string='Price list available for this Ecommerce/Website' args: 'product.pricelist'
  • product_page_grid_columns Integer
    default=2
  • product_page_image_layout Selection
    default='carousel' required=True args: [('carousel', 'Carousel'), ('grid', 'Grid')]
  • product_page_image_spacing Selection
    default='small' required=True args: [('none', 'None'), ('small', 'Small'), ('medium', 'Medium'), ('big', 'Big')]
  • product_page_image_width Selection
    default='50_pc' required=True args: [('none', 'Hidden'), ('50_pc', '50 %'), ('66_pc', '66 %'), ('100_pc', '100 %')]
  • salesperson_id Many2one → res.users
    string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    default=_default_salesteam_id ondelete='set null' string='Sales Team' args: 'crm.team'
  • send_abandoned_cart_email Boolean
    string='Send email to customers who abandoned their cart.'
  • shop_default_sort Selection
    default='website_sequence asc' required=True selection='_get_product_sort_mapping'
  • shop_extra_field_ids One2many → website.sale.extra.field
    string='E-Commerce Extra Fields' args: 'website.sale.extra.field', 'website_id'
  • shop_ppg Integer
    default=20 string='Number of products in the grid on the shop'
  • shop_ppr Integer
    default=4 string='Number of grid columns on the shop'
Public methods (9)
  • action_dashboard_redirect(self)
    @api.model
  • get_current_pricelist(self)
    :returns: The current pricelist record
  • get_pricelist_available(self, show_visible=False)
    Return the list of pricelists that can be used on website for the current user. Country restrictions will be detected with GeoIP (if installed). :param bool show_visible: if True, we don't display pricelist where selectable is False (Eg: Code promo) :returns: pricelist recordset
  • get_suggested_controllers(self)
  • is_pricelist_available(self, pl_id)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_get_order(self, force_create=False, update_pricelist=False)
    Return the current sales order after mofications specified by params. :param bool force_create: Create sales order if not already existing :param bool update_pricelist: Force to recompute all the lines from sales order to adapt the price with the current pricelist. :returns: record for the current sales order (might be empty) :rtype: `sale.order` recordset
  • sale_get_payment_term(self, partner)
    @api.model
  • sale_product_domain(self)
  • sale_reset(self)

New fields (1)
  • name Char
    help='Define a custom unit to display in the price per unit of measure field.' required=True translate=True
Public methods (0)

No public methods.

New fields (5)
  • field_id Many2one → ir.model.fields
    domain=[('model_id.model', '=', 'product.template'), ('ttype', 'in', ['char', 'binary'])] ondelete='cascade' required=True args: 'ir.model.fields'
  • label Char
    related='field_id.field_description'
  • name Char
    related='field_id.name'
  • sequence Integer
    default=10
  • website_id Many2one → website
    args: 'website'
Public methods (0)

No public methods.

New fields (1)
  • product_cross_selling Boolean
    default=False help='True only for product filters that require a product_id because they relate to cross selling' string='About cross selling products'
Public methods (0)

No public methods.

New fields (1)
  • product_id Many2one → product.product
    index='btree_not_null' ondelete='cascade' readonly=True args: 'product.product'
Public methods (0)

No public methods.

New fields (3)
  • product_count Integer
    compute='_compute_product_statistics' help='Total number of product viewed' args: 'Products Views'
  • product_ids Many2many → product.product
    compute='_compute_product_statistics' string='Visited Products' args: 'product.product'
  • visitor_product_count Integer
    compute='_compute_product_statistics' help='Total number of views on products' args: 'Product Views'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/website_sale
VERSION
VERSION 1.1
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Josse Colpaert, David Monjoie, Xavier Morel, Goffin Simon, Mohammed Shekha, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, GitHub, Yannick Tivisse, qsm-odoo, Romain Derie, Toufik Ben Jaa, Adrian Torres, Moens Alexandre, Aurélien Warnon, Xavier-Do, David Tran, Victor Feyens, Andrea Grazioso (agr-odoo), Loan (lse), Nasreddin (bon), alt-odoo, Florent de Labarre, Julien Mougenot, Anh Thao Pham (pta), svs-odoo, Samuel Degueldre, Alvaro Fuentes, Achraf (abz), Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), Swapnesh Shah, nie, Tiffany Chang (tic), Ivàn Todorovich, Younn Olivier, Mathieu Duckerts-Antoine, Kamen Zhekov, Djamel (otd), Arnaud Joset, William Braeckman, root, Kevin Baptiste, Benjamin Vray, Benoit Socias, Laurent Desausoi (lade), Nicolas (vin), william-andre, Florian Damhaut, Merlin (megu), MerlinGuillaume, mafo-odoo, Antoine Guenet, Arthur Detroux (ard), Patrick Hoste, Walid HANNICHE (waha), Abdelouahab (abla), Nicolas Bayet, Antoine Vandevenne (anv), Thibault Libioulle, Jinjiu Liu, Laurent Stukkens (LTU), Demesmaeker, Donatas, Valentin Chevalier, Pierrot (prro), Habib (ayh), Thomas Lefebvre (thle), Merel Geens (mege), Mylyna Hy, nda, Victor Piryns (pivi), Julien (jula), Gauthier Wala (gawa), Tom De Caluwé, Anna Janiszewska, Saurabh Mishra, Soukéina Bojabza, xO-Tx, Munaf Khan, Levi Siuzdak (sile), Sébastien Geelen (sge), Bruno Boi, imanie383, tanghulu0608, tuyenphung, stcc-odoo, Anita (anko), AH-Yussef, hote, Alexandre de Pape (alpa), kanda999, CarlosRoca13
WEBSITE
WEBSITEhttps://www.odoo.com/app/ecommerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - social_media
    - google_recaptcha
    - utm
    - sale
    - sales_team
    - payment
    - account
    - product
    - uom
    - analytic
    - website_payment
    - website_mail
    - portal_rating
    - rating
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (140)
XML IDNameModelTypeStatus
account_move_view_form account.move.form.inherit.website_sale account.move xpath Inherits account.view_move_form
add_grid_or_list_option Grid or List button ir.ui.view qweb Inherits website_sale.products
add_to_cart_redirect Cart Redirection ir.ui.view qweb Inherits website.layout
address Address Management ir.ui.view qweb New
address_b2b Show b2b fields ir.ui.view qweb Inherits address
address_kanban Kanban address ir.ui.view qweb New
address_on_payment Address on payment ir.ui.view qweb New
attribute_tree_view product.attribute.tree product.attribute field Inherits product.attribute_tree_view
base_unit_price Product Bas eunit price ir.ui.view qweb New
carousel_product_indicators Carousel Product ir.ui.view qweb New
carousel_product_indicators_bottom Carousel Product Indicators Bottom ir.ui.view qweb Inherits website_sale.shop_product_carousel
carousel_product_indicators_left Carousel Product Indicators Left ir.ui.view qweb Inherits website_sale.shop_product_carousel
cart Shopping Cart ir.ui.view qweb New
cart_line_description_following_lines Shopping Cart Line Description Following Lines ir.ui.view qweb New
cart_line_product_link Shopping Cart Line Product Link ir.ui.view qweb New
cart_lines Shopping Cart Lines ir.ui.view qweb New
cart_popover Cart Popover ir.ui.view qweb New
cart_summary Cart right column ir.ui.view qweb New
categorie_link Category Link ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
coupon_form Coupon form ir.ui.view qweb New
crm_team_view_kanban_dashboard crm.team.view.kanban.dashboard.inherit.website.sale crm.team data Inherits sales_team.crm_team_view_kanban_dashboard
digest_digest_view_form digest.digest.view.form.inherit.website.sale.order digest.digest xpath Inherits digest.digest_digest_view_form
dynamic_filter_template_product_product_add_to_cart Classic Card ir.ui.view qweb New
dynamic_filter_template_product_product_banner Large Banner ir.ui.view qweb New
dynamic_filter_template_product_product_borderless_1 Borderless Product n°1 ir.ui.view qweb New
dynamic_filter_template_product_product_borderless_2 Borderless Product n°2 ir.ui.view qweb New
dynamic_filter_template_product_product_centered Centered Product ir.ui.view qweb New
dynamic_filter_template_product_product_horizontal_card Horizontal Card ir.ui.view qweb New
dynamic_filter_template_product_product_mini_image Image only ir.ui.view qweb New
dynamic_filter_template_product_product_mini_name Image with name ir.ui.view qweb New
dynamic_filter_template_product_product_mini_price Image with price ir.ui.view qweb New
dynamic_filter_template_product_product_view_detail Detailed Product ir.ui.view qweb New
ecom_show_extra_fields Show Extra Fields ir.ui.view qweb Inherits website_sale.product
extra_info Checkout Extra Info ir.ui.view qweb New
extra_info_option Extra Step Option ir.ui.view qweb Inherits wizard_checkout
filter_products_price Filter by Prices ir.ui.view qweb Inherits website_sale.products
header_cart_link Header Cart Link ir.ui.view qweb New
header_hide_empty_cart_link Header Hide Empty Cart link ir.ui.view qweb Inherits website_sale.header_cart_link
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories
payment Payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_footer Payment ir.ui.view qweb New
payment_sale_note Accept Terms & Conditions ir.ui.view qweb Inherits payment_footer
price_dynamic_filter_template_product_product Dynamic Product Filter Price ir.ui.view qweb New
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product Product ir.ui.view qweb New
product_attribute_view_form product.attribute.view.form product.attribute field Inherits product.product_attribute_view_form
product_buy_now Buy Now Button ir.ui.view qweb Inherits website_sale.product
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_custom_text Terms and Conditions ir.ui.view qweb Inherits website_sale.product
product_edit_options Edit Product Options ir.ui.view qweb Inherits website.user_navbar
product_image_view_kanban product.image.view.kanban product.image kanban New
product_picture_magnify Image Zoom ir.ui.view qweb Inherits website_sale.product
product_picture_magnify_auto Automatic Image Zoom ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_product_normal_website_form_view product.product.normal.view.website product.product xpath Inherits product.product_normal_form_view
product_product_view_form_easy_inherit_website_sale product.product.view.form.easy.inherit.website_sale product.product field Inherits product.product_variant_easy_edit_view
product_product_website_tree_view product.product.website.tree product.product field Inherits product.product_product_tree_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.tree product.public.category tree New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_ribbon_form_view product.ribbon form view product.ribbon form New
product_ribbon_view_tree product.ribbon.tree product.ribbon tree New
product_searchbar_input_snippet_options product search bar snippet options ir.ui.view qweb Inherits website.searchbar_input_snippet_options
product_share_buttons Share Buttons ir.ui.view qweb Inherits website_sale.product
product_template_form_view product.template.product.website.form product.template div Inherits product.product_template_form_view
product_template_only_website_form_view product.template.product.only.website.form product.template xpath Inherits product.product_template_only_form_view
product_template_search_view_website product.template.search.published product.template xpath Inherits product.product_template_search_view
product_template_view_kanban_website_sale product.template.view.kanban.website_sale product.template xpath Inherits product.product_template_kanban_view
product_template_view_tree product.template.view.tree.inherit.website_sale product.template field Inherits product.product_template_tree_view
product_template_view_tree_website_sale product.template.view.tree.website_sale product.template xpath Inherits website_sale.product_template_view_tree
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Attributes & Variants filters ir.ui.view qweb Inherits website_sale.products
products_breadcrumb Products Breadcrumb ir.ui.view qweb New
products_categories eCommerce Categories ir.ui.view qweb Inherits website_sale.products
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_images_full Images Full ir.ui.view qweb Inherits website_sale.products
products_item Products item ir.ui.view qweb New
products_list_view List View (by default) ir.ui.view qweb Inherits website_sale.products
recommended_products Alternative Products ir.ui.view qweb Inherits website_sale.product
reduction_code Promo Code ir.ui.view qweb Inherits website_sale.total
res_config_settings_view_form res.config.settings.view.form.inherit.website.sale res.config.settings div Inherits website.res_config_settings_view_form
res_config_settings_view_form_web_terms res.config.settings.view.form.inherit.account.web.terms res.config.settings xpath Inherits account.res_config_settings_view_form
s_dynamic_snippet_products Products ir.ui.view qweb New
s_dynamic_snippet_products_options s_dynamic_snippet_products_options ir.ui.view qweb Inherits website.snippet_options
s_dynamic_snippet_products_template_options s_dynamic_snippet_products_template_options ir.ui.view qweb Inherits website.s_dynamic_snippet_options_template
sale_order_portal_content_inherit_website_sale Orders Followup Products Links ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_view_form sale.order.form sale.order field Inherits sale.view_order_form
sale_order_view_form_cart_recovery sale.order.form.abandoned.cart sale.order xpath Inherits sale.view_order_form
sale_report_view_graph_website sale.report.view.graph.website sale.report graph New
sale_report_view_pivot_website sale.report.view.pivot.website sale.report pivot New
sale_report_view_search_website sale.report.search sale.report search New
sale_report_view_tree sale.report.view.tree.inherit.website.sale sale.report field Inherits sale.sale_report_view_tree
search Search Box ir.ui.view qweb New
search_count_box Show # found ir.ui.view qweb Inherits website.website_search_box
short_cart_summary Short Cart right column ir.ui.view qweb New
snippet_options e-commerce snippet options ir.ui.view qweb Inherits website.snippet_options
snippets e-commerce snippets ir.ui.view qweb Inherits website.snippets
sort Show Sort by ir.ui.view qweb Inherits website_sale.products
suggested_products_list Accessory Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
template_header_boxed template_header_boxed ir.ui.view qweb Inherits website.template_header_boxed
template_header_centered_logo template_header_centered_logo ir.ui.view qweb Inherits website.template_header_centered_logo
template_header_contact template_header_contact ir.ui.view qweb Inherits website.template_header_contact
template_header_default template_header_default ir.ui.view qweb Inherits website.template_header_default
template_header_hamburger template_header_hamburger ir.ui.view qweb Inherits website.template_header_hamburger
template_header_hamburger_full template_header_hamburger_full ir.ui.view qweb Inherits website.template_header_hamburger_full
template_header_image template_header_image ir.ui.view qweb Inherits website.template_header_image
template_header_magazine template_header_magazine ir.ui.view qweb Inherits website.template_header_magazine
template_header_sidebar template_header_sidebar ir.ui.view qweb Inherits website.template_header_sidebar
template_header_slogan template_header_slogan ir.ui.view qweb Inherits website.template_header_slogan
template_header_vertical template_header_vertical ir.ui.view qweb Inherits website.template_header_vertical
total total ir.ui.view qweb New
user_navbar_inherit_website_sale user_navbar_inherit_website_sale ir.ui.view qweb Inherits website.user_navbar
view_order_tree sale.order.tree.inherit.website.sale sale.order xpath Inherits sale.view_order_tree
view_product_image_form product.image.view.form product.image form New
view_quotation_tree sale.order.tree.inherit.website.sale sale.order xpath Inherits sale.view_quotation_tree
view_sales_order_filter_ecommerce sale.order.ecommerce.search.view sale.order xpath Inherits sale.view_sales_order_filter
view_sales_order_filter_ecommerce_abondand sale.order.ecommerce.abondand.view sale.order search New
view_sales_order_filter_ecommerce_unpaid sale.order.ecommerce.search.unpaid.view sale.order xpath Inherits sale.view_sales_order_filter
view_website_sale_website_form website_sale.website.form website xpath Inherits website.view_website_form
website_sale.brand_promotion website_sale.brand_promotion ir.ui.view qweb Inherits website.brand_promotion
website_sale.shop_product_carousel Shop Product Carousel ir.ui.view qweb New
website_sale_onboarding_payment_acquirer_step website_sale_onboarding_payment_acquirer_step ir.ui.view qweb Inherits payment.onboarding_payment_acquirer_step
website_sale_pricelist_form_view website_sale.pricelist.form product.pricelist xpath Inherits product.product_pricelist_view
website_sale_pricelist_tree_view product.pricelist.tree.inherit.product product.pricelist field Inherits product.product_pricelist_view_tree
website_sale_visitor_page_view_graph website.track.view.graph website.track graph New
website_sale_visitor_page_view_search website.track.view.search website.track xpath Inherits website.website_visitor_page_view_search
website_sale_visitor_page_view_tree website.track.view.tree website.track tree New
website_sale_visitor_track_view_graph website.track.view.graph website.track xpath Inherits website.website_visitor_track_view_graph
website_sale_visitor_track_view_tree website.track.view.tree website.track xpath Inherits website.website_visitor_track_view_tree
website_sale_visitor_view_form website.visitor.view.form website.visitor xpath Inherits website.website_visitor_view_form
website_sale_visitor_view_kanban website.visitor.view.kanban website.visitor xpath Inherits website.website_visitor_view_kanban
website_sale_visitor_view_tree website.visitor.view.tree website.visitor xpath Inherits website.website_visitor_view_tree
wizard_checkout Wizard Checkout ir.ui.view qweb New
Models touched (29)

New fields (1)
  • website_id Many2one → website
    help='Website through which this invoice was created.' readonly=True related='partner_id.website_id' store=True string='Website' tracking=True args: 'website'
Public methods (0)

No public methods.

New fields (3)
  • abandoned_carts_amount Integer
    compute='_compute_abandoned_carts' readonly=True string='Amount of Abandoned Carts'
  • abandoned_carts_count Integer
    compute='_compute_abandoned_carts' readonly=True string='Number of Abandoned Carts'
  • website_ids One2many → website
    help='Websites using this Sales Team' string='Websites' args: 'website', 'salesteam_id'
Public methods (1)
  • get_abandoned_carts(self)

New fields (2)
  • kpi_website_sale_total Boolean
    args: 'eCommerce Sales'
  • kpi_website_sale_total_value Monetary
    compute='_compute_kpi_website_sale_total_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • visibility Selection
    default='visible' args: [('visible', 'Visible'), ('hidden', 'Hidden')]
Public methods (0)

No public methods.

New fields (8)
  • can_image_1024_be_zoomed Boolean
    compute='_compute_can_image_1024_be_zoomed' store=True args: 'Can Image 1024 be zoomed'
  • embed_code Html
    compute='_compute_embed_code' sanitize=False
  • image_1920 Image
    required=True
  • name Char
    required=True args: 'Name'
  • product_tmpl_id Many2one → product.template
    index=True ondelete='cascade' args: 'product.template', 'Product Template'
  • product_variant_id Many2one → product.product
    index=True ondelete='cascade' args: 'product.product', 'Product Variant'
  • sequence Integer
    default=10 index=True
  • video_url Char
    help='URL of a video for showcasing your product.' args: 'Video URL'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the default_product_tmpl_id from the context to be applied if we have a product_variant_id set to avoid having the variant images to show also as template images. But we want it if we don't have a product_variant_id set.

New fields (3)
  • code Char
    groups='base.group_user' string='E-commerce Promotional Code'
  • selectable Boolean
    help='Allow the end user to choose this price list'
  • website_id Many2one → website
    default=_default_website domain="[('company_id', '=?', company_id)]" ondelete='restrict' string='Website' args: 'website'
Public methods (4)
  • clear_cache(self)
  • create(self, data)
    @api.model
  • unlink(self)
  • write(self, data)

New fields (7)
  • base_unit_count Float
    default=1 help='Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.' required=True args: 'Base Unit Count'
  • base_unit_id Many2one → website.base.unit
    help='Define a custom unit to display in the price per unit of measure field.' string='Custom Unit of Measure' args: 'website.base.unit'
  • base_unit_name Char
    compute='_compute_base_unit_name' help='Displays the custom unit for the products if defined or the selected unit of measure otherwise.'
  • base_unit_price Monetary
    compute='_compute_base_unit_price' currency_field='currency_id' args: 'Price Per Unit'
  • product_variant_image_ids One2many → product.image
    string='Extra Variant Images' args: 'product.image', 'product_variant_id'
  • website_id Many2one
    readonly=False related='product_tmpl_id.website_id'
  • website_url Char
    compute='_compute_product_website_url' help='The full URL to access the document through the website.' args: 'Website URL'
Public methods (2)
  • open_website_url(self)
  • website_publish_button(self)

New fields (8)
  • child_id One2many → product.public.category
    string='Children Categories' args: 'product.public.category', 'parent_id'
  • name Char
    required=True translate=True
  • parent_id Many2one → product.public.category
    index=True ondelete='cascade' string='Parent Category' args: 'product.public.category'
  • parent_path Char
    index=True
  • parents_and_self Many2many → product.public.category
    compute='_compute_parents_and_self' args: 'product.public.category'
  • product_tmpl_ids Many2many → product.template
    relation='product_public_category_product_template_rel' args: 'product.template'
  • sequence Integer
    default=_default_sequence help='Gives the sequence order when displaying a list of product categories.' index=True
  • website_description Html
    sanitize_attributes=False sanitize_form=False translate=html_translate args: 'Category Description'
Public methods (2)
  • check_parent_id(self)
    @api.constrains('parent_id')
  • name_get(self)

New fields (4)
  • bg_color Char
    required=False string='Ribbon background color'
  • html Html
    required=True sanitize=False string='Ribbon html' translate=True
  • html_class Char
    default='' required=True string='Ribbon class'
  • text_color Char
    required=False string='Ribbon text color'
Public methods (1)
  • name_get(self)

New fields (13)
  • accessory_product_ids Many2many → product.product
    check_company=True help='Accessories show up when the customer reviews the cart before payment (cross-sell strategy).' string='Accessory Products' args: 'product.product', 'product_accessory_rel', 'src_id', 'dest_id'
  • alternative_product_ids Many2many → product.template
    check_company=True help='Suggest alternatives to your customer (upsell strategy). Those products show up on the product page.' string='Alternative Products' args: 'product.template', 'product_alternative_rel', 'src_id', 'dest_id'
  • base_unit_count Float
    compute='_compute_base_unit_count' default=0 help='Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.' inverse='_set_base_unit_count' required=True store=True args: 'Base Unit Count'
  • base_unit_id Many2one → website.base.unit
    compute='_compute_base_unit_id' help='Define a custom unit to display in the price per unit of measure field.' inverse='_set_base_unit_id' store=True string='Custom Unit of Measure' args: 'website.base.unit'
  • base_unit_name Char
    compute='_compute_base_unit_name' help='Displays the custom unit for the products if defined or the selected unit of measure otherwise.'
  • base_unit_price Monetary
    compute='_compute_base_unit_price' currency_field='currency_id' args: 'Price Per Unit'
  • product_template_image_ids One2many → product.image
    copy=True string='Extra Product Media' args: 'product.image', 'product_tmpl_id'
  • public_categ_ids Many2many → product.public.category
    help="The product will be available in each mentioned eCommerce category. Go to Shop > Customize and enable 'eCommerce categories' to view all eCommerce categories." relation='product_public_category_product_template_rel' string='Website Product Category' args: 'product.public.category'
  • website_description Html
    sanitize_attributes=False sanitize_form=False translate=html_translate args: 'Description for the website'
  • website_ribbon_id Many2one → product.ribbon
    string='Ribbon' args: 'product.ribbon'
  • website_sequence Integer
    copy=False default=<expr> help='Determine the display order in the Website E-commerce' args: 'Website Sequence'
  • website_size_x Integer
    default=1 args: 'Size X'
  • website_size_y Integer
    default=1 args: 'Size Y'
Public methods (5)
  • get_google_analytics_data(self, combination)
    @api.model
  • set_sequence_bottom(self)
  • set_sequence_down(self)
  • set_sequence_top(self)
  • set_sequence_up(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • website_sale_onboarding_payment_acquirer_state Selection
    default='not_done' string='State of the website sale onboarding payment acquirer step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
Public methods (1)
  • action_open_website_sale_onboarding_payment_acquirer(self)
    @api.model
    Called by onboarding panel above the quotation list.

New fields (15)
  • cart_abandoned_delay Float
    help='Number of hours after which the cart is considered abandoned.' readonly=False related='website_id.cart_abandoned_delay' args: 'Abandoned Delay'
  • cart_add_on_page Boolean
    readonly=False related='website_id.cart_add_on_page' args: 'Stay on page after adding to cart'
  • cart_recovery_mail_template Many2one → mail.template
    domain="[('model', '=', 'sale.order')]" readonly=False related='website_id.cart_recovery_mail_template_id' string='Cart Recovery Email' args: 'mail.template'
  • group_delivery_invoice_address Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='sale.group_delivery_invoice_address' string='Shipping Address'
  • group_show_uom_price Boolean
    default=False group='base.group_portal,base.group_user,base.group_public' implied_group='website_sale.group_show_uom_price' string='Base Unit Price'
  • module_account Boolean
    args: 'Invoicing'
  • module_website_sale_comparison Boolean
    args: 'Product Comparison Tool'
  • module_website_sale_delivery Boolean
    args: 'eCommerce Shipping Costs'
  • module_website_sale_digital Boolean
    args: 'Digital Content'
  • module_website_sale_gift_card Boolean
    args: 'Gift Card'
  • module_website_sale_wishlist Boolean
    args: 'Wishlists'
  • sale_delivery_settings Selection
    string='Shipping Management' args: [('none', 'No shipping management on website'), ('internal', "Delivery methods are only used internally: the customer doesn't pay for shipping costs"), ('website', 'Delivery methods are selectable on the website: the customer pays for shipping costs')]
  • salesperson_id Many2one → res.users
    readonly=False related='website_id.salesperson_id' string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    readonly=False related='website_id.salesteam_id' string='Sales Team' args: 'crm.team'
  • terms_url Char
    compute='_compute_terms_url' help='A preview will be available at this URL.' string='URL'
Public methods (2)
  • action_update_terms(self)
  • get_values(self)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_website_sale_countries(self, mode='billing')
  • get_website_sale_states(self, mode='billing')

New fields (1)
  • last_website_so_id Many2one → sale.order
    compute='_compute_last_website_so_id' string='Last Online Sales Order' args: 'sale.order'
Public methods (0)

No public methods.

New fields (6)
  • cart_quantity Integer
    compute='_compute_cart_info' string='Cart Quantity'
  • cart_recovery_email_sent Boolean
    args: 'Cart recovery email already sent'
  • is_abandoned_cart Boolean
    compute='_compute_abandoned_cart' search='_search_abandoned_cart' args: 'Abandoned Cart'
  • only_services Boolean
    compute='_compute_cart_info' string='Only Services'
  • website_id Many2one → website
    help='Website through which this order was placed.' readonly=True string='Website' args: 'website'
  • website_order_line One2many → sale.order.line
    compute='_compute_website_order_line' help='Order Lines to be displayed on the website. They should not be used for computation purpose.' string='Order Lines displayed on Website' args: 'sale.order.line'
Public methods (3)
  • action_confirm(self)
  • action_recovery_email_send(self)
  • onchange_partner_id(self)
    @api.onchange('partner_id')

New fields (3)
  • linked_line_id Many2one → sale.order.line
    copy=False domain="[('order_id', '=', order_id)]" index=True ondelete='cascade' string='Linked Order Line' args: 'sale.order.line'
  • name_short Char
    compute='_compute_name_short'
  • option_line_ids One2many → sale.order.line
    string='Options Linked' args: 'sale.order.line', 'linked_line_id'
Public methods (2)
  • get_description_following_lines(self)
  • get_sale_order_line_multiline_description_sale(self, product)

New fields (1)
  • website_id Many2one → website
    readonly=True args: 'website'
Public methods (0)

No public methods.

New fields (12)
  • all_pricelist_ids One2many → product.pricelist
    help='Technical: Used to recompute pricelist_ids' string='All pricelists' args: 'product.pricelist', 'website_id'
  • cart_abandoned_delay Float
    default=1.0 args: 'Abandoned Delay'
  • cart_add_on_page Boolean
    default=True args: 'Stay on page after adding to cart'
  • cart_recovery_mail_template_id Many2one → mail.template
    default=_default_recovery_mail_template domain="[('model', '=', 'sale.order')]" string='Cart Recovery Email' args: 'mail.template'
  • currency_id Many2one → res.currency
    depends=() readonly=False related='pricelist_id.currency_id' related_sudo=False string='Default Currency' args: 'res.currency'
  • pricelist_id Many2one → product.pricelist
    compute='_compute_pricelist_id' string='Default Pricelist' args: 'product.pricelist'
  • pricelist_ids One2many → product.pricelist
    compute='_compute_pricelist_ids' string='Price list available for this Ecommerce/Website' args: 'product.pricelist'
  • salesperson_id Many2one → res.users
    string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    default=_get_default_website_team ondelete='set null' string='Sales Team' args: 'crm.team'
  • shop_extra_field_ids One2many → website.sale.extra.field
    string='E-Commerce Extra Fields' args: 'website.sale.extra.field', 'website_id'
  • shop_ppg Integer
    default=20 string='Number of products in the grid on the shop'
  • shop_ppr Integer
    default=4 string='Number of grid columns on the shop'
Public methods (9)
  • action_dashboard_redirect(self)
    @api.model
  • get_current_pricelist(self)
    :returns: The current pricelist record
  • get_pricelist_available(self, show_visible=False)
  • get_suggested_controllers(self)
  • is_pricelist_available(self, pl_id)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_get_order(self, force_create=False, code=None, update_pricelist=False, force_pricelist=False)
    Return the current sales order after mofications specified by params. :param bool force_create: Create sales order if not already existing :param str code: Code to force a pricelist (promo code) If empty, it's a special case to reset the pricelist with the first available else the default. :param bool update_pricelist: Force to recompute all the lines from sales order to adapt the price with the current pricelist. :param int force_pricelist: pricelist_id - if set, we change the pricelist with this one :returns: browse record for the current sales order
  • sale_get_payment_term(self, partner)
    @api.model
  • sale_product_domain(self)
  • sale_reset(self)

New fields (1)
  • name Char
    help='Define a custom unit to display in the price per unit of measure field.' required=True translate=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • field_id Many2one → ir.model.fields
    domain=[('model_id.model', '=', 'product.template'), ('ttype', 'in', ['char', 'binary'])] args: 'ir.model.fields'
  • label Char
    related='field_id.field_description'
  • name Char
    related='field_id.name'
  • sequence Integer
    default=10
  • website_id Many2one → website
    args: 'website'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • product_cross_selling Boolean
    default=False help='True only for product filters that require a product_id because they relate to cross selling' string='About cross selling products'
Public methods (0)

No public methods.

New fields (1)
  • product_id Many2one → product.product
    index=True ondelete='cascade' readonly=True args: 'product.product'
Public methods (0)

No public methods.

New fields (3)
  • product_count Integer
    compute='_compute_product_statistics' help='Total number of product viewed' args: 'Products Views'
  • product_ids Many2many → product.product
    compute='_compute_product_statistics' string='Visited Products' args: 'product.product'
  • visitor_product_count Integer
    compute='_compute_product_statistics' help='Total number of views on products' args: 'Product Views'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/website_sale
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Mohammed Shekha, Nicolas Martinelli, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, GitHub, Damien Bouvy, Barad Mahendra, Yannick Tivisse, qsm-odoo, Romain Derie, Christophe Monniez, Jorge Pinna Puissant, Toufik Ben Jaa, Adrian Torres, wan, Julien Castiaux, Rémi Rahir, Xavier-Do, David Tran, jvm-odoo, jerome hanke (jhk), Victor Feyens, Andrea Grazioso (agr-odoo), Loan (lse), Sébastien Theys, Nasreddin (bon), oco-odoo, Florent de Labarre, Julien Mougenot, fw-bot, Anh Thao Pham (pta), svs-odoo, Luis González, Samuel Degueldre, Achraf (abz), Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), Prakash Prajapati, Swapnesh Shah, nie, Tiffany Chang (tic), Rémy Voet (ryv), fja-odoo, Younn Olivier, Mathieu Duckerts-Antoine, Djamel (otd), Yenthe666, Hiral Bhavsar, Arnaud Joset, William Braeckman, root, Kevin Baptiste, Benjamin Vray, Stefan-Calin Crainiciuc (stcc), Benoit Socias, Laurent Desausoi (lade), Bruno Zanotti (ADHOC), Jigar Vaghela, Florian Damhaut, MerlinGuillaume, thcl-odoo, Juan Jose Scarafia, mafo-odoo, Audric Onockx (auon), Huy Le, Nshimiyimana Séna, Walid HANNICHE (waha), Yolann Sabaux, Antoine Vandevenne (anv), Jinjiu Liu, Laurent Stukkens (LTU), nje-odoo, Thomas Lefebvre (thle), Merel Geens (mege), nda, Victor Piryns (pivi), Julien (jula), Fernanda Hernández, Soukéina Bojabza, Levi Siuzdak (sile), imanie383, tanghulu0608, tuyenphung, stcc-odoo, Anita (anko)
WEBSITE
WEBSITEhttps://www.odoo.com/page/e-commerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:31
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - digest
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - social_media
    - sale
    - sales_team
    - payment
    - account
    - product
    - uom
    - analytic
    - utm
    - website_payment
    - website_mail
    - website_form
    - google_recaptcha
    - portal_rating
    - rating
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (126)
XML IDNameModelTypeStatus
_assets_primary_variables _assets_primary_variables ir.ui.view qweb Inherits website._assets_primary_variables
account_move_view_form account.move.form.inherit.website_sale account.move xpath Inherits account.view_move_form
add_grid_or_list_option Grid or List button ir.ui.view qweb Inherits website_sale.products
address Address Management ir.ui.view qweb New
address_b2b Show b2b fields ir.ui.view qweb Inherits address
address_kanban Kanban address ir.ui.view qweb New
assets_backend assets_backend ir.ui.view qweb Inherits web.assets_backend
assets_common tour ir.ui.view qweb Inherits web.assets_common
assets_editor Shop Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend assets_frontend ir.ui.view qweb Inherits website.assets_frontend
assets_snippet_s_dynamic_snippet_products_js_000 assets_snippet_s_dynamic_snippet_products_js_000 ir.ui.view qweb Inherits website.assets_snippet_s_dynamic_snippet_carousel_js_000
assets_snippet_s_products_searchbar_js_000 assets_snippet_s_products_searchbar_js_000 ir.ui.view qweb Inherits website_sale.assets_frontend
assets_tests Website Sale Assets Tests ir.ui.view qweb Inherits web.assets_tests
assets_wysiwyg Shop Wysiwyg Editor ir.ui.view qweb Inherits website.assets_wysiwyg
cart Shopping Cart ir.ui.view qweb New
cart_line_description_following_lines Shopping Cart Line Description Following Lines ir.ui.view qweb New
cart_line_product_link Shopping Cart Line Product Link ir.ui.view qweb New
cart_lines Shopping Cart Lines ir.ui.view qweb New
cart_popover Cart Popover ir.ui.view qweb New
cart_summary Cart right column ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
coupon_form Coupon form ir.ui.view qweb New
crm_team_salesteams_view_kanban_inherit_website_sale crm.team.kanban crm.team data Inherits sales_team.crm_team_salesteams_view_kanban
digest_digest_view_form digest.digest.view.form.inherit.website.sale.order digest.digest xpath Inherits digest.digest_digest_view_form
ecom_show_extra_fields Show Extra Fields ir.ui.view qweb Inherits website_sale.product
extra_info Checkout Extra Info ir.ui.view qweb New
extra_info_option Extra Step Option ir.ui.view qweb Inherits wizard_checkout
header_cart_link Header Cart Link ir.ui.view qweb New
header_hide_empty_cart_link Header Hide Empty Cart link ir.ui.view qweb Inherits website_sale.header_cart_link
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories
payment Payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_sale_note Accept Terms & Conditions ir.ui.view qweb Inherits payment
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product Product ir.ui.view qweb New
product_buy_now Buy Now Button ir.ui.view qweb Inherits website_sale.product
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_custom_text Terms and Conditions ir.ui.view qweb Inherits website_sale.product
product_edit_options Edit Product Options ir.ui.view qweb Inherits website.user_navbar
product_image_view_kanban product.image.view.kanban product.image kanban New
product_picture_magnify Image Zoom ir.ui.view qweb Inherits website_sale.product
product_picture_magnify_auto Automatic Image Zoom ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_product_view_form_easy_inherit_website_sale product.product.view.form.easy.inherit.website_sale product.product sheet Inherits product.product_variant_easy_edit_view
product_product_website_tree_view product.product.website.tree product.product field Inherits product.product_product_tree_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.tree product.public.category tree New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_ribbon_view_tree product.ribbon.tree product.ribbon tree New
product_template_form_view product.template.product.website.form product.template div Inherits product.product_template_form_view
product_template_form_view_invoice_policy product.template.invoice.policy product.template xpath Inherits sale.product_template_form_view_invoice_policy
product_template_search_view_website product.template.search.published product.template xpath Inherits product.product_template_search_view
product_template_view_tree product.template.view.tree.inherit.website_sale product.template field Inherits product.product_template_tree_view
product_template_view_tree_website_sale product.template.view.tree.website_sale product.template xpath Inherits website_sale.product_template_view_tree
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Product Attribute's Filters ir.ui.view qweb Inherits website_sale.products
products_categories eCommerce Categories ir.ui.view qweb Inherits website_sale.products
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_images_full Images Full ir.ui.view qweb Inherits website_sale.products
products_item Products item ir.ui.view qweb New
products_list_view List View (by default) ir.ui.view qweb Inherits website_sale.products
recently_viewed_products_product Recently Viewed Products ir.ui.view qweb Inherits website_sale.product
recommended_products Alternative Products ir.ui.view qweb Inherits website_sale.product
reduction_code Promo Code ir.ui.view qweb Inherits website_sale.total
res_config_settings_view_form res.config.settings.view.form.inherit.website.sale res.config.settings div Inherits website.res_config_settings_view_form
s_dynamic_snippet_products Dynamic Products ir.ui.view qweb New
s_dynamic_snippet_products_options s_dynamic_snippet_products_options ir.ui.view qweb Inherits website.snippet_options
s_products_recently_viewed Viewed Products ir.ui.view qweb New
s_products_searchbar Products Search ir.ui.view qweb New
s_products_searchbar_input Products Search ir.ui.view qweb New
sale_order_portal_content_inherit_website_sale Orders Followup Products Links ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_view_form sale.order.form sale.order field Inherits sale.view_order_form
sale_order_view_form_cart_recovery sale.order.form.abandoned.cart sale.order xpath Inherits sale.view_order_form
sale_report_view_graph_website sale.report.view.graph.website sale.report graph New
sale_report_view_pivot_website sale.report.view.pivot.website sale.report pivot New
sale_report_view_search_website sale.report.search sale.report search New
search Search Box ir.ui.view qweb New
search_count_box Show # found ir.ui.view qweb Inherits website.website_search_box
searchbar_input_snippet_options search bar snippet options ir.ui.view qweb Inherits website_sale.snippet_options
short_cart_summary Short Cart right column ir.ui.view qweb New
snippet_options e-commerce snippet options ir.ui.view qweb Inherits website.snippet_options
snippets e-commerce snippets ir.ui.view qweb Inherits website.snippets
sort Show Sort by ir.ui.view qweb Inherits website_sale.products
suggested_products_list Accessory Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
template_header_boxed template_header_boxed ir.ui.view qweb Inherits website.template_header_boxed
template_header_centered_logo template_header_centered_logo ir.ui.view qweb Inherits website.template_header_centered_logo
template_header_contact template_header_contact ir.ui.view qweb Inherits website.template_header_contact
template_header_default template_header_default ir.ui.view qweb Inherits website.template_header_default
template_header_hamburger template_header_hamburger ir.ui.view qweb Inherits website.template_header_hamburger
template_header_hamburger_full template_header_hamburger_full ir.ui.view qweb Inherits website.template_header_hamburger_full
template_header_image template_header_image ir.ui.view qweb Inherits website.template_header_image
template_header_magazine template_header_magazine ir.ui.view qweb Inherits website.template_header_magazine
template_header_minimalist template_header_minimalist ir.ui.view qweb Inherits website.template_header_minimalist
template_header_sidebar template_header_sidebar ir.ui.view qweb Inherits website.template_header_sidebar
template_header_slogan template_header_slogan ir.ui.view qweb Inherits website.template_header_slogan
template_header_vertical template_header_vertical ir.ui.view qweb Inherits website.template_header_vertical
terms Terms & Conditions ir.ui.view qweb New
total total ir.ui.view qweb New
user_navbar_inherit_website_sale user_navbar_inherit_website_sale ir.ui.view qweb Inherits website.user_navbar
view_order_tree sale.order.tree.inherit.website.sale sale.order xpath Inherits sale.view_order_tree
view_product_image_form product.image.view.form product.image form New
view_quotation_tree sale.order.tree.inherit.website.sale sale.order xpath Inherits sale.view_quotation_tree
view_sales_order_filter_ecommerce sale.order.ecommerce.search.view sale.order xpath Inherits sale.view_sales_order_filter
view_sales_order_filter_ecommerce_abondand sale.order.ecommerce.abondand.view sale.order search New
view_sales_order_filter_ecommerce_unpaid sale.order.ecommerce.search.unpaid.view sale.order xpath Inherits sale.view_sales_order_filter
view_website_sale_website_form website_sale.website.form website xpath Inherits website.view_website_form
website_sale.brand_promotion website_sale.brand_promotion ir.ui.view qweb Inherits website.brand_promotion
website_sale.shop_product_carousel Shop Product Carousel ir.ui.view qweb New
website_sale_onboarding_payment_acquirer_step website_sale_onboarding_payment_acquirer_step ir.ui.view qweb Inherits payment.onboarding_payment_acquirer_step
website_sale_pricelist_form_view website_sale.pricelist.form product.pricelist xpath Inherits product.product_pricelist_view
website_sale_pricelist_tree_view product.pricelist.tree.inherit.product product.pricelist field Inherits product.product_pricelist_view_tree
website_sale_products_search_box website_sale_products_search_box ir.ui.view qweb Inherits website.website_search_box
website_sale_visitor_page_view_graph website.track.view.graph website.track graph New
website_sale_visitor_page_view_search website.track.view.search website.track xpath Inherits website.website_visitor_page_view_search
website_sale_visitor_page_view_tree website.track.view.tree website.track tree New
website_sale_visitor_track_view_graph website.track.view.graph website.track xpath Inherits website.website_visitor_track_view_graph
website_sale_visitor_track_view_tree website.track.view.tree website.track xpath Inherits website.website_visitor_track_view_tree
website_sale_visitor_view_form website.visitor.view.form website.visitor xpath Inherits website.website_visitor_view_form
website_sale_visitor_view_kanban website.visitor.view.kanban website.visitor xpath Inherits website.website_visitor_view_kanban
website_sale_visitor_view_tree website.visitor.view.tree website.visitor xpath Inherits website.website_visitor_view_tree
wizard_checkout Wizard Checkout ir.ui.view qweb New
Models touched (26)

New fields (1)
  • website_id Many2one → website
    help='Website through which this invoice was created.' readonly=True related='partner_id.website_id' store=True string='Website' tracking=True args: 'website'
Public methods (0)

No public methods.

New fields (3)
  • abandoned_carts_amount Integer
    compute='_compute_abandoned_carts' readonly=True string='Amount of Abandoned Carts'
  • abandoned_carts_count Integer
    compute='_compute_abandoned_carts' readonly=True string='Number of Abandoned Carts'
  • website_ids One2many → website
    help='Websites using this Sales Team' string='Websites' args: 'website', 'salesteam_id'
Public methods (1)
  • get_abandoned_carts(self)

New fields (2)
  • kpi_website_sale_total Boolean
    args: 'eCommerce Sales'
  • kpi_website_sale_total_value Monetary
    compute='_compute_kpi_website_sale_total_value'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • send_mail(self, auto_commit=False)

New fields (8)
  • can_image_1024_be_zoomed Boolean
    compute='_compute_can_image_1024_be_zoomed' store=True args: 'Can Image 1024 be zoomed'
  • embed_code Char
    compute='_compute_embed_code'
  • image_1920 Image
    required=True
  • name Char
    required=True args: 'Name'
  • product_tmpl_id Many2one → product.template
    index=True ondelete='cascade' args: 'product.template', 'Product Template'
  • product_variant_id Many2one → product.product
    index=True ondelete='cascade' args: 'product.product', 'Product Variant'
  • sequence Integer
    default=10 index=True
  • video_url Char
    help='URL of a video for showcasing your product.' args: 'Video URL'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the default_product_tmpl_id from the context to be applied if we have a product_variant_id set to avoid having the variant images to show also as template images. But we want it if we don't have a product_variant_id set.

New fields (3)
  • code Char
    groups='base.group_user' string='E-commerce Promotional Code'
  • selectable Boolean
    help='Allow the end user to choose this price list'
  • website_id Many2one → website
    default=_default_website domain="[('company_id', '=?', company_id)]" ondelete='restrict' string='Website' args: 'website'
Public methods (4)
  • clear_cache(self)
  • create(self, data)
    @api.model
  • unlink(self)
  • write(self, data)

New fields (3)
  • product_variant_image_ids One2many → product.image
    string='Extra Variant Images' args: 'product.image', 'product_variant_id'
  • website_id Many2one
    readonly=False related='product_tmpl_id.website_id'
  • website_url Char
    compute='_compute_product_website_url' help='The full URL to access the document through the website.' args: 'Website URL'
Public methods (2)
  • open_website_url(self)
  • website_publish_button(self)

New fields (8)
  • child_id One2many → product.public.category
    string='Children Categories' args: 'product.public.category', 'parent_id'
  • name Char
    required=True translate=True
  • parent_id Many2one → product.public.category
    index=True ondelete='cascade' string='Parent Category' args: 'product.public.category'
  • parent_path Char
    index=True
  • parents_and_self Many2many → product.public.category
    compute='_compute_parents_and_self' args: 'product.public.category'
  • product_tmpl_ids Many2many → product.template
    relation='product_public_category_product_template_rel' args: 'product.template'
  • sequence Integer
    default=_default_sequence help='Gives the sequence order when displaying a list of product categories.' index=True
  • website_description Html
    sanitize_attributes=False sanitize_form=False translate=html_translate args: 'Category Description'
Public methods (2)
  • check_parent_id(self)
    @api.constrains('parent_id')
  • name_get(self)

New fields (4)
  • bg_color Char
    required=False string='Ribbon background color'
  • html Char
    required=True string='Ribbon html' translate=True
  • html_class Char
    default='' required=True string='Ribbon class'
  • text_color Char
    required=False string='Ribbon text color'
Public methods (1)
  • name_get(self)

New fields (9)
  • accessory_product_ids Many2many → product.product
    check_company=True help='Accessories show up when the customer reviews the cart before payment (cross-sell strategy).' string='Accessory Products' args: 'product.product', 'product_accessory_rel', 'src_id', 'dest_id'
  • alternative_product_ids Many2many → product.template
    check_company=True help='Suggest alternatives to your customer (upsell strategy). Those products show up on the product page.' string='Alternative Products' args: 'product.template', 'product_alternative_rel', 'src_id', 'dest_id'
  • product_template_image_ids One2many → product.image
    copy=True string='Extra Product Media' args: 'product.image', 'product_tmpl_id'
  • public_categ_ids Many2many → product.public.category
    help="The product will be available in each mentioned eCommerce category. Go to Shop > Customize and enable 'eCommerce categories' to view all eCommerce categories." relation='product_public_category_product_template_rel' string='Website Product Category' args: 'product.public.category'
  • website_description Html
    sanitize_attributes=False sanitize_form=False translate=html_translate args: 'Description for the website'
  • website_ribbon_id Many2one → product.ribbon
    string='Ribbon' args: 'product.ribbon'
  • website_sequence Integer
    copy=False default=<expr> help='Determine the display order in the Website E-commerce' args: 'Website Sequence'
  • website_size_x Integer
    default=1 args: 'Size X'
  • website_size_y Integer
    default=1 args: 'Size Y'
Public methods (4)
  • set_sequence_bottom(self)
  • set_sequence_down(self)
  • set_sequence_top(self)
  • set_sequence_up(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • website_sale_onboarding_payment_acquirer_state Selection
    default='not_done' string='State of the website sale onboarding payment acquirer step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
Public methods (1)
  • action_open_website_sale_onboarding_payment_acquirer(self)
    @api.model
    Called by onboarding panel above the quotation list.

New fields (12)
  • cart_abandoned_delay Float
    help='Number of hours after which the cart is considered abandoned.' readonly=False related='website_id.cart_abandoned_delay' args: 'Abandoned Delay'
  • cart_recovery_mail_template Many2one → mail.template
    domain="[('model', '=', 'sale.order')]" readonly=False related='website_id.cart_recovery_mail_template_id' string='Cart Recovery Email' args: 'mail.template'
  • group_delivery_invoice_address Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='sale.group_delivery_invoice_address' string='Shipping Address'
  • module_account Boolean
    args: 'Invoicing'
  • module_website_sale_comparison Boolean
    args: 'Product Comparison Tool'
  • module_website_sale_delivery Boolean
    args: 'eCommerce Shipping Costs'
  • module_website_sale_digital Boolean
    args: 'Digital Content'
  • module_website_sale_stock Boolean
    help='Installs the "Website Delivery Information" application' args: 'Inventory'
  • module_website_sale_wishlist Boolean
    args: 'Wishlists'
  • sale_delivery_settings Selection
    string='Shipping Management' args: [('none', 'No shipping management on website'), ('internal', "Delivery methods are only used internally: the customer doesn't pay for shipping costs"), ('website', 'Delivery methods are selectable on the website: the customer pays for shipping costs')]
  • salesperson_id Many2one → res.users
    readonly=False related='website_id.salesperson_id' string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    readonly=False related='website_id.salesteam_id' string='Sales Team' args: 'crm.team'
Public methods (1)
  • get_values(self)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_website_sale_countries(self, mode='billing')
  • get_website_sale_states(self, mode='billing')

New fields (1)
  • last_website_so_id Many2one → sale.order
    compute='_compute_last_website_so_id' string='Last Online Sales Order' args: 'sale.order'
Public methods (0)

No public methods.

New fields (6)
  • cart_quantity Integer
    compute='_compute_cart_info' string='Cart Quantity'
  • cart_recovery_email_sent Boolean
    args: 'Cart recovery email already sent'
  • is_abandoned_cart Boolean
    compute='_compute_abandoned_cart' search='_search_abandoned_cart' args: 'Abandoned Cart'
  • only_services Boolean
    compute='_compute_cart_info' string='Only Services'
  • website_id Many2one → website
    help='Website through which this order was placed.' readonly=True string='Website' args: 'website'
  • website_order_line One2many → sale.order.line
    compute='_compute_website_order_line' help='Order Lines to be displayed on the website. They should not be used for computation purpose.' string='Order Lines displayed on Website' args: 'sale.order.line'
Public methods (3)
  • action_confirm(self)
  • action_recovery_email_send(self)
  • onchange_partner_id(self)
    @api.onchange('partner_id')

New fields (3)
  • linked_line_id Many2one → sale.order.line
    copy=False domain="[('order_id', '=', order_id)]" index=True ondelete='cascade' string='Linked Order Line' args: 'sale.order.line'
  • name_short Char
    compute='_compute_name_short'
  • option_line_ids One2many → sale.order.line
    string='Options Linked' args: 'sale.order.line', 'linked_line_id'
Public methods (2)
  • get_description_following_lines(self)
  • get_sale_order_line_multiline_description_sale(self, product)

New fields (1)
  • website_id Many2one → website
    readonly=True args: 'website'
Public methods (0)

No public methods.

New fields (11)
  • all_pricelist_ids One2many → product.pricelist
    help='Technical: Used to recompute pricelist_ids' string='All pricelists' args: 'product.pricelist', 'website_id'
  • cart_abandoned_delay Float
    default=1.0 args: 'Abandoned Delay'
  • cart_recovery_mail_template_id Many2one → mail.template
    default=_default_recovery_mail_template domain="[('model', '=', 'sale.order')]" string='Cart Recovery Email' args: 'mail.template'
  • currency_id Many2one → res.currency
    depends=() readonly=False related='pricelist_id.currency_id' related_sudo=False string='Default Currency' args: 'res.currency'
  • pricelist_id Many2one → product.pricelist
    compute='_compute_pricelist_id' string='Default Pricelist' args: 'product.pricelist'
  • pricelist_ids One2many → product.pricelist
    compute='_compute_pricelist_ids' string='Price list available for this Ecommerce/Website' args: 'product.pricelist'
  • salesperson_id Many2one → res.users
    string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    default=_get_default_website_team string='Sales Team' args: 'crm.team'
  • shop_extra_field_ids One2many → website.sale.extra.field
    string='E-Commerce Extra Fields' args: 'website.sale.extra.field', 'website_id'
  • shop_ppg Integer
    default=20 string='Number of products in the grid on the shop'
  • shop_ppr Integer
    default=4 string='Number of grid columns on the shop'
Public methods (9)
  • action_dashboard_redirect(self)
    @api.model
  • get_current_pricelist(self)
    :returns: The current pricelist record
  • get_pricelist_available(self, show_visible=False)
  • get_suggested_controllers(self)
  • is_pricelist_available(self, pl_id)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_get_order(self, force_create=False, code=None, update_pricelist=False, force_pricelist=False)
    Return the current sales order after mofications specified by params. :param bool force_create: Create sales order if not already existing :param str code: Code to force a pricelist (promo code) If empty, it's a special case to reset the pricelist with the first available else the default. :param bool update_pricelist: Force to recompute all the lines from sales order to adapt the price with the current pricelist. :param int force_pricelist: pricelist_id - if set, we change the pricelist with this one :returns: browse record for the current sales order
  • sale_get_payment_term(self, partner)
    @api.model
  • sale_product_domain(self)
  • sale_reset(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • field_id Many2one → ir.model.fields
    domain=[('model_id.model', '=', 'product.template'), ('ttype', 'in', ['char', 'binary'])] args: 'ir.model.fields'
  • label Char
    related='field_id.field_description'
  • name Char
    related='field_id.name'
  • sequence Integer
    default=10
  • website_id Many2one → website
    args: 'website'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • product_id Many2one → product.product
    index=True ondelete='cascade' readonly=True args: 'product.product'
Public methods (0)

No public methods.

New fields (3)
  • product_count Integer
    compute='_compute_product_statistics' help='Total number of product viewed' args: 'Products Views'
  • product_ids Many2many → product.product
    compute='_compute_product_statistics' string='Visited Products' args: 'product.product'
  • visitor_product_count Integer
    compute='_compute_product_statistics' help='Total number of views on products' args: 'Product Views'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/website_sale
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite/Website
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Mohammed Shekha, Nicolas Martinelli, Nicolas Lempereur, Richard Mathot, qdp-odoo, Aaron Bohy, Jeremy Kersten, GitHub, Damien Bouvy, Barad Mahendra, Yannick Tivisse, qsm-odoo, Martin Geubelle, Dharmraj Jhala, Odoo Online, Pierre Masereel, Romain Derie, jem-odoo, Adrien Dieudonne, Christophe Monniez, Jorge Pinna Puissant, Nans Lefebvre, Denis Vermylen, Toufik Ben Jaa, Adrian Torres, Aurélien Warnon, Xavier-Do, Rishabh Jadia, jvm-odoo, jerome hanke (jhk), Victor Feyens, Andrea Grazioso (agr-odoo), Loan (lse), Sébastien Theys, david, Nasreddin (bon), Florent de Labarre, fw-bot, Anh Thao Pham (pta), svs-odoo, Luis González, Adrien Widart, Ivan Yelizariev, Nasreddin Boulif (bon), Prakash Prajapati, Swapnesh Shah, nie, fja-odoo, Mathieu Duckerts-Antoine, Parth Choksi, Hiral Bhavsar, Arnaud Joset, William Braeckman, Benjamin Vray, Kishan Gajjar, Stefan-Calin Crainiciuc (stcc), Benoit Socias, qmo-odoo, mcm-odoo, Florian Damhaut, Juan Jose Scarafia, mafo-odoo, jpr-odoo, Juhil Somaiya, Antoine Vandevenne (anv), Jinjiu Liu, Laurent Stukkens (LTU)
WEBSITE
WEBSITEhttps://www.odoo.com/page/e-commerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - web_editor
    - http_routing
    - portal
    - mail
    - base_setup
    - bus
    - web_tour
    - auth_signup
    - social_media
    - sale
    - sales_team
    - payment
    - account
    - product
    - uom
    - analytic
    - digest
    - resource
    - utm
    - website_payment
    - website_mail
    - website_form
    - website_rating
    - rating
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (106)
XML IDNameModelTypeStatus
404 404 ir.ui.view qweb New
_assets_primary_variables _assets_primary_variables ir.ui.view qweb Inherits website._assets_primary_variables
account_move_view_form account.move.form.inherit.website_sale account.move xpath Inherits account.view_move_form
add_grid_or_list_option Grid or List button ir.ui.view qweb Inherits website_sale.products
address Address Management ir.ui.view qweb New
address_b2b Show b2b fields ir.ui.view qweb Inherits address
address_kanban Kanban address ir.ui.view qweb New
assets_backend assets_backend ir.ui.view qweb Inherits web.assets_backend
assets_common tour ir.ui.view qweb Inherits web.assets_common
assets_editor Shop Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend assets_frontend ir.ui.view qweb Inherits website.assets_frontend
assets_tests Website Sale Assets Tests ir.ui.view qweb Inherits web.assets_tests
assets_wysiwyg Shop Wysiwyg Editor ir.ui.view qweb Inherits website.assets_wysiwyg
cart Shopping Cart ir.ui.view qweb New
cart_line_description_following_lines Shopping Cart Line Description Following Lines ir.ui.view qweb New
cart_line_product_link Shopping Cart Line Product Link ir.ui.view qweb New
cart_lines Shopping Cart Lines ir.ui.view qweb New
cart_popover Cart Popover ir.ui.view qweb New
cart_summary Cart right column ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
coupon_form Coupon form ir.ui.view qweb New
crm_team_salesteams_view_kanban_inherit_website_sale crm.team.kanban crm.team data Inherits sales_team.crm_team_salesteams_view_kanban
digest_digest_view_form digest.digest.view.form.inherit.website.sale.order digest.digest xpath Inherits digest.digest_digest_view_form
extra_info Checkout Extra Info ir.ui.view qweb New
extra_info_option Extra Step Option ir.ui.view qweb Inherits wizard_checkout
header Header Shop My Cart Link ir.ui.view qweb Inherits website.layout
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories
payment Payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_sale_note Accept Terms & Conditions ir.ui.view qweb Inherits payment
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product Product ir.ui.view qweb New
product_buy_now Buy Now Button ir.ui.view qweb Inherits website_sale.product
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_edit_options Edit Product Options ir.ui.view qweb Inherits website.user_navbar
product_image_view_kanban product.image.view.kanban product.image kanban New
product_picture_magnify Image Zoom ir.ui.view qweb Inherits website_sale.product
product_picture_magnify_auto Automatic Image Zoom ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_product_view_form_easy_inherit_website_sale product.product.view.form.easy.inherit.website_sale product.product sheet Inherits product.product_variant_easy_edit_view
product_product_website_tree_view product.product.website.tree product.product field Inherits product.product_product_tree_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.tree product.public.category tree New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_template_form_view product.template.product.website.form product.template xpath Inherits product.product_template_form_view
product_template_form_view_invoice_policy product.template.invoice.policy product.template xpath Inherits sale.product_template_form_view_invoice_policy
product_template_search_view_website product.template.search.published product.template xpath Inherits product.product_template_search_view
product_template_view_tree product.template.view.tree.inherit.website_sale product.template field Inherits product.product_template_tree_view
product_template_view_tree_website_sale product.template.view.tree.website_sale product.template field Inherits website_sale.product_template_view_tree
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Product Attribute's Filters ir.ui.view qweb Inherits website_sale.products
products_categories eCommerce Categories ir.ui.view qweb Inherits website_sale.products
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_item Products item ir.ui.view qweb New
products_list_view List View (by default) ir.ui.view qweb Inherits website_sale.products
recently_viewed_products_product Recently Viewed Products ir.ui.view qweb Inherits website_sale.product
recommended_products Alternative Products ir.ui.view qweb Inherits website_sale.product
reduction_code Promo Code ir.ui.view qweb Inherits website_sale.total
remove_external_snippets remove_external_snippets ir.ui.view qweb Inherits website.external_snippets
res_config_settings_view_form res.config.settings.view.form.inherit.website.sale res.config.settings div Inherits website.res_config_settings_view_form
s_products_recently_viewed Products Recently Viewed ir.ui.view qweb New
s_products_searchbar Products Search ir.ui.view qweb New
s_products_searchbar_input Products Search Input ir.ui.view qweb New
sale_order_portal_content_inherit_website_sale Orders Followup Products Links ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_view_form sale.order.form sale.order field Inherits sale.view_order_form
sale_order_view_form_cart_recovery sale.order.form.abandoned.cart sale.order xpath Inherits sale.view_order_form
sale_report_view_graph_website sale.report.view.graph.website sale.report graph New
sale_report_view_pivot_website sale.report.view.pivot.website sale.report pivot New
sale_report_view_search_website sale.report.search sale.report search New
search Search Box ir.ui.view qweb New
search_count_box Show # found ir.ui.view qweb Inherits website.website_search_box
short_cart_summary Short Cart right column ir.ui.view qweb New
snippet_options e-commerce snippet options ir.ui.view qweb Inherits website.snippet_options
snippets e-commerce snippets ir.ui.view qweb Inherits website.snippets
sort Show Sort by ir.ui.view qweb Inherits website_sale.products
suggested_products_list Alternative Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
terms Terms & Conditions ir.ui.view qweb New
total total ir.ui.view qweb New
user_navbar_inherit_website_sale user_navbar_inherit_website_sale ir.ui.view qweb Inherits website.user_navbar
view_order_tree sale.order.tree.inherit.website.sale sale.order xpath Inherits sale.view_order_tree
view_product_image_form product.image.view.form product.image form New
view_quotation_tree sale.order.tree.inherit.website.sale sale.order xpath Inherits sale.view_quotation_tree
view_sales_order_filter_ecommerce sale.order.ecommerce.search.view sale.order xpath Inherits sale.view_sales_order_filter
view_sales_order_filter_ecommerce_abondand sale.order.ecommerce.abondand.view sale.order search New
view_sales_order_filter_ecommerce_unpaid sale.order.ecommerce.search.unpaid.view sale.order xpath Inherits sale.view_sales_order_filter
website_sale.brand_promotion website_sale.brand_promotion ir.ui.view qweb Inherits website.brand_promotion
website_sale.shop_product_carousel Shop Product Carousel ir.ui.view qweb New
website_sale_onboarding_payment_acquirer_step website_sale_onboarding_payment_acquirer_step ir.ui.view qweb Inherits payment.onboarding_payment_acquirer_step
website_sale_pricelist_form_view website_sale.pricelist.form product.pricelist xpath Inherits product.product_pricelist_view
website_sale_pricelist_form_view2 website_sale.pricelist.form.2 product.pricelist xpath Inherits product.product_pricelist_view
website_sale_pricelist_tree_view product.pricelist.tree.inherit.product product.pricelist field Inherits product.product_pricelist_view_tree
website_sale_products_search_box website_sale_products_search_box ir.ui.view qweb Inherits website.website_search_box
website_sale_visitor_page_view_graph website.track.view.graph website.track graph New
website_sale_visitor_page_view_search website.track.view.search website.track xpath Inherits website.website_visitor_page_view_search
website_sale_visitor_page_view_tree website.track.view.tree website.track tree New
website_sale_visitor_track_view_graph website.track.view.graph website.track xpath Inherits website.website_visitor_track_view_graph
website_sale_visitor_track_view_tree website.track.view.tree website.track xpath Inherits website.website_visitor_track_view_tree
website_sale_visitor_view_form website.visitor.view.form website.visitor xpath Inherits website.website_visitor_view_form
website_sale_visitor_view_kanban website.visitor.view.kanban website.visitor xpath Inherits website.website_visitor_view_kanban
website_sale_visitor_view_tree website.visitor.view.tree website.visitor xpath Inherits website.website_visitor_view_tree
wizard_checkout Wizard Checkout ir.ui.view qweb New
Models touched (23)

New fields (1)
  • website_id Many2one → website
    help='Website through which this invoice was created.' readonly=True related='partner_id.website_id' store=True string='Website' tracking=True args: 'website'
Public methods (0)

No public methods.

New fields (3)
  • abandoned_carts_amount Integer
    compute='_compute_abandoned_carts' readonly=True string='Amount of Abandoned Carts'
  • abandoned_carts_count Integer
    compute='_compute_abandoned_carts' readonly=True string='Number of Abandoned Carts'
  • website_ids One2many → website
    help='Websites using this Sales Team' string='Websites' args: 'website', 'salesteam_id'
Public methods (1)
  • get_abandoned_carts(self)

New fields (2)
  • kpi_website_sale_total Boolean
    args: 'eCommerce Sales'
  • kpi_website_sale_total_value Monetary
    compute='_compute_kpi_website_sale_total_value'
Public methods (1)
  • compute_kpis_actions(self, company, user)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • send_mail(self, auto_commit=False)

New fields (8)
  • can_image_1024_be_zoomed Boolean
    compute='_compute_can_image_1024_be_zoomed' store=True args: 'Can Image 1024 be zoomed'
  • embed_code Char
    compute='_compute_embed_code'
  • image_1920 Image
    required=True
  • name Char
    required=True args: 'Name'
  • product_tmpl_id Many2one → product.template
    index=True ondelete='cascade' args: 'product.template', 'Product Template'
  • product_variant_id Many2one → product.product
    index=True ondelete='cascade' args: 'product.product', 'Product Variant'
  • sequence Integer
    default=10 index=True
  • video_url Char
    help='URL of a video for showcasing your product.' args: 'Video URL'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    We don't want the default_product_tmpl_id from the context to be applied if we have a product_variant_id set to avoid having the variant images to show also as template images. But we want it if we don't have a product_variant_id set.

New fields (3)
  • code Char
    groups='base.group_user' string='E-commerce Promotional Code'
  • selectable Boolean
    help='Allow the end user to choose this price list'
  • website_id Many2one → website
    default=_default_website ondelete='restrict' string='Website' args: 'website'
Public methods (4)
  • clear_cache(self)
  • create(self, data)
    @api.model
  • unlink(self)
  • write(self, data)

New fields (3)
  • product_variant_image_ids One2many → product.image
    string='Extra Variant Images' args: 'product.image', 'product_variant_id'
  • website_id Many2one
    readonly=False related='product_tmpl_id.website_id'
  • website_url Char
    compute='_compute_product_website_url' help='The full URL to access the document through the website.' args: 'Website URL'
Public methods (2)
  • open_website_url(self)
  • website_publish_button(self)

New fields (8)
  • child_id One2many → product.public.category
    string='Children Categories' args: 'product.public.category', 'parent_id'
  • name Char
    required=True translate=True
  • parent_id Many2one → product.public.category
    index=True string='Parent Category' args: 'product.public.category'
  • parent_path Char
    index=True
  • parents_and_self Many2many → product.public.category
    compute='_compute_parents_and_self' args: 'product.public.category'
  • product_tmpl_ids Many2many → product.template
    relation='product_public_category_product_template_rel' args: 'product.template'
  • sequence Integer
    help='Gives the sequence order when displaying a list of product categories.' index=True
  • website_description Html
    sanitize_attributes=False translate=html_translate args: 'Category Description'
Public methods (3)
  • check_parent_id(self)
    @api.constrains('parent_id')
  • name_get(self)
  • unlink(self)

New fields (2)
  • html_class Char
    string='HTML Classes'
  • name Char
    required=True string='Style Name'
Public methods (0)

No public methods.

New fields (9)
  • accessory_product_ids Many2many → product.product
    check_company=True help='Accessories show up when the customer reviews the cart before payment (cross-sell strategy).' string='Accessory Products' args: 'product.product', 'product_accessory_rel', 'src_id', 'dest_id'
  • alternative_product_ids Many2many → product.template
    check_company=True help='Suggest alternatives to your customer (upsell strategy). Those products show up on the product page.' string='Alternative Products' args: 'product.template', 'product_alternative_rel', 'src_id', 'dest_id'
  • product_template_image_ids One2many → product.image
    copy=True string='Extra Product Media' args: 'product.image', 'product_tmpl_id'
  • public_categ_ids Many2many → product.public.category
    help="The product will be available in each mentioned eCommerce category. Go to Shop > Customize and enable 'eCommerce categories' to view all eCommerce categories." relation='product_public_category_product_template_rel' string='Website Product Category' args: 'product.public.category'
  • website_description Html
    sanitize_attributes=False translate=html_translate args: 'Description for the website'
  • website_sequence Integer
    copy=False default=<expr> help='Determine the display order in the Website E-commerce' args: 'Website Sequence'
  • website_size_x Integer
    default=1 args: 'Size X'
  • website_size_y Integer
    default=1 args: 'Size Y'
  • website_style_ids Many2many → product.style
    string='Styles' args: 'product.style'
Public methods (4)
  • set_sequence_bottom(self, to_remove=[])
  • set_sequence_down(self)
  • set_sequence_top(self, to_remove=[])
  • set_sequence_up(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • website_sale_onboarding_payment_acquirer_state Selection
    default='not_done' string='State of the website sale onboarding payment acquirer step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
Public methods (1)
  • action_open_website_sale_onboarding_payment_acquirer(self)
    @api.model
    Called by onboarding panel above the quotation list.

New fields (12)
  • cart_abandoned_delay Float
    default=1.0 help='Number of hours after which the cart is considered abandoned.' readonly=False related='website_id.cart_abandoned_delay' args: 'Abandoned Delay'
  • cart_recovery_mail_template Many2one → mail.template
    default=_default_recovery_mail_template domain="[('model', '=', 'sale.order')]" readonly=False related='website_id.cart_recovery_mail_template_id' string='Cart Recovery Email' args: 'mail.template'
  • group_delivery_invoice_address Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='sale.group_delivery_invoice_address' string='Shipping Address'
  • module_account Boolean
    args: 'Invoicing'
  • module_website_sale_comparison Boolean
    args: 'Product Comparison Tool'
  • module_website_sale_delivery Boolean
    args: 'eCommerce Shipping Costs'
  • module_website_sale_digital Boolean
    args: 'Digital Content'
  • module_website_sale_stock Boolean
    help='Installs the "Website Delivery Information" application' args: 'Inventory'
  • module_website_sale_wishlist Boolean
    args: 'Wishlists'
  • sale_delivery_settings Selection
    string='Shipping Management' args: [('none', 'No shipping management on website'), ('internal', "Delivery methods are only used internally: the customer doesn't pay for shipping costs"), ('website', 'Delivery methods are selectable on the website: the customer pays for shipping costs')]
  • salesperson_id Many2one → res.users
    readonly=False related='website_id.salesperson_id' string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    readonly=False related='website_id.salesteam_id' string='Sales Team' args: 'crm.team'
Public methods (1)
  • get_values(self)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_website_sale_countries(self, mode='billing')
  • get_website_sale_states(self, mode='billing')

New fields (1)
  • last_website_so_id Many2one → sale.order
    compute='_compute_last_website_so_id' string='Last Online Sales Order' args: 'sale.order'
Public methods (0)

No public methods.

New fields (6)
  • cart_quantity Integer
    compute='_compute_cart_info' string='Cart Quantity'
  • cart_recovery_email_sent Boolean
    args: 'Cart recovery email already sent'
  • is_abandoned_cart Boolean
    compute='_compute_abandoned_cart' search='_search_abandoned_cart' args: 'Abandoned Cart'
  • only_services Boolean
    compute='_compute_cart_info' string='Only Services'
  • website_id Many2one → website
    help='Website through which this order was placed.' readonly=True string='Website' args: 'website'
  • website_order_line One2many → sale.order.line
    compute='_compute_website_order_line' help='Order Lines to be displayed on the website. They should not be used for computation purpose.' string='Order Lines displayed on Website' args: 'sale.order.line'
Public methods (2)
  • action_confirm(self)
  • action_recovery_email_send(self)

New fields (3)
  • linked_line_id Many2one → sale.order.line
    domain="[('order_id', '!=', order_id)]" ondelete='cascade' string='Linked Order Line' args: 'sale.order.line'
  • name_short Char
    compute='_compute_name_short'
  • option_line_ids One2many → sale.order.line
    string='Options Linked' args: 'sale.order.line', 'linked_line_id'
Public methods (2)
  • get_description_following_lines(self)
  • get_sale_order_line_multiline_description_sale(self, product)

New fields (1)
  • website_id Many2one → website
    readonly=True args: 'website'
Public methods (0)

No public methods.

New fields (10)
  • all_pricelist_ids One2many → product.pricelist
    help='Technical: Used to recompute pricelist_ids' string='All pricelists' args: 'product.pricelist', 'website_id'
  • cart_abandoned_delay Float
    default=1.0 args: 'Abandoned Delay'
  • cart_recovery_mail_template_id Many2one → mail.template
    default=_default_recovery_mail_template domain="[('model', '=', 'sale.order')]" string='Cart Recovery Email' args: 'mail.template'
  • currency_id Many2one → res.currency
    depends=() readonly=False related='pricelist_id.currency_id' related_sudo=False string='Default Currency' args: 'res.currency'
  • pricelist_id Many2one → product.pricelist
    compute='_compute_pricelist_id' string='Default Pricelist' args: 'product.pricelist'
  • pricelist_ids One2many → product.pricelist
    compute='_compute_pricelist_ids' string='Price list available for this Ecommerce/Website' args: 'product.pricelist'
  • salesperson_id Many2one → res.users
    string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    default=_get_default_website_team string='Sales Team' args: 'crm.team'
  • shop_ppg Integer
    default=20 string='Number of products in the grid on the shop'
  • shop_ppr Integer
    default=4 string='Number of grid columns on the shop'
Public methods (8)
  • action_dashboard_redirect(self)
    @api.model
  • get_current_pricelist(self)
    :returns: The current pricelist record
  • get_pricelist_available(self, show_visible=False)
  • is_pricelist_available(self, pl_id)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_get_order(self, force_create=False, code=None, update_pricelist=False, force_pricelist=False)
    Return the current sales order after mofications specified by params. :param bool force_create: Create sales order if not already existing :param str code: Code to force a pricelist (promo code) If empty, it's a special case to reset the pricelist with the first available else the default. :param bool update_pricelist: Force to recompute all the lines from sales order to adapt the price with the current pricelist. :param int force_pricelist: pricelist_id - if set, we change the pricelist with this one :returns: browse record for the current sales order
  • sale_get_payment_term(self, partner)
    @api.model
  • sale_product_domain(self)
  • sale_reset(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • product_id Many2one → product.product
    index=True ondelete='cascade' readonly=True args: 'product.product'
Public methods (0)

No public methods.

New fields (3)
  • product_count Integer
    compute='_compute_product_statistics' help='Total number of product viewed' args: 'Products Views'
  • product_ids Many2many → product.product
    compute='_compute_product_statistics' string='Visited Products' args: 'product.product'
  • visitor_product_count Integer
    compute='_compute_product_statistics' help='Total number of views on products' args: 'Product Views'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/website_sale
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Lucas Perais (lpe), Yannick Tivisse, Alexandre Kühn, qsm-odoo, Nicolas Seinlet, Pierre Masereel, Romain Derie, Laurent Smet, Toufik Benjaa, tbe-odoo, Adrien Dieudonne, RomainLibert, Christophe Monniez, Nans Lefebvre, Johan Demaret Rivarola, Alexandre Kühn, Toufik Ben Jaa, Adrian Torres, XavierDo, Rémi Rahir, Aurélien Warnon, Xavier-Do, jvm-odoo, Andrea Grazioso (agr-odoo), Loan (lse), Sébastien Theys, Nasreddin (bon), Florent de Labarre, Luis González, sbbaro, Kinjal Mehta, Quentin Smetz (qsm), Adrien Widart, Nasreddin Boulif (bon), sed-odoo, Benjamin Vray, Emmie He, Tomas Alvarez, Kishan Gajjar
WEBSITE
WEBSITEhttps://www.odoo.com/page/e-commerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - web_editor
    - http_routing
    - portal
    - mail
    - base_setup
    - bus
    - web_tour
    - social_media
    - sale
    - sales_team
    - payment
    - account
    - product
    - decimal_precision
    - uom
    - analytic
    - digest
    - website_payment
    - website_mail
    - website_form
    - website_rating
    - rating
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (82)
XML IDNameModelTypeStatus
404 404 ir.ui.view qweb New
account_invoice_view_form account.invoice.form account.invoice field Inherits account.invoice_form
address Address Management ir.ui.view qweb New
address_b2b Show b2b fields ir.ui.view qweb Inherits address
address_kanban Kanban address ir.ui.view qweb New
assets_backend assets_backend ir.ui.view qweb Inherits web.assets_backend
assets_common tour ir.ui.view qweb Inherits web.assets_common
assets_editor Shop Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend assets_frontend ir.ui.view qweb Inherits website.assets_frontend
cart Shopping Cart ir.ui.view qweb New
cart_line_description_following_lines Shopping Cart Line Description Following Lines ir.ui.view qweb New
cart_line_product_link Shopping Cart Line Product Link ir.ui.view qweb New
cart_lines Shopping Cart Lines ir.ui.view qweb New
cart_popover Cart Popover ir.ui.view qweb New
cart_summary Cart right column ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
coupon_form Coupon form ir.ui.view qweb New
crm_team_salesteams_view_kanban_inherit_website_sale crm.team.kanban crm.team data Inherits sales_team.crm_team_salesteams_view_kanban
digest_digest_view_form digest.digest.view.form.inherit.website.sale.order digest.digest xpath Inherits digest.digest_digest_view_form
extra_info Checkout Extra Info ir.ui.view qweb New
extra_info_option Extra Step Option ir.ui.view qweb Inherits wizard_checkout
header Header Shop My Cart Link ir.ui.view qweb Inherits website.layout
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories
payment Payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_sale_note Accept Terms & Conditions ir.ui.view qweb Inherits payment
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product Product ir.ui.view qweb New
product_attributes Product attributes ir.ui.view qweb Inherits website_sale.product
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_edit_options Edit Product Options ir.ui.view qweb Inherits website.user_navbar
product_picture_magnify Image Zoom ir.ui.view qweb Inherits website_sale.product
product_picture_magnify_auto Automatic Image Zoom ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_pricelist_view product.pricelist.website.form product.pricelist field Inherits product.product_pricelist_view
product_product_website_tree_view product.product.website.tree product.product field Inherits product.product_product_tree_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.tree product.public.category tree New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_template_form_view product.template.product.website.form product.template xpath Inherits product.product_template_form_view
product_template_form_view_invoice_policy product.template.invoice.policy product.template xpath Inherits sale.product_template_form_view_invoice_policy
product_template_search_view_website product.template.search.published product.template xpath Inherits product.product_template_search_view
product_template_website_tree_view product.template.website.tree product.template field Inherits product.product_template_tree_view
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Product Attribute's Filters ir.ui.view qweb Inherits website_sale.products
products_categories eCommerce Categories ir.ui.view qweb Inherits website_sale.products
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_item Products item ir.ui.view qweb New
products_list_view List View ir.ui.view qweb Inherits website_sale.products
recommended_products Alternative Products ir.ui.view qweb Inherits website_sale.product
reduction_code Promo Code ir.ui.view qweb Inherits website_sale.total
res_config_settings_view_form res.config.settings.view.form.inherit.website.sale res.config.settings div Inherits website.res_config_settings_view_form
sale_order_portal_content_inherit_website_sale Orders Followup Products Links ir.ui.view qweb Inherits sale.sale_order_portal_content
sale_order_view_form sale.order.form sale.order field Inherits sale.view_order_form
sale_order_view_form_cart_recovery sale.order.form.abandoned.cart sale.order xpath Inherits sale.view_order_form
sale_report_view_graph_website sale.report.view.graph.website sale.report graph New
sale_report_view_pivot_website sale.report.view.pivot.website sale.report pivot New
sale_report_view_search_website sale.report.search sale.report search New
search Search Box ir.ui.view qweb New
search count Show # found ir.ui.view qweb Inherits website.website_search_box
short_cart_summary Short Cart right column ir.ui.view qweb New
sort Show Sort by ir.ui.view qweb Inherits website_sale.products
suggested_products_list Alternative Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
terms Terms & Conditions ir.ui.view qweb New
total total ir.ui.view qweb New
user_navbar_inherit_website_sale user_navbar_inherit_website_sale ir.ui.view qweb Inherits website.user_navbar
view_product_image_form product.image.form product.image form New
view_sales_order_filter_ecommerce sale.order.ecommerce.search.view sale.order xpath Inherits sale.view_sales_order_filter
view_sales_order_filter_ecommerce_abondand sale.order.ecommerce.abondand.view sale.order search New
view_sales_order_filter_ecommerce_unpaid sale.order.ecommerce.search.unpaid.view sale.order xpath Inherits sale.view_sales_order_filter
website_sale Snippet Ecommerce ir.ui.view qweb Inherits website.snippets
website_sale.brand_promotion website_sale.brand_promotion ir.ui.view qweb Inherits website.brand_promotion
website_sale.shop_product_carousel Shop Product Carousel ir.ui.view qweb New
website_sale_onboarding_payment_acquirer_step website_sale_onboarding_payment_acquirer_step ir.ui.view qweb Inherits payment.onboarding_payment_acquirer_step
website_sale_pricelist_form_view website_sale.pricelist.form product.pricelist field Inherits product.product_pricelist_view
website_sale_pricelist_tree_view product.pricelist.tree.inherit.product product.pricelist field Inherits product.product_pricelist_view_tree
wizard_checkout Wizard Checkout ir.ui.view qweb New
Models touched (20)

New fields (1)
  • website_id Many2one → website
    help='Website through which this invoice was created.' readonly=True related='partner_id.website_id' store=True string='Website' args: 'website'
Public methods (1)
  • get_base_url(self)
    @api.multi
    When using multi-website, we want the user to be redirected to the most appropriate website if possible.

New fields (3)
  • abandoned_carts_amount Integer
    compute='_compute_abandoned_carts' readonly=True string='Amount of Abandoned Carts'
  • abandoned_carts_count Integer
    compute='_compute_abandoned_carts' readonly=True string='Number of Abandoned Carts'
  • website_ids One2many → website
    help='Websites using this Sales Team' string='Websites' args: 'website', 'salesteam_id'
Public methods (1)
  • get_abandoned_carts(self)

New fields (2)
  • kpi_website_sale_total Boolean
    args: 'eCommerce Sales'
  • kpi_website_sale_total_value Monetary
    compute='_compute_kpi_website_sale_total_value'
Public methods (1)
  • compute_kpis_actions(self, company, user)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • send_mail(self, auto_commit=False)
    @api.multi

New fields (3)
  • image Binary
    attachment=True args: 'Image'
  • name Char
    args: 'Name'
  • product_tmpl_id Many2one → product.template
    copy=True args: 'product.template', 'Related Product'
Public methods (0)

No public methods.

New fields (3)
  • code Char
    groups='base.group_user' string='E-commerce Promotional Code'
  • selectable Boolean
    help='Allow the end user to choose this price list'
  • website_id Many2one → website
    default=_default_website ondelete='restrict' string='Website' args: 'website'
Public methods (4)
  • clear_cache(self)
  • create(self, data)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, data)
    @api.multi

New fields (4)
  • website_id Many2one
    readonly=False related='product_tmpl_id.website_id'
  • website_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website price'
  • website_price_difference Boolean
    compute='_website_price' args: 'Website price difference'
  • website_public_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website public price'
Public methods (1)
  • website_publish_button(self)
    @api.multi

New fields (7)
  • child_id One2many → product.public.category
    string='Children Categories' args: 'product.public.category', 'parent_id'
  • image Binary
    attachment=True help='This field holds the image used as image for the category, limited to 1024x1024px.'
  • image_medium Binary
    attachment=True help='Medium-sized image of the category. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' string='Medium-sized image'
  • image_small Binary
    attachment=True help='Small-sized image of the category. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' string='Small-sized image'
  • name Char
    required=True translate=True
  • parent_id Many2one → product.public.category
    index=True string='Parent Category' args: 'product.public.category'
  • sequence Integer
    help='Gives the sequence order when displaying a list of product categories.'
Public methods (4)
  • check_parent_id(self)
    @api.constrains('parent_id')
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • html_class Char
    string='HTML Classes'
  • name Char
    required=True string='Style Name'
Public methods (0)

No public methods.

New fields (12)
  • accessory_product_ids Many2many → product.product
    help='Accessories show up when the customerreviews the cart before payment (cross-sell strategy).' string='Accessory Products' args: 'product.product', 'product_accessory_rel', 'src_id', 'dest_id'
  • alternative_product_ids Many2many → product.template
    help='Suggest alternatives to your customer(upsell strategy).Those product show up on the product page.' string='Alternative Products' args: 'product.template', 'product_alternative_rel', 'src_id', 'dest_id'
  • product_image_ids One2many → product.image
    string='Images' args: 'product.image', 'product_tmpl_id'
  • public_categ_ids Many2many → product.public.category
    help="The product will be available in each mentioned e-commerce category. Go toShop > Customize and enable 'E-commerce categories' to view all e-commerce categories." string='Website Product Category' args: 'product.public.category'
  • website_description Html
    sanitize_attributes=False translate=html_translate args: 'Description for the website'
  • website_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website price'
  • website_price_difference Boolean
    compute='_website_price' args: 'Website price difference'
  • website_public_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website public price'
  • website_sequence Integer
    copy=False default=<expr> help='Determine the display order in the Website E-commerce' args: 'Website Sequence'
  • website_size_x Integer
    default=1 args: 'Size X'
  • website_size_y Integer
    default=1 args: 'Size Y'
  • website_style_ids Many2many → product.style
    string='Styles' args: 'product.style'
Public methods (4)
  • set_sequence_bottom(self)
  • set_sequence_down(self)
  • set_sequence_top(self)
  • set_sequence_up(self)

New fields (1)
  • website_sale_onboarding_payment_acquirer_state Selection
    default='not_done' string='State of the website sale onboarding payment acquirer step' args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
Public methods (1)
  • action_open_website_sale_onboarding_payment_acquirer(self)
    @api.model
    Called by onboarding panel above the quotation list.

New fields (12)
  • cart_abandoned_delay Float
    default=1.0 help='Number of hours after which the cart is considered abandoned.' readonly=False related='website_id.cart_abandoned_delay' args: 'Abandoned Delay'
  • cart_recovery_mail_template Many2one → mail.template
    default=_default_recovery_mail_template domain="[('model', '=', 'sale.order')]" readonly=False related='website_id.cart_recovery_mail_template_id' string='Cart Recovery Email' args: 'mail.template'
  • group_delivery_invoice_address Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='sale.group_delivery_invoice_address' string='Shipping Address'
  • module_account Boolean
    args: 'Invoicing'
  • module_website_sale_comparison Boolean
    args: 'Product Comparison Tool'
  • module_website_sale_delivery Boolean
    args: 'eCommerce Shipping Costs'
  • module_website_sale_digital Boolean
    args: 'Digital Content'
  • module_website_sale_stock Boolean
    help='Installs the "Website Delivery Information" application' args: 'Inventory'
  • module_website_sale_wishlist Boolean
    args: 'Wishlists'
  • sale_delivery_settings Selection
    string='Shipping Management' args: [('none', 'No shipping management on website'), ('internal', "Delivery methods are only used internally: the customer doesn't pay for shipping costs"), ('website', 'Delivery methods are selectable on the website: the customer pays for shipping costs')]
  • salesperson_id Many2one → res.users
    readonly=False related='website_id.salesperson_id' string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    domain=[('team_type', '!=', 'pos')] readonly=False related='website_id.salesteam_id' string='Sales Team' args: 'crm.team'
Public methods (1)
  • get_values(self)
    @api.model

New fields (0)

No new fields.

Public methods (2)
  • get_website_sale_countries(self, mode='billing')
  • get_website_sale_states(self, mode='billing')

New fields (1)
  • last_website_so_id Many2one → sale.order
    compute='_compute_last_website_so_id' string='Last Online Sales Order' args: 'sale.order'
Public methods (0)

No public methods.

New fields (6)
  • cart_quantity Integer
    compute='_compute_cart_info' string='Cart Quantity'
  • cart_recovery_email_sent Boolean
    args: 'Cart recovery email already sent'
  • is_abandoned_cart Boolean
    compute='_compute_abandoned_cart' search='_search_abandoned_cart' args: 'Abandoned Cart'
  • only_services Boolean
    compute='_compute_cart_info' string='Only Services'
  • website_id Many2one → website
    help='Website through which this order was placed.' readonly=True string='Website' args: 'website'
  • website_order_line One2many → sale.order.line
    compute='_compute_website_order_line' help='Order Lines to be displayed on the website. They should not be used for computation purpose.' string='Order Lines displayed on Website' args: 'sale.order.line'
Public methods (2)
  • action_recovery_email_send(self)
    @api.multi
  • get_base_url(self)
    @api.multi
    When using multi-website, we want the user to be redirected to the most appropriate website if possible.

New fields (3)
  • linked_line_id Many2one → sale.order.line
    domain="[('order_id', '!=', order_id)]" ondelete='cascade' string='Linked Order Line' args: 'sale.order.line'
  • name_short Char
    compute='_compute_name_short'
  • option_line_ids One2many → sale.order.line
    string='Options Linked' args: 'sale.order.line', 'linked_line_id'
Public methods (1)
  • get_description_following_lines(self)

New fields (1)
  • website_id Many2one → website
    readonly=True args: 'website'
Public methods (0)

No public methods.

New fields (7)
  • cart_abandoned_delay Float
    default=1.0 args: 'Abandoned Delay'
  • cart_recovery_mail_template_id Many2one → mail.template
    default=_default_recovery_mail_template domain="[('model', '=', 'sale.order')]" string='Cart Recovery Email' args: 'mail.template'
  • currency_id Many2one → res.currency
    readonly=False related='pricelist_id.currency_id' related_sudo=False string='Default Currency' args: 'res.currency'
  • pricelist_id Many2one → product.pricelist
    compute='_compute_pricelist_id' string='Default Pricelist' args: 'product.pricelist'
  • pricelist_ids One2many → product.pricelist
    compute='_compute_pricelist_ids' string='Price list available for this Ecommerce/Website' args: 'product.pricelist'
  • salesperson_id Many2one → res.users
    string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    string='Sales Team' args: 'crm.team'
Public methods (8)
  • action_dashboard_redirect(self)
    @api.model
  • get_current_pricelist(self)
    :returns: The current pricelist record
  • get_pricelist_available(self, show_visible=False)
  • is_pricelist_available(self, pl_id)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_get_order(self, force_create=False, code=None, update_pricelist=False, force_pricelist=False)
    @api.multi
    Return the current sales order after mofications specified by params. :param bool force_create: Create sales order if not already existing :param str code: Code to force a pricelist (promo code) If empty, it's a special case to reset the pricelist with the first available else the default. :param bool update_pricelist: Force to recompute all the lines from sales order to adapt the price with the current pricelist. :param int force_pricelist: pricelist_id - if set, we change the pricelist with this one :returns: browse record for the current sales order
  • sale_get_payment_term(self, partner)
    @api.model
  • sale_product_domain(self)
    @api.multi
  • sale_reset(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/website_sale
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Yannick Tivisse, qsm-odoo, Martin Geubelle, Odoo Online, Romain Derie, Laurent Smet, Denis Vermylen (dve), DVE, tbe-odoo, RomainLibert, rde, len-odoo, Jorge Pinna Puissant, Jairo Llopis, Denis Vermylen, fda-odoo, Julien Castiaux, Andreas Perhab, rar-odoo, Loan (lse)
WEBSITE
WEBSITEhttps://www.odoo.com/page/e-commerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - web_editor
    - web_planner
    - http_routing
    - portal
    - mail
    - base_setup
    - bus
    - web_tour
    - sale_payment
    - payment
    - account
    - product
    - decimal_precision
    - analytic
    - sale
    - sales_team
    - website_payment
    - website_mail
    - website_form
    - website_rating
    - rating
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (78)
XML IDNameModelTypeStatus
404 404 ir.ui.view qweb New
address Address Management ir.ui.view qweb New
address_kanban Kanban address ir.ui.view qweb New
assets_backend assets_backend ir.ui.view qweb Inherits web.assets_backend
assets_common tour ir.ui.view qweb Inherits web.assets_common
assets_editor Shop Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend Shop ir.ui.view qweb Inherits website.assets_frontend
attribute_tree_view product.attribute.tree.type product.attribute field Inherits product.attribute_tree_view
cart Shopping Cart ir.ui.view qweb New
cart_lines Shopping Cart Lines ir.ui.view qweb New
cart_popover Cart Popover ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
content_new_product content_new_product ir.ui.view qweb Inherits website.user_navbar
continue_shopping Continue Shopping Button ir.ui.view qweb Inherits website_sale.cart
coupon_form Coupon form ir.ui.view qweb New
crm_team_salesteams_view_kanban_inherit_website_sale crm.team.kanban crm.team data Inherits sales_team.crm_team_salesteams_view_kanban
extra_info Checkout Extra Info ir.ui.view qweb New
extra_info_option Extra Step Option ir.ui.view qweb Inherits wizard_checkout
header Header Shop My Cart Link ir.ui.view qweb Inherits website.layout
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories
payment Payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_sale_note Accept Terms & Conditions ir.ui.view qweb Inherits payment
payment_transaction_view_form_inherit_website_sale payment.transaction.view.form.inherit.website_sale payment.transaction xpath Inherits payment.transaction_form
portal_order_page_products_links Orders Followup Products Links ir.ui.view qweb Inherits sale.portal_order_page
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product Product ir.ui.view qweb New
product_attribute_line_form product.attribute.line.form.inherit product.attribute.line xpath Inherits product.product_attribute_line_form
product_attribute_value_view_tree_inherit_website_sale product.attribute.value.view.tree.inherit.website.sale product.attribute.value field Inherits product.product_attribute_value_view_tree
product_attribute_view_form product.attribute.form.inherit product.attribute xpath Inherits product.product_attribute_view_form
product_attributes Product attributes ir.ui.view qweb Inherits website_sale.product
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_edit_options Edit Product Options ir.ui.view qweb Inherits website.user_navbar
product_picture_magnify Activate Magnify ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_pricelist_view product.pricelist.website.form product.pricelist field Inherits product.product_pricelist_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.tree product.public.category tree New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_template_form_view product.template.product.website.form product.template group Inherits product.product_template_form_view
product_template_search_view_website product.template.search.published product.template xpath Inherits product.product_template_search_view
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Product Attribute's Filters ir.ui.view qweb Inherits website_sale.products
products_categories eCommerce Categories ir.ui.view qweb Inherits website_sale.products
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_item Products item ir.ui.view qweb New
products_list_view List View ir.ui.view qweb Inherits website_sale.products
recommended_products Alternative Products ir.ui.view qweb Inherits website_sale.product
reduction_code Promo Code ir.ui.view qweb Inherits website_sale.total
report_shop_saleorder_document report_shop_saleorder_document ir.ui.view qweb Inherits sale.report_saleorder_document
res_config_settings_view_form res.config.settings.view.form.inherit.website.sale res.config.settings div Inherits website.res_config_settings_view_form
sale_order_view_form sale.order.form sale.order field Inherits sale.view_order_form
sale_order_view_form_cart_recovery sale.order.form.abandoned.cart sale.order xpath Inherits sale.view_order_form
sale_report_view_graph_website sale.report.view.graph.website sale.report graph New
sale_report_view_pivot_website sale.report.view.pivot.website sale.report pivot New
sale_report_view_search_website sale.report.search sale.report search New
search Search Box ir.ui.view qweb New
search count Show # found ir.ui.view qweb Inherits website.website_search_box
sort Show Sort by ir.ui.view qweb Inherits website_sale.products
suggested_products_list Alternative Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
terms Terms & Conditions ir.ui.view qweb New
total total ir.ui.view qweb New
variants variants ir.ui.view qweb New
variants_tree_view variants.template.tree product.attribute.value field Inherits product.variants_tree_view
view_product_image_form product.image.form product.image form New
view_sales_order_filter_ecommerce sale.order.ecommerce.search.view sale.order search Inherits sale.view_sales_order_filter
website.layout_footer_copyright Footer Copyright ir.ui.view qweb Inherits website.layout
website_planner website sale planner ir.ui.view qweb Inherits website.website_planner
website_sale Snippet Ecommerce ir.ui.view qweb Inherits website.snippets
website_sale.bill_to Bill to ir.ui.view qweb New
website_sale_pricelist_form_view website_sale.pricelist.form product.pricelist field Inherits product.product_pricelist_view
website_sale_pricelist_tree_view product.pricelist.tree.inherit.product product.pricelist field Inherits product.product_pricelist_view_tree
wizard_checkout Wizard Checkout ir.ui.view qweb New
Models touched (18)

New fields (3)
  • abandoned_carts_amount Integer
    compute='_compute_abandoned_carts' readonly=True string='Amount of Abandoned Carts'
  • abandoned_carts_count Integer
    compute='_compute_abandoned_carts' readonly=True string='Number of Abandoned Carts'
  • website_ids One2many → website
    help='Websites using this sales channel' string='Websites' args: 'website', 'salesteam_id'
Public methods (1)
  • get_abandoned_carts(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

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

New fields (0)

No new fields.

Public methods (1)
  • send_mail(self, auto_commit=False)
    @api.multi

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • type Selection
    default='radio' args: [('radio', 'Radio'), ('select', 'Select'), ('color', 'Color')]
Public methods (0)

No public methods.

New fields (1)
  • html_color Char
    help="Here you can set a specific HTML color index (e.g. #ff0000) to display the color on the website if the attibute type is 'Color'." oldname='color' string='HTML Color Index'
Public methods (0)

No public methods.

New fields (3)
  • image Binary
    attachment=True args: 'Image'
  • name Char
    args: 'Name'
  • product_tmpl_id Many2one → product.template
    copy=True args: 'product.template', 'Related Product'
Public methods (0)

No public methods.

New fields (3)
  • code Char
    groups='base.group_user' string='E-commerce Promotional Code'
  • selectable Boolean
    help='Allow the end user to choose this price list'
  • website_id Many2one → website
    default=_default_website string='website' args: 'website'
Public methods (4)
  • clear_cache(self)
  • create(self, data)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, data)
    @api.multi

New fields (3)
  • website_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website price'
  • website_price_difference Boolean
    compute='_website_price' args: 'Website price difference'
  • website_public_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website public price'
Public methods (1)
  • website_publish_button(self)
    @api.multi

New fields (7)
  • child_id One2many → product.public.category
    string='Children Categories' args: 'product.public.category', 'parent_id'
  • image Binary
    attachment=True help='This field holds the image used as image for the category, limited to 1024x1024px.'
  • image_medium Binary
    attachment=True help='Medium-sized image of the category. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' string='Medium-sized image'
  • image_small Binary
    attachment=True help='Small-sized image of the category. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' string='Small-sized image'
  • name Char
    required=True translate=True
  • parent_id Many2one → product.public.category
    index=True string='Parent Category' args: 'product.public.category'
  • sequence Integer
    help='Gives the sequence order when displaying a list of product categories.'
Public methods (4)
  • check_parent_id(self)
    @api.constrains('parent_id')
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • html_class Char
    string='HTML Classes'
  • name Char
    required=True string='Style Name'
Public methods (0)

No public methods.

New fields (12)
  • accessory_product_ids Many2many → product.product
    help='Accessories show up when the customer reviews the cart before paying (cross-sell strategy, e.g. for computers: mouse, keyboard, etc.). An algorithm figures out a list of accessories based on all the products added to cart.' string='Accessory Products' args: 'product.product', 'product_accessory_rel', 'src_id', 'dest_id'
  • alternative_product_ids Many2many → product.template
    help='Suggest more expensive alternatives to your customers (upsell strategy). Those products show up on the product page.' string='Alternative Products' args: 'product.template', 'product_alternative_rel', 'src_id', 'dest_id'
  • product_image_ids One2many → product.image
    string='Images' args: 'product.image', 'product_tmpl_id'
  • public_categ_ids Many2many → product.public.category
    help='Categories can be published on the Shop page (online catalog grid) to help customers find all the items within a category. To publish them, go to the Shop page, hit Customize and turn *Product Categories* on. A product can belong to several categories.' string='Website Product Category' args: 'product.public.category'
  • website_description Html
    sanitize_attributes=False translate=html_translate args: 'Description for the website'
  • website_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website price'
  • website_price_difference Boolean
    compute='_website_price' args: 'Website price difference'
  • website_public_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website public price'
  • website_sequence Integer
    default=<expr> help='Determine the display order in the Website E-commerce' args: 'Website Sequence'
  • website_size_x Integer
    default=1 args: 'Size X'
  • website_size_y Integer
    default=1 args: 'Size Y'
  • website_style_ids Many2many → product.style
    string='Styles' args: 'product.style'
Public methods (4)
  • set_sequence_bottom(self)
  • set_sequence_down(self)
  • set_sequence_top(self)
  • set_sequence_up(self)

New fields (17)
  • automatic_invoice Boolean
    help='The invoice is generated automatically and available in the customer portal when the transaction is confirmed by the payment acquirer.\nThe invoice is marked as paid and the payment is registered in the payment journal defined in the configuration of the payment acquirer.\nThis mode is advised if you issue the final invoice at the order and not after the delivery.' args: 'Automatic Invoice'
  • cart_abandoned_delay Float
    default=1.0 help='number of hours after which the cart is considered abandoned' args: 'Abandoned Delay'
  • cart_recovery_mail_template Many2one → mail.template
    default=_default_recovery_mail_template domain="[('model', '=', 'sale.order')]" string='Cart Recovery Email' args: 'mail.template'
  • group_delivery_invoice_address Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='sale.group_delivery_invoice_address' string='Shipping Address'
  • group_website_multiimage Boolean
    group='base.group_portal,base.group_user,base.group_public' implied_group='website_sale.group_website_multi_image' string='Multi-Images'
  • module_account_invoicing Boolean
    args: 'Invoicing'
  • module_l10n_eu_service Boolean
    string='EU Digital Goods VAT'
  • module_website_sale_comparison Boolean
    args: 'Product Comparison Tool'
  • module_website_sale_delivery Boolean
    args: 'Shipping Costs'
  • module_website_sale_digital Boolean
    args: 'Digital Content'
  • module_website_sale_options Boolean
    args: 'Optional Products'
  • module_website_sale_stock Boolean
    help='Installs *e-Commerce Inventory*' args: 'Inventory'
  • module_website_sale_wishlist Boolean
    args: 'Wishlists'
  • order_mail_template Many2one → mail.template
    default=_default_order_mail_template domain="[('model', '=', 'sale.order')]" help='Email sent to customer at the end of the checkout process' readonly=True string='Order Confirmation Email' args: 'mail.template'
  • sale_delivery_settings Selection
    string='Shipping Management' args: [('none', 'No shipping management on website'), ('internal', "Delivery methods are only used internally: the customer doesn't pay for shipping costs"), ('website', 'Delivery methods are selectable on the website: the customer pays for shipping costs')]
  • salesperson_id Many2one → res.users
    related='website_id.salesperson_id' string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    domain=[('team_type', '!=', 'pos')] related='website_id.salesteam_id' string='Sales Channel' args: 'crm.team'
Public methods (2)
  • get_values(self)
    @api.model
  • set_values(self)

New fields (0)

No new fields.

Public methods (2)
  • get_website_sale_countries(self, mode='billing')
  • get_website_sale_states(self, mode='billing')

New fields (1)
  • last_website_so_id Many2one → sale.order
    copy=False string='Last Online Sales Order' args: 'sale.order'
Public methods (0)

No public methods.

New fields (6)
  • can_directly_mark_as_paid Boolean
    compute='_compute_can_directly_mark_as_paid' help='Checked if the sales order can directly be marked as paid, i.e. if the quotation\n is sent or confirmed and if the payment acquire is of the type transfer or manual' store=True string='Can be directly marked as paid'
  • cart_quantity Integer
    compute='_compute_cart_info' string='Cart Quantity'
  • cart_recovery_email_sent Boolean
    args: 'Cart recovery email already sent'
  • is_abandoned_cart Boolean
    compute='_compute_abandoned_cart' search='_search_abandoned_cart' args: 'Abandoned Cart'
  • only_services Boolean
    compute='_compute_cart_info' string='Only Services'
  • website_order_line One2many → sale.order.line
    compute='_compute_website_order_line' help='Order Lines to be displayed on the website. They should not be used for computation purpose.' string='Order Lines displayed on Website' args: 'sale.order.line'
Public methods (2)
  • action_mark_as_paid(self)
    Mark directly a sales order as paid if: - State: Quotation Sent, or sales order - Provider: wire transfer or manual config The transaction is marked as done The invoice may be generated and marked as paid if configured in the website settings
  • action_recovery_email_send(self)
    @api.multi

New fields (5)
  • currency_id Many2one → res.currency
    related='pricelist_id.currency_id' related_sudo=False string='Default Currency' args: 'res.currency'
  • pricelist_id Many2one → product.pricelist
    compute='_compute_pricelist_id' string='Default Pricelist' args: 'product.pricelist'
  • pricelist_ids One2many → product.pricelist
    compute='_compute_pricelist_ids' string='Price list available for this Ecommerce/Website' args: 'product.pricelist'
  • salesperson_id Many2one → res.users
    string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    string='Sales Channel' args: 'crm.team'
Public methods (9)
  • action_dashboard_redirect(self)
    @api.model
  • get_current_pricelist(self)
    :returns: The current pricelist record
  • get_pricelist_available(self, show_visible=False)
    Return the list of pricelists that can be used on website for the current user. Country restrictions will be detected with GeoIP (if installed). :param bool show_visible: if True, we don't display pricelist where selectable is False (Eg: Code promo) :returns: pricelist recordset
  • is_pricelist_available(self, pl_id)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_get_order(self, force_create=False, code=None, update_pricelist=False, force_pricelist=False)
    @api.multi
    Return the current sales order after mofications specified by params. :param bool force_create: Create sales order if not already existing :param str code: Code to force a pricelist (promo code) If empty, it's a special case to reset the pricelist with the first available else the default. :param bool update_pricelist: Force to recompute all the lines from sales order to adapt the price with the current pricelist. :param int force_pricelist: pricelist_id - if set, we change the pricelist with this one :returns: browse record for the current sales order
  • sale_get_payment_term(self, partner)
    @api.model
  • sale_get_transaction(self)
  • sale_product_domain(self)
    @api.multi
  • sale_reset(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/website_sale
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Joren Van Onder, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Julien Legros, Richard Mathot, qdp-odoo, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, Lucas Perais (lpe), Damien Bouvy, Yannick Tivisse, qsm-odoo, Martin Geubelle, Romain Derie, Denis Vermylen (dve), Tanguy Charlier, fwi-odoo, Gert Pellin, Adrian Torres, Rémi Rahir
WEBSITE
WEBSITEhttps://www.odoo.com/page/e-commerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - web_editor
    - web_planner
    - sale
    - sales_team
    - mail
    - base_setup
    - web_kanban
    - bus
    - web_tour
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - procurement
    - payment
    - website_payment
    - website_portal
    - website_portal_sale
    - portal_sale
    - portal
    - auth_signup
    - website_mail
    - website_form
    - rating
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Odoo E-Commerce
==================

        

Code Analysis

Views touched (74)
XML IDNameModelTypeStatus
404 404 ir.ui.view qweb New
address Address Management ir.ui.view qweb New
address_kanban Kanban address ir.ui.view qweb New
assets_backend assets_backend ir.ui.view qweb Inherits web.assets_backend
assets_editor Shop Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend Shop ir.ui.view qweb Inherits website.assets_frontend
attribute_tree_view product.attribute.tree.type product.attribute field Inherits product.attribute_tree_view
cart Shopping Cart ir.ui.view qweb New
cart_lines Shopping Cart Lines ir.ui.view qweb New
cart_popover Cart Popover ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
content_new_product content_new_product ir.ui.view qweb Inherits website.user_navbar
continue_shopping Continue Shopping Button ir.ui.view qweb Inherits website_sale.cart
extra_info Checkout Extra Info ir.ui.view qweb New
extra_info_option Extra Step Option ir.ui.view qweb Inherits wizard_checkout
header Header Shop My Cart Link ir.ui.view qweb Inherits website.layout
message_thread_rating Chatter with rating ir.ui.view qweb Inherits website_mail.message_thread
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories
order_state_message Order State Message ir.ui.view qweb New
orders_followup_products_links Orders Followup Products Links ir.ui.view qweb Inherits website_portal_sale.orders_followup
payment Payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_sale_note Accept Terms & Conditions ir.ui.view qweb Inherits payment
payment_token_form payment_token_form ir.ui.view qweb New
payment_token_form_confirm payment_token_form_confirm ir.ui.view qweb New
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product Product ir.ui.view qweb New
product_attribute_line_form product.attribute.line.form.inherit product.attribute.line xpath Inherits product.product_attribute_line_form
product_attribute_value_view_tree_inherit_website_sale product.attribute.value.view.tree.inherit.website.sale product.attribute.value field Inherits product.product_attribute_value_view_tree
product_attribute_view_form product.attribute.form.inherit product.attribute xpath Inherits product.product_attribute_view_form
product_attributes Product attributes ir.ui.view qweb Inherits website_sale.product
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_picture_magnify Activate Magnify ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_pricelist_view product.pricelist.website.form product.pricelist field Inherits product.product_pricelist_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.tree product.public.category tree New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_template_form_view product.template.product.website.form product.template group Inherits product.product_template_form_view
product_template_search_view_website product.template.search.published product.template xpath Inherits product.product_template_search_view
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Product Attribute's Filters ir.ui.view qweb Inherits website_sale.products
products_categories Product Categories ir.ui.view qweb Inherits website_sale.products
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_item Products item ir.ui.view qweb New
products_list_view List View ir.ui.view qweb Inherits website_sale.products
recommended_products Alternative Products ir.ui.view qweb Inherits website_sale.product
reduction_code Coupon Code ir.ui.view qweb Inherits website_sale.cart
report_shop_saleorder_document report_shop_saleorder_document ir.ui.view qweb Inherits sale.report_saleorder_document
search Search Box ir.ui.view qweb New
search count Show # found ir.ui.view qweb Inherits website.website_search_box
sort Show Sort by ir.ui.view qweb Inherits website_sale.products
suggested_products_list Alternative Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
terms Terms & Conditions ir.ui.view qweb New
total total ir.ui.view qweb New
transaction_form_website_sale payment.transaction.form.website_sale payment.transaction xpath Inherits payment.transaction_form
variants variants ir.ui.view qweb New
variants_tree_view variants.template.tree product.attribute.value field Inherits product.variants_tree_view
view_order_form_acquirer sale.order.form.acquirer sale.order xpath Inherits sale.view_order_form
view_product_image_form product.image.form product.image form New
view_sales_order_filter_ecommerce sale.order.ecommerce.search.view sale.order search Inherits sale.view_sales_order_filter
website.layout_footer_copyright Footer Copyright ir.ui.view qweb Inherits website.layout
website_config_settings_view_form website.config.settings.form.inherit website.config.settings group Inherits website.view_website_config_settings
website_planner website sale planner ir.ui.view qweb Inherits website.website_planner
website_sale Snippet Ecommerce ir.ui.view qweb Inherits website.snippets
website_sale.bill_to Bill to ir.ui.view qweb New
website_sale_pricelist_form_view website_sale.pricelist.form product.pricelist field Inherits product.product_pricelist_view
website_sale_pricelist_tree_view product.pricelist.tree.inherit.product product.pricelist field Inherits product.product_pricelist_view_tree
wizard_checkout Wizard Checkout ir.ui.view qweb New
Models touched (17)

New fields (1)
  • website_ids One2many → website
    help='Websites using this sales team' string='Websites' args: 'website', 'salesteam_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

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

New fields (1)
  • type Selection
    default='radio' args: [('radio', 'Radio'), ('select', 'Select'), ('color', 'Color'), ('hidden', 'Hidden')]
Public methods (0)

No public methods.

New fields (1)
  • html_color Char
    help="Here you can set a specific HTML color index (e.g. #ff0000) to display the color on the website if the attibute type is 'Color'." oldname='color' string='HTML Color Index'
Public methods (0)

No public methods.

New fields (3)
  • image Binary
    attachment=True args: 'Image'
  • name Char
    args: 'Name'
  • product_tmpl_id Many2one → product.template
    copy=True args: 'product.template', 'Related Product'
Public methods (0)

No public methods.

New fields (3)
  • code Char
    groups='base.group_user' string='E-commerce Promotional Code'
  • selectable Boolean
    help='Allow the end user to choose this price list'
  • website_id Many2one → website
    default=_default_website string='website' args: 'website'
Public methods (4)
  • clear_cache(self)
  • create(self, data)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, data)
    @api.multi

New fields (3)
  • website_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website price'
  • website_price_difference Boolean
    compute='_website_price' args: 'Website price difference'
  • website_public_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website public price'
Public methods (1)
  • website_publish_button(self)
    @api.multi

New fields (7)
  • child_id One2many → product.public.category
    string='Children Categories' args: 'product.public.category', 'parent_id'
  • image Binary
    attachment=True help='This field holds the image used as image for the category, limited to 1024x1024px.'
  • image_medium Binary
    attachment=True help='Medium-sized image of the category. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views.' string='Medium-sized image'
  • image_small Binary
    attachment=True help='Small-sized image of the category. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required.' string='Small-sized image'
  • name Char
    required=True translate=True
  • parent_id Many2one → product.public.category
    index=True string='Parent Category' args: 'product.public.category'
  • sequence Integer
    help='Gives the sequence order when displaying a list of product categories.'
Public methods (4)
  • check_parent_id(self)
    @api.constrains('parent_id')
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (2)
  • html_class Char
    string='HTML Classes'
  • name Char
    required=True string='Style Name'
Public methods (0)

No public methods.

New fields (15)
  • accessory_product_ids Many2many → product.product
    help='Accessories show up when the customer reviews the cart before paying (cross-sell strategy, e.g. for computers: mouse, keyboard, etc.). An algorithm figures out a list of accessories based on all the products added to cart.' string='Accessory Products' args: 'product.product', 'product_accessory_rel', 'src_id', 'dest_id'
  • alternative_product_ids Many2many → product.template
    help='Suggest more expensive alternatives to your customers (upsell strategy). Those products show up on the product page.' string='Alternative Products' args: 'product.template', 'product_alternative_rel', 'src_id', 'dest_id'
  • availability Selection
    default='empty' help='Adds an availability status on the web product page.' args: [('empty', 'Display Nothing'), ('in_stock', 'In Stock'), ('warning', 'Warning')], 'Availability'
  • availability_warning Text
    translate=True args: 'Availability Warning'
  • product_image_ids One2many → product.image
    string='Images' args: 'product.image', 'product_tmpl_id'
  • public_categ_ids Many2many → product.public.category
    help='Categories can be published on the Shop page (online catalog grid) to help customers find all the items within a category. To publish them, go to the Shop page, hit Customize and turn *Product Categories* on. A product can belong to several categories.' string='Website Product Category' args: 'product.public.category'
  • website_description Html
    sanitize_attributes=False translate=html_translate args: 'Description for the website'
  • website_message_ids One2many → mail.message
    domain=<expr> string='Website Comments' args: 'mail.message', 'res_id'
  • website_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website price'
  • website_price_difference Boolean
    compute='_website_price' args: 'Website price difference'
  • website_public_price Float
    compute='_website_price' digits=dp.get_precision('Product Price') args: 'Website public price'
  • website_sequence Integer
    default=<expr> help='Determine the display order in the Website E-commerce' args: 'Website Sequence'
  • website_size_x Integer
    default=1 args: 'Size X'
  • website_size_y Integer
    default=1 args: 'Size Y'
  • website_style_ids Many2many → product.style
    string='Styles' args: 'product.style'
Public methods (4)
  • set_sequence_bottom(self)
  • set_sequence_down(self)
  • set_sequence_top(self)
  • set_sequence_up(self)

New fields (1)
  • website_published Boolean
    related='message_id.website_published' store=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • get_website_sale_countries(self, mode='billing')
  • get_website_sale_states(self, mode='billing')

New fields (1)
  • last_website_so_id Many2one → sale.order
    string='Last Online Sale Order' args: 'sale.order'
Public methods (0)

No public methods.

New fields (5)
  • cart_quantity Integer
    compute='_compute_cart_info' string='Cart Quantity'
  • only_services Boolean
    compute='_compute_cart_info' string='Only Services'
  • payment_acquirer_id Many2one → payment.acquirer
    copy=False string='Payment Acquirer' args: 'payment.acquirer'
  • payment_tx_id Many2one → payment.transaction
    copy=False string='Transaction' args: 'payment.transaction'
  • website_order_line One2many → sale.order.line
    help='Order Lines to be displayed on the website. They should not be used for computation purpose.' readonly=True string='Order Lines displayed on Website' args: 'sale.order.line', 'order_id'
Public methods (0)

No public methods.

New fields (5)
  • currency_id Many2one → res.currency
    related='pricelist_id.currency_id' related_sudo=False string='Default Currency' args: 'res.currency'
  • pricelist_id Many2one → product.pricelist
    compute='_compute_pricelist_id' string='Default Pricelist' args: 'product.pricelist'
  • pricelist_ids One2many → product.pricelist
    compute='_compute_pricelist_ids' string='Price list available for this Ecommerce/Website' args: 'product.pricelist'
  • salesperson_id Many2one → res.users
    string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    string='Sales Team' args: 'crm.team'
Public methods (8)
  • get_current_pricelist(self)
    :returns: The current pricelist record
  • get_pricelist_available(self, show_visible=False)
    Return the list of pricelists that can be used on website for the current user. Country restrictions will be detected with GeoIP (if installed). :param bool show_visible: if True, we don't display pricelist where selectable is False (Eg: Code promo) :returns: pricelist recordset
  • is_pricelist_available(self, pl_id)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_get_order(self, force_create=False, code=None, update_pricelist=False, force_pricelist=False)
    @api.multi
    Return the current sale order after mofications specified by params. :param bool force_create: Create sale order if not already existing :param str code: Code to force a pricelist (promo code) If empty, it's a special case to reset the pricelist with the first available else the default. :param bool update_pricelist: Force to recompute all the lines from sale order to adapt the price with the current pricelist. :param int force_pricelist: pricelist_id - if set, we change the pricelist with this one :returns: browse record for the current sale order
  • sale_get_payment_term(self, partner)
    @api.model
  • sale_get_transaction(self)
  • sale_product_domain(self)
    @api.multi
  • sale_reset(self)

New fields (20)
  • group_pricelist_item Boolean
    implied_group='product.group_pricelist_item' args: 'Show pricelists to customers'
  • group_product_pricelist Boolean
    implied_group='product.group_product_pricelist' args: 'Show pricelists On Products'
  • group_sale_pricelist Boolean
    help='Allows to manage different prices based on rules per category of customers.\n Example: 10% for retailers, promotion of 5 EUR on this product, etc.' implied_group='product.group_sale_pricelist' args: 'Use pricelists to adapt your price per customers'
  • group_website_multiimage Selection
    group='base.group_portal,base.group_user,base.group_public' implied_group='website_sale.group_website_multi_image' string='Multi Images' args: [(0, 'One image per product'), (1, 'Several images per product')]
  • module_delivery Boolean
    args: 'Manage shipping internally'
  • module_delivery_dhl Boolean
    args: 'DHL integration'
  • module_delivery_fedex Boolean
    args: 'Fedex integration'
  • module_delivery_temando Boolean
    args: 'Temando integration'
  • module_delivery_ups Boolean
    args: 'UPS integration'
  • module_delivery_usps Boolean
    args: 'USPS integration'
  • module_portal Boolean
    help='Give your customers access to their documents.' args: 'Activate the customer portal'
  • module_sale_ebay Boolean
    args: 'eBay connector'
  • module_website_sale_delivery Boolean
    args: 'Add Delivery Costs to Online Sales'
  • module_website_sale_options Selection
    help='Installs *e-Commerce Optional Products*' args: [(0, 'One-step "add to cart"'), (1, 'Suggest optional products when adding to cart (e.g. for a computer: warranty, software, etc.)')], 'Optional Products'
  • order_mail_template Many2one → mail.template
    default=_default_order_mail_template help='Email sent to customer at the end of the checkout process' readonly=True string='Order Confirmation Email' args: 'mail.template'
  • sale_delivery_settings Selection
    string='Shipping Management' args: [('none', 'No shipping management on website'), ('internal', "Delivery methods are only used internally: the customer doesn't pay for shipping costs"), ('website', 'Delivery methods are selectable on the website: the customer pays for shipping costs')]
  • sale_pricelist_setting_split_1 Selection
    default=0 string='Pricing Strategy' args: [(0, 'A single sales price per product'), (1, 'Several prices selectable through a drop-down list or applied automatically via Geo-IP')]
  • sale_pricelist_setting_split_2 Selection
    default=0 help='Specific prices per customer segment, currency, etc.: new pricing table available in product detail form (Sales tab).\nAdvanced pricing based on formulas (discounts, margins, rounding): apply price rules from a new *Pricelists* menu in Configuration.' string='Sales Price' args: [(0, 'Specific prices per customer segment, currency, etc.'), (1, 'Advanced pricing based on formulas (discounts, margins, rounding)')]
  • salesperson_id Many2one → res.users
    related='website_id.salesperson_id' string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    related='website_id.salesteam_id' string='Sales Team' args: 'crm.team'
Public methods (3)
  • get_default_sale_delivery_settings(self, fields)
    @api.model
  • get_default_sale_pricelist_setting(self, fields)
    @api.model
  • set_sale_pricelist_settings(self)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/website_sale
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Julien Legros, Richard Mathot, qdp-odoo, Géry Debongnie, Jeremy Kersten, Lucas Perais (lpe), Damien Bouvy, Yannick Tivisse, qsm-odoo, Romain Derie, Valerie Pirenne, rde
WEBSITE
WEBSITEhttps://www.odoo.com/page/e-commerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:31
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - web_editor
    - web_planner
    - sale
    - sales_team
    - mail
    - base_setup
    - web_kanban
    - bus
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - web_tip
    - procurement
    - payment
    - website_payment
    - website_portal
    - website_portal_sale
    - website_mail
    - rating
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
OpenERP E-Commerce
==================

        

Code Analysis

Views touched (60)
XML IDNameModelTypeStatus
404 404 ir.ui.view qweb New
assets_editor Shop Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend Shop ir.ui.view qweb Inherits website.assets_frontend
attribute_tree_view product.attribute.tree.type product.attribute field Inherits product.attribute_tree_view
cart Shopping Cart ir.ui.view qweb New
cart_lines Shopping Cart ir.ui.view qweb New
cart_popover Cart Popover ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
content_new_product content_new_product ir.ui.view qweb Inherits website.user_navbar
continue_shopping Continue Shopping Button ir.ui.view qweb Inherits website_sale.cart
extra_info Checkout Extra Info ir.ui.view qweb New
extra_info_option Extra Step Option ir.ui.view qweb Inherits wizard_checkout
header Header Shop My Cart Link ir.ui.view qweb Inherits website.layout
inherits_website_sale_country_group_form website_sale.country_group.form res.country.group group Inherits base.view_country_group_form
message_thread_rating Chatter with rating ir.ui.view qweb Inherits website_mail.message_thread
option_collapse_categories_recursive Collapse Category Recursive ir.ui.view qweb New
option_collapse_products_categories Collapsible Category List ir.ui.view qweb Inherits website_sale.products_categories
order_state_message Order State Message ir.ui.view qweb New
orders_followup_products_links Orders Followup Products Links ir.ui.view qweb Inherits website_portal_sale.orders_followup
payment payment ir.ui.view qweb New
payment_confirmation_status payment_confirmation_status ir.ui.view qweb New
payment_sale_note Display Sale Note ir.ui.view qweb Inherits payment
pricelist_list Pricelists Dropdown ir.ui.view qweb New
product Product ir.ui.view qweb New
product_attribute_value_view_tree_inherit_website_sale product.attribute.value.view.tree.inherit.website.sale product.attribute.value field Inherits product.product_attribute_value_view_tree
product_attributes Product attributes ir.ui.view qweb Inherits website_sale.product
product_comment Discussion and Rating ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_pricelist_view product.pricelist.website.form product.pricelist field Inherits product.product_pricelist_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.tree product.public.category tree New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_template_form_view product.template.product.website.form product.template group Inherits product.product_template_form_view
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Product Attribute's Filters ir.ui.view qweb Inherits website_sale.products
products_categories Product Categories ir.ui.view qweb Inherits website_sale.products
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_item Products item ir.ui.view qweb New
products_list_view List View ir.ui.view qweb Inherits website_sale.products
recommended_products Suggested Products ir.ui.view qweb Inherits website_sale.product
reduction_code Coupon Code ir.ui.view qweb Inherits website_sale.cart
report_shop_saleorder_document report_shop_saleorder_document ir.ui.view qweb Inherits sale.report_saleorder_document
search Search hidden fields ir.ui.view qweb New
suggested_products_list Suggested Products in my cart ir.ui.view qweb Inherits website_sale.cart_lines
total total ir.ui.view qweb New
transaction_form_website_sale payment.transaction.form.website_sale payment.transaction xpath Inherits payment.transaction_form
variants variants ir.ui.view qweb New
variants_tree_view variants.template.tree product.attribute.value field Inherits product.variants_tree_view
view_order_form_acquirer sale.order.form.acquirer sale.order xpath Inherits sale.view_order_form
website.layout_footer_copyright Footer Copyright ir.ui.view qweb Inherits website.layout
website_config_settings_view_form website.config.settings.form.inherit website.config.settings group Inherits website.view_website_config_settings
website_planner website sale planner ir.ui.view qweb Inherits website.website_planner
website_pricelist_form_view website_pricelist.form website_pricelist form New
website_pricelist_tree_view website_pricelist.tree website_pricelist tree New
website_sale Snippet Ecommerce ir.ui.view qweb Inherits website.snippets
wizard_checkout website_sale: Wizard Checkout ir.ui.view qweb New
Models touched (16)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • form_feedback(self, cr, uid, data, acquirer_name, context=None)
    Override to confirm the sale order, if defined, and if the transaction is done.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • write(self, cr, uid, ids, vals, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • open_website_url(self, cr, uid, ids, context=None)
  • website_publish_button(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (4)
  • set_sequence_bottom(self, cr, uid, ids, context=None)
  • set_sequence_down(self, cr, uid, ids, context=None)
  • set_sequence_top(self, cr, uid, ids, context=None)
  • set_sequence_up(self, cr, uid, ids, context=None)

New fields (1)
  • website_published Boolean
    related='message_id.website_published' store=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (8)
  • get_current_pricelist(self, cr, uid, context=None)
    :returns: The current pricelist record
  • get_partner(self, cr, uid)
  • get_pricelist_available(self, cr, uid, show_visible=False, context=None)
    Return the list of pricelists that can be used on website for the current user. Country restrictions will be detected with GeoIP (if installed). :param str country_code: code iso or False, If set, we search only price list available for this country :param bool show_visible: if True, we don't display pricelist where selectable is False (Eg: Code promo) :returns: pricelist recordset
  • is_pricelist_available(self, cr, uid, pl_id, context=None)
    Return a boolean to specify if a specific pricelist can be manually set on the website. Warning: It check only if pricelist is in the 'selectable' pricelists or the current pricelist. :param int pl_id: The pricelist id to check :returns: Boolean, True if valid / available
  • sale_get_order(self, cr, uid, ids, force_create=False, code=None, update_pricelist=False, force_pricelist=False, context=None)
    Return the current sale order after mofications specified by params. :param bool force_create: Create sale order if not already existing :param str code: Code to force a pricelist (promo code) If empty, it's a special case to reset the pricelist with the first available else the default. :param bool update_pricelist: Force to recompute all the lines from sale order to adapt the price with the current pricelist. :param int force_pricelist: pricelist_id - if set, we change the pricelist with this one :returns: browse record for the current sale order
  • sale_get_transaction(self, cr, uid, ids, context=None)
  • sale_product_domain(self, cr, uid, ids, context=None)
  • sale_reset(self, cr, uid, ids, context=None)

New fields (7)
  • module_delivery_dhl Boolean
    args: 'DHL integration'
  • module_delivery_fedex Boolean
    args: 'Fedex integration'
  • module_delivery_ups Boolean
    args: 'UPS integration'
  • module_delivery_usps Boolean
    args: 'USPS integration'
  • module_sale_ebay Boolean
    args: 'eBay connector'
  • salesperson_id Many2one → res.users
    related='website_id.salesperson_id' string='Salesperson' args: 'res.users'
  • salesteam_id Many2one → crm.team
    related='website_id.salesteam_id' string='Sales Team' args: 'crm.team'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (4)
  • clear_cache(self)
  • create(self, cr, uid, data, context=None)
  • unlink(self, cr, uid, ids, context=None)
  • write(self, cr, uid, ids, data, context=None)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/website_sale
VERSION
VERSION 1.0
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSOdoo Translation Bot, Christophe Matthieu, ajay javiya (OpenERP), Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Fabien Meghazi, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Simon Lejeune, Frédéric van der Essen, Nicolas Martinelli, Kersten Jeremy, Paramjit Singh Sahota, Nicolas Lempereur, Julien Legros, Richard Mathot, jke-openerp, bth-openerp, chm@openerp.com, ddm, ddm@openerp.com, Nicolas Wisniewski, Jeremy Kersten, Darshan Kalola (OpenERP), Damien Bouvy, Mitesh Savani, --global, Pooja Zankhariya (OpenERP), Dharmraj Jhala, Anton Chepurov, Mehul Mehta (OpenERP)
WEBSITE
WEBSITEhttps://www.odoo.com/page/e-commerce
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - share
    - mail
    - base_setup
    - web_kanban
    - sale
    - sales_team
    - web_kanban_sparkline
    - account_voucher
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - board
    - edi
    - email_template
    - procurement
    - payment
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
OpenERP E-Commerce
==================

        

Code Analysis

Views touched (40)
XML IDNameModelTypeStatus
404 404 ir.ui.view qweb New
assets_editor Shop Editor ir.ui.view qweb Inherits website.assets_editor
assets_frontend Shop ir.ui.view qweb Inherits website.assets_frontend
attribute_tree_view product.attribute.tree.type product.attribute field Inherits product.attribute_tree_view
cart Shopping Cart ir.ui.view qweb New
categories_recursive Category list ir.ui.view qweb New
checkout checkout ir.ui.view qweb New
confirmation confirmation ir.ui.view qweb New
content_new_product content_new_product ir.ui.view qweb Inherits website.user_navbar
continue_shopping Continue Shopping Button ir.ui.view qweb Inherits website_sale.cart
header Header Shop My Cart Link ir.ui.view qweb Inherits website.layout
payment payment ir.ui.view qweb New
product Product ir.ui.view qweb New
product_attributes Product attributes ir.ui.view qweb Inherits website_sale.product
product_comment Discussion ir.ui.view qweb Inherits website_sale.product
product_price product_price ir.ui.view qweb New
product_pricelist_view product.pricelist.website.form product.pricelist field Inherits product.product_pricelist_view
product_public_category_form_view product.public.category.form product.public.category form New
product_public_category_tree_view product.public.category.tree product.public.category tree New
product_quantity Select Quantity ir.ui.view qweb Inherits website_sale.product
product_template_form_view product.template.product.website.form product.template group Inherits product.product_template_form_view
product_variants List View of Variants ir.ui.view qweb Inherits website_sale.product
products Products ir.ui.view qweb New
products_add_to_cart Add to Cart ir.ui.view qweb Inherits website_sale.products_item
products_attributes Product Attribute's Filters ir.ui.view qweb Inherits website_sale.products
products_categories Product Categories ir.ui.view qweb Inherits website_sale.products
products_description Product Description ir.ui.view qweb Inherits website_sale.products_item
products_item Product item ir.ui.view qweb New
products_list_view List View ir.ui.view qweb Inherits website_sale.products
recommended_products Alternative Products ir.ui.view qweb Inherits website_sale.product
reduction_code Coupon Code ir.ui.view qweb Inherits website_sale.cart
search Search hidden fields ir.ui.view qweb New
suggested_products_list Suggested Products in my cart ir.ui.view qweb Inherits website_sale.cart
total total ir.ui.view qweb New
transaction_form_website_sale payment.transaction.form.website_sale payment.transaction xpath Inherits payment.transaction_form
variants variants ir.ui.view qweb New
variants_template_tree_view variants.template.tree product.attribute.value field Inherits product.variants_template_tree_view
variants_tree_view variants.template.tree product.attribute.value field Inherits product.variants_tree_view
view_order_form_acquirer sale.order.form.acquirer sale.order xpath Inherits sale.view_order_form
website.layout_footer_copyright Footer Copyright ir.ui.view qweb Inherits website.layout
Models touched (10)

New fields (0)

No new fields.

Public methods (1)
  • form_feedback(self, cr, uid, data, acquirer_name, context=None)
    Override to confirm the sale order, if defined, and if the transaction is done.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (4)
  • set_sequence_bottom(self, cr, uid, ids, context=None)
  • set_sequence_down(self, cr, uid, ids, context=None)
  • set_sequence_top(self, cr, uid, ids, context=None)
  • set_sequence_up(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (4)
  • sale_get_order(self, cr, uid, ids, force_create=False, code=None, update_pricelist=None, context=None)
  • sale_get_transaction(self, cr, uid, ids, context=None)
  • sale_product_domain(self, cr, uid, ids, context=None)
  • sale_reset(self, cr, uid, ids, context=None)