Agreement

agreement
REPOSITORY
REPOSITORYOCA/agreement
GIT
GIThttps://github.com/OCA/agreement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/agreement/tree/19.0/agreement
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYContract
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Vang - Nguyen Phu
WEBSITE
WEBSITEhttps://github.com/OCA/agreement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds an *Agreement* object with the following properties:

- code,
- name,
- link to a partner,
- signature date.
- start date.
- end date.

Optionally, you can also enable using: \* agreement types \* a flag to
set an agreement as a template agreement

(Install agreement_sale to get the configuration settings for these).

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
agreement_form agreement.form agreement form New
agreement_search agreement.search agreement search New
agreement_tree agreement.list agreement list New
agreement_type_form_view Agreement Type Form agreement.type form New
agreement_type_list_view Agreement Type List agreement.type list New
agreement_type_search agreement.type.search agreement.type search New
partner_form res.partner xpath Inherits base.view_partner_form
Models touched (3)

New fields (12)
  • active Boolean
    default=True
  • agreement_type_id Many2one → agreement.type
    help='Select the type of agreement' string='Agreement Type' args: 'agreement.type'
  • code Char
    required=True tracking=True
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner_id' precompute=True store=True string='Commercial Entity' tracking=True args: 'res.partner'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • domain Selection
    compute='_compute_domain' readonly=False selection='_domain_selection' store=True tracking=True
  • end_date Date
    tracking=True
  • is_template Boolean
    copy=False help="Set if the agreement is a template. Template agreements don't require a partner." string='Is a Template?'
  • name Char
    required=True tracking=True
  • partner_id Many2one → res.partner
    ondelete='restrict' string='Partner' tracking=True args: 'res.partner'
  • signature_date Date
    tracking=True
  • start_date Date
    tracking=True
Public methods (1)
  • copy(self, default=None)
    Always assign a value for code because is required

New fields (3)
  • active Boolean
    default=True
  • domain Selection
    default='sale' args: '_domain_selection'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (2)
  • agreement_ids One2many → agreement
    string='Agreements' args: 'agreement', 'partner_id'
  • agreements_count Integer
    compute='_compute_agreements_count'
Public methods (1)
  • action_open_agreement(self)
REPOSITORY
REPOSITORYOCA/agreement
GIT
GIThttps://github.com/OCA/agreement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/agreement/tree/18.0/agreement
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYContract
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
COMMITTERS
COMMITTERSEnric Tobella, Weblate, OCA-git-bot, Iván Todorovich, oca-ci, Vincent Van Rossem, Lukas Tran
WEBSITE
WEBSITEhttps://github.com/OCA/agreement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds an *Agreement* object with the following properties:

- code,
- name,
- link to a partner,
- signature date.
- start date.
- end date.

Optionally, you can also enable using: \* agreement types \* a flag to
set an agreement as a template agreement

(Install agreement_sale to get the configuration settings for these).

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
agreement_form agreement.form agreement form New
agreement_search agreement.search agreement search New
agreement_tree agreement.list agreement list New
agreement_type_form_view Agreement Type Form agreement.type form New
agreement_type_list_view Agreement Type List agreement.type list New
agreement_type_search agreement.type.search agreement.type search New
partner_form res.partner xpath Inherits base.view_partner_form
Models touched (3)

New fields (12)
  • active Boolean
    default=True
  • agreement_type_id Many2one → agreement.type
    help='Select the type of agreement' string='Agreement Type' args: 'agreement.type'
  • code Char
    required=True tracking=True
  • commercial_partner_id Many2one → res.partner
    compute='_compute_commercial_partner_id' precompute=True store=True string='Commercial Entity' tracking=True args: 'res.partner'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • domain Selection
    compute='_compute_domain' readonly=False selection='_domain_selection' store=True tracking=True
  • end_date Date
    tracking=True
  • is_template Boolean
    copy=False help="Set if the agreement is a template. Template agreements don't require a partner." string='Is a Template?'
  • name Char
    required=True tracking=True
  • partner_id Many2one → res.partner
    ondelete='restrict' string='Partner' tracking=True args: 'res.partner'
  • signature_date Date
    tracking=True
  • start_date Date
    tracking=True
Public methods (1)
  • copy(self, default=None)
    Always assign a value for code because is required

New fields (3)
  • active Boolean
    default=True
  • domain Selection
    default='sale' args: '_domain_selection'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (2)
  • agreement_ids One2many → agreement
    string='Agreements' args: 'agreement', 'partner_id'
  • agreements_count Integer
    compute='_compute_agreements_count'
