| 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_work_acceptance_invoice_plan |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Purchase Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | Yes |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Ecosoft |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Saran440 |
| 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/purchase-workflow: - purchase_work_acceptance - purchase_invoice_plan - purchase_open_qty - purchase_order_line_menu odoo/odoo: - purchase_stock - stock_account - stock - product - base - base_setup - web - bus - web_tour - html_editor - uom - barcodes_gs1_nomenclature - barcodes - digest - portal - web_editor - http_routing - auth_signup - resource - account - onboarding - analytic - purchase |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module add ability to create Work Acceptance based on the predefined invoice plan, one by one. **Note:** Because WA is now based on invoice plan, the option "Create Bill by Plan" will be removed. User will be left with only option "Create Bill" (and to choose WA), the chosen WA is now used to control the quantity in invoice instead of the invoice plan. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_order_form |
purchase.order.form.invoice.plan | purchase.order | button | Inherits purchase_invoice_plan.purchase_order_form |
purchase_order_form_inherit |
purchase.order.form.invoice.plan | purchase.order | xpath | Inherits purchase_work_acceptance.purchase_order_form_inherit |
view_purchase_invoice_plan_form |
view_purchase_invoice_plan_form | purchase.invoice.plan | field | Inherits purchase_invoice_plan.view_purchase_invoice_plan_form |
view_purchase_invoice_plan_tree |
view_purchase_invoice_plan_tree | purchase.invoice.plan | field | Inherits purchase_invoice_plan.view_purchase_invoice_plan_tree |
view_purchase_invoice_plan_tree_readonly |
view_purchase_invoice_plan_tree_readonly | purchase.invoice.plan | field | Inherits purchase_invoice_plan.view_purchase_invoice_plan_tree_readonly |
view_select_work_acceptance_invoice_plan_wizard |
select_work_acceptance_invoice_plan_wizard | select.work.acceptance.invoice.plan.wizard | form | New |
view_work_acceptance_form |
work.acceptance.form | work.acceptance | xpath | Inherits purchase_work_acceptance.view_work_acceptance_form |
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
amount
Monetary
compute='_compute_amount'
inverse='_inverse_amount'
analytic_distribution
Json
related='order_line_id.analytic_distribution'
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='wizard_id.order_id.currency_id'
order_id
Many2one
related='wizard_id.order_id'
order_line_id
Many2one → purchase.order.line
comodel_name='purchase.order.line'
domain="[('order_id', '=', order_id)]"
index=True
required=True
string='Product Line'
qty_not_accepted
Float
digits='Product Unit of Measure'
related='order_line_id.qty_to_accept'
string='Not Accepted'
quantity
Float
digits='Product Unit of Measure'
string='To Accept'
wizard_id
Many2one → select.work.acceptance.invoice.plan.wizard
comodel_name='select.work.acceptance.invoice.plan.wizard'
ondelete='cascade'
No public methods.
active_installment_ids
Many2many → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
compute='_compute_active_installment_ids'
apply_method_id
Many2one → ir.actions.server
comodel_name='ir.actions.server'
domain=[('usage', '=', 'ir_actions_server'), ('model_id.model', '=', 'select.work.acceptance.invoice.plan.wizard')]
help='Choose the method to find matcing product line for this installment'
string='Base On'
installment_id
Many2one → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
domain="[('id', 'in', active_installment_ids), ('installment', '>', 0)]"
help='List only installment that has not been used in WA (draft, accepted)'
required=True
string='Invoice Plan'
order_id
Many2one → purchase.order
comodel_name='purchase.order'
default=<expr>
order_line_ids
Many2many → purchase.order.line
column1='wizard_id'
column2='order_line_id'
comodel_name='purchase.order.line'
compute='_compute_order_line_ids'
domain="[('order_id', '=', order_id)]"
help='List of product lines used to create WA. Blank means all'
readonly=False
relation='select_wa_invoice_plan_order_line_rel'
store=True
string='Product Filter'
valid_amount
Boolean
compute='_compute_valid_amount'
wa_qty_line_ids
One2many → select.work.acceptance.invoice.plan.qty
comodel_name='select.work.acceptance.invoice.plan.qty'
compute='_compute_wa_qty_line_ids'
inverse_name='wizard_id'
readonly=False
store=True
button_create_wa(self)
default_get(self, field_list)
No new fields.
Public methods (0)No public methods.
installment_id
Many2one → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
copy=False
ondelete='restrict'
readonly=True
string='Invoice Plan'
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_work_acceptance_invoice_plan |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Purchase Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | Yes |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Ecosoft |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, OCA-git-bot, oca-ci, Saran440 |
| 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/purchase-workflow: - purchase_work_acceptance - purchase_invoice_plan - purchase_open_qty - purchase_order_line_menu odoo/odoo: - purchase_stock - stock_account - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes - digest - portal - web_editor - http_routing - auth_signup - resource - account - analytic - purchase |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_order_form |
purchase.order.form.invoice.plan | purchase.order | button | Inherits purchase_invoice_plan.purchase_order_form |
purchase_order_form_inherit |
purchase.order.form.invoice.plan | purchase.order | xpath | Inherits purchase_work_acceptance.purchase_order_form_inherit |
view_purchase_invoice_plan_form |
view_purchase_invoice_plan_form | purchase.invoice.plan | field | Inherits purchase_invoice_plan.view_purchase_invoice_plan_form |
view_purchase_invoice_plan_tree |
view_purchase_invoice_plan_tree | purchase.invoice.plan | field | Inherits purchase_invoice_plan.view_purchase_invoice_plan_tree |
view_purchase_invoice_plan_tree_readonly |
view_purchase_invoice_plan_tree_readonly | purchase.invoice.plan | field | Inherits purchase_invoice_plan.view_purchase_invoice_plan_tree_readonly |
view_select_work_acceptance_invoice_plan_wizard |
select_work_acceptance_invoice_plan_wizard | select.work.acceptance.invoice.plan.wizard | form | New |
view_work_acceptance_form |
work.acceptance.form | work.acceptance | xpath | Inherits purchase_work_acceptance.view_work_acceptance_form |
No new fields.
Public methods (1)name_get(self)
No new fields.
Public methods (0)No public methods.
account_analytic_id
Many2one → account.analytic.account
comodel_name='account.analytic.account'
related='order_line_id.account_analytic_id'
amount
Monetary
compute='_compute_amount'
inverse='_inverse_amount'
analytic_tag_ids
Many2many → account.analytic.tag
comodel_name='account.analytic.tag'
related='order_line_id.analytic_tag_ids'
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='wizard_id.order_id.currency_id'
order_id
Many2one
related='wizard_id.order_id'
order_line_id
Many2one → purchase.order.line
comodel_name='purchase.order.line'
domain="[('order_id', '=', order_id)]"
index=True
required=True
string='Product Line'
qty_not_accepted
Float
digits='Product Unit of Measure'
related='order_line_id.qty_to_accept'
string='Not Accepted'
quantity
Float
digits='Product Unit of Measure'
string='To Accept'
wizard_id
Many2one → select.work.acceptance.invoice.plan.wizard
comodel_name='select.work.acceptance.invoice.plan.wizard'
ondelete='cascade'
No public methods.
active_installment_ids
Many2many → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
compute='_compute_active_installment_ids'
apply_method_id
Many2one → ir.actions.server
comodel_name='ir.actions.server'
domain=[('usage', '=', 'ir_actions_server'), ('model_id.model', '=', 'select.work.acceptance.invoice.plan.wizard')]
help='Choose the method to find matcing product line for this installment'
string='Base On'
installment_id
Many2one → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
domain="[('id', 'in', active_installment_ids), ('installment', '>', 0)]"
help='List only installment that has not been used in WA (draft, accepted)'
required=True
string='Invoice Plan'
order_id
Many2one → purchase.order
comodel_name='purchase.order'
default=<expr>
order_line_ids
Many2many → purchase.order.line
column1='wizard_id'
column2='order_line_id'
comodel_name='purchase.order.line'
compute='_compute_order_line_ids'
domain="[('order_id', '=', order_id)]"
help='List of product lines used to create WA. Blank means all'
readonly=False
relation='select_wa_invoice_plan_order_line_rel'
store=True
string='Product Filter'
valid_amount
Boolean
compute='_compute_valid_amount'
wa_qty_line_ids
One2many → select.work.acceptance.invoice.plan.qty
comodel_name='select.work.acceptance.invoice.plan.qty'
compute='_compute_wa_qty_line_ids'
inverse_name='wizard_id'
readonly=False
store=True
button_create_wa(self)
default_get(self, field_list)
No new fields.
Public methods (0)No public methods.
installment_id
Many2one → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
copy=False
ondelete='restrict'
readonly=True
string='Invoice Plan'
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_work_acceptance_invoice_plan |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Purchase Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | Yes |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Ecosoft |
| COMMITTERS | |
| COMMITTERS | oca-travis, Weblate, OCA-git-bot, oca-ci, Kitti U, Saran440 |
| 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/purchase-workflow: - purchase_work_acceptance - purchase_invoice_plan - purchase_open_qty odoo/odoo: - purchase_stock - stock_account - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes - digest - portal - web_editor - http_routing - auth_signup - resource - account - analytic - purchase |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_order_form |
purchase.order.form.invoice.plan | purchase.order | button | Inherits purchase_invoice_plan.purchase_order_form |
purchase_order_form_inherit |
purchase.order.form.invoice.plan | purchase.order | xpath | Inherits purchase_work_acceptance.purchase_order_form_inherit |
view_purchase_invoice_plan_form |
view_purchase_invoice_plan_form | purchase.invoice.plan | field | Inherits purchase_invoice_plan.view_purchase_invoice_plan_form |
view_purchase_invoice_plan_tree |
view_purchase_invoice_plan_tree | purchase.invoice.plan | field | Inherits purchase_invoice_plan.view_purchase_invoice_plan_tree |
view_purchase_invoice_plan_tree_readonly |
view_purchase_invoice_plan_tree_readonly | purchase.invoice.plan | field | Inherits purchase_invoice_plan.view_purchase_invoice_plan_tree_readonly |
view_select_work_acceptance_invoice_plan_wizard |
select_work_acceptance_invoice_plan_wizard | select.work.acceptance.invoice.plan.wizard | form | New |
view_work_acceptance_form |
work.acceptance.form | work.acceptance | xpath | Inherits purchase_work_acceptance.view_work_acceptance_form |
No new fields.
Public methods (1)name_get(self)
No new fields.
Public methods (0)No public methods.
account_analytic_id
Many2one → account.analytic.account
comodel_name='account.analytic.account'
related='order_line_id.account_analytic_id'
amount
Monetary
compute='_compute_amount'
inverse='_inverse_amount'
string='Amount'
analytic_tag_ids
Many2many → account.analytic.tag
comodel_name='account.analytic.tag'
related='order_line_id.analytic_tag_ids'
currency_id
Many2one → res.currency
comodel_name='res.currency'
related='wizard_id.order_id.currency_id'
order_id
Many2one
related='wizard_id.order_id'
order_line_id
Many2one → purchase.order.line
comodel_name='purchase.order.line'
domain="[('order_id', '=', order_id)]"
index=True
required=True
string='Product Line'
qty_not_accepted
Float
digits='Product Unit of Measure'
related='order_line_id.qty_to_accept'
string='Not Accepted'
quantity
Float
digits='Product Unit of Measure'
string='To Accept'
wizard_id
Many2one → select.work.acceptance.invoice.plan.wizard
comodel_name='select.work.acceptance.invoice.plan.wizard'
ondelete='cascade'
No public methods.
active_installment_ids
Many2many → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
compute='_compute_active_installment_ids'
apply_method_id
Many2one → ir.actions.server
comodel_name='ir.actions.server'
domain=[('usage', '=', 'ir_actions_server'), ('model_id.model', '=', 'select.work.acceptance.invoice.plan.wizard')]
help='Choose the method to find matcing product line for this installment'
string='Base On'
installment_id
Many2one → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
domain="[('id', 'in', active_installment_ids), ('installment', '>', 0)]"
help='List only installment that has not been used in WA (draft, accepted)'
required=True
string='Invoice Plan'
order_id
Many2one → purchase.order
comodel_name='purchase.order'
default=<expr>
order_line_ids
Many2many → purchase.order.line
column1='wizard_id'
column2='order_line_id'
comodel_name='purchase.order.line'
compute='_compute_order_line_ids'
domain="[('order_id', '=', order_id)]"
help='List of product lines used to create WA. Blank means all'
readonly=False
relation='select_wa_invoice_plan_order_line_rel'
store=True
string='Product Filter'
valid_amount
Boolean
compute='_compute_valid_amount'
wa_qty_line_ids
One2many → select.work.acceptance.invoice.plan.qty
comodel_name='select.work.acceptance.invoice.plan.qty'
compute='_compute_wa_qty_line_ids'
inverse_name='wizard_id'
readonly=False
store=True
button_create_wa(self)
default_get(self, field_list)
No new fields.
Public methods (0)No public methods.
installment_id
Many2one → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
copy=False
ondelete='restrict'
readonly=True
string='Invoice Plan'
No public methods.