Sale Manual Delivery

sale_manual_delivery
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/19.0/sale_manual_delivery
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYSale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp SA
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Tobias Zehntner
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/sale-workflow:
    - sale_stock_reference_by_line
odoo/odoo:
    - stock_delivery
    - sale_stock
    - 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
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - delivery
    - payment_custom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The goal of this module is to allow the manual creation of delivery
slips. If activated, a sale order won't directly impact the stock. It
will not make a reservation on the stock. It allows the delivery and the
impact on stock to be done manually when needed. The goal is to be used
on long term projects where not all the material is shipped at once. As
you make many shipments, every time you make a new delivery, you can
choose an new carrier as well as a planned date. A wizard helps you to
chose what to deliver by showing you how much you already planned to
ship.

![Field](../static/description/field.png)

![Wizard](../static/description/wizard.png)

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
crm_team_view_form crm.team.form crm.team group Inherits sales_team.crm_team_view_form
manual_delivery_wizard_form manual.delivery.wizard.form manual.delivery form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_line_tree sale.order.line.tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_undelivered_line_filter sale.order.undelivered.line sale.order.line search New
Models touched (7)

New fields (1)
  • manual_delivery Boolean
    help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' string='Delivery Method' args: 'delivery.carrier'
  • commercial_partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True args: 'res.partner'
  • date_planned Date
  • line_ids One2many → manual.delivery.line
    string='Lines to validate' args: 'manual.delivery.line', 'manual_delivery_id'
  • partner_id Many2one → res.partner
    domain="['|',('id', '=', commercial_partner_id),('parent_id', '=', commercial_partner_id)]" ondelete='cascade' string='Delivery Address' args: 'res.partner'
  • route_id Many2one → stock.route
    domain=[('sale_selectable', '=', True)] help='Leave it blank to use the same route that is in the sale line' ondelete='cascade' string='Use specific Route' args: 'stock.route'
Public methods (2)
  • confirm(self)
    Creates the manual procurements
  • default_get(self, fields)
    @api.model

New fields (7)
  • manual_delivery_id Many2one → manual.delivery
    ondelete='cascade' readonly=True required=True string='Wizard' args: 'manual.delivery'
  • name Text
    related='order_line_id.name'
  • order_line_id Many2one → sale.order.line
    ondelete='cascade' readonly=True required=True string='Sale Order Line' args: 'sale.order.line'
  • product_id Many2one
    related='order_line_id.product_id'
  • qty_ordered Float
    help='Quantity ordered in the related Sale Order' readonly=True related='order_line_id.product_uom_qty' string='Ordered'
  • qty_procured Float
    related='order_line_id.qty_procured'
  • quantity Float
Public methods (0)

No public methods.

New fields (2)
  • has_pending_delivery Boolean
    compute='_compute_delivery_pending' args: 'Delivery Pending'
  • manual_delivery Boolean
    help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.'
Public methods (1)
  • action_manual_delivery_wizard(self)

New fields (2)
  • qty_procured Float
    compute='_compute_qty_procured' help='Quantity already planned or shipped (stock movements already created)' readonly=True store=True string='Quantity Procured'
  • qty_to_procure Float
    compute='_compute_qty_to_procure' help='There is Pending qty to add to a delivery' readonly=True store=True string='Quantity to Procure'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • date_planned Date
  • partner_id Many2one → res.partner
    args: 'res.partner'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/18.0/sale_manual_delivery
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYSale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp SA
COMMITTERS
COMMITTERSRuchir Shukla, Weblate, OCA-git-bot, oca-ci, David Gallay, samuel ramarosely
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock_delivery
    - sale_stock
    - 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
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - delivery
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The goal of this module is to allow the manual creation of delivery
slips. If activated, a sale order won't directly impact the stock. It
will not make a reservation on the stock. It allows the delivery and the
impact on stock to be done manually when needed. The goal is to be used
on long term projects where not all the material is shipped at once. As
you make many shipments, every time you make a new delivery, you can
choose an new carrier as well as a planned date. A wizard helps you to
chose what to deliver by showing you how much you already planned to
ship.

![Field](../static/description/field.png)

![Wizard](../static/description/wizard.png)

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
crm_team_view_form crm.team.form crm.team group Inherits sales_team.crm_team_view_form
manual_delivery_wizard_form manual.delivery.wizard.form manual.delivery form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_line_tree sale.order.line.tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_undelivered_line_filter sale.order.undelivered.line sale.order.line search New
Models touched (7)