Public methods (1)
  • action_open_agreement(self)
REPOSITORY
REPOSITORYOCA/agreement
GIT
GIThttps://github.com/OCA/agreement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/agreement/tree/17.0/agreement
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYContract
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
COMMITTERS
COMMITTERSGitHub, Enric Tobella, Weblate, OCA-git-bot, oca-ci, Antoni Marroig Campomar
WEBSITE
WEBSITEhttps://github.com/OCA/agreement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:04
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds an *Agreement* object with the following properties:

- code,
- name,
- link to a partner,
- signature date.
- start date.
- end date.

Optionally, you can also enable using: \* agreement types \* a flag to
set an agreement as a template agreement

(Install agreement_sale to get the configuration settings for these).

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
agreement_form agreement.form agreement form New
agreement_search agreement.search agreement search New
agreement_tree agreement.tree agreement tree New
agreement_type_form_view Agreement Type Form agreement.type form New
agreement_type_list_view Agreement Type List agreement.type tree New
agreement_type_search agreement.type.search agreement.type search New
Models touched (2)

New fields (11)
  • active Boolean
    default=True
  • agreement_type_id Many2one → agreement.type
    help='Select the type of agreement' string='Agreement Type' args: 'agreement.type'
  • code Char
    required=True tracking=True
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • domain Selection
    compute='_compute_domain' readonly=False selection='_domain_selection' store=True tracking=True
  • end_date Date
    tracking=True
  • is_template Boolean
    copy=False default=False help="Set if the agreement is a template. Template agreements don't require a partner." string='Is a Template?'
  • name Char
    required=True tracking=True
  • partner_id Many2one → res.partner
    domain=[('parent_id', '=', False)] ondelete='restrict' string='Partner' tracking=True args: 'res.partner'
  • signature_date Date
    tracking=True
  • start_date Date
    tracking=True
Public methods (2)
  • copy(self, default=None)
    Always assign a value for code because is required
  • name_get(self)

New fields (3)
  • active Boolean
    default=True
  • domain Selection
    default='sale' args: '_domain_selection'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/agreement
GIT
GIThttps://github.com/OCA/agreement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/agreement/tree/16.0/agreement
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYContract
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, Maxime Franco, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/agreement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 22:15:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
agreement_form agreement.form agreement form New
agreement_search agreement.search agreement search New
agreement_tree agreement.tree agreement tree New
agreement_type_form_view Agreement Type Form agreement.type form New
agreement_type_list_view Agreement Type List agreement.type tree New
agreement_type_search agreement.type.search agreement.type search New
Models touched (2)

New fields (11)
  • active Boolean
    default=True
  • agreement_type_id Many2one → agreement.type
    help='Select the type of agreement' string='Agreement Type' args: 'agreement.type'
  • code Char
    required=True tracking=True
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • domain Selection
    compute='_compute_domain' readonly=False selection='_domain_selection' store=True tracking=True
  • end_date Date
    tracking=True
  • is_template Boolean
    copy=False default=False help="Set if the agreement is a template. Template agreements don't require a partner." string='Is a Template?'
  • name Char
    required=True tracking=True
  • partner_id Many2one → res.partner
    domain=[('parent_id', '=', False)] ondelete='restrict' string='Partner' tracking=True args: 'res.partner'
  • signature_date Date
    tracking=True
  • start_date Date
    tracking=True
Public methods (2)
  • copy(self, default=None)
    Always assign a value for code because is required
  • name_get(self)

New fields (3)
  • active Boolean
    default=True
  • domain Selection
    default='sale' args: '_domain_selection'
  • name Char
    required=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/agreement
GIT
GIThttps://github.com/OCA/agreement.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/agreement/tree/15.0/agreement
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYContract
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
COMMITTERS
COMMITTERSEnric Tobella, OCA Transbot, Ernesto Tejeda, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/agreement
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:33
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
agreement_form agreement.form agreement form New
agreement_search agreement.search agreement search New
agreement_tree agreement.tree agreement tree New
agreement_type_form_view Agreement Type Form agreement.type form New
agreement_type_list_view Agreement Type List agreement.type tree New
agreement_type_search agreement.type.search agreement.type search New
Models touched (2)

