JIRA Connector

connector_jira
REPOSITORY
REPOSITORYOCA/connector-jira
GIT
GIThttps://github.com/OCA/connector-jira.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/connector-jira/tree/17.0/connector_jira
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, SilvioC2C, oca-ci, Vincent Van Rossem
WEBSITE
WEBSITEhttps://github.com/OCA/connector-jira
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:59:36
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - connector
    - component
    - component_event
OCA/queue:
    - queue_job
OCA/server-ux:
    - multi_step_wizard
OCA/web:
    - web_widget_url_advanced
odoo/odoo:
    - project
    - analytic
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - resource
    - digest
    - hr_timesheet
    - hr
    - phone_validation
    - hr_hourly_cost
    - base_sparse_field
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES PyJWT>=1.7.1,<2.9.0
atlassian_jwt>=3.0.0
cryptography>=38,<39
jira==3.10.5
oauthlib>=2.1.0
requests-jwt>=0.6.0
requests-oauthlib>=1.1.0
requests-toolbelt>=0.9.1
requests>=2.21.0
requests
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (26)
XML IDNameModelTypeStatus
backend_report_user_sync JIRA backend report_user_sync ir.ui.view qweb New
edit_project project.project.form project.project xpath Inherits project.edit_project
hr_timesheet_line_form account.analytic.line.form account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_form
hr_timesheet_line_search account.analytic.line.search account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_search
hr_timesheet_line_tree account.analytic.line.tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
project_link_jira_form project.link.jira.form project.link.jira xpath Inherits multi_step_wizard.multi_step_wizard_form
project_project_view_form_simplified project.project.view.form.simplified.jira project.project xpath Inherits project.project_project_view_form_simplified_footer
task_link_jira_form task.link.jira.form task.link.jira xpath Inherits multi_step_wizard.multi_step_wizard_form
view_jira_aa_line_import Refresh Worklogs from Jira jira.account.analytic.line.import form New
view_jira_backend_form jira.backend.form jira.backend form New
view_jira_backend_tree jira.backend.tree jira.backend tree New
view_jira_issue_type_form jira.issue.type.form jira.issue.type form New
view_jira_issue_type_tree jira.issue.type.tree jira.issue.type tree New
view_jira_project_project_form jira.project.project.form jira.project.project form New
view_jira_project_project_tree jira.project.project.tree jira.project.project tree New
view_jira_project_task_form jira.project.task.form jira.project.task form New
view_jira_project_task_tree jira.project.task.tree jira.project.task tree New
view_jira_res_users_form jira.res.users.form jira.res.users form New
view_jira_res_users_tree jira.res.users.tree jira.res.users tree New
view_project project.project.tree project.project field Inherits project.view_project
view_project_kanban_jira project.project.kanban.jira project.project xpath Inherits project.view_project_kanban
view_task_form2 project.task.form project.task xpath Inherits project.view_task_form2
view_task_kanban project.task.kanban project.task field Inherits project.view_task_kanban
view_task_search_form project.task.search.form project.task field Inherits project.view_task_search_form
view_task_tree2 project.task.tree project.task field Inherits project.view_task_tree2
view_users_form res.users.form res.users xpath Inherits base.view_users_form
Models touched (18)

New fields (6)
  • jira_bind_ids One2many → jira.account.analytic.line
    comodel_name='jira.account.analytic.line' context={'active_test': False} copy=False inverse_name='odoo_id' string='Worklog Bindings'
  • jira_epic_issue_key Char
    compute='_compute_jira_references' store=True string='Original JIRA Epic Key'
  • jira_epic_issue_url Char
    compute='_compute_jira_references' compute_sudo=True store=True string='Original JIRA Epic Link'
  • jira_issue_key Char
    compute='_compute_jira_references' store=True string='Original JIRA Issue Key'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' compute='_compute_jira_references' store=True string='Original JIRA Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_references' compute_sudo=True store=True string='Original JIRA issue Link'
