TIP: You can type at any time to perform a new search.
Sale Blanket Orders
sale_blanket_order · OCA/sale-blanket
- Repository
- OCA/sale-blanket · module folder · Try on Runboat
- Module version
- 1.1.3
- Category
- Sale
- Folder size
- 0.64 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/sale-blanket
- Last tracking update
- 2026-08-11 17:30:53
- Authors
- Odoo Community Association (OCA), Acsone SA/NV
- Maintainers
- Odoo Community Association (OCA), Acsone SA/NV
- Committers
- Maksym Yankin, Weblate, OCA-git-bot, Raf Ven, oca-ci, adrip-s73, Gabriel Tricoire
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- None
- Description
A blanket order is a pre-agreement to sell a certain number of quantities of products at a specific price. From a confirmed blanket order, the users can create new sale orders at such price during the blanket order validity period, until the blanket order expires, either due to reaching the validity end date or exhausting all the quantities of products.
Code Analysis ⓘ
Views touched (12)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
report_blanketorder |
report_blanketorder | ir.ui.view | qweb | New |
report_blanketorder_document |
report_blanketorder_document | ir.ui.view | qweb | New |
sale_blanket_order_line_form |
sale.blanket.order.line.form | sale.blanket.order.line | form | New |
sale_blanket_order_line_search |
sale.blanket.order.line.search | sale.blanket.order.line | search | New |
sale_blanket_order_line_tree |
sale.blanket.order.line.list | sale.blanket.order.line | list | New |
sale_config_settings_form_view |
res.config.settings.form (in sale_blanket_order) | res.config.settings | form | Inherits sale.res_config_settings_view_form |
view_blanket_order_form |
sale.blanket.order.form | sale.blanket.order | form | New |
view_blanket_order_search |
sale.blanket.order.search | sale.blanket.order | search | New |
view_blanket_order_tree |
sale.blanket.order.list | sale.blanket.order | list | New |
view_create_sale_order |
Create Sale Order | sale.blanket.order.wizard | form | New |
view_order_form |
sale.order.from.blanket.form | sale.order | form | Inherits sale.view_order_form |
view_order_form_disable_adding_lines |
sale.order.from.blanket.form - disable adding lines | sale.order | form | Inherits sale.view_order_form |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (7)
New fields (1)
-
group_blanket_disable_adding_linesBooleanimplied_group='sale_blanket_order.blanket_orders_disable_adding_lines'string='Disable adding more lines to SOs'
No public methods.
New fields (28)
-
amount_taxMonetarycompute='_compute_amount_all'readonly=Truestore=Truestring='Taxes' -
amount_totalMonetarycompute='_compute_amount_all'readonly=Truestore=Truestring='Total' -
amount_untaxedMonetarycompute='_compute_amount_all'readonly=Truestore=Truestring='Untaxed Amount'tracking=True -
client_order_refCharcopy=Falsestring='Customer Reference' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>index=Truerequired=True -
confirmedBooleancopy=False -
currency_idMany2one → res.currencyrelated='pricelist_id.currency_id' args: 'res.currency' -
delivered_uom_qtyFloatcompute='_compute_uom_qty'default=0.0search='_search_delivered_uom_qty'string='Delivered quantity' -
fiscal_position_idMany2one → account.fiscal.positioncheck_company=Truestring='Fiscal Position' args: 'account.fiscal.position' -
invoiced_uom_qtyFloatcompute='_compute_uom_qty'default=0.0search='_search_invoiced_uom_qty'string='Invoiced quantity' -
line_countIntegercompute='_compute_line_count'readonly=Truestring='Sale Blanket Order Line count' -
line_idsOne2many → sale.blanket.order.linecopy=Truestring='Order lines' args: 'sale.blanket.order.line', 'order_id' -
nameCharcopy=Falsedefault='Draft'readonly=True -
noteTextdefault=<expr> -
ordered_uom_qtyFloatcompute='_compute_uom_qty'default=0.0search='_search_ordered_uom_qty'string='Ordered quantity' -
original_uom_qtyFloatcompute='_compute_uom_qty'default=0.0search='_search_original_uom_qty'string='Original quantity' -
partner_idMany2one → res.partnerstring='Partner' args: 'res.partner' -
payment_term_idMany2one → account.payment.termstring='Payment Terms' args: 'account.payment.term' -
pricelist_idMany2one → product.pricelistrequired=Truestring='Pricelist' args: 'product.pricelist' -
product_idMany2one → product.productrelated='line_ids.product_id'string='Product' args: 'product.product' -
remaining_uom_qtyFloatcompute='_compute_uom_qty'default=0.0search='_search_remaining_uom_qty'string='Remaining quantity' -
sale_countIntegercompute='_compute_sale_count' -
stateSelectioncompute='_compute_state'copy=Falseselection=[('draft', 'Draft'), ('open', 'Open'), ('done', 'Done'), ('expired', 'Expired')]store=True -
tag_idsMany2many → crm.tagcolumn1='blanket_order_id'column2='tag_id'comodel_name='crm.tag'relation='sale_blanket_order_tag_rel'string='Tags' -
team_idMany2one → crm.teamchange_default=Truedefault=<expr>string='Sales Team' args: 'crm.team' -
user_idMany2one → res.usersstring='Salesperson' args: 'res.users' -
validity_dateDate -
validity_start_dateDate
-
action_cancel(self) -
action_confirm(self) -
action_view_sale_blanket_order_line(self) -
action_view_sale_orders(self) -
expire_orders(self)@api.model -
onchange_partner_id(self)@api.onchange('partner_id')Update the following fields when the partner is changed: - Pricelist - Payment term - Fiscal position -
set_to_draft(self)
New fields (26)
-
company_idMany2oneindex=Trueprecompute=Truerelated='order_id.company_id'store=True -
currency_idMany2one → res.currencyrelated='order_id.currency_id' args: 'res.currency' -
date_scheduleDatestring='Scheduled Date' -
delivered_uom_qtyFloatcompute='_compute_quantities'store=Truestring='Delivered quantity' -
display_typeSelectiondefault=Falsehelp='Technical field for UX purpose.' args: [('line_section', 'Section'), ('line_note', 'Note')] -
invoiced_uom_qtyFloatcompute='_compute_quantities'store=Truestring='Invoiced quantity' -
nameChartracking=True args: 'Description' -
order_idMany2one → sale.blanket.orderondelete='cascade'required=True args: 'sale.blanket.order' -
ordered_uom_qtyFloatcompute='_compute_quantities'store=Truestring='Ordered quantity' -
original_uom_qtyFloatdefault=1digits='Product Unit of Measure'string='Original quantity' -
partner_idMany2onerelated='order_id.partner_id'string='Customer' -
payment_term_idMany2onerelated='order_id.payment_term_id'string='Payment Terms' -
price_subtotalMonetarycompute='_compute_amount'store=Truestring='Subtotal' -
price_taxFloatcompute='_compute_amount'store=Truestring='Tax' -
price_totalMonetarycompute='_compute_amount'store=Truestring='Total' -
price_unitFloatdigits='Product Price'string='Price' -
pricelist_idMany2onerelated='order_id.pricelist_id'string='Pricelist' -
pricelist_item_idMany2one → product.pricelist.itemcomodel_name='product.pricelist.item'compute='_compute_pricelist_item_id' -
product_idMany2one → product.productdomain=[('sale_ok', '=', True)]string='Product' args: 'product.product' -
product_uomMany2one → uom.uomstring='Unit of Measure' args: 'uom.uom' -
remaining_qtyFloatcompute='_compute_quantities'store=Truestring='Remaining quantity in base UoM' -
remaining_uom_qtyFloatcompute='_compute_quantities'store=Truestring='Remaining quantity' -
sale_linesOne2many → sale.order.linecopy=Falsereadonly=Truestring='Sale order lines' args: 'sale.order.line', 'blanket_order_line' -
sequenceInteger -
taxes_idMany2many → account.taxcheck_company=Truecomodel_name='account.tax'context={'active_test': False} -
user_idMany2onerelated='order_id.user_id'string='Responsible'
-
create(self, vals_list)@api.model_create_multi -
onchange_product(self)@api.onchange('product_id', 'original_uom_qty') -
write(self, values)
New fields (3)
-
blanket_order_idMany2one → sale.blanket.ordercomodel_name='sale.blanket.order'default=<expr>readonly=True -
line_idsOne2many → sale.blanket.order.wizard.linedefault=<expr>string='Lines' args: 'sale.blanket.order.wizard.line', 'wizard_id' -
sale_order_idMany2one → sale.orderdomain=[('state', '=', 'draft')]string='Purchase Order' args: 'sale.order'
-
create_sale_order(self)
New fields (13)
-
analytic_distributionJsonrelated='blanket_line_id.analytic_distribution' -
blanket_line_idMany2one → sale.blanket.order.lineargs: 'sale.blanket.order.line' -
company_idMany2one → res.companyrelated='blanket_line_id.company_id'string='Company' args: 'res.company' -
currency_idMany2one → res.currencyrelated='blanket_line_id.currency_id' args: 'res.currency' -
date_scheduleDatestring='Scheduled Date' -
partner_idMany2one → res.partnerrelated='blanket_line_id.partner_id'string='Vendor' args: 'res.partner' -
price_unitFloatrelated='blanket_line_id.price_unit' -
product_idMany2one → product.productrelated='blanket_line_id.product_id'string='Product' args: 'product.product' -
product_uomMany2one → uom.uomrelated='blanket_line_id.product_uom'string='Unit of Measure' args: 'uom.uom' -
qtyFloatrequired=Truestring='Quantity to Order' -
remaining_uom_qtyFloatrelated='blanket_line_id.remaining_uom_qty' -
taxes_idMany2many → account.taxrelated='blanket_line_id.taxes_id' args: 'account.tax' -
wizard_idMany2one → sale.blanket.order.wizardargs: 'sale.blanket.order.wizard'
No public methods.
New fields (2)
-
blanket_order_idMany2one → sale.blanket.orderrelated='order_line.blanket_order_line.order_id'string='Origin blanket order' args: 'sale.blanket.order' -
disable_adding_linesBooleancompute='_compute_disable_adding_lines'
-
action_confirm(self) -
check_partner_id(self)@api.constrains('partner_id')
New fields (1)
-
blanket_order_lineMany2one → sale.blanket.order.linecompute='_compute_blanket_order_line'copy=Falseprecompute=Truestore=Truestring='Blanket Order line' args: 'sale.blanket.order.line'
-
check_currency(self)@api.constrains('currency_id') -
check_product_id(self)@api.constrains('product_id') -
get_assigned_bo_line(self)
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…