New fields (11)
  • active Boolean
    default=True
  • agreement_type_id Many2one → agreement.type
    help='Select the type of agreement' string='Agreement Type' args: 'agreement.type'
  • code Char
    required=True tracking=True
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • domain Selection
    default='sale' tracking=True args: '_domain_selection'
  • end_date Date
    tracking=True
  • is_template Boolean
    copy=False default=False help="Set if the agreement is a template. Template agreements don't require a partner." string='Is a Template?'
  • name Char
    required=True tracking=True
  • partner_id Many2one → res.partner
    domain=[('parent_id', '=', False)] ondelete='restrict' string='Partner' tracking=True args: 'res.partner'
  • signature_date Date
    tracking=True
  • start_date Date
    tracking=True
Public methods (3)
  • agreement_type_change(self)
    @api.onchange('agreement_type_id')
  • copy(self, default=None)
    Always assign a value for code because is required
  • name_get(self)

New fields (3)
  • active Boolean
    default=True
  • domain Selection
    default='sale' args: '_domain_selection'
  • name Char
    required=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/contract
GIT
GIThttps://github.com/OCA/contract.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/contract/tree/14.0/agreement
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYContract
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
COMMITTERS
COMMITTERSPedro M. Baeza, OCA Transbot, oca-travis, Weblate, OCA-git-bot, newtratip
WEBSITE
WEBSITEhttps://github.com/OCA/contract
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
agreement_form agreement.form agreement form New
agreement_search agreement.search agreement search New
agreement_tree agreement.tree agreement tree New
agreement_type_form_view Agreement Type Form agreement.type form New
agreement_type_list_view Agreement Type List agreement.type tree New
agreement_type_search agreement.type.search agreement.type search New
Models touched (2)

New fields (11)
  • active Boolean
    default=True
  • agreement_type_id Many2one → agreement.type
    help='Select the type of agreement' string='Agreement Type' args: 'agreement.type'
  • code Char
    required=True tracking=True
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • domain Selection
    default='sale' string='Domain' tracking=True args: '_domain_selection'
  • end_date Date
    tracking=True
  • is_template Boolean
    copy=False default=False help="Set if the agreement is a template. Template agreements don't require a partner." string='Is a Template?'
  • name Char
    required=True tracking=True
  • partner_id Many2one → res.partner
    domain=[('parent_id', '=', False)] ondelete='restrict' string='Partner' tracking=True args: 'res.partner'
  • signature_date Date
    tracking=True
  • start_date Date
    tracking=True
Public methods (3)
  • agreement_type_change(self)
    @api.onchange('agreement_type_id')
  • copy(self, default=None)
    Always assign a value for code because is required
  • name_get(self)

New fields (3)
  • active Boolean
    default=True
  • domain Selection
    default='sale' string='Domain' args: '_domain_selection'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/contract
GIT
GIThttps://github.com/OCA/contract.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/contract/tree/13.0/agreement
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYContract
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
COMMITTERS
COMMITTERSPedro M. Baeza, Denis Roussel, OCA Transbot, oca-travis, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/contract
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
agreement_form agreement.form agreement form New
agreement_search agreement.search agreement search New
agreement_tree agreement.tree agreement tree New
agreement_type_form_view Agreement Type Form agreement.type form New
agreement_type_list_view Agreement Type List agreement.type tree New
agreement_type_search agreement.type.search agreement.type search New
Models touched (2)

New fields (11)
  • active Boolean
    default=True
  • agreement_type_id Many2one → agreement.type
    help='Select the type of agreement' string='Agreement Type' args: 'agreement.type'
  • code Char
    required=True track_visibility='onchange'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • domain Selection
    default='sale' string='Domain' track_visibility='onchange' args: '_domain_selection'
  • end_date Date
    track_visibility='onchange'
  • is_template Boolean
    copy=False default=False help="Set if the agreement is a template. Template agreements don't require a partner." string='Is a Template?'
  • name Char
    required=True track_visibility='onchange'
  • partner_id Many2one → res.partner
    domain=[('parent_id', '=', False)] ondelete='restrict' string='Partner' track_visibility='onchange' args: 'res.partner'
  • signature_date Date
    track_visibility='onchange'
  • start_date Date
    track_visibility='onchange'
Public methods (3)
  • agreement_type_change(self)
    @api.onchange('agreement_type_id')
  • copy(self, default=None)
    Always assign a value for code because is required
  • name_get(self)

New fields (3)
  • active Boolean
    default=True
  • domain Selection
    default='sale' string='Domain' args: '_domain_selection'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/contract
