| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/stock-logistics-reservation |
| GIT | |
| GIT | https://github.com/OCA/stock-logistics-reservation.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/stock-logistics-reservation/tree/18.0/stock_available_to_promise_release |
| VERSION | |
| VERSION | 1.7.0 |
| CATEGORY | |
| CATEGORY | Stock Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, BCIM |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, BCIM |
| COMMITTERS | |
| COMMITTERS | Jacques-Etienne Baudoux, Akim Juillerat, Sébastien Alix, Ruchir Shukla, Weblate, OCA-git-bot, oca-ci, twalter-c2c, Mmequignon, SIP |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/stock-logistics-reservation |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:16 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/stock-logistics-warehouse: - stock_warehouse_out_pull odoo/odoo: - stock - product - base - base_setup - web - bus - web_tour - html_editor - uom - barcodes_gs1_nomenclature - barcodes - digest - portal - web_editor - http_routing - auth_signup - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
openupgradelib |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Currently the reservation is performed by adding reserved quantities on
quants, which is fine as long as the reservation is made right after the
order confirmation. This way, the first arrived, first served principle
is always applied. But if you release warehouse operations in a chosen
order (through deliver round for example), then you need to be sure the
reservations are made in respect to the first arrived first served
principle and not driven by the order you choose to release your
operations.
Allow each delivery move to mark a quantity as virtually reserved.
Simple rule would be first ordered, first served. More complex rules
could be implemented.
When the reservation of a picking move occurs, the quantity that is
reserved is then based on the quantity that was promised to the customer
(available to promise):
- The moves can be reserved in any order, the right quantity is always
reserved
- The removal strategy is computed only when the reservation occurs. If
you reserve order 2 before order 1 (because you have/want to deliver
order 2) you can apply correctly fifo/fefo.
- For instance order 1 must be delivered in 1 month, order 2 must be
delivered now.
- Virtually lock quantities to be able to serve order 1
- Reserve remaining quantity for order 2 and apply fefo
- Allow to limit the promised quantity in time. If a customer orders now
for a planned delivery in 2 months, then allow to not lock this
quantity as virtually reserved
- Allow to perform reservations jointly with your delivery rounds
planning. Reserve only the quants you planned to deliver.
When move qty is not completely satisfied on release, the remaining qty
is split and attached to a new picking that can be released later.
Important: if the "Stock reservation horizon" is set, the qty is
calculated on moves which have an expected date not beyond \$today +
\$horizon (in days).
Important: Moves without a warehouse set are not supported. If the
warehouse is not set on the move, the "Ordered Available to Promise"
Quantity will always be 0. It will also not be considered as consuming
existing stock. The warehouse gets set by the Stock rule, if the Rule is
not assigned to a warehouse, also the move will not end up with a
warehouse. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_normal_form_view |
product.product.move.release | product.product | div | Inherits product.product_normal_form_view |
res_config_settings_view_form_stock |
stock_available_to_promise_release res.config.settings form | res.config.settings | xpath | Inherits stock.res_config_settings_view_form |
stock_picking_type_form |
stock.picking.type.form | stock.picking.type | group | Inherits stock.view_picking_type_form |
stock_picking_type_kanban |
stock.picking.type.kanban | stock.picking.type | xpath | Inherits stock.stock_picking_type_kanban |
stock_route_form_view |
stock.route.form | stock.route | xpath | Inherits stock.stock_location_route_form_view |
view_move_release_form |
stock.move.release.form | stock.move | group | Inherits stock.view_move_form |
view_move_release_search |
stock.move.release.search | stock.move | field | Inherits stock.view_move_search |
view_move_release_tree |
Stock Moves Release | stock.move | field | Inherits stock.view_move_tree |
view_picking_release_form |
stock.picking.release.form | stock.picking | button | Inherits stock.view_picking_form |
view_picking_release_search |
stock.picking.release.search | stock.picking | filter | Inherits stock.view_picking_internal_search |
view_picking_release_tree |
stock.picking.release.tree | stock.picking | list | New |
view_stock_release_form |
Stock Allocations Release | stock.release | form | New |
view_stock_unrelease_form |
Stock Allocations Unrelease | stock.unrelease | form | New |
No new fields.
Public methods (1)run_defer(self, procurements)
move_need_release_count
Integer
compute='_compute_move_need_release_count'
string='Moves Need Release'
action_open_move_need_release(self)
stock_release_max_prep_time
Integer
default=180.0
help='When your release transfers, their scheduled date is rescheduled to now + this preparation time (in minutes). Their scheduled date represents the latest the transfers should be done, and therefore, past this timestamp, considered late.'
string='Transfer Releases Max Prep. Time'
stock_reservation_horizon
Integer
default=0
help='Compute promised quantities for order planned to be shipped until this number of days from today.'
No public methods.
stock_release_max_prep_time
Integer
readonly=False
related='company_id.stock_release_max_prep_time'
stock_reservation_horizon
Integer
readonly=False
related='company_id.stock_reservation_horizon'
No public methods.
No new fields.
Public methods (0)No public methods.
date_priority
Datetime
default=fields.Datetime.now
help='Date/time used to sort moves to deliver first. Used to calculate the ordered available to promise.'
index=True
string='Priority Date'
need_release
Boolean
index=True
ordered_available_to_promise_qty
Float
compute='_compute_ordered_available_to_promise'
digits='Product Unit of Measure'
help='Available to Promise quantity minus quantities promised to moves with higher priority (in default UoM of the product).'
string='Ordered Available to Promise (Real Qty)'
ordered_available_to_promise_uom_qty
Float
compute='_compute_ordered_available_to_promise'
digits='Product Unit of Measure'
help="Available to Promise quantity minus quantities promised to moves with higher priority (in initial demand's UoM)."
search='_search_ordered_available_to_promise_uom_qty'
string='Ordered Available to Promise'
previous_promised_qty
Float
compute='_compute_previous_promised_qty'
digits='Product Unit of Measure'
help='Quantities promised to moves with higher priority than this move (in default UoM of the product).'
string='Quantity Promised before this move'
release_ready
Boolean
compute='_compute_release_ready'
search='_search_release_ready'
unrelease_allowed
Boolean
compute='_compute_unrelease_allowed'
release_available_to_promise(self)
unrelease(self, safe_unrelease=False)
write(self, vals)
date_priority
Datetime
compute='_compute_date_priority'
help='Date/time used to sort moves to deliver first. Used to calculate the ordered available to promise.'
string='Priority Date'
last_release_date
Datetime
copy=False
need_release
Boolean
compute='_compute_need_release'
search='_search_need_release'
need_release_count
Integer
compute='_compute_need_release'
string='# of need release moves'
release_policy
Selection
default='direct'
help='It specifies how to release a transfer partially or all at once'
required=True
args: [('direct', 'As soon as possible'), ('one', 'When all products are ready')]
release_ready
Boolean
compute='_compute_release_ready'
search='_search_release_ready'
release_ready_count
Integer
compute='_compute_release_ready_count'
string='# of moves ready'
action_open_move_need_release(self)
release_available_to_promise(self)
unrelease(self, safe_unrelease=False)
count_picking_need_release
Integer
compute='_compute_picking_count'
prevent_new_move_after_release
Boolean
help='If checked, once a delivery picking has been released, no more moves will be added to it. For example, if you add lines in the origin sales order, the new moves will be added to a new delivery.'
string='Prevent new move after release'
unrelease_on_backorder
Boolean
help='If checked, when a backorder is created (i.e. at the validation of the delivery), the moves into the backorder are unreleased as long as they came from a route configured to manually release moves. This means that the moves that were not delivered are put back in need for release and the unprocessed internal pulled moves are canceled.'
string='Unrelease on backorder'
get_action_picking_tree_need_release(self)
No new fields.
Public methods (1)release(self)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
allow_unrelease_return_done_move
Boolean
default=False
help="If checked, unreleasing the delivery may create a new inverse internal operation on the last done pulled transfer. Otherwise, you won't be able to unrelease as soon as one of the pulled transfer is done"
string='Reverse done transfer on cancellation'
available_to_promise_defer_pull
Boolean
default=False
help='Do not create chained moved automatically for delivery. Transfers must be released manually when they have enough available to promise.'
string='Release based on Available to Promise'
no_backorder_at_release
Boolean
default=False
help='When releasing a transfer, do not create a backorder for the moves created for the unavailable quantities.'
string='No backorder at release'
No public methods.
allow_unrelease_return_done_move
Boolean
related='route_id.allow_unrelease_return_done_move'
store=True
available_to_promise_defer_pull
Boolean
related='route_id.available_to_promise_defer_pull'
store=True
no_backorder_at_release
Boolean
related='route_id.no_backorder_at_release'
store=True
No public methods.
No new fields.
Public methods (1)unrelease(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/wms |
| GIT | |
| GIT | https://github.com/OCA/wms.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/wms/tree/16.0/stock_available_to_promise_release |
| VERSION | |
| VERSION | 3.9.0 |
| CATEGORY | |
| CATEGORY | Stock Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, BCIM |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, BCIM |
| COMMITTERS | |
| COMMITTERS | Jacques-Etienne Baudoux, Laurent Mignon (ACSONE), Denis Roussel, sbejaoui, Sébastien Alix, Weblate, OCA-git-bot, Rodrigo, Michael Tietz, oca-ci, Telmo Santos, Joshua Lauer, Mmequignon, Nicolas Delbovier, Laurent Mignonn (ACSONE) |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/wms |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:59 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes_gs1_nomenclature - barcodes - digest - portal - web_editor - http_routing - auth_signup - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
openupgradelib |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_normal_form_view |
product.product.move.release | product.product | div | Inherits product.product_normal_form_view |
res_config_settings_view_form_stock |
stock_available_to_promise_release res.config.settings form | res.config.settings | div | Inherits stock.res_config_settings_view_form |
stock_picking_type_form |
stock.picking.type.form | stock.picking.type | group | Inherits stock.view_picking_type_form |
stock_picking_type_kanban |
stock.picking.type.kanban | stock.picking.type | xpath | Inherits stock.stock_picking_type_kanban |
stock_route_form_view |
stock.route.form | stock.route | xpath | Inherits stock.stock_location_route_form_view |
view_move_release_form |
stock.move.release.form | stock.move | group | Inherits stock.view_move_form |
view_move_release_search |
stock.move.release.search | stock.move | field | Inherits stock.view_move_search |
view_move_release_tree |
Stock Moves Release | stock.move | field | Inherits stock.view_move_tree |
view_picking_release_form |
stock.picking.release.form | stock.picking | sheet | Inherits stock.view_picking_form |
view_picking_release_search |
stock.picking.release.search | stock.picking | filter | Inherits stock.view_picking_internal_search |
view_picking_release_tree |
stock.picking.release.tree | stock.picking | field | Inherits stock.vpicktree |
view_stock_release_form |
Stock Allocations Release | stock.release | form | New |
view_stock_unrelease_form |
Stock Allocations Unrelease | stock.unrelease | form | New |
No new fields.
Public methods (1)run_defer(self, procurements)
move_need_release_count
Integer
compute='_compute_move_need_release_count'
string='Moves Need Release'
action_open_move_need_release(self)
stock_release_max_prep_time
Integer
default=180.0
help='When your release transfers, their scheduled date is rescheduled to now + this preparation time (in minutes). Their scheduled date represents the latest the transfers should be done, and therefore, past this timestamp, considered late.'
required=True
string='Transfer Releases Max Prep. Time'
stock_reservation_horizon
Integer
default=0
help='Compute promised quantities for order planned to be shipped until this number of days from today.'
No public methods.
stock_release_max_prep_time
Integer
readonly=False
related='company_id.stock_release_max_prep_time'
stock_reservation_horizon
Integer
readonly=False
related='company_id.stock_reservation_horizon'
No public methods.
No new fields.
Public methods (0)No public methods.
date_priority
Datetime
default=fields.Datetime.now
help='Date/time used to sort moves to deliver first. Used to calculate the ordered available to promise.'
index=True
string='Priority Date'
need_release
Boolean
index=True
ordered_available_to_promise_qty
Float
compute='_compute_ordered_available_to_promise'
digits='Product Unit of Measure'
help='Available to Promise quantity minus quantities promised to moves with higher priority (in default UoM of the product).'
string='Ordered Available to Promise (Real Qty)'
ordered_available_to_promise_uom_qty
Float
compute='_compute_ordered_available_to_promise'
digits='Product Unit of Measure'
help="Available to Promise quantity minus quantities promised to moves with higher priority (in initial demand's UoM)."
search='_search_ordered_available_to_promise_uom_qty'
string='Ordered Available to Promise'
previous_promised_qty
Float
compute='_compute_previous_promised_qty'
digits='Product Unit of Measure'
help='Quantities promised to moves with higher priority than this move (in default UoM of the product).'
string='Quantity Promised before this move'
release_ready
Boolean
compute='_compute_release_ready'
search='_search_release_ready'
unrelease_allowed
Boolean
compute='_compute_unrelease_allowed'
release_available_to_promise(self)
unrelease(self, safe_unrelease=False)
write(self, vals)
date_priority
Datetime
compute='_compute_date_priority'
help='Date/time used to sort moves to deliver first. Used to calculate the ordered available to promise.'
string='Priority Date'
last_release_date
Datetime
copy=False
need_release
Boolean
compute='_compute_need_release'
search='_search_need_release'
need_release_count
Integer
compute='_compute_need_release'
string='# of need release moves'
release_policy
Selection
default='direct'
help='It specifies how to release a transfer partially or all at once'
required=True
args: [('direct', 'As soon as possible'), ('one', 'When all products are ready')]
release_ready
Boolean
compute='_compute_release_ready'
search='_search_release_ready'
release_ready_count
Integer
compute='_compute_release_ready'
string='# of moves ready'
action_open_move_need_release(self)
release_available_to_promise(self)
unrelease(self, safe_unrelease=False)
count_picking_need_release
Integer
compute='_compute_picking_count'
prevent_new_move_after_release
Boolean
help='If checked, once a delivery picking has been released, no more moves will be added to it. For example, if you add lines in the origin sales order, the new moves will be added to a new delivery.'
string='Prevent new move after release'
unrelease_on_backorder
Boolean
help='If checked, when a backorder is created (i.e. at the validation of the delivery), the moves into the backorder are unreleased as long as they came from a route configured to manually release moves. This means that the moves that were not delivered are put back in need for release and the unprocessed internal pulled moves are canceled.'
string='Unrelease on backorder'
get_action_picking_tree_need_release(self)
No new fields.
Public methods (1)release(self)
No new fields.
Public methods (0)No public methods.
allow_unrelease_return_done_move
Boolean
default=False
help="If checked, unreleasing the delivery may create a new inverse internal operation on the last done pulled transfer. Otherwise, you won't be able to unrelease as soon as one of the pulled transfer is done"
string='Reverse done transfer on cancellation'
available_to_promise_defer_pull
Boolean
default=False
help='Do not create chained moved automatically for delivery. Transfers must be released manually when they have enough available to promise.'
string='Release based on Available to Promise'
no_backorder_at_release
Boolean
default=False
help='When releasing a transfer, do not create a backorder for the moves created for the unavailable quantities.'
string='No backorder at release'
No public methods.
allow_unrelease_return_done_move
Boolean
related='route_id.allow_unrelease_return_done_move'
store=True
available_to_promise_defer_pull
Boolean
related='route_id.available_to_promise_defer_pull'
store=True
no_backorder_at_release
Boolean
related='route_id.no_backorder_at_release'
store=True
No public methods.
No new fields.
Public methods (1)unrelease(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/wms |
| GIT | |
| GIT | https://github.com/OCA/wms.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/wms/tree/14.0/stock_available_to_promise_release |
| VERSION | |
| VERSION | 3.3.2 |
| CATEGORY | |
| CATEGORY | Stock Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, BCIM |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, BCIM |
| COMMITTERS | |
| COMMITTERS | Jacques-Etienne Baudoux, Sébastien Alix, Thierry Ducrest, Sébastien BEAU, oca-travis, Weblate, OCA-git-bot, Simone Orsi, hparfr, Michael Tietz, oca-ci, Ricardoalso, Hai Lang, Joshua Lauer, Mmequignon |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/wms |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:12 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes - digest - portal - web_editor - http_routing - auth_signup - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_normal_form_view |
product.product.move.release | product.product | div | Inherits product.product_normal_form_view |
res_config_settings_view_form_stock |
stock_available_to_promise_release res.config.settings form | res.config.settings | div | Inherits stock.res_config_settings_view_form |
stock_location_route_form_view |
stock.location.route.form | stock.location.route | xpath | Inherits stock.stock_location_route_form_view |
stock_picking_type_form |
stock.picking.type.form | stock.picking.type | xpath | Inherits stock.view_picking_type_form |
stock_picking_type_kanban |
stock.picking.type.kanban | stock.picking.type | field | Inherits stock.stock_picking_type_kanban |
view_move_release_form |
stock.move.release.form | stock.move | field | Inherits stock.view_move_form |
view_move_release_search |
stock.move.release.search | stock.move | field | Inherits stock.view_move_search |
view_move_release_tree |
Stock Moves Release | stock.move | field | Inherits stock.view_move_tree |
view_picking_release_form |
stock.picking.release.form | stock.picking | sheet | Inherits stock.view_picking_form |
view_picking_release_search |
stock.picking.release.search | stock.picking | filter | Inherits stock.view_picking_internal_search |
view_picking_release_tree |
stock.picking.release.tree | stock.picking | field | Inherits stock.vpicktree |
view_stock_release_form |
Stock Allocations Release | stock.release | form | New |
view_stock_unrelease_form |
Stock Allocations Un Release | stock.unrelease | form | New |
No new fields.
Public methods (1)run_defer(self, procurements)
move_need_release_count
Integer
compute='_compute_move_need_release_count'
string='Moves Need Release'
action_open_move_need_release(self)
stock_release_max_prep_time
Integer
default=180.0
help='When your release transfers, their scheduled date is rescheduled to now + this preparation time (in minutes). Their scheduled date represents the latest the transfers should be done, and therefore, past this timestamp, considered late.'
required=True
string='Transfer Releases Max Prep. Time'
stock_reservation_horizon
Integer
default=0
help='Compute promised quantities for order planned to be shipped until this number of days from today.'
No public methods.
stock_release_max_prep_time
Integer
readonly=False
related='company_id.stock_release_max_prep_time'
stock_reservation_horizon
Integer
readonly=False
related='company_id.stock_reservation_horizon'
No public methods.
No new fields.
Public methods (0)No public methods.
allow_unrelease_return_done_move
Boolean
default=False
help="If checked, unreleasing the delivery may create a new inverse internal operation on the last done pulled transfer. Otherwise, you won't be able to unrelease as soon as one of the pulled transfer is done"
string='Reverse done transfer on cancellation'
available_to_promise_defer_pull
Boolean
default=False
help='Do not create chained moved automatically for delivery. Transfers must be released manually when they have enough available to promise.'
string='Release based on Available to Promise'
no_backorder_at_release
Boolean
default=False
help='When releasing a transfer, do not create a backorder for the moves created for the unavailable quantities.'
string='No backorder at release'
No public methods.
city
Char
related='partner_id.city'
store=True
date_priority
Datetime
default=fields.Datetime.now
help='Date/time used to sort moves to deliver first. Used to calculate the ordered available to promise.'
index=True
string='Priority Date'
need_release
Boolean
copy=False
index=True
ordered_available_to_promise_qty
Float
compute='_compute_ordered_available_to_promise'
digits='Product Unit of Measure'
help='Available to Promise quantity minus quantities promised to moves with higher priority (in default UoM of the product).'
string='Ordered Available to Promise (Real Qty)'
ordered_available_to_promise_uom_qty
Float
compute='_compute_ordered_available_to_promise'
digits='Product Unit of Measure'
help="Available to Promise quantity minus quantities promised to moves with higher priority (in initial demand's UoM)."
search='_search_ordered_available_to_promise_uom_qty'
string='Ordered Available to Promise'
previous_promised_qty
Float
compute='_compute_previous_promised_qty'
digits='Product Unit of Measure'
help='Quantities promised to moves with higher priority than this move (in default UoM of the product).'
string='Quantity Promised before this move'
release_ready
Boolean
compute='_compute_release_ready'
search='_search_release_ready'
unrelease_allowed
Boolean
compute='_compute_unrelease_allowed'
zip_code
Char
related='partner_id.zip'
store=True
release_available_to_promise(self)
unrelease(self, safe_unrelease=False)
city
Char
related='partner_id.city'
store=True
date_priority
Datetime
compute='_compute_date_priority'
help='Date/time used to sort moves to deliver first. Used to calculate the ordered available to promise.'
string='Priority Date'
last_release_date
Datetime
need_release
Boolean
compute='_compute_need_release'
search='_search_need_release'
need_release_count
Integer
compute='_compute_need_release'
string='# of need release moves'
release_policy
Selection
default='direct'
help='It specifies how to release a transfer partially or all at once'
required=True
args: [('direct', 'As soon as possible'), ('one', 'When all products are ready')], 'Release Policy'
release_ready
Boolean
compute='_compute_release_ready'
search='_search_release_ready'
release_ready_count
Integer
compute='_compute_release_ready'
string='# of moves ready'
state_id
Many2one
related='partner_id.state_id'
store=True
zip_code
Char
related='partner_id.zip'
store=True
action_open_move_need_release(self)
release_available_to_promise(self)
unrelease(self, safe_unrelease=False)
count_picking_need_release
Integer
compute='_compute_picking_count'
prevent_new_move_after_release
Boolean
help='If checked, once a delivery picking has been released, no more moves will be added to it. For example, if you add lines in the origin sales order, the new moves will be added to a new delivery.'
string='Prevent new move after release'
unrelease_on_backorder
Boolean
help='If checked, when a backorder is created (i.e. at the validation of the delivery), the moves into the backorder are unreleased as long as they came from a route configured to manually release moves. This means that the moves that were not delivered are put back in need for release and the unprocessed internal pulled moves are canceled.'
string='Unrelease on backorder'
get_action_picking_tree_need_release(self)
No new fields.
Public methods (1)release(self)
allow_unrelease_return_done_move
Boolean
related='route_id.allow_unrelease_return_done_move'
store=True
available_to_promise_defer_pull
Boolean
related='route_id.available_to_promise_defer_pull'
store=True
no_backorder_at_release
Boolean
related='route_id.no_backorder_at_release'
store=True
No public methods.
No new fields.
Public methods (1)unrelease(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/wms |
| GIT | |
| GIT | https://github.com/OCA/wms.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/wms/tree/13.0/stock_available_to_promise_release |
| VERSION | |
| VERSION | 1.11.1 |
| CATEGORY | |
| CATEGORY | Stock Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | Guewen Baconnier, GitHub, Jacques-Etienne Baudoux, sebalix, OCA Transbot, Sébastien Alix, oca-travis, Weblate, OCA-git-bot, Simone Orsi, Iryna Vushnevska, Telmo Santos |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/wms |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:20 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_normal_form_view |
product.product.move.release | product.product | div | Inherits product.product_normal_form_view |
res_config_settings_view_form_stock |
stock_available_to_promise_release res.config.settings form | res.config.settings | div | Inherits stock.res_config_settings_view_form |
stock_location_route_form_view |
stock.location.route.form | stock.location.route | field | Inherits stock.stock_location_route_form_view |
stock_picking_type_kanban |
stock.picking.type.kanban | stock.picking.type | field | Inherits stock.stock_picking_type_kanban |
view_move_release_form |
stock.move.release.form | stock.move | field | Inherits stock.view_move_form |
view_move_release_search |
stock.move.release.search | stock.move | field | Inherits stock.view_move_search |
view_move_release_tree |
Stock Moves Release | stock.move | field | Inherits stock.view_move_tree |
view_picking_release_form |
stock.picking.release.form | stock.picking | button | Inherits stock.view_picking_form |
view_picking_release_search |
stock.picking.release.search | stock.picking | filter | Inherits stock.view_picking_internal_search |
view_picking_release_tree |
stock.picking.release.tree | stock.picking | field | Inherits stock.vpicktree |
view_stock_release_form |
Stock Allocations Release | stock.release | form | New |
No new fields.
Public methods (1)run_defer(self, procurements)
move_need_release_count
Integer
compute='_compute_move_need_release_count'
string='Moves Need Release'
action_open_move_need_release(self)
stock_release_max_prep_time
Integer
default=180.0
help='When your release transfers, their scheduled date is rescheduled to now + this preparation time (in minutes). Their scheduled date represents the latest the transfers should be done, and therefore, past this timestamp, considered late.'
required=True
string='Transfer Releases Max Prep. Time'
stock_reservation_horizon
Integer
default=0
help='Compute promised quantities for order planned to be shipped until this number of days from today.'
No public methods.
stock_release_max_prep_time
Integer
readonly=False
related='company_id.stock_release_max_prep_time'
stock_reservation_horizon
Integer
readonly=False
related='company_id.stock_reservation_horizon'
No public methods.
available_to_promise_defer_pull
Boolean
default=False
help='Do not create chained moved automatically for delivery. Transfers must be released manually when they have enough available to promise.'
string='Release based on Available to Promise'
No public methods.
city
Char
related='partner_id.city'
store=True
date_priority
Datetime
default=fields.Datetime.now
help='Date/time used to sort moves to deliver first. Used to calculate the ordered available to promise.'
index=True
string='Priority Date'
need_release
Boolean
copy=False
index=True
ordered_available_to_promise_qty
Float
compute='_compute_ordered_available_to_promise'
digits='Product Unit of Measure'
help='Available to Promise quantity minus quantities promised to moves with higher priority (in default UoM of the product).'
string='Ordered Available to Promise (Real Qty)'
ordered_available_to_promise_uom_qty
Float
compute='_compute_ordered_available_to_promise'
digits='Product Unit of Measure'
help="Available to Promise quantity minus quantities promised to moves with higher priority (in initial demand's UoM)."
search='_search_ordered_available_to_promise_uom_qty'
string='Ordered Available to Promise'
previous_promised_qty
Float
compute='_compute_previous_promised_qty'
digits='Product Unit of Measure'
help='Quantities promised to moves with higher priority than this move (in default UoM of the product).'
string='Quantity Promised before this move'
release_ready
Boolean
compute='_compute_release_ready'
search='_search_release_ready'
zip_code
Char
related='partner_id.zip'
store=True
release_available_to_promise(self)
city
Char
related='partner_id.city'
store=True
date_priority
Datetime
compute='_compute_date_priority'
help='Date/time used to sort moves to deliver first. Used to calculate the ordered available to promise.'
string='Priority Date'
need_release
Boolean
compute='_compute_need_release'
search='_search_need_release'
need_release_count
Integer
compute='_compute_need_release'
string='# of need release moves'
release_ready
Boolean
compute='_compute_release_ready'
search='_search_release_ready'
release_ready_count
Integer
compute='_compute_release_ready'
string='# of moves ready'
state_id
Many2one
related='partner_id.state_id'
store=True
zip_code
Char
related='partner_id.zip'
store=True
action_open_move_need_release(self)
release_available_to_promise(self)
count_picking_need_release
Integer
compute='_compute_picking_count'
get_action_picking_tree_need_release(self)
No new fields.
Public methods (1)release(self)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/wms |
| GIT | |
| GIT | https://github.com/OCA/wms.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/wms/tree/10.0/stock_available_to_promise_release |
| VERSION | |
| VERSION | 1.8.0 |
| CATEGORY | |
| CATEGORY | Stock Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp |
| COMMITTERS | |
| COMMITTERS | Guewen Baconnier, sebalix, Laurent Mignon (ACSONE), Sébastien Alix, oca-travis, OCA-git-bot, Simone Orsi, Iryna Vushnevska, Telmo Santos |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:20:03 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - stock - product - base - decimal_precision - base_setup - web_kanban - web - bus - web_tour - report - procurement - barcodes - web_planner |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
res_config_settings_view_form_stock |
stock_available_to_promise_release res.config.settings form | res.config.settings | div | Inherits stock.res_config_settings_view_form |
stock_location_route_form_view |
stock.location.route.form | stock.location.route | field | Inherits stock.stock_location_route_form_view |
view_move_release_form |
stock.move.release.form | stock.move | field | Inherits stock.view_move_form |
view_move_release_search |
stock.move.release.search | stock.move | field | Inherits stock.view_move_search |
view_move_release_tree |
Stock Moves Release | stock.move | field | Inherits stock.view_move_tree |
view_picking_release_form |
stock.picking.release.form | stock.picking | button | Inherits stock.view_picking_form |
view_stock_move_release_form |
Stock Move Release | stock.move.release | form | New |
No new fields.
Public methods (1)run_defer(self, procurements)
stock_reservation_horizon
Integer
default=0
help='Compute promised quantities for order planned to be shipped until this number of days from today.'
No public methods.
stock_reservation_horizon
Integer
readonly=False
related='company_id.stock_reservation_horizon'
No public methods.
available_to_promise_defer_pull
Boolean
default=False
help='Do not create chained moved automatically for delivery. Transfers must be released manually when they have enough available to promise.'
string='Release based on Available to Promise'
No public methods.
city
Char
related='partner_id.city'
store='True'
date_priority
Datetime
default=fields.Datetime.now
help='Date/time used to sort moves to deliver first. Used to calculate the ordered available to promise.'
index=True
string='Priority Date'
need_release
Boolean
index=True
ordered_available_to_promise_qty
Float
compute='_compute_ordered_available_to_promise'
digits='Product Unit of Measure'
help='Available to Promise quantity minus quantities promised to moves with higher priority (in default UoM of the product).'
search='_search_ordered_available_to_promise'
string='Ordered Available to Promise (Real Qty)'
ordered_available_to_promise_uom_qty
Float
compute='_compute_ordered_available_to_promise'
digits='Product Unit of Measure'
help="Available to Promise quantity minus quantities promised to moves with higher priority (in initial demand's UoM)."
search='_search_ordered_available_to_promise_uom_qty'
string='Ordered Available to Promise'
previous_promised_qty
Float
compute='_compute_previous_promised_qty'
digits='Product Unit of Measure'
help='Quantities promised to moves with higher priority than this move (in default UoM of the product).'
string='Quantity Promised before this move'
release_ready
Boolean
compute='_compute_release_ready'
search='_search_release_ready'
zip_code
Char
related='partner_id.zip'
store='True'
release_available_to_promise(self)
No new fields.
Public methods (1)release(self)
need_release
Boolean
compute='_compute_need_release'
release_available_to_promise(self)
No new fields.
Public methods (0)No public methods.