| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/agreement |
| GIT | |
| GIT | https://github.com/OCA/agreement.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/agreement/tree/18.0/agreement_legal |
| VERSION | |
| VERSION | 1.3.0 |
| CATEGORY | |
| CATEGORY | Partner |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| COMMITTERS | |
| COMMITTERS | Maxime Chambreuil, Enric Tobella, Weblate, OCA-git-bot, tarteo, oca-ci, Vincent Van Rossem, Saran440, Bhavesh Heliconia, MohamedOsman7, TB-Ph35 |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/agreement |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:11 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/agreement: - agreement odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - html_editor - product - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows you to manage agreements, letter of intent and contract content. The module is meant to be used by the legal team of a company and to allow them to define sections, clauses and templates with their respective content that can be dynamic. Based on the template, an agreement can be created and the pdf document generated. The agreement would go through a workflow to finally become a contract with the customer signature. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
agreement_appendix_form |
Agreement Appendix Form | agreement.appendix | form | New |
agreement_appendix_form2 |
Agreement Appendix Form2 | agreement.appendix | field | Inherits agreement_appendix_form |
agreement_appendix_search |
Agreement Appendix Search | agreement.appendix | search | New |
agreement_appendix_tree |
Agreement Appendix Tree | agreement.appendix | list | New |
agreement_appendix_tree2 |
Agreement Appendix Tree2 | agreement.appendix | list | Inherits agreement_appendix_tree |
agreement_clause_search_view |
Agreement Clause Search | agreement.clause | search | New |
agreement_graph_view |
agreement.graph | agreement | graph | New |
agreement_pivot_view |
agreement.pivot | agreement | pivot | New |
agreement_recital_form |
Agreement Recital Form | agreement.recital | form | New |
agreement_recital_form2 |
Agreement Recital Form2 | agreement.recital | field | Inherits agreement_recital_form |
agreement_recital_search |
Agreement Recital Search | agreement.recital | search | New |
agreement_recital_tree |
Agreement Recital Tree | agreement.recital | list | New |
agreement_recital_tree2 |
Agreement Recital Tree2 | agreement.recital | list | Inherits agreement_recital_tree |
create_agreement_from_template_form_view |
Create Agreement From Template | create.agreement.wizard | form | New |
partner_agreement_clause_form_view |
Agreement clause Form | agreement.clause | form | New |
partner_agreement_clause_form_view2 |
Agreement Clause Form2 | agreement.clause | field | Inherits partner_agreement_clause_form_view |
partner_agreement_clause_list_view |
Agreement Clause List | agreement.clause | list | New |
partner_agreement_clause_list_view2 |
Agreement Clause List2 | agreement.clause | list | Inherits partner_agreement_clause_list_view |
partner_agreement_form_view |
Agreement Form | agreement | xpath | Inherits agreement.agreement_form |
partner_agreement_list_view |
Agreement List | agreement | list | New |
partner_agreement_search_view |
Agreement Search | agreement | search | New |
partner_agreement_section_form_view |
Agreement Section Form | agreement.section | form | New |
partner_agreement_section_form_view2 |
Agreement Section Form2 | agreement.section | field | Inherits partner_agreement_section_form_view |
partner_agreement_section_list_view |
Agreement Section List | agreement.section | list | New |
partner_agreement_section_list_view2 |
Agreement Section List2 | agreement.section | list | Inherits partner_agreement_section_list_view |
partner_agreement_section_search_view |
Agreement Section Search | agreement.section | search | New |
partner_agreement_stage_form_view |
Agreement Stage Form | agreement.stage | form | New |
partner_agreement_stage_list_view |
Agreement Stage List | agreement.stage | list | New |
partner_agreement_stage_search_view |
Agreement Stage Search | agreement.stage | search | New |
partner_agreement_subtype_form_view |
Agreement Sub Type Form | agreement.subtype | form | New |
partner_agreement_subtype_list_view |
Agreement Subtype List | agreement.subtype | list | New |
partner_agreement_subtype_search_view |
Agreement Sub Type Search | agreement.subtype | search | New |
partner_agreement_type_form_view |
Agreement Type Form | agreement.type | xpath | Inherits agreement.agreement_type_form_view |
partner_agreement_type_list_view |
Agreement Type List | agreement.type | field | Inherits agreement.agreement_type_list_view |
report_agreement_document |
report_agreement_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.agreement | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_project_agreement_kanban |
Agreement Kanban | agreement | kanban | New |
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_subtype_id
Many2one → agreement.subtype
help='Select the sub-type of this agreement. Sub-Types are related to agreement types.'
string='Agreement Sub-type'
tracking=True
args: 'agreement.subtype'
agreement_type_id
Many2one
tracking=True
appendix_ids
One2many → agreement.appendix
copy=True
string='Appendices'
args: 'agreement.appendix', 'agreement_id'
approved_date
Date
tracking=True
approved_user_id
Many2one → res.users
string='Approved By'
tracking=True
args: 'res.users'
assigned_user_id
Many2one → res.users
help='Select the user who manages this agreement.'
string='Assigned To'
tracking=True
args: 'res.users'
change_notice
Integer
help='Number of Days to be notified before changes.'
string='Change Notice (Days)'
tracking=True
child_agreements_ids
One2many → agreement
copy=False
domain=[('active', '=', True)]
string='Child Agreements'
args: 'agreement', 'parent_agreement_id'
clauses_ids
One2many → agreement.clause
string='Clauses'
args: 'agreement.clause', 'agreement_id'
code
Char
copy=False
default=<expr>
help='ID used for internal contract tracking.'
required=True
string='Reference'
tracking=True
color
Integer
company_contact_email
Char
related='company_contact_id.email'
string='Email'
company_contact_id
Many2one → res.partner
copy=True
help='The primary contact in the company.'
string='Company Contact'
args: 'res.partner'
company_contact_phone
Char
related='company_contact_id.phone'
string='Phone'
company_partner_id
Many2one
related='company_id.partner_id'
string="Company's Partner"
company_signed_date
Date
help='Date the contract was signed by Company.'
string='Signed on'
tracking=True
company_signed_user_id
Many2one → res.users
help='The user at our company who authorized/signed the agreement or contract.'
string='Signed By'
tracking=True
args: 'res.users'
create_date_parent
Datetime
related='parent_agreement_id.create_date'
string='Created on (parent)'
create_uid_parent
Many2one
related='parent_agreement_id.create_uid'
string='Created by (parent)'
description
Text
help='Description of the agreement'
tracking=True
dynamic_description
Text
compute='_compute_dynamic_description'
help='Compute dynamic description'
dynamic_parties
Html
compute='_compute_dynamic_parties'
help='Compute dynamic parties'
dynamic_special_terms
Text
compute='_compute_dynamic_special_terms'
help='Compute dynamic special terms'
end_date
Date
help='When the agreement ends.'
tracking=True
expiration_notice
Integer
help='Number of Days before expiration to be notified.'
string='Exp. Notice (Days)'
tracking=True
line_ids
One2many → agreement.line
copy=False
string='Products/Services'
args: 'agreement.line', 'agreement_id'
name
Char
required=True
string='Title'
notification_address_id
Many2one → res.partner
help='The address to send notifications to, if different from customer address.(Address Type = Other)'
string='Notification Address'
args: 'res.partner'
parent_agreement_id
Many2one → agreement
help='Link this agreement to a parent agreement. For example if this agreement is an amendment to another agreement. This list will only show other agreements related to the same account.'
string='Parent Agreement'
args: 'agreement'
parties
Html
default=_get_default_parties
help='Parties of the agreement'
partner_contact_email
Char
related='partner_contact_id.email'
string='Partner Email'
partner_contact_id
Many2one → res.partner
copy=True
help='The primary partner contact (If Applicable).'
string='Partner Contact'
args: 'res.partner'
partner_contact_phone
Char
related='partner_contact_id.phone'
string='Partner Phone'
partner_id
Many2one → res.partner
copy=True
help='The customer or vendor this agreement is related to.'
required=False
string='Partner'
args: 'res.partner'
partner_signed_date
Date
help='Date the contract was signed by the Partner.'
string='Signed on (Partner)'
tracking=True
partner_signed_user_id
Many2one → res.partner
help='Contact on the account that signed the agreement/contract.'
string='Signed By (Partner)'
tracking=True
args: 'res.partner'
previous_version_agreements_ids
One2many → agreement
context={'active_test': False}
copy=False
string='Previous Versions'
args: 'agreement', 'parent_agreement_id'
readonly
Boolean
related='stage_id.readonly'
recital_ids
One2many → agreement.recital
copy=True
string='Recitals'
args: 'agreement.recital', 'agreement_id'
reviewed_date
Date
tracking=True
reviewed_user_id
Many2one → res.users
string='Reviewed By'
tracking=True
args: 'res.users'
revision
Integer
copy=False
default=0
help='The revision will increase with every save event.'
sections_ids
One2many → agreement.section
copy=True
string='Sections'
args: 'agreement.section', 'agreement_id'
signed_contract
Binary
string='Signed Document'
tracking=True
signed_contract_filename
Char
string='Filename'
special_terms
Text
help='Any terms that you have agreed to and want to track on the agreement/contract.'
tracking=True
stage_id
Many2one → agreement.stage
copy=False
default=<expr>
group_expand='_read_group_stage_ids'
help='Select the current stage of the agreement.'
index=True
string='Stage'
tracking=True
args: 'agreement.stage'
start_date
Date
help='When the agreement starts.'
tracking=True
state
Selection
default='draft'
tracking=True
args: [('draft', 'Draft'), ('active', 'Active'), ('inactive', 'Inactive')]
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
string='Template'
args: 'agreement'
termination_date
Date
help='Date that the contract was terminated.'
tracking=True
termination_requested
Date
help='Date that a request for termination was received.'
string='Termination Requested Date'
tracking=True
to_review_date
Date
compute='_compute_to_review_date'
help='Date used to warn us some days before agreement expires'
readonly=False
store=True
use_parties_content
Boolean
help='Use custom content for parties'
version
Integer
copy=False
default=1
help='The versions are used to keep track of document history and previous versions can be referenced.'
action_view_agreement(self, agreement)
copy(self, default=None)
create(self, vals_list)
create_new_agreement(self)
create_new_version(self)
get_view(self, view_id=None, view_type=False, **options)
write(self, vals)
active
Boolean
default=True
help='If unchecked, it will allow you to hide this appendix without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
name
Char
required=True
sequence
Integer
default=10
title
Char
help='The title is displayed on the PDF. The name is not.'
required=True
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Clause Content'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
name
Char
required=True
section_id
Many2one → agreement.section
ondelete='cascade'
string='Section'
args: 'agreement.section'
sequence
Integer
temp_agreement_id
Many2one → agreement
help='This field help to filter section.'
string='Temp Agreement'
args: 'agreement'
title
Char
help='The title is displayed on the PDF. The name is not.'
No public methods.
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
onchange_copyvalue(self)
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
name
Char
required=True
string='Description'
product_id
Many2one → product.product
string='Product'
args: 'product.product'
qty
Float
string='Quantity'
uom_id
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide this recital without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
name
Char
required=True
sequence
Integer
default=10
title
Char
help='The title is displayed on the PDF. The name is not.'
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
clauses_ids
One2many → agreement.clause
copy=True
string='Clauses'
args: 'agreement.clause', 'section_id'
content
Html
string='Section Content'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
name
Char
required=True
sequence
Integer
title
Char
help='The title is displayed on the PDF. The name is not.'
No public methods.
active
Boolean
default=True
fold
Boolean
help='This stage is folded in the kanban view by default.'
required=False
string='Is Folded'
name
Char
required=True
string='Stage Name'
readonly
Boolean
default=False
help='The agreement can not edit if set Readonly = True.'
sequence
Integer
default='1'
required=False
stage_type
Selection
required=True
string='Type'
args: [('agreement', 'Agreement')]
No public methods.
active
Boolean
default=True
agreement_type_id
Many2one → agreement.type
string='Agreement Type'
args: 'agreement.type'
name
Char
required=True
string='Sub-Type Name'
No public methods.
agreement_subtypes_ids
One2many → agreement.subtype
string='Sub-Types'
args: 'agreement.subtype', 'agreement_type_id'
review_days
Integer
review_user_id
Many2one → res.users
help='User assigned automatically the activity on review date'
args: 'res.users'
No public methods.
name
Char
required=True
string='Title'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
required=True
string='Template'
args: 'agreement'
create_agreement(self)
module_agreement_helpdesk
Boolean
string='Link your Helpdesk tickets to an agreement.'
module_agreement_maintenance
Boolean
string='Manage maintenance agreements and contracts.'
module_agreement_mrp
Boolean
string='Link your manufacturing orders to an agreement.'
module_agreement_project
Boolean
string='Link your projects and tasks to an agreement.'
module_agreement_repair
Boolean
string='Link your repair orders to an agreement.'
module_agreement_rma
Boolean
string='Link your RMAs to an agreement.'
module_agreement_sale
Boolean
string='Create an agreement when the sale order is confirmed.'
module_agreement_sale_subscription
Boolean
string='Link your subscriptions to an agreement.'
module_agreement_stock
Boolean
string='Link your pickings to an agreement.'
module_fieldservice_agreement
Boolean
string='Link your Field Service orders and equipments to an agreement.'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/agreement |
| GIT | |
| GIT | https://github.com/OCA/agreement.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/agreement/tree/17.0/agreement_legal |
| VERSION | |
| VERSION | 3.0.1 |
| CATEGORY | |
| CATEGORY | Partner |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| COMMITTERS | |
| COMMITTERS | Enric Tobella, Weblate, OCA-git-bot, oca-ci, Yves Goldberg, Luis Rodriguez, Antoni Marroig Campomar, paloma.gonzalez |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/agreement |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:04 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/agreement: - agreement odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - product - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows you to manage agreements, letter of intent and contract content. The module is meant to be used by the legal team of a company and to allow them to define sections, clauses and templates with their respective content that can be dynamic. Based on the template, an agreement can be created and the pdf document generated. The agreement would go through a workflow to finally become a contract with the customer signature. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
agreement_appendix_form |
Agreement Appendix Form | agreement.appendix | form | New |
agreement_appendix_form2 |
Agreement Appendix Form2 | agreement.appendix | field | Inherits agreement_appendix_form |
agreement_appendix_search |
Agreement Appendix Search | agreement.appendix | search | New |
agreement_appendix_tree |
Agreement Appendix Tree | agreement.appendix | tree | New |
agreement_appendix_tree2 |
Agreement Appendix Tree2 | agreement.appendix | tree | Inherits agreement_appendix_tree |
agreement_clause_search_view |
Agreement Clause Search | agreement.clause | search | New |
agreement_graph_view |
agreement.graph | agreement | graph | New |
agreement_pivot_view |
agreement.pivot | agreement | pivot | New |
agreement_recital_form |
Agreement Recital Form | agreement.recital | form | New |
agreement_recital_form2 |
Agreement Recital Form2 | agreement.recital | field | Inherits agreement_recital_form |
agreement_recital_search |
Agreement Recital Search | agreement.recital | search | New |
agreement_recital_tree |
Agreement Recital Tree | agreement.recital | tree | New |
agreement_recital_tree2 |
Agreement Recital Tree2 | agreement.recital | tree | Inherits agreement_recital_tree |
create_agreement_from_template_form_view |
Create Agreement From Template | create.agreement.wizard | form | New |
partner_agreement_clause_form_view |
Agreement clause Form | agreement.clause | form | New |
partner_agreement_clause_form_view2 |
Agreement Clause Form2 | agreement.clause | field | Inherits partner_agreement_clause_form_view |
partner_agreement_clause_list_view |
Agreement Clause List | agreement.clause | tree | New |
partner_agreement_clause_list_view2 |
Agreement Clause List2 | agreement.clause | tree | Inherits partner_agreement_clause_list_view |
partner_agreement_form_view |
Agreement Form | agreement | form | New |
partner_agreement_list_view |
Agreement List | agreement | tree | New |
partner_agreement_search_view |
Agreement Search | agreement | search | New |
partner_agreement_section_form_view |
Agreement Section Form | agreement.section | form | New |
partner_agreement_section_form_view2 |
Agreement Section Form2 | agreement.section | field | Inherits partner_agreement_section_form_view |
partner_agreement_section_list_view |
Agreement Section List | agreement.section | tree | New |
partner_agreement_section_list_view2 |
Agreement Section List2 | agreement.section | tree | Inherits partner_agreement_section_list_view |
partner_agreement_section_search_view |
Agreement Section Search | agreement.section | search | New |
partner_agreement_stage_form_view |
Agreement Stage Form | agreement.stage | form | New |
partner_agreement_stage_list_view |
Agreement Stage List | agreement.stage | tree | New |
partner_agreement_stage_search_view |
Agreement Stage Search | agreement.stage | search | New |
partner_agreement_subtype_form_view |
Agreement Sub Type Form | agreement.subtype | form | New |
partner_agreement_subtype_list_view |
Agreement Subtype List | agreement.subtype | tree | New |
partner_agreement_subtype_search_view |
Agreement Sub Type Search | agreement.subtype | search | New |
partner_agreement_type_form_view |
Agreement Type Form | agreement.type | xpath | Inherits agreement.agreement_type_form_view |
partner_agreement_type_list_view |
Agreement Type List | agreement.type | field | Inherits agreement.agreement_type_list_view |
partner_form |
res.partner | xpath | Inherits base.view_partner_form | |
recompute_agreement_from_template_form_view |
Recompute Agreement From Template | recompute.agreement.from.template.wizard | form | New |
report_agreement_document |
report_agreement_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.agreement | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_project_agreement_kanban |
Agreement Kanban | agreement | kanban | New |
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_subtype_id
Many2one → agreement.subtype
help='Select the sub-type of this agreement. Sub-Types are related to agreement types.'
string='Agreement Sub-type'
tracking=True
args: 'agreement.subtype'
agreement_type_id
Many2one
tracking=True
appendix_ids
One2many → agreement.appendix
copy=True
string='Appendices'
args: 'agreement.appendix', 'agreement_id'
approved_date
Date
tracking=True
approved_user_id
Many2one → res.users
string='Approved By'
tracking=True
args: 'res.users'
assigned_user_id
Many2one → res.users
help='Select the user who manages this agreement.'
string='Assigned To'
tracking=True
args: 'res.users'
change_notice
Integer
help='Number of Days to be notified before changes.'
string='Change Notice (Days)'
tracking=True
child_agreements_ids
One2many → agreement
copy=False
domain=[('active', '=', True)]
string='Child Agreements'
args: 'agreement', 'parent_agreement_id'
clauses_ids
One2many → agreement.clause
string='Clauses'
args: 'agreement.clause', 'agreement_id'
code
Char
copy=False
default=<expr>
help='ID used for internal contract tracking.'
required=True
string='Reference'
tracking=True
color
Integer
company_contact_email
Char
related='company_contact_id.email'
string='Email'
company_contact_id
Many2one → res.partner
copy=True
help='The primary contact in the company.'
string='Company Contact'
args: 'res.partner'
company_contact_phone
Char
related='company_contact_id.phone'
string='Phone'
company_partner_id
Many2one
related='company_id.partner_id'
string="Company's Partner"
company_signed_date
Date
help='Date the contract was signed by Company.'
string='Signed on'
tracking=True
company_signed_user_id
Many2one → res.users
help='The user at our company who authorized/signed the agreement or contract.'
string='Signed By'
tracking=True
args: 'res.users'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
create_date_parent
Datetime
related='parent_agreement_id.create_date'
string='Created on (parent)'
create_uid_parent
Many2one
related='parent_agreement_id.create_uid'
string='Created by (parent)'
default_value
Char
help='Optional value to use if the target field is empty.'
description
Text
help='Description of the agreement'
tracking=True
dynamic_description
Text
compute='_compute_dynamic_description'
help='Compute dynamic description'
dynamic_parties
Html
compute='_compute_dynamic_parties'
help='Compute dynamic parties'
dynamic_special_terms
Text
compute='_compute_dynamic_special_terms'
help='Compute dynamic special terms'
end_date
Date
help='When the agreement ends.'
tracking=True
expiration_notice
Integer
help='Number of Days before expiration to be notified.'
string='Exp. Notice (Days)'
tracking=True
field_id
Many2one → ir.model.fields
help='You can select a target field from the related document model.\n If it is a relationship field you will be able to select a target field\n at the destination of the relationship.'
string='Field'
args: 'ir.model.fields'
line_ids
One2many → agreement.line
copy=False
string='Products/Services'
args: 'agreement.line', 'agreement_id'
name
Char
required=True
string='Title'
notification_address_id
Many2one → res.partner
help='The address to send notifications to, if different from customer address.(Address Type = Other)'
string='Notification Address'
args: 'res.partner'
parent_agreement_id
Many2one → agreement
help='Link this agreement to a parent agreement. For example if this agreement is an amendment to another agreement. This list will only show other agreements related to the same account.'
string='Parent Agreement'
args: 'agreement'
parties
Html
default=_get_default_parties
help='Parties of the agreement'
partner_contact_email
Char
related='partner_contact_id.email'
string='Partner Email'
partner_contact_id
Many2one → res.partner
copy=True
help='The primary partner contact (If Applicable).'
string='Partner Contact'
args: 'res.partner'
partner_contact_phone
Char
related='partner_contact_id.phone'
string='Partner Phone'
partner_id
Many2one → res.partner
copy=True
help='The customer or vendor this agreement is related to.'
required=False
string='Partner'
args: 'res.partner'
partner_signed_date
Date
help='Date the contract was signed by the Partner.'
string='Signed on (Partner)'
tracking=True
partner_signed_user_id
Many2one → res.partner
help='Contact on the account that signed the agreement/contract.'
string='Signed By (Partner)'
tracking=True
args: 'res.partner'
previous_version_agreements_ids
One2many → agreement
context={'active_test': False}
copy=False
string='Previous Versions'
args: 'agreement', 'parent_agreement_id'
readonly
Boolean
related='stage_id.readonly'
recital_ids
One2many → agreement.recital
copy=True
string='Recitals'
args: 'agreement.recital', 'agreement_id'
reviewed_date
Date
tracking=True
reviewed_user_id
Many2one → res.users
string='Reviewed By'
tracking=True
args: 'res.users'
revision
Integer
copy=False
default=0
help='The revision will increase with every save event.'
sections_ids
One2many → agreement.section
copy=True
string='Sections'
args: 'agreement.section', 'agreement_id'
signed_contract
Binary
string='Signed Document'
signed_contract_filename
Char
string='Filename'
special_terms
Text
help='Any terms that you have agreed to and want to track on the agreement/contract.'
tracking=True
stage_id
Many2one → agreement.stage
copy=False
default=<expr>
group_expand='_read_group_stage_ids'
help='Select the current stage of the agreement.'
index=True
string='Stage'
tracking=True
args: 'agreement.stage'
start_date
Date
help='When the agreement starts.'
tracking=True
state
Selection
default='draft'
tracking=True
args: [('draft', 'Draft'), ('active', 'Active'), ('inactive', 'Inactive')]
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
string='Template'
args: 'agreement'
termination_date
Date
help='Date that the contract was terminated.'
tracking=True
termination_requested
Date
help='Date that a request for termination was received.'
string='Termination Requested Date'
tracking=True
to_review_date
Date
compute='_compute_to_review_date'
help='Date used to warn us some days before agreement expires'
readonly=False
store=True
use_parties_content
Boolean
help='Use custom content for parties'
version
Integer
copy=False
default=1
help='The versions are used to keep track of document history and previous versions can be referenced.'
action_open_recompute_from_template_wizard(self)
action_view_agreement(self, agreement)
copy(self, default=None)
create(self, vals_list)
create_new_agreement(self)
create_new_version(self)
get_view(self, view_id=None, view_type=False, **options)
onchange_copyvalue(self)
recompute_from_template(self)
write(self, vals)
active
Boolean
default=True
help='If unchecked, it will allow you to hide this appendix without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
translate=True
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
translate=True
default_value
Char
help='Optional value to use if the target field is empty.'
translate=True
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
translate=True
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
translate=True
sequence
Integer
default=10
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
required=True
translate=True
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Clause Content'
translate=True
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
translate=True
default_value
Char
help='Optional value to use if the target field is empty.'
translate=True
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
translate=True
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
translate=True
section_id
Many2one → agreement.section
ondelete='cascade'
string='Section'
args: 'agreement.section'
sequence
Integer
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
temp_agreement_id
Many2one → agreement
help='This field help to filter section.'
string='Temp Agreement'
args: 'agreement'
title
Char
help='The title is displayed on the PDF. The name is not.'
translate=True
onchange_copyvalue(self)
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
name
Char
required=True
string='Description'
product_id
Many2one → product.product
string='Product'
args: 'product.product'
qty
Float
string='Quantity'
uom_id
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide this recital without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
translate=True
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
translate=True
default_value
Char
help='Optional value to use if the target field is empty.'
translate=True
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
translate=True
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
translate=True
sequence
Integer
default=10
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
translate=True
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
clauses_ids
One2many → agreement.clause
copy=True
string='Clauses'
args: 'agreement.clause', 'section_id'
content
Html
string='Section Content'
translate=True
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
translate=True
default_value
Char
help='Optional value to use if the target field is empty.'
translate=True
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
translate=True
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
translate=True
sequence
Integer
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
translate=True
onchange_copyvalue(self)
active
Boolean
default=True
fold
Boolean
help='This stage is folded in the kanban view by default.'
required=False
string='Is Folded'
name
Char
required=True
string='Stage Name'
translate=True
readonly
Boolean
default=False
help='The agreement can not edit if set Readonly = True.'
sequence
Integer
default='1'
required=False
stage_type
Selection
required=True
string='Type'
args: [('agreement', 'Agreement')]
No public methods.
active
Boolean
default=True
agreement_type_id
Many2one → agreement.type
string='Agreement Type'
args: 'agreement.type'
name
Char
required=True
string='Sub-Type Name'
translate=True
No public methods.
agreement_subtypes_ids
One2many → agreement.subtype
string='Sub-Types'
args: 'agreement.subtype', 'agreement_type_id'
review_days
Integer
review_user_id
Many2one → res.users
help='User assigned automatically the activity on review date'
args: 'res.users'
No public methods.
name
Char
required=True
string='Title'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
required=True
string='Template'
args: 'agreement'
create_agreement(self)
agreement_id
Many2one → agreement
readonly=True
required=True
args: 'agreement'
template_id
Many2one → agreement
readonly=True
related='agreement_id.template_id'
args: 'agreement'
action_recompute_from_template(self)
module_agreement_helpdesk
Boolean
string='Link your Helpdesk tickets to an agreement.'
module_agreement_maintenance
Boolean
string='Manage maintenance agreements and contracts.'
module_agreement_mrp
Boolean
string='Link your manufacturing orders to an agreement.'
module_agreement_project
Boolean
string='Link your projects and tasks to an agreement.'
module_agreement_repair
Boolean
string='Link your repair orders to an agreement.'
module_agreement_rma
Boolean
string='Link your RMAs to an agreement.'
module_agreement_sale
Boolean
string='Create an agreement when the sale order is confirmed.'
module_agreement_sale_subscription
Boolean
string='Link your subscriptions to an agreement.'
module_agreement_stock
Boolean
string='Link your pickings to an agreement.'
module_fieldservice_agreement
Boolean
string='Link your Field Service orders and equipments to an agreement.'
No public methods.
agreement_ids
One2many → agreement
string='Agreements'
args: 'agreement', 'partner_id'
agreements_count
Integer
compute='_compute_agreements_count'
action_open_agreement(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/agreement |
| GIT | |
| GIT | https://github.com/OCA/agreement.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/agreement/tree/16.0/agreement_legal |
| VERSION | |
| VERSION | 2.0.4 |
| CATEGORY | |
| CATEGORY | Partner |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Kevin Luna, Antoni Marroig Campomar, len |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/agreement |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:11:57 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/agreement: - agreement odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - product - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
agreement_appendix_form |
Agreement Appendix Form | agreement.appendix | form | New |
agreement_appendix_form2 |
Agreement Appendix Form2 | agreement.appendix | field | Inherits agreement_appendix_form |
agreement_appendix_search |
Agreement Appendix Search | agreement.appendix | search | New |
agreement_appendix_tree |
Agreement Appendix Tree | agreement.appendix | tree | New |
agreement_appendix_tree2 |
Agreement Appendix Tree2 | agreement.appendix | tree | Inherits agreement_appendix_tree |
agreement_clause_search_view |
Agreement Clause Search | agreement.clause | search | New |
agreement_graph_view |
agreement.graph | agreement | graph | New |
agreement_pivot_view |
agreement.pivot | agreement | pivot | New |
agreement_recital_form |
Agreement Recital Form | agreement.recital | form | New |
agreement_recital_form2 |
Agreement Recital Form2 | agreement.recital | field | Inherits agreement_recital_form |
agreement_recital_search |
Agreement Recital Search | agreement.recital | search | New |
agreement_recital_tree |
Agreement Recital Tree | agreement.recital | tree | New |
agreement_recital_tree2 |
Agreement Recital Tree2 | agreement.recital | tree | Inherits agreement_recital_tree |
create_agreement_from_template_form_view |
Create Agreement From Template | create.agreement.wizard | form | New |
partner_agreement_clause_form_view |
Agreement clause Form | agreement.clause | form | New |
partner_agreement_clause_form_view2 |
Agreement Clause Form2 | agreement.clause | field | Inherits partner_agreement_clause_form_view |
partner_agreement_clause_list_view |
Agreement Clause List | agreement.clause | tree | New |
partner_agreement_clause_list_view2 |
Agreement Clause List2 | agreement.clause | tree | Inherits partner_agreement_clause_list_view |
partner_agreement_form_view |
Agreement Form | agreement | form | New |
partner_agreement_list_view |
Agreement List | agreement | tree | New |
partner_agreement_search_view |
Agreement Search | agreement | search | New |
partner_agreement_section_form_view |
Agreement Section Form | agreement.section | form | New |
partner_agreement_section_form_view2 |
Agreement Section Form2 | agreement.section | field | Inherits partner_agreement_section_form_view |
partner_agreement_section_list_view |
Agreement Section List | agreement.section | tree | New |
partner_agreement_section_list_view2 |
Agreement Section List2 | agreement.section | tree | Inherits partner_agreement_section_list_view |
partner_agreement_section_search_view |
Agreement Section Search | agreement.section | search | New |
partner_agreement_stage_form_view |
Agreement Stage Form | agreement.stage | form | New |
partner_agreement_stage_list_view |
Agreement Stage List | agreement.stage | tree | New |
partner_agreement_stage_search_view |
Agreement Stage Search | agreement.stage | search | New |
partner_agreement_subtype_form_view |
Agreement Sub Type Form | agreement.subtype | form | New |
partner_agreement_subtype_list_view |
Agreement Subtype List | agreement.subtype | tree | New |
partner_agreement_subtype_search_view |
Agreement Sub Type Search | agreement.subtype | search | New |
partner_agreement_type_form_view |
Agreement Type Form | agreement.type | xpath | Inherits agreement.agreement_type_form_view |
partner_agreement_type_list_view |
Agreement Type List | agreement.type | field | Inherits agreement.agreement_type_list_view |
partner_form |
res.partner | xpath | Inherits base.view_partner_form | |
report_agreement_document |
report_agreement_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.agreement | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_project_agreement_kanban |
Agreement Kanban | agreement | kanban | New |
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_subtype_id
Many2one → agreement.subtype
help='Select the sub-type of this agreement. Sub-Types are related to agreement types.'
string='Agreement Sub-type'
tracking=True
args: 'agreement.subtype'
agreement_type_id
Many2one
tracking=True
appendix_ids
One2many → agreement.appendix
copy=True
string='Appendices'
args: 'agreement.appendix', 'agreement_id'
approved_date
Date
tracking=True
approved_user_id
Many2one → res.users
string='Approved By'
tracking=True
args: 'res.users'
assigned_user_id
Many2one → res.users
help='Select the user who manages this agreement.'
string='Assigned To'
tracking=True
args: 'res.users'
change_notice
Integer
help='Number of Days to be notified before changes.'
string='Change Notice (Days)'
tracking=True
child_agreements_ids
One2many → agreement
copy=False
domain=[('active', '=', True)]
string='Child Agreements'
args: 'agreement', 'parent_agreement_id'
clauses_ids
One2many → agreement.clause
string='Clauses'
args: 'agreement.clause', 'agreement_id'
code
Char
copy=False
default=<expr>
help='ID used for internal contract tracking.'
required=True
string='Reference'
tracking=True
color
Integer
company_contact_email
Char
related='company_contact_id.email'
string='Email'
company_contact_id
Many2one → res.partner
copy=True
help='The primary contact in the company.'
string='Company Contact'
args: 'res.partner'
company_contact_phone
Char
related='company_contact_id.phone'
string='Phone'
company_partner_id
Many2one
related='company_id.partner_id'
string="Company's Partner"
company_signed_date
Date
help='Date the contract was signed by Company.'
string='Signed on'
tracking=True
company_signed_user_id
Many2one → res.users
help='The user at our company who authorized/signed the agreement or contract.'
string='Signed By'
tracking=True
args: 'res.users'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
create_date_parent
Datetime
related='parent_agreement_id.create_date'
string='Created on (parent)'
create_uid_parent
Many2one
related='parent_agreement_id.create_uid'
string='Created by (parent)'
default_value
Char
help='Optional value to use if the target field is empty.'
description
Text
help='Description of the agreement'
tracking=True
dynamic_description
Text
compute='_compute_dynamic_description'
help='Compute dynamic description'
dynamic_parties
Html
compute='_compute_dynamic_parties'
help='Compute dynamic parties'
dynamic_special_terms
Text
compute='_compute_dynamic_special_terms'
help='Compute dynamic special terms'
end_date
Date
help='When the agreement ends.'
tracking=True
expiration_notice
Integer
help='Number of Days before expiration to be notified.'
string='Exp. Notice (Days)'
tracking=True
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
line_ids
One2many → agreement.line
copy=False
string='Products/Services'
args: 'agreement.line', 'agreement_id'
name
Char
required=True
string='Title'
notification_address_id
Many2one → res.partner
help='The address to send notifications to, if different from customer address.(Address Type = Other)'
string='Notification Address'
args: 'res.partner'
parent_agreement_id
Many2one → agreement
help='Link this agreement to a parent agreement. For example if this agreement is an amendment to another agreement. This list will only show other agreements related to the same account.'
string='Parent Agreement'
args: 'agreement'
parties
Html
default=_get_default_parties
help='Parties of the agreement'
tracking=True
partner_contact_email
Char
related='partner_contact_id.email'
string='Partner Email'
partner_contact_id
Many2one → res.partner
copy=True
help='The primary partner contact (If Applicable).'
string='Partner Contact'
args: 'res.partner'
partner_contact_phone
Char
related='partner_contact_id.phone'
string='Partner Phone'
partner_id
Many2one → res.partner
copy=True
help='The customer or vendor this agreement is related to.'
required=False
string='Partner'
args: 'res.partner'
partner_signed_date
Date
help='Date the contract was signed by the Partner.'
string='Signed on (Partner)'
tracking=True
partner_signed_user_id
Many2one → res.partner
help='Contact on the account that signed the agreement/contract.'
string='Signed By (Partner)'
tracking=True
args: 'res.partner'
previous_version_agreements_ids
One2many → agreement
context={'active_test': False}
copy=False
string='Previous Versions'
args: 'agreement', 'parent_agreement_id'
readonly
Boolean
related='stage_id.readonly'
recital_ids
One2many → agreement.recital
copy=True
string='Recitals'
args: 'agreement.recital', 'agreement_id'
reviewed_date
Date
tracking=True
reviewed_user_id
Many2one → res.users
string='Reviewed By'
tracking=True
args: 'res.users'
revision
Integer
copy=False
default=0
help='The revision will increase with every save event.'
sections_ids
One2many → agreement.section
copy=True
string='Sections'
args: 'agreement.section', 'agreement_id'
signed_contract
Binary
string='Signed Document'
tracking=True
signed_contract_filename
Char
string='Filename'
special_terms
Text
help='Any terms that you have agreed to and want to track on the agreement/contract.'
tracking=True
stage_id
Many2one → agreement.stage
copy=False
default=<expr>
group_expand='_read_group_stage_ids'
help='Select the current stage of the agreement.'
index=True
string='Stage'
tracking=True
args: 'agreement.stage'
start_date
Date
help='When the agreement starts.'
tracking=True
state
Selection
default='draft'
tracking=True
args: [('draft', 'Draft'), ('active', 'Active'), ('inactive', 'Inactive')]
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
string='Template'
args: 'agreement'
termination_date
Date
help='Date that the contract was terminated.'
tracking=True
termination_requested
Date
help='Date that a request for termination was received.'
string='Termination Requested Date'
tracking=True
to_review_date
Date
compute='_compute_to_review_date'
help='Date used to warn us some days before agreement expires'
readonly=False
store=True
use_parties_content
Boolean
help='Use custom content for parties'
version
Integer
copy=False
default=1
help='The versions are used to keep track of document history and previous versions can be referenced.'
action_view_agreement(self, agreement)
copy(self, default=None)
create(self, vals_list)
create_new_agreement(self)
create_new_version(self)
get_view(self, view_id=None, view_type=False, **options)
onchange_copyvalue(self)
write(self, vals)
active
Boolean
default=True
help='If unchecked, it will allow you to hide this appendix without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
sequence
Integer
default=10
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
required=True
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Clause Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
section_id
Many2one → agreement.section
ondelete='cascade'
string='Section'
args: 'agreement.section'
sequence
Integer
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
temp_agreement_id
Many2one → agreement
help='This field help to filter section.'
string='Temp Agreement'
args: 'agreement'
title
Char
help='The title is displayed on the PDF. The name is not.'
onchange_copyvalue(self)
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
name
Char
required=True
string='Description'
product_id
Many2one → product.product
string='Product'
args: 'product.product'
qty
Float
string='Quantity'
uom_id
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide this recital without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
sequence
Integer
default=10
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
clauses_ids
One2many → agreement.clause
copy=True
string='Clauses'
args: 'agreement.clause', 'section_id'
content
Html
string='Section Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
sequence
Integer
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
onchange_copyvalue(self)
active
Boolean
default=True
fold
Boolean
help='This stage is folded in the kanban view by default.'
required=False
string='Is Folded'
name
Char
required=True
string='Stage Name'
readonly
Boolean
default=False
help='The agreement can not edit if set Readonly = True.'
sequence
Integer
default='1'
required=False
stage_type
Selection
required=True
string='Type'
args: [('agreement', 'Agreement')]
No public methods.
active
Boolean
default=True
agreement_type_id
Many2one → agreement.type
string='Agreement Type'
args: 'agreement.type'
name
Char
required=True
string='Sub-Type Name'
No public methods.
agreement_subtypes_ids
One2many → agreement.subtype
string='Sub-Types'
args: 'agreement.subtype', 'agreement_type_id'
review_days
Integer
review_user_id
Many2one → res.users
help='User assigned automatically the activity on review date'
args: 'res.users'
No public methods.
name
Char
required=True
string='Title'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
required=True
string='Template'
args: 'agreement'
create_agreement(self)
module_agreement_helpdesk
Boolean
string='Link your Helpdesk tickets to an agreement.'
module_agreement_maintenance
Boolean
string='Manage maintenance agreements and contracts.'
module_agreement_mrp
Boolean
string='Link your manufacturing orders to an agreement.'
module_agreement_project
Boolean
string='Link your projects and tasks to an agreement.'
module_agreement_repair
Boolean
string='Link your repair orders to an agreement.'
module_agreement_rma
Boolean
string='Link your RMAs to an agreement.'
module_agreement_sale
Boolean
string='Create an agreement when the sale order is confirmed.'
module_agreement_sale_subscription
Boolean
string='Link your subscriptions to an agreement.'
module_agreement_stock
Boolean
string='Link your pickings to an agreement.'
module_fieldservice_agreement
Boolean
string='Link your Field Service orders and equipments to an agreement.'
No public methods.
agreement_ids
One2many → agreement
string='Agreements'
args: 'agreement', 'partner_id'
agreements_count
Integer
compute='_compute_agreements_count'
action_open_agreement(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/agreement |
| GIT | |
| GIT | https://github.com/OCA/agreement.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/agreement/tree/15.0/agreement_legal |
| VERSION | |
| VERSION | 1.1.1 |
| CATEGORY | |
| CATEGORY | Partner |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| COMMITTERS | |
| COMMITTERS | Carlos Dauden, Enric Tobella, Weblate, OCA-git-bot, oca-ci, Núria Sancho |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/agreement |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:33 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/agreement: - agreement odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - product - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
agreement_appendix_form |
Agreement Appendix Form | agreement.appendix | form | New |
agreement_appendix_form2 |
Agreement Appendix Form2 | agreement.appendix | field | Inherits agreement_appendix_form |
agreement_appendix_search |
Agreement Appendix Search | agreement.appendix | search | New |
agreement_appendix_tree |
Agreement Appendix Tree | agreement.appendix | tree | New |
agreement_appendix_tree2 |
Agreement Appendix Tree2 | agreement.appendix | tree | Inherits agreement_appendix_tree |
agreement_clause_search_view |
Agreement Clause Search | agreement.clause | search | New |
agreement_graph_view |
agreement.graph | agreement | graph | New |
agreement_pivot_view |
agreement.pivot | agreement | pivot | New |
agreement_recital_form |
Agreement Recital Form | agreement.recital | form | New |
agreement_recital_form2 |
Agreement Recital Form2 | agreement.recital | field | Inherits agreement_recital_form |
agreement_recital_search |
Agreement Recital Search | agreement.recital | search | New |
agreement_recital_tree |
Agreement Recital Tree | agreement.recital | tree | New |
agreement_recital_tree2 |
Agreement Recital Tree2 | agreement.recital | tree | Inherits agreement_recital_tree |
create_agreement_from_template_form_view |
Create Agreement From Template | create.agreement.wizard | form | New |
partner_agreement_clause_form_view |
Agreement clause Form | agreement.clause | form | New |
partner_agreement_clause_form_view2 |
Agreement Clause Form2 | agreement.clause | field | Inherits partner_agreement_clause_form_view |
partner_agreement_clause_list_view |
Agreement Clause List | agreement.clause | tree | New |
partner_agreement_clause_list_view2 |
Agreement Clause List2 | agreement.clause | tree | Inherits partner_agreement_clause_list_view |
partner_agreement_form_view |
Agreement Form | agreement | form | New |
partner_agreement_list_view |
Agreement List | agreement | tree | New |
partner_agreement_search_view |
Agreement Search | agreement | search | New |
partner_agreement_section_form_view |
Agreement Section Form | agreement.section | form | New |
partner_agreement_section_form_view2 |
Agreement Section Form2 | agreement.section | field | Inherits partner_agreement_section_form_view |
partner_agreement_section_list_view |
Agreement Section List | agreement.section | tree | New |
partner_agreement_section_list_view2 |
Agreement Section List2 | agreement.section | tree | Inherits partner_agreement_section_list_view |
partner_agreement_section_search_view |
Agreement Section Search | agreement.section | search | New |
partner_agreement_stage_form_view |
Agreement Stage Form | agreement.stage | form | New |
partner_agreement_stage_list_view |
Agreement Stage List | agreement.stage | tree | New |
partner_agreement_stage_search_view |
Agreement Stage Search | agreement.stage | search | New |
partner_agreement_subtype_form_view |
Agreement Sub Type Form | agreement.subtype | form | New |
partner_agreement_subtype_list_view |
Agreement Subtype List | agreement.subtype | tree | New |
partner_agreement_subtype_search_view |
Agreement Sub Type Search | agreement.subtype | search | New |
partner_agreement_type_form_view |
Agreement Type Form | agreement.type | xpath | Inherits agreement.agreement_type_form_view |
partner_agreement_type_list_view |
Agreement Type List | agreement.type | field | Inherits agreement.agreement_type_list_view |
partner_form |
res.partner | xpath | Inherits base.view_partner_form | |
report_agreement_document |
report_agreement_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.agreement | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_project_agreement_kanban |
Agreement Kanban | agreement | kanban | New |
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_subtype_id
Many2one → agreement.subtype
help='Select the sub-type of this agreement. Sub-Types are related to agreement types.'
string='Agreement Sub-type'
tracking=True
args: 'agreement.subtype'
agreement_type_id
Many2one
tracking=True
appendix_ids
One2many → agreement.appendix
copy=True
string='Appendices'
args: 'agreement.appendix', 'agreement_id'
approved_date
Date
tracking=True
approved_user_id
Many2one → res.users
string='Approved By'
tracking=True
args: 'res.users'
assigned_user_id
Many2one → res.users
help='Select the user who manages this agreement.'
string='Assigned To'
tracking=True
args: 'res.users'
change_notice
Integer
help='Number of Days to be notified before changes.'
string='Change Notice (Days)'
tracking=True
child_agreements_ids
One2many → agreement
copy=False
domain=[('active', '=', True)]
string='Child Agreements'
args: 'agreement', 'parent_agreement_id'
clauses_ids
One2many → agreement.clause
string='Clauses'
args: 'agreement.clause', 'agreement_id'
code
Char
copy=False
default=<expr>
help='ID used for internal contract tracking.'
required=True
string='Reference'
tracking=True
color
Integer
company_contact_email
Char
related='company_contact_id.email'
string='Email'
company_contact_id
Many2one → res.partner
copy=True
help='The primary contact in the company.'
string='Company Contact'
args: 'res.partner'
company_contact_phone
Char
related='company_contact_id.phone'
string='Phone'
company_partner_id
Many2one
related='company_id.partner_id'
string="Company's Partner"
company_signed_date
Date
help='Date the contract was signed by Company.'
string='Signed on'
tracking=True
company_signed_user_id
Many2one → res.users
help='The user at our company who authorized/signed the agreement or contract.'
string='Signed By'
tracking=True
args: 'res.users'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
create_date_parent
Datetime
related='parent_agreement_id.create_date'
string='Created on (parent)'
create_uid_parent
Many2one
related='parent_agreement_id.create_uid'
string='Created by (parent)'
default_value
Char
help='Optional value to use if the target field is empty.'
description
Text
help='Description of the agreement'
tracking=True
dynamic_description
Text
compute='_compute_dynamic_description'
help='Compute dynamic description'
dynamic_parties
Html
compute='_compute_dynamic_parties'
help='Compute dynamic parties'
dynamic_special_terms
Text
compute='_compute_dynamic_special_terms'
help='Compute dynamic special terms'
end_date
Date
help='When the agreement ends.'
tracking=True
expiration_notice
Integer
help='Number of Days before expiration to be notified.'
string='Exp. Notice (Days)'
tracking=True
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
line_ids
One2many → agreement.line
copy=False
string='Products/Services'
args: 'agreement.line', 'agreement_id'
name
Char
required=True
string='Title'
notification_address_id
Many2one → res.partner
help='The address to send notifications to, if different from customer address.(Address Type = Other)'
string='Notification Address'
args: 'res.partner'
parent_agreement_id
Many2one → agreement
help='Link this agreement to a parent agreement. For example if this agreement is an amendment to another agreement. This list will only show other agreements related to the same account.'
string='Parent Agreement'
args: 'agreement'
parties
Html
default=_get_default_parties
help='Parties of the agreement'
tracking=True
partner_contact_email
Char
related='partner_contact_id.email'
string='Partner Email'
partner_contact_id
Many2one → res.partner
copy=True
help='The primary partner contact (If Applicable).'
string='Partner Contact'
args: 'res.partner'
partner_contact_phone
Char
related='partner_contact_id.phone'
string='Partner Phone'
partner_id
Many2one → res.partner
copy=True
help='The customer or vendor this agreement is related to.'
required=False
string='Partner'
args: 'res.partner'
partner_signed_date
Date
help='Date the contract was signed by the Partner.'
string='Signed on (Partner)'
tracking=True
partner_signed_user_id
Many2one → res.partner
help='Contact on the account that signed the agreement/contract.'
string='Signed By (Partner)'
tracking=True
args: 'res.partner'
previous_version_agreements_ids
One2many → agreement
context={'active_test': False}
copy=False
string='Previous Versions'
args: 'agreement', 'parent_agreement_id'
readonly
Boolean
related='stage_id.readonly'
readonly
Boolean
related='stage_id.readonly'
recital_ids
One2many → agreement.recital
copy=True
string='Recitals'
args: 'agreement.recital', 'agreement_id'
reviewed_date
Date
tracking=True
reviewed_user_id
Many2one → res.users
string='Reviewed By'
tracking=True
args: 'res.users'
revision
Integer
copy=False
default=0
help='The revision will increase with every save event.'
sections_ids
One2many → agreement.section
copy=True
string='Sections'
args: 'agreement.section', 'agreement_id'
signed_contract
Binary
string='Signed Document'
tracking=True
signed_contract_filename
Char
string='Filename'
special_terms
Text
help='Any terms that you have agreed to and want to track on the agreement/contract.'
tracking=True
stage_id
Many2one → agreement.stage
copy=False
default=<expr>
group_expand='_read_group_stage_ids'
help='Select the current stage of the agreement.'
index=True
string='Stage'
tracking=True
args: 'agreement.stage'
start_date
Date
help='When the agreement starts.'
tracking=True
state
Selection
default='draft'
tracking=True
args: [('draft', 'Draft'), ('active', 'Active'), ('inactive', 'Inactive')]
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
string='Template'
args: 'agreement'
termination_date
Date
help='Date that the contract was terminated.'
tracking=True
termination_requested
Date
help='Date that a request for termination was received.'
string='Termination Requested Date'
tracking=True
to_review_date
Date
compute='_compute_to_review_date'
help='Date used to warn us some days before agreement expires'
readonly=False
store=True
use_parties_content
Boolean
help='Use custom content for parties'
version
Integer
copy=False
default=1
help='The versions are used to keep track of document history and previous versions can be referenced.'
copy(self, default=None)
create(self, vals)
create_new_agreement(self)
create_new_version(self)
fields_view_get(self, view_id=None, view_type=False, toolbar=False, submenu=False)
onchange_copyvalue(self)
write(self, vals)
active
Boolean
default=True
help='If unchecked, it will allow you to hide this appendix without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
sequence
Integer
default=10
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
required=True
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Clause Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
section_id
Many2one → agreement.section
ondelete='cascade'
string='Section'
args: 'agreement.section'
sequence
Integer
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
temp_agreement_id
Many2one → agreement
help='This field help to filter section.'
string='Temp Agreement'
args: 'agreement'
title
Char
help='The title is displayed on the PDF. The name is not.'
onchange_copyvalue(self)
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
name
Char
required=True
string='Description'
product_id
Many2one → product.product
string='Product'
args: 'product.product'
qty
Float
string='Quantity'
uom_id
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide this recital without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
sequence
Integer
default=10
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
clauses_ids
One2many → agreement.clause
copy=True
string='Clauses'
args: 'agreement.clause', 'section_id'
content
Html
string='Section Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
sequence
Integer
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
onchange_copyvalue(self)
active
Boolean
default=True
fold
Boolean
help='This stage is folded in the kanban view by default.'
required=False
string='Is Folded'
name
Char
required=True
string='Stage Name'
readonly
Boolean
default=False
help='The agreement can not edit if set Readonly = True.'
sequence
Integer
default='1'
required=False
stage_type
Selection
required=True
string='Type'
args: [('agreement', 'Agreement')]
No public methods.
active
Boolean
default=True
agreement_type_id
Many2one → agreement.type
string='Agreement Type'
args: 'agreement.type'
name
Char
required=True
string='Sub-Type Name'
No public methods.
agreement_subtypes_ids
One2many → agreement.subtype
string='Sub-Types'
args: 'agreement.subtype', 'agreement_type_id'
review_days
Integer
review_user_id
Many2one → res.users
help='User assigned automatically the activity on review date'
args: 'res.users'
No public methods.
name
Char
required=True
string='Title'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
required=True
string='Template'
args: 'agreement'
create_agreement(self)
module_agreement_helpdesk
Boolean
string='Link your Helpdesk tickets to an agreement.'
module_agreement_maintenance
Boolean
string='Manage maintenance agreements and contracts.'
module_agreement_mrp
Boolean
string='Link your manufacturing orders to an agreement.'
module_agreement_project
Boolean
string='Link your projects and tasks to an agreement.'
module_agreement_repair
Boolean
string='Link your repair orders to an agreement.'
module_agreement_rma
Boolean
string='Link your RMAs to an agreement.'
module_agreement_sale
Boolean
string='Create an agreement when the sale order is confirmed.'
module_agreement_sale_subscription
Boolean
string='Link your subscriptions to an agreement.'
module_agreement_stock
Boolean
string='Link your pickings to an agreement.'
module_fieldservice_agreement
Boolean
string='Link your Field Service orders and equipments to an agreement.'
No public methods.
agreement_ids
One2many → agreement
string='Agreements'
args: 'agreement', 'partner_id'
agreements_count
Integer
compute='_compute_agreements_count'
action_open_agreement(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/contract |
| GIT | |
| GIT | https://github.com/OCA/contract.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/contract/tree/14.0/agreement_legal |
| VERSION | |
| VERSION | 2.4.3 |
| CATEGORY | |
| CATEGORY | Partner |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, oca-ci, newtratip, Patrick Wilson, ps-tubtim, Kevin Luna, Núria Sancho |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/contract |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:40:55 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/contract: - agreement odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - product - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
agreement_appendix_form |
Agreement Appendix Form | agreement.appendix | form | New |
agreement_appendix_form2 |
Agreement Appendix Form2 | agreement.appendix | field | Inherits agreement_appendix_form |
agreement_appendix_search |
Agreement Appendix Search | agreement.appendix | search | New |
agreement_appendix_tree |
Agreement Appendix Tree | agreement.appendix | tree | New |
agreement_appendix_tree2 |
Agreement Appendix Tree2 | agreement.appendix | tree | Inherits agreement_appendix_tree |
agreement_clause_search_view |
Agreement Clause Search | agreement.clause | search | New |
agreement_graph_view |
agreement.graph | agreement | graph | New |
agreement_pivot_view |
agreement.pivot | agreement | pivot | New |
agreement_recital_form |
Agreement Recital Form | agreement.recital | form | New |
agreement_recital_form2 |
Agreement Recital Form2 | agreement.recital | field | Inherits agreement_recital_form |
agreement_recital_search |
Agreement Recital Search | agreement.recital | search | New |
agreement_recital_tree |
Agreement Recital Tree | agreement.recital | tree | New |
agreement_recital_tree2 |
Agreement Recital Tree2 | agreement.recital | tree | Inherits agreement_recital_tree |
assets_backend |
agreement_legal assets | ir.ui.view | qweb | Inherits web.assets_backend |
create_agreement_from_template_form_view |
Create Agreement From Template | create.agreement.wizard | form | New |
partner_agreement_clause_form_view |
Agreement clause Form | agreement.clause | form | New |
partner_agreement_clause_form_view2 |
Agreement Clause Form2 | agreement.clause | field | Inherits partner_agreement_clause_form_view |
partner_agreement_clause_list_view |
Agreement Clause List | agreement.clause | tree | New |
partner_agreement_clause_list_view2 |
Agreement Clause List2 | agreement.clause | tree | Inherits partner_agreement_clause_list_view |
partner_agreement_form_view |
Agreement Form | agreement | form | New |
partner_agreement_list_view |
Agreement List | agreement | tree | New |
partner_agreement_search_view |
Agreement Search | agreement | search | New |
partner_agreement_section_form_view |
Agreement Section Form | agreement.section | form | New |
partner_agreement_section_form_view2 |
Agreement Section Form2 | agreement.section | field | Inherits partner_agreement_section_form_view |
partner_agreement_section_list_view |
Agreement Section List | agreement.section | tree | New |
partner_agreement_section_list_view2 |
Agreement Section List2 | agreement.section | tree | Inherits partner_agreement_section_list_view |
partner_agreement_section_search_view |
Agreement Section Search | agreement.section | search | New |
partner_agreement_stage_form_view |
Agreement Stage Form | agreement.stage | form | New |
partner_agreement_stage_list_view |
Agreement Stage List | agreement.stage | tree | New |
partner_agreement_stage_search_view |
Agreement Stage Search | agreement.stage | search | New |
partner_agreement_subtype_form_view |
Agreement Sub Type Form | agreement.subtype | form | New |
partner_agreement_subtype_list_view |
Agreement Subtype List | agreement.subtype | tree | New |
partner_agreement_subtype_search_view |
Agreement Sub Type Search | agreement.subtype | search | New |
partner_agreement_type_form_view |
Agreement Type Form | agreement.type | xpath | Inherits agreement.agreement_type_form_view |
partner_agreement_type_list_view |
Agreement Type List | agreement.type | field | Inherits agreement.agreement_type_list_view |
partner_form |
res.partner | xpath | Inherits base.view_partner_form | |
report_agreement_document |
report_agreement_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.agreement | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_project_agreement_kanban |
Agreement Kanban | agreement | kanban | New |
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
string='Active'
agreement_subtype_id
Many2one → agreement.subtype
help='Select the sub-type of this agreement. Sub-Types are related to agreement types.'
string='Agreement Sub-type'
tracking=True
args: 'agreement.subtype'
agreement_type_id
Many2one
tracking=True
appendix_ids
One2many → agreement.appendix
copy=True
string='Appendices'
args: 'agreement.appendix', 'agreement_id'
approved_date
Date
string='Approved Date'
tracking=True
approved_user_id
Many2one → res.users
string='Approved By'
tracking=True
args: 'res.users'
assigned_user_id
Many2one → res.users
help='Select the user who manages this agreement.'
string='Assigned To'
tracking=True
args: 'res.users'
change_notice
Integer
help='Number of Days to be notified before changes.'
string='Change Notice (Days)'
tracking=True
child_agreements_ids
One2many → agreement
copy=False
domain=[('active', '=', True)]
string='Child Agreements'
args: 'agreement', 'parent_agreement_id'
clauses_ids
One2many → agreement.clause
string='Clauses'
args: 'agreement.clause', 'agreement_id'
code
Char
copy=False
default=<expr>
help='ID used for internal contract tracking.'
required=True
string='Reference'
tracking=True
color
Integer
string='Color'
company_contact_email
Char
related='company_contact_id.email'
string='Email'
company_contact_id
Many2one → res.partner
copy=True
help='The primary contact in the company.'
string='Company Contact'
args: 'res.partner'
company_contact_phone
Char
related='company_contact_id.phone'
string='Phone'
company_partner_id
Many2one
related='company_id.partner_id'
string="Company's Partner"
company_signed_date
Date
help='Date the contract was signed by Company.'
string='Signed on'
tracking=True
company_signed_user_id
Many2one → res.users
help='The user at our company who authorized/signed the agreement or contract.'
string='Signed By'
tracking=True
args: 'res.users'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
create_date_parent
Datetime
related='parent_agreement_id.create_date'
string='Created on (parent)'
create_uid_parent
Many2one
related='parent_agreement_id.create_uid'
string='Created by (parent)'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
description
Text
help='Description of the agreement'
string='Description'
tracking=True
dynamic_description
Text
compute='_compute_dynamic_description'
help='Compute dynamic description'
string='Dynamic Description'
dynamic_parties
Html
compute='_compute_dynamic_parties'
help='Compute dynamic parties'
string='Dynamic Parties'
dynamic_special_terms
Text
compute='_compute_dynamic_special_terms'
help='Compute dynamic special terms'
string='Dynamic Special Terms'
end_date
Date
help='When the agreement ends.'
string='End Date'
tracking=True
expiration_notice
Integer
help='Number of Days before expiration to be notified.'
string='Exp. Notice (Days)'
tracking=True
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
line_ids
One2many → agreement.line
copy=False
string='Products/Services'
args: 'agreement.line', 'agreement_id'
name
Char
required=True
string='Title'
notification_address_id
Many2one → res.partner
help='The address to send notificaitons to, if different from customer address.(Address Type = Other)'
string='Notification Address'
args: 'res.partner'
parent_agreement_id
Many2one → agreement
help='Link this agreement to a parent agreement. For example if this agreement is an amendment to another agreement. This list will only show other agreements related to the same account.'
string='Parent Agreement'
args: 'agreement'
parties
Html
default=_get_default_parties
help='Parties of the agreement'
string='Parties'
tracking=True
partner_contact_email
Char
related='partner_contact_id.email'
string='Partner Email'
partner_contact_id
Many2one → res.partner
copy=True
help='The primary partner contact (If Applicable).'
string='Partner Contact'
args: 'res.partner'
partner_contact_phone
Char
related='partner_contact_id.phone'
string='Partner Phone'
partner_id
Many2one → res.partner
copy=True
help='The customer or vendor this agreement is related to.'
required=False
string='Partner'
args: 'res.partner'
partner_signed_date
Date
help='Date the contract was signed by the Partner.'
string='Signed on (Partner)'
tracking=True
partner_signed_user_id
Many2one → res.partner
help='Contact on the account that signed the agreement/contract.'
string='Signed By (Partner)'
tracking=True
args: 'res.partner'
previous_version_agreements_ids
One2many → agreement
context={'active_test': False}
copy=False
string='Previous Versions'
args: 'agreement', 'parent_agreement_id'
readonly
Boolean
related='stage_id.readonly'
readonly
Boolean
related='stage_id.readonly'
recital_ids
One2many → agreement.recital
copy=True
string='Recitals'
args: 'agreement.recital', 'agreement_id'
reviewed_date
Date
string='Reviewed Date'
tracking=True
reviewed_user_id
Many2one → res.users
string='Reviewed By'
tracking=True
args: 'res.users'
revision
Integer
copy=False
default=0
help='The revision will increase with every save event.'
string='Revision'
sections_ids
One2many → agreement.section
copy=True
string='Sections'
args: 'agreement.section', 'agreement_id'
signed_contract
Binary
string='Signed Document'
tracking=True
signed_contract_filename
Char
string='Filename'
special_terms
Text
help='Any terms that you have agreed to and want to track on the agreement/contract.'
string='Special Terms'
tracking=True
stage_id
Many2one → agreement.stage
copy=False
default=<expr>
group_expand='_read_group_stage_ids'
help='Select the current stage of the agreement.'
index=True
string='Stage'
tracking=True
args: 'agreement.stage'
start_date
Date
help='When the agreement starts.'
string='Start Date'
tracking=True
state
Selection
default='draft'
tracking=True
args: [('draft', 'Draft'), ('active', 'Active'), ('inactive', 'Inactive')]
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
string='Template'
args: 'agreement'
termination_date
Date
help='Date that the contract was terminated.'
string='Termination Date'
tracking=True
termination_requested
Date
help='Date that a request for termination was received.'
string='Termination Requested Date'
tracking=True
to_review_date
Date
compute='_compute_to_review_date'
help='Date used to warn us some days before agreement expires'
readonly=False
store=True
use_parties_content
Boolean
help='Use custom content for parties'
string='Use parties content'
version
Integer
copy=False
default=1
help='The versions are used to keep track of document history and previous versions can be referenced.'
string='Version'
copy(self, default=None)
create(self, vals)
create_new_agreement(self)
create_new_version(self)
fields_view_get(self, view_id=None, view_type=False, toolbar=False, submenu=False)
onchange_copyvalue(self)
write(self, vals)
active
Boolean
default=True
help='If unchecked, it will allow you to hide this appendix without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
string='Name'
sequence
Integer
default=10
string='Sequence'
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
required=True
string='Title'
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Clause Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
string='Name'
section_id
Many2one → agreement.section
ondelete='cascade'
string='Section'
args: 'agreement.section'
sequence
Integer
string='Sequence'
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
temp_agreement_id
Many2one → agreement
help='This field help to filter section.'
string='Temp Agreement'
args: 'agreement'
title
Char
help='The title is displayed on the PDF. The name is not.'
string='Title'
onchange_copyvalue(self)
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
name
Char
required=True
string='Description'
product_id
Many2one → product.product
string='Product'
args: 'product.product'
qty
Float
string='Quantity'
uom_id
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide this recital without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
string='Name'
sequence
Integer
default=10
string='Sequence'
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
string='Title'
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
clauses_ids
One2many → agreement.clause
copy=True
string='Clauses'
args: 'agreement.clause', 'section_id'
content
Html
string='Section Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
string='Name'
sequence
Integer
string='Sequence'
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
string='Title'
onchange_copyvalue(self)
active
Boolean
default=True
string='Active'
fold
Boolean
help='This stage is folded in the kanban view by default.'
required=False
string='Is Folded'
name
Char
required=True
string='Stage Name'
readonly
Boolean
default=False
help='The agreement can not edit if set Readonly = True.'
string='Readonly'
sequence
Integer
default='1'
required=False
string='Sequence'
stage_type
Selection
required=True
string='Type'
args: [('agreement', 'Agreement')]
No public methods.
active
Boolean
default=True
string='Active'
agreement_type_id
Many2one → agreement.type
string='Agreement Type'
args: 'agreement.type'
name
Char
required=True
string='Sub-Type Name'
No public methods.
agreement_subtypes_ids
One2many → agreement.subtype
string='Sub-Types'
args: 'agreement.subtype', 'agreement_type_id'
review_days
Integer
review_user_id
Many2one → res.users
help='User assigned automatically the activity on review date'
args: 'res.users'
No public methods.
name
Char
required=True
string='Title'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
required=True
string='Template'
args: 'agreement'
create_agreement(self)
module_agreement_helpdesk
Boolean
string='Link your Helpdesk tickets to an agreement.'
module_agreement_maintenance
Boolean
string='Manage maintenance agreements and contracts.'
module_agreement_mrp
Boolean
string='Link your manufacturing orders to an agreement.'
module_agreement_project
Boolean
string='Link your projects and tasks to an agreement.'
module_agreement_repair
Boolean
string='Link your repair orders to an agreement.'
module_agreement_rma
Boolean
string='Link your RMAs to an agreement.'
module_agreement_sale
Boolean
string='Create an agreement when the sale order is confirmed.'
module_agreement_sale_subscription
Boolean
string='Link your subscriptions to an agreement.'
module_agreement_stock
Boolean
string='Link your pickings to an agreement.'
module_fieldservice_agreement
Boolean
string='Link your Field Service orders and equipments to an agreement.'
No public methods.
agreement_ids
One2many → agreement
string='Agreements'
args: 'agreement', 'partner_id'
agreements_count
Integer
compute='_compute_agreements_count'
action_open_agreement(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/contract |
| GIT | |
| GIT | https://github.com/OCA/contract.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/contract/tree/13.0/agreement_legal |
| VERSION | |
| VERSION | 2.5.1 |
| CATEGORY | |
| CATEGORY | Partner |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| COMMITTERS | |
| COMMITTERS | Enric Tobella, OCA Transbot, Víctor Martínez, João Marques, oca-travis, OCA-git-bot, Olga Marco |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/contract |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:11 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/contract: - agreement odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - product - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
agreement_appendix_form |
Agreement Appendix Form | agreement.appendix | form | New |
agreement_appendix_form2 |
Agreement Appendix Form2 | agreement.appendix | field | Inherits agreement_appendix_form |
agreement_appendix_search |
Agreement Appendix Search | agreement.appendix | search | New |
agreement_appendix_tree |
Agreement Appendix Tree | agreement.appendix | tree | New |
agreement_appendix_tree2 |
Agreement Appendix Tree2 | agreement.appendix | tree | Inherits agreement_appendix_tree |
agreement_clause_search_view |
Agreement Clause Search | agreement.clause | search | New |
agreement_graph_view |
agreement.graph | agreement | graph | New |
agreement_pivot_view |
agreement.pivot | agreement | pivot | New |
agreement_recital_form |
Agreement Recital Form | agreement.recital | form | New |
agreement_recital_form2 |
Agreement Recital Form2 | agreement.recital | field | Inherits agreement_recital_form |
agreement_recital_search |
Agreement Recital Search | agreement.recital | search | New |
agreement_recital_tree |
Agreement Recital Tree | agreement.recital | tree | New |
agreement_recital_tree2 |
Agreement Recital Tree2 | agreement.recital | tree | Inherits agreement_recital_tree |
agreement_view_activity |
agreement.activity | agreement | activity | New |
assets_backend |
agreement_legal assets | ir.ui.view | qweb | Inherits web.assets_backend |
create_agreement_from_template_form_view |
Create Agreement From Template | create.agreement.wizard | form | New |
partner_agreement_clause_form_view |
Agreement clause Form | agreement.clause | form | New |
partner_agreement_clause_form_view2 |
Agreement Clause Form2 | agreement.clause | field | Inherits partner_agreement_clause_form_view |
partner_agreement_clause_list_view |
Agreement Clause List | agreement.clause | tree | New |
partner_agreement_clause_list_view2 |
Agreement Clause List2 | agreement.clause | tree | Inherits partner_agreement_clause_list_view |
partner_agreement_form_view |
Agreement Form | agreement | form | New |
partner_agreement_list_view |
Agreement List | agreement | tree | New |
partner_agreement_search_view |
Agreement Search | agreement | search | New |
partner_agreement_section_form_view |
Agreement Section Form | agreement.section | form | New |
partner_agreement_section_form_view2 |
Agreement Section Form2 | agreement.section | field | Inherits partner_agreement_section_form_view |
partner_agreement_section_list_view |
Agreement Section List | agreement.section | tree | New |
partner_agreement_section_list_view2 |
Agreement Section List2 | agreement.section | tree | Inherits partner_agreement_section_list_view |
partner_agreement_section_search_view |
Agreement Section Search | agreement.section | search | New |
partner_agreement_stage_form_view |
Agreement Stage Form | agreement.stage | form | New |
partner_agreement_stage_list_view |
Agreement Stage List | agreement.stage | tree | New |
partner_agreement_stage_search_view |
Agreement Stage Search | agreement.stage | search | New |
partner_agreement_subtype_form_view |
Agreement Sub Type Form | agreement.subtype | form | New |
partner_agreement_subtype_list_view |
Agreement Subtype List | agreement.subtype | tree | New |
partner_agreement_subtype_search_view |
Agreement Sub Type Search | agreement.subtype | search | New |
partner_agreement_type_form_view |
Agreement Type Form | agreement.type | xpath | Inherits agreement.agreement_type_form_view |
partner_agreement_type_list_view |
Agreement Type List | agreement.type | field | Inherits agreement.agreement_type_list_view |
partner_form |
res.partner | xpath | Inherits base.view_partner_form | |
report_agreement_document |
report_agreement_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.agreement | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_project_agreement_kanban |
Agreement Kanban | agreement | kanban | New |
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
string='Active'
agreement_subtype_id
Many2one → agreement.subtype
help='Select the sub-type of this agreement. Sub-Types are related to agreement types.'
string='Agreement Sub-type'
tracking=True
args: 'agreement.subtype'
agreement_type_id
Many2one
tracking=True
appendix_ids
One2many → agreement.appendix
copy=True
string='Appendices'
args: 'agreement.appendix', 'agreement_id'
approved_date
Date
string='Approved Date'
tracking=True
approved_user_id
Many2one → res.users
string='Approved By'
tracking=True
args: 'res.users'
assigned_user_id
Many2one → res.users
help='Select the user who manages this agreement.'
string='Assigned To'
tracking=True
args: 'res.users'
change_notice
Integer
help='Number of Days to be notified before changes.'
string='Change Notice (Days)'
tracking=True
child_agreements_ids
One2many → agreement
copy=False
domain=[('active', '=', True)]
string='Child Agreements'
args: 'agreement', 'parent_agreement_id'
clauses_ids
One2many → agreement.clause
string='Clauses'
args: 'agreement.clause', 'agreement_id'
code
Char
copy=False
default=<expr>
help='ID used for internal contract tracking.'
required=True
string='Reference'
tracking=True
color
Integer
string='Color'
company_contact_email
Char
related='company_contact_id.email'
string='Email'
company_contact_id
Many2one → res.partner
copy=True
help='The primary contact in the company.'
string='Company Contact'
args: 'res.partner'
company_contact_phone
Char
related='company_contact_id.phone'
string='Phone'
company_partner_id
Many2one
related='company_id.partner_id'
string="Company's Partner"
company_signed_date
Date
help='Date the contract was signed by Company.'
string='Signed on'
tracking=True
company_signed_user_id
Many2one → res.users
help='The user at our company who authorized/signed the agreement or contract.'
string='Signed By'
tracking=True
args: 'res.users'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
create_date_parent
Datetime
related='parent_agreement_id.create_date'
string='Created on (parent)'
create_uid_parent
Many2one
related='parent_agreement_id.create_uid'
string='Created by (parent)'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
description
Text
help='Description of the agreement'
string='Description'
tracking=True
dynamic_description
Text
compute='_compute_dynamic_description'
help='Compute dynamic description'
string='Dynamic Description'
dynamic_parties
Html
compute='_compute_dynamic_parties'
help='Compute dynamic parties'
string='Dynamic Parties'
dynamic_special_terms
Text
compute='_compute_dynamic_special_terms'
help='Compute dynamic special terms'
string='Dynamic Special Terms'
end_date
Date
help='When the agreement ends.'
string='End Date'
tracking=True
expiration_notice
Integer
help='Number of Days before expiration to be notified.'
string='Exp. Notice (Days)'
tracking=True
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
line_ids
One2many → agreement.line
copy=False
string='Products/Services'
args: 'agreement.line', 'agreement_id'
name
Char
required=True
string='Title'
no_end_date
Boolean
related='agreement_type_id.no_end_date'
notification_address_id
Many2one → res.partner
help='The address to send notificaitons to, if different from customer address.(Address Type = Other)'
string='Notification Address'
args: 'res.partner'
parent_agreement_id
Many2one → agreement
help='Link this agreement to a parent agreement. For example if this agreement is an amendment to another agreement. This list will only show other agreements related to the same account.'
string='Parent Agreement'
args: 'agreement'
parties
Html
default=_get_default_parties
help='Parties of the agreement'
string='Parties'
tracking=True
partner_contact_email
Char
related='partner_contact_id.email'
string='Partner Email'
partner_contact_id
Many2one → res.partner
copy=True
help='The primary partner contact (If Applicable).'
string='Partner Contact'
args: 'res.partner'
partner_contact_phone
Char
related='partner_contact_id.phone'
string='Partner Phone'
partner_id
Many2one → res.partner
copy=True
help='The customer or vendor this agreement is related to.'
required=False
string='Partner'
args: 'res.partner'
partner_signed_date
Date
help='Date the contract was signed by the Partner.'
string='Signed on (Partner)'
tracking=True
partner_signed_user_id
Many2one → res.partner
help='Contact on the account that signed the agreement/contract.'
string='Signed By (Partner)'
tracking=True
args: 'res.partner'
previous_version_agreements_ids
One2many → agreement
context={'active_test': False}
copy=False
string='Previous Versions'
args: 'agreement', 'parent_agreement_id'
readonly
Boolean
related='stage_id.readonly'
recital_ids
One2many → agreement.recital
copy=True
string='Recitals'
args: 'agreement.recital', 'agreement_id'
reviewed_date
Date
string='Reviewed Date'
tracking=True
reviewed_user_id
Many2one → res.users
string='Reviewed By'
tracking=True
args: 'res.users'
revision
Integer
copy=False
default=0
help='The revision will increase with every save event.'
string='Revision'
sections_ids
One2many → agreement.section
copy=True
string='Sections'
args: 'agreement.section', 'agreement_id'
signed_contract
Binary
string='Signed Document'
tracking=True
signed_contract_filename
Char
string='Filename'
special_terms
Text
help='Any terms that you have agreed to and want to track on the agreement/contract.'
string='Special Terms'
tracking=True
stage_id
Many2one → agreement.stage
copy=False
default=<expr>
group_expand='_read_group_stage_ids'
help='Select the current stage of the agreement.'
index=True
string='Stage'
tracking=True
args: 'agreement.stage'
start_date
Date
help='When the agreement starts.'
string='Start Date'
tracking=True
state
Selection
default='draft'
tracking=True
args: [('draft', 'Draft'), ('active', 'Active'), ('inactive', 'Inactive')]
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
string='Template'
args: 'agreement'
termination_date
Date
help='Date that the contract was terminated.'
string='Termination Date'
tracking=True
termination_requested
Date
help='Date that a request for termination was received.'
string='Termination Requested Date'
tracking=True
to_review_date
Date
compute='_compute_to_review_date'
help='Date used to warn us some days before agreement expires'
readonly=False
store=True
use_parties_content
Boolean
help='Use custom content for parties'
string='Use parties content'
version
Integer
copy=False
default=1
help='The versions are used to keep track of document history and previous versions can be referenced.'
string='Version'
copy(self, default=None)
create(self, vals)
create_new_agreement(self)
create_new_version(self)
fields_view_get(self, view_id=None, view_type=False, toolbar=False, submenu=False)
onchange_copyvalue(self)
write(self, vals)
active
Boolean
default=True
help='If unchecked, it will allow you to hide this appendix without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
string='Name'
sequence
Integer
default=10
string='Sequence'
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
required=True
string='Title'
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Clause Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
string='Name'
section_id
Many2one → agreement.section
ondelete='cascade'
string='Section'
args: 'agreement.section'
sequence
Integer
string='Sequence'
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
temp_agreement_id
Many2one → agreement
help='This field help to filter section.'
string='Temp Agreement'
args: 'agreement'
title
Char
help='The title is displayed on the PDF. The name is not.'
string='Title'
onchange_copyvalue(self)
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
name
Char
required=True
string='Description'
product_id
Many2one → product.product
string='Product'
args: 'product.product'
qty
Float
string='Quantity'
uom_id
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide this recital without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
string='Name'
sequence
Integer
default=10
string='Sequence'
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
string='Title'
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
clauses_ids
One2many → agreement.clause
copy=True
string='Clauses'
args: 'agreement.clause', 'section_id'
content
Html
string='Section Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_id
Many2one → ir.model.fields
help='Select target field from the related document model. If it is a\n relationship field you will be able to select a target field at the\n destination of the relationship.'
string='Field'
args: 'ir.model.fields'
name
Char
required=True
string='Name'
sequence
Integer
string='Sequence'
sub_model_object_field_id
Many2one → ir.model.fields
help='When a relationship field is selected as first field, this\n field lets you select the target field within the destination document\n model (sub-model).'
string='Sub-field'
args: 'ir.model.fields'
sub_object_id
Many2one → ir.model
help='When a relationship field is selected as first field, this\n field shows the document model the relationship goes to.'
string='Sub-model'
args: 'ir.model'
title
Char
help='The title is displayed on the PDF. The name is not.'
string='Title'
onchange_copyvalue(self)
active
Boolean
default=True
string='Active'
fold
Boolean
help='This stage is folded in the kanban view by default.'
required=False
string='Is Folded'
name
Char
required=True
string='Stage Name'
readonly
Boolean
default=False
help='The agreement can not edit if set Readonly = True.'
string='Readonly'
sequence
Integer
default='1'
required=False
string='Sequence'
stage_type
Selection
required=True
string='Type'
args: [('agreement', 'Agreement')]
No public methods.
active
Boolean
default=True
string='Active'
agreement_type_id
Many2one → agreement.type
string='Agreement Type'
args: 'agreement.type'
name
Char
required=True
string='Sub-Type Name'
No public methods.
agreement_subtypes_ids
One2many → agreement.subtype
string='Sub-Types'
args: 'agreement.subtype', 'agreement_type_id'
no_end_date
Boolean
default=False
review_days
Integer
review_user_id
Many2one → res.users
help='User assigned automatically the activity on review date'
args: 'res.users'
No public methods.
name
Char
required=True
string='Title'
template_id
Many2one → agreement
domain=[('is_template', '=', True)]
required=True
string='Template'
args: 'agreement'
create_agreement(self)
module_agreement_helpdesk
Boolean
string='Link your Helpdesk tickets to an agreement.'
module_agreement_maintenance
Boolean
string='Manage maintenance agreements and contracts.'
module_agreement_mrp
Boolean
string='Link your manufacturing orders to an agreement.'
module_agreement_project
Boolean
string='Link your projects and tasks to an agreement.'
module_agreement_repair
Boolean
string='Link your repair orders to an agreement.'
module_agreement_rma
Boolean
string='Link your RMAs to an agreement.'
module_agreement_sale
Boolean
string='Create an agreement when the sale order is confirmed.'
module_agreement_sale_subscription
Boolean
string='Link your subscriptions to an agreement.'
module_agreement_stock
Boolean
string='Link your pickings to an agreement.'
module_fieldservice_agreement
Boolean
string='Link your Field Service orders and equipments to an agreement.'
No public methods.
agreement_ids
One2many → agreement
string='Agreements'
args: 'agreement', 'partner_id'
agreements_count
Integer
compute='_compute_agreements_count'
action_open_agreement(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/contract |
| GIT | |
| GIT | https://github.com/OCA/contract.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/contract/tree/12.0/agreement_legal |
| VERSION | |
| VERSION | 2.1.0 |
| CATEGORY | |
| CATEGORY | Partner |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Open Source Integrators, Pavlov Media, Yves Goldberg (Ygol Internetwork) |
| COMMITTERS | |
| COMMITTERS | Alexandre Fayolle, Maxime Chambreuil, GitHub, Jairo Llopis, mreficent, Alexandre Díaz, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Murtuza Saleh, newtratip, Marcel Savegnago, Yves Goldberg |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/contract |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:15 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/contract: - agreement odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - product - decimal_precision - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
agreement_appendix_form |
Agreement Appendix Form | agreement.appendix | form | New |
agreement_appendix_search |
Agreement Appendix Search | agreement.appendix | search | New |
agreement_appendix_tree |
Agreement Appendix Tree | agreement.appendix | tree | New |
agreement_clause_search_view |
Agreement Clause Search | agreement.clause | search | New |
agreement_graph_view |
agreement.graph | agreement | graph | New |
agreement_pivot_view |
agreement.pivot | agreement | pivot | New |
agreement_recital_form |
Agreement Recital Form | agreement.recital | form | New |
agreement_recital_search |
Agreement Recital Search | agreement.recital | search | New |
agreement_recital_tree |
Agreement Recital Tree | agreement.recital | tree | New |
assets_backend |
agreement_legal assets | ir.ui.view | qweb | Inherits web.assets_backend |
partner_agreement_clause_form_view |
Agreement clause Form | agreement.clause | form | New |
partner_agreement_clause_list_view |
Agreement Clause List | agreement.clause | tree | New |
partner_agreement_form_view |
Agreement Form | agreement | form | New |
partner_agreement_increasetype_form_view |
Agreement Increase Type Form | agreement.increasetype | form | New |
partner_agreement_increasetype_list_view |
Agreement Increase Type List | agreement.increasetype | tree | New |
partner_agreement_list_view |
Agreement List | agreement | tree | New |
partner_agreement_renewaltype_form_view |
Agreement Renewal Type Form | agreement.renewaltype | form | New |
partner_agreement_renewaltype_list_view |
Agreement Renewal Type List | agreement.renewaltype | tree | New |
partner_agreement_search_view |
Agreement Search | agreement | search | New |
partner_agreement_section_form_view |
Agreement Section Form | agreement.section | form | New |
partner_agreement_section_list_view |
Agreement Section List | agreement.section | tree | New |
partner_agreement_section_search_view |
Agreement Section Search | agreement.section | search | New |
partner_agreement_stage_form_view |
Agreement Stage Form | agreement.stage | form | New |
partner_agreement_stage_list_view |
Agreement Stage List | agreement.stage | tree | New |
partner_agreement_subtype_form_view |
Agreement Sub Type Form | agreement.subtype | form | New |
partner_agreement_subtype_list_view |
Agreement Subtype List | agreement.subtype | tree | New |
partner_agreement_type_form_view |
Agreement Type Form | agreement.type | xpath | Inherits agreement.agreement_type_form_view |
partner_agreement_type_list_view |
Agreement Type List | agreement.type | field | Inherits agreement.agreement_type_list_view |
partner_form |
res.partner | xpath | Inherits base.view_partner_form | |
report_agreement_document |
report_agreement_document | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.agreement | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_project_agreement_kanban |
Agreement Kanban | agreement | kanban | New |
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
string='Active'
agreement_subtype_id
Many2one → agreement.subtype
help='Select the sub-type of this agreement. Sub-Types are related to agreement types.'
string='Agreement Sub-type'
track_visibility='onchange'
args: 'agreement.subtype'
agreement_type_id
Many2one
track_visibility='onchange'
appendix_ids
One2many → agreement.appendix
copy=True
string='Appendices'
args: 'agreement.appendix', 'agreement_id'
approved_date
Date
string='Approved Date'
track_visibility='onchange'
approved_user_id
Many2one → res.users
string='Approved By'
track_visibility='onchange'
args: 'res.users'
assigned_user_id
Many2one → res.users
help='Select the user who manages this agreement.'
string='Assigned To'
track_visibility='onchange'
args: 'res.users'
change_notice
Integer
help='Number of Days to be notified before changes.'
string='Change Notice (Days)'
track_visibility='onchange'
child_agreements_ids
One2many → agreement
copy=False
domain=[('active', '=', True)]
string='Child Agreements'
args: 'agreement', 'parent_agreement_id'
clauses_ids
One2many → agreement.clause
string='Clauses'
args: 'agreement.clause', 'agreement_id'
code
Char
copy=False
default=<expr>
help='ID used for internal contract tracking.'
required=True
string='Reference'
track_visibility='onchange'
color
Integer
string='Color'
company_contact_email
Char
related='company_contact_id.email'
string='Email'
company_contact_id
Many2one → res.partner
copy=True
help='The primary contact in the company.'
string='Company Contact'
args: 'res.partner'
company_contact_phone
Char
related='company_contact_id.phone'
string='Phone'
company_partner_id
Many2one
related='company_id.partner_id'
string="Company's Partner"
company_signed_date
Date
help='Date the contract was signed by Company.'
string='Signed on'
track_visibility='onchange'
company_signed_user_id
Many2one → res.users
help='The user at our company who authorized/signed the agreement or contract.'
string='Signed By'
track_visibility='onchange'
args: 'res.users'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
currency_id
Many2one → res.currency
string='Currency'
args: 'res.currency'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
description
Text
help='Description of the agreement'
string='Description'
track_visibility='onchange'
dynamic_description
Text
compute='_compute_dynamic_description'
help='Compute dynamic description'
string='Dynamic Description'
dynamic_parties
Html
compute='_compute_dynamic_parties'
help='Compute dynamic parties'
string='Dynamic Parties'
dynamic_special_terms
Text
compute='_compute_dynamic_special_terms'
help='Compute dynamic special terms'
string='Dynamic Special Terms'
end_date
Date
help='When the agreement ends.'
string='End Date'
track_visibility='onchange'
expiration_notice
Integer
help='Number of Days before expiration to be notified.'
string='Exp. Notice (Days)'
track_visibility='onchange'
field_domain
Char
default='[["active", "=", True]]'
string='Field Expression'
increase_type_id
Many2one → agreement.increasetype
help='The amount that certain rates may increase.'
string='Increase Type'
track_visibility='onchange'
args: 'agreement.increasetype'
line_ids
One2many → agreement.line
copy=False
string='Products/Services'
args: 'agreement.line', 'agreement_id'
name
Char
required=True
string='Title'
notification_address_id
Many2one → res.partner
help='The address to send notificaitons to, if different from customer address.(Address Type = Other)'
string='Notification Address'
args: 'res.partner'
parent_agreement_id
Many2one → agreement
help='Link this agreement to a parent agreement. For example if this agreement is an amendment to another agreement. This list will only show other agreements related to the same account.'
string='Parent Agreement'
args: 'agreement'
parties
Html
default=_get_default_parties
help='Parties of the agreement'
string='Parties'
track_visibility='onchange'
partner_contact_email
Char
related='partner_contact_id.email'
string='Partner Email'
partner_contact_id
Many2one → res.partner
copy=True
help='The primary partner contact (If Applicable).'
string='Partner Contact'
args: 'res.partner'
partner_contact_phone
Char
related='partner_contact_id.phone'
string='Partner Phone'
partner_id
Many2one → res.partner
copy=True
help='The customer or vendor this agreement is related to.'
required=False
string='Partner'
args: 'res.partner'
partner_signed_date
Date
help='Date the contract was signed by the Partner.'
string='Signed on (Partner)'
track_visibility='onchange'
partner_signed_user_id
Many2one → res.partner
help='Contact on the account that signed the agreement/contract.'
string='Signed By (Partner)'
track_visibility='onchange'
args: 'res.partner'
previous_version_agreements_ids
One2many → agreement
copy=False
domain=[('active', '=', False)]
string='Previous Versions'
args: 'agreement', 'parent_agreement_id'
product_ids
Many2many → product.template
string='Products & Services'
args: 'product.template'
recital_ids
One2many → agreement.recital
copy=True
string='Recitals'
args: 'agreement.recital', 'agreement_id'
renewal_type_id
Many2one → agreement.renewaltype
help='Describes what happens after the contract expires.'
string='Renewal Type'
track_visibility='onchange'
args: 'agreement.renewaltype'
reviewed_date
Date
string='Reviewed Date'
track_visibility='onchange'
reviewed_user_id
Many2one → res.users
string='Reviewed By'
track_visibility='onchange'
args: 'res.users'
revision
Integer
copy=False
default=0
help='The revision will increase with every save event.'
string='Revision'
sections_ids
One2many → agreement.section
copy=True
string='Sections'
args: 'agreement.section', 'agreement_id'
signed_contract
Binary
string='Signed Document'
track_visibility='always'
signed_contract_filename
Char
string='Filename'
special_terms
Text
help='Any terms that you have agreed to and want to track on the agreement/contract.'
string='Special Terms'
track_visibility='onchange'
stage_id
Many2one → agreement.stage
group_expand='_read_group_stage_ids'
help='Select the current stage of the agreement.'
index=True
string='Stage'
track_visibility='onchange'
args: 'agreement.stage'
start_date
Date
help='When the agreement starts.'
string='Start Date'
track_visibility='onchange'
state
Selection
default='draft'
track_visibility='always'
args: [('draft', 'Draft'), ('active', 'Active'), ('inactive', 'Inactive')]
term
Integer
help='Number of months this agreement/contract is in effect with the partner.'
string='Term (Months)'
track_visibility='onchange'
termination_date
Date
help='Date that the contract was terminated.'
string='Termination Date'
track_visibility='onchange'
termination_requested
Date
help='Date that a request for termination was received.'
string='Termination Requested Date'
track_visibility='onchange'
use_parties_content
Boolean
help='Use custom content for parties'
string='Use parties content'
version
Integer
copy=False
default=1
help='The versions are used to keep track of document history and previous versions can be referenced.'
string='Version'
create(self, vals)
create_new_agreement(self)
create_new_version(self, vals)
onchange_copyvalue(self)
write(self, vals)
active
Boolean
default=True
help='If unchecked, it will allow you to hide this appendix without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_domain
Char
default='[["active", "=", True]]'
string='Field Expression'
name
Char
required=True
string='Name'
sequence
Integer
default=10
string='Sequence'
title
Char
help='The title is displayed on the PDF.The name is not.'
required=True
string='Title'
onchange_copyvalue(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Clause Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_domain
Char
default='[["active", "=", True]]'
string='Field Expression'
name
Char
required=True
string='Name'
section_id
Many2one → agreement.section
ondelete='cascade'
string='Section'
args: 'agreement.section'
sequence
Integer
string='Sequence'
title
Char
help='The title is displayed on the PDF.The name is not.'
string='Title'
onchange_copyvalue(self)
description
Text
help='Description of the renewal type.'
required=True
string='Description'
increase_percent
Integer
help='Percentage that the amount will increase.'
string='Increase Percentage'
name
Char
help='Increase types describe any increases that may happen during the contract.'
required=True
string='Title'
No public methods.
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
name
Char
required=True
string='Description'
product_id
Many2one → product.product
string='Product'
args: 'product.product'
qty
Float
string='Quantity'
uom_id
Many2one → uom.uom
required=True
string='Unit of Measure'
args: 'uom.uom'
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide this recital without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
content
Html
string='Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_domain
Char
default='[["active", "=", True]]'
string='Field Expression'
name
Char
required=True
string='Name'
sequence
Integer
default=10
string='Sequence'
title
Char
help='The title is displayed on the PDF.The name is not.'
string='Title'
onchange_copyvalue(self)
description
Text
help='Description of the renewal type.'
required=True
string='Description'
name
Char
help='Renewal types describe what happens after the agreement/contract expires.'
required=True
string='Title'
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide the agreement without removing it.'
string='Active'
agreement_id
Many2one → agreement
ondelete='cascade'
string='Agreement'
args: 'agreement'
clauses_ids
One2many → agreement.clause
copy=True
string='Clauses'
args: 'agreement.clause', 'section_id'
content
Html
string='Section Content'
copyvalue
Char
help='Final placeholder expression, to be copy-pasted in the desired\n template field.'
string='Placeholder Expression'
default_value
Char
help='Optional value to use if the target field is empty.'
string='Default Value'
dynamic_content
Html
compute='_compute_dynamic_content'
help='compute dynamic Content'
string='Dynamic Content'
field_domain
Char
default='[["active", "=", True]]'
string='Field Expression'
name
Char
required=True
string='Name'
sequence
Integer
string='Sequence'
title
Char
help='The title is displayed on the PDF. The name is not.'
string='Title'
onchange_copyvalue(self)
active
Boolean
default=True
string='Active'
description
Text
required=False
string='Description'
fold
Boolean
help='This stage is folded in the kanban view by default.'
required=False
string='Is Folded'
name
Char
required=True
string='Stage Name'
sequence
Integer
default='1'
required=False
string='Sequence'
stage_type
Selection
required=True
string='Type'
args: [('agreement', 'Agreement')]
No public methods.
agreement_type_id
Many2one → agreement.type
string='Agreement Type'
args: 'agreement.type'
name
Char
required=True
string='Name'
No public methods.
agreement_subtypes_ids
One2many → agreement.subtype
string='Subtypes'
args: 'agreement.subtype', 'agreement_type_id'
No public methods.
name
Char
required=True
string='Title'
No public methods.
agreements_ids
Many2many → agreement
string='Agreements'
args: 'agreement'
No public methods.
module_agreement_helpdesk
Boolean
string='Link your Helpdesk tickets to an agreement.'
module_agreement_maintenance
Boolean
string='Manage maintenance agreements and contracts.'
module_agreement_mrp
Boolean
string='Link your manufacturing orders to an agreement.'
module_agreement_project
Boolean
string='Link your projects and tasks to an agreement.'
module_agreement_repair
Boolean
string='Link your repair orders to an agreement.'
module_agreement_rma
Boolean
string='Link your RMAs to an agreement.'
module_agreement_sale
Boolean
string='Create an agreement when the sale order is confirmed.'
module_agreement_sale_subscription
Boolean
string='Link your subscriptions to an agreement.'
module_agreement_stock
Boolean
string='Link your pickings to an agreement.'
module_fieldservice_agreement
Boolean
string='Link your Field Service orders and equipments to an agreement.'
No public methods.
agreement_ids
One2many → agreement
string='Agreements'
args: 'agreement', 'partner_id'
No public methods.