GIT
GIThttps://github.com/OCA/contract.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/contract/tree/12.0/agreement
VERSION
VERSION 1.2.1
CATEGORY
CATEGORYContract
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, Yves Goldberg (Ygol Internetwork)
COMMITTERS
COMMITTERSAlexis de Lattre, Alexandre Fayolle, Maxime Chambreuil, GitHub, Jairo Llopis, Denis Roussel, OCA Transbot, Sergio Teruel, David Beal, oca-travis, Weblate, OCA-git-bot, oca-ci, Marcel Savegnago, ygol
WEBSITE
WEBSITEhttps://github.com/OCA/contract
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:15
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
agreement_form agreement.form agreement form New
agreement_search agreement.search agreement search New
agreement_tree agreement.tree agreement tree New
agreement_type_form_view Agreement Type Form agreement.type form New
agreement_type_list_view Agreement Type List agreement.type tree New
agreement_type_search agreement.type.search agreement.type search New
Models touched (2)

New fields (11)
  • active Boolean
    default=True
  • agreement_type_id Many2one → agreement.type
    help='Select the type of agreement' string='Agreement Type' args: 'agreement.type'
  • code Char
    required=True track_visibility='onchange'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • domain Selection
    default='sale' string='Domain' track_visibility='onchange' args: '_domain_selection'
  • end_date Date
    track_visibility='onchange'
  • is_template Boolean
    copy=False default=False help="Set if the agreement is a template. Template agreements don't require a partner." string='Is a Template?'
  • name Char
    required=True track_visibility='onchange'
  • partner_id Many2one → res.partner
    domain=[('parent_id', '=', False)] ondelete='restrict' string='Partner' track_visibility='onchange' args: 'res.partner'
  • signature_date Date
    track_visibility='onchange'
  • start_date Date
    track_visibility='onchange'
Public methods (3)
  • agreement_type_change(self)
    @api.onchange('agreement_type_id')
  • copy(self, default=None)
    @api.returns('self', <expr>)
    Always assign a value for code because is required
  • name_get(self)

New fields (3)
  • active Boolean
    default=True
  • domain Selection
    default='sale' string='Domain' args: '_domain_selection'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/contract
GIT
GIThttps://github.com/OCA/contract.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/contract/tree/11.0/agreement
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYPartner
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Open Source Integrators, Pavlov Media
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Open Source Integrators, Pavlov Media
COMMITTERS
COMMITTERSMaxime Chambreuil, GitHub, Stéphane Bidoul (ACSONE), Bhavesh Odedra, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Sandip Mangukiya
WEBSITE
WEBSITEhttps://github.com/OCA/contract
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:56
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - analytic
    - web_planner
    - portal
    - http_routing
    - contacts
    - sale_management
    - sale
    - sales_team
    - account_invoicing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (35)
XML IDNameModelTypeStatus
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
agreement_serviceprofile_form Agreement Service Profile Form agreement.serviceprofile form New
agreement_serviceprofile_search Agreement Service Profile Search agreement.serviceprofile search New
agreement_serviceprofile_tree Agreement Service Profile Tree agreement.serviceprofile tree New
order_lines_search_view Order Lines Search sale.order.line xpath Inherits sale.view_sales_order_line_filter
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 form New
partner_agreement_type_list_view Agreement Type List agreement.type tree New
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
Models touched (16)

New fields (1)
  • agreement_id Many2one → agreement
    string='Agreement' args: 'agreement'
Public methods (0)

No public methods.