Public methods (3)
  • action_open_refresh_worklogs_from_jira_wizard(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (8)
  • jira_epic_issue_key Char
    string='Original Epic Key'
  • jira_epic_issue_url Char
    compute='_compute_jira_issue_url' store=True string='Original JIRA Epic Link'
  • jira_issue_id Char
  • jira_issue_key Char
    string='Original Task Key'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' string='Original Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' store=True string='Original JIRA issue Link'
  • jira_project_bind_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='restrict'
  • odoo_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' index=True ondelete='restrict' required=True string='Timesheet'
Public methods (2)
  • force_reimport(self)
  • import_record(self, backend, issue_id, worklog_id, force=False)
    @api.model
    Import a worklog from JIRA

New fields (2)
  • analytic_binding_ids Many2many → jira.account.analytic.line
    relation='import_wiz_2_analytic_bindings' args: 'jira.account.analytic.line'
  • analytic_line_ids Many2many → account.analytic.line
    relation='import_wiz_2_analytic_lines' args: 'account.analytic.line'
Public methods (1)
  • confirm(self)

New fields (25)
  • app_descriptor_url Char
    compute='_compute_app_descriptor_url' help='URL to use when registering the backend as an app on the marketplace' string='App Descriptor URL'
  • application_key Char
    compute='_compute_application_key' help='The name that will be used as application key to register the app on the Atlassian marketplace website.\nIt has to be unique among all apps on the marketplace.' store=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • delete_analytic_line_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_delete_analytic_line_from_date' string='Delete Extra Worklogs from date'
  • display_url Char
    help='Url used for the Jira app in messages'
  • epic_link_field_name Char
    help="The 'Epic Link' field on JIRA is a custom field. The name of the field is something like 'customfield_10002'. " string='Epic Link Field'
  • epic_link_on_epic Boolean
    help='Epics on JIRA cannot be linked to another epic. Check this boxto fill the epic field with itself on Odoo.'
  • epic_name_field_name Char
    help="The 'Epic Name' field on JIRA is a custom field. The name of the field is something like 'customfield_10003'. " string='Epic Name Field'
  • import_analytic_line_force Boolean
  • import_analytic_line_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_import_analytic_line_from_date' string='Import Worklogs from date'
  • import_project_task_force Boolean
  • import_project_task_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_import_project_task_from_date' string='Import Project Tasks from date'
  • issue_type_ids One2many → jira.issue.type
    comodel_name='jira.issue.type' inverse_name='backend_id' string='Issue Types'
  • name Char
    help='Display name of the app on the Atlassian Marketplace. Max 60 chars.' size=60
  • private_key Char
    groups='connector.group_connector_manager' help='The shared secret for JWT, provided at app installation'
  • project_template Selection
    default='Scrum software development' required=True selection='_selection_project_template' string='Default Project Template'
  • project_template_shared Char
    string='Default Shared Template Key'
  • public_key Text
    help='The Client Key for JWT, provided at app installation'
  • report_user_sync Html
  • state Selection
    default='setup' help='State of the Backend.\nSetup: in this state you can register the backend on https://marketplace.atlassian.com/ as an app, using the app descriptor url.\nRunning: when you have installed the backend on a Jira cloud instance (transition is automatic).' required=True selection=[('setup', 'Setup'), ('running', 'Running')]
  • uri Char
    help='the value is provided when the app is installed on Jira Cloud.' string='Jira URI'
  • verify_ssl Boolean
    default=True string='Verify SSL?'
  • worklog_date_timezone Selection
    default=<expr> selection=<expr>
  • worklog_date_timezone_mode Selection
    default='naive' help="Worklog/Timesheet date timezone modes:\n - As-is (naive): ignore timezone information\n - Jira User: use author's timezone\n - Specific: use pre-configured timezone\n" selection=[('naive', 'As-is (naive)'), ('user', 'Jira User'), ('specific', 'Specific')]
  • worklog_fallback_project_id Many2one → project.project
    comodel_name='project.project' help="Worklogs which could not be linked to any project will be created in this project. Worklogs landing in the fallback project can be reassigned to the correct project by: 1. linking the expected project with the Jira one, 2. using 'Refresh Worklogs from Jira' on the timesheet lines." string='Fallback for Worklogs'
Public methods (14)
  • activate_epic_link(self)
  • button_setup(self)
  • check_connection(self)
  • create(self, vals_list)
    @api.model_create_multi
  • delete_analytic_line(self)
  • get_api_client(self)
  • get_user_resolution_order(self)
  • import_analytic_line(self)
  • import_issue_type(self)
  • import_project_task(self)
  • import_res_users(self)
  • make_issue_url(self, jira_issue_id)
  • state_running(self)
  • state_setup(self)

New fields (3)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' required=True string='Jira Backend'
  • component_usage Char
    help='Used by the connector to find which component execute the batch import (technical).' required=True
  • from_date_field Char
    required=True
Public methods (0)

No public methods.

New fields (2)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' ondelete='restrict' required=True string='Jira Backend'
  • external_id Char
    index='trigram' string='ID on Jira'
Public methods (5)
  • delete_record(self, backend, external_id, only_binding=False, set_inactive=False)
    @api.model
    Delete a record on Odoo
  • export_record(self, fields=None)
  • import_batch(self, backend)
    @api.model
    Prepare import of a batch of record
  • import_record(self, backend, external_id, force=False, record=None)
    @api.model
    Import a record
  • run_batch_timestamp(self, backend, timestamp, force=False)
    @api.model
    Prepare batch of records

New fields (3)
  • backend_id Many2one
    ondelete='cascade'
  • description Char
  • name Char
    required=True
Public methods (2)
  • import_batch(self, backend, from_date=None, to_date=None)
    Prepare a batch import of issue types from Jira from_date and to_date are ignored for issue types
  • is_sync_for_project(self, project_binding)

New fields (5)
  • jira_key Char
    required=True size=10 string='JIRA Key'
  • project_template Selection
    default='Scrum software development' selection='_selection_project_template' string='Default Project Template'
  • project_template_shared Char
    string='Default Shared Template'
  • sync_action Selection
    default='link' help='Defines if the information of the project (name and key) are exported to JIRA when changed. Link meansthe project already exists on JIRA, no sync of the project details once the link is established. Tasks are always imported from JIRA, not pushed.' required=True selection=[('link', 'Link with JIRA'), ('export', 'Export to JIRA')]
  • sync_issue_type_ids Many2many → jira.issue.type
    comodel_name='jira.issue.type' domain="[('backend_id', '=', backend_id)]" help="Only issues of these levels are imported. When a worklog is imported no a level which is not sync'ed, it is attached to the nearest sync'ed parent level. If no parent can be found, it is attached to a special 'Unassigned' task." string='Issue Levels to Synchronize'
Public methods (0)

No public methods.

New fields (2)
  • odoo_id Many2one → project.project
    comodel_name='project.project' index=True ondelete='restrict' required=True string='Project'
  • project_type Selection
    selection='_selection_project_type'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • onchange_project_backend_id(self)
    @api.onchange('backend_id')
  • write(self, values)

New fields (7)
  • jira_epic_link_id Many2one → jira.project.task
    comodel_name='jira.project.task' string='Epic'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' string='Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='JIRA issue'
  • jira_key Char
    string='Key'
  • jira_parent_id Many2one → jira.project.task
    comodel_name='jira.project.task' help='Parent issue when the issue is a subtask. Empty if the type of parent is filtered out of the synchronizations.' string='Parent Issue'
  • jira_project_bind_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='restrict'
  • odoo_id Many2one → project.task
    comodel_name='project.task' index=True ondelete='restrict' required=True string='Task'
Public methods (0)

No public methods.

New fields (1)
  • odoo_id Many2one → res.users
    comodel_name='res.users' index=True ondelete='restrict' required=True string='User'
Public methods (0)

No public methods.

New fields (4)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' default=<expr> ondelete='cascade' required=True string='Jira Backend'
  • jira_key Char
    default=<expr>
  • jira_project_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='cascade'
  • project_id Many2one → project.project
    comodel_name='project.project' default=<expr> name='Project' ondelete='cascade' required=True
Public methods (4)
  • add_all_issue_types(self)
  • state_exit_export_config(self)
  • state_exit_issue_types(self)
  • state_exit_start(self)

New fields (2)
  • jira_bind_ids One2many → jira.project.project
    comodel_name='jira.project.project' context={'active_test': False} copy=False inverse_name='odoo_id' string='Project Bindings'
  • jira_key Char
    compute='_compute_jira_key' store=True string='JIRA Key'
Public methods (1)
  • create_and_link_jira(self)

New fields (6)
  • jira_bind_ids One2many → jira.project.task
    comodel_name='jira.project.task' context={'active_test': False} copy=False inverse_name='odoo_id' string='Task Bindings'
  • jira_compound_key Char
    compute='_compute_jira_compound_key' store=True string='JIRA Key'
  • jira_epic_link_task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_jira_epic_link_task_id' store=True string='JIRA Epic'
  • jira_issue_type Char
    compute='_compute_jira_issue_type' store=True string='JIRA Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='JIRA issue'
  • jira_parent_task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_jira_parent_task_id' store=True string='JIRA Parent'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • create_and_link_jira(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • related_action_jira_link(self) -> dict
    Open a jira url for an issue

New fields (1)
  • jira_bind_ids One2many → jira.res.users
    comodel_name='jira.res.users' context={'active_test': False} copy=False inverse_name='odoo_id' string='User Bindings'
Public methods (2)
  • button_link_with_jira(self)
  • link_with_jira(self, backends=None, raise_if_mismatch=False)

New fields (5)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' domain="[('id', 'in', linked_backend_ids)]" ondelete='cascade' required=True string='Jira Backend'
  • jira_key Char
    required=True string='JIRA Key'
  • jira_task_id Many2one → jira.project.task
    comodel_name='jira.project.task' ondelete='cascade'
  • linked_backend_ids Many2many → jira.backend
    comodel_name='jira.backend'
  • task_id Many2one → project.task
    comodel_name='project.task' name='Task' ondelete='cascade' required=True
Public methods (1)
  • state_exit_start(self)

New fields (3)
  • jira_epic_issue_key Char
    readonly=True
  • jira_issue_key Char
    readonly=True
  • jira_issue_type_id Many2one → jira.issue.type
    readonly=True args: 'jira.issue.type'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/connector-jira
GIT
GIThttps://github.com/OCA/connector-jira.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/connector-jira/tree/15.0/connector_jira
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSAlexey Pelykh, Sébastien Alix, Denis Leemann, OCA-git-bot, oca-ci, sonhd
WEBSITE
WEBSITEhttps://github.com/OCA/connector-jira
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - connector
    - component
    - component_event
OCA/queue:
    - queue_job
OCA/server-ux:
    - multi_step_wizard
OCA/web:
    - web_widget_url_advanced
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - base_sparse_field
    - project
    - analytic
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - resource
    - digest
    - hr_timesheet
    - hr
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES PyJWT
cryptography
jira
oauthlib
requests
requests-oauthlib
requests-toolbelt
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
backend_report_user_sync JIRA backend report_user_sync ir.ui.view qweb New
edit_project project.project.form project.project xpath Inherits project.edit_project
hr_timesheet_line_form account.analytic.line.form account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_form
hr_timesheet_line_search account.analytic.line.search account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_search
hr_timesheet_line_tree account.analytic.line.tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
project_link_jira_form project.link.jira.form project.link.jira xpath Inherits multi_step_wizard.multi_step_wizard_form
project_project_view_form_simplified project.project.view.form.simplified.jira project.project xpath Inherits project.project_project_view_form_simplified_footer
task_link_jira_form task.link.jira.form task.link.jira xpath Inherits multi_step_wizard.multi_step_wizard_form
view_jira_aa_line_import Refresh Worklogs from Jira jira.account.analytic.line.import form New
view_jira_backend_auth_form jira.backend.auth.form jira.backend.auth form New
view_jira_backend_form jira.backend.form jira.backend form New
view_jira_backend_tree jira.backend.tree jira.backend tree New
view_jira_issue_type_form jira.issue.type.form jira.issue.type form New
view_jira_issue_type_tree jira.issue.type.tree jira.issue.type tree New
view_jira_project_project_form jira.project.project.form jira.project.project form New
view_jira_project_project_tree jira.project.project.tree jira.project.project tree New
view_jira_project_task_form jira.project.task.form jira.project.task form New
view_jira_project_task_tree jira.project.task.tree jira.project.task tree New
view_jira_res_users_form jira.res.users.form jira.res.users form New
view_jira_res_users_tree jira.res.users.tree jira.res.users tree New
view_project project.project.tree project.project field Inherits project.view_project
view_project_kanban project.project.kanban project.project field Inherits project.view_project_kanban
view_project_kanban_jira project.project.kanban.jira project.project xpath Inherits project.view_project_kanban
view_task_form2 project.task.form project.task xpath Inherits project.view_task_form2
view_task_kanban project.task.kanban project.task field Inherits project.view_task_kanban
view_task_search_form project.task.search.form project.task field Inherits project.view_task_search_form
view_task_tree2 project.task.tree project.task field Inherits project.view_task_tree2
view_users_form res.users.form res.users xpath Inherits base.view_users_form
Models touched (18)

New fields (6)
  • jira_bind_ids One2many → jira.account.analytic.line
    comodel_name='jira.account.analytic.line' context={'active_test': False} copy=False inverse_name='odoo_id' string='Worklog Bindings'
  • jira_epic_issue_key Char
    compute='_compute_jira_references' store=True string='Original JIRA Epic Key'
  • jira_epic_issue_url Char
    compute='_compute_jira_references' compute_sudo=True string='Original JIRA Epic Link'
  • jira_issue_key Char
    compute='_compute_jira_references' store=True string='Original JIRA Issue Key'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' compute='_compute_jira_references' store=True string='Original JIRA Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_references' compute_sudo=True string='Original JIRA issue Link'
Public methods (3)
  • create(self, vals)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (8)
  • jira_epic_issue_key Char
    readonly=True string='Original Epic Key'
  • jira_epic_issue_url Char
    compute='_compute_jira_issue_url' string='Original JIRA Epic Link'
  • jira_issue_id Char
  • jira_issue_key Char
    readonly=True string='Original Task Key'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' readonly=True string='Original Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='Original JIRA issue Link'
  • jira_project_bind_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='restrict'
  • odoo_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' index=True ondelete='restrict' required=True string='Timesheet Line'
Public methods (2)
  • force_reimport(self)
  • import_record(self, backend, issue_id, worklog_id, force=False)
    @api.model
    Import a worklog from JIRA

New fields (0)

No new fields.

Public methods (1)
  • confirm(self)

New fields (29)
  • access_secret Char
    groups='connector.group_connector_manager' readonly=True
  • access_token Char
    groups='connector.group_connector_manager' readonly=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • consumer_key Char
    default=<expr> groups='connector.group_connector_manager' readonly=True
  • delete_analytic_line_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_delete_analytic_line_from_date' string='Delete Extra Worklogs from date'
  • epic_link_field_name Char
    help="The 'Epic Link' field on JIRA is a custom field. The name of the field is something like 'customfield_10002'. " string='Epic Link Field'
  • epic_link_on_epic Boolean
    help='Epics on JIRA cannot be linked to another epic. Check this boxto fill the epic field with itself on Odoo.'
  • epic_name_field_name Char
    help="The 'Epic Name' field on JIRA is a custom field. The name of the field is something like 'customfield_10003'. " string='Epic Name Field'
  • import_analytic_line_force Boolean
  • import_analytic_line_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_import_analytic_line_from_date' string='Import Worklogs from date'
  • import_project_task_force Boolean
  • import_project_task_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_import_project_task_from_date' string='Import Project Tasks from date'
  • issue_type_ids One2many → jira.issue.type
    comodel_name='jira.issue.type' inverse_name='backend_id' readonly=True string='Issue Types'
  • name Char
  • odoo_webhook_base_url Char
    default=<expr> string='Base Odoo URL for Webhooks'
  • private_key Text
    groups='connector.group_connector_manager' readonly=True
  • project_template Selection
    default='Scrum software development' required=True selection='_selection_project_template' string='Default Project Template'
  • project_template_shared Char
    string='Default Shared Template Key'
  • public_key Text
    readonly=True
  • report_user_sync Html
    readonly=True
  • state Selection
    default='authenticate' readonly=True required=True selection=[('authenticate', 'Authenticate'), ('setup', 'Setup'), ('running', 'Running')]
  • uri Char
    required=True string='Jira URI'
  • use_webhooks Boolean
    help='Webhooks need to be configured on the Jira instance. When activated, synchronization from Jira is blazing fast. It can be activated only on one Jira backend at a time. ' readonly=True
  • verify_ssl Boolean
    default=True string='Verify SSL?'
  • webhook_issue_jira_id Char
  • webhook_worklog_jira_id Char
  • worklog_date_timezone Selection
    default=<expr> selection=<expr>
  • worklog_date_timezone_mode Selection
    default='naive' help="Worklog/Timesheet date timezone modes:\n - As-is (naive): ignore timezone information\n - Jira User: use author's timezone\n - Specific: use pre-configured timezone\n" selection=[('naive', 'As-is (naive)'), ('user', 'Jira User'), ('specific', 'Specific')]
  • worklog_fallback_project_id Many2one → project.project
    comodel_name='project.project' help="Worklogs which could not be linked to any project will be created in this project. Worklogs landing in the fallback project can be reassigned to the correct project by: 1. linking the expected project with the Jira one, 2. using 'Refresh Worklogs from Jira' on the timesheet lines." string='Fallback for Worklogs'
Public methods (19)
  • activate_epic_link(self)
  • button_setup(self)
  • check_connection(self)
  • check_jira_key(self)
    @api.constrains('project_template_shared')
  • create(self, values)
    @api.model
  • create_rsa_key_vals(self)
    Create public/private RSA keypair
  • create_webhooks(self)
  • delete_analytic_line(self)
  • delete_webhooks(self)
  • get_api_client(self)
    @api.model
  • get_user_resolution_order(self)
    User resolution should happen by login first as it's unique, while resolving by email is likely to give false positives
  • import_analytic_line(self)
  • import_issue_type(self)
  • import_project_task(self)
  • import_res_users(self)
  • make_issue_url(self, jira_issue_id)
  • onchange_odoo_webhook_base_url(self)
    @api.onchange('odoo_webhook_base_url')
  • state_running(self)
  • state_setup(self)

New fields (7)
  • auth_uri Char
    readonly=True
  • backend_id Many2one → jira.backend
    args: 'jira.backend'
  • consumer_key Char
    readonly=True related='backend_id.consumer_key'
  • public_key Text
    readonly=True related='backend_id.public_key'
  • request_secret Char
    readonly=True
  • request_token Char
    readonly=True
  • state Selection
    default='leg_1' args: [('leg_1', 'OAuth Remote Config'), ('leg_2', 'OAuth Remote Auth'), ('done', 'Complete')]
Public methods (4)
  • default_get(self, fields)
    @api.model
  • do_oauth_leg_1(self)
  • do_oauth_leg_3(self)
    Perform OAuth step 3 to get access_token and secret
  • generate_new_key(self)

New fields (3)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' required=True string='Jira Backend'
  • component_usage Char
    help='Used by the connector to find which component execute the batch import (technical).' required=True
  • from_date_field Char
    required=True
Public methods (0)

No public methods.

New fields (2)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' ondelete='restrict' required=True string='Jira Backend'
  • external_id Char
    index=True string='ID on Jira'
Public methods (5)
  • delete_record(self, backend, external_id, only_binding=False, set_inactive=False)
    @api.model
    Delete a record on Odoo
  • export_record(self, fields=None)
  • import_batch(self, backend)
    @api.model
    Prepare import of a batch of record
  • import_record(self, backend, external_id, force=False, record=None)
    @api.model
    Import a record
  • run_batch_timestamp(self, backend, timestamp, force=False)
    @api.model
    Prepare batch of records

New fields (3)
  • backend_id Many2one
    ondelete='cascade'
  • description Char
    readonly=True
  • name Char
    readonly=True required=True
Public methods (2)
  • import_batch(self, backend, from_date=None, to_date=None)
    Prepare a batch import of issue types from Jira from_date and to_date are ignored for issue types
  • is_sync_for_project(self, project_binding)

New fields (5)
  • jira_key Char
    required=True size=10 string='JIRA Key'
  • project_template Selection
    default='Scrum software development' selection='_selection_project_template' string='Default Project Template'
  • project_template_shared Char
    string='Default Shared Template'
  • sync_action Selection
    default='link' help='Defines if the information of the project (name and key) are exported to JIRA when changed. Link meansthe project already exists on JIRA, no sync of the project details once the link is established. Tasks are always imported from JIRA, not pushed.' required=True selection=[('link', 'Link with JIRA'), ('export', 'Export to JIRA')]
  • sync_issue_type_ids Many2many → jira.issue.type
    comodel_name='jira.issue.type' domain="[('backend_id', '=', backend_id)]" help="Only issues of these levels are imported. When a worklog is imported no a level which is not sync'ed, it is attached to the nearest sync'ed parent level. If no parent can be found, it is attached to a special 'Unassigned' task." string='Issue Levels to Synchronize'
Public methods (0)

No public methods.

New fields (2)
  • odoo_id Many2one → project.project
    comodel_name='project.project' index=True ondelete='restrict' required=True string='Project'
  • project_type Selection
    selection='_selection_project_type'
Public methods (6)
  • check_jira_key(self)
    @api.constrains('jira_key')
  • check_project_template_shared(self)
    @api.constrains('project_template_shared')
  • create(self, values)
    @api.model
  • onchange_project_backend_id(self)
    @api.onchange('backend_id')
  • unlink(self)
  • write(self, values)

New fields (7)
  • jira_epic_link_id Many2one → jira.project.task
    comodel_name='jira.project.task' readonly=True string='Epic'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' readonly=True string='Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='JIRA issue'
  • jira_key Char
    readonly=True string='Key'
  • jira_parent_id Many2one → jira.project.task
    comodel_name='jira.project.task' help='Parent issue when the issue is a subtask. Empty if the type of parent is filtered out of the synchronizations.' readonly=True string='Parent Issue'
  • jira_project_bind_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='restrict'
  • odoo_id Many2one → project.task
    comodel_name='project.task' index=True ondelete='restrict' required=True string='Task'
Public methods (1)
  • unlink(self)

New fields (1)
  • odoo_id Many2one → res.users
    comodel_name='res.users' index=True ondelete='restrict' required=True string='User'
Public methods (0)

No public methods.

New fields (4)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' default=<expr> ondelete='cascade' required=True string='Jira Backend'
  • jira_key Char
    default=<expr>
  • jira_project_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='cascade'
  • project_id Many2one → project.project
    comodel_name='project.project' default=<expr> name='Project' ondelete='cascade' required=True
Public methods (5)
  • add_all_issue_types(self)
  • check_jira_key(self)
    @api.constrains('jira_key')
  • state_exit_export_config(self)
  • state_exit_issue_types(self)
  • state_exit_start(self)

New fields (2)
  • jira_bind_ids One2many → jira.project.project
    comodel_name='jira.project.project' context={'active_test': False} copy=False inverse_name='odoo_id' string='Project Bindings'
  • jira_key Char
    compute='_compute_jira_key' store=True string='JIRA Key'
Public methods (3)
  • create_and_link_jira(self)
  • name_get(self)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model

New fields (6)
  • jira_bind_ids One2many → jira.project.task
    comodel_name='jira.project.task' context={'active_test': False} copy=False inverse_name='odoo_id' string='Task Bindings'
  • jira_compound_key Char
    compute='_compute_jira_compound_key' store=True string='JIRA Key'
  • jira_epic_link_task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_jira_epic_link_task_id' store=True string='JIRA Epic'
  • jira_issue_type Char
    compute='_compute_jira_issue_type' store=True string='JIRA Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='JIRA issue'
  • jira_parent_task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_jira_parent_task_id' store=True string='JIRA Parent'
Public methods (5)
  • create(self, vals)
    @api.model
  • name_get(self)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • related_action_jira_link(self)
    Open a jira url for an issue

New fields (1)
  • jira_bind_ids One2many → jira.res.users
    comodel_name='jira.res.users' context={'active_test': False} copy=False inverse_name='odoo_id' string='User Bindings'
Public methods (2)
  • button_link_with_jira(self)
  • link_with_jira(self, backends=None, raise_if_mismatch=False)

New fields (5)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' domain="[('id', 'in', linked_backend_ids)]" ondelete='cascade' required=True string='Jira Backend'
  • jira_key Char
    required=True string='JIRA Key'
  • jira_task_id Many2one → jira.project.task
    comodel_name='jira.project.task' ondelete='cascade'
  • linked_backend_ids Many2many → jira.backend
    comodel_name='jira.backend'
  • task_id Many2one → project.task
    comodel_name='project.task' name='Task' ondelete='cascade' required=True
Public methods (2)
  • default_get(self, fields)
    @api.model
  • state_exit_start(self)
REPOSITORY
REPOSITORYOCA/connector-jira
GIT
GIThttps://github.com/OCA/connector-jira.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/connector-jira/tree/13.0/connector_jira
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSGitHub, Alexey Pelykh, vrenaville, Denis Leemann, oca-travis, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/connector-jira
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - connector
    - component
    - component_event
OCA/queue:
    - queue_job
OCA/server-ux:
    - multi_step_wizard
OCA/web:
    - web_widget_url_advanced
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - project
    - analytic
    - uom
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - rating
    - resource
    - digest
    - hr_timesheet
    - hr
    - mail_bot
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography
jira
oauthlib
requests
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
backend_report_user_sync JIRA backend report_user_sync ir.ui.view qweb New
edit_project project.project.form project.project xpath Inherits project.edit_project
hr_timesheet_line_form account.analytic.line.form account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_form
hr_timesheet_line_search account.analytic.line.search account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_search
hr_timesheet_line_tree account.analytic.line.tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
project_link_jira_form project.link.jira.form project.link.jira xpath Inherits multi_step_wizard.multi_step_wizard_form
project_project_view_form_simplified project.project.view.form.simplified.jira project.project xpath Inherits project.project_project_view_form_simplified_footer
task_link_jira_form task.link.jira.form task.link.jira xpath Inherits multi_step_wizard.multi_step_wizard_form
view_jira_aa_line_import Refresh Worklogs from Jira jira.account.analytic.line.import form New
view_jira_backend_auth_form jira.backend.auth.form jira.backend.auth form New
view_jira_backend_form jira.backend.form jira.backend form New
view_jira_backend_tree jira.backend.tree jira.backend tree New
view_jira_issue_type_form jira.issue.type.form jira.issue.type form New
view_jira_issue_type_tree jira.issue.type.tree jira.issue.type tree New
view_jira_project_project_form jira.project.project.form jira.project.project form New
view_jira_project_project_tree jira.project.project.tree jira.project.project tree New
view_jira_project_task_form jira.project.task.form jira.project.task form New
view_jira_project_task_tree jira.project.task.tree jira.project.task tree New
view_jira_res_users_form jira.res.users.form jira.res.users form New
view_jira_res_users_tree jira.res.users.tree jira.res.users tree New
view_project project.project.tree project.project field Inherits project.view_project
view_project_kanban project.project.kanban project.project field Inherits project.view_project_kanban
view_project_kanban_jira project.project.kanban.jira project.project xpath Inherits project.view_project_kanban
view_task_form2 project.task.form project.task xpath Inherits project.view_task_form2
view_task_kanban project.task.kanban project.task field Inherits project.view_task_kanban
view_task_search_form project.task.search.form project.task field Inherits project.view_task_search_form
view_task_tree2 project.task.tree project.task field Inherits project.view_task_tree2
view_users_form res.users.form res.users xpath Inherits base.view_users_form
Models touched (18)

New fields (6)
  • jira_bind_ids One2many → jira.account.analytic.line
    comodel_name='jira.account.analytic.line' context={'active_test': False} copy=False inverse_name='odoo_id' string='Worklog Bindings'
  • jira_epic_issue_key Char
    compute='_compute_jira_references' store=True string='Original JIRA Epic Key'
  • jira_epic_issue_url Char
    compute='_compute_jira_references' compute_sudo=True string='Original JIRA Epic Link'
  • jira_issue_key Char
    compute='_compute_jira_references' store=True string='Original JIRA Issue Key'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' compute='_compute_jira_references' store=True string='Original JIRA Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_references' compute_sudo=True string='Original JIRA issue Link'
Public methods (3)
  • create(self, vals)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (8)
  • jira_epic_issue_key Char
    readonly=True string='Original Epic Key'
  • jira_epic_issue_url Char
    compute='_compute_jira_issue_url' string='Original JIRA Epic Link'
  • jira_issue_id Char
  • jira_issue_key Char
    readonly=True string='Original Task Key'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' readonly=True string='Original Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='Original JIRA issue Link'
  • jira_project_bind_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='restrict'
  • odoo_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' index=True ondelete='restrict' required=True string='Timesheet Line'
Public methods (2)
  • force_reimport(self)
  • import_record(self, backend, issue_id, worklog_id, force=False)
    @job(default_channel='root.connector_jira.import')@related_action(action='related_action_jira_link')@api.model
    Import a worklog from JIRA

New fields (0)

No new fields.

Public methods (1)
  • confirm(self)

New fields (29)
  • access_secret Char
    groups='connector.group_connector_manager' readonly=True
  • access_token Char
    groups='connector.group_connector_manager' readonly=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • consumer_key Char
    default=<expr> groups='connector.group_connector_manager' readonly=True
  • delete_analytic_line_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_delete_analytic_line_from_date' string='Delete Extra Worklogs from date'
  • epic_link_field_name Char
    help="The 'Epic Link' field on JIRA is a custom field. The name of the field is something like 'customfield_10002'. " string='Epic Link Field'
  • epic_link_on_epic Boolean
    help='Epics on JIRA cannot be linked to another epic. Check this boxto fill the epic field with itself on Odoo.' string='Epic link on epic'
  • epic_name_field_name Char
    help="The 'Epic Name' field on JIRA is a custom field. The name of the field is something like 'customfield_10003'. " string='Epic Name Field'
  • import_analytic_line_force Boolean
  • import_analytic_line_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_import_analytic_line_from_date' string='Import Worklogs from date'
  • import_project_task_force Boolean
  • import_project_task_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_import_project_task_from_date' string='Import Project Tasks from date'
  • issue_type_ids One2many → jira.issue.type
    comodel_name='jira.issue.type' inverse_name='backend_id' readonly=True string='Issue Types'
  • name Char
  • odoo_webhook_base_url Char
    default=<expr> string='Base Odoo URL for Webhooks'
  • private_key Text
    groups='connector.group_connector_manager' readonly=True
  • project_template Selection
    default='Scrum software development' required=True selection='_selection_project_template' string='Default Project Template'
  • project_template_shared Char
    string='Default Shared Template Key'
  • public_key Text
    readonly=True
  • report_user_sync Html
    readonly=True
  • state Selection
    default='authenticate' readonly=True required=True selection=[('authenticate', 'Authenticate'), ('setup', 'Setup'), ('running', 'Running')]
  • uri Char
    required=True string='Jira URI'
  • use_webhooks Boolean
    help='Webhooks need to be configured on the Jira instance. When activated, synchronization from Jira is blazing fast. It can be activated only on one Jira backend at a time. ' readonly=True string='Use Webhooks'
  • verify_ssl Boolean
    default=True string='Verify SSL?'
  • webhook_issue_jira_id Char
  • webhook_worklog_jira_id Char
  • worklog_date_timezone Selection
    default=<expr> selection=<expr>
  • worklog_date_timezone_mode Selection
    default='naive' help="Worklog/Timesheet date timezone modes:\n - As-is (naive): ignore timezone information\n - Jira User: use author's timezone\n - Specific: use pre-configured timezone\n" selection=[('naive', 'As-is (naive)'), ('user', 'Jira User'), ('specific', 'Specific')]
  • worklog_fallback_project_id Many2one → project.project
    comodel_name='project.project' help="Worklogs which could not be linked to any project will be created in this project. Worklogs landing in the fallback project can be reassigned to the correct project by: 1. linking the expected project with the Jira one, 2. using 'Refresh Worklogs from Jira' on the timesheet lines." string='Fallback for Worklogs'
Public methods (19)
  • activate_epic_link(self)
  • button_setup(self)
  • check_connection(self)
  • check_jira_key(self)
    @api.constrains('project_template_shared')
  • create(self, values)
    @api.model
  • create_rsa_key_vals(self)
    Create public/private RSA keypair
  • create_webhooks(self)
  • delete_analytic_line(self)
  • delete_webhooks(self)
  • get_api_client(self)
    @api.model
  • get_user_resolution_order(self)
    User resolution should happen by login first as it's unique, while resolving by email is likely to give false positives
  • import_analytic_line(self)
  • import_issue_type(self)
  • import_project_task(self)
  • import_res_users(self)
  • make_issue_url(self, jira_issue_id)
  • onchange_odoo_webhook_base_url(self)
    @api.onchange('odoo_webhook_base_url')
  • state_running(self)
  • state_setup(self)

New fields (7)
  • auth_uri Char
    readonly=True
  • backend_id Many2one → jira.backend
    args: 'jira.backend'
  • consumer_key Char
    readonly=True related='backend_id.consumer_key'
  • public_key Text
    readonly=True related='backend_id.public_key'
  • request_secret Char
    readonly=True
  • request_token Char
    readonly=True
  • state Selection
    default='leg_1' args: [('leg_1', 'OAuth Remote Config'), ('leg_2', 'OAuth Remote Auth'), ('done', 'Complete')]
Public methods (4)
  • default_get(self, fields)
    @api.model
  • do_oauth_leg_1(self)
  • do_oauth_leg_3(self)
    Perform OAuth step 3 to get access_token and secret
  • generate_new_key(self)

New fields (3)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' required=True string='Jira Backend'
  • component_usage Char
    help='Used by the connector to find which component execute the batch import (technical).' required=True
  • from_date_field Char
    required=True string='From Date Field'
Public methods (0)

No public methods.

New fields (2)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' ondelete='restrict' required=True string='Jira Backend'
  • external_id Char
    index=True string='ID on Jira'
Public methods (5)
  • delete_record(self, backend, external_id, only_binding=False, set_inactive=False)
    @job(default_channel='root.connector_jira.import')@api.model
    Delete a record on Odoo
  • export_record(self, fields=None)
    @job(default_channel='root.connector_jira.export')@related_action(action='related_action_unwrap_binding')
  • import_batch(self, backend)
    @job(default_channel='root.connector_jira.import')@api.model
    Prepare import of a batch of record
  • import_record(self, backend, external_id, force=False, record=None)
    @job(default_channel='root.connector_jira.import')@related_action(action='related_action_jira_link')@api.model
    Import a record
  • run_batch_timestamp(self, backend, timestamp, force=False)
    @job(default_channel='root.connector_jira.import')@api.model
    Prepare batch of records

New fields (3)
  • backend_id Many2one
    ondelete='cascade'
  • description Char
    readonly=True
  • name Char
    readonly=True required=True
Public methods (2)
  • import_batch(self, backend, from_date=None, to_date=None)
    @job(default_channel='root.connector_jira.import')
    Prepare a batch import of issue types from Jira from_date and to_date are ignored for issue types
  • is_sync_for_project(self, project_binding)

New fields (5)
  • jira_key Char
    required=True size=10 string='JIRA Key'
  • project_template Selection
    default='Scrum software development' selection='_selection_project_template' string='Default Project Template'
  • project_template_shared Char
    string='Default Shared Template'
  • sync_action Selection
    default='link' help='Defines if the information of the project (name and key) are exported to JIRA when changed. Link meansthe project already exists on JIRA, no sync of the project details once the link is established. Tasks are always imported from JIRA, not pushed.' required=True selection=[('link', 'Link with JIRA'), ('export', 'Export to JIRA')]
  • sync_issue_type_ids Many2many → jira.issue.type
    comodel_name='jira.issue.type' domain="[('backend_id', '=', backend_id)]" help="Only issues of these levels are imported. When a worklog is imported no a level which is not sync'ed, it is attached to the nearest sync'ed parent level. If no parent can be found, it is attached to a special 'Unassigned' task." string='Issue Levels to Synchronize'
Public methods (0)

No public methods.

New fields (2)
  • odoo_id Many2one → project.project
    comodel_name='project.project' index=True ondelete='restrict' required=True string='Project'
  • project_type Selection
    selection='_selection_project_type'
Public methods (6)
  • check_jira_key(self)
    @api.constrains('jira_key')
  • check_project_template_shared(self)
    @api.constrains('project_template_shared')
  • create(self, values)
    @api.model
  • onchange_project_backend_id(self)
    @api.onchange('backend_id')
  • unlink(self)
  • write(self, values)

New fields (7)
  • jira_epic_link_id Many2one → jira.project.task
    comodel_name='jira.project.task' readonly=True string='Epic'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' readonly=True string='Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='JIRA issue'
  • jira_key Char
    readonly=True string='Key'
  • jira_parent_id Many2one → jira.project.task
    comodel_name='jira.project.task' help='Parent issue when the issue is a subtask. Empty if the type of parent is filtered out of the synchronizations.' readonly=True string='Parent Issue'
  • jira_project_bind_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='restrict'
  • odoo_id Many2one → project.task
    comodel_name='project.task' index=True ondelete='restrict' required=True string='Task'
Public methods (1)
  • unlink(self)

New fields (1)
  • odoo_id Many2one → res.users
    comodel_name='res.users' index=True ondelete='restrict' required=True string='User'
Public methods (0)

No public methods.

New fields (4)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' default=<expr> ondelete='cascade' required=True string='Jira Backend'
  • jira_key Char
    default=<expr>
  • jira_project_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='cascade'
  • project_id Many2one → project.project
    comodel_name='project.project' default=<expr> name='Project' ondelete='cascade' required=True
Public methods (5)
  • add_all_issue_types(self)
  • check_jira_key(self)
    @api.constrains('jira_key')
  • state_exit_export_config(self)
  • state_exit_issue_types(self)
  • state_exit_start(self)

New fields (2)
  • jira_bind_ids One2many → jira.project.project
    comodel_name='jira.project.project' context={'active_test': False} copy=False inverse_name='odoo_id' string='Project Bindings'
  • jira_key Char
    compute='_compute_jira_key' store=True string='JIRA Key'
Public methods (3)
  • create_and_link_jira(self)
  • name_get(self)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model

New fields (6)
  • jira_bind_ids One2many → jira.project.task
    comodel_name='jira.project.task' context={'active_test': False} copy=False inverse_name='odoo_id' string='Task Bindings'
  • jira_compound_key Char
    compute='_compute_jira_compound_key' store=True string='JIRA Key'
  • jira_epic_link_task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_jira_epic_link_task_id' store=True string='JIRA Epic'
  • jira_issue_type Char
    compute='_compute_jira_issue_type' store=True string='JIRA Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='JIRA issue'
  • jira_parent_task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_jira_parent_task_id' store=True string='JIRA Parent'
Public methods (5)
  • create(self, vals)
    @api.model
  • name_get(self)
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (1)
  • related_action_jira_link(self)
    Open a jira url for an issue

New fields (1)
  • jira_bind_ids One2many → jira.res.users
    comodel_name='jira.res.users' context={'active_test': False} copy=False inverse_name='odoo_id' string='User Bindings'
Public methods (2)
  • button_link_with_jira(self)
  • link_with_jira(self, backends=None, raise_if_mismatch=False)

New fields (5)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' domain="[('id', 'in', linked_backend_ids)]" ondelete='cascade' required=True string='Jira Backend'
  • jira_key Char
    required=True string='JIRA Key'
  • jira_task_id Many2one → jira.project.task
    comodel_name='jira.project.task' ondelete='cascade'
  • linked_backend_ids Many2many → jira.backend
    comodel_name='jira.backend'
  • task_id Many2one → project.task
    comodel_name='project.task' name='Task' ondelete='cascade' required=True
Public methods (2)
  • default_get(self, fields)
    @api.model
  • state_exit_start(self)
REPOSITORY
REPOSITORYOCA/connector-jira
GIT
GIThttps://github.com/OCA/connector-jira.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/connector-jira/tree/12.0/connector_jira
VERSION
VERSION 1.7.0
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSAlexey Pelykh, oca-travis, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/connector-jira
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - connector
    - component
    - component_event
OCA/queue:
    - queue_job
OCA/server-ux:
    - multi_step_wizard
OCA/web:
    - web_widget_url_advanced
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - project
    - portal
    - http_routing
    - rating
    - resource
    - digest
    - hr_timesheet
    - hr
    - analytic
    - decimal_precision
    - uom
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography
jira
oauthlib
requests
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (28)
XML IDNameModelTypeStatus
backend_report_user_sync JIRA backend report_user_sync ir.ui.view qweb New
edit_project project.project.form project.project xpath Inherits project.edit_project
hr_timesheet_line_form account.analytic.line.form account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_form
hr_timesheet_line_search account.analytic.line.search account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_search
hr_timesheet_line_tree account.analytic.line.tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
project_link_jira_form project.link.jira.form project.link.jira xpath Inherits multi_step_wizard.multi_step_wizard_form
project_project_view_form_simplified project.project.view.form.simplified.jira project.project form Inherits project.project_project_view_form_simplified
task_link_jira_form task.link.jira.form task.link.jira xpath Inherits multi_step_wizard.multi_step_wizard_form
view_jira_aa_line_import Refresh Worklogs from Jira jira.account.analytic.line.import form New
view_jira_backend_auth_form jira.backend.auth.form jira.backend.auth form New
view_jira_backend_form jira.backend.form jira.backend form New
view_jira_backend_tree jira.backend.tree jira.backend tree New
view_jira_issue_type_form jira.issue.type.form jira.issue.type form New
view_jira_issue_type_tree jira.issue.type.tree jira.issue.type tree New
view_jira_project_project_form jira.project.project.form jira.project.project form New
view_jira_project_project_tree jira.project.project.tree jira.project.project tree New
view_jira_project_task_form jira.project.task.form jira.project.task form New
view_jira_project_task_tree jira.project.task.tree jira.project.task tree New
view_jira_res_users_form jira.res.users.form jira.res.users form New
view_jira_res_users_tree jira.res.users.tree jira.res.users tree New
view_project project.project.tree project.project field Inherits project.view_project
view_project_kanban project.project.kanban project.project field Inherits project.view_project_kanban
view_project_kanban_jira project.project.kanban.jira project.project xpath Inherits project.view_project_kanban
view_task_form2 project.task.form project.task xpath Inherits project.view_task_form2
view_task_kanban project.task.kanban project.task field Inherits project.view_task_kanban
view_task_search_form project.task.search.form project.task field Inherits project.view_task_search_form
view_task_tree2 project.task.tree project.task field Inherits project.view_task_tree2
view_users_form res.users.form res.users xpath Inherits base.view_users_form
Models touched (18)

New fields (6)
  • jira_bind_ids One2many → jira.account.analytic.line
    comodel_name='jira.account.analytic.line' context={'active_test': False} copy=False inverse_name='odoo_id' string='Worklog Bindings'
  • jira_epic_issue_key Char
    compute='_compute_jira_references' store=True string='Original JIRA Epic Key'
  • jira_epic_issue_url Char
    compute='_compute_jira_references' string='Original JIRA Epic Link'
  • jira_issue_key Char
    compute='_compute_jira_references' store=True string='Original JIRA Issue Key'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' compute='_compute_jira_references' store=True string='Original JIRA Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_references' string='Original JIRA issue Link'
Public methods (3)
  • create(self, vals)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (8)
  • jira_epic_issue_key Char
    readonly=True string='Original Epic Key'
  • jira_epic_issue_url Char
    compute='_compute_jira_issue_url' string='Original JIRA Epic Link'
  • jira_issue_id Char
  • jira_issue_key Char
    readonly=True string='Original Task Key'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' readonly=True string='Original Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='Original JIRA issue Link'
  • jira_project_bind_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='restrict'
  • odoo_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' index=True ondelete='restrict' required=True string='Timesheet Line'
Public methods (2)
  • force_reimport(self)
    @api.multi
  • import_record(self, backend, issue_id, worklog_id, force=False)
    @job(default_channel='root.connector_jira.import')@related_action(action='related_action_jira_link')@api.model
    Import a worklog from JIRA

New fields (0)

No new fields.

Public methods (1)
  • confirm(self)
    @api.multi

New fields (29)
  • access_secret Char
    groups='connector.group_connector_manager' readonly=True
  • access_token Char
    groups='connector.group_connector_manager' readonly=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • consumer_key Char
    default=<expr> groups='connector.group_connector_manager' readonly=True
  • delete_analytic_line_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_delete_analytic_line_from_date' string='Delete Extra Worklogs from date'
  • epic_link_field_name Char
    help="The 'Epic Link' field on JIRA is a custom field. The name of the field is something like 'customfield_10002'. " string='Epic Link Field'
  • epic_link_on_epic Boolean
    help='Epics on JIRA cannot be linked to another epic. Check this boxto fill the epic field with itself on Odoo.' string='Epic link on epic'
  • epic_name_field_name Char
    help="The 'Epic Name' field on JIRA is a custom field. The name of the field is something like 'customfield_10003'. " string='Epic Name Field'
  • import_analytic_line_force Boolean
  • import_analytic_line_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_import_analytic_line_from_date' string='Import Worklogs from date'
  • import_project_task_force Boolean
  • import_project_task_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_import_project_task_from_date' string='Import Project Tasks from date'
  • issue_type_ids One2many → jira.issue.type
    comodel_name='jira.issue.type' inverse_name='backend_id' readonly=True string='Issue Types'
  • name Char
  • odoo_webhook_base_url Char
    default=<expr> string='Base Odoo URL for Webhooks'
  • private_key Text
    groups='connector.group_connector_manager' readonly=True
  • project_template Selection
    default='Scrum software development' required=True selection='_selection_project_template' string='Default Project Template'
  • project_template_shared Char
    string='Default Shared Template Key'
  • public_key Text
    readonly=True
  • report_user_sync Html
    readonly=True
  • state Selection
    default='authenticate' readonly=True required=True selection=[('authenticate', 'Authenticate'), ('setup', 'Setup'), ('running', 'Running')]
  • uri Char
    required=True string='Jira URI'
  • use_webhooks Boolean
    help='Webhooks need to be configured on the Jira instance. When activated, synchronization from Jira is blazing fast. It can be activated only on one Jira backend at a time. ' readonly=True string='Use Webhooks'
  • verify_ssl Boolean
    default=True string='Verify SSL?'
  • webhook_issue_jira_id Char
  • webhook_worklog_jira_id Char
  • worklog_date_timezone Selection
    default=<expr> selection=<expr>
  • worklog_date_timezone_mode Selection
    default='naive' help="Worklog/Timesheet date timezone modes:\n - As-is (naive): ignore timezone information\n - Jira User: use author's timezone\n - Specific: use pre-configured timezone\n" selection=[('naive', 'As-is (naive)'), ('user', 'Jira User'), ('specific', 'Specific')]
  • worklog_fallback_project_id Many2one → project.project
    comodel_name='project.project' help="Worklogs which could not be linked to any project will be created in this project. Worklogs landing in the fallback project can be reassigned to the correct project by: 1. linking the expected project with the Jira one, 2. using 'Refresh Worklogs from Jira' on the timesheet lines." string='Fallback for Worklogs'
Public methods (19)
  • activate_epic_link(self)
    @api.multi
  • button_setup(self)
    @api.multi
  • check_connection(self)
    @api.multi
  • check_jira_key(self)
    @api.constrains('project_template_shared')
  • create(self, values)
    @api.model
  • create_rsa_key_vals(self)
    @api.multi
    Create public/private RSA keypair
  • create_webhooks(self)
    @api.multi
  • delete_analytic_line(self)
    @api.multi
  • delete_webhooks(self)
    @api.multi
  • get_api_client(self)
    @api.model
  • get_user_resolution_order(self)
    @api.multi
    User resolution should happen by login first as it's unique, while resolving by email is likely to give false positives
  • import_analytic_line(self)
    @api.multi
  • import_issue_type(self)
    @api.multi
  • import_project_task(self)
    @api.multi
  • import_res_users(self)
    @api.multi
  • make_issue_url(self, jira_issue_id)
    @api.multi
  • onchange_odoo_webhook_base_url(self)
    @api.onchange('odoo_webhook_base_url')
  • state_running(self)
    @api.multi
  • state_setup(self)
    @api.multi

New fields (7)
  • auth_uri Char
    readonly=True
  • backend_id Many2one → jira.backend
    args: 'jira.backend'
  • consumer_key Char
    readonly=True related='backend_id.consumer_key'
  • public_key Text
    readonly=True related='backend_id.public_key'
  • request_secret Char
    readonly=True
  • request_token Char
    readonly=True
  • state Selection
    default='leg_1' args: [('leg_1', 'OAuth Remote Config'), ('leg_2', 'OAuth Remote Auth'), ('done', 'Complete')]
Public methods (4)
  • default_get(self, fields)
    @api.model
  • do_oauth_leg_1(self)
    @api.multi
  • do_oauth_leg_3(self)
    @api.multi
    Perform OAuth step 3 to get access_token and secret
  • generate_new_key(self)
    @api.multi

New fields (3)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' required=True string='Jira Backend'
  • component_usage Char
    help='Used by the connector to find which component execute the batch import (technical).' required=True
  • from_date_field Char
    required=True string='From Date Field'
Public methods (0)

No public methods.

New fields (2)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' ondelete='restrict' required=True string='Jira Backend'
  • external_id Char
    index=True string='ID on Jira'
Public methods (5)
  • delete_record(self, backend, external_id, only_binding=False, set_inactive=False)
    @job(default_channel='root.connector_jira.import')@api.model
    Delete a record on Odoo
  • export_record(self, fields=None)
    @job(default_channel='root.connector_jira.export')@related_action(action='related_action_unwrap_binding')@api.multi
  • import_batch(self, backend)
    @job(default_channel='root.connector_jira.import')@api.model
    Prepare import of a batch of record
  • import_record(self, backend, external_id, force=False, record=None)
    @job(default_channel='root.connector_jira.import')@related_action(action='related_action_jira_link')@api.model
    Import a record
  • run_batch_timestamp(self, backend, timestamp, force=False)
    @job(default_channel='root.connector_jira.import')@api.model
    Prepare batch of records

New fields (3)
  • backend_id Many2one
    ondelete='cascade'
  • description Char
    readonly=True
  • name Char
    readonly=True required=True
Public methods (2)
  • import_batch(self, backend, from_date=None, to_date=None)
    @job(default_channel='root.connector_jira.import')
    Prepare a batch import of issue types from Jira from_date and to_date are ignored for issue types
  • is_sync_for_project(self, project_binding)
    @api.multi

New fields (5)
  • jira_key Char
    required=True size=10 string='JIRA Key'
  • project_template Selection
    default='Scrum software development' selection='_selection_project_template' string='Default Project Template'
  • project_template_shared Char
    string='Default Shared Template'
  • sync_action Selection
    default='link' help='Defines if the information of the project (name and key) are exported to JIRA when changed. Link meansthe project already exists on JIRA, no sync of the project details once the link is established. Tasks are always imported from JIRA, not pushed.' required=True selection=[('link', 'Link with JIRA'), ('export', 'Export to JIRA')]
  • sync_issue_type_ids Many2many → jira.issue.type
    comodel_name='jira.issue.type' domain="[('backend_id', '=', backend_id)]" help="Only issues of these levels are imported. When a worklog is imported no a level which is not sync'ed, it is attached to the nearest sync'ed parent level. If no parent can be found, it is attached to a special 'Unassigned' task." string='Issue Levels to Synchronize'
Public methods (0)

No public methods.

New fields (2)
  • odoo_id Many2one → project.project
    comodel_name='project.project' index=True ondelete='restrict' required=True string='Project'
  • project_type Selection
    selection='_selection_project_type'
Public methods (6)
  • check_jira_key(self)
    @api.constrains('jira_key')
  • check_project_template_shared(self)
    @api.constrains('project_template_shared')
  • create(self, values)
    @api.model
  • onchange_project_backend_id(self)
    @api.onchange('backend_id')
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (7)
  • jira_epic_link_id Many2one → jira.project.task
    comodel_name='jira.project.task' readonly=True string='Epic'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' readonly=True string='Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='JIRA issue'
  • jira_key Char
    readonly=True string='Key'
  • jira_parent_id Many2one → jira.project.task
    comodel_name='jira.project.task' help='Parent issue when the issue is a subtask. Empty if the type of parent is filtered out of the synchronizations.' readonly=True string='Parent Issue'
  • jira_project_bind_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='restrict'
  • odoo_id Many2one → project.task
    comodel_name='project.task' index=True ondelete='restrict' required=True string='Task'
Public methods (1)
  • unlink(self)
    @api.multi

New fields (1)
  • odoo_id Many2one → res.users
    comodel_name='res.users' index=True ondelete='restrict' required=True string='User'
Public methods (0)

No public methods.

New fields (4)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' default=<expr> ondelete='cascade' required=True string='Jira Backend'
  • jira_key Char
    default=<expr>
  • jira_project_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='cascade'
  • project_id Many2one → project.project
    comodel_name='project.project' default=<expr> name='Project' ondelete='cascade' required=True
Public methods (5)
  • add_all_issue_types(self)
  • check_jira_key(self)
    @api.constrains('jira_key')
  • state_exit_export_config(self)
  • state_exit_issue_types(self)
  • state_exit_start(self)

New fields (2)
  • jira_bind_ids One2many → jira.project.project
    comodel_name='jira.project.project' context={'active_test': False} copy=False inverse_name='odoo_id' string='Project Bindings'
  • jira_key Char
    compute='_compute_jira_key' store=True string='JIRA Key'
Public methods (3)
  • create_and_link_jira(self)
    @api.multi
  • name_get(self)
    @api.multi
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model

New fields (6)
  • jira_bind_ids One2many → jira.project.task
    comodel_name='jira.project.task' context={'active_test': False} copy=False inverse_name='odoo_id' string='Task Bindings'
  • jira_compound_key Char
    compute='_compute_jira_compound_key' store=True string='JIRA Key'
  • jira_epic_link_task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_jira_epic_link_task_id' store=True string='JIRA Epic'
  • jira_issue_type Char
    compute='_compute_jira_issue_type' store=True string='JIRA Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='JIRA issue'
  • jira_parent_task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_jira_parent_task_id' store=True string='JIRA Parent'
Public methods (5)
  • create(self, vals)
    @api.model
  • name_get(self)
    @api.multi
  • name_search(self, name='', args=None, operator='ilike', limit=100)
    @api.model
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • related_action_jira_link(self)
    @api.multi
    Open a jira url for an issue

New fields (1)
  • jira_bind_ids One2many → jira.res.users
    comodel_name='jira.res.users' context={'active_test': False} copy=False inverse_name='odoo_id' string='User Bindings'
Public methods (2)
  • button_link_with_jira(self)
    @api.multi
  • link_with_jira(self, backends=None, raise_if_mismatch=False)
    @api.multi

New fields (5)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' domain="[('id', 'in', linked_backend_ids)]" ondelete='cascade' required=True string='Jira Backend'
  • jira_key Char
    required=True string='JIRA Key'
  • jira_task_id Many2one → jira.project.task
    comodel_name='jira.project.task' ondelete='cascade'
  • linked_backend_ids Many2many → jira.backend
    comodel_name='jira.backend'
  • task_id Many2one → project.task
    comodel_name='project.task' name='Task' ondelete='cascade' required=True
Public methods (2)
  • default_get(self, fields)
    @api.model
  • state_exit_start(self)
REPOSITORY
REPOSITORYOCA/connector-jira
GIT
GIThttps://github.com/OCA/connector-jira.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/connector-jira/tree/11.0/connector_jira
VERSION
VERSION 1.5.0
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Camptocamp
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Camptocamp
COMMITTERS
COMMITTERSGuewen Baconnier, Akim Juillerat, Alexey Pelykh, jcoux, oca-travis, OCA-git-bot, Jaime Arroyo
WEBSITE
WEBSITEhttps://github.com/camptocamp/connector-jira
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:24:03
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/connector:
    - connector
    - component
    - component_event
OCA/connector-jira:
    - multi_step_wizard
OCA/queue:
    - queue_job
OCA/web:
    - web_widget_url_advanced
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - base_sparse_field
    - project
    - product
    - decimal_precision
    - analytic
    - portal
    - http_routing
    - resource
    - web_planner
    - hr_timesheet
    - hr
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography
jira
oauthlib
requests
cachetools
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (25)
XML IDNameModelTypeStatus
backend_report_user_sync JIRA backend report_user_sync ir.ui.view qweb New
edit_project project.project.form project.project xpath Inherits project.edit_project
hr_timesheet_line_form account.analytic.line.form account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_form
hr_timesheet_line_search account.analytic.line.search account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_search
hr_timesheet_line_tree account.analytic.line.tree account.analytic.line field Inherits hr_timesheet.hr_timesheet_line_tree
project_link_jira_form project.link.jira.form project.link.jira xpath Inherits multi_step_wizard.multi_step_wizard_form
project_project_view_form_simplified project.project.view.form.simplified.jira project.project button Inherits project.project_project_view_form_simplified
task_link_jira_form task.link.jira.form task.link.jira xpath Inherits multi_step_wizard.multi_step_wizard_form
view_jira_aa_line_import Refresh Worklogs from Jira jira.account.analytic.line.import form New
view_jira_backend_auth_form jira.backend.auth.form jira.backend.auth form New
view_jira_backend_form jira.backend.form jira.backend form New
view_jira_backend_tree jira.backend.tree jira.backend tree New
view_jira_issue_type_form jira.issue.type.form jira.issue.type form New
view_jira_issue_type_tree jira.issue.type.tree jira.issue.type tree New
view_jira_project_project_form jira.project.project.form jira.project.project form New
view_jira_project_project_tree jira.project.project.tree jira.project.project tree New
view_jira_project_task_form jira.project.task.form jira.project.task form New
view_jira_project_task_tree jira.project.task.tree jira.project.task tree New
view_jira_res_users_form jira.res.users.form jira.res.users form New
view_jira_res_users_tree jira.res.users.tree jira.res.users tree New
view_project_kanban_jira project.project.kanban.jira project.project xpath Inherits project.view_project_kanban
view_task_form2 project.task.form project.task xpath Inherits project.view_task_form2
view_task_kanban project.task.kanban project.task field Inherits project.view_task_kanban
view_task_search_form project.task.search.form project.task field Inherits project.view_task_search_form
view_users_form res.users.form res.users xpath Inherits base.view_users_form
Models touched (19)

New fields (6)
  • jira_bind_ids One2many → jira.account.analytic.line
    comodel_name='jira.account.analytic.line' context={'active_test': False} copy=False inverse_name='odoo_id' string='Worklog Bindings'
  • jira_epic_issue_key Char
    compute='_compute_jira_references' readonly=True store=True string='Original JIRA Epic Key'
  • jira_epic_issue_url Char
    compute='_compute_jira_references' readonly=True string='Original JIRA Epic Link'
  • jira_issue_key Char
    compute='_compute_jira_references' readonly=True store=True string='Original JIRA Issue Key'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' compute='_compute_jira_references' readonly=True store=True string='Original JIRA Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_references' readonly=True string='Original JIRA issue Link'
Public methods (0)

No public methods.

New fields (7)
  • jira_epic_issue_key Char
    readonly=True string='Original Epic Key'
  • jira_epic_issue_url Char
    compute='_compute_jira_issue_url' string='Original JIRA Epic Link'
  • jira_issue_id Char
  • jira_issue_key Char
    readonly=True string='Original Task Key'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' readonly=True string='Original Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='Original JIRA issue Link'
  • odoo_id Many2one → account.analytic.line
    comodel_name='account.analytic.line' index=True ondelete='restrict' required=True string='Timesheet Line'
Public methods (2)
  • force_reimport(self)
    @api.multi
  • import_record(self, backend, issue_id, worklog_id, force=False)
    @job(default_channel='root.connector_jira.import')@related_action(action='related_action_jira_link')@api.model
    Import a worklog from JIRA

New fields (0)

No new fields.

Public methods (1)
  • confirm(self)
    @api.multi

New fields (25)
  • access_secret Char
    groups='connector.group_connector_manager' readonly=True
  • access_token Char
    groups='connector.group_connector_manager' readonly=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> required=True string='Company'
  • consumer_key Char
    default=<expr> groups='connector.group_connector_manager' readonly=True
  • delete_analytic_line_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_delete_analytic_line_from_date' string='Delete Extra Worklogs from date'
  • epic_link_field_name Char
    help="The 'Epic Link' field on JIRA is a custom field. The name of the field is something like 'customfield_10002'. " string='Epic Link Field'
  • epic_link_on_epic Boolean
    help='Epics on JIRA cannot be linked to another epic. Check this boxto fill the epic field with itself on Odoo.' string='Epic link on epic'
  • epic_name_field_name Char
    help="The 'Epic Name' field on JIRA is a custom field. The name of the field is something like 'customfield_10003'. " string='Epic Name Field'
  • import_analytic_line_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_import_analytic_line_from_date' string='Import Worklogs from date'
  • import_project_task_from_date Datetime
    compute='_compute_last_import_date' inverse='_inverse_import_project_task_from_date' string='Import Project Tasks from date'
  • issue_type_ids One2many → jira.issue.type
    comodel_name='jira.issue.type' inverse_name='backend_id' readonly=True string='Issue Types'
  • name Char
  • odoo_webhook_base_url Char
    default=<expr> string='Base Odoo URL for Webhooks'
  • private_key Text
    groups='connector.group_connector_manager' readonly=True
  • project_template Selection
    default='Scrum software development' required=True selection='_selection_project_template' string='Default Project Template'
  • project_template_shared Char
    string='Default Shared Template Key'
  • public_key Text
    readonly=True
  • report_user_sync Html
    readonly=True
  • state Selection
    default='authenticate' readonly=True required=True selection=[('authenticate', 'Authenticate'), ('setup', 'Setup'), ('running', 'Running')]
  • uri Char
    required=True string='Jira URI'
  • use_webhooks Boolean
    help='Webhooks need to be configured on the Jira instance. When activated, synchronization from Jira is blazing fast. It can be activated only on one Jira backend at a time. ' readonly=True string='Use Webhooks'
  • verify_ssl Boolean
    default=True string='Verify SSL?'
  • webhook_issue_jira_id Char
  • webhook_worklog_jira_id Char
  • worklog_fallback_project_id Many2one → project.project
    comodel_name='project.project' help="Worklogs which could not be linked to any project will be created in this project. Worklogs landing in the fallback project can be reassigned to the correct project by: 1. linking the expected project with the Jira one, 2. using 'Refresh Worklogs from Jira' on the timesheet lines." string='Fallback for Worklogs'
Public methods (18)
  • activate_epic_link(self)
    @api.multi
  • button_setup(self)
    @api.multi
  • check_connection(self)
    @api.multi
  • check_jira_key(self)
    @api.constrains('project_template_shared')
  • create(self, values)
    @api.model
  • create_rsa_key_vals(self)
    @api.multi
    Create public/private RSA keypair
  • create_webhooks(self)
    @api.multi
  • delete_analytic_line(self)
    @api.multi
  • delete_webhooks(self)
    @api.multi
  • get_api_client(self)
    @api.model
  • import_analytic_line(self)
    @api.multi
  • import_issue_type(self)
    @api.multi
  • import_project_task(self)
    @api.multi
  • import_res_users(self)
    @api.multi
  • make_issue_url(self, jira_issue_id)
    @api.multi
  • onchange_odoo_webhook_base_url(self)
    @api.onchange('odoo_webhook_base_url')
  • state_running(self)
    @api.multi
  • state_setup(self)
    @api.multi

New fields (7)
  • auth_uri Char
    readonly=True
  • backend_id Many2one → jira.backend
    args: 'jira.backend'
  • consumer_key Char
    readonly=True related='backend_id.consumer_key'
  • public_key Text
    readonly=True related='backend_id.public_key'
  • request_secret Char
    readonly=True
  • request_token Char
    readonly=True
  • state Selection
    default='leg_1' args: [('leg_1', 'OAuth Remote Config'), ('leg_2', 'OAuth Remote Auth'), ('done', 'Complete')]
Public methods (4)
  • default_get(self, fields)
    @api.model
  • do_oauth_leg_1(self)
    @api.multi
  • do_oauth_leg_3(self)
    @api.multi
    Perform OAuth step 3 to get access_token and secret
  • generate_new_key(self)
    @api.multi

New fields (3)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' required=True string='Jira Backend'
  • component_usage Char
    help='Used by the connector to find which component execute the batch import (technical).' required=True
  • from_date_field Char
    required=True string='From Date Field'
Public methods (0)

No public methods.

New fields (2)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' ondelete='restrict' required=True string='Jira Backend'
  • external_id Char
    index=True string='ID on Jira'
Public methods (5)
  • delete_record(self, backend, external_id, only_binding=False, set_inactive=False)
    @job(default_channel='root.connector_jira.import')@api.model
    Delete a record on Odoo
  • export_record(self, fields=None)
    @job(default_channel='root.connector_jira.export')@related_action(action='related_action_unwrap_binding')@api.multi
  • import_batch(self, backend)
    @job(default_channel='root.connector_jira.import')@api.model
    Prepare import of a batch of record
  • import_record(self, backend, external_id, force=False, record=None)
    @job(default_channel='root.connector_jira.import')@related_action(action='related_action_jira_link')@api.model
    Import a record
  • run_batch_timestamp(self, backend, timestamp)
    @job(default_channel='root.connector_jira.import')@api.model
    Prepare batch of records

New fields (3)
  • backend_id Many2one
    ondelete='cascade'
  • description Char
    readonly=True
  • name Char
    readonly=True required=True
Public methods (2)
  • import_batch(self, backend, from_date=None, to_date=None)
    @job(default_channel='root.connector_jira.import')
    Prepare a batch import of issue types from Jira from_date and to_date are ignored for issue types
  • is_sync_for_project(self, project_binding)
    @api.multi

New fields (5)
  • jira_key Char
    required=True size=10 string='JIRA Key'
  • project_template Selection
    default='Scrum software development' selection='_selection_project_template' string='Default Project Template'
  • project_template_shared Char
    string='Default Shared Template'
  • sync_action Selection
    default='link' help='Defines if the information of the project (name and key) are exported to JIRA when changed. Link meansthe project already exists on JIRA, no sync of the project details once the link is established. Tasks are always imported from JIRA, not pushed.' required=True selection=[('link', 'Link with JIRA'), ('export', 'Export to JIRA')]
  • sync_issue_type_ids Many2many → jira.issue.type
    comodel_name='jira.issue.type' domain="[('backend_id', '=', backend_id)]" help="Only issues of these levels are imported. When a worklog is imported no a level which is not sync'ed, it is attached to the nearest sync'ed parent level. If no parent can be found, it is attached to a special 'Unassigned' task." string='Issue Levels to Synchronize'
Public methods (0)

No public methods.

New fields (2)
  • odoo_id Many2one → project.project
    comodel_name='project.project' index=True ondelete='restrict' required=True string='Project'
  • project_type Selection
    selection='_selection_project_type'
Public methods (6)
  • check_jira_key(self)
    @api.constrains('jira_key')
  • check_project_template_shared(self)
    @api.constrains('project_template_shared')
  • create(self, values)
    @api.model
  • onchange_project_backend_id(self)
    @api.onchange('backend_id')
  • unlink(self)
    @api.multi
  • write(self, values)
    @api.multi

New fields (7)
  • jira_epic_link_id Many2one → jira.project.task
    comodel_name='jira.project.task' readonly=True string='Epic'
  • jira_issue_type_id Many2one → jira.issue.type
    comodel_name='jira.issue.type' readonly=True string='Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='JIRA issue'
  • jira_key Char
    readonly=True string='Key'
  • jira_parent_id Many2one → jira.project.task
    comodel_name='jira.project.task' help='Parent issue when the issue is a subtask. Empty if the type of parent is filtered out of the synchronizations.' readonly=True string='Parent Issue'
  • jira_project_bind_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='restrict'
  • odoo_id Many2one → project.task
    comodel_name='project.task' index=True ondelete='restrict' required=True string='Task'
Public methods (1)
  • unlink(self)
    @api.multi

New fields (1)
  • odoo_id Many2one → res.users
    comodel_name='res.users' index=True ondelete='restrict' required=True string='User'
Public methods (0)

No public methods.

New fields (4)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' default=<expr> ondelete='cascade' required=True string='Jira Backend'
  • jira_key Char
    default=<expr>
  • jira_project_id Many2one → jira.project.project
    comodel_name='jira.project.project' ondelete='cascade'
  • project_id Many2one → project.project
    comodel_name='project.project' default=<expr> name='Project' ondelete='cascade' required=True
Public methods (5)
  • add_all_issue_types(self)
  • check_jira_key(self)
    @api.constrains('jira_key')
  • state_exit_export_config(self)
  • state_exit_issue_types(self)
  • state_exit_start(self)

New fields (2)
  • jira_bind_ids One2many → jira.project.project
    comodel_name='jira.project.project' context={'active_test': False} copy=False inverse_name='odoo_id' string='Project Bindings'
  • jira_key Char
    compute='_compute_jira_key' string='JIRA Key'
Public methods (2)
  • create_and_link_jira(self)
    @api.multi
  • name_get(self)
    @api.multi

New fields (6)
  • jira_bind_ids One2many → jira.project.task
    comodel_name='jira.project.task' context={'active_test': False} copy=False inverse_name='odoo_id' string='Task Bindings'
  • jira_compound_key Char
    compute='_compute_jira_compound_key' store=True string='JIRA Key'
  • jira_epic_link_task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_jira_epic_link_task_id' store=True string='JIRA Epic'
  • jira_issue_type Char
    compute='_compute_jira_issue_type' store=True string='JIRA Issue Type'
  • jira_issue_url Char
    compute='_compute_jira_issue_url' string='JIRA issue'
  • jira_parent_task_id Many2one → project.task
    comodel_name='project.task' compute='_compute_jira_parent_task_id' store=True string='JIRA Parent'
Public methods (1)
  • name_get(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • merge_tasks(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • related_action_jira_link(self)
    @api.multi
    Open a jira url for an issue

New fields (1)
  • jira_bind_ids One2many → jira.res.users
    comodel_name='jira.res.users' context={'active_test': False} copy=False inverse_name='odoo_id' string='User Bindings'
Public methods (2)
  • button_link_with_jira(self)
    @api.multi
  • link_with_jira(self, backends=None, raise_if_mismatch=False)
    @api.multi

New fields (5)
  • backend_id Many2one → jira.backend
    comodel_name='jira.backend' domain="[('id', 'in', linked_backend_ids)]" ondelete='cascade' required=True string='Jira Backend'
  • jira_key Char
    required=True string='JIRA Key'
  • jira_task_id Many2one → jira.project.task
    comodel_name='jira.project.task' ondelete='cascade'
  • linked_backend_ids Many2many → jira.backend
    comodel_name='jira.backend'
  • task_id Many2one → project.task
    comodel_name='project.task' name='Task' ondelete='cascade' required=True
Public methods (2)
  • default_get(self, fields)
    @api.model
  • state_exit_start(self)