| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sign |
| GIT | |
| GIT | https://github.com/OCA/sign.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sign/tree/19.0/sign_oca |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Uncategorized |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Dixmit |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Dixmit |
| COMMITTERS | |
| COMMITTERS | OCA-git-bot, oca-ci, Yusuke1998 |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sign |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:40:49 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - portal - web - base - html_editor - bus - http_routing - base_setup - web_tour - auth_signup |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows to create documents for signature inside Odoo using OWL. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_my_home |
Portal layout : sign_requests button | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_home_menu_sign |
Portal layout : sign_requests menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_sign_document |
portal_sign_document | ir.ui.view | qweb | New |
portal_sign_document_signed |
portal_sign_document_signed | ir.ui.view | qweb | New |
report_signature_certificate |
report_signature_certificate | ir.ui.view | qweb | New |
report_signature_certificate_doc |
report_signature_certificate_doc | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form (in sign_oca) | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
sign_oca_field_form_view |
sign.oca.field.form (in sign_oca) | sign.oca.field | form | New |
sign_oca_field_search_view |
sign.oca.field.search (in sign_oca) | sign.oca.field | search | New |
sign_oca_field_tree_view |
sign.oca.field.list (in sign_oca) | sign.oca.field | list | New |
sign_oca_request_form_view |
sign.oca.request.form (in sign_oca) | sign.oca.request | form | New |
sign_oca_request_kanban_view |
sign.oca.request.kanban (in sign_oca) | sign.oca.request | kanban | New |
sign_oca_request_log_search_view |
sign.oca.request.log.search (in sign_oca) | sign.oca.request.log | search | New |
sign_oca_request_log_tree_view |
sign.oca.request.log.list (in sign_oca) | sign.oca.request.log | list | New |
sign_oca_request_search_view |
sign.oca.request.search (in sign_oca) | sign.oca.request | search | New |
sign_oca_request_signer_form_view |
sign.oca.request.signer.form (in sign_oca) | sign.oca.request.signer | form | New |
sign_oca_request_signer_kanban_view |
sign.oca.request.signer.kanban (in sign_oca) | sign.oca.request.signer | kanban | New |
sign_oca_request_signer_search_view |
sign.oca.request.signer.search (in sign_oca) | sign.oca.request.signer | search | New |
sign_oca_request_signer_tree_view |
sign.oca.request.signer.list (in sign_oca) | sign.oca.request.signer | list | New |
sign_oca_request_tree_view |
sign.oca.request.list (in sign_oca) | sign.oca.request | list | New |
sign_oca_role_form_view |
sign.oca.role.form (in sign_oca) | sign.oca.role | form | New |
sign_oca_role_search_view |
sign.oca.role.search (in sign_oca) | sign.oca.role | search | New |
sign_oca_role_tree_view |
sign.oca.role.list (in sign_oca) | sign.oca.role | list | New |
sign_oca_template_form_view |
sign.oca.template.form (in sign_oca) | sign.oca.template | form | New |
sign_oca_template_generate_form_view |
sign.oca.template.generate.form (in sign_oca) | sign.oca.template.generate | form | New |
sign_oca_template_generate_multi_form_view |
sign.oca.template.generate.multi.form | sign.oca.template.generate.multi | form | New |
sign_oca_template_kanban_view |
sign.oca.template.kanban (in sign_oca) | sign.oca.template | kanban | New |
sign_oca_template_search_view |
sign.oca.template.search (in sign_oca) | sign.oca.template | search | New |
sign_oca_template_tree_view |
sign.oca.template.list (in sign_oca) | sign.oca.template | list | New |
sign_requests |
Sign Requests List | ir.ui.view | qweb | New |
view_partner_form |
res.partner.form (in sign_oca) | res.partner | div | Inherits base.view_partner_form |
sign_oca_send_sign_request_copy
Boolean
help='Once all signers have signed the request, a copy of the final document will be sent to each of them.'
string='Send signers a copy of the final signed document'
No public methods.
sign_oca_send_sign_request_copy
Boolean
readonly=False
related='company_id.sign_oca_send_sign_request_copy'
No public methods.
signer_count
Integer
compute='_compute_signers_count'
signer_ids
One2many → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
inverse_name='partner_id'
action_show_signer_ids(self)
No new fields.
Public methods (1)sign_oca_request_user_count(self)
default_value
Char
field_type
Selection
default='text'
required=True
args: [('text', 'Text'), ('signature', 'Signature'), ('check', 'Check')]
name
Char
required=True
No public methods.
active
Boolean
default=True
ask_location
Boolean
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
current_hash
Char
copy=False
data
Binary
required=True
filename
Char
name
Char
required=True
next_item_id
Integer
compute='_compute_next_item_id'
record_ref
Reference
string='Object'
args: <expr>
signatory_data
Json
copy=False
default=<expr>
signed
Boolean
copy=False
signed_count
Integer
compute='_compute_signed_count'
signer_count
Integer
compute='_compute_signer_count'
signer_id
Many2one → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
compute='_compute_signer_id'
help='The signer related to the active user.'
string='Signer'
signer_ids
One2many → sign.oca.request.signer
bypass_search_access=True
copy=True
inverse_name='request_id'
string='Signers'
args: 'sign.oca.request.signer'
state
Selection
copy=False
default='1_draft'
required=True
tracking=True
args: [('0_sent', 'Sent'), ('1_draft', 'Draft'), ('2_signed', 'Signed'), ('3_cancel', 'Cancelled')]
template_id
Many2one → sign.oca.template
to_sign
Boolean
compute='_compute_to_sign'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
required=True
string='Responsible'
action_send(self, sign_now=False, message='')
action_send_signed_request(self)
add_item(self, item_vals)
cancel(self)
configure(self)
create(self, vals_list)
delete_item(self, item_id)
get_info(self)
open_template(self)
preview(self)
set_item_data(self, item_id, vals)
sign(self)
access_token
Char
action
Selection
required=True
args: [('create', 'Create'), ('validate', 'Validate'), ('view', 'View Document'), ('sign', 'Sign'), ('add_field', 'Add field'), ('edit_field', 'Edit field'), ('delete_field', 'Delete field'), ('cancel', 'Cancel'), ('configure', 'Configure')]
date
Datetime
default=<expr>
required=True
ip
Char
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
signer_id
Many2one → sign.oca.request.signer
uid
Many2one → res.users
default=<expr>
ondelete='cascade'
required=True
args: 'res.users'
No public methods.
altered_hash
Boolean
compute='_compute_altered_hash'
data
Binary
related='request_id.data'
inalterable_hash
Char
copy=False
readonly=True
string='Inalterability Hash'
is_allow_signature
Boolean
compute='_compute_is_allow_signature'
latitude
Float
longitude
Float
model
Char
compute='_compute_model'
store=True
partner_id
Many2one → res.partner
ondelete='restrict'
required=True
args: 'res.partner'
partner_name
Char
related='partner_id.name'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
res_id
Integer
compute='_compute_res_id'
store=True
role_id
Many2one → sign.oca.role
ondelete='restrict'
required=True
args: 'sign.oca.role'
secure_sequence_number
Integer
copy=False
index=True
readonly=True
string='Inalteralbility No Gap Sequence #'
sequence_id
Many2one → ir.sequence
copy=False
default=<expr>
args: 'ir.sequence'
signature_hash
Char
signed_on
Datetime
action_sign(self, items, access_token=False, latitude=False, longitude=False)
get_info(self, access_token=False)
sign(self)
default_partner_id
Many2one → res.partner
comodel_name='res.partner'
string='Default partner'
domain
Char
default=[]
required=True
expression_partner
Char
help='Example: {{object.partner_id.id}}'
string='Expression'
name
Char
required=True
partner_selection_policy
Selection
default='empty'
help="This field is used to define how the partner will be calculated in the different roles of a request. This field will be used when the 'Sign from Template' action is triggered."
required=True
selection=[('empty', 'Empty'), ('default', 'Default'), ('expression', 'Expression')]
No public methods.
active
Boolean
default=True
ask_location
Boolean
data
Binary
attachment=True
required=True
filename
Char
item_ids
One2many → sign.oca.template.item
inverse_name='template_id'
args: 'sign.oca.template.item'
model
Char
compute='_compute_model'
compute_sudo=True
store=True
string='Model name'
model_id
Many2one → ir.model
comodel_name='ir.model'
domain=[('transient', '=', False), ('model', 'not like', 'sign.oca')]
string='Model'
name
Char
required=True
request_count
Integer
compute='_compute_request_count'
request_ids
One2many → sign.oca.request
inverse_name='template_id'
args: 'sign.oca.request'
add_item(self, item_vals)
configure(self)
delete_item(self, item_id)
get_info(self)
set_item_data(self, item_id, vals)
message
Html
sign_now
Boolean
signer_ids
One2many → sign.oca.template.generate.signer
default=<expr>
inverse_name='wizard_id'
args: 'sign.oca.template.generate.signer'
template_id
Many2one → sign.oca.template
generate(self)
message
Html
model
Char
default=<expr>
readonly=True
template_id
Many2one → sign.oca.template
comodel_name='sign.oca.template'
domain="[('model', '=', model)]"
required=True
generate(self)
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
role_id
Many2one → sign.oca.role
readonly=True
required=True
args: 'sign.oca.role'
wizard_id
Many2one → sign.oca.template.generate
ondelete='cascade'
args: 'sign.oca.template.generate'
No public methods.
field_id
Many2one → sign.oca.field
ondelete='restrict'
args: 'sign.oca.field'
height
Float
page
Integer
default=1
required=True
placeholder
Char
position_x
Float
required=True
position_y
Float
required=True
required
Boolean
role_id
Many2one → sign.oca.role
default=<expr>
ondelete='restrict'
args: 'sign.oca.role'
template_id
Many2one → sign.oca.template
ondelete='cascade'
required=True
args: 'sign.oca.template'
width
Float
get_info(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sign |
| GIT | |
| GIT | https://github.com/OCA/sign.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sign/tree/18.0/sign_oca |
| VERSION | |
| VERSION | 1.4.2 |
| CATEGORY | |
| CATEGORY | Uncategorized |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Dixmit |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Dixmit |
| COMMITTERS | |
| COMMITTERS | Enric Tobella, Weblate, OCA-git-bot, oca-ci, kobros-tech, LauraCForgeFlow, Julien Guenat, AlexPForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sign |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:14 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - web_editor - bus - base - web - html_editor - portal - http_routing - base_setup - web_tour - auth_signup - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows to create documents for signature inside Odoo using OWL. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_my_home |
Portal layout : sign_requests button | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_home_menu_sign |
Portal layout : sign_requests menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_sign_document |
portal_sign_document | ir.ui.view | qweb | New |
portal_sign_document_signed |
portal_sign_document_signed | ir.ui.view | qweb | New |
report_signature_certificate |
report_signature_certificate | ir.ui.view | qweb | New |
report_signature_certificate_doc |
report_signature_certificate_doc | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form (in sign_oca) | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
sign_oca_field_form_view |
sign.oca.field.form (in sign_oca) | sign.oca.field | form | New |
sign_oca_field_search_view |
sign.oca.field.search (in sign_oca) | sign.oca.field | search | New |
sign_oca_field_tree_view |
sign.oca.field.list (in sign_oca) | sign.oca.field | list | New |
sign_oca_request_form_view |
sign.oca.request.form (in sign_oca) | sign.oca.request | form | New |
sign_oca_request_kanban_view |
sign.oca.request.kanban (in sign_oca) | sign.oca.request | kanban | New |
sign_oca_request_log_search_view |
sign.oca.request.log.search (in sign_oca) | sign.oca.request.log | search | New |
sign_oca_request_log_tree_view |
sign.oca.request.log.list (in sign_oca) | sign.oca.request.log | list | New |
sign_oca_request_search_view |
sign.oca.request.search (in sign_oca) | sign.oca.request | search | New |
sign_oca_request_signer_form_view |
sign.oca.request.signer.form (in sign_oca) | sign.oca.request.signer | form | New |
sign_oca_request_signer_kanban_view |
sign.oca.request.signer.kanban (in sign_oca) | sign.oca.request.signer | kanban | New |
sign_oca_request_signer_search_view |
sign.oca.request.signer.search (in sign_oca) | sign.oca.request.signer | search | New |
sign_oca_request_signer_tree_view |
sign.oca.request.signer.list (in sign_oca) | sign.oca.request.signer | list | New |
sign_oca_request_tree_view |
sign.oca.request.list (in sign_oca) | sign.oca.request | list | New |
sign_oca_role_form_view |
sign.oca.role.form (in sign_oca) | sign.oca.role | form | New |
sign_oca_role_search_view |
sign.oca.role.search (in sign_oca) | sign.oca.role | search | New |
sign_oca_role_tree_view |
sign.oca.role.list (in sign_oca) | sign.oca.role | list | New |
sign_oca_template_form_view |
sign.oca.template.form (in sign_oca) | sign.oca.template | form | New |
sign_oca_template_generate_form_view |
sign.oca.template.generate.form (in sign_oca) | sign.oca.template.generate | form | New |
sign_oca_template_generate_multi_form_view |
sign.oca.template.generate.multi.form | sign.oca.template.generate.multi | form | New |
sign_oca_template_kanban_view |
sign.oca.template.kanban (in sign_oca) | sign.oca.template | kanban | New |
sign_oca_template_search_view |
sign.oca.template.search (in sign_oca) | sign.oca.template | search | New |
sign_oca_template_tree_view |
sign.oca.template.list (in sign_oca) | sign.oca.template | list | New |
sign_requests |
Sign Requests List | ir.ui.view | qweb | New |
view_partner_form |
res.partner.form (in sign_oca) | res.partner | div | Inherits base.view_partner_form |
sign_oca_send_sign_request_copy
Boolean
help='Once all signers have signed the request, a copy of the final document will be sent to each of them.'
string='Send signers a copy of the final signed document'
No public methods.
sign_oca_send_sign_request_copy
Boolean
readonly=False
related='company_id.sign_oca_send_sign_request_copy'
No public methods.
signer_count
Integer
compute='_compute_signers_count'
signer_ids
One2many → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
inverse_name='partner_id'
action_show_signer_ids(self)
No new fields.
Public methods (1)sign_oca_request_user_count(self)
default_value
Char
field_type
Selection
default='text'
required=True
args: [('text', 'Text'), ('signature', 'Signature'), ('check', 'Check')]
name
Char
required=True
No public methods.
active
Boolean
default=True
ask_location
Boolean
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
current_hash
Char
copy=False
data
Binary
required=True
filename
Char
name
Char
required=True
next_item_id
Integer
compute='_compute_next_item_id'
record_ref
Reference
string='Object'
args: <expr>
signatory_data
Serialized
copy=False
default=<expr>
signed
Boolean
copy=False
signed_count
Integer
compute='_compute_signed_count'
signer_count
Integer
compute='_compute_signer_count'
signer_id
Many2one → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
compute='_compute_signer_id'
help='The signer related to the active user.'
string='Signer'
signer_ids
One2many → sign.oca.request.signer
auto_join=True
copy=True
inverse_name='request_id'
string='Signers'
args: 'sign.oca.request.signer'
state
Selection
copy=False
default='1_draft'
required=True
tracking=True
args: [('0_sent', 'Sent'), ('1_draft', 'Draft'), ('2_signed', 'Signed'), ('3_cancel', 'Cancelled')]
template_id
Many2one → sign.oca.template
to_sign
Boolean
compute='_compute_to_sign'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
required=True
string='Responsible'
action_send(self, sign_now=False, message='')
action_send_signed_request(self)
add_item(self, item_vals)
cancel(self)
configure(self)
create(self, vals_list)
delete_item(self, item_id)
get_info(self)
open_template(self)
preview(self)
set_item_data(self, item_id, vals)
sign(self)
access_token
Char
action
Selection
required=True
args: [('create', 'Create'), ('validate', 'Validate'), ('view', 'View Document'), ('sign', 'Sign'), ('add_field', 'Add field'), ('edit_field', 'Edit field'), ('delete_field', 'Delete field'), ('cancel', 'Cancel'), ('configure', 'Configure')]
date
Datetime
default=<expr>
required=True
ip
Char
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
signer_id
Many2one → sign.oca.request.signer
uid
Many2one → res.users
default=<expr>
ondelete='cascade'
required=True
args: 'res.users'
No public methods.
altered_hash
Boolean
compute='_compute_altered_hash'
data
Binary
related='request_id.data'
inalterable_hash
Char
copy=False
readonly=True
string='Inalterability Hash'
is_allow_signature
Boolean
compute='_compute_is_allow_signature'
latitude
Float
longitude
Float
model
Char
compute='_compute_model'
store=True
partner_id
Many2one → res.partner
ondelete='restrict'
required=True
args: 'res.partner'
partner_name
Char
related='partner_id.name'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
res_id
Integer
compute='_compute_res_id'
store=True
role_id
Many2one → sign.oca.role
ondelete='restrict'
required=True
args: 'sign.oca.role'
secure_sequence_number
Integer
copy=False
index=True
readonly=True
string='Inalteralbility No Gap Sequence #'
sequence_id
Many2one → ir.sequence
copy=False
default=<expr>
args: 'ir.sequence'
signature_hash
Char
signed_on
Datetime
action_sign(self, items, access_token=False, latitude=False, longitude=False)
get_info(self, access_token=False)
sign(self)
default_partner_id
Many2one → res.partner
comodel_name='res.partner'
string='Default partner'
domain
Char
default=[]
required=True
expression_partner
Char
help='Example: {{object.partner_id.id}}'
string='Expression'
name
Char
required=True
partner_selection_policy
Selection
default='empty'
help="This field is used to define how the partner will be calculated in the different roles of a request. This field will be used when the 'Sign from Template' action is triggered."
required=True
selection=[('empty', 'Empty'), ('default', 'Default'), ('expression', 'Expression')]
No public methods.
active
Boolean
default=True
ask_location
Boolean
data
Binary
attachment=True
required=True
filename
Char
item_ids
One2many → sign.oca.template.item
inverse_name='template_id'
args: 'sign.oca.template.item'
model
Char
compute='_compute_model'
compute_sudo=True
store=True
string='Model name'
model_id
Many2one → ir.model
comodel_name='ir.model'
domain=[('transient', '=', False), ('model', 'not like', 'sign.oca')]
string='Model'
name
Char
required=True
request_count
Integer
compute='_compute_request_count'
request_ids
One2many → sign.oca.request
inverse_name='template_id'
args: 'sign.oca.request'
add_item(self, item_vals)
configure(self)
delete_item(self, item_id)
get_info(self)
set_item_data(self, item_id, vals)
message
Html
sign_now
Boolean
signer_ids
One2many → sign.oca.template.generate.signer
default=<expr>
inverse_name='wizard_id'
args: 'sign.oca.template.generate.signer'
template_id
Many2one → sign.oca.template
generate(self)
message
Html
model
Char
default=<expr>
readonly=True
template_id
Many2one → sign.oca.template
comodel_name='sign.oca.template'
domain="[('model', '=', model)]"
required=True
generate(self)
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
role_id
Many2one → sign.oca.role
readonly=True
required=True
args: 'sign.oca.role'
wizard_id
Many2one → sign.oca.template.generate
ondelete='cascade'
args: 'sign.oca.template.generate'
No public methods.
field_id
Many2one → sign.oca.field
ondelete='restrict'
args: 'sign.oca.field'
height
Float
page
Integer
default=1
required=True
placeholder
Char
position_x
Float
required=True
position_y
Float
required=True
required
Boolean
role_id
Many2one → sign.oca.role
default=<expr>
ondelete='restrict'
args: 'sign.oca.role'
template_id
Many2one → sign.oca.template
ondelete='cascade'
required=True
args: 'sign.oca.template'
width
Float
get_info(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sign |
| GIT | |
| GIT | https://github.com/OCA/sign.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sign/tree/17.0/sign_oca |
| VERSION | |
| VERSION | 1.2.2 |
| CATEGORY | |
| CATEGORY | Uncategorized |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Dixmit |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Dixmit |
| COMMITTERS | |
| COMMITTERS | GitHub, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, kobros-tech, Carlos Roca, LauraCForgeFlow, Luis Rodriguez, Julien Guenat, AlexPForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sign |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:07 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - web_editor - bus - base - web - portal - http_routing - base_setup - web_tour - auth_signup - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows to create documents for signature inside Odoo using OWL. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_sign_document |
portal_sign_document | ir.ui.view | qweb | New |
portal_sign_document_signed |
portal_sign_document_signed | ir.ui.view | qweb | New |
report_signature_certificate |
report_signature_certificate | ir.ui.view | qweb | New |
report_signature_certificate_doc |
report_signature_certificate_doc | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form (in sign_oca) | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
sign_oca_field_form_view |
sign.oca.field.form (in sign_oca) | sign.oca.field | form | New |
sign_oca_field_search_view |
sign.oca.field.search (in sign_oca) | sign.oca.field | search | New |
sign_oca_field_tree_view |
sign.oca.field.tree (in sign_oca) | sign.oca.field | tree | New |
sign_oca_request_form_view |
sign.oca.request.form (in sign_oca) | sign.oca.request | form | New |
sign_oca_request_kanban_view |
sign.oca.request.kanban (in sign_oca) | sign.oca.request | kanban | New |
sign_oca_request_log_search_view |
sign.oca.request.log.search (in sign_oca) | sign.oca.request.log | search | New |
sign_oca_request_log_tree_view |
sign.oca.request.log.tree (in sign_oca) | sign.oca.request.log | tree | New |
sign_oca_request_search_view |
sign.oca.request.search (in sign_oca) | sign.oca.request | search | New |
sign_oca_request_signer_form_view |
sign.oca.request.signer.form (in sign_oca) | sign.oca.request.signer | form | New |
sign_oca_request_signer_kanban_view |
sign.oca.request.signer.kanban (in sign_oca) | sign.oca.request.signer | kanban | New |
sign_oca_request_signer_search_view |
sign.oca.request.signer.search (in sign_oca) | sign.oca.request.signer | search | New |
sign_oca_request_signer_tree_view |
sign.oca.request.signer.tree (in sign_oca) | sign.oca.request.signer | tree | New |
sign_oca_request_tree_view |
sign.oca.request.tree (in sign_oca) | sign.oca.request | tree | New |
sign_oca_role_form_view |
sign.oca.role.form (in sign_oca) | sign.oca.role | form | New |
sign_oca_role_search_view |
sign.oca.role.search (in sign_oca) | sign.oca.role | search | New |
sign_oca_role_tree_view |
sign.oca.role.tree (in sign_oca) | sign.oca.role | tree | New |
sign_oca_template_form_view |
sign.oca.template.form (in sign_oca) | sign.oca.template | form | New |
sign_oca_template_generate_form_view |
sign.oca.template.generate.form (in sign_oca) | sign.oca.template.generate | form | New |
sign_oca_template_generate_multi_form_view |
sign.oca.template.generate.multi.form | sign.oca.template.generate.multi | form | New |
sign_oca_template_kanban_view |
sign.oca.template.kanban (in sign_oca) | sign.oca.template | kanban | New |
sign_oca_template_search_view |
sign.oca.template.search (in sign_oca) | sign.oca.template | search | New |
sign_oca_template_tree_view |
sign.oca.template.tree (in sign_oca) | sign.oca.template | tree | New |
view_partner_form |
res.partner.form (in sign_oca) | res.partner | div | Inherits base.view_partner_form |
sign_oca_send_sign_request_copy
Boolean
help='Once all signers have signed the request, a copy of the final document will be sent to each of them.'
string='Send signers a copy of the final signed document'
No public methods.
sign_oca_send_sign_request_copy
Boolean
readonly=False
related='company_id.sign_oca_send_sign_request_copy'
No public methods.
signer_count
Integer
compute='_compute_signers_count'
signer_ids
One2many → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
inverse_name='partner_id'
action_show_signer_ids(self)
No new fields.
Public methods (1)sign_oca_request_user_count(self)
default_value
Char
field_type
Selection
default='text'
required=True
args: [('text', 'Text'), ('signature', 'Signature'), ('check', 'Check')]
name
Char
required=True
No public methods.
active
Boolean
default=True
ask_location
Boolean
company_id
Many2one → res.company
default=<expr>
required=True
args: 'res.company'
current_hash
Char
copy=False
data
Binary
required=True
filename
Char
name
Char
required=True
next_item_id
Integer
compute='_compute_next_item_id'
record_ref
Reference
string='Object'
args: <expr>
signatory_data
Serialized
copy=False
default=<expr>
signed
Boolean
copy=False
signed_count
Integer
compute='_compute_signed_count'
signer_count
Integer
compute='_compute_signer_count'
signer_id
Many2one → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
compute='_compute_signer_id'
help='The signer related to the active user.'
string='Signer'
signer_ids
One2many → sign.oca.request.signer
auto_join=True
copy=True
inverse_name='request_id'
string='Signers'
args: 'sign.oca.request.signer'
state
Selection
copy=False
default='1_draft'
required=True
tracking=True
args: [('0_sent', 'Sent'), ('1_draft', 'Draft'), ('2_signed', 'Signed'), ('3_cancel', 'Cancelled')]
template_id
Many2one → sign.oca.template
to_sign
Boolean
compute='_compute_to_sign'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
required=True
string='Responsible'
action_send(self, sign_now=False, message='')
action_send_signed_request(self)
add_item(self, item_vals)
cancel(self)
configure(self)
create(self, vals_list)
delete_item(self, item_id)
get_info(self)
open_template(self)
preview(self)
set_item_data(self, item_id, vals)
sign(self)
access_token
Char
action
Selection
required=True
args: [('create', 'Create'), ('validate', 'Validate'), ('view', 'View Document'), ('sign', 'Sign'), ('add_field', 'Add field'), ('edit_field', 'Edit field'), ('delete_field', 'Delete field'), ('cancel', 'Cancel'), ('configure', 'Configure')]
date
Datetime
default=<expr>
required=True
ip
Char
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
signer_id
Many2one → sign.oca.request.signer
uid
Many2one → res.users
default=<expr>
ondelete='cascade'
required=True
args: 'res.users'
No public methods.
altered_hash
Boolean
compute='_compute_altered_hash'
data
Binary
related='request_id.data'
inalterable_hash
Char
copy=False
readonly=True
string='Inalterability Hash'
is_allow_signature
Boolean
compute='_compute_is_allow_signature'
latitude
Float
longitude
Float
model
Char
compute='_compute_model'
store=True
partner_id
Many2one → res.partner
ondelete='restrict'
required=True
args: 'res.partner'
partner_name
Char
related='partner_id.name'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
res_id
Integer
compute='_compute_res_id'
store=True
role_id
Many2one → sign.oca.role
ondelete='restrict'
required=True
args: 'sign.oca.role'
secure_sequence_number
Integer
copy=False
index=True
readonly=True
string='Inalteralbility No Gap Sequence #'
sequence_id
Many2one → ir.sequence
copy=False
default=<expr>
args: 'ir.sequence'
signature_hash
Char
signed_on
Datetime
action_sign(self, items, access_token=False, latitude=False, longitude=False)
get_info(self, access_token=False)
sign(self)
default_partner_id
Many2one → res.partner
comodel_name='res.partner'
string='Default partner'
domain
Char
default=[]
required=True
expression_partner
Char
help='Example: {{object.partner_id.id}}'
string='Expression'
name
Char
required=True
partner_selection_policy
Selection
default='empty'
help="This field is used to define how the partner will be calculated in the different roles of a request. This field will be used when the 'Sign from Template' action is triggered."
required=True
selection=[('empty', 'Empty'), ('default', 'Default'), ('expression', 'Expression')]
No public methods.
active
Boolean
default=True
ask_location
Boolean
data
Binary
attachment=True
required=True
filename
Char
item_ids
One2many → sign.oca.template.item
inverse_name='template_id'
args: 'sign.oca.template.item'
model
Char
compute='_compute_model'
compute_sudo=True
store=True
string='Model name'
model_id
Many2one → ir.model
comodel_name='ir.model'
domain=[('transient', '=', False), ('model', 'not like', 'sign.oca')]
string='Model'
name
Char
required=True
request_count
Integer
compute='_compute_request_count'
request_ids
One2many → sign.oca.request
inverse_name='template_id'
args: 'sign.oca.request'
add_item(self, item_vals)
configure(self)
delete_item(self, item_id)
get_info(self)
set_item_data(self, item_id, vals)
message
Html
sign_now
Boolean
signer_ids
One2many → sign.oca.template.generate.signer
default=<expr>
inverse_name='wizard_id'
args: 'sign.oca.template.generate.signer'
template_id
Many2one → sign.oca.template
generate(self)
message
Html
model
Char
default=<expr>
readonly=True
template_id
Many2one → sign.oca.template
comodel_name='sign.oca.template'
domain="[('model', '=', model)]"
required=True
generate(self)
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
role_id
Many2one → sign.oca.role
readonly=True
required=True
args: 'sign.oca.role'
wizard_id
Many2one → sign.oca.template.generate
ondelete='cascade'
args: 'sign.oca.template.generate'
No public methods.
field_id
Many2one → sign.oca.field
ondelete='restrict'
args: 'sign.oca.field'
height
Float
page
Integer
default=1
required=True
placeholder
Char
position_x
Float
required=True
position_y
Float
required=True
required
Boolean
role_id
Many2one → sign.oca.role
default=<expr>
ondelete='restrict'
args: 'sign.oca.role'
template_id
Many2one → sign.oca.template
ondelete='cascade'
required=True
args: 'sign.oca.template'
width
Float
get_info(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sign |
| GIT | |
| GIT | https://github.com/OCA/sign.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sign/tree/16.0/sign_oca |
| VERSION | |
| VERSION | 5.2.1 |
| CATEGORY | |
| CATEGORY | Uncategorized |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Dixmit |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Dixmit |
| COMMITTERS | |
| COMMITTERS | Enric Tobella, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, BernatPForgeFlow, kobros-tech, LauraCForgeFlow, AlexPForgeFlow, PauBForgeFlow, ilo, anusrinps96, Ivan Sokolov, Bastian Guenther, Dominik Schmidt |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sign |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:12:01 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - web_editor - bus - base - web - portal - http_routing - base_setup - web_tour - auth_signup - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module allows to create documents for signature inside Odoo using OWL. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_my_home |
Portal layout : sign_requests button | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_home_menu_sign |
Portal layout : sign_requests menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_sign_document |
portal_sign_document | ir.ui.view | qweb | New |
portal_sign_document_signed |
portal_sign_document_signed | ir.ui.view | qweb | New |
report_signature_certificate |
report_signature_certificate | ir.ui.view | qweb | New |
report_signature_certificate_doc |
report_signature_certificate_doc | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form (in sign_oca) | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
sign_oca_field_form_view |
sign.oca.field.form (in sign_oca) | sign.oca.field | form | New |
sign_oca_field_search_view |
sign.oca.field.search (in sign_oca) | sign.oca.field | search | New |
sign_oca_field_tree_view |
sign.oca.field.tree (in sign_oca) | sign.oca.field | tree | New |
sign_oca_request_form_view |
sign.oca.request.form (in sign_oca) | sign.oca.request | form | New |
sign_oca_request_kanban_view |
sign.oca.request.kanban (in sign_oca) | sign.oca.request | kanban | New |
sign_oca_request_log_search_view |
sign.oca.request.log.search (in sign_oca) | sign.oca.request.log | search | New |
sign_oca_request_log_tree_view |
sign.oca.request.log.tree (in sign_oca) | sign.oca.request.log | tree | New |
sign_oca_request_search_view |
sign.oca.request.search (in sign_oca) | sign.oca.request | search | New |
sign_oca_request_signer_form_view |
sign.oca.request.signer.form (in sign_oca) | sign.oca.request.signer | form | New |
sign_oca_request_signer_tree_view |
sign.oca.request.signer.tree (in sign_oca) | sign.oca.request.signer | tree | New |
sign_oca_request_tree_view |
sign.oca.request.tree (in sign_oca) | sign.oca.request | tree | New |
sign_oca_role_form_view |
sign.oca.role.form (in sign_oca) | sign.oca.role | form | New |
sign_oca_role_search_view |
sign.oca.role.search (in sign_oca) | sign.oca.role | search | New |
sign_oca_role_tree_view |
sign.oca.role.tree (in sign_oca) | sign.oca.role | tree | New |
sign_oca_template_form_view |
sign.oca.template.form (in sign_oca) | sign.oca.template | form | New |
sign_oca_template_generate_form_view |
sign.oca.template.generate.form (in sign_oca) | sign.oca.template.generate | form | New |
sign_oca_template_generate_multi_form_view |
sign.oca.template.generate.multi.form | sign.oca.template.generate.multi | form | New |
sign_oca_template_kanban_view |
sign.oca.template.kanban (in sign_oca) | sign.oca.template | kanban | New |
sign_oca_template_search_view |
sign.oca.template.search (in sign_oca) | sign.oca.template | search | New |
sign_oca_template_tree_view |
sign.oca.template.tree (in sign_oca) | sign.oca.template | tree | New |
sign_requests |
Sign Requests List | ir.ui.view | qweb | New |
view_partner_form |
res.partner.form (in sign_oca) | res.partner | div | Inherits base.view_partner_form |
sign_oca_send_sign_request_copy
Boolean
help='Once all signers have signed the request, a copy of the final document will be sent to each of them.'
string='Send signers a copy of the final signed document'
No public methods.
sign_oca_send_sign_request_copy
Boolean
readonly=False
related='company_id.sign_oca_send_sign_request_copy'
No public methods.
signer_count
Integer
compute='_compute_signers_count'
signer_ids
One2many → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
inverse_name='partner_id'
action_show_signer_ids(self)
No new fields.
Public methods (1)sign_oca_request_user_count(self)
default_value
Char
field_type
Selection
default='text'
required=True
args: [('text', 'Text'), ('signature', 'Signature'), ('check', 'Check')]
name
Char
required=True
No public methods.
active
Boolean
default=True
ask_location
Boolean
company_id
Many2one → res.company
default=<expr>
readonly=True
required=True
states={'1_draft': [('readonly', False)]}
args: 'res.company'
current_hash
Char
copy=False
readonly=True
data
Binary
readonly=True
required=True
states={'1_draft': [('readonly', False)]}
filename
Char
name
Char
required=True
next_item_id
Integer
compute='_compute_next_item_id'
record_ref
Reference
readonly=True
states={'1_draft': [('readonly', False)]}
string='Object'
args: <expr>
signatory_data
Serialized
copy=False
default=<expr>
readonly=True
signed
Boolean
copy=False
signed_count
Integer
compute='_compute_signed_count'
signer_count
Integer
compute='_compute_signer_count'
signer_id
Many2one → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
compute='_compute_signer_id'
help='The signer related to the active user.'
string='Signer'
signer_ids
One2many → sign.oca.request.signer
auto_join=True
copy=True
inverse_name='request_id'
readonly=True
states={'1_draft': [('readonly', False)]}
string='Signers'
args: 'sign.oca.request.signer'
state
Selection
copy=False
default='1_draft'
readonly=True
required=True
tracking=True
args: [('0_sent', 'Sent'), ('1_draft', 'Draft'), ('2_signed', 'Signed'), ('3_cancel', 'Cancelled')]
template_id
Many2one → sign.oca.template
readonly=True
args: 'sign.oca.template'
to_sign
Boolean
compute='_compute_to_sign'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
readonly=True
required=True
states={'1_draft': [('readonly', False)]}
string='Responsible'
action_send(self, sign_now=False, message='')
action_send_signed_request(self)
add_item(self, item_vals)
cancel(self)
configure(self)
create(self, vals_list)
delete_item(self, item_id)
get_info(self)
open_template(self)
preview(self)
set_item_data(self, item_id, vals)
sign(self)
access_token
Char
readonly=True
action
Selection
readonly=True
required=True
args: [('create', 'Create'), ('validate', 'Validate'), ('view', 'View Document'), ('sign', 'Sign'), ('add_field', 'Add field'), ('edit_field', 'Edit field'), ('delete_field', 'Delete field'), ('cancel', 'Cancel'), ('configure', 'Configure')]
date
Datetime
default=<expr>
readonly=True
required=True
ip
Char
readonly=True
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
signer_id
Many2one → sign.oca.request.signer
uid
Many2one → res.users
default=<expr>
ondelete='cascade'
readonly=True
required=True
args: 'res.users'
No public methods.
altered_hash
Boolean
compute='_compute_altered_hash'
data
Binary
related='request_id.data'
inalterable_hash
Char
copy=False
readonly=True
string='Inalterability Hash'
is_allow_signature
Boolean
compute='_compute_is_allow_signature'
latitude
Float
longitude
Float
model
Char
compute='_compute_model'
store=True
partner_id
Many2one → res.partner
ondelete='restrict'
required=True
args: 'res.partner'
partner_name
Char
related='partner_id.name'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
res_id
Integer
compute='_compute_res_id'
store=True
role_id
Many2one → sign.oca.role
ondelete='restrict'
required=True
args: 'sign.oca.role'
secure_sequence_number
Integer
copy=False
index=True
readonly=True
string='Inalteralbility No Gap Sequence #'
sequence_id
Many2one → ir.sequence
copy=False
default=<expr>
args: 'ir.sequence'
signature_hash
Char
readonly=True
signed_on
Datetime
readonly=True
action_sign(self, items, access_token=False, latitude=False, longitude=False)
get_info(self, access_token=False)
name_get(self)
sign(self)
default_partner_id
Many2one → res.partner
comodel_name='res.partner'
string='Default partner'
domain
Char
default=[]
required=True
expression_partner
Char
help='Example: {{object.partner_id.id}}'
string='Expression'
name
Char
required=True
partner_selection_policy
Selection
default='empty'
help="This field is used to define how the partner will be calculated in the different roles of a request. This field will be used when the 'Sign from Template' action is triggered."
required=True
selection=[('empty', 'Empty'), ('default', 'Default'), ('expression', 'Expression')]
No public methods.
active
Boolean
default=True
ask_location
Boolean
data
Binary
attachment=True
required=True
filename
Char
item_ids
One2many → sign.oca.template.item
inverse_name='template_id'
args: 'sign.oca.template.item'
model
Char
compute='_compute_model'
compute_sudo=True
store=True
string='Model name'
model_id
Many2one → ir.model
comodel_name='ir.model'
domain=[('transient', '=', False), ('model', 'not like', 'sign.oca')]
string='Model'
name
Char
required=True
request_count
Integer
compute='_compute_request_count'
request_ids
One2many → sign.oca.request
inverse_name='template_id'
args: 'sign.oca.request'
add_item(self, item_vals)
configure(self)
delete_item(self, item_id)
get_info(self)
set_item_data(self, item_id, vals)
message
Html
sign_now
Boolean
signer_ids
One2many → sign.oca.template.generate.signer
default=<expr>
inverse_name='wizard_id'
args: 'sign.oca.template.generate.signer'
template_id
Many2one → sign.oca.template
generate(self)
message
Html
model
Char
default=<expr>
readonly=True
template_id
Many2one → sign.oca.template
comodel_name='sign.oca.template'
domain="[('model', '=', model)]"
required=True
generate(self)
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
role_id
Many2one → sign.oca.role
readonly=True
required=True
args: 'sign.oca.role'
wizard_id
Many2one → sign.oca.template.generate
ondelete='cascade'
args: 'sign.oca.template.generate'
No public methods.
field_id
Many2one → sign.oca.field
ondelete='restrict'
args: 'sign.oca.field'
height
Float
page
Integer
default=1
required=True
placeholder
Char
position_x
Float
required=True
position_y
Float
required=True
required
Boolean
role_id
Many2one → sign.oca.role
default=<expr>
ondelete='restrict'
args: 'sign.oca.role'
template_id
Many2one → sign.oca.template
ondelete='cascade'
required=True
args: 'sign.oca.template'
width
Float
get_info(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sign |
| GIT | |
| GIT | https://github.com/OCA/sign.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sign/tree/15.0/sign_oca |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Uncategorized |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Dixmit |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Dixmit |
| COMMITTERS | |
| COMMITTERS | Enric Tobella, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, BernatPForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sign |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:36 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - web_editor - web - base - portal - http_routing - base_setup - bus - web_tour - auth_signup - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
portal_sign_document |
portal_sign_document | ir.ui.view | qweb | New |
portal_sign_document_signed |
portal_sign_document_signed | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form (in sign_oca) | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
sign_oca_field_form_view |
sign.oca.field.form (in sign_oca) | sign.oca.field | form | New |
sign_oca_field_search_view |
sign.oca.field.search (in sign_oca) | sign.oca.field | search | New |
sign_oca_field_tree_view |
sign.oca.field.tree (in sign_oca) | sign.oca.field | tree | New |
sign_oca_request_form_view |
sign.oca.request.form (in sign_oca) | sign.oca.request | form | New |
sign_oca_request_kanban_view |
sign.oca.request.kanban (in sign_oca) | sign.oca.request | kanban | New |
sign_oca_request_log_search_view |
sign.oca.request.log.search (in sign_oca) | sign.oca.request.log | search | New |
sign_oca_request_log_tree_view |
sign.oca.request.log.tree (in sign_oca) | sign.oca.request.log | tree | New |
sign_oca_request_search_view |
sign.oca.request.search (in sign_oca) | sign.oca.request | search | New |
sign_oca_request_signer_form_view |
sign.oca.request.signer.form (in sign_oca) | sign.oca.request.signer | form | New |
sign_oca_request_signer_tree_view |
sign.oca.request.signer.tree (in sign_oca) | sign.oca.request.signer | tree | New |
sign_oca_request_tree_view |
sign.oca.request.tree (in sign_oca) | sign.oca.request | tree | New |
sign_oca_role_form_view |
sign.oca.role.form (in sign_oca) | sign.oca.role | form | New |
sign_oca_role_search_view |
sign.oca.role.search (in sign_oca) | sign.oca.role | search | New |
sign_oca_role_tree_view |
sign.oca.role.tree (in sign_oca) | sign.oca.role | tree | New |
sign_oca_template_form_view |
sign.oca.template.form (in sign_oca) | sign.oca.template | form | New |
sign_oca_template_generate_form_view |
sign.oca.template.generate.form (in sign_oca) | sign.oca.template.generate | form | New |
sign_oca_template_generate_multi_form_view |
sign.oca.template.generate.multi.form | sign.oca.template.generate.multi | form | New |
sign_oca_template_kanban_view |
sign.oca.template.kanban (in sign_oca) | sign.oca.template | kanban | New |
sign_oca_template_search_view |
sign.oca.template.search (in sign_oca) | sign.oca.template | search | New |
sign_oca_template_tree_view |
sign.oca.template.tree (in sign_oca) | sign.oca.template | tree | New |
view_partner_form |
res.partner.form (in sign_oca) | res.partner | div | Inherits base.view_partner_form |
sign_oca_send_sign_request_copy
Boolean
help='Once all signers have signed the request, a copy of the final document will be sent to each of them.'
string='Send signers a copy of the final signed document'
No public methods.
sign_oca_send_sign_request_copy
Boolean
readonly=False
related='company_id.sign_oca_send_sign_request_copy'
No public methods.
signer_count
Integer
compute='_compute_signers_count'
signer_ids
One2many → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
inverse_name='partner_id'
action_show_signer_ids(self)
No new fields.
Public methods (1)sign_oca_request_user_count(self)
default_value
Char
field_type
Selection
default='text'
required=True
args: [('text', 'Text'), ('signature', 'Signature'), ('check', 'Check')]
name
Char
required=True
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
readonly=True
required=True
states={'draft': [('readonly', False)]}
args: 'res.company'
current_hash
Char
copy=False
readonly=True
data
Binary
readonly=True
required=True
states={'draft': [('readonly', False)]}
name
Char
required=True
next_item_id
Integer
compute='_compute_next_item_id'
record_ref
Reference
readonly=True
states={'draft': [('readonly', False)]}
string='Object'
args: <expr>
signatory_data
Serialized
copy=False
default=<expr>
readonly=True
signed
Boolean
copy=False
signed_count
Integer
compute='_compute_signed_count'
signer_count
Integer
compute='_compute_signer_count'
signer_id
Many2one → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
compute='_compute_signer_id'
help='The signer related to the active user.'
store=True
signer_ids
One2many → sign.oca.request.signer
auto_join=True
copy=True
inverse_name='request_id'
readonly=True
states={'draft': [('readonly', False)]}
args: 'sign.oca.request.signer'
state
Selection
copy=False
default='draft'
readonly=True
required=True
tracking=True
args: [('draft', 'Draft'), ('sent', 'Sent'), ('signed', 'Signed'), ('cancel', 'Cancelled')]
template_id
Many2one → sign.oca.template
readonly=True
args: 'sign.oca.template'
to_sign
Boolean
compute='_compute_to_sign'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Responsible'
action_send(self, sign_now=False, message='')
action_send_signed_request(self)
add_item(self, item_vals)
cancel(self)
configure(self)
create(self, vals_list)
delete_item(self, item_id)
get_info(self)
open_template(self)
preview(self)
set_item_data(self, item_id, vals)
sign(self)
access_token
Char
readonly=True
action
Selection
readonly=True
required=True
args: [('create', 'Create'), ('validate', 'Validate'), ('view', 'View Document'), ('sign', 'Sign'), ('add_field', 'Add field'), ('edit_field', 'Edit field'), ('delete_field', 'Delete field'), ('cancel', 'Cancel'), ('configure', 'Configure')]
date
Datetime
default=<expr>
readonly=True
required=True
ip
Char
readonly=True
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
signer_id
Many2one → sign.oca.request.signer
uid
Many2one → res.users
default=<expr>
ondelete='cascade'
readonly=True
required=True
args: 'res.users'
No public methods.
data
Binary
related='request_id.data'
is_allow_signature
Boolean
compute='_compute_is_allow_signature'
model
Char
compute='_compute_model'
store=True
partner_id
Many2one → res.partner
ondelete='restrict'
required=True
args: 'res.partner'
partner_name
Char
related='partner_id.name'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
res_id
Integer
compute='_compute_res_id'
store=True
role_id
Many2one → sign.oca.role
ondelete='restrict'
required=True
args: 'sign.oca.role'
signature_hash
Char
readonly=True
signed_on
Datetime
readonly=True
action_sign(self, items, access_token=False)
get_info(self, access_token=False)
name_get(self)
sign(self)
default_partner_id
Many2one → res.partner
comodel_name='res.partner'
string='Default partner'
domain
Char
default=[]
required=True
expression_partner
Char
help='Example: {{object.partner_id.id}}'
string='Expression'
name
Char
required=True
partner_type
Selection
default='empty'
required=True
selection=[('empty', 'Empty'), ('default', 'Default'), ('expression', 'Expression')]
string='Partner type'
No public methods.
active
Boolean
default=True
data
Binary
attachment=True
required=True
filename
Char
item_ids
One2many → sign.oca.template.item
inverse_name='template_id'
args: 'sign.oca.template.item'
model
Char
compute='_compute_model'
compute_sudo=True
store=True
model_id
Many2one → ir.model
comodel_name='ir.model'
domain=[('transient', '=', False), ('model', 'not like', 'sign.oca')]
string='Model'
name
Char
required=True
request_count
Integer
compute='_compute_request_count'
request_ids
One2many → sign.oca.request
inverse_name='template_id'
args: 'sign.oca.request'
add_item(self, item_vals)
configure(self)
delete_item(self, item_id)
get_info(self)
set_item_data(self, item_id, vals)
message
Html
sign_now
Boolean
signer_ids
One2many → sign.oca.template.generate.signer
default=<expr>
inverse_name='wizard_id'
args: 'sign.oca.template.generate.signer'
template_id
Many2one → sign.oca.template
generate(self)
message
Html
model
Char
readonly=True
template_id
Many2one → sign.oca.template
comodel_name='sign.oca.template'
domain="['|', ('model', '=', False),('model', '=', model)]"
required=True
generate(self)
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
role_id
Many2one → sign.oca.role
readonly=True
required=True
args: 'sign.oca.role'
wizard_id
Many2one → sign.oca.template.generate
ondelete='cascade'
args: 'sign.oca.template.generate'
No public methods.
field_id
Many2one → sign.oca.field
ondelete='restrict'
args: 'sign.oca.field'
height
Float
page
Integer
default=1
required=True
placeholder
Char
position_x
Float
required=True
position_y
Float
required=True
required
Boolean
role_id
Many2one → sign.oca.role
default=<expr>
ondelete='restrict'
args: 'sign.oca.role'
template_id
Many2one → sign.oca.template
ondelete='cascade'
required=True
args: 'sign.oca.template'
width
Float
get_info(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sign |
| GIT | |
| GIT | https://github.com/OCA/sign.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sign/tree/14.0/sign_oca |
| VERSION | |
| VERSION | 2.4.7 |
| CATEGORY | |
| CATEGORY | Uncategorized |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Dixmit |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Dixmit |
| COMMITTERS | |
| COMMITTERS | GitHub, Enric Tobella, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, mariadforgeflow, BernatPForgeFlow, AlexPForgeFlow, PauBForgeFlow |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sign |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:03 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - web_editor - web - base - portal - http_routing - base_setup - bus - web_tour - auth_signup - base_sparse_field |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
oca_sign_assets | ir.ui.view | qweb | Inherits web.assets_backend |
assets_frontend |
oca_sign_assets_frontend | ir.ui.view | qweb | Inherits web.assets_frontend |
portal_sign_document |
portal_sign_document | ir.ui.view | qweb | New |
portal_sign_document_signed |
portal_sign_document_signed | ir.ui.view | qweb | New |
sign_assets |
sign_assets | ir.ui.view | qweb | New |
sign_oca_field_form_view |
sign.oca.field.form (in sign_oca) | sign.oca.field | form | New |
sign_oca_field_search_view |
sign.oca.field.search (in sign_oca) | sign.oca.field | search | New |
sign_oca_field_tree_view |
sign.oca.field.tree (in sign_oca) | sign.oca.field | tree | New |
sign_oca_request_form_view |
sign.oca.request.form (in sign_oca) | sign.oca.request | form | New |
sign_oca_request_kanban_view |
sign.oca.request.kanban (in sign_oca) | sign.oca.request | kanban | New |
sign_oca_request_log_search_view |
sign.oca.request.log.search (in sign_oca) | sign.oca.request.log | search | New |
sign_oca_request_log_tree_view |
sign.oca.request.log.tree (in sign_oca) | sign.oca.request.log | tree | New |
sign_oca_request_search_view |
sign.oca.request.search (in sign_oca) | sign.oca.request | search | New |
sign_oca_request_signer_form_view |
sign.oca.request.signer.form (in sign_oca) | sign.oca.request.signer | form | New |
sign_oca_request_signer_tree_view |
sign.oca.request.signer.tree (in sign_oca) | sign.oca.request.signer | tree | New |
sign_oca_request_tree_view |
sign.oca.request.tree (in sign_oca) | sign.oca.request | tree | New |
sign_oca_role_form_view |
sign.oca.role.form (in sign_oca) | sign.oca.role | form | New |
sign_oca_role_search_view |
sign.oca.role.search (in sign_oca) | sign.oca.role | search | New |
sign_oca_role_tree_view |
sign.oca.role.tree (in sign_oca) | sign.oca.role | tree | New |
sign_oca_template_form_view |
sign.oca.template.form (in sign_oca) | sign.oca.template | form | New |
sign_oca_template_generate_form_view |
sign.oca.template.generate.form (in sign_oca) | sign.oca.template.generate | form | New |
sign_oca_template_generate_multi_form_view |
sign.oca.template.generate.multi.form | sign.oca.template.generate.multi | form | New |
sign_oca_template_kanban_view |
sign.oca.template.kanban (in sign_oca) | sign.oca.template | kanban | New |
sign_oca_template_search_view |
sign.oca.template.search (in sign_oca) | sign.oca.template | search | New |
sign_oca_template_tree_view |
sign.oca.template.tree (in sign_oca) | sign.oca.template | tree | New |
view_partner_form |
res.partner.form (in sign_oca) | res.partner | div | Inherits base.view_partner_form |
signer_count
Integer
compute='_compute_signers_count'
signer_ids
One2many → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
inverse_name='partner_id'
action_show_signer_ids(self)
No new fields.
Public methods (1)sign_oca_request_user_count(self)
default_value
Char
field_type
Selection
default='text'
required=True
args: [('text', 'Text'), ('signature', 'Signature'), ('check', 'Check')]
name
Char
required=True
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
readonly=True
required=True
states={'draft': [('readonly', False)]}
args: 'res.company'
current_hash
Char
copy=False
readonly=True
data
Binary
readonly=True
required=True
states={'draft': [('readonly', False)]}
name
Char
required=True
next_item_id
Integer
compute='_compute_next_item_id'
record_ref
Reference
readonly=True
states={'draft': [('readonly', False)]}
string='Object'
args: <expr>
signatory_data
Serialized
copy=False
default=<expr>
readonly=True
signed
Boolean
copy=False
signed_count
Integer
compute='_compute_signed_count'
signer_count
Integer
compute='_compute_signer_count'
signer_id
Many2one → sign.oca.request.signer
comodel_name='sign.oca.request.signer'
compute='_compute_signer_id'
help='The signer related to the active user.'
signer_ids
One2many → sign.oca.request.signer
auto_join=True
copy=True
inverse_name='request_id'
readonly=True
states={'draft': [('readonly', False)]}
args: 'sign.oca.request.signer'
state
Selection
copy=False
default='draft'
readonly=True
required=True
tracking=True
args: [('draft', 'Draft'), ('sent', 'Sent'), ('signed', 'Signed'), ('cancel', 'Cancelled')]
template_id
Many2one → sign.oca.template
readonly=True
args: 'sign.oca.template'
to_sign
Boolean
compute='_compute_to_sign'
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Responsible'
action_send(self, sign_now=False, message='')
add_item(self, item_vals)
cancel(self)
configure(self)
create(self, vals_list)
delete_item(self, item_id)
get_info(self)
open_template(self)
preview(self)
set_item_data(self, item_id, vals)
sign(self)
access_token
Char
readonly=True
action
Selection
readonly=True
required=True
args: [('create', 'Create'), ('validate', 'Validate'), ('view', 'View Document'), ('sign', 'Sign'), ('add_field', 'Add field'), ('edit_field', 'Edit field'), ('delete_field', 'Delete field'), ('cancel', 'Cancel'), ('configure', 'Configure')]
date
Datetime
default=<expr>
readonly=True
required=True
ip
Char
readonly=True
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
signer_id
Many2one → sign.oca.request.signer
uid
Many2one → res.users
default=<expr>
ondelete='cascade'
readonly=True
required=True
args: 'res.users'
No public methods.
data
Binary
related='request_id.data'
is_allow_signature
Boolean
compute='_compute_is_allow_signature'
model
Char
compute='_compute_model'
store=True
partner_id
Many2one → res.partner
ondelete='restrict'
required=True
args: 'res.partner'
partner_name
Char
related='partner_id.name'
request_id
Many2one → sign.oca.request
ondelete='cascade'
required=True
args: 'sign.oca.request'
res_id
Integer
compute='_compute_res_id'
store=True
role_id
Many2one → sign.oca.role
ondelete='restrict'
required=True
args: 'sign.oca.role'
signature_hash
Char
readonly=True
signed_on
Datetime
readonly=True
action_sign(self, items, access_token=False)
get_info(self, access_token=False)
name_get(self)
sign(self)
default_partner_id
Many2one → res.partner
comodel_name='res.partner'
string='Default partner'
domain
Char
default=[]
required=True
expression_partner
Char
help='Example: ${object.partner_id.id}'
string='Expression'
name
Char
required=True
partner_type
Selection
default='empty'
required=True
selection=[('empty', 'Empty'), ('default', 'Default'), ('expression', 'Expression')]
string='Partner type'
No public methods.
active
Boolean
default=True
data
Binary
attachment=True
required=True
filename
Char
item_ids
One2many → sign.oca.template.item
inverse_name='template_id'
args: 'sign.oca.template.item'
model
Char
compute='_compute_model'
compute_sudo=True
store=True
model_id
Many2one → ir.model
comodel_name='ir.model'
domain=[('transient', '=', False), ('model', 'not like', 'sign.oca')]
string='Model'
name
Char
required=True
request_count
Integer
compute='_compute_request_count'
request_ids
One2many → sign.oca.request
inverse_name='template_id'
args: 'sign.oca.request'
add_item(self, item_vals)
configure(self)
delete_item(self, item_id)
get_info(self)
set_item_data(self, item_id, vals)
message
Html
sign_now
Boolean
signer_ids
One2many → sign.oca.template.generate.signer
default=<expr>
inverse_name='wizard_id'
args: 'sign.oca.template.generate.signer'
template_id
Many2one → sign.oca.template
generate(self)
message
Html
model
Char
readonly=True
string='Model'
template_id
Many2one → sign.oca.template
comodel_name='sign.oca.template'
domain="['|', ('model', '=', False),('model', '=', model)]"
required=True
generate(self)
partner_id
Many2one → res.partner
default=<expr>
required=True
args: 'res.partner'
role_id
Many2one → sign.oca.role
readonly=True
required=True
args: 'sign.oca.role'
wizard_id
Many2one → sign.oca.template.generate
ondelete='cascade'
args: 'sign.oca.template.generate'
No public methods.
field_id
Many2one → sign.oca.field
ondelete='restrict'
args: 'sign.oca.field'
height
Float
page
Integer
default=1
required=True
placeholder
Char
position_x
Float
required=True
position_y
Float
required=True
required
Boolean
role_id
Many2one → sign.oca.role
default=<expr>
ondelete='restrict'
args: 'sign.oca.role'
template_id
Many2one → sign.oca.template
ondelete='cascade'
required=True
args: 'sign.oca.template'
width
Float
get_info(self)