New fields (70)
  • 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 → agreement.type
    help='Select the type of agreement.' string='Agreement Type' track_visibility='onchange' args: 'agreement.type'
  • analytic_id Many2one → account.analytic.account
    index=True string='Analytic Account' args: 'account.analytic.account'
  • analytic_line_ids One2many → account.analytic.line
    copy=False string='Revenues and Costs' args: 'account.analytic.line', 'agreement_id'
  • 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
    copy=True string='Clauses' args: 'agreement.clause', 'agreement_id'
  • 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 → res.partner
    copy=True default=<expr> string='Company' args: 'res.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'
  • contract_value Monetary
    compute='_compute_contract_value' help='Total value of the contract over ther entire term.' store=True string='Contract Value'
  • 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_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_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'
  • increase_type_id Many2one → agreement.increasetype
    help='The amount that certain rates may increase.' string='Increase Type' track_visibility='onchange' args: 'agreement.increasetype'
  • is_template Boolean
    copy=False default=False help='Make this agreement a template.' string='Is a Template?'
  • 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'
  • order_lines_services_ids One2many
    copy=False related='sale_order_id.order_line' string='Service Order Lines'
  • 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'
  • partner_contact_email Char
    related='partner_contact_id.email' string='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='Phone'
  • partner_id Many2one → res.partner
    copy=True help='The customer or vendor this agreement is related to.' string='Partner' args: 'res.partner'
  • partner_signed_date Date
    help='Date the contract was signed by the Partner.' string='Signed on' track_visibility='onchange'
  • partner_signed_user_id Many2one → res.partner
    help='Contact on the account that signed the agreement/contract.' string='Signed By' track_visibility='onchange' args: 'res.partner'
  • payment_term_id Many2one → account.payment.term
    help='Terms of payments.' string='Payment Term' track_visibility='onchange' args: 'account.payment.term'
  • previous_version_agreements_ids One2many → agreement
    copy=False domain=[('active', '=', False)] string='Child Agreements' 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'
  • reference Char
    copy=False default=<expr> help='ID used for internal contract tracking.' required=True string='Reference' track_visibility='onchange'
  • 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'
  • sale_order_id Many2one → sale.order
    copy=False help='Select the Sales Order that this agreement is related to.' string='Sales Order' track_visibility='onchange' args: 'sale.order'
  • sections_ids One2many → agreement.section
    copy=True string='Sections' args: 'agreement.section', 'agreement_id'
  • serviceprofile_ids One2many → agreement.serviceprofile
    string='Service Profiles' args: 'agreement.serviceprofile', '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
    default=<expr> 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')]
  • 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'
  • 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'
  • total_company_mrc Monetary
    currency_field='currency_id' help='Total company monthly recurring costs.' args: 'Company MRC'
  • total_company_nrc Monetary
    currency_field='currency_id' help='Total company non-recurring costs.' args: 'Company NRC'
  • total_customer_mrc Monetary
    currency_field='currency_id' help='Total custemer monthly recurring costs.' args: 'Customer MRC'
  • total_customer_nrc Monetary
    currency_field='currency_id' help='Total custemer non-monthly recurring costs.' args: 'Customer NRC'
  • 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'
Public methods (5)
  • create(self, vals)
    @api.model
  • create_new_agreement(self)
  • create_new_version(self, vals)
    @api.multi
  • onchange_copyvalue(self)
    @api.onchange('field_id', 'sub_model_object_field_id', 'default_value')
  • write(self, vals)
    @api.multi

New fields (12)
  • 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'
Public methods (1)
  • onchange_copyvalue(self)
    @api.onchange('field_id', 'sub_model_object_field_id', 'default_value')

New fields (13)
  • 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'
  • title Char
    help='The title is displayed on the PDF.The name is not.' string='Title'
Public methods (1)
  • onchange_copyvalue(self)
    @api.onchange('field_id', 'sub_model_object_field_id', 'default_value')

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

No public methods.

New fields (5)
  • 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 → product.uom
    required=True string='Unit of Measure' args: 'product.uom'
Public methods (0)

No public methods.

New fields (12)
  • 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'
Public methods (1)
  • onchange_copyvalue(self)
    @api.onchange('field_id', 'sub_model_object_field_id', 'default_value')

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

No public methods.

New fields (13)
  • active Boolean
    default=True help='If unchecked, it will allow you to hide the\n agreement without removing it.' string='Active'
  • agreement_id Many2one → agreement
    ondelete='cascade' string='Agreement' args: 'agreement'
  • clauses_ids One2many → agreement.clause
    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'
Public methods (1)
  • onchange_copyvalue(self)
    @api.onchange('field_id', 'sub_model_object_field_id', 'default_value')

New fields (3)
  • active Boolean
    default=True help='If unchecked, it will allow you to hide this service profile without removing it.' string='Active'
  • agreement_id Many2one → agreement
    ondelete='cascade' string='Agreement' args: 'agreement'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (4)
  • description Text
    required=False string='Description'
  • fold Boolean
    help='This stage is folded in the kanban view by deafault.' required=False string='Is Folded'
  • name Char
    required=True string='Stage Name'
  • sequence Integer
    default='1' required=False string='Sequence'
Public methods (0)

No public methods.

New fields (2)
  • agreement_type_id Many2one → agreement.type
    string='Agreement Type' args: 'agreement.type'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (2)
  • agreement_subtypes_ids One2many → agreement.subtype
    string='Subtypes' args: 'agreement.subtype', 'agreement_type_id'
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (1)
  • agreements_ids Many2many → agreement
    string='Agreements' args: 'agreement'
Public methods (0)

No public methods.

New fields (10)
  • 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.'
  • module_helpdesk_agreement Boolean
    string='Link your Helpdesk tickets to an agreement.'
Public methods (0)

No public methods.

New fields (1)
  • agreement_ids One2many → agreement
    string='Agreements' args: 'agreement', 'partner_id'
Public methods (0)

No public methods.