New fields (1)
  • manual_delivery Boolean
    help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' string='Delivery Method' args: 'delivery.carrier'
  • commercial_partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True args: 'res.partner'
  • date_planned Datetime
  • line_ids One2many → manual.delivery.line
    string='Lines to validate' args: 'manual.delivery.line', 'manual_delivery_id'
  • partner_id Many2one → res.partner
    domain="['|',('id', '=', commercial_partner_id),('parent_id', '=', commercial_partner_id)]" ondelete='cascade' string='Delivery Address' args: 'res.partner'
  • route_id Many2one → stock.route
    domain=[('sale_selectable', '=', True)] help='Leave it blank to use the same route that is in the sale line' ondelete='cascade' string='Use specific Route' args: 'stock.route'
Public methods (2)
  • confirm(self)
    Creates the manual procurements
  • default_get(self, fields)
    @api.model

New fields (7)
  • manual_delivery_id Many2one → manual.delivery
    ondelete='cascade' readonly=True required=True string='Wizard' args: 'manual.delivery'
  • name Text
    related='order_line_id.name'
  • order_line_id Many2one → sale.order.line
    ondelete='cascade' readonly=True required=True string='Sale Order Line' args: 'sale.order.line'
  • product_id Many2one
    related='order_line_id.product_id'
  • qty_ordered Float
    help='Quantity ordered in the related Sale Order' readonly=True related='order_line_id.product_uom_qty' string='Ordered'
  • qty_procured Float
    related='order_line_id.qty_procured'
  • quantity Float
Public methods (0)

No public methods.

New fields (1)
  • date_planned Date
Public methods (0)

No public methods.

New fields (2)
  • has_pending_delivery Boolean
    compute='_compute_delivery_pending' string='Delivery pending?'
  • manual_delivery Boolean
    help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.'
Public methods (1)
  • action_manual_delivery_wizard(self)

New fields (2)
  • qty_procured Float
    compute='_compute_qty_procured' help='Quantity already planned or shipped (stock movements already created)' readonly=True store=True string='Quantity Procured'
  • qty_to_procure Float
    compute='_compute_qty_to_procure' help='There is Pending qty to add to a delivery' readonly=True store=True string='Quantity to Procure'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/17.0/sale_manual_delivery
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYSale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp SA
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, andrea
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - stock_delivery
    - sale_stock
    - 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
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - delivery
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
The goal of this module is to allow the manual creation of delivery
slips. If activated, a sale order won't directly impact the stock. It
will not make a reservation on the stock. It allows the delivery and the
impact on stock to be done manually when needed. The goal is to be used
on long term projects where not all the material is shipped at once. As
you make many shipments, every time you make a new delivery, you can
choose an new carrier as well as a planned date. A wizard helps you to
chose what to deliver by showing you how much you already planned to
ship.

![Field](../static/description/field.png)

![Wizard](../static/description/wizard.png)

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
crm_team_view_form crm.team.form crm.team group Inherits sales_team.crm_team_view_form
manual_delivery_wizard_form manual.delivery.wizard.form manual.delivery form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_line_tree sale.order.line.tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_undelivered_line_filter sale.order.undelivered.line sale.order.line search New
Models touched (7)

New fields (1)
  • manual_delivery Boolean
    help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' string='Delivery Method' args: 'delivery.carrier'
  • commercial_partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True args: 'res.partner'
  • date_planned Datetime
  • line_ids One2many → manual.delivery.line
    string='Lines to validate' args: 'manual.delivery.line', 'manual_delivery_id'
  • partner_id Many2one → res.partner
    domain="['|',('id', '=', commercial_partner_id),('parent_id', '=', commercial_partner_id)]" ondelete='cascade' string='Delivery Address' args: 'res.partner'
  • route_id Many2one → stock.route
    domain=[('sale_selectable', '=', True)] help='Leave it blank to use the same route that is in the sale line' ondelete='cascade' string='Use specific Route' args: 'stock.route'
Public methods (2)
  • confirm(self)
    Creates the manual procurements
  • default_get(self, fields)
    @api.model

