Delivery Costs

delivery
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales/Delivery
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Lucas Perais (lpe), Julien Castiaux, Victor Feyens, Tiffany Chang (tic), Gorash, Valentin Chevalier, Habib (ayh), Maximilien (malb), Victor Piryns (pivi), Pieter Claeys (clpi), Levi Siuzdak (sile), Dylan Kiss (dyki), Valeriya(vchu), Arnaud Sibille, lase@odoo.com, vava-odoo, kcv-odoo, Patricia Daloze (pda), Manushi Shah, Mohammad Abdulmoneim (abdu), Krzysztof Magusiak (krma), Mahdi Alijani (malj), Florian Malfroid, Akash Pandey, Basioni (basm), Rushil Patel, Valeriya (vchu), Eliott Loop (oplo-odoo), Nisarg (nipl), Lionel Piraux (lipi), saurabh, panj-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
    - payment_custom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders.
==================================================
You can define your own carrier for prices.
The system is able to add and compute the shipping line.

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
choose_delivery_carrier_view_form choose.delivery.carrier.form choose.delivery.carrier form New
delivery_provider_module_kanban Delivery Provider Module Kanban ir.module.module button Inherits base.module_view_kanban
delivery_provider_module_list Delivery Provider Module List ir.module.module field Inherits base.module_tree
delivery_report_saleorder_document delivery_report_saleorder_document ir.ui.view qweb Inherits sale.report_saleorder_document
delivery_submit_button delivery_submit_button ir.ui.view qweb Inherits payment.submit_button
payment_provider_form COD Provider Form payment.provider field Inherits payment_custom.payment_provider_form
res_config_settings_view_form res.config.settings.view.form.inherit.delivery res.config.settings setting Inherits sale.res_config_settings_view_form
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.list delivery.carrier list New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.list delivery.price.rule list New
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order header Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner group Inherits base.view_partner_form
Models touched (12)

New fields (13)
  • available_carrier_ids Many2many → delivery.carrier
    compute='_compute_available_carrier' string='Available Carriers' args: 'delivery.carrier'
  • carrier_id Many2one → delivery.carrier
    domain="[('id', 'in', available_carrier_ids)]" required=True string='Shipping Method' args: 'delivery.carrier'
  • company_id Many2one → res.company
    related='order_id.company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    related='order_id.currency_id' args: 'res.currency'
  • delivery_message Text
    readonly=True
  • delivery_price Float
  • delivery_type Selection
    related='carrier_id.delivery_type'
  • display_price Float
    readonly=True string='Cost'
  • invoicing_message Text
    compute='_compute_invoicing_message'
  • order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order'
  • partner_id Many2one → res.partner
    related='order_id.partner_id' required=True args: 'res.partner'
  • total_weight Float
    readonly=False related='order_id.shipping_weight' string='Total Order Weight'
  • weight_uom_name Char
    default=_get_default_weight_uom readonly=True
Public methods (2)
  • button_confirm(self)
  • update_price(self)

New fields (34)
  • active Boolean
    default=True
  • allow_cash_on_delivery Boolean
    help='Allow customers to choose Cash on Delivery as their payment method.' string='Cash on Delivery'
  • amount Float
    default=1000 help='Amount of the order to benefit from a free shipping, expressed in the company currency' string='Amount'
  • can_generate_return Boolean
    compute='_compute_can_generate_return'
  • carrier_description Text
    help='A description of the delivery method that you want to communicate to your customers on the Sales Order and sales confirmation email.E.g. instructions for customers to follow.' translate=True args: 'Carrier Description'
  • company_id Many2one → res.company
    readonly=False related='product_id.company_id' store=True string='Company' args: 'res.company'
  • country_ids Many2many → res.country
    args: 'res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries'
  • currency_id Many2one
    related='product_id.currency_id'
  • debug_logging Boolean
    help='Log requests in order to ease debugging' args: 'Debug logging'
  • delivery_type Selection
    default='fixed' required=True string='Provider' args: [('base_on_rule', 'Based on Rules'), ('fixed', 'Fixed Price')]
  • excluded_tag_ids Many2many → product.tag
    comodel_name='product.tag' help='The method is NOT available if at least one product of the order has one of these tags.' relation='product_tag_delivery_carrier_excluded_rel' string='Excluded Tags'
  • fixed_margin Float
    help='This fixed amount will be added to the shipping price.'
  • fixed_price Float
    compute='_compute_fixed_price' inverse='_set_product_fixed_price' store=True string='Fixed Price'
  • free_over Boolean
    default=False help='If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping' args: 'Free if order amount is above'
  • get_return_label_from_portal Boolean
    help='The return label can be downloaded by the customer from the customer portal.' string='Return Label Accessible from Customer Portal'
  • integration_level Selection
    default='rate_and_ship' help='Action while validating Delivery Orders' string='Integration Level' args: [('rate', 'Get Rate'), ('rate_and_ship', 'Get Rate and Create Shipment')]
  • invoice_policy Selection
    default='estimated' help='Estimated Cost: the customer will be invoiced the estimated cost of the shipping.' required=True selection=[('estimated', 'Estimated cost')] string='Invoicing Policy'
  • margin Float
    help='This percentage will be added to the shipping price.'
  • max_volume Float
    help="If the total volume of the order is over this volume, the method won't be available." args: 'Max Volume'
  • max_weight Float
    help="If the total weight of the order is over this weight, the method won't be available." args: 'Max Weight'
  • must_have_tag_ids Many2many → product.tag
    comodel_name='product.tag' help='The method is available only if at least one product of the order has one of these tags.' relation='product_tag_delivery_carrier_must_have_rel' string='Must Have Tags'
  • name Char
    required=True translate=True args: 'Delivery Method'
  • price_rule_ids One2many → delivery.price.rule
    copy=True args: 'delivery.price.rule', 'carrier_id', 'Pricing Rules'
  • prod_environment Boolean
    help='Set to True if your credentials are certified for production.' args: 'Environment'
  • product_id Many2one → product.product
    ondelete='restrict' required=True string='Delivery Product' args: 'product.product'
  • return_label_on_delivery Boolean
    help='The return label is automatically generated at the delivery.' string='Generate Return Label'
  • sequence Integer
    default=10 help='Determine the display order'
  • shipping_insurance Integer
    default=0 help='Shipping insurance is a service which may reimburse senders whose parcels are lost, stolen, and/or damaged in transit.' args: 'Insurance Percentage'
  • state_ids Many2many → res.country.state
    args: 'res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States'
  • supports_shipping_insurance Boolean
    compute='_compute_supports_shipping_insurance'
  • tracking_url Char
    help='This option adds a link for the customer in the portal to track their package easily. Use <shipmenttrackingnumber> as a placeholder in your URL.' string='Tracking Link'
  • volume_uom_name Char
    compute='_compute_volume_uom_name' string='Volume unit of measure label'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' string='Weight unit of measure label'
  • zip_prefix_ids Many2many → delivery.zip.prefix
    help="Prefixes of zip codes that this carrier applies to. Note that regular expressions can be used to support countries with varying zip code lengths, i.e. '$' can be added to end of prefix to match the exact zip (e.g. '100$' will only match '100' and not '1000')" args: 'delivery.zip.prefix', 'delivery_zip_prefix_rel', 'carrier_id', 'zip_prefix_id', 'Zip Prefixes'
Public methods (9)
  • available_carriers(self, partner, source)
  • base_on_rule_rate_shipment(self, order)
  • copy_data(self, default=None)
  • fixed_rate_shipment(self, order)
  • install_more_provider(self)
  • log_xml(self, xml_string, func)
  • rate_shipment(self, order)
    Compute the price of the order shipment :param order: record of sale.order :returns: a dict with structure :: {'success': boolean, 'price': a float, 'error_message': a string containing an error message, 'warning_message': a string containing a warning message} :rtype: dict
  • toggle_debug(self)
  • toggle_prod_environment(self)

New fields (10)
  • carrier_id Many2one → delivery.carrier
    index=True ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • currency_id Many2one
    related='carrier_id.currency_id'
  • list_base_price Float
    default=0.0 min_display_digits='Product Price' required=True string='Sale Base Price'
  • list_price Float
    default=0.0 min_display_digits='Product Price' required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_compute_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')]
  • sequence Integer
    default=10 required=True
  • variable Selection
    default='quantity' required=True selection=VARIABLE_SELECTION
  • variable_factor Selection
    default='weight' required=True selection=VARIABLE_SELECTION string='Variable Factor'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True args: 'Prefix'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_view_delivery_methods(self)

New fields (1)
  • custom_mode Selection
    selection_add=[('cash_on_delivery', 'Cash On Delivery')]
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 (2)
  • is_pickup_location Boolean
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='Used in sales orders.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (7)
  • carrier_id Many2one → delivery.carrier
    check_company=True help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_message Char
    copy=False readonly=True
  • delivery_set Boolean
    compute='_compute_delivery_state'
  • is_all_service Boolean
    compute='_compute_is_service_products' args: 'Service Product'
  • pickup_location_data Json
  • recompute_delivery_price Boolean
    args: 'Delivery cost should be recomputed'
  • shipping_weight Float
    compute='_compute_shipping_weight' readonly=False store=True args: 'Shipping Weight'
Public methods (3)
  • action_open_delivery_wizard(self)
  • onchange_order_line(self)
    @api.onchange('order_line', 'partner_id', 'partner_shipping_id')
  • set_delivery_line(self, carrier, amount)

New fields (3)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits='Product Unit' string='Product Qty'
  • recompute_delivery_price Boolean
    related='order_id.recompute_delivery_price'
