Repository
OCA/purchase-workflow · module folder · Try on Runboat
Module version
1.0.2
Category
Purchase
Folder size
0.48 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/purchase-workflow
Last tracking update
2026-08-07 08:42:59
Authors
Odoo Community Association (OCA), ForgeFlow
Maintainers
Odoo Community Association (OCA), ForgeFlow
Committers
JordiMForgeFlow, Weblate, OCA-git-bot, oca-ci, Fernando, Ugne Sinkeviciene
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
l10n_br_purchase_blanket_order
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.

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
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 form Inherits purchase.res_config_settings_view_form_purchase
purchase_order_form purchase.order.from.blanket.form purchase.order form Inherits purchase.purchase_order_form
purchase_order_form_disable_adding_lines purchase.order.from.blanket.form - disable adding lines purchase.order form 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
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (7)

New fields (26)
  • 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 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
Public methods (10)
  • action_cancel(self)
  • action_confirm(self)
  • action_view_purchase_blanket_order_line(self)
  • action_view_purchase_orders(self)
  • compute_warnings(self)
    @api.model
    Base function to create activity warnings
  • copy_data(self, default=None)
  • expire_orders(self)
    @api.model
  • onchange_partner_id(self)
    @api.onchange('partner_id')
    Update the following fields when the partner is changed: - Payment term
  • set_to_draft(self)
  • unlink(self)

New fields (23)
  • 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'
Public methods (1)
  • onchange_product(self)
    @api.onchange('product_id', 'original_uom_qty')

New fields (3)
  • 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'
Public methods (1)
  • create_purchase_order(self)

New fields (11)
  • blanket_line_id Many2one → purchase.blanket.order.line
    args: '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
    args: 'purchase.blanket.order.wizard'
Public methods (0)

No public methods.

New fields (1)
  • 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'
Public methods (3)
  • button_confirm(self)
  • check_currency(self)
    @api.constrains('currency_id')
  • check_partner_id(self)
    @api.constrains('partner_id')

New fields (1)
  • blanket_order_line Many2one → purchase.blanket.order.line
    comodel_name='purchase.blanket.order.line' copy=False domain="[('product_id', '=', product_id)]"
Public methods (6)
  • check_currency(self)
    @api.constrains('currency_id')
  • check_date_planned(self)
    @api.constrains('date_planned')
  • create(self, vals_list)
    @api.model_create_multi
  • get_assigned_bo_line(self)
  • onchange_blanket_order_line(self)
    @api.onchange('blanket_order_line')
  • onchange_product_id(self)
    @api.onchange('product_id', 'partner_id')

New fields (1)
  • 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'
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Status
Open migration PR — not merged yet for this version
CI status
checks failing
Open since
50 days ago
Last activity
23 days ago
Repository
OCA/purchase-workflow
Pull request
[19.0] [MIG] purchase_blanket_order: Migration to 19.0 (#3118)