New fields (7)
  • manual_delivery_id Many2one → manual.delivery
    ondelete='cascade' readonly=True required=True string='Wizard' args: 'manual.delivery'
  • name Text
    related='order_line_id.name'
  • order_line_id Many2one → sale.order.line
    ondelete='cascade' readonly=True required=True string='Sale Order Line' args: 'sale.order.line'
  • product_id Many2one
    related='order_line_id.product_id'
  • qty_ordered Float
    help='Quantity ordered in the related Sale Order' readonly=True related='order_line_id.product_uom_qty' string='Ordered'
  • qty_procured Float
    related='order_line_id.qty_procured'
  • quantity Float
Public methods (0)

No public methods.

New fields (1)
  • date_planned Date
Public methods (0)

No public methods.

New fields (2)
  • has_pending_delivery Boolean
    compute='_compute_delivery_pending' string='Delivery pending?'
  • manual_delivery Boolean
    help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.'
Public methods (1)
  • action_manual_delivery_wizard(self)

New fields (2)
  • qty_procured Float
    compute='_compute_qty_procured' help='Quantity already planned or shipped (stock movements already created)' readonly=True store=True string='Quantity Procured'
  • qty_to_procure Float
    compute='_compute_qty_to_procure' help='There is Pending qty to add to a delivery' readonly=True store=True string='Quantity to Procure'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/16.0/sale_manual_delivery
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYSale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp SA
COMMITTERS
COMMITTERSDenis Roussel, Weblate, OCA-git-bot, Simone Orsi, oca-ci, alex, nguyenhk, len
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:45
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - delivery
    - 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

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
crm_team_view_form crm.team.form crm.team group Inherits sales_team.crm_team_view_form
manual_delivery_wizard_form manual.delivery.wizard.form manual.delivery form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_line_tree sale.order.line.tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_undelivered_line_filter sale.order.undelivered.line sale.order.line search New
Models touched (7)

New fields (1)
  • manual_delivery Boolean
    default=False help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' string='Delivery Method' args: 'delivery.carrier'
  • commercial_partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True args: 'res.partner'
  • date_planned Datetime
  • line_ids One2many → manual.delivery.line
    string='Lines to validate' args: 'manual.delivery.line', 'manual_delivery_id'
  • partner_id Many2one → res.partner
    domain='\n [\n "|",\n ("id", "=", commercial_partner_id),\n ("parent_id", "=", commercial_partner_id),\n ],\n ' ondelete='cascade' string='Delivery Address' args: 'res.partner'
  • route_id Many2one → stock.route
    domain=[('sale_selectable', '=', True)] help='Leave it blank to use the same route that is in the sale line' ondelete='cascade' string='Use specific Route' args: 'stock.route'
Public methods (2)
  • confirm(self)
    Creates the manual procurements
  • default_get(self, fields)
    @api.model

New fields (7)
  • manual_delivery_id Many2one → manual.delivery
    ondelete='cascade' readonly=True required=True string='Wizard' args: 'manual.delivery'
  • name Text
    related='order_line_id.name'
  • order_line_id Many2one → sale.order.line
    ondelete='cascade' readonly=True required=True string='Sale Order Line' args: 'sale.order.line'
  • product_id Many2one
    related='order_line_id.product_id'
  • qty_ordered Float
    help='Quantity ordered in the related Sale Order' readonly=True related='order_line_id.product_uom_qty' string='Ordered'
  • qty_procured Float
    related='order_line_id.qty_procured'
  • quantity Float
Public methods (0)

No public methods.

New fields (1)
  • date_planned Date
Public methods (0)

No public methods.

New fields (2)
  • has_pending_delivery Boolean
    compute='_compute_delivery_pending' string='Delivery pending?'
  • manual_delivery Boolean
    default=False help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.'
Public methods (1)
  • action_manual_delivery_wizard(self)

New fields (2)
  • qty_procured Float
    compute='_compute_qty_procured' help='Quantity already planned or shipped (stock movements already created)' readonly=True store=True string='Quantity Procured'
  • qty_to_procure Float
    compute='_compute_qty_to_procure' help='There is Pending qty to add to a delivery' readonly=True store=True string='Quantity to Procure'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/14.0/sale_manual_delivery
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYSale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp SA
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Giovanni, Christopher Ormaza
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - delivery
    - 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

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
crm_team_view_form crm.team.form crm.team group Inherits sales_team.crm_team_view_form
manual_delivery_wizard_form manual.delivery.wizard.form manual.delivery form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_line_tree sale.order.line.tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_undelivered_line_filter sale.order.undelivered.line sale.order.line search New
Models touched (7)

