| 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_invoice_plan |
| VERSION | |
| VERSION | 1.0.2 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Ecosoft |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Saran440, Ricardoalso, Rafael Lima |
| 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_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 | By standard feature, user can gradually create partial invoices, one by one and in step create invoice the standard call invoice. This module add ability to create invoices based on the predefined invoice plan, either all at once, or one by one. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_order_form |
purchase_order_form | purchase.order | xpath | Inherits purchase.purchase_order_form |
view_purchase_create_invoice_plan |
Create Invoice Plan | purchase.create.invoice.plan | form | New |
view_purchase_invoice_plan_filter |
view.purchase.invoice.plan.filter | purchase.invoice.plan | search | New |
view_purchase_invoice_plan_form |
view.purchase.invoice.plan.form | purchase.invoice.plan | form | New |
view_purchase_invoice_plan_tree |
view.purchase.invoice.plan.tree | purchase.invoice.plan | list | New |
view_purchase_invoice_plan_tree_readonly |
view.purchase.invoice.plan.tree | purchase.invoice.plan | list | New |
view_purchase_make_planned_invoice |
view.purchase.make.planned.invoice | purchase.make.planned.invoice | form | New |
installment_date
Date
default=fields.Date.context_today
required=True
interval
Integer
default=1
required=True
interval_type
Selection
default='month'
required=True
args: [('day', 'Day'), ('month', 'Month'), ('year', 'Year')]
num_installment
Integer
default=0
required=True
string='Number of Installment'
purchase_create_invoice_plan(self)
amount
Float
compute='_compute_amount'
digits='Product Price'
help='This amount will be used to calculate the percent'
inverse='_inverse_amount'
amount_invoiced
Float
compute='_compute_invoiced'
readonly=False
store=True
installment
Integer
invoice_ids
Many2many → account.move
column1='plan_id'
column2='move_id'
comodel_name='account.move'
readonly=True
relation='purchase_invoice_plan_invoice_rel'
string='Invoices'
invoice_type
Selection
default='installment'
required=True
selection=[('installment', 'Installment')]
string='Type'
invoiced
Boolean
compute='_compute_invoiced'
help='If this line already invoiced'
store=True
string='Invoice Created'
last
Boolean
compute='_compute_last'
help='Last installment will create invoice use remaining amount'
string='Last Installment'
no_edit
Boolean
compute='_compute_no_edit'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
related='purchase_id.partner_id'
store=True
string='Supplier'
percent
Float
digits='Purchase Invoice Plan Percent'
help='This percent will be used to calculate new quantity'
plan_date
Date
required=True
purchase_id
Many2one → purchase.order
comodel_name='purchase.order'
index=True
ondelete='cascade'
readonly=True
string='Purchases Order'
state
Selection
index=True
related='purchase_id.state'
store=True
string='Status'
to_invoice
Boolean
compute='_compute_to_invoice'
help='If this line is ready to create new invoice'
store=True
string='Next Invoice'
No public methods.
No new fields.
Public methods (1)create_invoices_by_plan(self)
invoice_plan_ids
One2many → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
copy=False
inverse_name='purchase_id'
string='Invoice Plan'
ip_invoice_plan
Boolean
compute='_compute_ip_invoice_plan'
help='At least one invoice plan line pending to create invoice'
string='Invoice Plan In Process'
ip_total_amount
Monetary
compute='_compute_ip_total'
string='Total Amount'
ip_total_percent
Float
compute='_compute_ip_total'
string='Percent'
use_invoice_plan
Boolean
copy=False
default=False
action_view_invoice(self, invoices=False)
button_confirm(self)
create_invoice_plan(self, num_installment, installment_date, interval, interval_type)
remove_invoice_plan(self)
| 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_invoice_plan |
| 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), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Ecosoft |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Weblate, OCA-git-bot, oca-ci, ilo |
| 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/purchase-workflow: - purchase_open_qty - purchase_order_line_menu odoo/odoo: - purchase_stock - stock_account - stock - product - base - base_setup - web - bus - web_tour - 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 | By standard feature, user can gradually create partial invoices, one by one and in step create invoice the standard call invoice. This module add ability to create invoices based on the predefined invoice plan, either all at once, or one by one. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
purchase_order_form |
purchase_order_form | purchase.order | xpath | Inherits purchase.purchase_order_form |
view_purchase_create_invoice_plan |
Create Invoice Plan | purchase.create.invoice.plan | form | New |
view_purchase_invoice_plan_filter |
view.purchase.invoice.plan.filter | purchase.invoice.plan | search | New |
view_purchase_invoice_plan_form |
view.purchase.invoice.plan.form | purchase.invoice.plan | form | New |
view_purchase_invoice_plan_tree |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_invoice_plan_tree_readonly |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_make_planned_invoice |
view.purchase.make.planned.invoice | purchase.make.planned.invoice | form | New |
installment_date
Date
default=fields.Date.context_today
required=True
interval
Integer
default=1
required=True
interval_type
Selection
default='month'
required=True
args: [('day', 'Day'), ('month', 'Month'), ('year', 'Year')]
num_installment
Integer
default=0
required=True
string='Number of Installment'
purchase_create_invoice_plan(self)
amount
Float
compute='_compute_amount'
digits='Product Price'
help='This amount will be used to calculate the percent'
inverse='_inverse_amount'
amount_invoiced
Float
compute='_compute_invoiced'
readonly=False
store=True
installment
Integer
invoice_ids
Many2many → account.move
column1='plan_id'
column2='move_id'
comodel_name='account.move'
readonly=True
relation='purchase_invoice_plan_invoice_rel'
string='Invoices'
invoice_type
Selection
default='installment'
required=True
selection=[('installment', 'Installment')]
string='Type'
invoiced
Boolean
compute='_compute_invoiced'
help='If this line already invoiced'
store=True
string='Invoice Created'
last
Boolean
compute='_compute_last'
help='Last installment will create invoice use remaining amount'
string='Last Installment'
no_edit
Boolean
compute='_compute_no_edit'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
related='purchase_id.partner_id'
store=True
string='Supplier'
percent
Float
digits='Purchase Invoice Plan Percent'
help='This percent will be used to calculate new quantity'
plan_date
Date
required=True
purchase_id
Many2one → purchase.order
comodel_name='purchase.order'
index=True
ondelete='cascade'
readonly=True
string='Purchases Order'
state
Selection
index=True
related='purchase_id.state'
store=True
string='Status'
to_invoice
Boolean
compute='_compute_to_invoice'
help='If this line is ready to create new invoice'
store=True
string='Next Invoice'
No public methods.
No new fields.
Public methods (1)create_invoices_by_plan(self)
invoice_plan_ids
One2many → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
copy=False
inverse_name='purchase_id'
string='Invoice Plan'
ip_invoice_plan
Boolean
compute='_compute_ip_invoice_plan'
help='At least one invoice plan line pending to create invoice'
string='Invoice Plan In Process'
ip_total_amount
Monetary
compute='_compute_ip_total'
string='Total Amount'
ip_total_percent
Float
compute='_compute_ip_total'
string='Percent'
use_invoice_plan
Boolean
copy=False
default=False
action_view_invoice(self, invoices=False)
button_confirm(self)
create_invoice_plan(self, num_installment, installment_date, interval, interval_type)
remove_invoice_plan(self)
| 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_invoice_plan |
| 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), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Ecosoft |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Aungkokolin1997 |
| 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/purchase-workflow: - purchase_open_qty - purchase_order_line_menu odoo/odoo: - purchase_stock - stock_account - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes_gs1_nomenclature - 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 | purchase.order | xpath | Inherits purchase.purchase_order_form |
view_purchase_create_invoice_plan |
Create Invoice Plan | purchase.create.invoice.plan | form | New |
view_purchase_invoice_plan_filter |
view.purchase.invoice.plan.filter | purchase.invoice.plan | search | New |
view_purchase_invoice_plan_form |
view.purchase.invoice.plan.form | purchase.invoice.plan | form | New |
view_purchase_invoice_plan_tree |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_invoice_plan_tree_readonly |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_make_planned_invoice |
view.purchase.make.planned.invoice | purchase.make.planned.invoice | form | New |
installment_date
Date
default=fields.Date.context_today
required=True
interval
Integer
default=1
required=True
interval_type
Selection
default='month'
required=True
args: [('day', 'Day'), ('month', 'Month'), ('year', 'Year')]
num_installment
Integer
default=0
required=True
string='Number of Installment'
purchase_create_invoice_plan(self)
amount
Float
compute='_compute_amount'
digits='Product Price'
help='This amount will be used to calculate the percent'
inverse='_inverse_amount'
amount_invoiced
Float
compute='_compute_invoiced'
readonly=False
store=True
installment
Integer
invoice_ids
Many2many → account.move
column1='plan_id'
column2='move_id'
comodel_name='account.move'
readonly=True
relation='purchase_invoice_plan_invoice_rel'
string='Invoices'
invoice_type
Selection
default='installment'
required=True
selection=[('installment', 'Installment')]
string='Type'
invoiced
Boolean
compute='_compute_invoiced'
help='If this line already invoiced'
store=True
string='Invoice Created'
last
Boolean
compute='_compute_last'
help='Last installment will create invoice use remaining amount'
string='Last Installment'
no_edit
Boolean
compute='_compute_no_edit'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
related='purchase_id.partner_id'
store=True
string='Supplier'
percent
Float
digits='Purchase Invoice Plan Percent'
help='This percent will be used to calculate new quantity'
plan_date
Date
required=True
purchase_id
Many2one → purchase.order
comodel_name='purchase.order'
index=True
ondelete='cascade'
readonly=True
string='Purchases Order'
state
Selection
index=True
related='purchase_id.state'
store=True
string='Status'
to_invoice
Boolean
compute='_compute_to_invoice'
help='If this line is ready to create new invoice'
store=True
string='Next Invoice'
No public methods.
No new fields.
Public methods (1)create_invoices_by_plan(self)
invoice_plan_ids
One2many → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
copy=False
inverse_name='purchase_id'
string='Invoice Plan'
ip_invoice_plan
Boolean
compute='_compute_ip_invoice_plan'
help='At least one invoice plan line pending to create invoice'
string='Invoice Plan In Process'
ip_total_amount
Monetary
compute='_compute_ip_total'
string='Total Amount'
ip_total_percent
Float
compute='_compute_ip_total'
string='Percent'
use_invoice_plan
Boolean
copy=False
default=False
action_view_invoice(self, invoices=False)
button_confirm(self)
create_invoice_plan(self, num_installment, installment_date, interval, interval_type)
remove_invoice_plan(self)
| 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_invoice_plan |
| VERSION | |
| VERSION | 1.0.2 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Ecosoft |
| COMMITTERS | |
| COMMITTERS | 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:40 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/purchase-workflow: - 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 | purchase.order | xpath | Inherits purchase.purchase_order_form |
view_purchase_create_invoice_plan |
Create Invoice Plan | purchase.create.invoice.plan | form | New |
view_purchase_invoice_plan_filter |
view.purchase.invoice.plan.filter | purchase.invoice.plan | search | New |
view_purchase_invoice_plan_form |
view.purchase.invoice.plan.form | purchase.invoice.plan | form | New |
view_purchase_invoice_plan_tree |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_invoice_plan_tree_readonly |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_make_planned_invoice |
view.purchase.make.planned.invoice | purchase.make.planned.invoice | form | New |
installment_date
Date
default=fields.Date.context_today
required=True
interval
Integer
default=1
required=True
interval_type
Selection
default='month'
required=True
args: [('day', 'Day'), ('month', 'Month'), ('year', 'Year')]
num_installment
Integer
default=0
required=True
string='Number of Installment'
purchase_create_invoice_plan(self)
amount
Float
compute='_compute_amount'
digits='Product Price'
help='This amount will be used to calculate the percent'
inverse='_inverse_amount'
amount_invoiced
Float
compute='_compute_invoiced'
readonly=False
store=True
installment
Integer
invoice_ids
Many2many → account.move
column1='plan_id'
column2='move_id'
comodel_name='account.move'
readonly=True
relation='purchase_invoice_plan_invoice_rel'
string='Invoices'
invoice_type
Selection
default='installment'
required=True
selection=[('installment', 'Installment')]
string='Type'
invoiced
Boolean
compute='_compute_invoiced'
help='If this line already invoiced'
store=True
string='Invoice Created'
last
Boolean
compute='_compute_last'
help='Last installment will create invoice use remaining amount'
string='Last Installment'
no_edit
Boolean
compute='_compute_no_edit'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
related='purchase_id.partner_id'
store=True
string='Supplier'
percent
Float
digits='Purchase Invoice Plan Percent'
help='This percent will be used to calculate new quantity'
plan_date
Date
required=True
purchase_id
Many2one → purchase.order
comodel_name='purchase.order'
index=True
ondelete='cascade'
readonly=True
string='Purchases Order'
state
Selection
index=True
related='purchase_id.state'
store=True
string='Status'
to_invoice
Boolean
compute='_compute_to_invoice'
help='If this line is ready to create new invoice'
store=True
string='Next Invoice'
unlink(self)
No new fields.
Public methods (1)create_invoices_by_plan(self)
invoice_plan_ids
One2many → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
copy=False
inverse_name='purchase_id'
string='Invoice Plan'
ip_invoice_plan
Boolean
compute='_compute_ip_invoice_plan'
help='At least one invoice plan line pending to create invoice'
string='Invoice Plan In Process'
ip_total_amount
Monetary
compute='_compute_ip_total'
string='Total Amount'
ip_total_percent
Float
compute='_compute_ip_total'
string='Percent'
use_invoice_plan
Boolean
copy=False
default=False
action_view_invoice(self, invoices=False)
button_confirm(self)
create_invoice_plan(self, num_installment, installment_date, interval, interval_type)
remove_invoice_plan(self)
| 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_invoice_plan |
| VERSION | |
| VERSION | 1.3.1 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Ecosoft |
| COMMITTERS | |
| COMMITTERS | Denis Roussel, oca-travis, Weblate, OCA-git-bot, Kitti U, newtratip, Saran440, ps-tubtim, oca-git-bot, Surachet Saejueng |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/purchase-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:08 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/purchase-workflow: - 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 | purchase.order | xpath | Inherits purchase.purchase_order_form |
view_purchase_create_invoice_plan |
Create Invoice Plan | purchase.create.invoice.plan | form | New |
view_purchase_invoice_plan_filter |
view.purchase.invoice.plan.filter | purchase.invoice.plan | search | New |
view_purchase_invoice_plan_form |
view.purchase.invoice.plan.form | purchase.invoice.plan | form | New |
view_purchase_invoice_plan_tree |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_invoice_plan_tree_readonly |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_make_planned_invoice |
view.purchase.make.planned.invoice | purchase.make.planned.invoice | form | New |
installment_date
Date
default=fields.Date.context_today
required=True
string='Installment Date'
interval
Integer
default=1
required=True
string='Interval'
interval_type
Selection
default='month'
required=True
string='Interval Type'
args: [('day', 'Day'), ('month', 'Month'), ('year', 'Year')]
num_installment
Integer
default=0
required=True
string='Number of Installment'
purchase_create_invoice_plan(self)
amount
Float
compute='_compute_amount'
digits='Product Price'
help='This amount will be used to calculate the percent'
inverse='_inverse_amount'
string='Amount'
amount_invoiced
Float
compute='_compute_invoiced'
readonly=False
store=True
installment
Integer
string='Installment'
invoice_ids
Many2many → account.move
column1='plan_id'
column2='move_id'
comodel_name='account.move'
readonly=True
relation='purchase_invoice_plan_invoice_rel'
string='Invoices'
invoice_type
Selection
default='installment'
required=True
selection=[('installment', 'Installment')]
string='Type'
invoiced
Boolean
compute='_compute_invoiced'
help='If this line already invoiced'
store=True
string='Invoice Created'
last
Boolean
compute='_compute_last'
help='Last installment will create invoice use remaining amount'
string='Last Installment'
no_edit
Boolean
compute='_compute_no_edit'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
related='purchase_id.partner_id'
store=True
string='Supplier'
percent
Float
digits='Purchase Invoice Plan Percent'
help='This percent will be used to calculate new quantity'
string='Percent'
plan_date
Date
required=True
string='Plan Date'
purchase_id
Many2one → purchase.order
comodel_name='purchase.order'
index=True
ondelete='cascade'
readonly=True
string='Purchases Order'
state
Selection
index=True
related='purchase_id.state'
store=True
string='Status'
to_invoice
Boolean
compute='_compute_to_invoice'
help='If this line is ready to create new invoice'
store=True
string='Next Invoice'
unlink(self)
No new fields.
Public methods (1)create_invoices_by_plan(self)
invoice_plan_ids
One2many → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
copy=False
inverse_name='purchase_id'
string='Invoice Plan'
ip_invoice_plan
Boolean
compute='_compute_ip_invoice_plan'
help='At least one invoice plan line pending to create invoice'
string='Invoice Plan In Process'
ip_total_amount
Monetary
compute='_compute_ip_total'
string='Total Amount'
ip_total_percent
Float
compute='_compute_ip_total'
string='Percent'
use_invoice_plan
Boolean
copy=False
default=False
string='Use Invoice Plan'
action_view_invoice(self, invoices=False)
button_confirm(self)
create_invoice_plan(self, num_installment, installment_date, interval, interval_type)
remove_invoice_plan(self)
| 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_invoice_plan |
| 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), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Ecosoft |
| COMMITTERS | |
| COMMITTERS | OCA Transbot, João Marques, oca-travis, OCA-git-bot, Kitti U |
| 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/purchase-workflow: - purchase_open_qty odoo/odoo: - purchase_stock - stock_account - stock - product - base - base_setup - web - bus - web_tour - uom - barcodes - account - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - 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 | purchase.order | xpath | Inherits purchase.purchase_order_form |
view_purchase_create_invoice_plan |
Create Invoice Plan | purchase.create.invoice.plan | form | New |
view_purchase_invoice_plan_filter |
view.purchase.invoice.plan.filter | purchase.invoice.plan | search | New |
view_purchase_invoice_plan_form |
view.purchase.invoice.plan.form | purchase.invoice.plan | form | New |
view_purchase_invoice_plan_tree |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_invoice_plan_tree_readonly |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_make_planned_invoice |
view.purchase.make.planned.invoice | purchase.make.planned.invoice | form | New |
installment_date
Date
default=fields.Date.context_today
required=True
string='Installment Date'
interval
Integer
default=1
required=True
string='Interval'
interval_type
Selection
default='month'
required=True
string='Interval Type'
args: [('day', 'Day'), ('month', 'Month'), ('year', 'Year')]
num_installment
Integer
default=0
required=True
string='Number of Installment'
purchase_create_invoice_plan(self)
installment
Integer
string='Installment'
invoice_ids
Many2many → account.move
column1='plan_id'
column2='move_id'
comodel_name='account.move'
readonly=True
relation='purchase_invoice_plan_invoice_rel'
string='Invoices'
invoice_type
Selection
default='installment'
required=True
selection=[('installment', 'Installment')]
string='Type'
invoiced
Boolean
compute='_compute_invoiced'
help='If this line already invoiced'
string='Invoice Created'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
related='purchase_id.partner_id'
store=True
string='Supplier'
percent
Float
digits='Product Unit of Measure'
help='This percent will be used to calculate new quantity'
string='Percent'
plan_date
Date
required=True
string='Plan Date'
purchase_id
Many2one → purchase.order
comodel_name='purchase.order'
index=True
ondelete='cascade'
readonly=True
string='Purchases Order'
state
Selection
index=True
related='purchase_id.state'
selection=[('draft', 'RFQ'), ('sent', 'RFQ Sent'), ('to approve', 'To Approve'), ('purchase', 'Purchase Order'), ('done', 'Locked'), ('cancel', 'Cancelled')]
store=True
string='Status'
to_invoice
Boolean
compute='_compute_to_invoice'
help='If this line is ready to create new invoice'
string='Next Invoice'
No public methods.
No new fields.
Public methods (1)create_invoices_by_plan(self)
invoice_plan_ids
One2many → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
copy=False
inverse_name='purchase_id'
readonly=True
states={'draft': [('readonly', False)]}
string='Invoice Plan'
ip_invoice_plan
Boolean
compute='_compute_ip_invoice_plan'
help='At least one invoice plan line pending to create invoice'
string='Invoice Plan In Process'
use_invoice_plan
Boolean
copy=False
default=False
string='Use Invoice Plan'
action_confirm(self)
action_invoice_create(self)
create_invoice_plan(self, num_installment, installment_date, interval, interval_type)
remove_invoice_plan(self)
| 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_invoice_plan |
| VERSION | |
| VERSION | 1.0.2 |
| CATEGORY | |
| CATEGORY | Purchase |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Ecosoft |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Ecosoft |
| COMMITTERS | |
| COMMITTERS | Sylvain LE GAL, GitHub, oca-travis, OCA-git-bot, Kitti U |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/purchase-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:23 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/purchase-workflow: - purchase_open_qty odoo/odoo: - account - base_setup - base - web - product - decimal_precision - bus - web_tour - uom - analytic - portal - http_routing - digest - purchase_stock - stock_account - stock - barcodes - 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 | purchase.order | xpath | Inherits purchase.purchase_order_form |
view_purchase_create_invoice_plan |
Create Invoice Plan | purchase.create.invoice.plan | form | New |
view_purchase_invoice_plan_filter |
view.purchase.invoice.plan.filter | purchase.invoice.plan | search | New |
view_purchase_invoice_plan_form |
view.purchase.invoice.plan.form | purchase.invoice.plan | form | New |
view_purchase_invoice_plan_tree |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_invoice_plan_tree_readonly |
view.purchase.invoice.plan.tree | purchase.invoice.plan | tree | New |
view_purchase_make_planned_invoice |
view.purchase.make.planned.invoice | purchase.make.planned.invoice | form | New |
installment_date
Date
default=fields.Date.context_today
required=True
string='Installment Date'
interval
Integer
default=1
required=True
string='Interval'
interval_type
Selection
default='month'
required=True
string='Interval Type'
args: [('day', 'Day'), ('month', 'Month'), ('year', 'Year')]
num_installment
Integer
default=0
required=True
string='Number of Installment'
purchase_create_invoice_plan(self)
installment
Integer
string='Installment'
invoice_ids
Many2many → account.invoice
column1='plan_id'
column2='invoice_id'
readonly=True
relation='purchase_invoice_plan_invoice_rel'
string='Invoices'
args: 'account.invoice'
invoice_type
Selection
default='installment'
required=True
string='Type'
args: [('installment', 'Installment')]
invoiced
Boolean
compute='_compute_invoiced'
help='If this line already invoiced'
string='Invoice Created'
partner_id
Many2one → res.partner
comodel_name='res.partner'
index=True
related='purchase_id.partner_id'
store=True
string='Supplier'
percent
Float
digits=dp.get_precision('Product Unit of Measure')
help='This percent will be used to calculate new quantity'
string='Percent'
plan_date
Date
required=True
string='Plan Date'
purchase_id
Many2one → purchase.order
comodel_name='purchase.order'
index=True
ondelete='cascade'
readonly=True
string='Purchases Order'
state
Selection
index=True
related='purchase_id.state'
store=True
string='Status'
args: [('draft', 'RFQ'), ('sent', 'RFQ Sent'), ('to approve', 'To Approve'), ('purchase', 'Purchase Order'), ('done', 'Locked'), ('cancel', 'Cancelled')]
to_invoice
Boolean
compute='_compute_to_invoice'
help='If this line is ready to create new invoice'
string='Next Invoice'
No public methods.
No new fields.
Public methods (1)create_invoices_by_plan(self)
invoice_plan_ids
One2many → purchase.invoice.plan
comodel_name='purchase.invoice.plan'
copy=False
inverse_name='purchase_id'
readonly=True
states={'draft': [('readonly', False)]}
string='Inovice Plan'
ip_invoice_plan
Boolean
compute='_compute_ip_invoice_plan'
help='At least one invoice plan line pending to create invoice'
string='Invoice Plan In Process'
use_invoice_plan
Boolean
copy=False
default=False
string='Use Invoice Plan'
action_confirm(self)
action_invoice_create(self)
create_invoice_plan(self, num_installment, installment_date, interval, interval_type)
remove_invoice_plan(self)