Repository
odoo/odoo · module folder
Module version
1.0
Category
Sales/Delivery
Folder size
2.6 MB
License
LGPL-3
Application
No
Auto-installable
No
Website
None
Last tracking update
2026-08-15 22:44:17
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Raphael Collet, Thibault Delavallée, Odoo Translation Bot, 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), Valeriya (vchu), Mahdi Alijani (malj), Krzysztof Magusiak (krma), Florian Malfroid, Akash Pandey, Basioni (basm), Rushil Patel, Yash Pathak, Waleed Elgamal, Eliott Loop (oplo-odoo), Nisarg (nipl), Lionel Piraux (lipi), saurabh, panj-odoo
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
delivery_carrier_info, delivery_carrier_manual_price, delivery_carrier_partner, delivery_multi_destination, delivery_seur_atlas, delivery_state, sale_gelato, sale_loyalty_delivery, sale_order_carrier_auto_assign, sale_shipping_info_helper, shopify_connector, stock_delivery, website_sale
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 kanban Inherits base.module_view_kanban
delivery_provider_module_list Delivery Provider Module List ir.module.module list 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 form Inherits payment_custom.payment_provider_form
res_config_settings_view_form res.config.settings.view.form.inherit.delivery res.config.settings form 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 form Inherits sale.view_order_form
view_partner_property_form res.partner.carrier.property.form.inherit res.partner form Inherits base.view_partner_form
HTTP endpoints (2)
Route(s)HandlerAuthTypeMethodsFlags
/delivery/get_pickup_locations LocationSelectorController.delivery_get_pickup_locations user jsonrpc ALL
/delivery/set_pickup_location LocationSelectorController.delivery_set_pickup_location user jsonrpc ALL
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)

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…