New fields (1)
  • manual_delivery Boolean
    default=False help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.' string='Manual Delivery'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' string='Delivery Method' args: 'delivery.carrier'
  • commercial_partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True args: 'res.partner'
  • date_planned Datetime
    string='Date Planned'
  • line_ids One2many → manual.delivery.line
    string='Lines to validate' args: 'manual.delivery.line', 'manual_delivery_id'
  • partner_id Many2one → res.partner
    domain='\n [\n "|",\n ("id", "=", commercial_partner_id),\n ("parent_id", "=", commercial_partner_id),\n ],\n ' ondelete='cascade' string='Delivery Address' args: 'res.partner'
  • route_id Many2one → stock.location.route
    domain=[('sale_selectable', '=', True)] help='Leave it blank to use the same route that is in the sale line' ondelete='cascade' string='Use specific Route' args: 'stock.location.route'
Public methods (2)
  • confirm(self)
    Creates the manual procurements
  • default_get(self, fields)
    @api.model

New fields (7)
  • manual_delivery_id Many2one → manual.delivery
    ondelete='cascade' readonly=True required=True string='Wizard' args: 'manual.delivery'
  • name Text
    related='order_line_id.name'
  • order_line_id Many2one → sale.order.line
    ondelete='cascade' readonly=True required=True string='Sale Order Line' args: 'sale.order.line'
  • product_id Many2one
    related='order_line_id.product_id'
  • qty_ordered Float
    help='Quantity ordered in the related Sale Order' readonly=True related='order_line_id.product_uom_qty' string='Ordered'
  • qty_procured Float
    related='order_line_id.qty_procured'
  • quantity Float
Public methods (0)

No public methods.

New fields (1)
  • date_planned Date
Public methods (0)

No public methods.

New fields (2)
  • has_pending_delivery Boolean
    compute='_compute_delivery_pending' string='Delivery pending?'
  • manual_delivery Boolean
    default=False help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.' string='Manual Delivery'
Public methods (1)
  • action_manual_delivery_wizard(self)

New fields (2)
  • qty_procured Float
    compute='_compute_qty_procured' help='Quantity already planned or shipped (stock movements already created)' readonly=True store=True string='Quantity Procured'
  • qty_to_procure Float
    compute='_compute_qty_to_procure' help='There is Pending qty to add to a delivery' readonly=True store=True string='Quantity to Procure'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/13.0/sale_manual_delivery
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYSale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp SA
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp SA
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, Denis Roussel, Ivàn Todorovich, Adrien Peiffer, oca-travis, Weblate, OCA-git-bot, Telmo Santos, Zina Rasoamanana
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - delivery
    - 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

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
crm_team_view_form crm.team.form crm.team group Inherits sales_team.crm_team_view_form
manual_delivery_wizard_form manual.delivery.wizard.form manual.delivery form New
view_order_form sale.order.form sale.order button Inherits sale.view_order_form
view_order_line_tree sale.order.line.tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_undelivered_line_filter sale.order.undelivered.line sale.order.line search New
Models touched (7)

New fields (1)
  • manual_delivery Boolean
    default=False help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.' string='Manual Delivery'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    ondelete='cascade' string='Delivery Method' args: 'delivery.carrier'
  • commercial_partner_id Many2one → res.partner
    ondelete='cascade' readonly=True required=True args: 'res.partner'
  • date_planned Datetime
    string='Date Planned'
  • line_ids One2many → manual.delivery.line
    string='Lines to validate' args: 'manual.delivery.line', 'manual_delivery_id'
  • partner_id Many2one → res.partner
    domain='\n [\n "|",\n ("id", "=", commercial_partner_id),\n ("parent_id", "=", commercial_partner_id),\n ],\n ' ondelete='cascade' string='Delivery Address' args: 'res.partner'
  • route_id Many2one → stock.location.route
    domain=[('sale_selectable', '=', True)] help='Leave it blank to use the same route that is in the sale line' ondelete='cascade' string='Use specific Route' args: 'stock.location.route'
Public methods (2)
  • confirm(self)
    Creates the manual procurements
  • default_get(self, fields)
    @api.model

New fields (7)
  • manual_delivery_id Many2one → manual.delivery
    ondelete='cascade' readonly=True required=True string='Wizard' args: 'manual.delivery'
  • name Text
    related='order_line_id.name'
  • order_line_id Many2one → sale.order.line
    ondelete='cascade' readonly=True required=True string='Sale Order Line' args: 'sale.order.line'
  • product_id Many2one
    related='order_line_id.product_id'
  • qty_ordered Float
    help='Quantity ordered in the related Sale Order' readonly=True related='order_line_id.product_uom_qty' string='Ordered'
  • qty_procured Float
    related='order_line_id.qty_procured'
  • quantity Float
