| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/purchase-workflow |
| GIT | |
| GIT | https://github.com/OCA/purchase-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/purchase-workflow/tree/18.0/purchase_blanket_order |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Fernando, Ugne Sinkeviciene |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/purchase-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:17 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - base_view_inheritance_extension odoo/odoo: - purchase - account - base_setup - base - web - onboarding - product - bus - web_tour - html_editor - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | A purchase blanket order is a pre-agreement to purchase a certain number of quantities of products at a specific price. From a confirmed blanket order, the users can create new purchase orders at such price, until the blanket order expires due to reaching the validity date. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_blanket_order_line_form |
purchase.blanket.order.line.form | purchase.blanket.order.line | form | New |
purchase_blanket_order_line_search |
purchase.blanket.order.line.search | purchase.blanket.order.line | search | New |
purchase_blanket_order_line_tree |
purchase.blanket.order.line.tree | purchase.blanket.order.line | list | New |
purchase_config_settings_form_view |
res.config.settings.form (in purchase_blanket_order) | res.config.settings | xpath | Inherits purchase.res_config_settings_view_form_purchase |
purchase_order_form |
purchase.order.from.blanket.form | purchase.order | xpath | Inherits purchase.purchase_order_form |
purchase_order_form_disable_adding_lines |
purchase.order.from.blanket.form - disable adding lines | purchase.order | xpath | Inherits purchase.purchase_order_form |
report_blanketorder |
report_blanketorder | ir.ui.view | qweb | New |
report_blanketorder_document |
report_blanketorder_document | ir.ui.view | qweb | New |
view_create_purchase_order |
Create Purchase Order | purchase.blanket.order.wizard | form | New |
view_purchase_blanket_order_form |
purchase.blanket.order.form | purchase.blanket.order | form | New |
view_purchase_blanket_order_search |
purchase.blanket.order.search | purchase.blanket.order | search | New |
view_purchase_blanket_order_tree |
purchase.blanket.order.tree | purchase.blanket.order | list | New |
amount_tax
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Total'
amount_untaxed
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Untaxed Amount'
tracking=True
cancelled
Boolean
copy=False
company_id
Many2one → res.company
default=_default_company
readonly=True
string='Company'
args: 'res.company'
confirmed
Boolean
copy=False
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date_start
Datetime
default=fields.Datetime.now
help='Blanket Order starting date.'
readonly=True
required=True
string='Start Date'
fiscal_position_id
Many2one → account.fiscal.position
string='Fiscal Position'
args: 'account.fiscal.position'
invoiced_uom_qty
Float
compute='_compute_uom_qty'
search='_search_invoiced_uom_qty'
string='Invoiced quantity'
line_count
Integer
compute='_compute_line_count'
readonly=True
string='Purchase Blanket Order Line count'
line_ids
One2many → purchase.blanket.order.line
copy=True
string='Order lines'
tracking=True
args: 'purchase.blanket.order.line', 'order_id'
name
Char
default='Draft'
readonly=True
note
Text
readonly=True
ordered_uom_qty
Float
compute='_compute_uom_qty'
search='_search_ordered_uom_qty'
string='Ordered quantity'
original_uom_qty
Float
compute='_compute_uom_qty'
search='_search_original_uom_qty'
string='Original quantity'
partner_id
Many2one → res.partner
readonly=True
string='Vendor'
tracking=True
args: 'res.partner'
partner_ref
Char
copy=False
string='Vendor Reference'
payment_term_id
Many2one → account.payment.term
readonly=True
string='Payment Terms'
args: 'account.payment.term'
product_id
Many2one → product.product
related='line_ids.product_id'
string='Product'
args: 'product.product'
purchase_count
Integer
compute='_compute_purchase_count'
received_uom_qty
Float
compute='_compute_uom_qty'
search='_search_received_uom_qty'
string='Received quantity'
remaining_uom_qty
Float
compute='_compute_uom_qty'
search='_search_remaining_uom_qty'
string='Remaining quantity'
state
Selection
compute='_compute_state'
copy=False
selection=[('draft', 'Draft'), ('open', 'Open'), ('done', 'Done'), ('expired', 'Expired')]
store=True
tracking=True
user_id
Many2one → res.users
default=<expr>
readonly=True
string='Responsible'
args: 'res.users'
validity_date
Date
help='Date until which the blanket order will be valid, after this date the blanket order will be marked as expired'
readonly=True
tracking=True
action_cancel(self)
action_confirm(self)
action_view_purchase_blanket_order_line(self)
action_view_purchase_orders(self)
compute_warnings(self)
copy_data(self, default=None)
expire_orders(self)
onchange_partner_id(self)
set_to_draft(self)
unlink(self)
company_id
Many2one → res.company
readonly=True
related='order_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='order_id.currency_id'
args: 'res.currency'
date_schedule
Date
string='Scheduled Date'
invoiced_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Invoiced quantity'
name
Char
string='Description'
tracking=True
order_id
Many2one → purchase.blanket.order
ondelete='cascade'
required=True
args: 'purchase.blanket.order'
ordered_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Ordered quantity'
original_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Original quantity'
partner_id
Many2one
readonly=True
related='order_id.partner_id'
string='Vendor'
payment_term_id
Many2one
readonly=True
related='order_id.payment_term_id'
string='Payment Terms'
price_subtotal
Monetary
compute='_compute_amount'
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
store=True
string='Tax'
price_total
Monetary
compute='_compute_amount'
store=True
string='Total'
price_unit
Float
digits='Product Price'
required=True
string='Price'
product_id
Many2one → product.product
domain=[('purchase_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
compute='_compute_product_uom'
precompute=True
readonly=False
required=True
store=True
string='Unit of Measure'
args: 'uom.uom'
purchase_lines
One2many → purchase.order.line
comodel_name='purchase.order.line'
copy=False
inverse_name='blanket_order_line'
readonly=True
string='Purchase Order Lines'
received_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Received quantity'
remaining_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity in base UoM'
remaining_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity'
sequence
Integer
taxes_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
user_id
Many2one
readonly=True
related='order_id.user_id'
string='Responsible'
onchange_product(self)
blanket_order_id
Many2one → purchase.blanket.order
default=_default_order
readonly=True
args: 'purchase.blanket.order'
line_ids
One2many → purchase.blanket.order.wizard.line
default=_default_lines
string='Lines'
args: 'purchase.blanket.order.wizard.line', 'wizard_id'
purchase_order_id
Many2one → purchase.order
domain=[('state', '=', 'draft')]
string='Purchase Order'
args: 'purchase.order'
create_purchase_order(self)
blanket_line_id
Many2one → purchase.blanket.order.line
currency_id
Many2one → res.currency
related='blanket_line_id.currency_id'
args: 'res.currency'
date_schedule
Date
readonly=True
related='blanket_line_id.date_schedule'
partner_id
Many2one → res.partner
readonly=True
related='blanket_line_id.partner_id'
string='Vendor'
args: 'res.partner'
price_unit
Float
readonly=True
related='blanket_line_id.price_unit'
product_id
Many2one → product.product
readonly=True
related='blanket_line_id.product_id'
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
readonly=True
related='blanket_line_id.product_uom'
string='Unit of Measure'
args: 'uom.uom'
qty
Float
required=True
string='Quantity to Order'
remaining_uom_qty
Float
readonly=True
related='blanket_line_id.remaining_uom_qty'
taxes_id
Many2many → account.tax
readonly=True
related='blanket_line_id.taxes_id'
args: 'account.tax'
wizard_id
Many2one → purchase.blanket.order.wizard
No public methods.
blanket_order_id
Many2one → purchase.blanket.order
readonly=True
related='order_line.blanket_order_line.order_id'
string='Origin blanket order'
args: 'purchase.blanket.order'
button_confirm(self)
check_currency(self)
check_partner_id(self)
blanket_order_line
Many2one → purchase.blanket.order.line
comodel_name='purchase.blanket.order.line'
copy=False
domain="[('product_id', '=', product_id)]"
check_currency(self)
check_date_planned(self)
create(self, vals_list)
get_assigned_bo_line(self)
onchange_blanket_order_line(self)
onchange_product_id(self)
group_purchase_blanket_disable_adding_lines
Boolean
implied_group='purchase_blanket_order.purchase_blanket_orders_disable_adding_lines'
string='Disable adding more lines to POs'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/purchase-workflow |
| GIT | |
| GIT | https://github.com/OCA/purchase-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/purchase-workflow/tree/17.0/purchase_blanket_order |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Daniel Reis, Weblate, OCA-git-bot, oca-ci, ArnauCForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/purchase-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - base_view_inheritance_extension odoo/odoo: - purchase - account - base_setup - base - web - onboarding - product - bus - web_tour - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | A purchase blanket order is a pre-agreement to purchase a certain number of quantities of products at a specific price. From a confirmed blanket order, the users can create new purchase orders at such price, until the blanket order expires due to reaching the validity date. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_blanket_order_line_form |
purchase.blanket.order.line.form | purchase.blanket.order.line | form | New |
purchase_blanket_order_line_search |
purchase.blanket.order.line.search | purchase.blanket.order.line | search | New |
purchase_blanket_order_line_tree |
purchase.blanket.order.line.tree | purchase.blanket.order.line | tree | New |
purchase_config_settings_form_view |
res.config.settings.form (in purchase_blanket_order) | res.config.settings | xpath | Inherits purchase.res_config_settings_view_form_purchase |
purchase_order_form |
purchase.order.from.blanket.form | purchase.order | xpath | Inherits purchase.purchase_order_form |
purchase_order_form_disable_adding_lines |
purchase.order.from.blanket.form - disable adding lines | purchase.order | xpath | Inherits purchase.purchase_order_form |
report_blanketorder |
report_blanketorder | ir.ui.view | qweb | New |
report_blanketorder_document |
report_blanketorder_document | ir.ui.view | qweb | New |
view_create_purchase_order |
Create Purchase Order | purchase.blanket.order.wizard | form | New |
view_purchase_blanket_order_form |
purchase.blanket.order.form | purchase.blanket.order | form | New |
view_purchase_blanket_order_search |
purchase.blanket.order.search | purchase.blanket.order | search | New |
view_purchase_blanket_order_tree |
purchase.blanket.order.tree | purchase.blanket.order | tree | New |
amount_tax
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Total'
amount_untaxed
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Untaxed Amount'
tracking=True
cancelled
Boolean
copy=False
company_id
Many2one → res.company
default=_default_company
readonly=True
string='Company'
args: 'res.company'
confirmed
Boolean
copy=False
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date_start
Datetime
default=fields.Datetime.now
help='Blanket Order starting date.'
readonly=True
required=True
string='Start Date'
fiscal_position_id
Many2one → account.fiscal.position
string='Fiscal Position'
args: 'account.fiscal.position'
invoiced_uom_qty
Float
compute='_compute_uom_qty'
search='_search_invoiced_uom_qty'
string='Invoiced quantity'
line_count
Integer
compute='_compute_line_count'
readonly=True
string='Purchase Blanket Order Line count'
line_ids
One2many → purchase.blanket.order.line
copy=True
string='Order lines'
tracking=True
args: 'purchase.blanket.order.line', 'order_id'
name
Char
default='Draft'
readonly=True
note
Text
readonly=True
ordered_uom_qty
Float
compute='_compute_uom_qty'
search='_search_ordered_uom_qty'
string='Ordered quantity'
original_uom_qty
Float
compute='_compute_uom_qty'
search='_search_original_uom_qty'
string='Original quantity'
partner_id
Many2one → res.partner
readonly=True
string='Vendor'
tracking=True
args: 'res.partner'
partner_ref
Char
copy=False
string='Vendor Reference'
payment_term_id
Many2one → account.payment.term
readonly=True
string='Payment Terms'
args: 'account.payment.term'
product_id
Many2one → product.product
related='line_ids.product_id'
string='Product'
args: 'product.product'
purchase_count
Integer
compute='_compute_purchase_count'
received_uom_qty
Float
compute='_compute_uom_qty'
search='_search_received_uom_qty'
string='Received quantity'
remaining_uom_qty
Float
compute='_compute_uom_qty'
search='_search_remaining_uom_qty'
string='Remaining quantity'
state
Selection
compute='_compute_state'
copy=False
selection=[('draft', 'Draft'), ('open', 'Open'), ('done', 'Done'), ('expired', 'Expired')]
store=True
tracking=True
user_id
Many2one → res.users
default=<expr>
readonly=True
string='Responsible'
args: 'res.users'
validity_date
Date
help='Date until which the blanket order will be valid, after this date the blanket order will be marked as expired'
readonly=True
tracking=True
action_cancel(self)
action_confirm(self)
action_view_purchase_blanket_order_line(self)
action_view_purchase_orders(self)
compute_warnings(self)
copy_data(self, default=None)
expire_orders(self)
onchange_partner_id(self)
set_to_draft(self)
unlink(self)
company_id
Many2one → res.company
readonly=True
related='order_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='order_id.currency_id'
args: 'res.currency'
date_schedule
Date
string='Scheduled Date'
invoiced_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Invoiced quantity'
name
Char
string='Description'
tracking=True
order_id
Many2one → purchase.blanket.order
ondelete='cascade'
required=True
args: 'purchase.blanket.order'
ordered_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Ordered quantity'
original_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Original quantity'
partner_id
Many2one
readonly=True
related='order_id.partner_id'
string='Vendor'
payment_term_id
Many2one
readonly=True
related='order_id.payment_term_id'
string='Payment Terms'
price_subtotal
Monetary
compute='_compute_amount'
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
store=True
string='Tax'
price_total
Monetary
compute='_compute_amount'
store=True
string='Total'
price_unit
Float
digits='Product Price'
required=True
string='Price'
product_id
Many2one → product.product
domain=[('purchase_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
compute='_compute_product_uom'
precompute=True
readonly=False
required=True
store=True
string='Unit of Measure'
args: 'uom.uom'
purchase_lines
One2many → purchase.order.line
comodel_name='purchase.order.line'
copy=False
inverse_name='blanket_order_line'
readonly=True
string='Purchase Order Lines'
received_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Received quantity'
remaining_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity in base UoM'
remaining_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity'
sequence
Integer
taxes_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
user_id
Many2one
readonly=True
related='order_id.user_id'
string='Responsible'
name_get(self)
onchange_product(self)
blanket_order_id
Many2one → purchase.blanket.order
default=_default_order
readonly=True
args: 'purchase.blanket.order'
line_ids
One2many → purchase.blanket.order.wizard.line
default=_default_lines
string='Lines'
args: 'purchase.blanket.order.wizard.line', 'wizard_id'
purchase_order_id
Many2one → purchase.order
domain=[('state', '=', 'draft')]
string='Purchase Order'
args: 'purchase.order'
create_purchase_order(self)
blanket_line_id
Many2one → purchase.blanket.order.line
currency_id
Many2one → res.currency
related='blanket_line_id.currency_id'
args: 'res.currency'
date_schedule
Date
readonly=True
related='blanket_line_id.date_schedule'
partner_id
Many2one → res.partner
readonly=True
related='blanket_line_id.partner_id'
string='Vendor'
args: 'res.partner'
price_unit
Float
readonly=True
related='blanket_line_id.price_unit'
product_id
Many2one → product.product
readonly=True
related='blanket_line_id.product_id'
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
readonly=True
related='blanket_line_id.product_uom'
string='Unit of Measure'
args: 'uom.uom'
qty
Float
required=True
string='Quantity to Order'
remaining_uom_qty
Float
readonly=True
related='blanket_line_id.remaining_uom_qty'
taxes_id
Many2many → account.tax
readonly=True
related='blanket_line_id.taxes_id'
args: 'account.tax'
wizard_id
Many2one → purchase.blanket.order.wizard
No public methods.
blanket_order_id
Many2one → purchase.blanket.order
readonly=True
related='order_line.blanket_order_line.order_id'
string='Origin blanket order'
args: 'purchase.blanket.order'
button_confirm(self)
check_currency(self)
check_partner_id(self)
blanket_order_line
Many2one → purchase.blanket.order.line
comodel_name='purchase.blanket.order.line'
copy=False
domain="[('product_id', '=', product_id)]"
check_currency(self)
check_date_planned(self)
create(self, vals_list)
get_assigned_bo_line(self)
onchange_blanket_order_line(self)
onchange_product_id(self)
group_purchase_blanket_disable_adding_lines
Boolean
implied_group='purchase_blanket_order.purchase_blanket_orders_disable_adding_lines'
string='Disable adding more lines to POs'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/purchase-workflow |
| GIT | |
| GIT | https://github.com/OCA/purchase-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/purchase-workflow/tree/16.0/purchase_blanket_order |
| VERSION | |
| VERSION | 2.1.3 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Bruno, ThiagoMForgeFlow, DavidJForgeFlow, Wesley Oliveira, Miguel Granda Martínez |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/purchase-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:55 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - base_view_inheritance_extension OCA/web: - web_action_conditionable odoo/odoo: - purchase - account - base_setup - base - web - product - bus - web_tour - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
astor |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_blanket_order_line_form |
purchase.blanket.order.line.form | purchase.blanket.order.line | form | New |
purchase_blanket_order_line_search |
purchase.blanket.order.line.search | purchase.blanket.order.line | search | New |
purchase_blanket_order_line_tree |
purchase.blanket.order.line.tree | purchase.blanket.order.line | tree | New |
purchase_config_settings_form_view |
res.config.settings.form (in purchase_blanket_order) | res.config.settings | xpath | Inherits purchase.res_config_settings_view_form_purchase |
purchase_order_form |
purchase.order.from.blanket.form | purchase.order | xpath | Inherits purchase.purchase_order_form |
purchase_order_form_disable_adding_lines |
purchase.order.from.blanket.form - disable adding lines | purchase.order | xpath | Inherits purchase.purchase_order_form |
report_blanketorder |
report_blanketorder | ir.ui.view | qweb | New |
report_blanketorder_document |
report_blanketorder_document | ir.ui.view | qweb | New |
view_create_purchase_order |
Create Purchase Order | purchase.blanket.order.wizard | form | New |
view_purchase_blanket_order_form |
purchase.blanket.order.form | purchase.blanket.order | form | New |
view_purchase_blanket_order_search |
purchase.blanket.order.search | purchase.blanket.order | search | New |
view_purchase_blanket_order_tree |
purchase.blanket.order.tree | purchase.blanket.order | tree | New |
amount_tax
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Total'
amount_untaxed
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Untaxed Amount'
tracking=True
cancelled
Boolean
copy=False
company_id
Many2one → res.company
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
args: 'res.company'
confirmed
Boolean
copy=False
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date_start
Datetime
default=fields.Datetime.now
help='Blanket Order starting date.'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Start Date'
fiscal_position_id
Many2one → account.fiscal.position
string='Fiscal Position'
args: 'account.fiscal.position'
invoiced_uom_qty
Float
compute='_compute_uom_qty'
search='_search_invoiced_uom_qty'
string='Invoiced quantity'
line_count
Integer
compute='_compute_line_count'
readonly=True
string='Purchase Blanket Order Line count'
line_ids
One2many → purchase.blanket.order.line
copy=True
string='Order lines'
tracking=True
args: 'purchase.blanket.order.line', 'order_id'
name
Char
default='Draft'
readonly=True
note
Text
readonly=True
states={'draft': [('readonly', False)]}
ordered_uom_qty
Float
compute='_compute_uom_qty'
search='_search_ordered_uom_qty'
string='Ordered quantity'
original_uom_qty
Float
compute='_compute_uom_qty'
search='_search_original_uom_qty'
string='Original quantity'
partner_id
Many2one → res.partner
readonly=True
states={'draft': [('readonly', False)]}
string='Vendor'
tracking=True
args: 'res.partner'
partner_ref
Char
copy=False
string='Vendor Reference'
payment_term_id
Many2one → account.payment.term
readonly=True
states={'draft': [('readonly', False)]}
string='Payment Terms'
args: 'account.payment.term'
product_id
Many2one → product.product
related='line_ids.product_id'
string='Product'
args: 'product.product'
purchase_count
Integer
compute='_compute_purchase_count'
received_uom_qty
Float
compute='_compute_uom_qty'
search='_search_received_uom_qty'
string='Received quantity'
remaining_uom_qty
Float
compute='_compute_uom_qty'
search='_search_remaining_uom_qty'
string='Remaining quantity'
state
Selection
compute='_compute_state'
copy=False
selection=[('draft', 'Draft'), ('open', 'Open'), ('done', 'Done'), ('expired', 'Expired')]
store=True
tracking=True
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Responsible'
args: 'res.users'
validity_date
Date
help='Date until which the blanket order will be valid, after this date the blanket order will be marked as expired'
readonly=True
states={'draft': [('readonly', False)]}
tracking=True
action_cancel(self)
action_confirm(self)
action_view_purchase_blanket_order_line(self)
action_view_purchase_orders(self)
compute_warnings(self)
copy_data(self, default=None)
expire_orders(self)
onchange_partner_id(self)
set_to_draft(self)
unlink(self)
company_id
Many2one → res.company
readonly=True
related='order_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='order_id.currency_id'
args: 'res.currency'
date_schedule
Date
string='Scheduled Date'
invoiced_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Invoiced quantity'
name
Char
string='Description'
tracking=True
order_id
Many2one → purchase.blanket.order
ondelete='cascade'
required=True
args: 'purchase.blanket.order'
ordered_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Ordered quantity'
original_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Original quantity'
partner_id
Many2one
readonly=True
related='order_id.partner_id'
string='Vendor'
payment_term_id
Many2one
readonly=True
related='order_id.payment_term_id'
string='Payment Terms'
price_subtotal
Monetary
compute='_compute_amount'
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
store=True
string='Tax'
price_total
Monetary
compute='_compute_amount'
store=True
string='Total'
price_unit
Float
digits='Product Price'
required=True
string='Price'
product_id
Many2one → product.product
domain=[('purchase_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
purchase_lines
One2many → purchase.order.line
comodel_name='purchase.order.line'
copy=False
inverse_name='blanket_order_line'
readonly=True
string='Purchase Order Lines'
received_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Received quantity'
remaining_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity in base UoM'
remaining_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity'
sequence
Integer
taxes_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
user_id
Many2one
readonly=True
related='order_id.user_id'
string='Responsible'
name_get(self)
onchange_product(self)
blanket_order_id
Many2one → purchase.blanket.order
default=_default_order
readonly=True
args: 'purchase.blanket.order'
line_ids
One2many → purchase.blanket.order.wizard.line
default=_default_lines
string='Lines'
args: 'purchase.blanket.order.wizard.line', 'wizard_id'
purchase_order_id
Many2one → purchase.order
domain=[('state', '=', 'draft')]
string='Purchase Order'
args: 'purchase.order'
create_purchase_order(self)
blanket_line_id
Many2one → purchase.blanket.order.line
currency_id
Many2one → res.currency
related='blanket_line_id.currency_id'
args: 'res.currency'
date_schedule
Date
readonly=True
related='blanket_line_id.date_schedule'
partner_id
Many2one → res.partner
readonly=True
related='blanket_line_id.partner_id'
string='Vendor'
args: 'res.partner'
price_unit
Float
readonly=True
related='blanket_line_id.price_unit'
product_id
Many2one → product.product
readonly=True
related='blanket_line_id.product_id'
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
readonly=True
related='blanket_line_id.product_uom'
string='Unit of Measure'
args: 'uom.uom'
qty
Float
required=True
string='Quantity to Order'
remaining_uom_qty
Float
readonly=True
related='blanket_line_id.remaining_uom_qty'
taxes_id
Many2many → account.tax
readonly=True
related='blanket_line_id.taxes_id'
args: 'account.tax'
wizard_id
Many2one → purchase.blanket.order.wizard
No public methods.
blanket_order_id
Many2one → purchase.blanket.order
readonly=True
related='order_line.blanket_order_line.order_id'
string='Origin blanket order'
args: 'purchase.blanket.order'
button_confirm(self)
check_currency(self)
check_partner_id(self)
blanket_order_line
Many2one → purchase.blanket.order.line
comodel_name='purchase.blanket.order.line'
copy=False
domain="[('product_id', '=', product_id)]"
check_currency(self)
check_date_planned(self)
create(self, vals_list)
get_assigned_bo_line(self)
onchange_blanket_order_line(self)
onchange_product_id(self)
group_purchase_blanket_disable_adding_lines
Boolean
implied_group='purchase_blanket_order.purchase_blanket_orders_disable_adding_lines'
string='Disable adding more lines to POs'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/purchase-workflow |
| GIT | |
| GIT | https://github.com/OCA/purchase-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/purchase-workflow/tree/15.0/purchase_blanket_order |
| VERSION | |
| VERSION | 2.0.1 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Lois Rilo, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, SergiCForgeFlow, Juany Davila |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/purchase-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:41 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - base_view_inheritance_extension OCA/web: - web_action_conditionable odoo/odoo: - purchase - account - base_setup - base - web - product - bus - web_tour - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
astor |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_blanket_order_line_form |
purchase.blanket.order.line.form | purchase.blanket.order.line | form | New |
purchase_blanket_order_line_search |
purchase.blanket.order.line.search | purchase.blanket.order.line | search | New |
purchase_blanket_order_line_tree |
purchase.blanket.order.line.tree | purchase.blanket.order.line | tree | New |
purchase_config_settings_form_view |
res.config.settings.form (in purchase_blanket_order) | res.config.settings | xpath | Inherits purchase.res_config_settings_view_form_purchase |
purchase_order_form |
purchase.order.from.blanket.form | purchase.order | xpath | Inherits purchase.purchase_order_form |
purchase_order_form_disable_adding_lines |
purchase.order.from.blanket.form - disable adding lines | purchase.order | xpath | Inherits purchase.purchase_order_form |
report_blanketorder |
report_blanketorder | ir.ui.view | qweb | New |
report_blanketorder_document |
report_blanketorder_document | ir.ui.view | qweb | New |
view_create_purchase_order |
Create Purchase Order | purchase.blanket.order.wizard | form | New |
view_purchase_blanket_order_form |
purchase.blanket.order.form | purchase.blanket.order | form | New |
view_purchase_blanket_order_search |
purchase.blanket.order.search | purchase.blanket.order | search | New |
view_purchase_blanket_order_tree |
purchase.blanket.order.tree | purchase.blanket.order | tree | New |
amount_tax
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Total'
amount_untaxed
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Untaxed Amount'
tracking=True
cancelled
Boolean
copy=False
company_id
Many2one → res.company
default=_default_company
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
args: 'res.company'
confirmed
Boolean
copy=False
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date_start
Datetime
default=fields.Datetime.now
help='Blanket Order starting date.'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Start Date'
fiscal_position_id
Many2one → account.fiscal.position
string='Fiscal Position'
args: 'account.fiscal.position'
invoiced_uom_qty
Float
compute='_compute_uom_qty'
search='_search_invoiced_uom_qty'
string='Invoiced quantity'
line_count
Integer
compute='_compute_line_count'
readonly=True
string='Purchase Blanket Order Line count'
line_ids
One2many → purchase.blanket.order.line
copy=True
string='Order lines'
tracking=True
args: 'purchase.blanket.order.line', 'order_id'
name
Char
default='Draft'
readonly=True
note
Text
readonly=True
states={'draft': [('readonly', False)]}
ordered_uom_qty
Float
compute='_compute_uom_qty'
search='_search_ordered_uom_qty'
string='Ordered quantity'
original_uom_qty
Float
compute='_compute_uom_qty'
search='_search_original_uom_qty'
string='Original quantity'
partner_id
Many2one → res.partner
readonly=True
states={'draft': [('readonly', False)]}
string='Vendor'
tracking=True
args: 'res.partner'
partner_ref
Char
copy=False
string='Vendor Reference'
payment_term_id
Many2one → account.payment.term
readonly=True
states={'draft': [('readonly', False)]}
string='Payment Terms'
args: 'account.payment.term'
product_id
Many2one → product.product
related='line_ids.product_id'
string='Product'
args: 'product.product'
purchase_count
Integer
compute='_compute_purchase_count'
received_uom_qty
Float
compute='_compute_uom_qty'
search='_search_received_uom_qty'
string='Received quantity'
remaining_uom_qty
Float
compute='_compute_uom_qty'
search='_search_remaining_uom_qty'
string='Remaining quantity'
state
Selection
compute='_compute_state'
copy=False
selection=[('draft', 'Draft'), ('open', 'Open'), ('done', 'Done'), ('expired', 'Expired')]
store=True
tracking=True
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Responsible'
args: 'res.users'
validity_date
Date
help='Date until which the blanket order will be valid, after this date the blanket order will be marked as expired'
readonly=True
states={'draft': [('readonly', False)]}
tracking=True
action_cancel(self)
action_confirm(self)
action_view_purchase_blanket_order_line(self)
action_view_purchase_orders(self)
copy_data(self, default=None)
expire_orders(self)
onchange_partner_id(self)
set_to_draft(self)
unlink(self)
company_id
Many2one → res.company
readonly=True
related='order_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='order_id.currency_id'
args: 'res.currency'
date_schedule
Date
string='Scheduled Date'
invoiced_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Invoiced quantity'
name
Char
string='Description'
tracking=True
order_id
Many2one → purchase.blanket.order
ondelete='cascade'
required=True
args: 'purchase.blanket.order'
ordered_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Ordered quantity'
original_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Original quantity'
partner_id
Many2one
readonly=True
related='order_id.partner_id'
string='Vendor'
payment_term_id
Many2one
readonly=True
related='order_id.payment_term_id'
string='Payment Terms'
price_subtotal
Monetary
compute='_compute_amount'
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
store=True
string='Tax'
price_total
Monetary
compute='_compute_amount'
store=True
string='Total'
price_unit
Float
digits='Product Price'
required=True
string='Price'
product_id
Many2one → product.product
domain=[('purchase_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
purchase_lines
One2many → purchase.order.line
comodel_name='purchase.order.line'
copy=False
inverse_name='blanket_order_line'
readonly=True
string='Purchase Order Lines'
received_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Received quantity'
remaining_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity in base UoM'
remaining_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity'
sequence
Integer
taxes_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
user_id
Many2one
readonly=True
related='order_id.user_id'
string='Responsible'
name_get(self)
onchange_product(self)
blanket_order_id
Many2one → purchase.blanket.order
default=_default_order
readonly=True
args: 'purchase.blanket.order'
line_ids
One2many → purchase.blanket.order.wizard.line
default=_default_lines
string='Lines'
args: 'purchase.blanket.order.wizard.line', 'wizard_id'
purchase_order_id
Many2one → purchase.order
domain=[('state', '=', 'draft')]
string='Purchase Order'
args: 'purchase.order'
create_purchase_order(self)
blanket_line_id
Many2one → purchase.blanket.order.line
currency_id
Many2one → res.currency
related='blanket_line_id.currency_id'
args: 'res.currency'
date_schedule
Date
readonly=True
related='blanket_line_id.date_schedule'
partner_id
Many2one → res.partner
readonly=True
related='blanket_line_id.partner_id'
string='Vendor'
args: 'res.partner'
price_unit
Float
readonly=True
related='blanket_line_id.price_unit'
product_id
Many2one → product.product
readonly=True
related='blanket_line_id.product_id'
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
readonly=True
related='blanket_line_id.product_uom'
string='Unit of Measure'
args: 'uom.uom'
qty
Float
required=True
string='Quantity to Order'
remaining_uom_qty
Float
readonly=True
related='blanket_line_id.remaining_uom_qty'
taxes_id
Many2many → account.tax
readonly=True
related='blanket_line_id.taxes_id'
args: 'account.tax'
wizard_id
Many2one → purchase.blanket.order.wizard
No public methods.
blanket_order_id
Many2one → purchase.blanket.order
readonly=True
related='order_line.blanket_order_line.order_id'
string='Origin blanket order'
args: 'purchase.blanket.order'
button_confirm(self)
check_currency(self)
check_partner_id(self)
blanket_order_line
Many2one → purchase.blanket.order.line
comodel_name='purchase.blanket.order.line'
copy=False
check_currency(self)
check_date_planned(self)
get_assigned_bo_line(self)
onchange_blanket_order_line(self)
onchange_product_id(self)
group_purchase_blanket_disable_adding_lines
Boolean
implied_group='purchase_blanket_order.purchase_blanket_orders_disable_adding_lines'
string='Disable adding more lines to SOs'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/purchase-workflow |
| GIT | |
| GIT | https://github.com/OCA/purchase-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/purchase-workflow/tree/14.0/purchase_blanket_order |
| VERSION | |
| VERSION | 2.0.1 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Lois Rilo, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, Don Kendall, oca-ci, Héctor Villarreal Ortega, Alessandro Uffreduzzi, SergiCForgeFlow, Kevin Luna, Juany Davila, Rodrigo Neves Trindadee, Connor Enterline |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/purchase-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - base_view_inheritance_extension OCA/web: - web_action_conditionable odoo/odoo: - purchase - account - base_setup - base - web - product - bus - web_tour - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
astor |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_blanket_order_line_form |
purchase.blanket.order.line.form | purchase.blanket.order.line | form | New |
purchase_blanket_order_line_search |
purchase.blanket.order.line.search | purchase.blanket.order.line | search | New |
purchase_blanket_order_line_tree |
purchase.blanket.order.line.tree | purchase.blanket.order.line | tree | New |
purchase_config_settings_form_view |
res.config.settings.form (in purchase_blanket_order) | res.config.settings | xpath | Inherits purchase.res_config_settings_view_form_purchase |
purchase_order_form |
purchase.order.from.blanket.form | purchase.order | xpath | Inherits purchase.purchase_order_form |
purchase_order_form_disable_adding_lines |
purchase.order.from.blanket.form - disable adding lines | purchase.order | xpath | Inherits purchase.purchase_order_form |
report_blanketorder |
report_blanketorder | ir.ui.view | qweb | New |
report_blanketorder_document |
report_blanketorder_document | ir.ui.view | qweb | New |
view_create_purchase_order |
Create Purchase Order | purchase.blanket.order.wizard | form | New |
view_purchase_blanket_order_form |
purchase.blanket.order.form | purchase.blanket.order | form | New |
view_purchase_blanket_order_search |
purchase.blanket.order.search | purchase.blanket.order | search | New |
view_purchase_blanket_order_tree |
purchase.blanket.order.tree | purchase.blanket.order | tree | New |
amount_tax
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Total'
amount_untaxed
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Untaxed Amount'
tracking=True
cancelled
Boolean
copy=False
company_id
Many2one → res.company
default=_default_company
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
args: 'res.company'
confirmed
Boolean
copy=False
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date_start
Datetime
default=fields.Datetime.now
help='Blanket Order starting date.'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Start Date'
fiscal_position_id
Many2one → account.fiscal.position
string='Fiscal Position'
args: 'account.fiscal.position'
invoiced_uom_qty
Float
compute='_compute_uom_qty'
search='_search_invoiced_uom_qty'
string='Invoiced quantity'
line_count
Integer
compute='_compute_line_count'
readonly=True
string='Purchase Blanket Order Line count'
line_ids
One2many → purchase.blanket.order.line
copy=True
string='Order lines'
tracking=True
args: 'purchase.blanket.order.line', 'order_id'
name
Char
default='Draft'
readonly=True
note
Text
readonly=True
states={'draft': [('readonly', False)]}
ordered_uom_qty
Float
compute='_compute_uom_qty'
search='_search_ordered_uom_qty'
string='Ordered quantity'
original_uom_qty
Float
compute='_compute_uom_qty'
search='_search_original_uom_qty'
string='Original quantity'
partner_id
Many2one → res.partner
readonly=True
states={'draft': [('readonly', False)]}
string='Vendor'
tracking=True
args: 'res.partner'
partner_ref
Char
copy=False
string='Vendor Reference'
payment_term_id
Many2one → account.payment.term
readonly=True
states={'draft': [('readonly', False)]}
string='Payment Terms'
args: 'account.payment.term'
product_id
Many2one → product.product
related='line_ids.product_id'
string='Product'
args: 'product.product'
purchase_count
Integer
compute='_compute_purchase_count'
received_uom_qty
Float
compute='_compute_uom_qty'
search='_search_received_uom_qty'
string='Received quantity'
remaining_uom_qty
Float
compute='_compute_uom_qty'
search='_search_remaining_uom_qty'
string='Remaining quantity'
state
Selection
compute='_compute_state'
copy=False
selection=[('draft', 'Draft'), ('open', 'Open'), ('done', 'Done'), ('expired', 'Expired')]
store=True
tracking=True
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Responsible'
args: 'res.users'
validity_date
Date
help='Date until which the blanket order will be valid, after this date the blanket order will be marked as expired'
readonly=True
states={'draft': [('readonly', False)]}
tracking=True
action_cancel(self)
action_confirm(self)
action_view_purchase_blanket_order_line(self)
action_view_purchase_orders(self)
copy_data(self, default=None)
expire_orders(self)
onchange_partner_id(self)
set_to_draft(self)
unlink(self)
company_id
Many2one → res.company
readonly=True
related='order_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='order_id.currency_id'
args: 'res.currency'
date_schedule
Date
string='Scheduled Date'
invoiced_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Invoiced quantity'
name
Char
tracking=True
args: 'Description'
order_id
Many2one → purchase.blanket.order
ondelete='cascade'
required=True
args: 'purchase.blanket.order'
ordered_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Ordered quantity'
original_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Original quantity'
partner_id
Many2one
readonly=True
related='order_id.partner_id'
string='Vendor'
payment_term_id
Many2one
readonly=True
related='order_id.payment_term_id'
string='Payment Terms'
price_subtotal
Monetary
compute='_compute_amount'
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
store=True
string='Tax'
price_total
Monetary
compute='_compute_amount'
store=True
string='Total'
price_unit
Float
digits='Product Price'
required=True
string='Price'
product_id
Many2one → product.product
domain=[('purchase_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
purchase_lines
One2many → purchase.order.line
comodel_name='purchase.order.line'
copy=False
inverse_name='blanket_order_line'
readonly=True
string='Purchase Order Lines'
received_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Received quantity'
remaining_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity in base UoM'
remaining_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity'
sequence
Integer
taxes_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
user_id
Many2one
readonly=True
related='order_id.user_id'
string='Responsible'
name_get(self)
onchange_product(self)
blanket_order_id
Many2one → purchase.blanket.order
default=_default_order
readonly=True
args: 'purchase.blanket.order'
line_ids
One2many → purchase.blanket.order.wizard.line
default=_default_lines
string='Lines'
args: 'purchase.blanket.order.wizard.line', 'wizard_id'
purchase_order_id
Many2one → purchase.order
domain=[('state', '=', 'draft')]
string='Purchase Order'
args: 'purchase.order'
create_purchase_order(self)
blanket_line_id
Many2one → purchase.blanket.order.line
currency_id
Many2one → res.currency
related='blanket_line_id.currency_id'
args: 'res.currency'
date_schedule
Date
readonly=True
related='blanket_line_id.date_schedule'
partner_id
Many2one → res.partner
readonly=True
related='blanket_line_id.partner_id'
string='Vendor'
args: 'res.partner'
price_unit
Float
readonly=True
related='blanket_line_id.price_unit'
product_id
Many2one → product.product
readonly=True
related='blanket_line_id.product_id'
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
readonly=True
related='blanket_line_id.product_uom'
string='Unit of Measure'
args: 'uom.uom'
qty
Float
required=True
string='Quantity to Order'
remaining_uom_qty
Float
readonly=True
related='blanket_line_id.remaining_uom_qty'
taxes_id
Many2many → account.tax
readonly=True
related='blanket_line_id.taxes_id'
args: 'account.tax'
wizard_id
Many2one → purchase.blanket.order.wizard
No public methods.
blanket_order_id
Many2one → purchase.blanket.order
readonly=True
related='order_line.blanket_order_line.order_id'
string='Origin blanket order'
args: 'purchase.blanket.order'
button_confirm(self)
check_currency(self)
check_partner_id(self)
blanket_order_line
Many2one → purchase.blanket.order.line
copy=False
args: 'purchase.blanket.order.line', 'Blanket Order Line'
check_currency(self)
check_date_planned(self)
get_assigned_bo_line(self)
onchange_blanket_order_line(self)
onchange_product_id(self)
group_purchase_blanket_disable_adding_lines
Boolean
implied_group='purchase_blanket_order.purchase_blanket_orders_disable_adding_lines'
string='Disable adding more lines to SOs'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/purchase-workflow |
| GIT | |
| GIT | https://github.com/OCA/purchase-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/purchase-workflow/tree/13.0/purchase_blanket_order |
| VERSION | |
| VERSION | 3.0.0 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Lois Rilo, Víctor Martínez, oca-travis, OCA-git-bot, oca-ci, Héctor Villarreal Ortega, ThiagoMForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/purchase-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:18 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - base_view_inheritance_extension OCA/web: - web_action_conditionable odoo/odoo: - purchase - account - base_setup - base - web - product - bus - web_tour - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
astor |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_blanket_order_line_form |
purchase.blanket.order.line.form | purchase.blanket.order.line | form | New |
purchase_blanket_order_line_search |
purchase.blanket.order.line.search | purchase.blanket.order.line | search | New |
purchase_blanket_order_line_tree |
purchase.blanket.order.line.tree | purchase.blanket.order.line | tree | New |
purchase_config_settings_form_view |
res.config.settings.form (in purchase_blanket_order) | res.config.settings | xpath | Inherits purchase.res_config_settings_view_form_purchase |
purchase_order_form |
purchase.order.from.blanket.form | purchase.order | field | Inherits purchase.purchase_order_form |
purchase_order_form_disable_adding_lines |
purchase.order.from.blanket.form - disable adding lines | purchase.order | xpath | Inherits purchase.purchase_order_form |
report_blanketorder |
report_blanketorder | ir.ui.view | qweb | New |
report_blanketorder_document |
report_blanketorder_document | ir.ui.view | qweb | New |
view_create_purchase_order |
Create Purchase Order | purchase.blanket.order.wizard | form | New |
view_purchase_blanket_order_form |
purchase.blanket.order.form | purchase.blanket.order | form | New |
view_purchase_blanket_order_search |
purchase.blanket.order.search | purchase.blanket.order | search | New |
view_purchase_blanket_order_tree |
purchase.blanket.order.tree | purchase.blanket.order | tree | New |
amount_tax
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Total'
amount_untaxed
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Untaxed Amount'
tracking=True
company_id
Many2one → res.company
default=_default_company
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
args: 'res.company'
confirmed
Boolean
copy=False
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date_start
Datetime
default=fields.Datetime.now
help='Blanket Order starting date.'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Start Date'
fiscal_position_id
Many2one → account.fiscal.position
string='Fiscal Position'
args: 'account.fiscal.position'
invoiced_uom_qty
Float
compute='_compute_uom_qty'
search='_search_invoiced_uom_qty'
string='Invoiced quantity'
line_count
Integer
compute='_compute_line_count'
readonly=True
string='Purchase Blanket Order Line count'
line_ids
One2many → purchase.blanket.order.line
copy=True
string='Order lines'
tracking=True
args: 'purchase.blanket.order.line', 'order_id'
name
Char
default='Draft'
readonly=True
note
Text
readonly=True
states={'draft': [('readonly', False)]}
ordered_uom_qty
Float
compute='_compute_uom_qty'
search='_search_ordered_uom_qty'
string='Ordered quantity'
original_uom_qty
Float
compute='_compute_uom_qty'
search='_search_original_uom_qty'
string='Original quantity'
partner_id
Many2one → res.partner
readonly=True
states={'draft': [('readonly', False)]}
string='Vendor'
tracking=True
args: 'res.partner'
partner_ref
Char
copy=False
string='Vendor Reference'
payment_term_id
Many2one → account.payment.term
readonly=True
states={'draft': [('readonly', False)]}
string='Payment Terms'
args: 'account.payment.term'
product_id
Many2one → product.product
related='line_ids.product_id'
string='Product'
args: 'product.product'
purchase_count
Integer
compute='_compute_purchase_count'
received_uom_qty
Float
compute='_compute_uom_qty'
search='_search_received_uom_qty'
string='Received quantity'
remaining_uom_qty
Float
compute='_compute_uom_qty'
search='_search_remaining_uom_qty'
string='Remaining quantity'
state
Selection
compute='_compute_state'
copy=False
selection=[('draft', 'Draft'), ('open', 'Open'), ('done', 'Done'), ('expired', 'Expired')]
store=True
tracking=True
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Responsible'
args: 'res.users'
validity_date
Date
help='Date until which the blanket order will be valid, after this date the blanket order will be marked as expired'
readonly=True
states={'draft': [('readonly', False)]}
tracking=True
action_cancel(self)
action_confirm(self)
action_view_purchase_blanket_order_line(self)
action_view_purchase_orders(self)
copy_data(self, default=None)
expire_orders(self)
onchange_partner_id(self)
set_to_draft(self)
unlink(self)
company_id
Many2one → res.company
readonly=True
related='order_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='order_id.currency_id'
args: 'res.currency'
date_schedule
Date
string='Scheduled Date'
invoiced_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Invoiced quantity'
name
Char
tracking=True
args: 'Description'
order_id
Many2one → purchase.blanket.order
ondelete='cascade'
required=True
args: 'purchase.blanket.order'
ordered_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Ordered quantity'
original_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Original quantity'
partner_id
Many2one
readonly=True
related='order_id.partner_id'
string='Vendor'
payment_term_id
Many2one
readonly=True
related='order_id.payment_term_id'
string='Payment Terms'
price_subtotal
Monetary
compute='_compute_amount'
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
store=True
string='Tax'
price_total
Monetary
compute='_compute_amount'
store=True
string='Total'
price_unit
Float
digits='Product Price'
required=True
string='Price'
product_id
Many2one → product.product
domain=[('purchase_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
purchase_lines
One2many → purchase.order.line
comodel_name='purchase.order.line'
copy=False
inverse_name='blanket_order_line'
readonly=True
string='Purchase Order Lines'
received_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Received quantity'
remaining_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity in base UoM'
remaining_uom_qty
Float
compute='_compute_quantities'
digits='Product Unit of Measure'
store=True
string='Remaining quantity'
sequence
Integer
taxes_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
user_id
Many2one
readonly=True
related='order_id.user_id'
string='Responsible'
name_get(self)
onchange_product(self)
blanket_order_id
Many2one → purchase.blanket.order
default=_default_order
readonly=True
args: 'purchase.blanket.order'
line_ids
One2many → purchase.blanket.order.wizard.line
default=_default_lines
string='Lines'
args: 'purchase.blanket.order.wizard.line', 'wizard_id'
purchase_order_id
Many2one → purchase.order
domain=[('state', '=', 'draft')]
string='Purchase Order'
args: 'purchase.order'
create_purchase_order(self)
blanket_line_id
Many2one → purchase.blanket.order.line
currency_id
Many2one → res.currency
related='blanket_line_id.currency_id'
args: 'res.currency'
date_schedule
Date
readonly=True
related='blanket_line_id.date_schedule'
partner_id
Many2one → res.partner
readonly=True
related='blanket_line_id.partner_id'
string='Vendor'
args: 'res.partner'
price_unit
Float
readonly=True
related='blanket_line_id.price_unit'
product_id
Many2one → product.product
readonly=True
related='blanket_line_id.product_id'
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
readonly=True
related='blanket_line_id.product_uom'
string='Unit of Measure'
args: 'uom.uom'
qty
Float
required=True
string='Quantity to Order'
remaining_uom_qty
Float
readonly=True
related='blanket_line_id.remaining_uom_qty'
taxes_id
Many2many → account.tax
readonly=True
related='blanket_line_id.taxes_id'
args: 'account.tax'
wizard_id
Many2one → purchase.blanket.order.wizard
No public methods.
blanket_order_id
Many2one → purchase.blanket.order
readonly=True
related='order_line.blanket_order_line.order_id'
string='Origin blanket order'
args: 'purchase.blanket.order'
button_confirm(self)
check_currency(self)
check_partner_id(self)
blanket_order_line
Many2one → purchase.blanket.order.line
copy=False
args: 'purchase.blanket.order.line', 'Blanket Order Line'
check_currency(self)
check_date_planned(self)
get_assigned_bo_line(self)
onchange_blanket_order_line(self)
onchange_product_id(self)
group_purchase_blanket_disable_adding_lines
Boolean
implied_group='purchase_blanket_order.purchase_blanket_orders_disable_adding_lines'
string='Disable adding more lines to SOs'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/purchase-workflow |
| GIT | |
| GIT | https://github.com/OCA/purchase-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/purchase-workflow/tree/12.0/purchase_blanket_order |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), ForgeFlow |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), ForgeFlow |
| COMMITTERS | |
| COMMITTERS | oca-travis, OCA-git-bot, HviorForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/purchase-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:23 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - purchase - account - base_setup - base - web - product - decimal_precision - bus - web_tour - uom - analytic - portal - http_routing - digest |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_blanket_order_line_form |
purchase.blanket.order.line.form | purchase.blanket.order.line | form | New |
purchase_blanket_order_line_search |
purchase.blanket.order.line.search | purchase.blanket.order.line | search | New |
purchase_blanket_order_line_tree |
purchase.blanket.order.line.tree | purchase.blanket.order.line | tree | New |
purchase_config_settings_form_view |
res.config.settings.form (in purchase_blanket_order) | res.config.settings | xpath | Inherits purchase.res_config_settings_view_form_purchase |
purchase_order_form |
purchase.order.from.blanket.form | purchase.order | field | Inherits purchase.purchase_order_form |
purchase_order_form_disable_adding_lines |
purchase.order.from.blanket.form - disable adding lines | purchase.order | xpath | Inherits purchase.purchase_order_form |
report_blanketorder |
report_blanketorder | ir.ui.view | qweb | New |
report_blanketorder_document |
report_blanketorder_document | ir.ui.view | qweb | New |
view_create_purchase_order |
Create Purchase Order | purchase.blanket.order.wizard | form | New |
view_purchase_blanket_order_form |
purchase.blanket.order.form | purchase.blanket.order | form | New |
view_purchase_blanket_order_search |
purchase.blanket.order.search | purchase.blanket.order | search | New |
view_purchase_blanket_order_tree |
purchase.blanket.order.tree | purchase.blanket.order | tree | New |
amount_tax
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Total'
amount_untaxed
Monetary
compute='_compute_amount_all'
readonly=True
store=True
string='Untaxed Amount'
track_visibility='always'
company_id
Many2one → res.company
default=_default_company
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
args: 'res.company'
confirmed
Boolean
copy=False
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date_start
Datetime
default=fields.Datetime.now
help='Blanket Order starting date.'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Start Date'
fiscal_position_id
Many2one → account.fiscal.position
string='Fiscal Position'
args: 'account.fiscal.position'
invoiced_uom_qty
Float
compute='_compute_uom_qty'
search='_search_invoiced_uom_qty'
string='Invoiced quantity'
line_count
Integer
compute='_compute_line_count'
readonly=True
string='Purchase Blanket Order Line count'
line_ids
One2many → purchase.blanket.order.line
copy=True
string='Order lines'
track_visibility='always'
args: 'purchase.blanket.order.line', 'order_id'
name
Char
default='Draft'
readonly=True
note
Text
readonly=True
states={'draft': [('readonly', False)]}
ordered_uom_qty
Float
compute='_compute_uom_qty'
search='_search_ordered_uom_qty'
string='Ordered quantity'
original_uom_qty
Float
compute='_compute_uom_qty'
search='_search_original_uom_qty'
string='Original quantity'
partner_id
Many2one → res.partner
readonly=True
states={'draft': [('readonly', False)]}
string='Vendor'
track_visibility='always'
args: 'res.partner'
payment_term_id
Many2one → account.payment.term
readonly=True
states={'draft': [('readonly', False)]}
string='Payment Terms'
args: 'account.payment.term'
product_id
Many2one → product.product
related='line_ids.product_id'
string='Product'
args: 'product.product'
purchase_count
Integer
compute='_compute_purchase_count'
received_uom_qty
Float
compute='_compute_uom_qty'
search='_search_received_uom_qty'
string='Received quantity'
remaining_uom_qty
Float
compute='_compute_uom_qty'
search='_search_remaining_uom_qty'
string='Remaining quantity'
state
Selection
compute='_compute_state'
copy=False
selection=[('draft', 'Draft'), ('open', 'Open'), ('done', 'Done'), ('expired', 'Expired'), ('cancel', 'Cancelled')]
store=True
track_visibility='always'
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Responsible'
args: 'res.users'
validity_date
Date
help='Date until which the blanket order will be valid, after this date the blanket order will be marked as expired'
readonly=True
states={'draft': [('readonly', False)]}
track_visibility='always'
action_cancel(self)
action_confirm(self)
action_view_purchase_blanket_order_line(self)
action_view_purchase_orders(self)
copy_data(self, default=None)
expire_orders(self)
onchange_partner_id(self)
set_to_draft(self)
unlink(self)
company_id
Many2one → res.company
readonly=True
related='order_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='order_id.currency_id'
args: 'res.currency'
date_schedule
Date
string='Scheduled Date'
invoiced_uom_qty
Float
compute='_compute_quantities'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Invoiced quantity'
name
Char
track_visibility='onchange'
args: 'Description'
order_id
Many2one → purchase.blanket.order
ondelete='cascade'
required=True
args: 'purchase.blanket.order'
ordered_uom_qty
Float
compute='_compute_quantities'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Ordered quantity'
original_uom_qty
Float
default=1.0
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Original quantity'
partner_id
Many2one
readonly=True
related='order_id.partner_id'
string='Vendor'
payment_term_id
Many2one
readonly=True
related='order_id.payment_term_id'
string='Payment Terms'
price_subtotal
Monetary
compute='_compute_amount'
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
store=True
string='Tax'
price_total
Monetary
compute='_compute_amount'
store=True
string='Total'
price_unit
Float
digits=dp.get_precision('Product Price')
required=True
string='Price'
product_id
Many2one → product.product
domain=[('purchase_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
purchase_lines
One2many → purchase.order.line
comodel_name='purchase.order.line'
copy=False
inverse_name='blanket_order_line'
readonly=True
string='Purchase Order Lines'
received_uom_qty
Float
compute='_compute_quantities'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Received quantity'
remaining_qty
Float
compute='_compute_quantities'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Remaining quantity in base UoM'
remaining_uom_qty
Float
compute='_compute_quantities'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Remaining quantity'
sequence
Integer
taxes_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
user_id
Many2one
readonly=True
related='order_id.user_id'
string='Responsible'
name_get(self)
onchange_product(self)
blanket_order_id
Many2one → purchase.blanket.order
readonly=True
args: 'purchase.blanket.order'
line_ids
One2many → purchase.blanket.order.wizard.line
default=_default_lines
string='Lines'
args: 'purchase.blanket.order.wizard.line', 'wizard_id'
purchase_order_id
Many2one → purchase.order
domain=[('state', '=', 'draft')]
string='Purchase Order'
args: 'purchase.order'
create_purchase_order(self)
blanket_line_id
Many2one → purchase.blanket.order.line
currency_id
Many2one → res.currency
related='blanket_line_id.currency_id'
args: 'res.currency'
date_schedule
Date
readonly=True
related='blanket_line_id.date_schedule'
partner_id
Many2one → res.partner
readonly=True
related='blanket_line_id.partner_id'
string='Vendor'
args: 'res.partner'
price_unit
Float
readonly=True
related='blanket_line_id.price_unit'
product_id
Many2one → product.product
readonly=True
related='blanket_line_id.product_id'
string='Product'
args: 'product.product'
product_uom
Many2one → uom.uom
readonly=True
related='blanket_line_id.product_uom'
string='Unit of Measure'
args: 'uom.uom'
qty
Float
required=True
string='Quantity to Order'
remaining_uom_qty
Float
readonly=True
related='blanket_line_id.remaining_uom_qty'
taxes_id
Many2many → account.tax
readonly=True
related='blanket_line_id.taxes_id'
args: 'account.tax'
wizard_id
Many2one → purchase.blanket.order.wizard
No public methods.
blanket_order_id
Many2one → purchase.blanket.order
readonly=True
related='order_line.blanket_order_line.order_id'
string='Origin blanket order'
args: 'purchase.blanket.order'
button_confirm(self)
check_currency(self)
check_partner_id(self)
blanket_order_line
Many2one → purchase.blanket.order.line
copy=False
args: 'purchase.blanket.order.line', 'Blanket Order Line'
check_date_planned(self)
get_assigned_bo_line(self)
onchange_blanket_order_line(self)
onchange_product_id(self)
group_purchase_blanket_disable_adding_lines
Boolean
implied_group='purchase_blanket_order.purchase_blanket_orders_disable_adding_lines'
readonly=False
string='Disable adding more lines to POs'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/purchase-workflow |
| GIT | |
| GIT | https://github.com/OCA/purchase-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/purchase-workflow/tree/11.0/purchase_blanket_order |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Eficent |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Eficent |
| COMMITTERS | |
| COMMITTERS | oca-travis, OCA-git-bot, Akash Bhavsar |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/purchase-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:24:01 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_action_conditionable odoo/odoo: - purchase - stock_account - stock - product - base - decimal_precision - base_setup - web - bus - web_tour - barcodes - web_planner - account - analytic - portal - http_routing |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_blanket_order_line_form |
purchase.blanket.order.line.form | purchase.blanket.order.line | form | New |
purchase_blanket_order_line_search |
purchase.blanket.order.line.search | purchase.blanket.order.line | search | New |
purchase_blanket_order_line_tree |
purchase.blanket.order.line.tree | purchase.blanket.order.line | tree | New |
purchase_config_settings_form_view |
res.config.settings.form (in purchase_blanket_order) | res.config.settings | xpath | Inherits purchase.res_config_settings_view_form_purchase |
purchase_order_form |
purchase.order.from.blanket.form | purchase.order | field | Inherits purchase.purchase_order_form |
purchase_order_form_disable_adding_lines |
purchase.order.from.blanket.form - disable adding lines | purchase.order | xpath | Inherits purchase.purchase_order_form |
report_blanketorder |
report_blanketorder | ir.ui.view | qweb | New |
report_blanketorder_document |
report_blanketorder_document | ir.ui.view | qweb | New |
view_create_purchase_order |
Create Purchase Order | purchase.blanket.order.wizard | form | New |
view_purchase_blanket_order_form |
purchase.blanket.order.form | purchase.blanket.order | form | New |
view_purchase_blanket_order_search |
purchase.blanket.order.search | purchase.blanket.order | search | New |
view_purchase_blanket_order_tree |
purchase.blanket.order.tree | purchase.blanket.order | tree | New |
amount_tax
Monetary
compute='_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_amount_all'
readonly=True
store=True
string='Total'
amount_untaxed
Monetary
compute='_amount_all'
readonly=True
store=True
string='Untaxed Amount'
track_visibility='always'
company_id
Many2one → res.company
default=_default_company
readonly=True
states={'draft': [('readonly', False)]}
string='Company'
args: 'res.company'
confirmed
Boolean
copy=False
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date_start
Datetime
default=fields.Datetime.now
help='Blanket Order starting date.'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Start Date'
fiscal_position_id
Many2one → account.fiscal.position
string='Fiscal Position'
args: 'account.fiscal.position'
invoiced_uom_qty
Float
compute='_compute_uom_qty'
search='_search_invoiced_uom_qty'
string='Invoiced quantity'
line_count
Integer
compute='_compute_line_count'
readonly=True
string='Purchase Blanket Order Line count'
line_ids
One2many → purchase.blanket.order.line
copy=True
string='Order lines'
track_visibility='always'
args: 'purchase.blanket.order.line', 'order_id'
name
Char
default='Draft'
readonly=True
note
Text
readonly=True
states={'draft': [('readonly', False)]}
ordered_uom_qty
Float
compute='_compute_uom_qty'
search='_search_ordered_uom_qty'
string='Ordered quantity'
original_uom_qty
Float
compute='_compute_uom_qty'
search='_search_original_uom_qty'
string='Original quantity'
partner_id
Many2one → res.partner
readonly=True
states={'draft': [('readonly', False)]}
string='Vendor'
track_visibility='always'
args: 'res.partner'
payment_term_id
Many2one → account.payment.term
readonly=True
states={'draft': [('readonly', False)]}
string='Payment Terms'
args: 'account.payment.term'
product_id
Many2one → product.product
related='line_ids.product_id'
string='Product'
args: 'product.product'
purchase_count
Integer
compute='_compute_purchase_count'
received_uom_qty
Float
compute='_compute_uom_qty'
search='_search_received_uom_qty'
string='Received quantity'
remaining_uom_qty
Float
compute='_compute_uom_qty'
search='_search_remaining_uom_qty'
string='Remaining quantity'
state
Selection
compute='_compute_state'
copy=False
selection=[('draft', 'Draft'), ('open', 'Open'), ('done', 'Done'), ('expired', 'Expired')]
store=True
track_visibility='always'
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'draft': [('readonly', False)]}
string='Responsible'
args: 'res.users'
validity_date
Date
help='Date until which the blanket order will be valid, after this date the blanket order will be marked as expired'
readonly=True
states={'draft': [('readonly', False)]}
track_visibility='always'
action_cancel(self)
action_confirm(self)
action_view_purchase_blanket_order_line(self)
action_view_purchase_orders(self)
copy_data(self, default=None)
expire_orders(self)
onchange_partner_id(self)
set_to_draft(self)
unlink(self)
company_id
Many2one → res.company
readonly=True
related='order_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='order_id.currency_id'
args: 'res.currency'
date_schedule
Date
string='Scheduled Date'
invoiced_uom_qty
Float
compute='_compute_quantities'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Invoiced quantity'
name
Char
track_visibility='onchange'
args: 'Description'
order_id
Many2one → purchase.blanket.order
ondelete='cascade'
required=True
args: 'purchase.blanket.order'
ordered_uom_qty
Float
compute='_compute_quantities'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Ordered quantity'
original_uom_qty
Float
default=1.0
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Original quantity'
partner_id
Many2one
readonly=True
related='order_id.partner_id'
string='Vendor'
payment_term_id
Many2one
readonly=True
related='order_id.payment_term_id'
string='Payment Terms'
price_subtotal
Monetary
compute='_compute_amount'
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
store=True
string='Tax'
price_total
Monetary
compute='_compute_amount'
store=True
string='Total'
price_unit
Float
digits=dp.get_precision('Product Price')
required=True
string='Price'
product_id
Many2one → product.product
domain=[('purchase_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_uom
Many2one → product.uom
required=True
string='Unit of Measure'
args: 'product.uom'
purchase_lines
One2many → purchase.order.line
comodel_name='purchase.order.line'
copy=False
inverse_name='blanket_order_line'
readonly=True
string='Purchase Order Lines'
received_uom_qty
Float
compute='_compute_quantities'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Received quantity'
remaining_qty
Float
compute='_compute_quantities'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Remaining quantity in base UoM'
remaining_uom_qty
Float
compute='_compute_quantities'
digits=dp.get_precision('Product Unit of Measure')
store=True
string='Remaining quantity'
sequence
Integer
taxes_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
user_id
Many2one
readonly=True
related='order_id.user_id'
string='Responsible'
name_get(self)
onchange_product(self)
blanket_order_id
Many2one → purchase.blanket.order
readonly=True
args: 'purchase.blanket.order'
line_ids
One2many → purchase.blanket.order.wizard.line
default=_default_lines
string='Lines'
args: 'purchase.blanket.order.wizard.line', 'wizard_id'
purchase_order_id
Many2one → purchase.order
domain=[('state', '=', 'draft')]
string='Purchase Order'
args: 'purchase.order'
create_purchase_order(self)
blanket_line_id
Many2one → purchase.blanket.order.line
currency_id
Many2one → res.currency
related='blanket_line_id.currency_id'
args: 'res.currency'
date_schedule
Date
readonly=True
related='blanket_line_id.date_schedule'
partner_id
Many2one → res.partner
readonly=True
related='blanket_line_id.partner_id'
string='Vendor'
args: 'res.partner'
price_unit
Float
readonly=True
related='blanket_line_id.price_unit'
product_id
Many2one → product.product
readonly=True
related='blanket_line_id.product_id'
string='Product'
args: 'product.product'
product_uom
Many2one → product.uom
readonly=True
related='blanket_line_id.product_uom'
string='Unit of Measure'
args: 'product.uom'
qty
Float
required=True
string='Quantity to Order'
remaining_uom_qty
Float
readonly=True
related='blanket_line_id.remaining_uom_qty'
taxes_id
Many2many → account.tax
readonly=True
related='blanket_line_id.taxes_id'
args: 'account.tax'
wizard_id
Many2one → purchase.blanket.order.wizard
No public methods.
blanket_order_id
Many2one → purchase.blanket.order
readonly=True
related='order_line.blanket_order_line.order_id'
string='Origin blanket order'
args: 'purchase.blanket.order'
button_confirm(self)
check_partner_id(self)
blanket_order_line
Many2one → purchase.blanket.order.line
copy=False
args: 'purchase.blanket.order.line', 'Blanket Order Line'
check_currency(self)
check_date_planned(self)
get_assigned_bo_line(self)
onchange_blanket_order_line(self)
onchange_product_id(self)
group_purchase_blanket_disable_adding_lines
Boolean
implied_group='purchase_blanket_order.purchase_blanket_orders_disable_adding_lines'
string='Disable adding more lines to SOs'
No public methods.
| STATUS | |
|---|---|
| STATUS | Open migration PR - not merged yet for this version |
| REPOSITORY | |
| REPOSITORY | OCA/purchase-workflow |
| PULL REQUEST | |
| PULL REQUEST | [19.0] [MIG] purchase_blanket_order: Migration to 19.0 (#3118) |