Public methods (1)
  • unlink(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales/Delivery
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Christophe Simonis, Lucas Perais (lpe), Yannick Tivisse, Odoo Online, Arnold Moyaux, Victor Feyens, Adrien Dieudonné, Anh Thao Pham (pta), Tiffany Chang (tic), Gorash, Ruben Gomes, Antoine Vandevenne (anv), Valentin Chevalier, Vincent Larcin, Louis Wicket (wil), Walid, Gauthier Wala (gawa), Pieter Claeys (clpi), Levi Siuzdak (sile), Dylan Kiss (dyki), Valeriya(vchu), Chong Wang (cwg), Martin Maes, Anita (anko), Arnaud Sibille, Youssef Bashandy, lase@odoo.com, Nathaniel (naja), vava-odoo, Julien Carion (juca), kcv-odoo, Lina (liew), Emilio Pascual, Louis (wil), mano-odoo, Mohammad Abdulmoneim, Mathias Mathy (MAMA), Lucas Lefèvre (lul), Krzysztof Magusiak (krma), Mahdi Alijani (malj), Florian Malfroid, Basioni (basm), Valeriya (vchu), Michael Jurke, Eliott Loop (oplo-odoo), Vraj Panchal
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders.
==================================================
You can define your own carrier for prices.
The system is able to add and compute the shipping line.

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
choose_delivery_carrier_view_form choose.delivery.carrier.form choose.delivery.carrier form New
delivery_report_saleorder_document delivery_report_saleorder_document ir.ui.view qweb Inherits sale.report_saleorder_document
res_config_settings_view_form res.config.settings.view.form.inherit.delivery res.config.settings setting Inherits sale.res_config_settings_view_form
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.list delivery.carrier list New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.list delivery.price.rule list New
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order field Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner group Inherits base.view_partner_form
Models touched (8)

New fields (13)
  • available_carrier_ids Many2many → delivery.carrier
    compute='_compute_available_carrier' string='Available Carriers' args: 'delivery.carrier'
  • carrier_id Many2one → delivery.carrier
    required=True string='Shipping Method' args: 'delivery.carrier'
  • company_id Many2one → res.company
    related='order_id.company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    related='order_id.currency_id' args: 'res.currency'
  • delivery_message Text
    readonly=True
  • delivery_price Float
  • delivery_type Selection
    related='carrier_id.delivery_type'
  • display_price Float
    readonly=True string='Cost'
  • invoicing_message Text
    compute='_compute_invoicing_message'
  • order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order'
  • partner_id Many2one → res.partner
    related='order_id.partner_id' required=True args: 'res.partner'
  • total_weight Float
    readonly=False related='order_id.shipping_weight' string='Total Order Weight'
  • weight_uom_name Char
    default=_get_default_weight_uom readonly=True
Public methods (2)
  • button_confirm(self)
  • update_price(self)

New fields (33)
  • active Boolean
    default=True
  • amount Float
    default=1000 help='Amount of the order to benefit from a free shipping, expressed in the company currency' string='Amount'
  • can_generate_return Boolean
    compute='_compute_can_generate_return'
  • carrier_description Text
    help='A description of the delivery method that you want to communicate to your customers on the Sales Order and sales confirmation email.E.g. instructions for customers to follow.' translate=True args: 'Carrier Description'
  • company_id Many2one → res.company
    readonly=False related='product_id.company_id' store=True string='Company' args: 'res.company'
  • country_ids Many2many → res.country
    args: 'res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries'
  • currency_id Many2one
    related='product_id.currency_id'
  • debug_logging Boolean
    help='Log requests in order to ease debugging' args: 'Debug logging'
  • delivery_type Selection
    default='fixed' required=True string='Provider' args: [('base_on_rule', 'Based on Rules'), ('fixed', 'Fixed Price')]
  • excluded_tag_ids Many2many → product.tag
    comodel_name='product.tag' help='The method is NOT available if at least one product of the order has one of these tags.' relation='product_tag_delivery_carrier_excluded_rel' string='Excluded Tags'
  • fixed_margin Float
    help='This fixed amount will be added to the shipping price.'
  • fixed_price Float
    compute='_compute_fixed_price' inverse='_set_product_fixed_price' store=True string='Fixed Price'
  • free_over Boolean
    default=False help='If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping' args: 'Free if order amount is above'
  • get_return_label_from_portal Boolean
    help='The return label can be downloaded by the customer from the customer portal.' string='Return Label Accessible from Customer Portal'
  • integration_level Selection
    default='rate_and_ship' help='Action while validating Delivery Orders' string='Integration Level' args: [('rate', 'Get Rate'), ('rate_and_ship', 'Get Rate and Create Shipment')]
  • invoice_policy Selection
    default='estimated' help='Estimated Cost: the customer will be invoiced the estimated cost of the shipping.' required=True selection=[('estimated', 'Estimated cost')] string='Invoicing Policy'
  • margin Float
    help='This percentage will be added to the shipping price.'
  • max_volume Float
    help="If the total volume of the order is over this volume, the method won't be available." args: 'Max Volume'
  • max_weight Float
    help="If the total weight of the order is over this weight, the method won't be available." args: 'Max Weight'
  • must_have_tag_ids Many2many → product.tag
    comodel_name='product.tag' help='The method is available only if at least one product of the order has one of these tags.' relation='product_tag_delivery_carrier_must_have_rel' string='Must Have Tags'
  • name Char
    required=True translate=True args: 'Delivery Method'
  • price_rule_ids One2many → delivery.price.rule
    copy=True args: 'delivery.price.rule', 'carrier_id', 'Pricing Rules'
  • prod_environment Boolean
    help='Set to True if your credentials are certified for production.' args: 'Environment'
  • product_id Many2one → product.product
    ondelete='restrict' required=True string='Delivery Product' args: 'product.product'
  • return_label_on_delivery Boolean
    help='The return label is automatically generated at the delivery.' string='Generate Return Label'
  • sequence Integer
    default=10 help='Determine the display order'
  • shipping_insurance Integer
    default=0 help='Shipping insurance is a service which may reimburse senders whose parcels are lost, stolen, and/or damaged in transit.' args: 'Insurance Percentage'
  • state_ids Many2many → res.country.state
    args: 'res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States'
  • supports_shipping_insurance Boolean
    compute='_compute_supports_shipping_insurance'
  • tracking_url Char
    help='This option adds a link for the customer in the portal to track their package easily. Use <shipmenttrackingnumber> as a placeholder in your URL.' string='Tracking Link'
  • volume_uom_name Char
    compute='_compute_volume_uom_name' string='Volume unit of measure label'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' string='Weight unit of measure label'
  • zip_prefix_ids Many2many → delivery.zip.prefix
    help="Prefixes of zip codes that this carrier applies to. Note that regular expressions can be used to support countries with varying zip code lengths, i.e. '$' can be added to end of prefix to match the exact zip (e.g. '100$' will only match '100' and not '1000')" args: 'delivery.zip.prefix', 'delivery_zip_prefix_rel', 'carrier_id', 'zip_prefix_id', 'Zip Prefixes'
Public methods (9)
  • available_carriers(self, partner, order)
  • base_on_rule_rate_shipment(self, order)
  • copy_data(self, default=None)
  • fixed_rate_shipment(self, order)
  • install_more_provider(self)
  • log_xml(self, xml_string, func)
  • rate_shipment(self, order)
    Compute the price of the order shipment :param order: record of sale.order :return dict: {'success': boolean, 'price': a float, 'error_message': a string containing an error message, 'warning_message': a string containing a warning message} # TODO maybe the currency code?
  • toggle_debug(self)
  • toggle_prod_environment(self)

New fields (10)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • currency_id Many2one
    related='carrier_id.currency_id'
  • list_base_price Float
    default=0.0 min_display_digits='Product Price' required=True string='Sale Base Price'
  • list_price Float
    default=0.0 min_display_digits='Product Price' required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_compute_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')]
  • sequence Integer
    default=10 required=True
  • variable Selection
    default='quantity' required=True selection=VARIABLE_SELECTION
  • variable_factor Selection
    default='weight' required=True selection=VARIABLE_SELECTION string='Variable Factor'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True args: 'Prefix'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='Default delivery method used in sales orders.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (7)
  • carrier_id Many2one → delivery.carrier
    check_company=True help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_message Char
    copy=False readonly=True
  • delivery_set Boolean
    compute='_compute_delivery_state'
  • is_all_service Boolean
    compute='_compute_is_service_products' args: 'Service Product'
  • pickup_location_data Json
  • recompute_delivery_price Boolean
    args: 'Delivery cost should be recomputed'
  • shipping_weight Float
    compute='_compute_shipping_weight' readonly=False store=True args: 'Shipping Weight'
Public methods (3)
  • action_open_delivery_wizard(self)
  • onchange_order_line(self)
    @api.onchange('order_line', 'partner_id', 'partner_shipping_id')
  • set_delivery_line(self, carrier, amount)

New fields (3)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits='Product Unit of Measure' string='Product Qty'
  • recompute_delivery_price Boolean
    related='order_id.recompute_delivery_price'
Public methods (1)
  • unlink(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales/Delivery
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Denis Ledoux, Fabien Meghazi, Christophe Simonis, Xavier Morel, Goffin Simon, qdp-odoo, Damien Bouvy, Yannick Tivisse, Odoo Online, Pierre Masereel, Jorge Pinna Puissant, Arnold Moyaux, Denis Roussel, Victor Feyens, Anh Thao Pham (pta), Touati Djamel (otd), Tiffany Chang (tic), Gorash, Pierre Paridans, Stefan-Calin Crainiciuc (stcc), pedrambiria, PNO, bat-odoo, Demesmaeker, Aurelien van Delft (avd), Achraf, Valentin Chevalier, niyasraphy, Loan (LSE), Louis Wicket (wil), Walid, Adrien Widart (awt), Pieter Claeys (clpi), Valentin Vallaeys (vava), Dylan Kiss (dyki), ノウラ, kir-odoo, Chong Wang (cwg), prye-odoo, Martin Maes, Ahmed Khalaf, Anita (anko), Youssef Bashandy, Eteil Djoumatchoua(etdj), lase@odoo.com, Eteil Djoumatchoua (etdj), Nathaniel (naja), vava-odoo, Julien Carion (juca), Emilio Pascual, Louis (wil), Mathias Mathy (MAMA), Michael Jurke, Eliott Loop (oplo-odoo)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders.
==================================================
You can define your own carrier for prices.
The system is able to add and compute the shipping line.

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
choose_delivery_carrier_view_form choose.delivery.carrier.form choose.delivery.carrier form New
delivery_report_saleorder_document delivery_report_saleorder_document ir.ui.view qweb Inherits sale.report_saleorder_document
res_config_settings_view_form res.config.settings.view.form.inherit.delivery res.config.settings setting Inherits sale.res_config_settings_view_form
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.tree delivery.price.rule tree New
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order field Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner group Inherits base.view_partner_form
Models touched (8)

New fields (13)
  • available_carrier_ids Many2many → delivery.carrier
    compute='_compute_available_carrier' string='Available Carriers' args: 'delivery.carrier'
  • carrier_id Many2one → delivery.carrier
    required=True string='Shipping Method' args: 'delivery.carrier'
  • company_id Many2one → res.company
    related='order_id.company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    related='order_id.currency_id' args: 'res.currency'
  • delivery_message Text
    readonly=True
  • delivery_price Float
  • delivery_type Selection
    related='carrier_id.delivery_type'
  • display_price Float
    readonly=True string='Cost'
  • invoicing_message Text
    compute='_compute_invoicing_message'
  • order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order'
  • partner_id Many2one → res.partner
    related='order_id.partner_id' required=True args: 'res.partner'
  • total_weight Float
    readonly=False related='order_id.shipping_weight' string='Total Order Weight'
  • weight_uom_name Char
    default=_get_default_weight_uom readonly=True
Public methods (2)
  • button_confirm(self)
  • update_price(self)

New fields (26)
  • active Boolean
    default=True
  • amount Float
    default=1000 help='Amount of the order to benefit from a free shipping, expressed in the company currency' string='Amount'
  • can_generate_return Boolean
    compute='_compute_can_generate_return'
  • carrier_description Text
    help='A description of the delivery method that you want to communicate to your customers on the Sales Order and sales confirmation email.E.g. instructions for customers to follow.' translate=True args: 'Carrier Description'
  • company_id Many2one → res.company
    readonly=False related='product_id.company_id' store=True string='Company' args: 'res.company'
  • country_ids Many2many → res.country
    args: 'res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries'
  • currency_id Many2one
    related='product_id.currency_id'
  • debug_logging Boolean
    help='Log requests in order to ease debugging' args: 'Debug logging'
  • delivery_type Selection
    default='fixed' required=True string='Provider' args: [('base_on_rule', 'Based on Rules'), ('fixed', 'Fixed Price')]
  • fixed_margin Float
    help='This fixed amount will be added to the shipping price.'
  • fixed_price Float
    compute='_compute_fixed_price' inverse='_set_product_fixed_price' store=True string='Fixed Price'
  • free_over Boolean
    default=False help='If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping' args: 'Free if order amount is above'
  • get_return_label_from_portal Boolean
    help='The return label can be downloaded by the customer from the customer portal.' string='Return Label Accessible from Customer Portal'
  • integration_level Selection
    default='rate_and_ship' help='Action while validating Delivery Orders' string='Integration Level' args: [('rate', 'Get Rate'), ('rate_and_ship', 'Get Rate and Create Shipment')]
  • invoice_policy Selection
    default='estimated' help='Estimated Cost: the customer will be invoiced the estimated cost of the shipping.' required=True selection=[('estimated', 'Estimated cost')] string='Invoicing Policy'
  • margin Float
    help='This percentage will be added to the shipping price.'
  • name Char
    required=True translate=True args: 'Delivery Method'
  • price_rule_ids One2many → delivery.price.rule
    copy=True args: 'delivery.price.rule', 'carrier_id', 'Pricing Rules'
  • prod_environment Boolean
    help='Set to True if your credentials are certified for production.' args: 'Environment'
  • product_id Many2one → product.product
    ondelete='restrict' required=True string='Delivery Product' args: 'product.product'
  • return_label_on_delivery Boolean
    help='The return label is automatically generated at the delivery.' string='Generate Return Label'
  • sequence Integer
    default=10 help='Determine the display order'
  • shipping_insurance Integer
    default=0 help='Shipping insurance is a service which may reimburse senders whose parcels are lost, stolen, and/or damaged in transit.' args: 'Insurance Percentage'
  • state_ids Many2many → res.country.state
    args: 'res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States'
  • supports_shipping_insurance Boolean
    compute='_compute_supports_shipping_insurance'
  • zip_prefix_ids Many2many → delivery.zip.prefix
    help="Prefixes of zip codes that this carrier applies to. Note that regular expressions can be used to support countries with varying zip code lengths, i.e. '$' can be added to end of prefix to match the exact zip (e.g. '100$' will only match '100' and not '1000')" args: 'delivery.zip.prefix', 'delivery_zip_prefix_rel', 'carrier_id', 'zip_prefix_id', 'Zip Prefixes'
Public methods (9)
  • available_carriers(self, partner)
  • base_on_rule_rate_shipment(self, order)
  • copy(self, default=None)
  • fixed_rate_shipment(self, order)
  • install_more_provider(self)
  • log_xml(self, xml_string, func)
  • rate_shipment(self, order)
    Compute the price of the order shipment :param order: record of sale.order :return dict: {'success': boolean, 'price': a float, 'error_message': a string containing an error message, 'warning_message': a string containing a warning message} # TODO maybe the currency code?
  • toggle_debug(self)
  • toggle_prod_environment(self)

New fields (10)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • currency_id Many2one
    related='carrier_id.currency_id'
  • list_base_price Float
    default=0.0 digits='Product Price' required=True string='Sale Base Price'
  • list_price Float
    default=0.0 digits='Product Price' required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_compute_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')]
  • sequence Integer
    default=10 required=True
  • variable Selection
    default='quantity' required=True selection=VARIABLE_SELECTION
  • variable_factor Selection
    default='weight' required=True selection=VARIABLE_SELECTION string='Variable Factor'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True args: 'Prefix'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='Default delivery method used in sales orders.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (7)
  • carrier_id Many2one → delivery.carrier
    check_company=True help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_message Char
    copy=False readonly=True
  • delivery_rating_success Boolean
    copy=False
  • delivery_set Boolean
    compute='_compute_delivery_state'
  • is_all_service Boolean
    compute='_compute_is_service_products' args: 'Service Product'
  • recompute_delivery_price Boolean
    args: 'Delivery cost should be recomputed'
  • shipping_weight Float
    compute='_compute_shipping_weight' readonly=False store=True args: 'Shipping Weight'
Public methods (3)
  • action_open_delivery_wizard(self)
  • onchange_order_line(self)
    @api.onchange('order_line', 'partner_id', 'partner_shipping_id')
  • set_delivery_line(self, carrier, amount)

New fields (3)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits='Product Unit of Measure' string='Product Qty'
  • recompute_delivery_price Boolean
    related='order_id.recompute_delivery_price'
Public methods (1)
  • unlink(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYInventory/Delivery
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Denis Ledoux, Fabien Meghazi, Christophe Simonis, Goffin Simon, Damien Bouvy, Wolfgang Taferner, Yannick Tivisse, Christophe Monniez, Arnold Moyaux, Denis Roussel, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), William Henrotin, Florent de Labarre, svs-odoo, Adrien Widart, Touati Djamel (otd), Tiffany Chang (tic), Ivàn Todorovich, pedrambiria, Ahmad Khanalizadeh, momegahed, william-andre, Julien Van Roy, Víctor Martínez, Florian Damhaut, PNO, aliya, bat-odoo, anhe-odoo, Walid HANNICHE (waha), Yolann Sabaux, Demesmaeker, Aurelien van Delft (avd), Mathieu Walravens, Achraf, niyasraphy, Rodrigo, Iván Todorovich, Loan (LSE), Gaetan Vanden Bergh (gavb), Walid, Adrien Widart (awt), Hamza (hisl), Julien (jula), Djamel Touati, Pieter Claeys (clpi), Michael Tietz, ノウラ, kir-odoo, prye-odoo, Anita (anko), Ahmed Khalaf (ahkh), adda-odoo, Eteil Djoumatchoua(etdj), boan-odoo, Ethan Vincent, lase@odoo.com, Eteil Djoumatchoua (etdj), Nathaniel (naja), vava-odoo, Emilio Pascual, Arthur Gossuin (goa), Mohammad Abdulmoneim (abdu), ticodoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier for prices. When creating
invoices from picking, the system is able to add and compute the shipping line.

Code Analysis

Views touched (33)
XML IDNameModelTypeStatus
choose_delivery_carrier_view_form choose.delivery.carrier.form choose.delivery.carrier form New
choose_delivery_package_view_form choose.delivery.package.form choose.delivery.package form New
delivery_report_saleorder_document delivery_report_saleorder_document ir.ui.view qweb Inherits sale.report_saleorder_document
delivery_stock_report_delivery_no_package_section_line delivery_stock_report_delivery_no_package_section_line ir.ui.view qweb Inherits stock.stock_report_delivery_no_package_section_line
delivery_tracking_url_warning_form delivery.carrier.warning.url.form stock.picking form New
label_package_template_view_delivery label_package_template_view_delivery ir.ui.view qweb Inherits stock.label_package_template_view
product_template_hs_code product.template.form.hs_code product.template xpath Inherits product.product_template_form_view
report_delivery_document2 report_delivery_document2 ir.ui.view qweb Inherits stock.report_delivery_document
report_package_barcode_delivery report_package_barcode_delivery ir.ui.view qweb Inherits stock.report_package_barcode
report_package_barcode_small_delivery report_package_barcode_small_delivery ir.ui.view qweb Inherits stock.report_package_barcode_small
report_shipping2 report_shipping2 ir.ui.view qweb Inherits stock.report_picking
res_config_settings_view_form res.config.settings.view.form.inherit.delivery res.config.settings xpath Inherits sale.res_config_settings_view_form
sale_order_portal_content_inherit_sale_stock_inherit_website_sale_delivery Shipping tracking on orders followup ir.ui.view qweb Inherits sale_stock.sale_order_portal_content_inherit_sale_stock
stock_move_line_view_search_delivery stock.move.line.search.delivery stock.move.line xpath Inherits stock.stock_move_line_view_search
stock_package_type_form_delivery stock.package.type.form.delivery stock.package.type xpath Inherits stock.stock_package_type_form
stock_package_type_tree_delivery stock.package.type.tree.delivery stock.package.type xpath Inherits stock.stock_package_type_tree
stock_report_delivery_aggregated_move_lines_inherit_delivery stock_report_delivery_aggregated_move_lines_inherit_delivery ir.ui.view qweb Inherits stock.stock_report_delivery_aggregated_move_lines
stock_report_delivery_has_serial_move_line_inherit_delivery stock_report_delivery_has_serial_move_line_inherit_delivery ir.ui.view qweb Inherits stock.stock_report_delivery_has_serial_move_line
stock_report_delivery_package_section_line_inherit_delivery stock_report_delivery_package_section_line_inherit_delivery ir.ui.view qweb Inherits stock.stock_report_delivery_package_section_line
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.tree delivery.price.rule tree New
view_move_line_tree_detailed_delivery stock.move.line.tree.detailed stock.move.line xpath Inherits stock.view_move_line_tree_detailed
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order data Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner group Inherits base.view_partner_form
view_picking_type_form_delivery stock.picking.type.tree.delivery stock.picking.type xpath Inherits stock.view_picking_type_form
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.form.view stock.picking data Inherits stock.view_picking_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.move xpath Inherits stock.view_move_form
view_quant_package_weight_form stock.quant.package.weight.form stock.quant.package field Inherits stock.view_quant_package_form
view_stock_rule_form_delivery stock.rule.tree.delivery stock.rule xpath Inherits stock.view_stock_rule_form
vpicktree_view_tree stock.picking.delivery.tree.inherit.delivery stock.picking xpath Inherits stock.vpicktree
Models touched (17)

New fields (11)
  • available_carrier_ids Many2many → delivery.carrier
    compute='_compute_available_carrier' string='Available Carriers' args: 'delivery.carrier'
  • carrier_id Many2one → delivery.carrier
    required=True string='Shipping Method' args: 'delivery.carrier'
  • company_id Many2one → res.company
    related='order_id.company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    related='order_id.currency_id' args: 'res.currency'
  • delivery_message Text
    readonly=True
  • delivery_price Float
  • delivery_type Selection
    related='carrier_id.delivery_type'
  • display_price Float
    readonly=True string='Cost'
  • invoicing_message Text
    compute='_compute_invoicing_message'
  • order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order'
  • partner_id Many2one → res.partner
    related='order_id.partner_id' required=True args: 'res.partner'
Public methods (2)
  • button_confirm(self)
  • update_price(self)

New fields (5)
  • company_id Many2one
    related='picking_id.company_id'
  • delivery_package_type_id Many2one → stock.package.type
    check_company=True args: 'stock.package.type', 'Delivery Package Type'
  • picking_id Many2one → stock.picking
    args: 'stock.picking', 'Picking'
  • shipping_weight Float
    compute='_compute_shipping_weight' readonly=False store=True args: 'Shipping Weight'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' string='Weight unit of measure label'
Public methods (1)
  • action_put_in_pack(self)

New fields (2)
  • delivery_type Selection
    ondelete={'base_on_rule': <expr>} selection_add=[('base_on_rule', 'Based on Rules')]
  • price_rule_ids One2many → delivery.price.rule
    copy=True args: 'delivery.price.rule', 'carrier_id', 'Pricing Rules'
Public methods (4)
  • base_on_rule_cancel_shipment(self, pickings)
  • base_on_rule_get_tracking_link(self, picking)
  • base_on_rule_rate_shipment(self, order)
  • base_on_rule_send_shipping(self, pickings)

New fields (23)
  • active Boolean
    default=True
  • amount Float
    help='Amount of the order to benefit from a free shipping, expressed in the company currency' string='Amount'
  • can_generate_return Boolean
    compute='_compute_can_generate_return'
  • carrier_description Text
    help='A description of the delivery method that you want to communicate to your customers on the Sales Order and sales confirmation email.E.g. instructions for customers to follow.' translate=True args: 'Carrier Description'
  • company_id Many2one → res.company
    readonly=False related='product_id.company_id' store=True string='Company' args: 'res.company'
  • country_ids Many2many → res.country
    args: 'res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries'
  • debug_logging Boolean
    help='Log requests in order to ease debugging' args: 'Debug logging'
  • delivery_type Selection
    default='fixed' required=True string='Provider' args: [('fixed', 'Fixed Price')]
  • fixed_price Float
    compute='_compute_fixed_price' inverse='_set_product_fixed_price' store=True string='Fixed Price'
  • free_over Boolean
    default=False help='If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping' args: 'Free if order amount is above'
  • get_return_label_from_portal Boolean
    help='The return label can be downloaded by the customer from the customer portal.' string='Return Label Accessible from Customer Portal'
  • integration_level Selection
    default='rate_and_ship' help='Action while validating Delivery Orders' string='Integration Level' args: [('rate', 'Get Rate'), ('rate_and_ship', 'Get Rate and Create Shipment')]
  • invoice_policy Selection
    default='estimated' help='Estimated Cost: the customer will be invoiced the estimated cost of the shipping.\nReal Cost: the customer will be invoiced the real cost of the shipping, the cost of the shipping will be updated on the SO after the delivery.' required=True string='Invoicing Policy' args: [('estimated', 'Estimated cost'), ('real', 'Real cost')]
  • margin Float
    help='This percentage will be added to the shipping price.'
  • name Char
    required=True translate=True args: 'Delivery Method'
  • prod_environment Boolean
    help='Set to True if your credentials are certified for production.' args: 'Environment'
  • product_id Many2one → product.product
    ondelete='restrict' required=True string='Delivery Product' args: 'product.product'
  • return_label_on_delivery Boolean
    help='The return label is automatically generated at the delivery.' string='Generate Return Label'
  • sequence Integer
    default=10 help='Determine the display order'
  • shipping_insurance Integer
    default=0 help='Shipping insurance is a service which may reimburse senders whose parcels are lost, stolen, and/or damaged in transit.' args: 'Insurance Percentage'
  • state_ids Many2many → res.country.state
    args: 'res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States'
  • supports_shipping_insurance Boolean
    compute='_compute_supports_shipping_insurance'
  • zip_prefix_ids Many2many → delivery.zip.prefix
    help="Prefixes of zip codes that this carrier applies to. Note that regular expressions can be used to support countries with varying zip code lengths, i.e. '$' can be added to end of prefix to match the exact zip (e.g. '100$' will only match '100' and not '1000')" args: 'delivery.zip.prefix', 'delivery_zip_prefix_rel', 'carrier_id', 'zip_prefix_id', 'Zip Prefixes'
Public methods (17)
  • available_carriers(self, partner)
  • cancel_shipment(self, pickings)
    Cancel a shipment :param pickings: A recordset of pickings
  • fixed_cancel_shipment(self, pickings)
  • fixed_get_tracking_link(self, picking)
  • fixed_rate_shipment(self, order)
  • fixed_send_shipping(self, pickings)
  • get_return_label(self, pickings, tracking_number=None, origin_date=None)
  • get_return_label_prefix(self)
  • get_tracking_link(self, picking)
    Ask the tracking link to the service provider :param picking: record of stock.picking :return str: an URL containing the tracking link or False
  • install_more_provider(self)
  • log_xml(self, xml_string, func)
  • onchange_countries(self)
    @api.onchange('country_ids')
  • onchange_states(self)
    @api.onchange('state_ids')
  • rate_shipment(self, order)
    Compute the price of the order shipment :param order: record of sale.order :return dict: {'success': boolean, 'price': a float, 'error_message': a string containing an error message, 'warning_message': a string containing a warning message} # TODO maybe the currency code?
  • send_shipping(self, pickings)
    Send the package to the service provider :param pickings: A recordset of pickings :return list: A list of dictionaries (one per picking) containing of the form:: { 'exact_price': price, 'tracking_number': number } # TODO missing labels per package # TODO missing currency # TODO missing success, error, warnings
  • toggle_debug(self)
  • toggle_prod_environment(self)

New fields (9)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • list_base_price Float
    default=0.0 digits='Product Price' required=True string='Sale Base Price'
  • list_price Float
    default=0.0 digits='Product Price' required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_compute_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')]
  • sequence Integer
    default=10 required=True
  • variable Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')]
  • variable_factor Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')], 'Variable Factor'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True args: 'Prefix'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • country_of_origin Many2one → res.country
    help="Rules of origin determine where goods originate, i.e. not where they have been shipped from, but where they have been produced or manufactured.\nAs such, the ‘origin’ is the 'economic nationality' of goods traded in commerce." args: 'res.country', 'Origin of Goods'
  • hs_code Char
    help='Standardized code for international shipping and goods declaration. At the moment, only used for FedEx and USPS shipping providers.' string='HS Code'
Public methods (0)

No public methods.

New fields (1)
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='Default delivery method used in sales orders.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_message Char
    copy=False readonly=True
  • delivery_rating_success Boolean
    copy=False
  • delivery_set Boolean
    compute='_compute_delivery_state'
  • is_all_service Boolean
    compute='_compute_is_service_products' args: 'Service Product'
  • recompute_delivery_price Boolean
    args: 'Delivery cost should be recomputed'
Public methods (3)
  • action_open_delivery_wizard(self)
  • onchange_order_line(self)
    @api.onchange('order_line', 'partner_id', 'partner_shipping_id')
  • set_delivery_line(self, carrier, amount)

New fields (3)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits='Product Unit of Measure' string='Product Qty'
  • recompute_delivery_price Boolean
    related='order_id.recompute_delivery_price'
Public methods (1)
  • unlink(self)

New fields (1)
  • weight Float
    compute='_cal_move_weight' compute_sudo=True digits='Stock Weight' store=True
Public methods (0)

No public methods.

New fields (4)
  • carrier_id Many2one
    related='picking_id.carrier_id'
  • carrier_name Char
    readonly=True related='picking_id.carrier_id.name' store=True string='Carrier Name'
  • destination_country_code Char
    related='picking_id.destination_country_code'
  • sale_price Float
    compute='_compute_sale_price'
Public methods (0)

No public methods.

New fields (2)
  • package_carrier_type Selection
    default='none' string='Carrier' args: [('none', 'No carrier integration')]
  • shipper_package_code Char
    args: 'Carrier Code'
Public methods (0)

No public methods.

New fields (13)
  • carrier_id Many2one → delivery.carrier
    check_company=True string='Carrier' args: 'delivery.carrier'
  • carrier_price Float
    string='Shipping Cost'
  • carrier_tracking_ref Char
    copy=False string='Tracking Reference'
  • carrier_tracking_url Char
    compute='_compute_carrier_tracking_url' string='Tracking URL'
  • delivery_type Selection
    readonly=True related='carrier_id.delivery_type'
  • destination_country_code Char
    related='partner_id.country_id.code' string='Destination Country'
  • is_return_picking Boolean
    compute='_compute_return_picking'
  • package_ids Many2many → stock.quant.package
    compute='_compute_packages' string='Packages' args: 'stock.quant.package'
  • return_label_ids One2many → ir.attachment
    compute='_compute_return_label' args: 'ir.attachment'
  • shipping_weight Float
    compute='_compute_shipping_weight' help="Total weight of packages and products not in a package. Packages with no shipping weight specified will default to their products' total weight. This is the weight used to compute the cost of the shipping." args: 'Weight for Shipping'
  • weight Float
    compute='_cal_weight' compute_sudo=True digits='Stock Weight' help='Total weight of the products in the picking.' store=True
  • weight_bulk Float
    compute='_compute_bulk_weight' help='Total weight of products which are not in a package.' args: 'Bulk Weight'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom readonly=True string='Weight unit of measure label'
Public methods (5)
  • cancel_shipment(self)
  • get_multiple_carrier_tracking(self)
  • open_website_url(self)
  • print_return_label(self)
  • send_to_shipper(self)

New fields (5)
  • shipping_weight Float
    help='Total weight of the package.' string='Shipping Weight'
  • weight Float
    compute='_compute_weight' digits='Stock Weight' help='Total weight of all the products contained in the package.'
  • weight_is_kg Boolean
    compute='_compute_weight_is_kg' args: 'Technical field indicating whether weight uom is kg or not (i.e. lb)'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom readonly=True string='Weight unit of measure label'
  • weight_uom_rounding Float
    compute='_compute_weight_is_kg' args: "Technical field indicating weight's number of decimal places"
Public methods (0)

No public methods.

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/15.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYInventory/Delivery
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Josse Colpaert, Christophe Simonis, Goffin Simon, Nicolas Martinelli, Jeremy Kersten, Barad Mahendra, Wolfgang Taferner, Yannick Tivisse, Dharmraj Jhala, Arnold Moyaux, Xavier-Do, Denis Roussel, Victor Feyens, Andrea Grazioso (agr-odoo), William Henrotin, Nasreddin (bon), Florent de Labarre, Anh Thao Pham (pta), Adrien Widart, Touati Djamel (otd), Swapnesh Shah, Tiffany Chang (tic), IEL, Julien CHEVREAU (JCU), Kevin Baptiste, Pratima Gupta, momegahed, william-andre, Víctor Martínez, Florian Damhaut, PNO, yhu-odoo, bat-odoo, anhe-odoo, Yolann Sabaux, Jinjiu Liu, Demesmaeker, Aurelien van Delft (avd), Michael Mattiello (mcm), Mathieu Walravens, Walid, Adrien Widart (awt), Tommy (tong), Julien (jula), Djamel Touati, ノウラ, kir-odoo, Gitashri Mantha(gman), Ethan Vincent, Eteil Djoumatchoua (etdj), vava-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
    - stock_account
    - stock
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier for prices. When creating
invoices from picking, the system is able to add and compute the shipping line.

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
choose_delivery_carrier_view_form choose.delivery.carrier.form choose.delivery.carrier form New
choose_delivery_package_view_form choose.delivery.package.form choose.delivery.package form New
delivery_stock_report_delivery_no_package_section_line delivery_stock_report_delivery_no_package_section_line ir.ui.view qweb Inherits stock.stock_report_delivery_no_package_section_line
delivery_tracking_url_warning_form delivery.carrier.warning.url.form stock.picking form New
product_template_hs_code product.template.form.hs_code product.template xpath Inherits product.product_template_form_view
report_delivery_document2 report_delivery_document2 ir.ui.view qweb Inherits stock.report_delivery_document
report_package_barcode_delivery report_package_barcode_delivery ir.ui.view qweb Inherits stock.report_package_barcode
report_package_barcode_small_delivery report_package_barcode_small_delivery ir.ui.view qweb Inherits stock.report_package_barcode_small
report_shipping2 report_shipping2 ir.ui.view qweb Inherits stock.report_picking
res_config_settings_view_form res.config.settings.view.form.inherit.delivery res.config.settings xpath Inherits sale.res_config_settings_view_form
sale_order_portal_content_inherit_sale_stock_inherit_website_sale_delivery Shipping tracking on orders followup ir.ui.view qweb Inherits sale_stock.sale_order_portal_content_inherit_sale_stock
stock_package_type_form_delivery stock.package.type.form.delivery stock.package.type xpath Inherits stock.stock_package_type_form
stock_package_type_tree_delivery stock.package.type.tree.delivery stock.package.type xpath Inherits stock.stock_package_type_tree
stock_report_delivery_aggregated_move_lines_inherit_delivery stock_report_delivery_aggregated_move_lines_inherit_delivery ir.ui.view qweb Inherits stock.stock_report_delivery_aggregated_move_lines
stock_report_delivery_has_serial_move_line_inherit_delivery stock_report_delivery_has_serial_move_line_inherit_delivery ir.ui.view qweb Inherits stock.stock_report_delivery_has_serial_move_line
stock_report_delivery_package_section_line_inherit_delivery stock_report_delivery_package_section_line_inherit_delivery ir.ui.view qweb Inherits stock.stock_report_delivery_package_section_line
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.tree delivery.price.rule tree New
view_move_line_tree_detailed_delivery stock.move.line.tree.detailed stock.move.line xpath Inherits stock.view_move_line_tree_detailed
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order data Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner group Inherits base.view_partner_form
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.form.view stock.picking data Inherits stock.view_picking_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.move xpath Inherits stock.view_move_form
view_quant_package_weight_form stock.quant.package.weight.form stock.quant.package field Inherits stock.view_quant_package_form
vpicktree_view_tree stock.picking.delivery.tree.inherit.delivery stock.picking xpath Inherits stock.vpicktree
Models touched (16)

New fields (11)
  • available_carrier_ids Many2many → delivery.carrier
    compute='_compute_available_carrier' string='Available Carriers' args: 'delivery.carrier'
  • carrier_id Many2one → delivery.carrier
    help='Choose the method to deliver your goods' required=True string='Shipping Method' args: 'delivery.carrier'
  • company_id Many2one → res.company
    related='order_id.company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    related='order_id.currency_id' args: 'res.currency'
  • delivery_message Text
    readonly=True
  • delivery_price Float
  • delivery_type Selection
    related='carrier_id.delivery_type'
  • display_price Float
    readonly=True string='Cost'
  • invoicing_message Text
    compute='_compute_invoicing_message'
  • order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order'
  • partner_id Many2one → res.partner
    related='order_id.partner_id' required=True args: 'res.partner'
Public methods (2)
  • button_confirm(self)
  • update_price(self)

New fields (5)
  • company_id Many2one
    related='picking_id.company_id'
  • delivery_package_type_id Many2one → stock.package.type
    check_company=True args: 'stock.package.type', 'Delivery Package Type'
  • picking_id Many2one → stock.picking
    args: 'stock.picking', 'Picking'
  • shipping_weight Float
    args: 'Shipping Weight'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' string='Weight unit of measure label'
Public methods (2)
  • action_put_in_pack(self)
  • default_get(self, fields_list)
    @api.model

New fields (2)
  • delivery_type Selection
    ondelete={'base_on_rule': <expr>} selection_add=[('base_on_rule', 'Based on Rules')]
  • price_rule_ids One2many → delivery.price.rule
    copy=True args: 'delivery.price.rule', 'carrier_id', 'Pricing Rules'
Public methods (4)
  • base_on_rule_cancel_shipment(self, pickings)
  • base_on_rule_get_tracking_link(self, picking)
  • base_on_rule_rate_shipment(self, order)
  • base_on_rule_send_shipping(self, pickings)

New fields (21)
  • active Boolean
    default=True
  • amount Float
    help='Amount of the order to benefit from a free shipping, expressed in the company currency' string='Amount'
  • can_generate_return Boolean
    compute='_compute_can_generate_return'
  • company_id Many2one → res.company
    readonly=False related='product_id.company_id' store=True string='Company' args: 'res.company'
  • country_ids Many2many → res.country
    args: 'res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries'
  • debug_logging Boolean
    help='Log requests in order to ease debugging' args: 'Debug logging'
  • delivery_type Selection
    default='fixed' required=True string='Provider' args: [('fixed', 'Fixed Price')]
  • fixed_price Float
    compute='_compute_fixed_price' inverse='_set_product_fixed_price' store=True string='Fixed Price'
  • free_over Boolean
    default=False help='If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping' args: 'Free if order amount is above'
  • get_return_label_from_portal Boolean
    help='The return label can be downloaded by the customer from the customer portal.' string='Return Label Accessible from Customer Portal'
  • integration_level Selection
    default='rate_and_ship' help='Action while validating Delivery Orders' string='Integration Level' args: [('rate', 'Get Rate'), ('rate_and_ship', 'Get Rate and Create Shipment')]
  • invoice_policy Selection
    default='estimated' help='Estimated Cost: the customer will be invoiced the estimated cost of the shipping.\nReal Cost: the customer will be invoiced the real cost of the shipping, the cost of the shipping will be updated on the SO after the delivery.' required=True string='Invoicing Policy' args: [('estimated', 'Estimated cost'), ('real', 'Real cost')]
  • margin Float
    help='This percentage will be added to the shipping price.'
  • name Char
    required=True translate=True args: 'Delivery Method'
  • prod_environment Boolean
    help='Set to True if your credentials are certified for production.' args: 'Environment'
  • product_id Many2one → product.product
    ondelete='restrict' required=True string='Delivery Product' args: 'product.product'
  • return_label_on_delivery Boolean
    help='The return label is automatically generated at the delivery.' string='Generate Return Label'
  • sequence Integer
    default=10 help='Determine the display order'
  • state_ids Many2many → res.country.state
    args: 'res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States'
  • zip_from Char
    args: 'Zip From'
  • zip_to Char
    args: 'Zip To'
Public methods (17)
  • available_carriers(self, partner)
  • cancel_shipment(self, pickings)
    Cancel a shipment :param pickings: A recordset of pickings
  • fixed_cancel_shipment(self, pickings)
  • fixed_get_tracking_link(self, picking)
  • fixed_rate_shipment(self, order)
  • fixed_send_shipping(self, pickings)
  • get_return_label(self, pickings, tracking_number=None, origin_date=None)
  • get_return_label_prefix(self)
  • get_tracking_link(self, picking)
    Ask the tracking link to the service provider :param picking: record of stock.picking :return str: an URL containing the tracking link or False
  • install_more_provider(self)
  • log_xml(self, xml_string, func)
  • onchange_countries(self)
    @api.onchange('country_ids')
  • onchange_states(self)
    @api.onchange('state_ids')
  • rate_shipment(self, order)
    Compute the price of the order shipment :param order: record of sale.order :return dict: {'success': boolean, 'price': a float, 'error_message': a string containing an error message, 'warning_message': a string containing a warning message} # TODO maybe the currency code?
  • send_shipping(self, pickings)
    Send the package to the service provider :param pickings: A recordset of pickings :return list: A list of dictionaries (one per picking) containing of the form:: { 'exact_price': price, 'tracking_number': number } # TODO missing labels per package # TODO missing currency # TODO missing success, error, warnings
  • toggle_debug(self)
  • toggle_prod_environment(self)

New fields (9)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • list_base_price Float
    default=0.0 digits='Product Price' required=True string='Sale Base Price'
  • list_price Float
    default=0.0 digits='Product Price' required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_compute_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')]
  • sequence Integer
    default=10 required=True
  • variable Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')]
  • variable_factor Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')], 'Variable Factor'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • hs_code Char
    help='Standardized code for international shipping and goods declaration. At the moment, only used for the FedEx shipping provider.' string='HS Code'
Public methods (0)

No public methods.

New fields (1)
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='Default delivery method used in sales orders.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_message Char
    copy=False readonly=True
  • delivery_rating_success Boolean
    copy=False
  • delivery_set Boolean
    compute='_compute_delivery_state'
  • is_all_service Boolean
    compute='_compute_is_service_products' args: 'Service Product'
  • recompute_delivery_price Boolean
    args: 'Delivery cost should be recomputed'
Public methods (3)
  • action_open_delivery_wizard(self)
  • onchange_order_line(self)
    @api.onchange('order_line', 'partner_id', 'partner_shipping_id')
  • set_delivery_line(self, carrier, amount)

New fields (3)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits='Product Unit of Measure' string='Product Qty'
  • recompute_delivery_price Boolean
    related='order_id.recompute_delivery_price'
Public methods (1)
  • unlink(self)

New fields (1)
  • weight Float
    compute='_cal_move_weight' compute_sudo=True digits='Stock Weight' store=True
Public methods (0)

No public methods.

New fields (3)
  • carrier_id Many2one
    related='picking_id.carrier_id'
  • destination_country_code Char
    related='picking_id.destination_country_code'
  • sale_price Float
    compute='_compute_sale_price'
Public methods (0)

No public methods.

New fields (2)
  • package_carrier_type Selection
    default='none' string='Carrier' args: [('none', 'No carrier integration')]
  • shipper_package_code Char
    args: 'Carrier Code'
Public methods (0)

No public methods.

New fields (13)
  • carrier_id Many2one → delivery.carrier
    check_company=True string='Carrier' args: 'delivery.carrier'
  • carrier_price Float
    string='Shipping Cost'
  • carrier_tracking_ref Char
    copy=False string='Tracking Reference'
  • carrier_tracking_url Char
    compute='_compute_carrier_tracking_url' string='Tracking URL'
  • delivery_type Selection
    readonly=True related='carrier_id.delivery_type'
  • destination_country_code Char
    related='partner_id.country_id.code' string='Destination Country'
  • is_return_picking Boolean
    compute='_compute_return_picking'
  • package_ids Many2many → stock.quant.package
    compute='_compute_packages' string='Packages' args: 'stock.quant.package'
  • return_label_ids One2many → ir.attachment
    compute='_compute_return_label' args: 'ir.attachment'
  • shipping_weight Float
    compute='_compute_shipping_weight' help="Total weight of packages and products not in a package. Packages with no shipping weight specified will default to their products' total weight. This is the weight used to compute the cost of the shipping." args: 'Weight for Shipping'
  • weight Float
    compute='_cal_weight' compute_sudo=True digits='Stock Weight' help='Total weight of the products in the picking.' store=True
  • weight_bulk Float
    compute='_compute_bulk_weight' help='Total weight of products which are not in a package.' args: 'Bulk Weight'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom readonly=True string='Weight unit of measure label'
Public methods (5)
  • cancel_shipment(self)
  • get_multiple_carrier_tracking(self)
  • open_website_url(self)
  • print_return_label(self)
  • send_to_shipper(self)

New fields (3)
  • shipping_weight Float
    help='Total weight of the package.' string='Shipping Weight'
  • weight Float
    compute='_compute_weight' help='Total weight of all the products contained in the package.'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom readonly=True string='Weight unit of measure label'
Public methods (0)

No public methods.

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/14.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYInventory/Delivery
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Josse Colpaert, Christophe Simonis, Goffin Simon, Simon Lejeune, Nicolas Martinelli, qdp-odoo, Jeremy Kersten, GitHub, Wolfgang Taferner, Yannick Tivisse, Pierre Masereel, Laurent Smet, Alexandre Kühn, Julien Castiaux, Antoine Prieels, Xavier-Do, jerome hanke (jhk), Victor Feyens, Andrea Grazioso (agr-odoo), Joseph Caburnay, Nasreddin (bon), Florent de Labarre, fw-bot, Anh Thao Pham (pta), svs-odoo, Lucas Lefèvre, Adrien Widart, Touati Djamel (otd), Swapnesh Shah, Tiffany Chang (tic), IEL, Rémy Voet (ryv), Julien CHEVREAU (JCU), Robin Heinz, Miquel Raïch, momegahed, prro-odoo, Víctor Martínez, Florian Damhaut, PNO, yhu-odoo, mafo-odoo, william, bat-odoo, anhe-odoo, Antoine Vandevenne (anv), Jinjiu Liu, Demesmaeker, Aurelien van Delft (avd), Mathieu Walravens, Adrien Widart (awt), Tommy (tong), ノウラ, kir-odoo, Pedro Manuel Calheiros Lima de Sousa (peso), Gitashri Mantha(gman)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
    - stock_account
    - stock
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier for prices. When creating
invoices from picking, the system is able to add and compute the shipping line.

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
choose_delivery_carrier_view_form choose.delivery.carrier.form choose.delivery.carrier form New
choose_delivery_package_view_form choose.delivery.package.form choose.delivery.package form New
delivery_stock_report_delivery_no_package_section_line delivery_stock_report_delivery_no_package_section_line ir.ui.view qweb Inherits stock.stock_report_delivery_no_package_section_line
delivery_tracking_url_warning_form delivery.carrier.warning.url.form stock.picking form New
product_packaging_delivery_form product.packaging.form.delivery product.packaging form New
product_packaging_delivery_tree product.packaging.tree.delivery product.packaging tree New
product_template_hs_code product.template.form.hs_code product.template xpath Inherits product.product_template_form_view
report_delivery_document2 report_delivery_document2 ir.ui.view qweb Inherits stock.report_delivery_document
report_package_barcode_delivery report_package_barcode_delivery ir.ui.view qweb Inherits stock.report_package_barcode
report_package_barcode_small_delivery report_package_barcode_small_delivery ir.ui.view qweb Inherits stock.report_package_barcode_small
report_shipping2 report_shipping2 ir.ui.view qweb Inherits stock.report_picking
res_config_settings_view_form res.config.settings.view.form.inherit.delivery res.config.settings xpath Inherits sale.res_config_settings_view_form
sale_order_portal_content_inherit_sale_stock_inherit_website_sale_delivery Shipping tracking on orders followup ir.ui.view qweb Inherits sale_stock.sale_order_portal_content_inherit_sale_stock
stock_report_delivery_aggregated_move_lines_inherit_delivery stock_report_delivery_aggregated_move_lines_inherit_delivery ir.ui.view qweb Inherits stock.stock_report_delivery_aggregated_move_lines
stock_report_delivery_has_serial_move_line_inherit_delivery stock_report_delivery_has_serial_move_line_inherit_delivery ir.ui.view qweb Inherits stock.stock_report_delivery_has_serial_move_line
stock_report_delivery_package_section_line_inherit_delivery stock_report_delivery_package_section_line_inherit_delivery ir.ui.view qweb Inherits stock.stock_report_delivery_package_section_line
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.tree delivery.price.rule tree New
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order data Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner xpath Inherits base.view_partner_form
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.form.view stock.picking data Inherits stock.view_picking_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.move xpath Inherits stock.view_move_form
view_quant_package_packaging_tree stock.quant.package.packaging.tree stock.quant.package field Inherits stock.view_quant_package_tree
view_quant_package_weight_form stock.quant.package.weight.form stock.quant.package field Inherits stock.view_quant_package_form
vpicktree_view_tree stock.picking.delivery.tree.inherit.delivery stock.picking xpath Inherits stock.vpicktree
Models touched (15)

New fields (11)
  • available_carrier_ids Many2many → delivery.carrier
    compute='_compute_available_carrier' string='Available Carriers' args: 'delivery.carrier'
  • carrier_id Many2one → delivery.carrier
    help='Choose the method to deliver your goods' required=True string='Shipping Method' args: 'delivery.carrier'
  • company_id Many2one → res.company
    related='order_id.company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    related='order_id.currency_id' args: 'res.currency'
  • delivery_message Text
    readonly=True
  • delivery_price Float
  • delivery_type Selection
    related='carrier_id.delivery_type'
  • display_price Float
    readonly=True string='Cost'
  • invoicing_message Text
    compute='_compute_invoicing_message'
  • order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order'
  • partner_id Many2one → res.partner
    related='order_id.partner_id' required=True args: 'res.partner'
Public methods (2)
  • button_confirm(self)
  • update_price(self)

New fields (5)
  • company_id Many2one
    related='picking_id.company_id'
  • delivery_packaging_id Many2one → product.packaging
    check_company=True args: 'product.packaging', 'Delivery Packaging'
  • picking_id Many2one → stock.picking
    args: 'stock.picking', 'Picking'
  • shipping_weight Float
    args: 'Shipping Weight'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' string='Weight unit of measure label'
Public methods (2)
  • action_put_in_pack(self)
  • default_get(self, fields_list)
    @api.model

New fields (2)
  • delivery_type Selection
    ondelete={'base_on_rule': <expr>} selection_add=[('base_on_rule', 'Based on Rules')]
  • price_rule_ids One2many → delivery.price.rule
    copy=True args: 'delivery.price.rule', 'carrier_id', 'Pricing Rules'
Public methods (4)
  • base_on_rule_cancel_shipment(self, pickings)
  • base_on_rule_get_tracking_link(self, picking)
  • base_on_rule_rate_shipment(self, order)
  • base_on_rule_send_shipping(self, pickings)

New fields (21)
  • active Boolean
    default=True
  • amount Float
    help='Amount of the order to benefit from a free shipping, expressed in the company currency' string='Amount'
  • can_generate_return Boolean
    compute='_compute_can_generate_return'
  • company_id Many2one → res.company
    readonly=False related='product_id.company_id' store=True string='Company' args: 'res.company'
  • country_ids Many2many → res.country
    args: 'res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries'
  • debug_logging Boolean
    help='Log requests in order to ease debugging' args: 'Debug logging'
  • delivery_type Selection
    default='fixed' required=True string='Provider' args: [('fixed', 'Fixed Price')]
  • fixed_price Float
    compute='_compute_fixed_price' inverse='_set_product_fixed_price' store=True string='Fixed Price'
  • free_over Boolean
    default=False help='If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping' args: 'Free if order amount is above'
  • get_return_label_from_portal Boolean
    help='The return label can be downloaded by the customer from the customer portal.' string='Return Label Accessible from Customer Portal'
  • integration_level Selection
    default='rate_and_ship' help='Action while validating Delivery Orders' string='Integration Level' args: [('rate', 'Get Rate'), ('rate_and_ship', 'Get Rate and Create Shipment')]
  • invoice_policy Selection
    default='estimated' help='Estimated Cost: the customer will be invoiced the estimated cost of the shipping.\nReal Cost: the customer will be invoiced the real cost of the shipping, the cost of the shipping will be updated on the SO after the delivery.' required=True string='Invoicing Policy' args: [('estimated', 'Estimated cost'), ('real', 'Real cost')]
  • margin Float
    help='This percentage will be added to the shipping price.'
  • name Char
    required=True translate=True args: 'Delivery Method'
  • prod_environment Boolean
    help='Set to True if your credentials are certified for production.' args: 'Environment'
  • product_id Many2one → product.product
    ondelete='restrict' required=True string='Delivery Product' args: 'product.product'
  • return_label_on_delivery Boolean
    help='The return label is automatically generated at the delivery.' string='Generate Return Label'
  • sequence Integer
    default=10 help='Determine the display order'
  • state_ids Many2many → res.country.state
    args: 'res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States'
  • zip_from Char
    args: 'Zip From'
  • zip_to Char
    args: 'Zip To'
Public methods (17)
  • available_carriers(self, partner)
  • cancel_shipment(self, pickings)
    Cancel a shipment :param pickings: A recordset of pickings
  • fixed_cancel_shipment(self, pickings)
  • fixed_get_tracking_link(self, picking)
  • fixed_rate_shipment(self, order)
  • fixed_send_shipping(self, pickings)
  • get_return_label(self, pickings, tracking_number=None, origin_date=None)
  • get_return_label_prefix(self)
  • get_tracking_link(self, picking)
    Ask the tracking link to the service provider :param picking: record of stock.picking :return str: an URL containing the tracking link or False
  • install_more_provider(self)
  • log_xml(self, xml_string, func)
  • onchange_countries(self)
    @api.onchange('country_ids')
  • onchange_states(self)
    @api.onchange('state_ids')
  • rate_shipment(self, order)
    Compute the price of the order shipment :param order: record of sale.order :return dict: {'success': boolean, 'price': a float, 'error_message': a string containing an error message, 'warning_message': a string containing a warning message} # TODO maybe the currency code?
  • send_shipping(self, pickings)
    Send the package to the service provider :param pickings: A recordset of pickings :return list: A list of dictionaries (one per picking) containing of the form:: { 'exact_price': price, 'tracking_number': number } # TODO missing labels per package # TODO missing currency # TODO missing success, error, warnings
  • toggle_debug(self)
  • toggle_prod_environment(self)

New fields (9)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • list_base_price Float
    default=0.0 digits='Product Price' required=True string='Sale Base Price'
  • list_price Float
    default=0.0 digits='Product Price' required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_compute_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')]
  • sequence Integer
    default=10 required=True
  • variable Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')]
  • variable_factor Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')], 'Variable Factor'
Public methods (0)

No public methods.

New fields (8)
  • height Integer
    args: 'Height'
  • length_uom_name Char
    compute='_compute_length_uom_name' string='Length unit of measure label'
  • max_weight Float
    help='Maximum weight shippable in this packaging' args: 'Max Weight'
  • package_carrier_type Selection
    default='none' string='Carrier' args: [('none', 'No carrier integration')]
  • packaging_length Integer
    args: 'Length'
  • shipper_package_code Char
    args: 'Package Code'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom string='Weight unit of measure label'
  • width Integer
    args: 'Width'
Public methods (0)

No public methods.

New fields (1)
  • hs_code Char
    help='Standardized code for international shipping and goods declaration. At the moment, only used for the FedEx shipping provider.' string='HS Code'
Public methods (0)

No public methods.

New fields (1)
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='Default delivery method used in sales orders.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_message Char
    copy=False readonly=True
  • delivery_rating_success Boolean
    copy=False
  • delivery_set Boolean
    compute='_compute_delivery_state'
  • is_all_service Boolean
    compute='_compute_is_service_products' args: 'Service Product'
  • recompute_delivery_price Boolean
    args: 'Delivery cost should be recomputed'
Public methods (3)
  • action_open_delivery_wizard(self)
  • onchange_order_line(self)
    @api.onchange('order_line', 'partner_id', 'partner_shipping_id')
  • set_delivery_line(self, carrier, amount)

New fields (3)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits='Product Unit of Measure' string='Product Qty'
  • recompute_delivery_price Boolean
    related='order_id.recompute_delivery_price'
Public methods (1)
  • unlink(self)

New fields (1)
  • weight Float
    compute='_cal_move_weight' compute_sudo=True digits='Stock Weight' store=True
Public methods (0)

No public methods.

New fields (1)
  • sale_price Float
    compute='_compute_sale_price'
Public methods (0)

No public methods.

New fields (12)
  • carrier_id Many2one → delivery.carrier
    check_company=True string='Carrier' args: 'delivery.carrier'
  • carrier_price Float
    string='Shipping Cost'
  • carrier_tracking_ref Char
    copy=False string='Tracking Reference'
  • carrier_tracking_url Char
    compute='_compute_carrier_tracking_url' string='Tracking URL'
  • delivery_type Selection
    readonly=True related='carrier_id.delivery_type'
  • is_return_picking Boolean
    compute='_compute_return_picking'
  • package_ids Many2many → stock.quant.package
    compute='_compute_packages' string='Packages' args: 'stock.quant.package'
  • return_label_ids One2many → ir.attachment
    compute='_compute_return_label' args: 'ir.attachment'
  • shipping_weight Float
    compute='_compute_shipping_weight' help="Total weight of packages and products not in a package. Packages with no shipping weight specified will default to their products' total weight. This is the weight used to compute the cost of the shipping." args: 'Weight for Shipping'
  • weight Float
    compute='_cal_weight' compute_sudo=True digits='Stock Weight' help='Total weight of the products in the picking.' store=True
  • weight_bulk Float
    compute='_compute_bulk_weight' help='Total weight of products which are not in a package.' args: 'Bulk Weight'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom readonly=True string='Weight unit of measure label'
Public methods (5)
  • cancel_shipment(self)
  • get_multiple_carrier_tracking(self)
  • open_website_url(self)
  • print_return_label(self)
  • send_to_shipper(self)

New fields (3)
  • shipping_weight Float
    help='Total weight of the package.' string='Shipping Weight'
  • weight Float
    compute='_compute_weight' help='Total weight of all the products contained in the package.'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom readonly=True string='Weight unit of measure label'
Public methods (0)

No public methods.

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/13.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYOperations/Inventory/Delivery
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Mohammed Shekha, Simon Lejeune, Nicolas Martinelli, qdp-odoo, Damien Bouvy, Barad Mahendra, Wolfgang Taferner, Yannick Tivisse, Odoo Online, Pierre Masereel, Romain Derie, Christophe Monniez, Jorge Pinna Puissant, Nans Lefebvre, Toufik Ben Jaa, Arnold Moyaux, Adrian Torres, Aurélien Warnon, Xavier-Do, jerome hanke (jhk), Victor Feyens, Andrea Grazioso (agr-odoo), William Henrotin, Joseph Caburnay, Nasreddin (bon), fw-bot, Anh Thao Pham (pta), Adrien Widart, Prakash Prajapati, IEL, Julien CHEVREAU (JCU), Hetashree Chauhan, Arnaud Baes, Robin Heinz, Miquel Raïch, asa-odoo, Geoffroy Larue, momegahed, Víctor Martínez, Florian Damhaut, Antoine Vandevenne (anv), Demesmaeker
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
    - stock_account
    - stock
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier for prices. When creating
invoices from picking, the system is able to add and compute the shipping line.

Code Analysis

Views touched (24)
XML IDNameModelTypeStatus
choose_delivery_carrier_view_form choose.delivery.carrier.form choose.delivery.carrier form New
choose_delivery_package_view_form choose.delivery.package.form choose.delivery.package form New
delivery_tracking_url_warning_form delivery.carrier.warning.url.form stock.picking form New
product_packaging_delivery_form product.packaging.form.delivery product.packaging form New
product_packaging_delivery_tree product.packaging.tree.delivery product.packaging tree New
product_template_hs_code product.template.form.hs_code product.template xpath Inherits product.product_template_form_view
report_delivery_document2 report_delivery_document2 ir.ui.view qweb Inherits stock.report_delivery_document
report_package_barcode_delivery report_package_barcode_delivery ir.ui.view qweb Inherits stock.report_package_barcode
report_package_barcode_small_delivery report_package_barcode_small_delivery ir.ui.view qweb Inherits stock.report_package_barcode_small
report_shipping2 report_shipping2 ir.ui.view qweb Inherits stock.report_picking
res_config_settings_view_form res.config.settings.view.form.inherit.delivery res.config.settings xpath Inherits sale.res_config_settings_view_form
sale_order_portal_content_inherit_sale_stock_inherit_website_sale_delivery Shipping tracking on orders followup ir.ui.view qweb Inherits sale_stock.sale_order_portal_content_inherit_sale_stock
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.tree delivery.price.rule tree New
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order data Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner xpath Inherits base.view_partner_form
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.form.view stock.picking data Inherits stock.view_picking_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.move xpath Inherits stock.view_move_form
view_quant_package_packaging_tree stock.quant.package.packaging.tree stock.quant.package field Inherits stock.view_quant_package_tree
view_quant_package_weight_form stock.quant.package.weight.form stock.quant.package field Inherits stock.view_quant_package_form
vpicktree_view_tree stock.picking.delivery.tree.inherit.delivery stock.picking xpath Inherits stock.vpicktree
Models touched (14)

New fields (11)
  • available_carrier_ids Many2many → delivery.carrier
    compute='_compute_available_carrier' string='Available Carriers' args: 'delivery.carrier'
  • carrier_id Many2one → delivery.carrier
    help='Choose the method to deliver your goods' required=True string='Shipping Method' args: 'delivery.carrier'
  • company_id Many2one → res.company
    related='order_id.company_id' args: 'res.company'
  • currency_id Many2one → res.currency
    related='order_id.currency_id' args: 'res.currency'
  • delivery_message Text
    readonly=True
  • delivery_price Float
  • delivery_type Selection
    related='carrier_id.delivery_type'
  • display_price Float
    readonly=True string='Cost'
  • invoicing_message Text
    compute='_compute_invoicing_message'
  • order_id Many2one → sale.order
    ondelete='cascade' required=True args: 'sale.order'
  • partner_id Many2one → res.partner
    related='order_id.partner_id' required=True args: 'res.partner'
Public methods (2)
  • button_confirm(self)
  • update_price(self)

New fields (5)
  • company_id Many2one
    related='picking_id.company_id'
  • delivery_packaging_id Many2one → product.packaging
    check_company=True args: 'product.packaging', 'Delivery Packaging'
  • picking_id Many2one → stock.picking
    args: 'stock.picking', 'Picking'
  • shipping_weight Float
    default=_default_shipping_weight args: 'Shipping Weight'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' string='Weight unit of measure label'
Public methods (1)
  • put_in_pack(self)

New fields (2)
  • delivery_type Selection
    selection_add=[('base_on_rule', 'Based on Rules')]
  • price_rule_ids One2many → delivery.price.rule
    copy=True args: 'delivery.price.rule', 'carrier_id', 'Pricing Rules'
Public methods (4)
  • base_on_rule_cancel_shipment(self, pickings)
  • base_on_rule_get_tracking_link(self, picking)
  • base_on_rule_rate_shipment(self, order)
  • base_on_rule_send_shipping(self, pickings)

New fields (21)
  • active Boolean
    default=True
  • amount Float
    help='Amount of the order to benefit from a free shipping, expressed in the company currency' string='Amount'
  • can_generate_return Boolean
    compute='_compute_can_generate_return'
  • company_id Many2one → res.company
    readonly=False related='product_id.company_id' store=True string='Company' args: 'res.company'
  • country_ids Many2many → res.country
    args: 'res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries'
  • debug_logging Boolean
    help='Log requests in order to ease debugging' args: 'Debug logging'
  • delivery_type Selection
    default='fixed' required=True string='Provider' args: [('fixed', 'Fixed Price')]
  • fixed_price Float
    compute='_compute_fixed_price' inverse='_set_product_fixed_price' store=True string='Fixed Price'
  • free_over Boolean
    default=False help='If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping' args: 'Free if order amount is above'
  • get_return_label_from_portal Boolean
    help='The return label can be downloaded by the customer from the customer portal.' string='Return Label Accessible from Customer Portal'
  • integration_level Selection
    default='rate_and_ship' help='Action while validating Delivery Orders' string='Integration Level' args: [('rate', 'Get Rate'), ('rate_and_ship', 'Get Rate and Create Shipment')]
  • invoice_policy Selection
    default='estimated' help='Estimated Cost: the customer will be invoiced the estimated cost of the shipping.\nReal Cost: the customer will be invoiced the real cost of the shipping, the cost of the shipping will be updated on the SO after the delivery.' required=True string='Invoicing Policy' args: [('estimated', 'Estimated cost'), ('real', 'Real cost')]
  • margin Float
    help='This percentage will be added to the shipping price.'
  • name Char
    required=True translate=True args: 'Delivery Method'
  • prod_environment Boolean
    help='Set to True if your credentials are certified for production.' args: 'Environment'
  • product_id Many2one → product.product
    ondelete='restrict' required=True string='Delivery Product' args: 'product.product'
  • return_label_on_delivery Boolean
    help='The return label is automatically generated at the delivery.' string='Generate Return Label'
  • sequence Integer
    default=10 help='Determine the display order'
  • state_ids Many2many → res.country.state
    args: 'res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States'
  • zip_from Char
    args: 'Zip From'
  • zip_to Char
    args: 'Zip To'
Public methods (17)
  • available_carriers(self, partner)
  • cancel_shipment(self, pickings)
    Cancel a shipment :param pickings: A recordset of pickings
  • fixed_cancel_shipment(self, pickings)
  • fixed_get_tracking_link(self, picking)
  • fixed_rate_shipment(self, order)
  • fixed_send_shipping(self, pickings)
  • get_return_label(self, pickings, tracking_number=None, origin_date=None)
  • get_return_label_prefix(self)
  • get_tracking_link(self, picking)
    Ask the tracking link to the service provider :param picking: record of stock.picking :return str: an URL containing the tracking link or False
  • install_more_provider(self)
  • log_xml(self, xml_string, func)
  • onchange_countries(self)
    @api.onchange('country_ids')
  • onchange_states(self)
    @api.onchange('state_ids')
  • rate_shipment(self, order)
    Compute the price of the order shipment :param order: record of sale.order :return dict: {'success': boolean, 'price': a float, 'error_message': a string containing an error message, 'warning_message': a string containing a warning message} # TODO maybe the currency code?
  • send_shipping(self, pickings)
    Send the package to the service provider :param pickings: A recordset of pickings :return list: A list of dictionaries (one per picking) containing of the form:: { 'exact_price': price, 'tracking_number': number } # TODO missing labels per package # TODO missing currency # TODO missing success, error, warnings
  • toggle_debug(self)
  • toggle_prod_environment(self)

New fields (9)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • list_base_price Float
    default=0.0 digits='Product Price' required=True string='Sale Base Price'
  • list_price Float
    default=0.0 digits='Product Price' required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_compute_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')]
  • sequence Integer
    default=10 required=True
  • variable Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')]
  • variable_factor Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')], 'Variable Factor'
Public methods (0)

No public methods.

New fields (7)
  • height Integer
    args: 'Height'
  • length Integer
    args: 'Length'
  • max_weight Float
    help='Maximum weight shippable in this packaging' args: 'Max Weight'
  • package_carrier_type Selection
    default='none' string='Carrier' args: [('none', 'No carrier integration')]
  • shipper_package_code Char
    args: 'Package Code'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom string='Weight unit of measure label'
  • width Integer
    args: 'Width'
Public methods (0)

No public methods.

New fields (1)
  • hs_code Char
    help='Standardized code for international shipping and goods declaration. At the moment, only used for the FedEx shipping provider.' string='HS Code'
Public methods (0)

No public methods.

New fields (1)
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='Default delivery method used in sales orders.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]" help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_message Char
    copy=False readonly=True
  • delivery_rating_success Boolean
    copy=False
  • delivery_set Boolean
    compute='_compute_delivery_state'
  • is_all_service Boolean
    compute='_compute_is_service_products' args: 'Service Product'
  • recompute_delivery_price Boolean
    args: 'Delivery cost should be recomputed'
Public methods (3)
  • action_open_delivery_wizard(self)
  • onchange_order_line(self)
    @api.onchange('order_line', 'partner_id')
  • set_delivery_line(self, carrier, amount)

New fields (3)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits='Product Unit of Measure' string='Product Qty'
  • recompute_delivery_price Boolean
    related='order_id.recompute_delivery_price'
Public methods (1)
  • unlink(self)

New fields (1)
  • weight Float
    compute='_cal_move_weight' compute_sudo=True digits='Stock Weight' store=True
Public methods (0)

No public methods.

New fields (13)
  • carrier_id Many2one → delivery.carrier
    check_company=True string='Carrier' args: 'delivery.carrier'
  • carrier_price Float
    string='Shipping Cost'
  • carrier_tracking_ref Char
    copy=False string='Tracking Reference'
  • carrier_tracking_url Char
    compute='_compute_carrier_tracking_url' string='Tracking URL'
  • delivery_type Selection
    readonly=True related='carrier_id.delivery_type'
  • is_return_picking Boolean
    compute='_compute_return_picking'
  • package_ids Many2many → stock.quant.package
    compute='_compute_packages' string='Packages' args: 'stock.quant.package'
  • return_label_ids One2many → ir.attachment
    compute='_compute_return_label' args: 'ir.attachment'
  • shipping_weight Float
    compute='_compute_shipping_weight' help="Total weight of the packages and products which are not in a package. That's the weight used to compute the cost of the shipping." args: 'Weight for Shipping'
  • volume Float
    copy=False digits='Volume'
  • weight Float
    compute='_cal_weight' compute_sudo=True digits='Stock Weight' help='Total weight of the products in the picking.' store=True
  • weight_bulk Float
    compute='_compute_bulk_weight' args: 'Bulk Weight'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom readonly=True string='Weight unit of measure label'
Public methods (6)
  • cancel_shipment(self)
  • check_packages_are_identical(self)
    Some shippers require identical packages in the same shipment. This utility checks it.
  • get_multiple_carrier_tracking(self)
  • open_website_url(self)
  • print_return_label(self)
  • send_to_shipper(self)

New fields (3)
  • shipping_weight Float
    help='Total weight of the package.' string='Shipping Weight'
  • weight Float
    compute='_compute_weight' help='Total weight of all the products contained in the package.'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' default=_get_default_weight_uom readonly=True string='Weight unit of measure label'
Public methods (0)

No public methods.

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/12.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYStock
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Pedro M. Baeza, GitHub, Yannick Tivisse, Alexandre Kühn, qsm-odoo, Pierre Masereel, jem-odoo, RomainLibert, Christophe Monniez, Nans Lefebvre, jev-odoo, Arnold Moyaux, Adrian Torres, XavierDo, Xavier-Do, jvm-odoo, jerome hanke (jhk), Florimond Husquinet (fhu), Andrea Grazioso (agr-odoo), William Henrotin, david, fw-bot, David Beguin, IEL
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - decimal_precision
    - uom
    - analytic
    - portal
    - http_routing
    - digest
    - stock_account
    - stock
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier for prices. When creating
invoices from picking, the system is able to add and compute the shipping line.

Code Analysis

Views touched (21)
XML IDNameModelTypeStatus
assets_backend delivery_assets_backend ir.ui.view qweb Inherits web.assets_backend
choose_delivery_package_view_form choose.delivery.package.form choose.delivery.package form New
delivery_tracking_url_warning_form delivery.carrier.warning.url.form stock.picking form New
product_packaging_delivery_form product.packaging.form.delivery product.packaging form New
product_packaging_delivery_tree product.packaging.tree.delivery product.packaging tree New
report_delivery_document2 report_delivery_document2 ir.ui.view qweb Inherits stock.report_delivery_document
report_package_barcode_delivery report_package_barcode_delivery ir.ui.view qweb Inherits stock.report_package_barcode
report_package_barcode_small_delivery report_package_barcode_small_delivery ir.ui.view qweb Inherits stock.report_package_barcode_small
report_shipping2 report_shipping2 ir.ui.view qweb Inherits stock.report_picking
res_config_settings_view_form res.config.settings.view.form.inherit.delivery res.config.settings xpath Inherits sale.res_config_settings_view_form
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.tree delivery.price.rule tree New
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order data Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner field Inherits mail.res_partner_view_form_inherit_mail
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.form.view stock.picking data Inherits stock.view_picking_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.move xpath Inherits stock.view_move_picking_form
view_quant_package_packaging_tree stock.quant.package.packaging.tree stock.quant.package field Inherits stock.view_quant_package_tree
view_quant_package_weight_form stock.quant.package.weight.form stock.quant.package field Inherits stock.view_quant_package_form
Models touched (14)

New fields (4)
  • delivery_packaging_id Many2one → product.packaging
    default=<expr> args: 'product.packaging'
  • shipping_weight Float
    default=<expr> string='Shipping Weight'
  • stock_quant_package_id Many2one → stock.quant.package
    default=<expr> string='Physical Package' args: 'stock.quant.package'
  • weight_uom_name Char
    compute='_compute_weight_uom_name' string='Weight unit of measure label'
Public methods (1)
  • put_in_pack(self)

New fields (2)
  • delivery_type Selection
    selection_add=[('base_on_rule', 'Based on Rules')]
  • price_rule_ids One2many → delivery.price.rule
    copy=True args: 'delivery.price.rule', 'carrier_id', 'Pricing Rules'
Public methods (4)
  • base_on_rule_cancel_shipment(self, pickings)
  • base_on_rule_get_tracking_link(self, picking)
  • base_on_rule_rate_shipment(self, order)
  • base_on_rule_send_shipping(self, pickings)

New fields (17)
  • active Boolean
    default=True
  • amount Float
    help='Amount of the order to benefit from a free shipping, expressed in the company currency' string='Amount'
  • company_id Many2one → res.company
    readonly=False related='product_id.company_id' store=True string='Company' args: 'res.company'
  • country_ids Many2many → res.country
    args: 'res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries'
  • debug_logging Boolean
    help='Log requests in order to ease debugging' args: 'Debug logging'
  • delivery_type Selection
    default='fixed' required=True string='Provider' args: [('fixed', 'Fixed Price')]
  • fixed_price Float
    compute='_compute_fixed_price' inverse='_set_product_fixed_price' store=True string='Fixed Price'
  • free_over Boolean
    default=False help='If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping' oldname='free_if_more_than' args: 'Free if order amount is above'
  • integration_level Selection
    default='rate_and_ship' help='Action while validating Delivery Orders' string='Integration Level' args: [('rate', 'Get Rate'), ('rate_and_ship', 'Get Rate and Create Shipment')]
  • margin Integer
    help='This percentage will be added to the shipping price.'
  • name Char
    required=True translate=True args: 'Delivery Method'
  • prod_environment Boolean
    help='Set to True if your credentials are certified for production.' args: 'Environment'
  • product_id Many2one → product.product
    ondelete='restrict' required=True string='Delivery Product' args: 'product.product'
  • sequence Integer
    default=10 help='Determine the display order'
  • state_ids Many2many → res.country.state
    args: 'res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States'
  • zip_from Char
    args: 'Zip From'
  • zip_to Char
    args: 'Zip To'
Public methods (15)
  • available_carriers(self, partner)
  • cancel_shipment(self, pickings)
    Cancel a shipment :param pickings: A recordset of pickings
  • fixed_cancel_shipment(self, pickings)
  • fixed_get_tracking_link(self, picking)
  • fixed_rate_shipment(self, order)
  • fixed_send_shipping(self, pickings)
  • get_tracking_link(self, picking)
    Ask the tracking link to the service provider :param picking: record of stock.picking :return str: an URL containing the tracking link or False
  • install_more_provider(self)
    @api.multi
  • log_xml(self, xml_string, func)
  • onchange_countries(self)
    @api.onchange('country_ids')
  • onchange_states(self)
    @api.onchange('state_ids')
  • rate_shipment(self, order)
    Compute the price of the order shipment :param order: record of sale.order :return dict: {'success': boolean, 'price': a float, 'error_message': a string containing an error message, 'warning_message': a string containing a warning message} # TODO maybe the currency code?
  • send_shipping(self, pickings)
    Send the package to the service provider :param pickings: A recordset of pickings :return list: A list of dictionaries (one per picking) containing of the form:: { 'exact_price': price, 'tracking_number': number } # TODO missing labels per package # TODO missing currency # TODO missing success, error, warnings
  • toggle_debug(self)
  • toggle_prod_environment(self)

New fields (9)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • list_base_price Float
    default=0.0 digits=dp.get_precision('Product Price') required=True string='Sale Base Price'
  • list_price Float
    default=0.0 digits=dp.get_precision('Product Price') required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_compute_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')]
  • sequence Integer
    default=10 required=True
  • variable Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')]
  • variable_factor Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')], 'Variable Factor'
Public methods (0)

No public methods.

New fields (6)
  • height Integer
    args: 'Height'
  • length Integer
    args: 'Length'
  • max_weight Float
    help='Maximum weight shippable in this packaging' args: 'Max Weight'
  • package_carrier_type Selection
    default='none' string='Carrier' args: [('none', 'No carrier integration')]
  • shipper_package_code Char
    args: 'Package Code'
  • width Integer
    args: 'Width'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • set_values(self)

New fields (1)
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='This delivery method will be used when invoicing from picking.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (6)
  • available_carrier_ids Many2many → delivery.carrier
    compute='_compute_available_carrier' string='Available Carriers' args: 'delivery.carrier'
  • carrier_id Many2one → delivery.carrier
    help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_message Char
    copy=False readonly=True
  • delivery_price Float
    copy=False readonly=True string='Estimated Delivery Price'
  • delivery_rating_success Boolean
    copy=False
  • invoice_shipping_on_delivery Boolean
    copy=False string='Invoice Shipping on Delivery'
Public methods (4)
  • get_delivery_price(self)
  • onchange_carrier_id(self)
    @api.onchange('carrier_id')
  • onchange_partner_id_carrier_id(self)
    @api.onchange('partner_shipping_id')
  • set_delivery_line(self)
    @api.multi

New fields (2)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits=dp.get_precision('Product Unit of Measure') string='Quantity'
Public methods (0)

No public methods.

New fields (1)
  • weight Float
    compute='_cal_move_weight' compute_sudo=True digits=dp.get_precision('Stock Weight') store=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

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

New fields (11)
  • carrier_id Many2one → delivery.carrier
    string='Carrier' args: 'delivery.carrier'
  • carrier_price Float
    string='Shipping Cost'
  • carrier_tracking_ref Char
    copy=False string='Tracking Reference'
  • carrier_tracking_url Char
    compute='_compute_carrier_tracking_url' string='Tracking URL'
  • delivery_type Selection
    readonly=True related='carrier_id.delivery_type'
  • package_ids Many2many → stock.quant.package
    compute='_compute_packages' string='Packages' args: 'stock.quant.package'
  • shipping_weight Float
    compute='_compute_shipping_weight' args: 'Weight for Shipping'
  • volume Float
    copy=False
  • weight Float
    compute='_cal_weight' compute_sudo=True digits=dp.get_precision('Stock Weight') store=True
  • weight_bulk Float
    compute='_compute_bulk_weight' args: 'Bulk Weight'
  • weight_uom_id Many2one → uom.uom
    compute='_compute_weight_uom_id' help='Unit of measurement for Weight' string='Unit of Measure' args: 'uom.uom'
Public methods (8)
  • action_done(self)
    @api.multi
  • action_send_confirmation_email(self)
    @api.multi
  • cancel_shipment(self)
    @api.one
  • check_packages_are_identical(self)
    @api.multi
    Some shippers require identical packages in the same shipment. This utility checks it.
  • get_multiple_carrier_tracking(self)
  • open_website_url(self)
    @api.multi
  • put_in_pack(self)
    @api.multi
  • send_to_shipper(self)
    @api.multi

New fields (2)
  • shipping_weight Float
    help='Weight used to compute the price of the delivery (if applicable).' string='Shipping Weight'
  • weight Float
    compute='_compute_weight' help='Weight computed based on the sum of the weights of the products.'
Public methods (0)

No public methods.

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/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYStock
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Joren Van Onder, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Richard Mathot, GitHub, Yannick Tivisse, Martin Geubelle, Odoo Online, Pierre Masereel, Adrien Dieudonne, len-odoo, Julien (juc) Castiaux, Jorge Pinna Puissant, Nans Lefebvre, amoyaux, Arnold Moyaux
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:43
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale_management
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account
    - product
    - decimal_precision
    - analytic
    - web_planner
    - portal
    - http_routing
    - account_invoicing
    - stock_account
    - stock
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier for prices. When creating
invoices from picking, the system is able to add and compute the shipping line.

Code Analysis

Views touched (20)
XML IDNameModelTypeStatus
assets_backend delivery_assets_backend ir.ui.view qweb Inherits web.assets_backend
choose_delivery_package_view_form choose.delivery.package.form choose.delivery.package form New
delivery.product_template_hs_code product.template.form.hs_code product.template field Inherits product.product_template_form_view
product_packaging_delivery_form product.packaging.form.delivery product.packaging form New
product_packaging_delivery_tree product.packaging.tree.delivery product.packaging tree New
report_delivery_document2 report_delivery_document2 ir.ui.view qweb Inherits stock.report_delivery_document
report_package_barcode_delivery report_package_barcode_delivery ir.ui.view qweb Inherits stock.report_package_barcode
report_package_barcode_small_delivery report_package_barcode_small_delivery ir.ui.view qweb Inherits stock.report_package_barcode_small
report_shipping2 report_shipping2 ir.ui.view qweb Inherits stock.report_picking
res_config_settings_view_form res.config.settings.view.form.inherit.delivery res.config.settings xpath Inherits sale.res_config_settings_view_form
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.tree delivery.price.rule tree New
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order data Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner field Inherits mail.res_partner_view_form_inherit_mail
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.form.view stock.picking data Inherits stock.view_picking_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.move xpath Inherits stock.view_move_picking_form
view_quant_package_weight_form stock.quant.package.weight.form stock.quant.package field Inherits stock.view_quant_package_form
Models touched (15)

New fields (3)
  • delivery_packaging_id Many2one → product.packaging
    default=<expr> args: 'product.packaging'
  • shipping_weight Float
    default=<expr> string='Shipping Weight'
  • stock_quant_package_id Many2one → stock.quant.package
    default=<expr> string='Physical Package' args: 'stock.quant.package'
Public methods (1)
  • put_in_pack(self)

New fields (2)
  • delivery_type Selection
    selection_add=[('base_on_rule', 'Based on Rules')]
  • price_rule_ids One2many → delivery.price.rule
    copy=True args: 'delivery.price.rule', 'carrier_id', 'Pricing Rules'
Public methods (4)
  • base_on_rule_cancel_shipment(self, pickings)
  • base_on_rule_get_tracking_link(self, picking)
  • base_on_rule_rate_shipment(self, order)
  • base_on_rule_send_shipping(self, pickings)

New fields (17)
  • active Boolean
    default=True
  • amount Float
    help='Amount of the order to benefit from a free shipping, expressed in the company currency' string='Amount'
  • company_id Many2one → res.company
    related='product_id.company_id' store=True string='Company' args: 'res.company'
  • country_ids Many2many → res.country
    args: 'res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries'
  • debug_logging Boolean
    help='Log requests in order to ease debugging' args: 'Debug logging'
  • delivery_type Selection
    default='fixed' required=True string='Provider' args: [('fixed', 'Fixed Price')]
  • fixed_price Float
    compute='_compute_fixed_price' inverse='_set_product_fixed_price' store=True string='Fixed Price'
  • free_over Boolean
    default=False help='If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping' oldname='free_if_more_than' args: 'Free if order amount is above'
  • integration_level Selection
    default='rate_and_ship' help='Action while validating Delivery Orders' string='Integration Level' args: [('rate', 'Get Rate'), ('rate_and_ship', 'Get Rate and Create Shipment')]
  • margin Integer
    help='This percentage will be added to the shipping price.'
  • name Char
    required=True translate=True
  • prod_environment Boolean
    help='Set to True if your credentials are certified for production.' args: 'Environment'
  • product_id Many2one → product.product
    ondelete='restrict' required=True string='Delivery Product' args: 'product.product'
  • sequence Integer
    default=10 help='Determine the display order'
  • state_ids Many2many → res.country.state
    args: 'res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States'
  • zip_from Char
    args: 'Zip From'
  • zip_to Char
    args: 'Zip To'
Public methods (15)
  • available_carriers(self, partner)
  • cancel_shipment(self, pickings)
    Cancel a shipment :param pickings: A recordset of pickings
  • fixed_cancel_shipment(self, pickings)
  • fixed_get_tracking_link(self, picking)
  • fixed_rate_shipment(self, order)
  • fixed_send_shipping(self, pickings)
  • get_tracking_link(self, picking)
    Ask the tracking link to the service provider :param picking: record of stock.picking :return str: an URL containing the tracking link or False
  • install_more_provider(self)
    @api.multi
  • log_xml(self, xml_string, func)
  • onchange_countries(self)
    @api.onchange('country_ids')
  • onchange_states(self)
    @api.onchange('state_ids')
  • rate_shipment(self, order)
    Compute the price of the order shipment :param order: record of sale.order :return dict: {'success': boolean, 'price': a float, 'error_message': a string containing an error message, 'warning_message': a string containing a warning message} # TODO maybe the currency code?
  • send_shipping(self, pickings)
    Send the package to the service provider :param pickings: A recordset of pickings :return list: A list of dictionaries (one per picking) containing of the form:: { 'exact_price': price, 'tracking_number': number } # TODO missing labels per package # TODO missing currency # TODO missing success, error, warnings
  • toggle_debug(self)
  • toggle_prod_environment(self)

New fields (9)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • list_base_price Float
    default=0.0 digits=dp.get_precision('Product Price') required=True string='Sale Base Price'
  • list_price Float
    default=0.0 digits=dp.get_precision('Product Price') required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_compute_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')]
  • sequence Integer
    default=10 required=True
  • variable Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')]
  • variable_factor Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')], 'Variable Factor'
Public methods (0)

No public methods.

New fields (6)
  • height Integer
    args: 'Height'
  • length Integer
    args: 'Length'
  • max_weight Float
    help='Maximum weight shippable in this packaging' args: 'Max Weight'
  • package_carrier_type Selection
    default='none' string='Carrier' args: [('none', 'No carrier integration')]
  • shipper_package_code Char
    args: 'Package Code'
  • width Integer
    args: 'Width'
Public methods (0)

No public methods.

New fields (1)
  • hs_code Char
    help='Standardized code for international shipping and goods declaration' string='HS Code'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • set_values(self)

New fields (1)
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='This delivery method will be used when invoicing from picking.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (5)
  • carrier_id Many2one → delivery.carrier
    help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_message Char
    copy=False readonly=True
  • delivery_price Float
    copy=False readonly=True string='Estimated Delivery Price'
  • delivery_rating_success Boolean
    copy=False
  • invoice_shipping_on_delivery Boolean
    copy=False string='Invoice Shipping on Delivery'
Public methods (5)
  • action_confirm(self)
    @api.multi
  • get_delivery_price(self)
  • onchange_carrier_id(self)
    @api.onchange('carrier_id')
  • onchange_partner_id_carrier_id(self)
    @api.onchange('partner_id')
  • set_delivery_line(self)
    @api.multi

New fields (2)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits=dp.get_precision('Product Unit of Measure') string='Quantity'
Public methods (0)

No public methods.

New fields (2)
  • weight Float
    compute='_cal_move_weight' compute_sudo=True digits=dp.get_precision('Stock Weight') store=True
  • weight_uom_id Many2one → product.uom
    default=_default_uom help='Unit of Measure (Unit of Measure) is the unit of measurement for Weight' readonly=True required=True string='Weight Unit of Measure' args: 'product.uom'
Public methods (0)

No public methods.

New fields (0)

No new fields.

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

New fields (12)
  • carrier_id Many2one → delivery.carrier
    string='Carrier' args: 'delivery.carrier'
  • carrier_price Float
    string='Shipping Cost'
  • carrier_tracking_ref Char
    copy=False string='Tracking Reference'
  • carrier_tracking_url Char
    compute='_compute_carrier_tracking_url' string='Tracking URL'
  • delivery_type Selection
    readonly=True related='carrier_id.delivery_type'
  • number_of_packages Integer
    copy=False string='Number of Packages'
  • package_ids Many2many → stock.quant.package
    compute='_compute_packages' string='Packages' args: 'stock.quant.package'
  • shipping_weight Float
    compute='_compute_shipping_weight' args: 'Weight for Shipping'
  • volume Float
    copy=False
  • weight Float
    compute='_cal_weight' compute_sudo=True digits=dp.get_precision('Stock Weight') store=True
  • weight_bulk Float
    compute='_compute_bulk_weight' args: 'Bulk Weight'
  • weight_uom_id Many2one → product.uom
    default=_default_uom help='Unit of measurement for Weight' readonly='1' required=True string='Unit of Measure' args: 'product.uom'
Public methods (7)
  • action_done(self)
    @api.multi
  • action_send_confirmation_email(self)
    @api.multi
  • cancel_shipment(self)
    @api.one
  • check_packages_are_identical(self)
    @api.multi
    Some shippers require identical packages in the same shipment. This utility checks it.
  • open_website_url(self)
    @api.multi
  • put_in_pack(self)
    @api.multi
  • send_to_shipper(self)
    @api.multi

New fields (2)
  • shipping_weight Float
    help="Can be changed during the 'put in pack' to adjust the weight of the shipping." string='Shipping Weight'
  • weight Float
    compute='_compute_weight'
Public methods (0)

No public methods.

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/10.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYStock
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Julien Legros, Richard Mathot, qdp-odoo, Jeremy Kersten, Yannick Tivisse, Martin Geubelle, Nans Lefebvre
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - web_planner
    - procurement
    - stock_account
    - stock
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier for prices. When creating
invoices from picking, the system is able to add and compute the shipping line.

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
delivery.product_packaging_delivery_form product.packaging.form.delivery product.packaging group Inherits product.product_packaging_form_view
delivery.product_packaging_delivery_tree product.packaging.tree.delivery product.packaging field Inherits product.product_packaging_tree_view
delivery.product_template_hs_code product.template.form.hs_code product.template field Inherits product.product_template_form_view
report_delivery_document2 report_delivery_document2 ir.ui.view qweb Inherits stock.report_delivery_document
report_shipping2 report_shipping2 ir.ui.view qweb Inherits stock.report_picking
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.tree delivery.price.rule tree New
view_move_withweight_form stock.move.form.weight stock.move xpath Inherits stock.view_move_form
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order data Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner field Inherits mail.view_emails_partner_info_form
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.form.view stock.picking data Inherits stock.view_picking_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.move xpath Inherits stock.view_move_picking_form
view_quant_package_form_save stock.quant.package.form.save stock.quant.package form New
view_quant_package_weight_form stock.quant.package.weight.form stock.quant.package field Inherits stock.view_quant_package_form
Models touched (13)

New fields (0)

No new fields.

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

New fields (18)
  • amount Float
    help='Amount of the order to benefit from a free shipping, expressed in the company currency' string='Amount'
  • available Boolean
    compute='get_price'
  • country_ids Many2many → res.country
    args: 'res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries'
  • delivery_type Selection
    default='fixed' required=True string='Provider' args: [('fixed', 'Fixed Price'), ('base_on_rule', 'Based on Rules')]
  • fixed_price Float
    compute='_compute_fixed_price' help='Keep empty if the pricing depends on the advanced pricing per destination' inverse='_set_product_fixed_price' store=True string='Fixed Price'
  • free_if_more_than Boolean
    default=False help='If the order is more expensive than a certain amount, the customer can benefit from a free shipping' args: 'Free if Order total is more than'
  • integration_level Selection
    default='rate_and_ship' help='Action while validating Delivery Orders' string='Integration Level' args: [('rate', 'Get Rate'), ('rate_and_ship', 'Get Rate and Create Shipment')]
  • margin Integer
    help='This percentage will be added to the shipping price.'
  • price Float
    compute='get_price'
  • price_rule_ids One2many → delivery.price.rule
    copy=True args: 'delivery.price.rule', 'carrier_id', 'Pricing Rules'
  • prod_environment Boolean
    help='Set to True if your credentials are certified for production.' args: 'Environment'
  • product_id Many2one → product.product
    ondelete='cascade' required=True string='Delivery Product' args: 'product.product'
  • product_sale_ok Boolean
    default=False related='product_id.sale_ok'
  • product_type Selection
    default='service' related='product_id.type'
  • sequence Integer
    default=10 help='Determine the display order'
  • state_ids Many2many → res.country.state
    args: 'res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States'
  • zip_from Char
    args: 'Zip From'
  • zip_to Char
    args: 'Zip To'
Public methods (16)
  • cancel_shipment(self, pickings)
    Cancel a shipment :param pickings: A recordset of pickings
  • create(self, vals)
    @api.model
  • create_price_rules(self)
    @api.multi
  • get_price(self)
    @api.one
  • get_price_available(self, order)
    @api.multi
  • get_price_from_picking(self, total, weight, volume, quantity)
  • get_shipping_price_from_so(self, orders)
    For every sale order, compute the price of the shipment :param orders: A recordset of sale orders :return list: A list of floats, containing the estimated price for the shipping of the sale order
  • get_tracking_link(self, pickings)
    Ask the tracking link to the service provider :param pickings: A recordset of pickings :return list: A list of string URLs, containing the tracking links for every picking
  • install_more_provider(self)
    @api.multi
  • name_get(self)
    @api.multi
  • onchange_countries(self)
    @api.onchange('country_ids')
  • onchange_states(self)
    @api.onchange('state_ids')
  • send_shipping(self, pickings)
    Send the package to the service provider :param pickings: A recordset of pickings :return list: A list of dictionaries (one per picking) containing of the form:: { 'exact_price': price, 'tracking_number': number }
  • toggle_prod_environment(self)
    @api.one
  • verify_carrier(self, contact)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (10)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • list_base_price Float
    default=0.0 digits=dp.get_precision('Product Price') required=True string='Sale Base Price'
  • list_price Float
    default=0.0 digits=dp.get_precision('Product Price') required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_get_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')], 'Operator'
  • sequence Integer
    default=10 help='Gives the sequence order when calculating delivery carrier.' required=True
  • standard_price Float
    default=0.0 digits=dp.get_precision('Product Price') required=True args: 'Cost Price'
  • variable Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')], 'Variable'
  • variable_factor Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')], 'Variable Factor'
Public methods (0)

No public methods.

New fields (6)
  • height Integer
    args: 'Height'
  • length Integer
    args: 'Length'
  • max_weight Float
    help='Maximum weight shippable in this packaging' args: 'Max Weight'
  • package_carrier_type Selection
    default='none' string='Carrier' args: [('none', 'No carrier integration')]
  • shipper_package_code Char
    args: 'Package Code'
  • width Integer
    args: 'Width'
Public methods (0)

No public methods.

New fields (1)
  • hs_code Char
    help='Standardized code for international shipping and goods declaration' oldname='x_hs_code' string='HS Code'
Public methods (1)
  • write(self, vals)
    @api.multi

New fields (1)
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='This delivery method will be used when invoicing from picking.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (3)
  • carrier_id Many2one → delivery.carrier
    help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_price Float
    compute='_compute_delivery_price' store=True string='Estimated Delivery Price'
  • invoice_shipping_on_delivery Boolean
    string='Invoice Shipping on Delivery'
Public methods (3)
  • action_confirm(self)
    @api.multi
  • delivery_set(self)
    @api.multi
  • onchange_partner_id_dtype(self)
    @api.onchange('partner_id')

New fields (2)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits=dp.get_precision('Product Unit of Measure') string='Quantity'
Public methods (0)

No public methods.

New fields (2)
  • weight Float
    compute='_cal_move_weight' digits=dp.get_precision('Stock Weight') store=True
  • weight_uom_id Many2one → product.uom
    default=_default_uom help='Unit of Measure (Unit of Measure) is the unit of measurement for Weight' readonly=True required=True string='Weight Unit of Measure' args: 'product.uom'
Public methods (1)
  • action_confirm(self)
    @api.multi
    Pass the carrier to the picking from the sales order (Should also work in case of Phantom BoMs when on explosion the original move is deleted)

New fields (0)

No new fields.

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

New fields (11)
  • carrier_id Many2one → delivery.carrier
    string='Carrier' args: 'delivery.carrier'
  • carrier_price Float
    string='Shipping Cost'
  • carrier_tracking_ref Char
    copy=False string='Tracking Reference'
  • delivery_type Selection
    readonly=True related='carrier_id.delivery_type'
  • number_of_packages Integer
    copy=False string='Number of Packages'
  • package_ids Many2many → stock.quant.package
    compute='_compute_packages' string='Packages' args: 'stock.quant.package'
  • shipping_weight Float
    compute='_compute_shipping_weight' args: 'Weight for Shipping'
  • volume Float
    copy=False
  • weight Float
    compute='_cal_weight' digits=dp.get_precision('Stock Weight') store=True
  • weight_bulk Float
    compute='_compute_bulk_weight' args: 'Bulk Weight'
  • weight_uom_id Many2one → product.uom
    default=_default_uom help='Unit of measurement for Weight' readonly='1' required=True string='Unit of Measure' args: 'product.uom'
Public methods (7)
  • cancel_shipment(self)
    @api.one
  • check_packages_are_identical(self)
    @api.multi
    Some shippers require identical packages in the same shipment. This utility checks it.
  • do_transfer(self)
    @api.multi
  • onchange_carrier(self)
    @api.onchange('carrier_id')
  • open_website_url(self)
    @api.multi
  • put_in_pack(self)
    @api.multi
  • send_to_shipper(self)
    @api.multi

New fields (2)
  • shipping_weight Float
    help="Can be changed during the 'put in pack' to adjust the weight of the shipping." string='Shipping Weight'
  • weight Float
    compute='_compute_weight'
Public methods (0)

No public methods.

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/9.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYStock
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
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, Josse Colpaert, Denis Ledoux, Christophe Simonis, David Monjoie, Goffin Simon, Nicolas Martinelli, Jérome Maes, xmo-odoo, Richard Mathot, qdp-odoo, Yannick Tivisse, qsm-odoo, Martin Geubelle
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - web_tip
    - web_planner
    - procurement
    - stock_account
    - stock
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier for prices. When creating
invoices from picking, the system is able to add and compute the shipping line.

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
report_delivery_document2 report_delivery_document2 ir.ui.view qweb Inherits stock.report_delivery_document
report_shipping2 report_shipping2 ir.ui.view qweb Inherits stock.report_picking
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_search delivery.carrier.search delivery.carrier search New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_price_rule_form delivery.price.rule.form delivery.price.rule form New
view_delivery_price_rule_tree delivery.price.rule.tree delivery.price.rule tree New
view_move_withweight_form stock.move.form.weight stock.move xpath Inherits stock.view_move_form
view_order_form_with_carrier delivery.sale.order.form.view.with_carrier sale.order data Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner field Inherits mail.view_emails_partner_info_form
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.form.view stock.picking data Inherits stock.view_picking_form
view_picking_withcarrier_out_form_shipping delivery.stock.picking_withcarrier.form.view.shipping stock.picking xpath Inherits delivery.view_picking_withcarrier_out_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.move xpath Inherits stock.view_move_picking_form
view_quant_package_weight_form stock.quant.package.weight.form stock.quant.package field Inherits stock.view_quant_package_form
Models touched (9)

New fields (10)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' required=True args: 'delivery.carrier', 'Carrier'
  • list_base_price Float
    default=0.0 digits=dp.get_precision('Product Price') required=True string='Sale Base Price'
  • list_price Float
    default=0.0 digits=dp.get_precision('Product Price') required=True args: 'Sale Price'
  • max_value Float
    required=True args: 'Maximum Value'
  • name Char
    compute='_get_name'
  • operator Selection
    default='<=' required=True args: [('==', '='), ('<=', '<='), ('<', '<'), ('>=', '>='), ('>', '>')], 'Operator'
  • sequence Integer
    default=10 help='Gives the sequence order when calculating delivery carrier.' required=True
  • standard_price Float
    default=0.0 digits=dp.get_precision('Product Price') required=True args: 'Cost Price'
  • variable Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')], 'Variable'
  • variable_factor Selection
    default='weight' required=True args: [('weight', 'Weight'), ('volume', 'Volume'), ('wv', 'Weight * Volume'), ('price', 'Price'), ('quantity', 'Quantity')], 'Variable Factor'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • write(self, vals)
    @api.multi

New fields (1)
  • property_delivery_carrier_id Many2one → delivery.carrier
    company_dependent=True help='This delivery method will be used when invoicing from picking.' string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

New fields (3)
  • carrier_id Many2one → delivery.carrier
    help='Fill this field if you plan to invoice the shipping based on picking.' string='Delivery Method' args: 'delivery.carrier'
  • delivery_price Float
    compute='_compute_delivery_price' store=True string='Estimated Delivery Price'
  • invoice_shipping_on_delivery Boolean
    string='Invoice Shipping on Delivery'
Public methods (3)
  • action_confirm(self)
    @api.multi
  • delivery_set(self)
    @api.multi
  • onchange_partner_id_dtype(self)
    @api.onchange('partner_id')

New fields (2)
  • is_delivery Boolean
    default=False string='Is a Delivery'
  • product_qty Float
    compute='_compute_product_qty' digits=dp.get_precision('Product Unit of Measure') string='Quantity'
Public methods (0)

No public methods.

New fields (2)
  • weight Float
    compute='_cal_move_weight' digits=dp.get_precision('Stock Weight') store=True
  • weight_uom_id Many2one → product.uom
    default=_default_uom help='Unit of Measure (Unit of Measure) is the unit of measurement for Weight' readonly=True required=True string='Unit of Measure' args: 'product.uom'
Public methods (1)
  • action_confirm(self)
    @api.multi
    Pass the carrier to the picking from the sales order (Should also work in case of Phantom BoMs when on explosion the original move is deleted)

New fields (10)
  • carrier_id Many2one → delivery.carrier
    string='Carrier' args: 'delivery.carrier'
  • carrier_price Float
    string='Shipping Cost'
  • carrier_tracking_ref Char
    copy=False string='Carrier Tracking Ref'
  • delivery_type Selection
    readonly=True related='carrier_id.delivery_type'
  • number_of_packages Integer
    copy=False string='Number of Packages'
  • package_ids Many2many → stock.quant.package
    compute='_compute_packages' string='Packages' args: 'stock.quant.package'
  • volume Float
    copy=False
  • weight Float
    compute='_cal_weight' digits=dp.get_precision('Stock Weight') store=True
  • weight_bulk Float
    compute='_compute_bulk_weight' args: 'Bulk Weight'
  • weight_uom_id Many2one → product.uom
    default=_default_uom help='Unit of measurement for Weight' readonly='1' required=True string='Unit of Measure' args: 'product.uom'
Public methods (5)
  • cancel_shipment(self)
    @api.one
  • do_transfer(self)
    @api.multi
  • onchange_carrier(self)
    @api.onchange('carrier_id')
  • open_website_url(self)
    @api.multi
  • send_to_shipper(self)
    @api.multi

New fields (1)
  • weight Float
    compute='_compute_weight'
Public methods (0)

No public methods.

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/8.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSStephane Wirtel, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Vo Minh Thu, Josse Colpaert, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Denis Ledoux, Fabien Meghazi, ggh-openerp, Christophe Simonis, Goffin Simon, Cedric Snauwaert, Nicolas Martinelli, Richard Mathot, jke-openerp, Aaron Bohy, Vishmita Jadeja (openerp), Bharat R. Devnani (OpenERP), Richard Mathot (OpenERP), Jitendra Prajapati (OpenERP), Rakesh Sindhav (OpenERP), Pooja Zankhariya (OpenERP), Wolfgang Taferner
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - web_kanban_sparkline
    - account_voucher
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - board
    - edi
    - email_template
    - procurement
    - stock_account
    - stock
    - web_kanban_gauge
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier and delivery grids for prices. When creating 
invoices from picking, OpenERP is able to add and compute the shipping line.

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
report_shipping2 report_shipping2 ir.ui.view qweb Inherits stock.report_picking
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_grid_form delivery.grid.form delivery.grid form New
view_delivery_grid_line_form delivery.grid.line.form delivery.grid.line form New
view_delivery_grid_line_tree delivery.grid.line.tree delivery.grid.line tree New
view_delivery_grid_tree delivery.grid.tree delivery.grid tree New
view_move_withweight_form stock.move.form.weight stock.move xpath Inherits stock.view_move_form
view_order_withcarrier_form delivery.sale.order_withcarrier.form.view sale.order xpath Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner field Inherits stock.view_partner_property_form
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.form.view stock.picking xpath Inherits stock.view_picking_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.move xpath Inherits stock.view_move_picking_form
Models touched (2)

New fields (0)

No new fields.

Public methods (2)
  • delivery_set(self, cr, uid, ids, context=None)
  • onchange_partner_id(self, cr, uid, ids, part, context=None)

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/7.0/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Jagdish Panchal (Open ERP), Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Numerigraphe - Lionel Sausin, Christophe Matthieu, Benoit Guillot, DBR (OpenERP), Harry (OpenERP), Antonin Bourguignon, pankita shah (Open ERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Purnendu Singh (OpenERP), Fabien Pinckaers, Antony Lesuisse, Saurang Suthar, Olivier Dony, Divyesh Makwana (Open ERP), Thibault Delavallée, Vo Minh Thu, Hardik, pso (OpenERP), Sbh (Openerp), Amit Patel (OpenERP), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Kuldeep Joshi (OpenERP), Nimesh (Open ERP), Denis Ledoux, Mayur Maheshwari (OpenERP), Sanjay Gohel (Open ERP), Fabien Meghazi, Ujjvala Collins (OpenERP), dle@openerp.com, Vijaykumar Baladaniya, Nicolas Martinelli, Alexandre Fayolle, Hiral Patel (OpenERP), buke
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:43:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - account_voucher
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - process
    - decimal_precision
    - mail
    - analytic
    - board
    - edi
    - email_template
    - purchase
    - stock
    - procurement
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier and delivery grids for prices. When creating 
invoices from picking, OpenERP is able to add and compute the shipping line.

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_grid_form delivery.grid.form delivery.grid form New
view_delivery_grid_line_form delivery.grid.line.form delivery.grid.line form New
view_delivery_grid_line_tree delivery.grid.line.tree delivery.grid.line tree New
view_delivery_grid_tree delivery.grid.tree delivery.grid tree New
view_delivery_order_inherit_stock stock.picking.out.form stock.picking.out xpath Inherits stock.view_picking_form
view_move_withweight_form stock.move.form.weight stock.move xpath Inherits stock.view_move_form
view_order_withcarrier_form delivery.sale.order_withcarrier.form.view sale.order xpath Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner field Inherits stock.view_partner_property_form
view_picking_withcarrier_in_form delivery.stock.picking_withcarrier.in.form.view stock.picking.in field Inherits stock.view_picking_form
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.out.form.view stock.picking.out field Inherits stock.view_picking_form
view_picking_withweight_internal_form stock.picking_withweight.internal.form.view stock.picking field Inherits stock.view_picking_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.move xpath Inherits stock.view_move_picking_form
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/6.1/delivery
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Rucha (Open ERP), Stephane Wirtel, Turkesh Patel (Open ERP), Harry (OpenERP), Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Vo Minh Thu, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Mayur Maheshwari (OpenERP), vro, niv-openerp, Ujjvala Collins (OpenERP), Xavier Morel, Carlos Vásquez, Els Van Vossel, Israel Fermin Montilla, Rifakat Haradwala (Open ERP), mayur maheshwari (Open ERP), Hardik Ansodariy (OpenERP), fp, Kirti Savalia (OpenERP), Dhara (OpenERP)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:41:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - stock
    - product
    - base
    - process
    - decimal_precision
    - account
    - base_setup
    - analytic
    - board
    - edi
    - email_template
    - mail
    - base_tools
    - procurement
    - purchase
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Allows you to add delivery methods in sale orders and picking.
==============================================================

You can define your own carrier and delivery grids for prices.
When creating invoices from picking, OpenERP is able to add and compute the shipping line.

     

Code Analysis

Views touched (20)
XML IDNameModelTypeStatus
define_delivery_steps_form delivery.define_delivery_steps delivery.define.delivery.steps.wizard form New
edit_project_multicompany sale.order.multicompany sale.order xpath Inherits sale.view_order_form
view_delivery_carrier_form delivery.carrier.form delivery.carrier form New
view_delivery_carrier_tree delivery.carrier.tree delivery.carrier tree New
view_delivery_grid_form delivery.grid.form delivery.grid form New
view_delivery_grid_line_form delivery.grid.line.form delivery.grid.line form New
view_delivery_grid_line_tree delivery.grid.line.tree delivery.grid.line tree New
view_delivery_grid_tree delivery.grid.tree delivery.grid tree New
view_delivery_order_inherit_stock stock.picking.out.form stock.picking xpath Inherits stock.view_picking_out_form
view_make_delivery_wizard Delivery Costs delivery.sale.order form New
view_move_reception_picking_withweight_form stock.move.reception.packing.form.weight stock.move group Inherits stock.view_move_form_reception_picking
view_move_withweight_form stock.move.form.weight stock.move group Inherits stock.view_move_form
view_order_withcarrier_form delivery.sale.order_withcarrier.form.view sale.order group Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner page Inherits base.view_partner_form
view_picking_withcarrier_out_form delivery.stock.picking_withcarrier.out.form.view stock.picking field Inherits stock.view_picking_out_form
view_picking_withcarrier_out_move_form delivery.stock.picking_withcarrier.out.move.form.view stock.picking xpath Inherits stock.view_picking_out_form
view_picking_withweight_in_form stock.picking_withweight.in.form.view stock.picking field Inherits stock.view_picking_in_form
view_picking_withweight_in_move_form stock.picking_withweight.in.move.form.view stock.picking xpath Inherits stock.view_picking_in_form
view_picking_withweight_internal_form stock.picking_withweight.internal.form.view stock.picking field Inherits stock.view_picking_form
view_picking_withweight_internal_move_form stock.picking_withweight.internal.move.form.view stock.picking xpath Inherits stock.view_picking_form
Models touched (0)

No models found for this module.