Public methods (0)

No public methods.

New fields (1)
  • date_planned Date
Public methods (0)

No public methods.

New fields (1)
  • manual_delivery Boolean
    default=False help='If enabled, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.' string='Manual Delivery'
Public methods (1)
  • action_manual_delivery_wizard(self)

New fields (2)
  • qty_procured Float
    compute='_compute_qty_procured' help='Quantity already planned or shipped (stock movements already created)' readonly=True store=True string='Quantity Procured'
  • qty_to_procure Float
    compute='_compute_qty_to_procure' help='There is Pending qty to add to a delivery' readonly=True store=True string='Quantity to Procure'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/12.0/sale_manual_delivery
VERSION
VERSION 2.0.3
CATEGORY
CATEGORYSale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSOCA Transbot, ahenriquez, oca-travis, Weblate, OCA-git-bot, sergiocorato, Vincent Van Rossem
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:17
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - delivery
    - 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

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
crm_team_view_form crm.team.form crm.team group Inherits sales_team.crm_team_view_form
manual_delivery_wizard_form manual.delivery.wizard.form manual.delivery form New
view_order_form sale.order.form sale.order xpath Inherits sale.view_order_form
view_order_line_form2 sale.order.line.form2 sale.order.line form New
view_order_line_tree sale.order.line.tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_undelivered_line_filter sale.order.undelivered.line sale.order.line search New
Models touched (7)

New fields (1)
  • manual_delivery Boolean
    default=False help='If Manual, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.' string='Manual Delivery'
Public methods (0)

No public methods.

New fields (6)
  • carrier_id Many2one → delivery.carrier
    string='Delivery Method' args: 'delivery.carrier'
  • commercial_partner_id Many2one → res.partner
    args: 'res.partner'
  • date_planned Datetime
    string='Date Planned'
  • line_ids One2many → manual.delivery.line
    string='Lines to validate' args: 'manual.delivery.line', 'manual_delivery_id'
  • partner_id Many2one → res.partner
    domain=PARTNER_DOMAIN string='Delivery Address' args: 'res.partner'
  • route_id Many2one → stock.location.route
    domain=[('sale_selectable', '=', True)] help='Leave it blank to use the same route that is in the sale line' ondelete='restrict' string='Use specific Route' args: 'stock.location.route'
Public methods (3)
  • default_get(self, fields)
    @api.model
  • fill_lines(self, sale_lines)
    @api.multi
  • record_picking(self)
    @api.multi

New fields (8)
  • existing_qty Float
    help='Quantity already planned or shipped (stock movements already created)' args: 'Existing quantity'
  • line_description Text
    related='order_line_id.name' string='Description'
  • manual_delivery_id Many2one → manual.delivery
    string='Wizard manual procurement' args: 'manual.delivery'
  • order_line_id Many2one → sale.order.line
    string='Sale Order Line' args: 'sale.order.line'
  • ordered_qty Float
    help='Quantity ordered in the related Sale Order' related='order_line_id.product_uom_qty' args: 'Ordered quantity'
  • product_id Many2one → product.product
    related='order_line_id.product_id' string='Product' args: 'product.product'
  • remaining_qty Float
    compute='_compute_remaining_qty' help='Remaining quantity available to deliver' args: 'Remaining quantity'
  • to_ship_qty Float
    args: 'Quantity to Ship'
Public methods (0)

No public methods.

New fields (1)
  • date_planned Date
Public methods (0)

No public methods.

New fields (1)
  • manual_delivery Boolean
    default=False help='If Manual, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.' string='Manual Delivery'
Public methods (2)
  • action_manual_delivery_wizard(self)
    @api.multi
  • toggle_manual(self)
    @api.multi

New fields (2)
  • existing_qty Float
    compute='_compute_get_existing_qty' help='Quantity already planned or shipped (stock movements already created)' readonly=True args: 'Existing quantity'
  • pending_qty_to_deliver Boolean
    compute='_compute_get_existing_qty' readonly=True store=True string='There is Pending qty to add to a delivery'
Public methods (0)

No public methods.

New fields (1)
  • carrier_id Many2one → delivery.carrier
    string='Delivery Method' args: 'delivery.carrier'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/10.0/sale_manual_delivery
VERSION
VERSION 2.0.1
CATEGORY
CATEGORYSales
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSMiquel Raïch, AaronHForgeFlow, OCA-git-bot, oca-ci, Vincent Van Rossem
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:56
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
    - delivery
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
crm_team_view_form crm.team.form crm.team group Inherits sales_team.crm_team_view_form
manual_delivery_wizard_form manual.delivery.wizard.form manual.delivery form New
procurement_group_form_view_inherited procurement.group.view.form.inherit.picking procurement.group field Inherits procurement.procurement_group_form_view
procurement_manual_form_view procurement.form procurement.order xpath Inherits procurement.procurement_form_view
view_order_form sale.order.form sale.order xpath Inherits sale.view_order_form
view_order_line_form2 sale.order.line.form2 sale.order.line form New
view_order_line_tree sale.order.line.tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_undelivered_line_filter sale.order.undelivered.line sale.order.line search New
Models touched (8)

New fields (1)
  • manual_delivery Boolean
    default=False help='If Manual, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.' string='Manual Delivery'
Public methods (0)

No public methods.

New fields (7)
  • carrier_id Many2one → delivery.carrier
    string='Delivery Method' args: 'delivery.carrier'
  • commercial_partner_id Many2one → res.partner
    args: 'res.partner'
  • date_planned Date
    string='Date Planned'
  • line_ids One2many → manual.delivery.line
    string='Lines to validate' args: 'manual.delivery.line', 'manual_delivery_id'
  • partner_id Many2one → res.partner
    domain=PARTNER_DOMAIN string='Delivery Address' args: 'res.partner'
  • route_id Many2one → stock.location.route
    domain=[('sale_selectable', '=', True)] help='Leave it blank to use the same route that is in the sale line' ondelete='restrict' string='Use specific Route' args: 'stock.location.route'
  • sale_line_ids Many2many → sale.order.line
    args: 'sale.order.line'
Public methods (4)
  • default_get(self, fields)
    @api.model
  • fill_lines(self, sale_lines)
    @api.multi
  • onchange_line_ids(self)
    @api.onchange('line_ids')
  • record_picking(self)
    @api.multi

New fields (8)
  • existing_qty Float
    digits=dp.get_precision('Product Unit of Measure') help='Quantity already planned or shipped (stock movements already created)' readonly=True args: 'Existing quantity'
  • line_description Text
    readonly=True related='order_line_id.name' string='Description'
  • manual_delivery_id Many2one → manual.delivery
    string='Wizard manual procurement' args: 'manual.delivery'
  • order_line_id Many2one → sale.order.line
    readonly=True string='Sale Order Line' args: 'sale.order.line'
  • ordered_qty Float
    digits=dp.get_precision('Product Unit of Measure') help='Quantity ordered in the related Sale Order' readonly=True args: 'Ordered quantity'
  • product_id Many2one → product.product
    readonly=True related='order_line_id.product_id' string='Product' args: 'product.product'
  • remaining_qty Float
    compute='_compute_remaining_qty' digits=dp.get_precision('Product Unit of Measure') help='Remaining quantity available to deliver' readonly=True args: 'Remaining quantity'
  • to_ship_qty Float
    digits=dp.get_precision('Product Unit of Measure') args: 'Quantity to Ship'
Public methods (0)

No public methods.

New fields (1)
  • date_planned Datetime
    index=True string='Schedule Date'
Public methods (0)

No public methods.

New fields (2)
  • carrier_id Many2one → delivery.carrier
    string='Delivery Method' args: 'delivery.carrier'
  • manual_delivery Boolean
    default=False help='If Manual, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.' string='Manual Delivery'
Public methods (0)

No public methods.

New fields (1)
  • manual_delivery Boolean
    default=False help='If Manual, the deliveries are not created at SO confirmation. You need to use the Create Delivery button in order to reserve and ship the goods.' string='Manual Delivery'
Public methods (2)
  • action_manual_delivery_wizard(self)
    @api.multi
  • toggle_manual(self)
    @api.multi

New fields (2)
  • existing_qty Float
    compute='_compute_existing_qty' help='Quantity already planned or shipped (stock movements already created)' args: 'Existing quantity'
  • pending_qty_to_deliver Boolean
    compute='_compute_existing_qty' readonly=True store=True string='There is Pending qty to add to a delivery'
Public methods (0)

No public methods.

New fields (0)

No new fields.

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