From 2edaecae686376688541328f1332eb2d1d1c238d Mon Sep 17 00:00:00 2001
From: Patrick Tombez
Date: Tue, 29 Jan 2019 15:50:25 +0100
Subject: [PATCH 01/19] Add connector_jira_servicedesk
Map projects by external_id + set of jira orgs
Project bindings now can be assigned to one or more jira organizations.
The binding for the project accept an additional argument for
organizations. A task will be linked with the project having the exact
same set of organizations that it has, or fallback to a project without
organization.
A constraint ensures that you cannot have several projects with the same
set of organizations or 2 projects without organization.
The link wizard has a new step to select the organization.
The REST API for Serviced Desk is a different one.
The former code was based on https://github.com/pycontribs/jira/pull/388
which is closed and unmaintained. We only need to read the organizations
from the servicedesk REST API and the local code is minimal.
We can now use the normal jira library.
---
connector_jira_servicedesk/__init__.py | 1 +
connector_jira_servicedesk/__manifest__.py | 20 +++++
connector_jira_servicedesk/models/__init__.py | 5 ++
.../models/account_analytic_line/__init__.py | 1 +
.../models/account_analytic_line/importer.py | 16 ++++
.../models/jira_backend/__init__.py | 1 +
.../models/jira_backend/common.py | 50 +++++++++++++
.../models/jira_organization/__init__.py | 3 +
.../models/jira_organization/adapter.py | 61 +++++++++++++++
.../models/jira_organization/common.py | 30 ++++++++
.../models/jira_organization/importer.py | 36 +++++++++
.../models/project_project/__init__.py | 3 +
.../models/project_project/binder.py | 74 +++++++++++++++++++
.../models/project_project/common.py | 49 ++++++++++++
.../project_project/project_link_jira.py | 34 +++++++++
.../models/project_task/__init__.py | 1 +
.../models/project_task/importer.py | 59 +++++++++++++++
.../security/ir.model.access.csv | 3 +
.../views/jira_backend_views.xml | 55 ++++++++++++++
.../views/project_link_jira_views.xml | 31 ++++++++
.../views/project_project_views.xml | 28 +++++++
21 files changed, 561 insertions(+)
create mode 100644 connector_jira_servicedesk/__init__.py
create mode 100644 connector_jira_servicedesk/__manifest__.py
create mode 100644 connector_jira_servicedesk/models/__init__.py
create mode 100644 connector_jira_servicedesk/models/account_analytic_line/__init__.py
create mode 100644 connector_jira_servicedesk/models/account_analytic_line/importer.py
create mode 100644 connector_jira_servicedesk/models/jira_backend/__init__.py
create mode 100644 connector_jira_servicedesk/models/jira_backend/common.py
create mode 100644 connector_jira_servicedesk/models/jira_organization/__init__.py
create mode 100644 connector_jira_servicedesk/models/jira_organization/adapter.py
create mode 100644 connector_jira_servicedesk/models/jira_organization/common.py
create mode 100644 connector_jira_servicedesk/models/jira_organization/importer.py
create mode 100644 connector_jira_servicedesk/models/project_project/__init__.py
create mode 100644 connector_jira_servicedesk/models/project_project/binder.py
create mode 100644 connector_jira_servicedesk/models/project_project/common.py
create mode 100644 connector_jira_servicedesk/models/project_project/project_link_jira.py
create mode 100644 connector_jira_servicedesk/models/project_task/__init__.py
create mode 100644 connector_jira_servicedesk/models/project_task/importer.py
create mode 100644 connector_jira_servicedesk/security/ir.model.access.csv
create mode 100644 connector_jira_servicedesk/views/jira_backend_views.xml
create mode 100644 connector_jira_servicedesk/views/project_link_jira_views.xml
create mode 100644 connector_jira_servicedesk/views/project_project_views.xml
diff --git a/connector_jira_servicedesk/__init__.py b/connector_jira_servicedesk/__init__.py
new file mode 100644
index 00000000..0650744f
--- /dev/null
+++ b/connector_jira_servicedesk/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/connector_jira_servicedesk/__manifest__.py b/connector_jira_servicedesk/__manifest__.py
new file mode 100644
index 00000000..cbfef064
--- /dev/null
+++ b/connector_jira_servicedesk/__manifest__.py
@@ -0,0 +1,20 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+{
+ 'name': 'JIRA Connector ServiceDesk',
+ 'version': '11.0.1.0.0',
+ 'author': 'Camptocamp,Odoo Community Association (OCA)',
+ 'license': 'AGPL-3',
+ 'category': 'Connector',
+ 'depends': [
+ 'connector_jira',
+ ],
+ 'website': 'https://www.camptocamp.com',
+ 'data': [
+ 'views/jira_backend_views.xml',
+ 'views/project_project_views.xml',
+ 'views/project_link_jira_views.xml',
+ 'security/ir.model.access.csv',
+ ],
+ 'installable': True,
+}
diff --git a/connector_jira_servicedesk/models/__init__.py b/connector_jira_servicedesk/models/__init__.py
new file mode 100644
index 00000000..6b2bb84b
--- /dev/null
+++ b/connector_jira_servicedesk/models/__init__.py
@@ -0,0 +1,5 @@
+from . import account_analytic_line
+from . import jira_backend
+from . import project_project
+from . import jira_organization
+from . import project_task
diff --git a/connector_jira_servicedesk/models/account_analytic_line/__init__.py b/connector_jira_servicedesk/models/account_analytic_line/__init__.py
new file mode 100644
index 00000000..35099a47
--- /dev/null
+++ b/connector_jira_servicedesk/models/account_analytic_line/__init__.py
@@ -0,0 +1 @@
+from . import importer
diff --git a/connector_jira_servicedesk/models/account_analytic_line/importer.py b/connector_jira_servicedesk/models/account_analytic_line/importer.py
new file mode 100644
index 00000000..b8004751
--- /dev/null
+++ b/connector_jira_servicedesk/models/account_analytic_line/importer.py
@@ -0,0 +1,16 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.component.core import Component
+
+
+class AnalyticLineImporter(Component):
+ _inherit = 'jira.analytic.line.importer'
+
+ @property
+ def _issue_fields_to_read(self):
+ issue_fields = super()._issue_fields_to_read
+ organization_field_name = self.backend_record.organization_field_name
+ if not organization_field_name:
+ return issue_fields
+ return issue_fields + [organization_field_name]
diff --git a/connector_jira_servicedesk/models/jira_backend/__init__.py b/connector_jira_servicedesk/models/jira_backend/__init__.py
new file mode 100644
index 00000000..e4193cf0
--- /dev/null
+++ b/connector_jira_servicedesk/models/jira_backend/__init__.py
@@ -0,0 +1 @@
+from . import common
diff --git a/connector_jira_servicedesk/models/jira_backend/common.py b/connector_jira_servicedesk/models/jira_backend/common.py
new file mode 100644
index 00000000..1cf70d6f
--- /dev/null
+++ b/connector_jira_servicedesk/models/jira_backend/common.py
@@ -0,0 +1,50 @@
+# Copyright 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import models, api, fields
+
+
+class JiraBackend(models.Model):
+ _inherit = 'jira.backend'
+
+ organization_ids = fields.One2many(
+ comodel_name='jira.organization',
+ inverse_name='backend_id',
+ string='Organizations',
+ readonly=True,
+ )
+
+ organization_field_name = fields.Char(
+ string='Organization Field',
+ help="The 'Organization' field on JIRA is a custom field. "
+ "The name of the field is something like 'customfield_10002'. "
+ )
+
+ @api.model
+ def _selection_project_template(self):
+ selection = super()._selection_project_template()
+ selection += [
+ ('Basic', 'Basic (Service Desk)'),
+ ('IT Service Desk', 'IT Service Desk (Service Desk)'),
+ ('Customer service', 'Customer Service (Service Desk)'),
+ ]
+ return selection
+
+ @api.multi
+ def import_organization(self):
+ self.env['jira.organization'].import_batch(self)
+ return True
+
+ @api.multi
+ def activate_organization(self):
+ """Get organization field name from JIRA web-service"""
+ self.ensure_one()
+ org_field = 'com.atlassian.servicedesk:sd-customer-organizations'
+ with self.work_on('jira.backend') as work:
+ adapter = work.component(usage='backend.adapter')
+ jira_fields = adapter.list_fields()
+ for field in jira_fields:
+ custom_ref = field.get('schema', {}).get('custom')
+ if custom_ref == org_field:
+ self.organization_field_name = field['id']
+ break
diff --git a/connector_jira_servicedesk/models/jira_organization/__init__.py b/connector_jira_servicedesk/models/jira_organization/__init__.py
new file mode 100644
index 00000000..c6fe6b53
--- /dev/null
+++ b/connector_jira_servicedesk/models/jira_organization/__init__.py
@@ -0,0 +1,3 @@
+from . import common
+from . import importer
+from . import adapter
diff --git a/connector_jira_servicedesk/models/jira_organization/adapter.py b/connector_jira_servicedesk/models/jira_organization/adapter.py
new file mode 100644
index 00000000..6d558462
--- /dev/null
+++ b/connector_jira_servicedesk/models/jira_organization/adapter.py
@@ -0,0 +1,61 @@
+# Copyright 2018 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import jira
+from jira.utils import CaseInsensitiveDict
+
+from odoo.addons.component.core import Component
+
+
+class Organization(jira.resources.Resource):
+ """A Service Desk Organization."""
+
+ def __init__(self, options, session, raw=None):
+ super().__init__(
+ 'organization/{0}',
+ options,
+ session,
+ '{server}/rest/servicedeskapi/{path}'
+ )
+ if raw:
+ self._parse_raw(raw)
+
+
+class OrganizationAdapter(Component):
+ _name = 'jira.organization.adapter'
+ _inherit = ['jira.webservice.adapter']
+ _apply_on = ['jira.organization']
+
+ # The Service Desk REST API returns an error if this header
+ # is not used. The API may change so they want an agreement for
+ # the client about this.
+ _desk_headers = CaseInsensitiveDict({'X-ExperimentalApi': 'opt-in'})
+
+ def __init__(self, work_context):
+ super().__init__(work_context)
+ self.client._session.headers.update(self._desk_headers)
+
+ def read(self, id_):
+ organization = Organization(
+ self.client._options,
+ self.client._session
+ )
+ organization.find(id_)
+ return organization.raw
+
+ def search(self):
+ base = (self.client._options['server'] +
+ '/rest/servicedeskapi/organization')
+ # By default, a GET on the REST API returns only one page with the
+ # first 50 rows. Here, client is an instance of the jira library's JIRA
+ # class, which provides a _fetch_pages method to fetch pages.
+ # maxResults=False means it will try to get all pages.
+ orgs = self.client._fetch_pages(
+ Organization,
+ 'values',
+ 'organization',
+ # limit to False will get them in batch
+ maxResults=False,
+ base=base
+ )
+ return [org.id for org in orgs]
diff --git a/connector_jira_servicedesk/models/jira_organization/common.py b/connector_jira_servicedesk/models/jira_organization/common.py
new file mode 100644
index 00000000..255ce52c
--- /dev/null
+++ b/connector_jira_servicedesk/models/jira_organization/common.py
@@ -0,0 +1,30 @@
+# Copyright 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from odoo import fields, models
+from odoo.addons.queue_job.job import job
+
+
+class JiraOrganization(models.Model):
+ _name = 'jira.organization'
+ _inherit = 'jira.binding'
+ _description = 'Jira Organization'
+
+ name = fields.Char('Name', required=True, readonly=True)
+ backend_id = fields.Many2one(
+ ondelete='cascade'
+ )
+ project_ids = fields.Many2many(
+ comodel_name='jira.project.project'
+ )
+
+ @job(default_channel='root.connector_jira.import')
+ def import_batch(self, backend, from_date=None, to_date=None):
+ """ Prepare a batch import of organization from Jira
+
+ from_date and to_date are ignored for organization
+ """
+ with backend.work_on(self._name) as work:
+ importer = work.component(usage='batch.importer')
+ importer.run()
diff --git a/connector_jira_servicedesk/models/jira_organization/importer.py b/connector_jira_servicedesk/models/jira_organization/importer.py
new file mode 100644
index 00000000..92120070
--- /dev/null
+++ b/connector_jira_servicedesk/models/jira_organization/importer.py
@@ -0,0 +1,36 @@
+# Copyright 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.connector.components.mapper import mapping
+
+from odoo.addons.component.core import Component
+
+
+class OrganizationMapper(Component):
+ _name = 'jira.organization.mapper'
+ _inherit = ['base.import.mapper']
+ _apply_on = 'jira.organization'
+
+ direct = [
+ ('name', 'name'),
+ ]
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+
+class OrganizationBatchImporter(Component):
+ """ Import the Jira Organizations
+
+ For every id in in the list of organizations, a direct import is done.
+ """
+ _name = 'jira.organization.batch.importer'
+ _inherit = 'jira.direct.batch.importer'
+ _apply_on = ['jira.organization']
+
+ def run(self):
+ """ Run the synchronization """
+ record_ids = self.backend_adapter.search()
+ for record_id in record_ids:
+ self._import_record(record_id)
diff --git a/connector_jira_servicedesk/models/project_project/__init__.py b/connector_jira_servicedesk/models/project_project/__init__.py
new file mode 100644
index 00000000..87c19778
--- /dev/null
+++ b/connector_jira_servicedesk/models/project_project/__init__.py
@@ -0,0 +1,3 @@
+from . import common
+from . import binder
+from . import project_link_jira
diff --git a/connector_jira_servicedesk/models/project_project/binder.py b/connector_jira_servicedesk/models/project_project/binder.py
new file mode 100644
index 00000000..103807c4
--- /dev/null
+++ b/connector_jira_servicedesk/models/project_project/binder.py
@@ -0,0 +1,74 @@
+# Copyright 2016-2018 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import logging
+
+from odoo import tools
+from odoo.addons.component.core import Component
+
+_logger = logging.getLogger(__name__)
+
+
+class JiraProjectBinder(Component):
+ _name = 'jira.project.binder'
+ _inherit = 'jira.binder'
+
+ _apply_on = [
+ 'jira.project.project',
+ ]
+
+ def to_internal(self, external_id, unwrap=False, organizations=None):
+ """ Give the Odoo recordset for an external ID
+
+ When organizations are passed (ids are odoo ids), the binder
+ will return:
+
+ * a project linked with JIRA with the exact set of organizations
+ * if no project has the exact same set, a project linked without
+ organization set on the binding
+
+ If no organizations are passed, only project bindings
+ without organization match.
+
+ :param external_id: external ID for which we want
+ the Odoo ID
+ :param unwrap: if True, returns the normal record
+ else return the binding record
+ :param organizations: jira.organization recordset
+ :return: a recordset, depending on the value of unwrap,
+ or an empty recordset if the external_id is not mapped
+ :rtype: recordset
+ """
+ domain = [
+ (self._external_field, '=', tools.ustr(external_id)),
+ (self._backend_field, '=', self.backend_record.id),
+ ]
+ if not organizations:
+ domain.append(
+ ('organization_ids', '=', False),
+ )
+ candidates = self.model.with_context(active_test=False).search(domain)
+ if organizations:
+ fallback = self.model.browse()
+ binding = self.model.browse()
+ for candidate in candidates:
+ if not candidate.organization_ids:
+ fallback = candidate
+ continue
+
+ if candidate.organization_ids == organizations:
+ binding = candidate
+ break
+ if not binding:
+ binding = fallback
+ else:
+ binding = candidates
+
+ if not binding:
+ if unwrap:
+ return self.model.browse()[self._odoo_field]
+ return self.model.browse()
+ binding.ensure_one()
+ if unwrap:
+ binding = binding[self._odoo_field]
+ return binding
diff --git a/connector_jira_servicedesk/models/project_project/common.py b/connector_jira_servicedesk/models/project_project/common.py
new file mode 100644
index 00000000..857a9de2
--- /dev/null
+++ b/connector_jira_servicedesk/models/project_project/common.py
@@ -0,0 +1,49 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import api, fields, models, exceptions, _
+
+
+class JiraProjectBaseFields(models.AbstractModel):
+ """JIRA Project Base fields
+
+ Shared by the binding jira.project.project
+ and the wizard to link/create a JIRA project
+ """
+ _inherit = 'jira.project.base.mixin'
+
+ organization_ids = fields.Many2many(
+ comodel_name='jira.organization',
+ string='Organization(s) on Jira',
+ domain="[('backend_id', '=', backend_id)]",
+ help="If organizations are set, a task will be "
+ "added to the project only if the project AND "
+ "the organization match with the selection."
+ )
+
+
+class JiraProjectProject(models.Model):
+ _inherit = 'jira.project.project'
+
+ @api.constrains('backend_id', 'external_id', 'organization_ids')
+ @api.multi
+ def _constrains_jira_uniq(self):
+ for binding in self:
+ same_link_bindings = self.search([
+ ('id', '!=', self.id),
+ ('backend_id', '=', self.backend_id.id),
+ ('external_id', '=', self.external_id),
+ ])
+ for other in same_link_bindings:
+ my_orgs = binding.organization_ids
+ other_orgs = other.organization_ids
+ if not my_orgs and not other_orgs:
+ raise exceptions.ValidationError(_(
+ "The project %s is already linked with the same"
+ " JIRA project without organization."
+ ) % (other.display_name))
+ if set(my_orgs.ids) == set(other_orgs.ids):
+ raise exceptions.ValidationError(_(
+ "The project %s is already linked with this "
+ "JIRA project and similar organizations."
+ ) % (other.display_name))
diff --git a/connector_jira_servicedesk/models/project_project/project_link_jira.py b/connector_jira_servicedesk/models/project_project/project_link_jira.py
new file mode 100644
index 00000000..e6b4f779
--- /dev/null
+++ b/connector_jira_servicedesk/models/project_project/project_link_jira.py
@@ -0,0 +1,34 @@
+# Copyright 2018 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import logging
+
+from odoo import api, models
+
+_logger = logging.getLogger(__name__)
+
+
+class ProjectLinkJira(models.TransientModel):
+ _inherit = 'project.link.jira'
+
+ @api.model
+ def _selection_state(self):
+ states = super()._selection_state()
+ states.append(('link_organizations', 'Link Organizations'))
+ return states
+
+ def state_exit_start(self):
+ if self.sync_action == 'link':
+ self.state = 'link_organizations'
+ else:
+ super().state_exit_start()
+
+ def state_exit_link_organizations(self):
+ if not self.jira_project_id:
+ self._link_binding()
+ self.state = 'issue_types'
+
+ def _prepare_link_binding_values(self, jira_project):
+ values = super()._prepare_link_binding_values(jira_project)
+ values['organization_ids'] = [(6, 0, self.organization_ids.ids)]
+ return values
diff --git a/connector_jira_servicedesk/models/project_task/__init__.py b/connector_jira_servicedesk/models/project_task/__init__.py
new file mode 100644
index 00000000..35099a47
--- /dev/null
+++ b/connector_jira_servicedesk/models/project_task/__init__.py
@@ -0,0 +1 @@
+from . import importer
diff --git a/connector_jira_servicedesk/models/project_task/importer.py b/connector_jira_servicedesk/models/project_task/importer.py
new file mode 100644
index 00000000..76d98201
--- /dev/null
+++ b/connector_jira_servicedesk/models/project_task/importer.py
@@ -0,0 +1,59 @@
+# Copyright 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.component.core import Component
+
+
+class ProjectTaskProjectMatcher(Component):
+ _inherit = 'jira.task.project.matcher'
+
+ def find_project_binding(self, jira_task_data, unwrap=False):
+ organizations = self.env['jira.organization'].browse()
+ jira_org_ids = self.component(
+ usage='organization.from.task'
+ ).get_jira_org_ids(jira_task_data)
+ binder = self.binder_for('jira.organization')
+ for jira_org_id in jira_org_ids:
+ organizations |= binder.to_internal(jira_org_id)
+ jira_project_id = jira_task_data['fields']['project']['id']
+ binder = self.binder_for('jira.project.project')
+ return binder.to_internal(
+ jira_project_id,
+ unwrap=unwrap,
+ organizations=organizations,
+ )
+
+
+class OrganizationsFromTask(Component):
+ _name = 'jira.organization.from.task'
+ _inherit = ['jira.base']
+ _usage = 'organization.from.task'
+
+ def get_jira_org_ids(self, jira_task_data):
+ organization_field_name = self.backend_record.organization_field_name
+ if not organization_field_name:
+ return []
+
+ task_fields = jira_task_data.get('fields', {})
+ return [
+ rec['id'] for rec in
+ task_fields.get(organization_field_name) or []
+ ]
+
+
+class ProjectTaskImporter(Component):
+ _inherit = 'jira.project.task.importer'
+
+ def _get_external_data(self):
+ """Return the raw Jira data for ``self.external_id``"""
+ result = super()._get_external_data()
+ return result
+
+ def _import_dependencies(self):
+ """Import the dependencies for the record"""
+ super()._import_dependencies()
+ jira_org_ids = self.component(
+ usage='organization.from.task'
+ ).get_jira_org_ids(self.external_record)
+ for jira_org_id in jira_org_ids:
+ self._import_dependency(jira_org_id, 'jira.organization')
diff --git a/connector_jira_servicedesk/security/ir.model.access.csv b/connector_jira_servicedesk/security/ir.model.access.csv
new file mode 100644
index 00000000..58bb1663
--- /dev/null
+++ b/connector_jira_servicedesk/security/ir.model.access.csv
@@ -0,0 +1,3 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+access_jira_organization,access_jira_organization,model_jira_organization,base.group_user,1,0,0,0
+access_jira_organization_manager,access_jira_organization connector manager,model_jira_organization,connector.group_connector_manager,1,1,1,1
diff --git a/connector_jira_servicedesk/views/jira_backend_views.xml b/connector_jira_servicedesk/views/jira_backend_views.xml
new file mode 100644
index 00000000..88f3fc81
--- /dev/null
+++ b/connector_jira_servicedesk/views/jira_backend_views.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+ jira.backend.form
+ jira.backend
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Activate the synchronization of the Organization field.
+ Only on JIRA ServiceDesk. The field contains the name of
+ the JIRA custom field that contains the Organization.
+
+
+
+
+
+
diff --git a/connector_jira_servicedesk/views/project_link_jira_views.xml b/connector_jira_servicedesk/views/project_link_jira_views.xml
new file mode 100644
index 00000000..f59d9857
--- /dev/null
+++ b/connector_jira_servicedesk/views/project_link_jira_views.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ project.link.jira.form
+ project.link.jira
+
+
+
+
+
+
+
+ The organizations you choose will define how the tasks and worklogs are attached to the project.
+ If a task is assigned to an organization, it will be assigned
+ to an Odoo project linked to the JIRA project only if the
+ organization match. If no project with an organization exists,
+ the task will be assigned to a linked project without organization.
+ If no such project exists in Odoo, the task is ignored.
+
+
+
+
+
+
+
+
+
diff --git a/connector_jira_servicedesk/views/project_project_views.xml b/connector_jira_servicedesk/views/project_project_views.xml
new file mode 100644
index 00000000..aecfe6e6
--- /dev/null
+++ b/connector_jira_servicedesk/views/project_project_views.xml
@@ -0,0 +1,28 @@
+
+
+
+
+ jira.project.project.form
+ jira.project.project
+
+
+
+
+
+
+
+
+
+ jira.project.project.tree
+ jira.project.project
+
+
+
+
+
+
+
+
+
From 3fe4b9ed51d3538ba2a33749ffb7aa6bb3211ab9 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Thu, 31 Jan 2019 16:40:04 +0100
Subject: [PATCH 02/19] Update documentation
---
connector_jira_servicedesk/README.rst | 47 +++++++++++++++++++
connector_jira_servicedesk/__manifest__.py | 4 +-
.../models/jira_backend/common.py | 2 +-
.../models/jira_organization/adapter.py | 2 +-
.../models/jira_organization/common.py | 2 +-
.../models/jira_organization/importer.py | 2 +-
.../models/project_project/binder.py | 2 +-
.../project_project/project_link_jira.py | 2 +-
.../models/project_task/importer.py | 2 +-
9 files changed, 56 insertions(+), 9 deletions(-)
create mode 100644 connector_jira_servicedesk/README.rst
diff --git a/connector_jira_servicedesk/README.rst b/connector_jira_servicedesk/README.rst
new file mode 100644
index 00000000..f64c9954
--- /dev/null
+++ b/connector_jira_servicedesk/README.rst
@@ -0,0 +1,47 @@
+JIRA Connector - Service Desk Extension
+=======================================
+
+Setup
+-----
+
+A new button is added on the JIRA backend, to import the organizations
+of JIRA. Before, be sure to use the button "Configure Organization Link"
+in the "Advanced Configuration" tab.
+
+
+Features
+^^^^^^^^
+
+Organizations
+-------------
+
+On Service Desk, you can share projects with Organizations.
+You may want to use different Odoo projects according to the
+organizations. This is what this extension allows.
+
+Example:
+
+* You have one Service Desk project named "Earth Project" with key EARTH
+* On JIRA SD You share this project with organizations Themis and Rhea
+* However on Odoo, you want to track the hours differently for Themis and Rhea
+
+Steps on Odoo:
+
+* Create a Themis project, use the "Link with JIRA" action with the key EARTH
+* When you hit Next, the organization(s) you want to link must be set
+* Repeat with another project for Rhea
+
+If the project binding for the synchronization already exists, you can still edit it in the settings of the project and change the organizations.
+
+When a task or worklog is imported, it will search for a project having
+exactly the same set of organizations than the one of the task. If no
+project with the same set is found and you have a project configured
+without organization, the task will be linked to it.
+
+This means that, on Odoo, you can have shared project altogether with dedicated
+ones, while you only have one project on JIRA.
+
+* Tasks with org "Themis" will be attached to this project
+* Tasks with org "Rhea" will be attached to this project
+* Tasks with orgs "Themis" and "Rhea" will be attached to another project "Themis and Rhea"
+* The rest of the tasks will be attached to a fourth project (configured without organizations)
diff --git a/connector_jira_servicedesk/__manifest__.py b/connector_jira_servicedesk/__manifest__.py
index cbfef064..ff4740d6 100644
--- a/connector_jira_servicedesk/__manifest__.py
+++ b/connector_jira_servicedesk/__manifest__.py
@@ -1,7 +1,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
{
- 'name': 'JIRA Connector ServiceDesk',
+ 'name': 'JIRA Connector - Service Desk Extension',
'version': '11.0.1.0.0',
'author': 'Camptocamp,Odoo Community Association (OCA)',
'license': 'AGPL-3',
@@ -9,7 +9,7 @@
'depends': [
'connector_jira',
],
- 'website': 'https://www.camptocamp.com',
+ 'website': 'https://github.com/camptocamp/connector-jira',
'data': [
'views/jira_backend_views.xml',
'views/project_project_views.xml',
diff --git a/connector_jira_servicedesk/models/jira_backend/common.py b/connector_jira_servicedesk/models/jira_backend/common.py
index 1cf70d6f..f7f5167c 100644
--- a/connector_jira_servicedesk/models/jira_backend/common.py
+++ b/connector_jira_servicedesk/models/jira_backend/common.py
@@ -1,4 +1,4 @@
-# Copyright 2016 Camptocamp SA
+# Copyright 2016-2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import models, api, fields
diff --git a/connector_jira_servicedesk/models/jira_organization/adapter.py b/connector_jira_servicedesk/models/jira_organization/adapter.py
index 6d558462..8053e57f 100644
--- a/connector_jira_servicedesk/models/jira_organization/adapter.py
+++ b/connector_jira_servicedesk/models/jira_organization/adapter.py
@@ -1,4 +1,4 @@
-# Copyright 2018 Camptocamp SA
+# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import jira
diff --git a/connector_jira_servicedesk/models/jira_organization/common.py b/connector_jira_servicedesk/models/jira_organization/common.py
index 255ce52c..6ceb460b 100644
--- a/connector_jira_servicedesk/models/jira_organization/common.py
+++ b/connector_jira_servicedesk/models/jira_organization/common.py
@@ -1,4 +1,4 @@
-# Copyright 2016 Camptocamp SA
+# Copyright 2016-2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
diff --git a/connector_jira_servicedesk/models/jira_organization/importer.py b/connector_jira_servicedesk/models/jira_organization/importer.py
index 92120070..d992a05f 100644
--- a/connector_jira_servicedesk/models/jira_organization/importer.py
+++ b/connector_jira_servicedesk/models/jira_organization/importer.py
@@ -1,4 +1,4 @@
-# Copyright 2016 Camptocamp SA
+# Copyright 2016-2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.connector.components.mapper import mapping
diff --git a/connector_jira_servicedesk/models/project_project/binder.py b/connector_jira_servicedesk/models/project_project/binder.py
index 103807c4..e9a70ba9 100644
--- a/connector_jira_servicedesk/models/project_project/binder.py
+++ b/connector_jira_servicedesk/models/project_project/binder.py
@@ -1,4 +1,4 @@
-# Copyright 2016-2018 Camptocamp SA
+# Copyright 2016-2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import logging
diff --git a/connector_jira_servicedesk/models/project_project/project_link_jira.py b/connector_jira_servicedesk/models/project_project/project_link_jira.py
index e6b4f779..b196ab72 100644
--- a/connector_jira_servicedesk/models/project_project/project_link_jira.py
+++ b/connector_jira_servicedesk/models/project_project/project_link_jira.py
@@ -1,4 +1,4 @@
-# Copyright 2018 Camptocamp SA
+# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import logging
diff --git a/connector_jira_servicedesk/models/project_task/importer.py b/connector_jira_servicedesk/models/project_task/importer.py
index 76d98201..1392e551 100644
--- a/connector_jira_servicedesk/models/project_task/importer.py
+++ b/connector_jira_servicedesk/models/project_task/importer.py
@@ -1,4 +1,4 @@
-# Copyright 2016 Camptocamp SA
+# Copyright 2016-2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
From 3cc80d114b8ba48a9fa563044c479d15bc8aeca6 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Thu, 7 Feb 2019 13:23:40 +0100
Subject: [PATCH 03/19] Fix project binding unique constraint
We should be able to have 2 bindings without external_id (not yet
exported)
---
.../models/project_project/common.py | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/connector_jira_servicedesk/models/project_project/common.py b/connector_jira_servicedesk/models/project_project/common.py
index 857a9de2..5bc62672 100644
--- a/connector_jira_servicedesk/models/project_project/common.py
+++ b/connector_jira_servicedesk/models/project_project/common.py
@@ -29,10 +29,12 @@ class JiraProjectProject(models.Model):
@api.multi
def _constrains_jira_uniq(self):
for binding in self:
+ if not binding.external_id:
+ continue
same_link_bindings = self.search([
- ('id', '!=', self.id),
- ('backend_id', '=', self.backend_id.id),
- ('external_id', '=', self.external_id),
+ ('id', '!=', binding.id),
+ ('backend_id', '=', binding.backend_id.id),
+ ('external_id', '=', binding.external_id),
])
for other in same_link_bindings:
my_orgs = binding.organization_ids
From 923a2a30866973dc6200e098f8ada7420a368e66 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Tue, 26 Mar 2019 14:17:38 +0100
Subject: [PATCH 04/19] Add is_master on jira project bindings
---
.../models/project_project/binder.py | 7 +------
.../models/project_project/common.py | 9 +++++++++
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/connector_jira_servicedesk/models/project_project/binder.py b/connector_jira_servicedesk/models/project_project/binder.py
index e9a70ba9..533bf494 100644
--- a/connector_jira_servicedesk/models/project_project/binder.py
+++ b/connector_jira_servicedesk/models/project_project/binder.py
@@ -10,12 +10,7 @@
class JiraProjectBinder(Component):
- _name = 'jira.project.binder'
- _inherit = 'jira.binder'
-
- _apply_on = [
- 'jira.project.project',
- ]
+ _inherit = 'jira.project.binder'
def to_internal(self, external_id, unwrap=False, organizations=None):
""" Give the Odoo recordset for an external ID
diff --git a/connector_jira_servicedesk/models/project_project/common.py b/connector_jira_servicedesk/models/project_project/common.py
index 5bc62672..356917d5 100644
--- a/connector_jira_servicedesk/models/project_project/common.py
+++ b/connector_jira_servicedesk/models/project_project/common.py
@@ -28,6 +28,15 @@ class JiraProjectProject(models.Model):
@api.constrains('backend_id', 'external_id', 'organization_ids')
@api.multi
def _constrains_jira_uniq(self):
+ """Modify the base constraint by adding organizations
+
+ Rather than checking unicity of backend+jira id, we validate
+ backend+jira id+organizations ids.
+
+ It allows to have different odoo projects depending of the
+ organization used on Jira.
+
+ """
for binding in self:
if not binding.external_id:
continue
From b45f53c2375b56a34cd1c5783cad66dc0e6cc4fa Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Tue, 26 Mar 2019 16:46:49 +0100
Subject: [PATCH 05/19] Allow to have one project binding per project type
The unicity constraint (backend_id, odoo_id) on jira.backend.backend is
relaxed: it now allows one binding of each type.
The reason for this is:
* supporting several projects of different types is a requirements (eg.
1 service desk and 1 software)
* but if we implement new features like "if I create a task it is
pushed to Jira", with different projects we would not know where to
push them
Using this constraint, we'll be able to focus new export features by
project type.
---
connector_jira_servicedesk/models/project_project/common.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/connector_jira_servicedesk/models/project_project/common.py b/connector_jira_servicedesk/models/project_project/common.py
index 356917d5..bb75fb99 100644
--- a/connector_jira_servicedesk/models/project_project/common.py
+++ b/connector_jira_servicedesk/models/project_project/common.py
@@ -25,6 +25,12 @@ class JiraProjectBaseFields(models.AbstractModel):
class JiraProjectProject(models.Model):
_inherit = 'jira.project.project'
+ @api.model
+ def _selection_project_type(self):
+ selection = super()._selection_project_type()
+ selection.append(('service_desk', 'Service Desk'))
+ return selection
+
@api.constrains('backend_id', 'external_id', 'organization_ids')
@api.multi
def _constrains_jira_uniq(self):
From e44b9ba42e9b62dbf2e39ba38768925aabbb4a3e Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Wed, 3 Apr 2019 10:39:22 +0200
Subject: [PATCH 06/19] Prevent duplicates with inactive projects
The constraint did not look for inactive projects, which
makes the import fail later because it finds several projects
for the same task.
---
connector_jira_servicedesk/models/project_project/binder.py | 1 +
connector_jira_servicedesk/models/project_project/common.py | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/connector_jira_servicedesk/models/project_project/binder.py b/connector_jira_servicedesk/models/project_project/binder.py
index 533bf494..fb9bdf35 100644
--- a/connector_jira_servicedesk/models/project_project/binder.py
+++ b/connector_jira_servicedesk/models/project_project/binder.py
@@ -63,6 +63,7 @@ def to_internal(self, external_id, unwrap=False, organizations=None):
if unwrap:
return self.model.browse()[self._odoo_field]
return self.model.browse()
+
binding.ensure_one()
if unwrap:
binding = binding[self._odoo_field]
diff --git a/connector_jira_servicedesk/models/project_project/common.py b/connector_jira_servicedesk/models/project_project/common.py
index bb75fb99..0e790045 100644
--- a/connector_jira_servicedesk/models/project_project/common.py
+++ b/connector_jira_servicedesk/models/project_project/common.py
@@ -46,7 +46,7 @@ def _constrains_jira_uniq(self):
for binding in self:
if not binding.external_id:
continue
- same_link_bindings = self.search([
+ same_link_bindings = self.with_context(active_test=False).search([
('id', '!=', binding.id),
('backend_id', '=', binding.backend_id.id),
('external_id', '=', binding.external_id),
From 7393fb562cdc04f9a50622f369745e60a33afe00 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Wed, 3 Apr 2019 12:38:13 +0200
Subject: [PATCH 07/19] Handle 404 errors when importing records
When a record does not exist on Jira:
* the job is done instead of failed
* a result on the job tells about the missing record
* the binding is deleted on Odoo
* for worklogs, the analytic line is deleted as well
---
connector_jira_servicedesk/models/jira_organization/adapter.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/connector_jira_servicedesk/models/jira_organization/adapter.py b/connector_jira_servicedesk/models/jira_organization/adapter.py
index 8053e57f..16adbd8f 100644
--- a/connector_jira_servicedesk/models/jira_organization/adapter.py
+++ b/connector_jira_servicedesk/models/jira_organization/adapter.py
@@ -40,7 +40,8 @@ def read(self, id_):
self.client._options,
self.client._session
)
- organization.find(id_)
+ with self.handle_404():
+ organization.find(id_)
return organization.raw
def search(self):
From f95515fea0988230242eb89c4da9ef7561f5d9df Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Thu, 4 Apr 2019 14:21:33 +0200
Subject: [PATCH 08/19] Make pylint-odoo happy
---
.../models/jira_organization/adapter.py | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/connector_jira_servicedesk/models/jira_organization/adapter.py b/connector_jira_servicedesk/models/jira_organization/adapter.py
index 16adbd8f..a908eb4b 100644
--- a/connector_jira_servicedesk/models/jira_organization/adapter.py
+++ b/connector_jira_servicedesk/models/jira_organization/adapter.py
@@ -1,11 +1,17 @@
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-import jira
-from jira.utils import CaseInsensitiveDict
-
+import logging
from odoo.addons.component.core import Component
+_logger = logging.getLogger(__name__)
+
+try:
+ import jira
+ from jira.utils import CaseInsensitiveDict
+except ImportError as err:
+ _logger.debug(err)
+
class Organization(jira.resources.Resource):
"""A Service Desk Organization."""
From 1ed4007af319f1dbe22e82782a2c427fe0685712 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Fri, 5 Apr 2019 16:27:12 +0200
Subject: [PATCH 09/19] Store jira's 'updated_at' field to compare with binding
We can compare the millisecond dates on both sides to see if any changes
has been done on Jira and avoid useless writes. Previously, we were
using the 'sync_date' field, which works too but will make more sync
than necessary (because the sync happens after the last jira's
updated_at value).
Fortuitously, the updated_at is also very useful for debugging purposes.
---
connector_jira_servicedesk/models/jira_organization/importer.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/connector_jira_servicedesk/models/jira_organization/importer.py b/connector_jira_servicedesk/models/jira_organization/importer.py
index d992a05f..244c445d 100644
--- a/connector_jira_servicedesk/models/jira_organization/importer.py
+++ b/connector_jira_servicedesk/models/jira_organization/importer.py
@@ -8,7 +8,7 @@
class OrganizationMapper(Component):
_name = 'jira.organization.mapper'
- _inherit = ['base.import.mapper']
+ _inherit = ['jira.import.mapper']
_apply_on = 'jira.organization'
direct = [
From c609411eca57ff3c11fa332b29ca9c989515c696 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Tue, 9 Apr 2019 09:36:00 +0200
Subject: [PATCH 10/19] Fix fetch pagination of organizations
The pagination specs of the servicedesk API are not the same than the
Jira API (respectively isLastPage vs lastPage). So the lib's
_fetch_pages does not fetch all the pages.
Optimize the requests: we get all the data at the initial call, so
the records are passed directly to "import_record" which will not do
another request.
---
.../i18n/connector_jira_servicedesk.pot | 161 ++++++++
.../models/jira_organization/adapter.py | 36 +-
.../models/jira_organization/importer.py | 6 +-
connector_jira_servicedesk/tests/__init__.py | 1 +
connector_jira_servicedesk/tests/common.py | 8 +
.../test_import_organization_batch.yaml | 387 ++++++++++++++++++
...est_import_organization_from_api_call.yaml | 333 +++++++++++++++
.../tests/test_import_organization.py | 57 +++
8 files changed, 971 insertions(+), 18 deletions(-)
create mode 100644 connector_jira_servicedesk/i18n/connector_jira_servicedesk.pot
create mode 100644 connector_jira_servicedesk/tests/__init__.py
create mode 100644 connector_jira_servicedesk/tests/common.py
create mode 100644 connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_batch.yaml
create mode 100644 connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_from_api_call.yaml
create mode 100644 connector_jira_servicedesk/tests/test_import_organization.py
diff --git a/connector_jira_servicedesk/i18n/connector_jira_servicedesk.pot b/connector_jira_servicedesk/i18n/connector_jira_servicedesk.pot
new file mode 100644
index 00000000..ad8ab5ef
--- /dev/null
+++ b/connector_jira_servicedesk/i18n/connector_jira_servicedesk.pot
@@ -0,0 +1,161 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * connector_jira_servicedesk
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: connector_jira_servicedesk
+#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+msgid "Activate the synchronization of the Organization field.\n"
+" Only on JIRA ServiceDesk. The field contains the name of\n"
+" the JIRA custom field that contains the Organization."
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+msgid "Configure Organization"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_create_date
+msgid "Created on"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_id
+msgid "ID"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,help:connector_jira_servicedesk.field_jira_project_base_mixin_organization_ids
+#: model:ir.model.fields,help:connector_jira_servicedesk.field_jira_project_project_organization_ids
+#: model:ir.model.fields,help:connector_jira_servicedesk.field_project_link_jira_organization_ids
+msgid "If organizations are set, a task will be added to the project only if the project AND the organization match with the selection."
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+msgid "Import Organizations"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model,name:connector_jira_servicedesk.model_jira_backend
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_backend_id
+msgid "Jira Backend"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model,name:connector_jira_servicedesk.model_jira_organization
+#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+msgid "Jira Organization"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model,name:connector_jira_servicedesk.model_jira_project_project
+msgid "Jira Projects"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model,name:connector_jira_servicedesk.model_project_link_jira
+msgid "Link Project with JIRA"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_name
+msgid "Name"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_backend_organization_field_name
+msgid "Organization Field"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_project_base_mixin_organization_ids
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_project_project_organization_ids
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_project_link_jira_organization_ids
+msgid "Organization(s) on Jira"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_backend_organization_ids
+#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+msgid "Organizations"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_project_ids
+msgid "Project"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+msgid "Run"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,help:connector_jira_servicedesk.field_jira_backend_organization_field_name
+msgid "The 'Organization' field on JIRA is a custom field. The name of the field is something like 'customfield_10002'. "
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.ui.view,arch_db:connector_jira_servicedesk.project_link_jira_form
+msgid "The organizations you choose will define how the tasks and worklogs are attached to the project.\n"
+" If a task is assigned to an organization, it will be assigned\n"
+" to an Odoo project linked to the JIRA project only if the\n"
+" organization match. If no project with an organization exists,\n"
+" the task will be assigned to a linked project without organization.\n"
+" If no such project exists in Odoo, the task is ignored."
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: code:addons/connector_jira_servicedesk/models/project_project/common.py:58
+#, python-format
+msgid "The project %s is already linked with the same JIRA project without organization."
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: code:addons/connector_jira_servicedesk/models/project_project/common.py:63
+#, python-format
+msgid "The project %s is already linked with this JIRA project and similar organizations."
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model,name:connector_jira_servicedesk.model_jira_project_base_mixin
+msgid "jira.project.base.mixin"
+msgstr ""
+
diff --git a/connector_jira_servicedesk/models/jira_organization/adapter.py b/connector_jira_servicedesk/models/jira_organization/adapter.py
index a908eb4b..14146b6f 100644
--- a/connector_jira_servicedesk/models/jira_organization/adapter.py
+++ b/connector_jira_servicedesk/models/jira_organization/adapter.py
@@ -36,6 +36,7 @@ class OrganizationAdapter(Component):
# is not used. The API may change so they want an agreement for
# the client about this.
_desk_headers = CaseInsensitiveDict({'X-ExperimentalApi': 'opt-in'})
+ _desk_api_path_base = '{server}/rest/servicedeskapi/{path}'
def __init__(self, work_context):
super().__init__(work_context)
@@ -51,18 +52,23 @@ def read(self, id_):
return organization.raw
def search(self):
- base = (self.client._options['server'] +
- '/rest/servicedeskapi/organization')
- # By default, a GET on the REST API returns only one page with the
- # first 50 rows. Here, client is an instance of the jira library's JIRA
- # class, which provides a _fetch_pages method to fetch pages.
- # maxResults=False means it will try to get all pages.
- orgs = self.client._fetch_pages(
- Organization,
- 'values',
- 'organization',
- # limit to False will get them in batch
- maxResults=False,
- base=base
- )
- return [org.id for org in orgs]
+ # A GET on the REST API returns only one page with the
+ # first 50 rows. Fetch all pages.
+ orgs = []
+ start = 0
+ while True:
+ result = self.client._get_json(
+ 'organization',
+ params={
+ 'start': start,
+ # 50 items per page is the maximum allowed by Jira
+ 'limit': start + 50,
+ },
+ base=self._desk_api_path_base,
+ )
+ start += 50
+ orgs += result['values']
+ if result['isLastPage']:
+ break
+
+ return orgs
diff --git a/connector_jira_servicedesk/models/jira_organization/importer.py b/connector_jira_servicedesk/models/jira_organization/importer.py
index 244c445d..ac0466ef 100644
--- a/connector_jira_servicedesk/models/jira_organization/importer.py
+++ b/connector_jira_servicedesk/models/jira_organization/importer.py
@@ -31,6 +31,6 @@ class OrganizationBatchImporter(Component):
def run(self):
""" Run the synchronization """
- record_ids = self.backend_adapter.search()
- for record_id in record_ids:
- self._import_record(record_id)
+ records = self.backend_adapter.search()
+ for record in records:
+ self._import_record(record['id'], record=record)
diff --git a/connector_jira_servicedesk/tests/__init__.py b/connector_jira_servicedesk/tests/__init__.py
new file mode 100644
index 00000000..711c3a73
--- /dev/null
+++ b/connector_jira_servicedesk/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_import_organization
diff --git a/connector_jira_servicedesk/tests/common.py b/connector_jira_servicedesk/tests/common.py
new file mode 100644
index 00000000..154a056b
--- /dev/null
+++ b/connector_jira_servicedesk/tests/common.py
@@ -0,0 +1,8 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from os.path import dirname
+
+from odoo.addons.connector_jira.tests.common import get_recorder
+
+recorder = get_recorder(base_path=dirname(__file__))
diff --git a/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_batch.yaml b/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_batch.yaml
new file mode 100644
index 00000000..b3fadf72
--- /dev/null
+++ b/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_batch.yaml
@@ -0,0 +1,387 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ method: GET
+ uri: http://jira:8080/rest/api/2/serverInfo
+ response:
+ body: {string: '{"baseUrl":"http://localhost:8080","version":"7.12.3","versionNumbers":[7,12,3],"deploymentType":"Server","buildNumber":712004,"buildDate":"2018-10-12T00:00:00.000+0000","serverTime":"2019-04-09T07:25:35.143+0000","scmInfo":"5ef91d760d7124da5ebec5c16a948a4a807698df","serverTitle":"Jira"}'}
+ headers:
+ Cache-Control: ['no-cache, no-store, no-transform']
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ['Tue, 09 Apr 2019 07:25:35 GMT']
+ Set-Cookie: [JSESSIONID=E70FE92161655AB0AB0CCFA4FFB1A494; Path=/; HttpOnly,
+ atlassian.xsrf.token=BYG3-6SPF-0UM1-2LBO_d962a47ccf42cb8fae37c2165e943864fdd7a3f4_lin;
+ Path=/]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [445x2278x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [1xm845a]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ['288']
+ status: {code: 200, message: ''}
+- request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ Cookie:
+ - !!binary |
+ YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT19kOTYyYTQ3Y2NmNDJjYjhm
+ YWUzN2MyMTY1ZTk0Mzg2NGZkZDdhM2Y0X2xpbjsgSlNFU1NJT05JRD1FNzBGRTkyMTYxNjU1QUIw
+ QUIwQ0NGQTRGRkIxQTQ5NA==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ method: GET
+ uri: http://jira:8080/rest/api/2/field
+ response:
+ body: {string: "[{\"id\":\"issuetype\",\"name\":\"Issue Type\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ issuetype\",\"type\"],\"schema\":{\"type\":\"issuetype\",\"system\":\"issuetype\"\
+ }},{\"id\":\"timespent\",\"name\":\"Time Spent\",\"custom\":false,\"orderable\"\
+ :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"timespent\"\
+ ],\"schema\":{\"type\":\"number\",\"system\":\"timespent\"}},{\"id\":\"project\"\
+ ,\"name\":\"Project\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"project\"],\"schema\":{\"type\":\"project\"\
+ ,\"system\":\"project\"}},{\"id\":\"fixVersions\",\"name\":\"Fix Version/s\"\
+ ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"fixVersion\"],\"schema\":{\"type\":\"array\",\"items\":\"\
+ version\",\"system\":\"fixVersions\"}},{\"id\":\"aggregatetimespent\",\"name\"\
+ :\"\u03A3 Time Spent\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
+ ,\"system\":\"aggregatetimespent\"}},{\"id\":\"resolution\",\"name\":\"Resolution\"\
+ ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"resolution\"],\"schema\":{\"type\":\"resolution\",\"system\"\
+ :\"resolution\"}},{\"id\":\"customfield_10104\",\"name\":\"Epic Color\",\"\
+ custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10104]\",\"Epic Color\"],\"schema\":{\"type\":\"string\"\
+ ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-color\",\"customId\":10104}},{\"\
+ id\":\"customfield_10105\",\"name\":\"Rank\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10105]\"\
+ ,\"Rank\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-lexo-rank\"\
+ ,\"customId\":10105}},{\"id\":\"customfield_10106\",\"name\":\"Story Points\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10106]\",\"Story Points\"],\"schema\":{\"type\":\"number\"\
+ ,\"custom\":\"com.atlassian.jira.plugin.system.customfieldtypes:float\",\"\
+ customId\":10106}},{\"id\":\"resolutiondate\",\"name\":\"Resolved\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"resolutiondate\",\"resolved\"],\"schema\":{\"type\":\"datetime\",\"system\"\
+ :\"resolutiondate\"}},{\"id\":\"workratio\",\"name\":\"Work Ratio\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"workratio\"],\"schema\":{\"type\":\"number\",\"system\":\"workratio\"\
+ }},{\"id\":\"lastViewed\",\"name\":\"Last Viewed\",\"custom\":false,\"orderable\"\
+ :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"lastViewed\"\
+ ],\"schema\":{\"type\":\"datetime\",\"system\":\"lastViewed\"}},{\"id\":\"\
+ watches\",\"name\":\"Watchers\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[\"watchers\"],\"schema\":{\"type\"\
+ :\"watches\",\"system\":\"watches\"}},{\"id\":\"thumbnail\",\"name\":\"Images\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
+ clauseNames\":[]},{\"id\":\"created\",\"name\":\"Created\",\"custom\":false,\"\
+ orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ created\",\"createdDate\"],\"schema\":{\"type\":\"datetime\",\"system\":\"\
+ created\"}},{\"id\":\"priority\",\"name\":\"Priority\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ priority\"],\"schema\":{\"type\":\"priority\",\"system\":\"priority\"}},{\"\
+ id\":\"customfield_10100\",\"name\":\"Sprint\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10100]\"\
+ ,\"Sprint\"],\"schema\":{\"type\":\"array\",\"items\":\"string\",\"custom\"\
+ :\"com.pyxis.greenhopper.jira:gh-sprint\",\"customId\":10100}},{\"id\":\"\
+ customfield_10101\",\"name\":\"Epic Link\",\"custom\":true,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10101]\",\"Epic\
+ \ Link\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-link\"\
+ ,\"customId\":10101}},{\"id\":\"customfield_10102\",\"name\":\"Epic Status\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10102]\",\"Epic Status\"],\"schema\":{\"type\":\"option\"\
+ ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-status\",\"customId\":10102}},{\"\
+ id\":\"labels\",\"name\":\"Labels\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"labels\"],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"string\",\"system\":\"labels\"}},{\"id\"\
+ :\"customfield_10103\",\"name\":\"Epic Name\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10103]\"\
+ ,\"Epic Name\"],\"schema\":{\"type\":\"string\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-label\"\
+ ,\"customId\":10103}},{\"id\":\"timeestimate\",\"name\":\"Remaining Estimate\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
+ clauseNames\":[\"remainingEstimate\",\"timeestimate\"],\"schema\":{\"type\"\
+ :\"number\",\"system\":\"timeestimate\"}},{\"id\":\"aggregatetimeoriginalestimate\"\
+ ,\"name\":\"\u03A3 Original Estimate\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\"\
+ :\"number\",\"system\":\"aggregatetimeoriginalestimate\"}},{\"id\":\"versions\"\
+ ,\"name\":\"Affects Version/s\",\"custom\":false,\"orderable\":true,\"navigable\"\
+ :true,\"searchable\":true,\"clauseNames\":[\"affectedVersion\"],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"version\",\"system\":\"versions\"}},{\"id\"\
+ :\"issuelinks\",\"name\":\"Linked Issues\",\"custom\":false,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"issuelinks\",\"system\":\"issuelinks\"}},{\"\
+ id\":\"assignee\",\"name\":\"Assignee\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"assignee\"],\"schema\"\
+ :{\"type\":\"user\",\"system\":\"assignee\"}},{\"id\":\"updated\",\"name\"\
+ :\"Updated\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"updated\",\"updatedDate\"],\"schema\":{\"type\":\"\
+ datetime\",\"system\":\"updated\"}},{\"id\":\"status\",\"name\":\"Status\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"status\"],\"schema\":{\"type\":\"status\",\"system\":\"status\"\
+ }},{\"id\":\"components\",\"name\":\"Component/s\",\"custom\":false,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"component\"\
+ ],\"schema\":{\"type\":\"array\",\"items\":\"component\",\"system\":\"components\"\
+ }},{\"id\":\"issuekey\",\"name\":\"Key\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[\"id\",\"issue\",\"\
+ issuekey\",\"key\"]},{\"id\":\"timeoriginalestimate\",\"name\":\"Original\
+ \ Estimate\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :false,\"clauseNames\":[\"originalEstimate\",\"timeoriginalestimate\"],\"\
+ schema\":{\"type\":\"number\",\"system\":\"timeoriginalestimate\"}},{\"id\"\
+ :\"description\",\"name\":\"Description\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"description\"],\"\
+ schema\":{\"type\":\"string\",\"system\":\"description\"}},{\"id\":\"timetracking\"\
+ ,\"name\":\"Time Tracking\",\"custom\":false,\"orderable\":true,\"navigable\"\
+ :false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\":\"timetracking\"\
+ ,\"system\":\"timetracking\"}},{\"id\":\"customfield_10203\",\"name\":\"Organizations\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10203]\",\"Organizations\"],\"schema\":{\"type\":\"array\"\
+ ,\"items\":\"sd-customerorganization\",\"custom\":\"com.atlassian.servicedesk:sd-customer-organizations\"\
+ ,\"customId\":10203}},{\"id\":\"customfield_10204\",\"name\":\"Satisfaction\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10204]\",\"Satisfaction\"],\"schema\":{\"type\":\"any\"\
+ ,\"custom\":\"com.atlassian.servicedesk:sd-request-feedback\",\"customId\"\
+ :10204}},{\"id\":\"security\",\"name\":\"Security Level\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ level\"],\"schema\":{\"type\":\"securitylevel\",\"system\":\"security\"}},{\"\
+ id\":\"customfield_10205\",\"name\":\"Satisfaction date\",\"custom\":true,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ cf[10205]\",\"Satisfaction date\"],\"schema\":{\"type\":\"datetime\",\"custom\"\
+ :\"com.atlassian.servicedesk:sd-request-feedback-date\",\"customId\":10205}},{\"\
+ id\":\"customfield_10206\",\"name\":\"Approvers\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"Approvers\"\
+ ,\"cf[10206]\"],\"schema\":{\"type\":\"array\",\"items\":\"user\",\"custom\"\
+ :\"com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker\",\"\
+ customId\":10206}},{\"id\":\"attachment\",\"name\":\"Attachment\",\"custom\"\
+ :false,\"orderable\":true,\"navigable\":false,\"searchable\":true,\"clauseNames\"\
+ :[\"attachments\"],\"schema\":{\"type\":\"array\",\"items\":\"attachment\"\
+ ,\"system\":\"attachment\"}},{\"id\":\"aggregatetimeestimate\",\"name\":\"\
+ \u03A3 Remaining Estimate\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
+ ,\"system\":\"aggregatetimeestimate\"}},{\"id\":\"customfield_10207\",\"name\"\
+ :\"Time to resolution\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"cf[10207]\",\"Time to resolution\"],\"\
+ schema\":{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
+ ,\"customId\":10207}},{\"id\":\"customfield_10208\",\"name\":\"Time to first\
+ \ response\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"cf[10208]\",\"Time to first response\"],\"schema\"\
+ :{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
+ ,\"customId\":10208}},{\"id\":\"summary\",\"name\":\"Summary\",\"custom\"\
+ :false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"summary\"],\"schema\":{\"type\":\"string\",\"system\":\"summary\"}},{\"\
+ id\":\"creator\",\"name\":\"Creator\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"creator\"],\"schema\"\
+ :{\"type\":\"user\",\"system\":\"creator\"}},{\"id\":\"subtasks\",\"name\"\
+ :\"Sub-Tasks\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
+ searchable\":false,\"clauseNames\":[\"subtasks\"],\"schema\":{\"type\":\"\
+ array\",\"items\":\"issuelinks\",\"system\":\"subtasks\"}},{\"id\":\"reporter\"\
+ ,\"name\":\"Reporter\",\"custom\":false,\"orderable\":true,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"reporter\"],\"schema\":{\"type\":\"user\"\
+ ,\"system\":\"reporter\"}},{\"id\":\"aggregateprogress\",\"name\":\"\u03A3\
+ \ Progress\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :false,\"clauseNames\":[],\"schema\":{\"type\":\"progress\",\"system\":\"\
+ aggregateprogress\"}},{\"id\":\"customfield_10000\",\"name\":\"Development\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10000]\",\"Development\"],\"schema\":{\"type\":\"any\"\
+ ,\"custom\":\"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary\"\
+ ,\"customId\":10000}},{\"id\":\"customfield_10200\",\"name\":\"Approvals\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"Approvals\",\"cf[10200]\"],\"schema\":{\"type\":\"sd-approvals\"\
+ ,\"custom\":\"com.atlassian.servicedesk.approvals-plugin:sd-approvals\",\"\
+ customId\":10200}},{\"id\":\"customfield_10201\",\"name\":\"Request participants\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10201]\",\"Request participants\"],\"schema\":{\"type\"\
+ :\"array\",\"items\":\"user\",\"custom\":\"com.atlassian.servicedesk:sd-request-participants\"\
+ ,\"customId\":10201}},{\"id\":\"customfield_10202\",\"name\":\"Customer Request\
+ \ Type\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"cf[10202]\",\"Customer Request Type\"],\"schema\"\
+ :{\"type\":\"sd-customerrequesttype\",\"custom\":\"com.atlassian.servicedesk:vp-origin\"\
+ ,\"customId\":10202}},{\"id\":\"environment\",\"name\":\"Environment\",\"\
+ custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"environment\"],\"schema\":{\"type\":\"string\",\"system\"\
+ :\"environment\"}},{\"id\":\"duedate\",\"name\":\"Due Date\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ due\",\"duedate\"],\"schema\":{\"type\":\"date\",\"system\":\"duedate\"}},{\"\
+ id\":\"progress\",\"name\":\"Progress\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[\"progress\"],\"schema\"\
+ :{\"type\":\"progress\",\"system\":\"progress\"}},{\"id\":\"comment\",\"name\"\
+ :\"Comment\",\"custom\":false,\"orderable\":true,\"navigable\":false,\"searchable\"\
+ :true,\"clauseNames\":[\"comment\"],\"schema\":{\"type\":\"comments-page\"\
+ ,\"system\":\"comment\"}},{\"id\":\"votes\",\"name\":\"Votes\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"clauseNames\"\
+ :[\"votes\"],\"schema\":{\"type\":\"votes\",\"system\":\"votes\"}},{\"id\"\
+ :\"worklog\",\"name\":\"Log Work\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\"\
+ :\"array\",\"items\":\"worklog\",\"system\":\"worklog\"}}]"}
+ headers:
+ Cache-Control: ['no-cache, no-store, no-transform']
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ['Tue, 09 Apr 2019 07:25:35 GMT']
+ Set-Cookie: [JSESSIONID=695F7FF23DB85CFCEC23F2A0D87D7D6B; Path=/; HttpOnly]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [445x2279x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [1fb1pfe]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ['12093']
+ status: {code: 200, message: ''}
+- request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ Cookie:
+ - !!binary |
+ YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT19kOTYyYTQ3Y2NmNDJjYjhm
+ YWUzN2MyMTY1ZTk0Mzg2NGZkZDdhM2Y0X2xpbjsgSlNFU1NJT05JRD02OTVGN0ZGMjNEQjg1Q0ZD
+ RUMyM0YyQTBEODdEN0Q2Qg==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ x-experimentalapi:
+ - !!binary |
+ b3B0LWlu
+ method: GET
+ uri: http://jira:8080/rest/servicedeskapi/organization?start=0&limit=50
+ response:
+ body: {string: '{"size":50,"start":0,"limit":50,"isLastPage":false,"_links":{"base":"http://jira:8080","context":"","next":"http://jira:8080/rest/servicedeskapi/organization?limit=50&start=50","self":"http://jira:8080/rest/servicedeskapi/organization?start=0&limit=50"},"values":[{"id":"1","name":"org1","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/1"}},{"id":"2","name":"org2","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/2"}},{"id":"3","name":"org3","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/3"}},{"id":"4","name":"org30","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/4"}},{"id":"5","name":"org32","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/5"}},{"id":"6","name":"org31","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/6"}},{"id":"7","name":"org34","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/7"}},{"id":"8","name":"org33","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/8"}},{"id":"9","name":"org36","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/9"}},{"id":"10","name":"org35","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/10"}},{"id":"11","name":"org38","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/11"}},{"id":"12","name":"org37","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/12"}},{"id":"13","name":"org39","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/13"}},{"id":"14","name":"org50","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/14"}},{"id":"15","name":"org41","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/15"}},{"id":"16","name":"org40","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/16"}},{"id":"17","name":"org43","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/17"}},{"id":"18","name":"org42","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/18"}},{"id":"19","name":"org45","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/19"}},{"id":"20","name":"org44","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/20"}},{"id":"21","name":"org47","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/21"}},{"id":"22","name":"org46","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/22"}},{"id":"23","name":"org49","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/23"}},{"id":"24","name":"org48","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/24"}},{"id":"25","name":"org60","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/25"}},{"id":"26","name":"org52","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/26"}},{"id":"27","name":"org51","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/27"}},{"id":"28","name":"org54","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/28"}},{"id":"29","name":"org10","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/29"}},{"id":"30","name":"org53","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/30"}},{"id":"31","name":"org56","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/31"}},{"id":"32","name":"org12","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/32"}},{"id":"33","name":"org55","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/33"}},{"id":"34","name":"org11","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/34"}},{"id":"35","name":"org58","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/35"}},{"id":"36","name":"org14","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/36"}},{"id":"37","name":"org57","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/37"}},{"id":"38","name":"org13","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/38"}},{"id":"39","name":"org16","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/39"}},{"id":"40","name":"org59","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/40"}},{"id":"41","name":"org15","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/41"}},{"id":"42","name":"org18","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/42"}},{"id":"43","name":"org17","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/43"}},{"id":"44","name":"org19","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/44"}},{"id":"45","name":"org8","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/45"}},{"id":"46","name":"org9","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/46"}},{"id":"47","name":"org4","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/47"}},{"id":"48","name":"org5","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/48"}},{"id":"49","name":"org6","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/49"}},{"id":"50","name":"org7","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/50"}}]}'}
+ headers:
+ Cache-Control: ['no-cache, no-store, no-transform']
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ['Tue, 09 Apr 2019 07:25:35 GMT']
+ Set-Cookie: [JSESSIONID=05198C071AE09FF29405F7911341C627; Path=/; HttpOnly]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [445x2280x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [1xlna5j]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ['5238']
+ status: {code: 200, message: ''}
+- request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ Cookie:
+ - !!binary |
+ YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT19kOTYyYTQ3Y2NmNDJjYjhm
+ YWUzN2MyMTY1ZTk0Mzg2NGZkZDdhM2Y0X2xpbjsgSlNFU1NJT05JRD0wNTE5OEMwNzFBRTA5RkYy
+ OTQwNUY3OTExMzQxQzYyNw==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ x-experimentalapi:
+ - !!binary |
+ b3B0LWlu
+ method: GET
+ uri: http://jira:8080/rest/servicedeskapi/organization?start=50&limit=100
+ response:
+ body: {string: '{"size":10,"start":50,"limit":50,"isLastPage":true,"_links":{"base":"http://jira:8080","context":"","prev":"http://jira:8080/rest/servicedeskapi/organization?limit=50&start=0","self":"http://jira:8080/rest/servicedeskapi/organization?start=50&limit=100"},"values":[{"id":"51","name":"org21","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/51"}},{"id":"52","name":"org20","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/52"}},{"id":"53","name":"org23","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/53"}},{"id":"54","name":"org22","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/54"}},{"id":"55","name":"org25","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/55"}},{"id":"56","name":"org24","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/56"}},{"id":"57","name":"org27","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/57"}},{"id":"58","name":"org26","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/58"}},{"id":"59","name":"org29","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/59"}},{"id":"60","name":"org28","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/60"}}]}'}
+ headers:
+ Cache-Control: ['no-cache, no-store, no-transform']
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ['Tue, 09 Apr 2019 07:25:35 GMT']
+ Set-Cookie: [JSESSIONID=895A29A492A56350C6C51AD7ABEEDE24; Path=/; HttpOnly]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [445x2281x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [1g3mv90]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ['1266']
+ status: {code: 200, message: ''}
+version: 1
diff --git a/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_from_api_call.yaml b/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_from_api_call.yaml
new file mode 100644
index 00000000..20bac932
--- /dev/null
+++ b/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_from_api_call.yaml
@@ -0,0 +1,333 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ method: GET
+ uri: http://jira:8080/rest/api/2/serverInfo
+ response:
+ body: {string: '{"baseUrl":"http://localhost:8080","version":"7.12.3","versionNumbers":[7,12,3],"deploymentType":"Server","buildNumber":712004,"buildDate":"2018-10-12T00:00:00.000+0000","serverTime":"2019-04-09T07:34:59.719+0000","scmInfo":"5ef91d760d7124da5ebec5c16a948a4a807698df","serverTitle":"Jira"}'}
+ headers:
+ Cache-Control: ['no-cache, no-store, no-transform']
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ['Tue, 09 Apr 2019 07:34:59 GMT']
+ Set-Cookie: [JSESSIONID=F3754ECC01BFDC09E50B050AFCA448AD; Path=/; HttpOnly,
+ atlassian.xsrf.token=BYG3-6SPF-0UM1-2LBO_080f5b3302aaf03201d504475fbec12569357bac_lin;
+ Path=/]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [454x2282x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [88wv88]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ['288']
+ status: {code: 200, message: ''}
+- request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ Cookie:
+ - !!binary |
+ YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT18wODBmNWIzMzAyYWFmMDMy
+ MDFkNTA0NDc1ZmJlYzEyNTY5MzU3YmFjX2xpbjsgSlNFU1NJT05JRD1GMzc1NEVDQzAxQkZEQzA5
+ RTUwQjA1MEFGQ0E0NDhBRA==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ method: GET
+ uri: http://jira:8080/rest/api/2/field
+ response:
+ body: {string: "[{\"id\":\"issuetype\",\"name\":\"Issue Type\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ issuetype\",\"type\"],\"schema\":{\"type\":\"issuetype\",\"system\":\"issuetype\"\
+ }},{\"id\":\"timespent\",\"name\":\"Time Spent\",\"custom\":false,\"orderable\"\
+ :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"timespent\"\
+ ],\"schema\":{\"type\":\"number\",\"system\":\"timespent\"}},{\"id\":\"project\"\
+ ,\"name\":\"Project\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"project\"],\"schema\":{\"type\":\"project\"\
+ ,\"system\":\"project\"}},{\"id\":\"fixVersions\",\"name\":\"Fix Version/s\"\
+ ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"fixVersion\"],\"schema\":{\"type\":\"array\",\"items\":\"\
+ version\",\"system\":\"fixVersions\"}},{\"id\":\"aggregatetimespent\",\"name\"\
+ :\"\u03A3 Time Spent\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
+ ,\"system\":\"aggregatetimespent\"}},{\"id\":\"resolution\",\"name\":\"Resolution\"\
+ ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"resolution\"],\"schema\":{\"type\":\"resolution\",\"system\"\
+ :\"resolution\"}},{\"id\":\"customfield_10104\",\"name\":\"Epic Color\",\"\
+ custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10104]\",\"Epic Color\"],\"schema\":{\"type\":\"string\"\
+ ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-color\",\"customId\":10104}},{\"\
+ id\":\"customfield_10105\",\"name\":\"Rank\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10105]\"\
+ ,\"Rank\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-lexo-rank\"\
+ ,\"customId\":10105}},{\"id\":\"customfield_10106\",\"name\":\"Story Points\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10106]\",\"Story Points\"],\"schema\":{\"type\":\"number\"\
+ ,\"custom\":\"com.atlassian.jira.plugin.system.customfieldtypes:float\",\"\
+ customId\":10106}},{\"id\":\"resolutiondate\",\"name\":\"Resolved\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"resolutiondate\",\"resolved\"],\"schema\":{\"type\":\"datetime\",\"system\"\
+ :\"resolutiondate\"}},{\"id\":\"workratio\",\"name\":\"Work Ratio\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"workratio\"],\"schema\":{\"type\":\"number\",\"system\":\"workratio\"\
+ }},{\"id\":\"lastViewed\",\"name\":\"Last Viewed\",\"custom\":false,\"orderable\"\
+ :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"lastViewed\"\
+ ],\"schema\":{\"type\":\"datetime\",\"system\":\"lastViewed\"}},{\"id\":\"\
+ watches\",\"name\":\"Watchers\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[\"watchers\"],\"schema\":{\"type\"\
+ :\"watches\",\"system\":\"watches\"}},{\"id\":\"thumbnail\",\"name\":\"Images\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
+ clauseNames\":[]},{\"id\":\"created\",\"name\":\"Created\",\"custom\":false,\"\
+ orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ created\",\"createdDate\"],\"schema\":{\"type\":\"datetime\",\"system\":\"\
+ created\"}},{\"id\":\"priority\",\"name\":\"Priority\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ priority\"],\"schema\":{\"type\":\"priority\",\"system\":\"priority\"}},{\"\
+ id\":\"customfield_10100\",\"name\":\"Sprint\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10100]\"\
+ ,\"Sprint\"],\"schema\":{\"type\":\"array\",\"items\":\"string\",\"custom\"\
+ :\"com.pyxis.greenhopper.jira:gh-sprint\",\"customId\":10100}},{\"id\":\"\
+ customfield_10101\",\"name\":\"Epic Link\",\"custom\":true,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10101]\",\"Epic\
+ \ Link\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-link\"\
+ ,\"customId\":10101}},{\"id\":\"customfield_10102\",\"name\":\"Epic Status\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10102]\",\"Epic Status\"],\"schema\":{\"type\":\"option\"\
+ ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-status\",\"customId\":10102}},{\"\
+ id\":\"labels\",\"name\":\"Labels\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"labels\"],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"string\",\"system\":\"labels\"}},{\"id\"\
+ :\"customfield_10103\",\"name\":\"Epic Name\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10103]\"\
+ ,\"Epic Name\"],\"schema\":{\"type\":\"string\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-label\"\
+ ,\"customId\":10103}},{\"id\":\"timeestimate\",\"name\":\"Remaining Estimate\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
+ clauseNames\":[\"remainingEstimate\",\"timeestimate\"],\"schema\":{\"type\"\
+ :\"number\",\"system\":\"timeestimate\"}},{\"id\":\"aggregatetimeoriginalestimate\"\
+ ,\"name\":\"\u03A3 Original Estimate\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\"\
+ :\"number\",\"system\":\"aggregatetimeoriginalestimate\"}},{\"id\":\"versions\"\
+ ,\"name\":\"Affects Version/s\",\"custom\":false,\"orderable\":true,\"navigable\"\
+ :true,\"searchable\":true,\"clauseNames\":[\"affectedVersion\"],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"version\",\"system\":\"versions\"}},{\"id\"\
+ :\"issuelinks\",\"name\":\"Linked Issues\",\"custom\":false,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"issuelinks\",\"system\":\"issuelinks\"}},{\"\
+ id\":\"assignee\",\"name\":\"Assignee\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"assignee\"],\"schema\"\
+ :{\"type\":\"user\",\"system\":\"assignee\"}},{\"id\":\"updated\",\"name\"\
+ :\"Updated\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"updated\",\"updatedDate\"],\"schema\":{\"type\":\"\
+ datetime\",\"system\":\"updated\"}},{\"id\":\"status\",\"name\":\"Status\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"status\"],\"schema\":{\"type\":\"status\",\"system\":\"status\"\
+ }},{\"id\":\"components\",\"name\":\"Component/s\",\"custom\":false,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"component\"\
+ ],\"schema\":{\"type\":\"array\",\"items\":\"component\",\"system\":\"components\"\
+ }},{\"id\":\"issuekey\",\"name\":\"Key\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[\"id\",\"issue\",\"\
+ issuekey\",\"key\"]},{\"id\":\"timeoriginalestimate\",\"name\":\"Original\
+ \ Estimate\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :false,\"clauseNames\":[\"originalEstimate\",\"timeoriginalestimate\"],\"\
+ schema\":{\"type\":\"number\",\"system\":\"timeoriginalestimate\"}},{\"id\"\
+ :\"description\",\"name\":\"Description\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"description\"],\"\
+ schema\":{\"type\":\"string\",\"system\":\"description\"}},{\"id\":\"timetracking\"\
+ ,\"name\":\"Time Tracking\",\"custom\":false,\"orderable\":true,\"navigable\"\
+ :false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\":\"timetracking\"\
+ ,\"system\":\"timetracking\"}},{\"id\":\"customfield_10203\",\"name\":\"Organizations\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10203]\",\"Organizations\"],\"schema\":{\"type\":\"array\"\
+ ,\"items\":\"sd-customerorganization\",\"custom\":\"com.atlassian.servicedesk:sd-customer-organizations\"\
+ ,\"customId\":10203}},{\"id\":\"customfield_10204\",\"name\":\"Satisfaction\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10204]\",\"Satisfaction\"],\"schema\":{\"type\":\"any\"\
+ ,\"custom\":\"com.atlassian.servicedesk:sd-request-feedback\",\"customId\"\
+ :10204}},{\"id\":\"security\",\"name\":\"Security Level\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ level\"],\"schema\":{\"type\":\"securitylevel\",\"system\":\"security\"}},{\"\
+ id\":\"customfield_10205\",\"name\":\"Satisfaction date\",\"custom\":true,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ cf[10205]\",\"Satisfaction date\"],\"schema\":{\"type\":\"datetime\",\"custom\"\
+ :\"com.atlassian.servicedesk:sd-request-feedback-date\",\"customId\":10205}},{\"\
+ id\":\"customfield_10206\",\"name\":\"Approvers\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"Approvers\"\
+ ,\"cf[10206]\"],\"schema\":{\"type\":\"array\",\"items\":\"user\",\"custom\"\
+ :\"com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker\",\"\
+ customId\":10206}},{\"id\":\"attachment\",\"name\":\"Attachment\",\"custom\"\
+ :false,\"orderable\":true,\"navigable\":false,\"searchable\":true,\"clauseNames\"\
+ :[\"attachments\"],\"schema\":{\"type\":\"array\",\"items\":\"attachment\"\
+ ,\"system\":\"attachment\"}},{\"id\":\"aggregatetimeestimate\",\"name\":\"\
+ \u03A3 Remaining Estimate\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
+ ,\"system\":\"aggregatetimeestimate\"}},{\"id\":\"customfield_10207\",\"name\"\
+ :\"Time to resolution\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"cf[10207]\",\"Time to resolution\"],\"\
+ schema\":{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
+ ,\"customId\":10207}},{\"id\":\"customfield_10208\",\"name\":\"Time to first\
+ \ response\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"cf[10208]\",\"Time to first response\"],\"schema\"\
+ :{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
+ ,\"customId\":10208}},{\"id\":\"summary\",\"name\":\"Summary\",\"custom\"\
+ :false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"summary\"],\"schema\":{\"type\":\"string\",\"system\":\"summary\"}},{\"\
+ id\":\"creator\",\"name\":\"Creator\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"creator\"],\"schema\"\
+ :{\"type\":\"user\",\"system\":\"creator\"}},{\"id\":\"subtasks\",\"name\"\
+ :\"Sub-Tasks\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
+ searchable\":false,\"clauseNames\":[\"subtasks\"],\"schema\":{\"type\":\"\
+ array\",\"items\":\"issuelinks\",\"system\":\"subtasks\"}},{\"id\":\"reporter\"\
+ ,\"name\":\"Reporter\",\"custom\":false,\"orderable\":true,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"reporter\"],\"schema\":{\"type\":\"user\"\
+ ,\"system\":\"reporter\"}},{\"id\":\"aggregateprogress\",\"name\":\"\u03A3\
+ \ Progress\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :false,\"clauseNames\":[],\"schema\":{\"type\":\"progress\",\"system\":\"\
+ aggregateprogress\"}},{\"id\":\"customfield_10000\",\"name\":\"Development\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10000]\",\"Development\"],\"schema\":{\"type\":\"any\"\
+ ,\"custom\":\"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary\"\
+ ,\"customId\":10000}},{\"id\":\"customfield_10200\",\"name\":\"Approvals\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"Approvals\",\"cf[10200]\"],\"schema\":{\"type\":\"sd-approvals\"\
+ ,\"custom\":\"com.atlassian.servicedesk.approvals-plugin:sd-approvals\",\"\
+ customId\":10200}},{\"id\":\"customfield_10201\",\"name\":\"Request participants\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10201]\",\"Request participants\"],\"schema\":{\"type\"\
+ :\"array\",\"items\":\"user\",\"custom\":\"com.atlassian.servicedesk:sd-request-participants\"\
+ ,\"customId\":10201}},{\"id\":\"customfield_10202\",\"name\":\"Customer Request\
+ \ Type\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"cf[10202]\",\"Customer Request Type\"],\"schema\"\
+ :{\"type\":\"sd-customerrequesttype\",\"custom\":\"com.atlassian.servicedesk:vp-origin\"\
+ ,\"customId\":10202}},{\"id\":\"environment\",\"name\":\"Environment\",\"\
+ custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"environment\"],\"schema\":{\"type\":\"string\",\"system\"\
+ :\"environment\"}},{\"id\":\"duedate\",\"name\":\"Due Date\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ due\",\"duedate\"],\"schema\":{\"type\":\"date\",\"system\":\"duedate\"}},{\"\
+ id\":\"progress\",\"name\":\"Progress\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[\"progress\"],\"schema\"\
+ :{\"type\":\"progress\",\"system\":\"progress\"}},{\"id\":\"comment\",\"name\"\
+ :\"Comment\",\"custom\":false,\"orderable\":true,\"navigable\":false,\"searchable\"\
+ :true,\"clauseNames\":[\"comment\"],\"schema\":{\"type\":\"comments-page\"\
+ ,\"system\":\"comment\"}},{\"id\":\"votes\",\"name\":\"Votes\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"clauseNames\"\
+ :[\"votes\"],\"schema\":{\"type\":\"votes\",\"system\":\"votes\"}},{\"id\"\
+ :\"worklog\",\"name\":\"Log Work\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\"\
+ :\"array\",\"items\":\"worklog\",\"system\":\"worklog\"}}]"}
+ headers:
+ Cache-Control: ['no-cache, no-store, no-transform']
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ['Tue, 09 Apr 2019 07:34:59 GMT']
+ Set-Cookie: [JSESSIONID=02595F6221A3A7FC73A9B1C5FA665EFB; Path=/; HttpOnly]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [454x2283x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [1p1fqss]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ['12093']
+ status: {code: 200, message: ''}
+- request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ Cookie:
+ - !!binary |
+ YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT18wODBmNWIzMzAyYWFmMDMy
+ MDFkNTA0NDc1ZmJlYzEyNTY5MzU3YmFjX2xpbjsgSlNFU1NJT05JRD0wMjU5NUY2MjIxQTNBN0ZD
+ NzNBOUIxQzVGQTY2NUVGQg==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ x-experimentalapi:
+ - !!binary |
+ b3B0LWlu
+ method: GET
+ uri: http://jira:8080/rest/servicedeskapi/organization/55
+ response:
+ body: {string: '{"id":"55","name":"org25","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/55"}}'}
+ headers:
+ Cache-Control: ['no-cache, no-store, no-transform']
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ['Tue, 09 Apr 2019 07:34:59 GMT']
+ Set-Cookie: [JSESSIONID=D7428E3CFDC83DBBD4214E6A9EECF1F9; Path=/; HttpOnly]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [454x2284x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [n37ugs]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ['99']
+ status: {code: 200, message: ''}
+version: 1
diff --git a/connector_jira_servicedesk/tests/test_import_organization.py b/connector_jira_servicedesk/tests/test_import_organization.py
new file mode 100644
index 00000000..02c88ea4
--- /dev/null
+++ b/connector_jira_servicedesk/tests/test_import_organization.py
@@ -0,0 +1,57 @@
+# Copyright 2019 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from .common import recorder
+from odoo.addons.connector_jira.tests.common import JiraSavepointCase
+
+
+class TestImportOrganization(JiraSavepointCase):
+
+ @recorder.use_cassette
+ def test_import_organization_batch(self):
+ """Batch import of organizations
+
+ This is a direct import of all organizations, without using
+ individual jobs.
+ """
+ organizations = self.env['jira.organization'].search([])
+ self.assertEqual(len(organizations), 0)
+ self.env['jira.organization'].import_batch(
+ self.backend_record,
+ )
+ organizations = self.env['jira.organization'].search([])
+ # ensure that we have more than 50 records which
+ # is the pagination of the REST API
+ self.assertEqual(len(organizations), 60)
+
+ def test_import_organization_from_record(self):
+ """Import one organization from a records
+
+ The batch import directly pass the record because it gets
+ all the data at once from the API.
+ """
+ binding = self.env['jira.organization'].create({
+ 'backend_id': self.backend_record.id,
+ 'external_id': '55',
+ 'name': 'dummy',
+ })
+ binding.import_record(
+ self.backend_record,
+ '55',
+ record={'id': '55', 'name': 'new name'},
+ )
+ self.assertEqual(binding.name, 'new name')
+
+ @recorder.use_cassette
+ def test_import_organization_from_api_call(self):
+ """Import one organization from a call to the API"""
+ binding = self.env['jira.organization'].create({
+ 'backend_id': self.backend_record.id,
+ 'external_id': '55',
+ 'name': 'dummy',
+ })
+ binding.import_record(
+ self.backend_record,
+ '55',
+ )
+ self.assertEqual(binding.name, 'org25')
From 3d950e1e2d18c723ed2d60d865a953b374d9beb0 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Fri, 12 Jul 2019 07:24:07 +0000
Subject: [PATCH 11/19] [ADD] icon.png
---
.../static/description/icon.png | Bin 0 -> 9455 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 connector_jira_servicedesk/static/description/icon.png
diff --git a/connector_jira_servicedesk/static/description/icon.png b/connector_jira_servicedesk/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~!
zVpnB`o+K7|Al`Q_U;eD$B
zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA
z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__
zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_
zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I
z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U
z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)(
z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH
zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW
z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx
zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h
zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9
zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz#
z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA
zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K=
z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS
zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C
zuVl&0duN<;uOsB3%T9Fp8t{ED108)`y_~Hnd9AUX7h-H?jVuU|}My+C=TjH(jKz
zqMVr0re3S$H@t{zI95qa)+Crz*5Zj}Ao%4Z><+W(nOZd?gDnfNBC3>M8WE61$So|P
zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO
z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1
zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_
zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8
zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ>
zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN
z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h
zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d
zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB
zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz
z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I
zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X
zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD
z#z-)AXwSRY?OPefw^iI+
z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd
z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs
z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I
z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$
z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV
z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s
zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6
zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u
zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q
zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH
zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c
zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT
zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+
z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ
zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy
zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC)
zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a
zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x!
zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X
zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8
z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A
z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H
zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n=
z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK
z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z
zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h
z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD
z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW
zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@
zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz
z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y<
zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X
zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6
zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6%
z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(|
z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ
z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H
zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6
z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d}
z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A
zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB
z
z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp
zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zls4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6#
z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f#
zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC
zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv!
zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG
z-wfS
zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9
z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE#
z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz
zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t
z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN
zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q
ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k
zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG
z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff
z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1
zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO
zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$
zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV(
z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb
zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4
z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{
zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx}
z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov
zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22
zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq
zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t<
z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k
z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp
z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{}
zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
From 6d98af966cc1a8fa862f211f82e74dfe571d884f Mon Sep 17 00:00:00 2001
From: Jaime Arroyo
Date: Fri, 13 Sep 2019 13:20:14 +0200
Subject: [PATCH 12/19] [11.0][FIX] JIRA not required
---
.../models/jira_organization/adapter.py | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/connector_jira_servicedesk/models/jira_organization/adapter.py b/connector_jira_servicedesk/models/jira_organization/adapter.py
index 14146b6f..9c0e53ef 100644
--- a/connector_jira_servicedesk/models/jira_organization/adapter.py
+++ b/connector_jira_servicedesk/models/jira_organization/adapter.py
@@ -7,13 +7,15 @@
_logger = logging.getLogger(__name__)
try:
- import jira
+ from jira.resources import Resource
from jira.utils import CaseInsensitiveDict
except ImportError as err:
_logger.debug(err)
+ Resource = object
+ CaseInsensitiveDict = None
-class Organization(jira.resources.Resource):
+class Organization(Resource):
"""A Service Desk Organization."""
def __init__(self, options, session, raw=None):
@@ -35,7 +37,10 @@ class OrganizationAdapter(Component):
# The Service Desk REST API returns an error if this header
# is not used. The API may change so they want an agreement for
# the client about this.
- _desk_headers = CaseInsensitiveDict({'X-ExperimentalApi': 'opt-in'})
+ _desk_headers = CaseInsensitiveDict({'X-ExperimentalApi': 'opt-in'}) if (
+ CaseInsensitiveDict
+ ) else None
+
_desk_api_path_base = '{server}/rest/servicedeskapi/{path}'
def __init__(self, work_context):
From 01bdba0dcb239d04228426592f833cffc4364c91 Mon Sep 17 00:00:00 2001
From: Akim Juillerat
Date: Thu, 6 Aug 2020 12:40:48 +0200
Subject: [PATCH 13/19] [IMP] connector_jira_servicedesk: black, isort,
prettier
---
connector_jira_servicedesk/__manifest__.py | 28 +-
.../models/account_analytic_line/importer.py | 2 +-
.../models/jira_backend/common.py | 32 +-
.../models/jira_organization/adapter.py | 37 +-
.../models/jira_organization/common.py | 25 +-
.../models/jira_organization/importer.py | 22 +-
.../models/project_project/binder.py | 11 +-
.../models/project_project/common.py | 53 +-
.../project_project/project_link_jira.py | 12 +-
.../models/project_task/importer.py | 43 +-
.../test_import_organization_batch.yaml | 812 +++++++++---------
...est_import_organization_from_api_call.yaml | 701 ++++++++-------
.../tests/test_import_organization.py | 47 +-
.../views/jira_backend_views.xml | 101 +--
.../views/project_link_jira_views.xml | 45 +-
.../views/project_project_views.xml | 51 +-
16 files changed, 1050 insertions(+), 972 deletions(-)
diff --git a/connector_jira_servicedesk/__manifest__.py b/connector_jira_servicedesk/__manifest__.py
index ff4740d6..57bff627 100644
--- a/connector_jira_servicedesk/__manifest__.py
+++ b/connector_jira_servicedesk/__manifest__.py
@@ -1,20 +1,18 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
{
- 'name': 'JIRA Connector - Service Desk Extension',
- 'version': '11.0.1.0.0',
- 'author': 'Camptocamp,Odoo Community Association (OCA)',
- 'license': 'AGPL-3',
- 'category': 'Connector',
- 'depends': [
- 'connector_jira',
+ "name": "JIRA Connector - Service Desk Extension",
+ "version": "11.0.1.0.0",
+ "author": "Camptocamp,Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "category": "Connector",
+ "depends": ["connector_jira",],
+ "website": "https://github.com/camptocamp/connector-jira",
+ "data": [
+ "views/jira_backend_views.xml",
+ "views/project_project_views.xml",
+ "views/project_link_jira_views.xml",
+ "security/ir.model.access.csv",
],
- 'website': 'https://github.com/camptocamp/connector-jira',
- 'data': [
- 'views/jira_backend_views.xml',
- 'views/project_project_views.xml',
- 'views/project_link_jira_views.xml',
- 'security/ir.model.access.csv',
- ],
- 'installable': True,
+ "installable": True,
}
diff --git a/connector_jira_servicedesk/models/account_analytic_line/importer.py b/connector_jira_servicedesk/models/account_analytic_line/importer.py
index b8004751..4c28e33b 100644
--- a/connector_jira_servicedesk/models/account_analytic_line/importer.py
+++ b/connector_jira_servicedesk/models/account_analytic_line/importer.py
@@ -5,7 +5,7 @@
class AnalyticLineImporter(Component):
- _inherit = 'jira.analytic.line.importer'
+ _inherit = "jira.analytic.line.importer"
@property
def _issue_fields_to_read(self):
diff --git a/connector_jira_servicedesk/models/jira_backend/common.py b/connector_jira_servicedesk/models/jira_backend/common.py
index f7f5167c..dadc83a0 100644
--- a/connector_jira_servicedesk/models/jira_backend/common.py
+++ b/connector_jira_servicedesk/models/jira_backend/common.py
@@ -1,50 +1,50 @@
# Copyright 2016-2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo import models, api, fields
+from odoo import api, fields, models
class JiraBackend(models.Model):
- _inherit = 'jira.backend'
+ _inherit = "jira.backend"
organization_ids = fields.One2many(
- comodel_name='jira.organization',
- inverse_name='backend_id',
- string='Organizations',
+ comodel_name="jira.organization",
+ inverse_name="backend_id",
+ string="Organizations",
readonly=True,
)
organization_field_name = fields.Char(
- string='Organization Field',
+ string="Organization Field",
help="The 'Organization' field on JIRA is a custom field. "
- "The name of the field is something like 'customfield_10002'. "
+ "The name of the field is something like 'customfield_10002'. ",
)
@api.model
def _selection_project_template(self):
selection = super()._selection_project_template()
selection += [
- ('Basic', 'Basic (Service Desk)'),
- ('IT Service Desk', 'IT Service Desk (Service Desk)'),
- ('Customer service', 'Customer Service (Service Desk)'),
+ ("Basic", "Basic (Service Desk)"),
+ ("IT Service Desk", "IT Service Desk (Service Desk)"),
+ ("Customer service", "Customer Service (Service Desk)"),
]
return selection
@api.multi
def import_organization(self):
- self.env['jira.organization'].import_batch(self)
+ self.env["jira.organization"].import_batch(self)
return True
@api.multi
def activate_organization(self):
"""Get organization field name from JIRA web-service"""
self.ensure_one()
- org_field = 'com.atlassian.servicedesk:sd-customer-organizations'
- with self.work_on('jira.backend') as work:
- adapter = work.component(usage='backend.adapter')
+ org_field = "com.atlassian.servicedesk:sd-customer-organizations"
+ with self.work_on("jira.backend") as work:
+ adapter = work.component(usage="backend.adapter")
jira_fields = adapter.list_fields()
for field in jira_fields:
- custom_ref = field.get('schema', {}).get('custom')
+ custom_ref = field.get("schema", {}).get("custom")
if custom_ref == org_field:
- self.organization_field_name = field['id']
+ self.organization_field_name = field["id"]
break
diff --git a/connector_jira_servicedesk/models/jira_organization/adapter.py b/connector_jira_servicedesk/models/jira_organization/adapter.py
index 9c0e53ef..abd2724e 100644
--- a/connector_jira_servicedesk/models/jira_organization/adapter.py
+++ b/connector_jira_servicedesk/models/jira_organization/adapter.py
@@ -2,6 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import logging
+
from odoo.addons.component.core import Component
_logger = logging.getLogger(__name__)
@@ -20,38 +21,34 @@ class Organization(Resource):
def __init__(self, options, session, raw=None):
super().__init__(
- 'organization/{0}',
- options,
- session,
- '{server}/rest/servicedeskapi/{path}'
+ "organization/{0}", options, session, "{server}/rest/servicedeskapi/{path}"
)
if raw:
self._parse_raw(raw)
class OrganizationAdapter(Component):
- _name = 'jira.organization.adapter'
- _inherit = ['jira.webservice.adapter']
- _apply_on = ['jira.organization']
+ _name = "jira.organization.adapter"
+ _inherit = ["jira.webservice.adapter"]
+ _apply_on = ["jira.organization"]
# The Service Desk REST API returns an error if this header
# is not used. The API may change so they want an agreement for
# the client about this.
- _desk_headers = CaseInsensitiveDict({'X-ExperimentalApi': 'opt-in'}) if (
- CaseInsensitiveDict
- ) else None
+ _desk_headers = (
+ CaseInsensitiveDict({"X-ExperimentalApi": "opt-in"})
+ if (CaseInsensitiveDict)
+ else None
+ )
- _desk_api_path_base = '{server}/rest/servicedeskapi/{path}'
+ _desk_api_path_base = "{server}/rest/servicedeskapi/{path}"
def __init__(self, work_context):
super().__init__(work_context)
self.client._session.headers.update(self._desk_headers)
def read(self, id_):
- organization = Organization(
- self.client._options,
- self.client._session
- )
+ organization = Organization(self.client._options, self.client._session)
with self.handle_404():
organization.find(id_)
return organization.raw
@@ -63,17 +60,17 @@ def search(self):
start = 0
while True:
result = self.client._get_json(
- 'organization',
+ "organization",
params={
- 'start': start,
+ "start": start,
# 50 items per page is the maximum allowed by Jira
- 'limit': start + 50,
+ "limit": start + 50,
},
base=self._desk_api_path_base,
)
start += 50
- orgs += result['values']
- if result['isLastPage']:
+ orgs += result["values"]
+ if result["isLastPage"]:
break
return orgs
diff --git a/connector_jira_servicedesk/models/jira_organization/common.py b/connector_jira_servicedesk/models/jira_organization/common.py
index 6ceb460b..d5bd039a 100644
--- a/connector_jira_servicedesk/models/jira_organization/common.py
+++ b/connector_jira_servicedesk/models/jira_organization/common.py
@@ -3,28 +3,25 @@
from odoo import fields, models
+
from odoo.addons.queue_job.job import job
class JiraOrganization(models.Model):
- _name = 'jira.organization'
- _inherit = 'jira.binding'
- _description = 'Jira Organization'
-
- name = fields.Char('Name', required=True, readonly=True)
- backend_id = fields.Many2one(
- ondelete='cascade'
- )
- project_ids = fields.Many2many(
- comodel_name='jira.project.project'
- )
-
- @job(default_channel='root.connector_jira.import')
+ _name = "jira.organization"
+ _inherit = "jira.binding"
+ _description = "Jira Organization"
+
+ name = fields.Char("Name", required=True, readonly=True)
+ backend_id = fields.Many2one(ondelete="cascade")
+ project_ids = fields.Many2many(comodel_name="jira.project.project")
+
+ @job(default_channel="root.connector_jira.import")
def import_batch(self, backend, from_date=None, to_date=None):
""" Prepare a batch import of organization from Jira
from_date and to_date are ignored for organization
"""
with backend.work_on(self._name) as work:
- importer = work.component(usage='batch.importer')
+ importer = work.component(usage="batch.importer")
importer.run()
diff --git a/connector_jira_servicedesk/models/jira_organization/importer.py b/connector_jira_servicedesk/models/jira_organization/importer.py
index ac0466ef..1ee724f3 100644
--- a/connector_jira_servicedesk/models/jira_organization/importer.py
+++ b/connector_jira_servicedesk/models/jira_organization/importer.py
@@ -1,23 +1,22 @@
# Copyright 2016-2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.components.mapper import mapping
-
from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
class OrganizationMapper(Component):
- _name = 'jira.organization.mapper'
- _inherit = ['jira.import.mapper']
- _apply_on = 'jira.organization'
+ _name = "jira.organization.mapper"
+ _inherit = ["jira.import.mapper"]
+ _apply_on = "jira.organization"
direct = [
- ('name', 'name'),
+ ("name", "name"),
]
@mapping
def backend_id(self, record):
- return {'backend_id': self.backend_record.id}
+ return {"backend_id": self.backend_record.id}
class OrganizationBatchImporter(Component):
@@ -25,12 +24,13 @@ class OrganizationBatchImporter(Component):
For every id in in the list of organizations, a direct import is done.
"""
- _name = 'jira.organization.batch.importer'
- _inherit = 'jira.direct.batch.importer'
- _apply_on = ['jira.organization']
+
+ _name = "jira.organization.batch.importer"
+ _inherit = "jira.direct.batch.importer"
+ _apply_on = ["jira.organization"]
def run(self):
""" Run the synchronization """
records = self.backend_adapter.search()
for record in records:
- self._import_record(record['id'], record=record)
+ self._import_record(record["id"], record=record)
diff --git a/connector_jira_servicedesk/models/project_project/binder.py b/connector_jira_servicedesk/models/project_project/binder.py
index fb9bdf35..2b6025a2 100644
--- a/connector_jira_servicedesk/models/project_project/binder.py
+++ b/connector_jira_servicedesk/models/project_project/binder.py
@@ -4,13 +4,14 @@
import logging
from odoo import tools
+
from odoo.addons.component.core import Component
_logger = logging.getLogger(__name__)
class JiraProjectBinder(Component):
- _inherit = 'jira.project.binder'
+ _inherit = "jira.project.binder"
def to_internal(self, external_id, unwrap=False, organizations=None):
""" Give the Odoo recordset for an external ID
@@ -35,13 +36,11 @@ def to_internal(self, external_id, unwrap=False, organizations=None):
:rtype: recordset
"""
domain = [
- (self._external_field, '=', tools.ustr(external_id)),
- (self._backend_field, '=', self.backend_record.id),
+ (self._external_field, "=", tools.ustr(external_id)),
+ (self._backend_field, "=", self.backend_record.id),
]
if not organizations:
- domain.append(
- ('organization_ids', '=', False),
- )
+ domain.append(("organization_ids", "=", False),)
candidates = self.model.with_context(active_test=False).search(domain)
if organizations:
fallback = self.model.browse()
diff --git a/connector_jira_servicedesk/models/project_project/common.py b/connector_jira_servicedesk/models/project_project/common.py
index 0e790045..a25d927b 100644
--- a/connector_jira_servicedesk/models/project_project/common.py
+++ b/connector_jira_servicedesk/models/project_project/common.py
@@ -1,7 +1,7 @@
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo import api, fields, models, exceptions, _
+from odoo import _, api, exceptions, fields, models
class JiraProjectBaseFields(models.AbstractModel):
@@ -10,28 +10,29 @@ class JiraProjectBaseFields(models.AbstractModel):
Shared by the binding jira.project.project
and the wizard to link/create a JIRA project
"""
- _inherit = 'jira.project.base.mixin'
+
+ _inherit = "jira.project.base.mixin"
organization_ids = fields.Many2many(
- comodel_name='jira.organization',
- string='Organization(s) on Jira',
+ comodel_name="jira.organization",
+ string="Organization(s) on Jira",
domain="[('backend_id', '=', backend_id)]",
help="If organizations are set, a task will be "
- "added to the project only if the project AND "
- "the organization match with the selection."
+ "added to the project only if the project AND "
+ "the organization match with the selection.",
)
class JiraProjectProject(models.Model):
- _inherit = 'jira.project.project'
+ _inherit = "jira.project.project"
@api.model
def _selection_project_type(self):
selection = super()._selection_project_type()
- selection.append(('service_desk', 'Service Desk'))
+ selection.append(("service_desk", "Service Desk"))
return selection
- @api.constrains('backend_id', 'external_id', 'organization_ids')
+ @api.constrains("backend_id", "external_id", "organization_ids")
@api.multi
def _constrains_jira_uniq(self):
"""Modify the base constraint by adding organizations
@@ -46,21 +47,29 @@ def _constrains_jira_uniq(self):
for binding in self:
if not binding.external_id:
continue
- same_link_bindings = self.with_context(active_test=False).search([
- ('id', '!=', binding.id),
- ('backend_id', '=', binding.backend_id.id),
- ('external_id', '=', binding.external_id),
- ])
+ same_link_bindings = self.with_context(active_test=False).search(
+ [
+ ("id", "!=", binding.id),
+ ("backend_id", "=", binding.backend_id.id),
+ ("external_id", "=", binding.external_id),
+ ]
+ )
for other in same_link_bindings:
my_orgs = binding.organization_ids
other_orgs = other.organization_ids
if not my_orgs and not other_orgs:
- raise exceptions.ValidationError(_(
- "The project %s is already linked with the same"
- " JIRA project without organization."
- ) % (other.display_name))
+ raise exceptions.ValidationError(
+ _(
+ "The project %s is already linked with the same"
+ " JIRA project without organization."
+ )
+ % (other.display_name)
+ )
if set(my_orgs.ids) == set(other_orgs.ids):
- raise exceptions.ValidationError(_(
- "The project %s is already linked with this "
- "JIRA project and similar organizations."
- ) % (other.display_name))
+ raise exceptions.ValidationError(
+ _(
+ "The project %s is already linked with this "
+ "JIRA project and similar organizations."
+ )
+ % (other.display_name)
+ )
diff --git a/connector_jira_servicedesk/models/project_project/project_link_jira.py b/connector_jira_servicedesk/models/project_project/project_link_jira.py
index b196ab72..8a635634 100644
--- a/connector_jira_servicedesk/models/project_project/project_link_jira.py
+++ b/connector_jira_servicedesk/models/project_project/project_link_jira.py
@@ -9,26 +9,26 @@
class ProjectLinkJira(models.TransientModel):
- _inherit = 'project.link.jira'
+ _inherit = "project.link.jira"
@api.model
def _selection_state(self):
states = super()._selection_state()
- states.append(('link_organizations', 'Link Organizations'))
+ states.append(("link_organizations", "Link Organizations"))
return states
def state_exit_start(self):
- if self.sync_action == 'link':
- self.state = 'link_organizations'
+ if self.sync_action == "link":
+ self.state = "link_organizations"
else:
super().state_exit_start()
def state_exit_link_organizations(self):
if not self.jira_project_id:
self._link_binding()
- self.state = 'issue_types'
+ self.state = "issue_types"
def _prepare_link_binding_values(self, jira_project):
values = super()._prepare_link_binding_values(jira_project)
- values['organization_ids'] = [(6, 0, self.organization_ids.ids)]
+ values["organization_ids"] = [(6, 0, self.organization_ids.ids)]
return values
diff --git a/connector_jira_servicedesk/models/project_task/importer.py b/connector_jira_servicedesk/models/project_task/importer.py
index 1392e551..2a4d693a 100644
--- a/connector_jira_servicedesk/models/project_task/importer.py
+++ b/connector_jira_servicedesk/models/project_task/importer.py
@@ -5,44 +5,39 @@
class ProjectTaskProjectMatcher(Component):
- _inherit = 'jira.task.project.matcher'
+ _inherit = "jira.task.project.matcher"
def find_project_binding(self, jira_task_data, unwrap=False):
- organizations = self.env['jira.organization'].browse()
- jira_org_ids = self.component(
- usage='organization.from.task'
- ).get_jira_org_ids(jira_task_data)
- binder = self.binder_for('jira.organization')
+ organizations = self.env["jira.organization"].browse()
+ jira_org_ids = self.component(usage="organization.from.task").get_jira_org_ids(
+ jira_task_data
+ )
+ binder = self.binder_for("jira.organization")
for jira_org_id in jira_org_ids:
organizations |= binder.to_internal(jira_org_id)
- jira_project_id = jira_task_data['fields']['project']['id']
- binder = self.binder_for('jira.project.project')
+ jira_project_id = jira_task_data["fields"]["project"]["id"]
+ binder = self.binder_for("jira.project.project")
return binder.to_internal(
- jira_project_id,
- unwrap=unwrap,
- organizations=organizations,
+ jira_project_id, unwrap=unwrap, organizations=organizations,
)
class OrganizationsFromTask(Component):
- _name = 'jira.organization.from.task'
- _inherit = ['jira.base']
- _usage = 'organization.from.task'
+ _name = "jira.organization.from.task"
+ _inherit = ["jira.base"]
+ _usage = "organization.from.task"
def get_jira_org_ids(self, jira_task_data):
organization_field_name = self.backend_record.organization_field_name
if not organization_field_name:
return []
- task_fields = jira_task_data.get('fields', {})
- return [
- rec['id'] for rec in
- task_fields.get(organization_field_name) or []
- ]
+ task_fields = jira_task_data.get("fields", {})
+ return [rec["id"] for rec in task_fields.get(organization_field_name) or []]
class ProjectTaskImporter(Component):
- _inherit = 'jira.project.task.importer'
+ _inherit = "jira.project.task.importer"
def _get_external_data(self):
"""Return the raw Jira data for ``self.external_id``"""
@@ -52,8 +47,8 @@ def _get_external_data(self):
def _import_dependencies(self):
"""Import the dependencies for the record"""
super()._import_dependencies()
- jira_org_ids = self.component(
- usage='organization.from.task'
- ).get_jira_org_ids(self.external_record)
+ jira_org_ids = self.component(usage="organization.from.task").get_jira_org_ids(
+ self.external_record
+ )
for jira_org_id in jira_org_ids:
- self._import_dependency(jira_org_id, 'jira.organization')
+ self._import_dependency(jira_org_id, "jira.organization")
diff --git a/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_batch.yaml b/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_batch.yaml
index b3fadf72..1e08be0d 100644
--- a/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_batch.yaml
+++ b/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_batch.yaml
@@ -1,387 +1,429 @@
interactions:
-- request:
- body: null
- headers:
- Accept:
- - !!binary |
- YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
- Accept-Encoding:
- - !!binary |
- Z3ppcCwgZGVmbGF0ZQ==
- Cache-Control:
- - !!binary |
- bm8tY2FjaGU=
- Connection:
- - !!binary |
- a2VlcC1hbGl2ZQ==
- Content-Type:
- - !!binary |
- YXBwbGljYXRpb24vanNvbg==
- User-Agent:
- - !!binary |
- cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
- X-Atlassian-Token:
- - !!binary |
- bm8tY2hlY2s=
- method: GET
- uri: http://jira:8080/rest/api/2/serverInfo
- response:
- body: {string: '{"baseUrl":"http://localhost:8080","version":"7.12.3","versionNumbers":[7,12,3],"deploymentType":"Server","buildNumber":712004,"buildDate":"2018-10-12T00:00:00.000+0000","serverTime":"2019-04-09T07:25:35.143+0000","scmInfo":"5ef91d760d7124da5ebec5c16a948a4a807698df","serverTitle":"Jira"}'}
- headers:
- Cache-Control: ['no-cache, no-store, no-transform']
- Content-Security-Policy: [frame-ancestors 'self']
- Content-Type: [application/json;charset=UTF-8]
- Date: ['Tue, 09 Apr 2019 07:25:35 GMT']
- Set-Cookie: [JSESSIONID=E70FE92161655AB0AB0CCFA4FFB1A494; Path=/; HttpOnly,
- atlassian.xsrf.token=BYG3-6SPF-0UM1-2LBO_d962a47ccf42cb8fae37c2165e943864fdd7a3f4_lin;
- Path=/]
- Transfer-Encoding: [chunked]
- Vary: [User-Agent]
- X-AREQUESTID: [445x2278x1]
- X-ASEN: [SEN-L13384799]
- X-ASESSIONID: [1xm845a]
- X-AUSERNAME: [gbaconnier]
- X-Content-Type-Options: [nosniff]
- X-Frame-Options: [SAMEORIGIN]
- X-Seraph-LoginReason: [OK]
- X-XSS-Protection: [1; mode=block]
- content-length: ['288']
- status: {code: 200, message: ''}
-- request:
- body: null
- headers:
- Accept:
- - !!binary |
- YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
- Accept-Encoding:
- - !!binary |
- Z3ppcCwgZGVmbGF0ZQ==
- Cache-Control:
- - !!binary |
- bm8tY2FjaGU=
- Connection:
- - !!binary |
- a2VlcC1hbGl2ZQ==
- Content-Type:
- - !!binary |
- YXBwbGljYXRpb24vanNvbg==
- Cookie:
- - !!binary |
- YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT19kOTYyYTQ3Y2NmNDJjYjhm
- YWUzN2MyMTY1ZTk0Mzg2NGZkZDdhM2Y0X2xpbjsgSlNFU1NJT05JRD1FNzBGRTkyMTYxNjU1QUIw
- QUIwQ0NGQTRGRkIxQTQ5NA==
- User-Agent:
- - !!binary |
- cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
- X-Atlassian-Token:
- - !!binary |
- bm8tY2hlY2s=
- method: GET
- uri: http://jira:8080/rest/api/2/field
- response:
- body: {string: "[{\"id\":\"issuetype\",\"name\":\"Issue Type\",\"custom\":false,\"\
- orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- issuetype\",\"type\"],\"schema\":{\"type\":\"issuetype\",\"system\":\"issuetype\"\
- }},{\"id\":\"timespent\",\"name\":\"Time Spent\",\"custom\":false,\"orderable\"\
- :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"timespent\"\
- ],\"schema\":{\"type\":\"number\",\"system\":\"timespent\"}},{\"id\":\"project\"\
- ,\"name\":\"Project\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
- searchable\":true,\"clauseNames\":[\"project\"],\"schema\":{\"type\":\"project\"\
- ,\"system\":\"project\"}},{\"id\":\"fixVersions\",\"name\":\"Fix Version/s\"\
- ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"fixVersion\"],\"schema\":{\"type\":\"array\",\"items\":\"\
- version\",\"system\":\"fixVersions\"}},{\"id\":\"aggregatetimespent\",\"name\"\
- :\"\u03A3 Time Spent\",\"custom\":false,\"orderable\":false,\"navigable\"\
- :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
- ,\"system\":\"aggregatetimespent\"}},{\"id\":\"resolution\",\"name\":\"Resolution\"\
- ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"resolution\"],\"schema\":{\"type\":\"resolution\",\"system\"\
- :\"resolution\"}},{\"id\":\"customfield_10104\",\"name\":\"Epic Color\",\"\
- custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10104]\",\"Epic Color\"],\"schema\":{\"type\":\"string\"\
- ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-color\",\"customId\":10104}},{\"\
- id\":\"customfield_10105\",\"name\":\"Rank\",\"custom\":true,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10105]\"\
- ,\"Rank\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-lexo-rank\"\
- ,\"customId\":10105}},{\"id\":\"customfield_10106\",\"name\":\"Story Points\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10106]\",\"Story Points\"],\"schema\":{\"type\":\"number\"\
- ,\"custom\":\"com.atlassian.jira.plugin.system.customfieldtypes:float\",\"\
- customId\":10106}},{\"id\":\"resolutiondate\",\"name\":\"Resolved\",\"custom\"\
- :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
- :[\"resolutiondate\",\"resolved\"],\"schema\":{\"type\":\"datetime\",\"system\"\
- :\"resolutiondate\"}},{\"id\":\"workratio\",\"name\":\"Work Ratio\",\"custom\"\
- :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
- :[\"workratio\"],\"schema\":{\"type\":\"number\",\"system\":\"workratio\"\
- }},{\"id\":\"lastViewed\",\"name\":\"Last Viewed\",\"custom\":false,\"orderable\"\
- :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"lastViewed\"\
- ],\"schema\":{\"type\":\"datetime\",\"system\":\"lastViewed\"}},{\"id\":\"\
- watches\",\"name\":\"Watchers\",\"custom\":false,\"orderable\":false,\"navigable\"\
- :true,\"searchable\":false,\"clauseNames\":[\"watchers\"],\"schema\":{\"type\"\
- :\"watches\",\"system\":\"watches\"}},{\"id\":\"thumbnail\",\"name\":\"Images\"\
- ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
- clauseNames\":[]},{\"id\":\"created\",\"name\":\"Created\",\"custom\":false,\"\
- orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- created\",\"createdDate\"],\"schema\":{\"type\":\"datetime\",\"system\":\"\
- created\"}},{\"id\":\"priority\",\"name\":\"Priority\",\"custom\":false,\"\
- orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- priority\"],\"schema\":{\"type\":\"priority\",\"system\":\"priority\"}},{\"\
- id\":\"customfield_10100\",\"name\":\"Sprint\",\"custom\":true,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10100]\"\
- ,\"Sprint\"],\"schema\":{\"type\":\"array\",\"items\":\"string\",\"custom\"\
- :\"com.pyxis.greenhopper.jira:gh-sprint\",\"customId\":10100}},{\"id\":\"\
- customfield_10101\",\"name\":\"Epic Link\",\"custom\":true,\"orderable\":true,\"\
- navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10101]\",\"Epic\
- \ Link\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-link\"\
- ,\"customId\":10101}},{\"id\":\"customfield_10102\",\"name\":\"Epic Status\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10102]\",\"Epic Status\"],\"schema\":{\"type\":\"option\"\
- ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-status\",\"customId\":10102}},{\"\
- id\":\"labels\",\"name\":\"Labels\",\"custom\":false,\"orderable\":true,\"\
- navigable\":true,\"searchable\":true,\"clauseNames\":[\"labels\"],\"schema\"\
- :{\"type\":\"array\",\"items\":\"string\",\"system\":\"labels\"}},{\"id\"\
- :\"customfield_10103\",\"name\":\"Epic Name\",\"custom\":true,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10103]\"\
- ,\"Epic Name\"],\"schema\":{\"type\":\"string\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-label\"\
- ,\"customId\":10103}},{\"id\":\"timeestimate\",\"name\":\"Remaining Estimate\"\
- ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
- clauseNames\":[\"remainingEstimate\",\"timeestimate\"],\"schema\":{\"type\"\
- :\"number\",\"system\":\"timeestimate\"}},{\"id\":\"aggregatetimeoriginalestimate\"\
- ,\"name\":\"\u03A3 Original Estimate\",\"custom\":false,\"orderable\":false,\"\
- navigable\":true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\"\
- :\"number\",\"system\":\"aggregatetimeoriginalestimate\"}},{\"id\":\"versions\"\
- ,\"name\":\"Affects Version/s\",\"custom\":false,\"orderable\":true,\"navigable\"\
- :true,\"searchable\":true,\"clauseNames\":[\"affectedVersion\"],\"schema\"\
- :{\"type\":\"array\",\"items\":\"version\",\"system\":\"versions\"}},{\"id\"\
- :\"issuelinks\",\"name\":\"Linked Issues\",\"custom\":false,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[],\"schema\"\
- :{\"type\":\"array\",\"items\":\"issuelinks\",\"system\":\"issuelinks\"}},{\"\
- id\":\"assignee\",\"name\":\"Assignee\",\"custom\":false,\"orderable\":true,\"\
- navigable\":true,\"searchable\":true,\"clauseNames\":[\"assignee\"],\"schema\"\
- :{\"type\":\"user\",\"system\":\"assignee\"}},{\"id\":\"updated\",\"name\"\
- :\"Updated\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
- :true,\"clauseNames\":[\"updated\",\"updatedDate\"],\"schema\":{\"type\":\"\
- datetime\",\"system\":\"updated\"}},{\"id\":\"status\",\"name\":\"Status\"\
- ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"status\"],\"schema\":{\"type\":\"status\",\"system\":\"status\"\
- }},{\"id\":\"components\",\"name\":\"Component/s\",\"custom\":false,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"component\"\
- ],\"schema\":{\"type\":\"array\",\"items\":\"component\",\"system\":\"components\"\
- }},{\"id\":\"issuekey\",\"name\":\"Key\",\"custom\":false,\"orderable\":false,\"\
- navigable\":true,\"searchable\":false,\"clauseNames\":[\"id\",\"issue\",\"\
- issuekey\",\"key\"]},{\"id\":\"timeoriginalestimate\",\"name\":\"Original\
- \ Estimate\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
- :false,\"clauseNames\":[\"originalEstimate\",\"timeoriginalestimate\"],\"\
- schema\":{\"type\":\"number\",\"system\":\"timeoriginalestimate\"}},{\"id\"\
- :\"description\",\"name\":\"Description\",\"custom\":false,\"orderable\":true,\"\
- navigable\":true,\"searchable\":true,\"clauseNames\":[\"description\"],\"\
- schema\":{\"type\":\"string\",\"system\":\"description\"}},{\"id\":\"timetracking\"\
- ,\"name\":\"Time Tracking\",\"custom\":false,\"orderable\":true,\"navigable\"\
- :false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\":\"timetracking\"\
- ,\"system\":\"timetracking\"}},{\"id\":\"customfield_10203\",\"name\":\"Organizations\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10203]\",\"Organizations\"],\"schema\":{\"type\":\"array\"\
- ,\"items\":\"sd-customerorganization\",\"custom\":\"com.atlassian.servicedesk:sd-customer-organizations\"\
- ,\"customId\":10203}},{\"id\":\"customfield_10204\",\"name\":\"Satisfaction\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10204]\",\"Satisfaction\"],\"schema\":{\"type\":\"any\"\
- ,\"custom\":\"com.atlassian.servicedesk:sd-request-feedback\",\"customId\"\
- :10204}},{\"id\":\"security\",\"name\":\"Security Level\",\"custom\":false,\"\
- orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- level\"],\"schema\":{\"type\":\"securitylevel\",\"system\":\"security\"}},{\"\
- id\":\"customfield_10205\",\"name\":\"Satisfaction date\",\"custom\":true,\"\
- orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- cf[10205]\",\"Satisfaction date\"],\"schema\":{\"type\":\"datetime\",\"custom\"\
- :\"com.atlassian.servicedesk:sd-request-feedback-date\",\"customId\":10205}},{\"\
- id\":\"customfield_10206\",\"name\":\"Approvers\",\"custom\":true,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"Approvers\"\
- ,\"cf[10206]\"],\"schema\":{\"type\":\"array\",\"items\":\"user\",\"custom\"\
- :\"com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker\",\"\
- customId\":10206}},{\"id\":\"attachment\",\"name\":\"Attachment\",\"custom\"\
- :false,\"orderable\":true,\"navigable\":false,\"searchable\":true,\"clauseNames\"\
- :[\"attachments\"],\"schema\":{\"type\":\"array\",\"items\":\"attachment\"\
- ,\"system\":\"attachment\"}},{\"id\":\"aggregatetimeestimate\",\"name\":\"\
- \u03A3 Remaining Estimate\",\"custom\":false,\"orderable\":false,\"navigable\"\
- :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
- ,\"system\":\"aggregatetimeestimate\"}},{\"id\":\"customfield_10207\",\"name\"\
- :\"Time to resolution\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"\
- searchable\":true,\"clauseNames\":[\"cf[10207]\",\"Time to resolution\"],\"\
- schema\":{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
- ,\"customId\":10207}},{\"id\":\"customfield_10208\",\"name\":\"Time to first\
- \ response\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
- :true,\"clauseNames\":[\"cf[10208]\",\"Time to first response\"],\"schema\"\
- :{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
- ,\"customId\":10208}},{\"id\":\"summary\",\"name\":\"Summary\",\"custom\"\
- :false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
- :[\"summary\"],\"schema\":{\"type\":\"string\",\"system\":\"summary\"}},{\"\
- id\":\"creator\",\"name\":\"Creator\",\"custom\":false,\"orderable\":false,\"\
- navigable\":true,\"searchable\":true,\"clauseNames\":[\"creator\"],\"schema\"\
- :{\"type\":\"user\",\"system\":\"creator\"}},{\"id\":\"subtasks\",\"name\"\
- :\"Sub-Tasks\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
- searchable\":false,\"clauseNames\":[\"subtasks\"],\"schema\":{\"type\":\"\
- array\",\"items\":\"issuelinks\",\"system\":\"subtasks\"}},{\"id\":\"reporter\"\
- ,\"name\":\"Reporter\",\"custom\":false,\"orderable\":true,\"navigable\":true,\"\
- searchable\":true,\"clauseNames\":[\"reporter\"],\"schema\":{\"type\":\"user\"\
- ,\"system\":\"reporter\"}},{\"id\":\"aggregateprogress\",\"name\":\"\u03A3\
- \ Progress\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
- :false,\"clauseNames\":[],\"schema\":{\"type\":\"progress\",\"system\":\"\
- aggregateprogress\"}},{\"id\":\"customfield_10000\",\"name\":\"Development\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10000]\",\"Development\"],\"schema\":{\"type\":\"any\"\
- ,\"custom\":\"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary\"\
- ,\"customId\":10000}},{\"id\":\"customfield_10200\",\"name\":\"Approvals\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"Approvals\",\"cf[10200]\"],\"schema\":{\"type\":\"sd-approvals\"\
- ,\"custom\":\"com.atlassian.servicedesk.approvals-plugin:sd-approvals\",\"\
- customId\":10200}},{\"id\":\"customfield_10201\",\"name\":\"Request participants\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10201]\",\"Request participants\"],\"schema\":{\"type\"\
- :\"array\",\"items\":\"user\",\"custom\":\"com.atlassian.servicedesk:sd-request-participants\"\
- ,\"customId\":10201}},{\"id\":\"customfield_10202\",\"name\":\"Customer Request\
- \ Type\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
- :true,\"clauseNames\":[\"cf[10202]\",\"Customer Request Type\"],\"schema\"\
- :{\"type\":\"sd-customerrequesttype\",\"custom\":\"com.atlassian.servicedesk:vp-origin\"\
- ,\"customId\":10202}},{\"id\":\"environment\",\"name\":\"Environment\",\"\
- custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"environment\"],\"schema\":{\"type\":\"string\",\"system\"\
- :\"environment\"}},{\"id\":\"duedate\",\"name\":\"Due Date\",\"custom\":false,\"\
- orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- due\",\"duedate\"],\"schema\":{\"type\":\"date\",\"system\":\"duedate\"}},{\"\
- id\":\"progress\",\"name\":\"Progress\",\"custom\":false,\"orderable\":false,\"\
- navigable\":true,\"searchable\":false,\"clauseNames\":[\"progress\"],\"schema\"\
- :{\"type\":\"progress\",\"system\":\"progress\"}},{\"id\":\"comment\",\"name\"\
- :\"Comment\",\"custom\":false,\"orderable\":true,\"navigable\":false,\"searchable\"\
- :true,\"clauseNames\":[\"comment\"],\"schema\":{\"type\":\"comments-page\"\
- ,\"system\":\"comment\"}},{\"id\":\"votes\",\"name\":\"Votes\",\"custom\"\
- :false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"clauseNames\"\
- :[\"votes\"],\"schema\":{\"type\":\"votes\",\"system\":\"votes\"}},{\"id\"\
- :\"worklog\",\"name\":\"Log Work\",\"custom\":false,\"orderable\":true,\"\
- navigable\":false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\"\
- :\"array\",\"items\":\"worklog\",\"system\":\"worklog\"}}]"}
- headers:
- Cache-Control: ['no-cache, no-store, no-transform']
- Content-Security-Policy: [frame-ancestors 'self']
- Content-Type: [application/json;charset=UTF-8]
- Date: ['Tue, 09 Apr 2019 07:25:35 GMT']
- Set-Cookie: [JSESSIONID=695F7FF23DB85CFCEC23F2A0D87D7D6B; Path=/; HttpOnly]
- Transfer-Encoding: [chunked]
- Vary: [User-Agent]
- X-AREQUESTID: [445x2279x1]
- X-ASEN: [SEN-L13384799]
- X-ASESSIONID: [1fb1pfe]
- X-AUSERNAME: [gbaconnier]
- X-Content-Type-Options: [nosniff]
- X-Frame-Options: [SAMEORIGIN]
- X-Seraph-LoginReason: [OK]
- X-XSS-Protection: [1; mode=block]
- content-length: ['12093']
- status: {code: 200, message: ''}
-- request:
- body: null
- headers:
- Accept:
- - !!binary |
- YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
- Accept-Encoding:
- - !!binary |
- Z3ppcCwgZGVmbGF0ZQ==
- Cache-Control:
- - !!binary |
- bm8tY2FjaGU=
- Connection:
- - !!binary |
- a2VlcC1hbGl2ZQ==
- Content-Type:
- - !!binary |
- YXBwbGljYXRpb24vanNvbg==
- Cookie:
- - !!binary |
- YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT19kOTYyYTQ3Y2NmNDJjYjhm
- YWUzN2MyMTY1ZTk0Mzg2NGZkZDdhM2Y0X2xpbjsgSlNFU1NJT05JRD02OTVGN0ZGMjNEQjg1Q0ZD
- RUMyM0YyQTBEODdEN0Q2Qg==
- User-Agent:
- - !!binary |
- cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
- X-Atlassian-Token:
- - !!binary |
- bm8tY2hlY2s=
- x-experimentalapi:
- - !!binary |
- b3B0LWlu
- method: GET
- uri: http://jira:8080/rest/servicedeskapi/organization?start=0&limit=50
- response:
- body: {string: '{"size":50,"start":0,"limit":50,"isLastPage":false,"_links":{"base":"http://jira:8080","context":"","next":"http://jira:8080/rest/servicedeskapi/organization?limit=50&start=50","self":"http://jira:8080/rest/servicedeskapi/organization?start=0&limit=50"},"values":[{"id":"1","name":"org1","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/1"}},{"id":"2","name":"org2","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/2"}},{"id":"3","name":"org3","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/3"}},{"id":"4","name":"org30","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/4"}},{"id":"5","name":"org32","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/5"}},{"id":"6","name":"org31","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/6"}},{"id":"7","name":"org34","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/7"}},{"id":"8","name":"org33","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/8"}},{"id":"9","name":"org36","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/9"}},{"id":"10","name":"org35","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/10"}},{"id":"11","name":"org38","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/11"}},{"id":"12","name":"org37","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/12"}},{"id":"13","name":"org39","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/13"}},{"id":"14","name":"org50","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/14"}},{"id":"15","name":"org41","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/15"}},{"id":"16","name":"org40","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/16"}},{"id":"17","name":"org43","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/17"}},{"id":"18","name":"org42","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/18"}},{"id":"19","name":"org45","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/19"}},{"id":"20","name":"org44","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/20"}},{"id":"21","name":"org47","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/21"}},{"id":"22","name":"org46","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/22"}},{"id":"23","name":"org49","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/23"}},{"id":"24","name":"org48","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/24"}},{"id":"25","name":"org60","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/25"}},{"id":"26","name":"org52","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/26"}},{"id":"27","name":"org51","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/27"}},{"id":"28","name":"org54","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/28"}},{"id":"29","name":"org10","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/29"}},{"id":"30","name":"org53","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/30"}},{"id":"31","name":"org56","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/31"}},{"id":"32","name":"org12","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/32"}},{"id":"33","name":"org55","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/33"}},{"id":"34","name":"org11","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/34"}},{"id":"35","name":"org58","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/35"}},{"id":"36","name":"org14","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/36"}},{"id":"37","name":"org57","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/37"}},{"id":"38","name":"org13","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/38"}},{"id":"39","name":"org16","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/39"}},{"id":"40","name":"org59","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/40"}},{"id":"41","name":"org15","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/41"}},{"id":"42","name":"org18","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/42"}},{"id":"43","name":"org17","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/43"}},{"id":"44","name":"org19","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/44"}},{"id":"45","name":"org8","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/45"}},{"id":"46","name":"org9","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/46"}},{"id":"47","name":"org4","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/47"}},{"id":"48","name":"org5","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/48"}},{"id":"49","name":"org6","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/49"}},{"id":"50","name":"org7","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/50"}}]}'}
- headers:
- Cache-Control: ['no-cache, no-store, no-transform']
- Content-Security-Policy: [frame-ancestors 'self']
- Content-Type: [application/json;charset=UTF-8]
- Date: ['Tue, 09 Apr 2019 07:25:35 GMT']
- Set-Cookie: [JSESSIONID=05198C071AE09FF29405F7911341C627; Path=/; HttpOnly]
- Transfer-Encoding: [chunked]
- Vary: [User-Agent]
- X-AREQUESTID: [445x2280x1]
- X-ASEN: [SEN-L13384799]
- X-ASESSIONID: [1xlna5j]
- X-AUSERNAME: [gbaconnier]
- X-Content-Type-Options: [nosniff]
- X-Frame-Options: [SAMEORIGIN]
- X-Seraph-LoginReason: [OK]
- X-XSS-Protection: [1; mode=block]
- content-length: ['5238']
- status: {code: 200, message: ''}
-- request:
- body: null
- headers:
- Accept:
- - !!binary |
- YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
- Accept-Encoding:
- - !!binary |
- Z3ppcCwgZGVmbGF0ZQ==
- Cache-Control:
- - !!binary |
- bm8tY2FjaGU=
- Connection:
- - !!binary |
- a2VlcC1hbGl2ZQ==
- Content-Type:
- - !!binary |
- YXBwbGljYXRpb24vanNvbg==
- Cookie:
- - !!binary |
- YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT19kOTYyYTQ3Y2NmNDJjYjhm
- YWUzN2MyMTY1ZTk0Mzg2NGZkZDdhM2Y0X2xpbjsgSlNFU1NJT05JRD0wNTE5OEMwNzFBRTA5RkYy
- OTQwNUY3OTExMzQxQzYyNw==
- User-Agent:
- - !!binary |
- cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
- X-Atlassian-Token:
- - !!binary |
- bm8tY2hlY2s=
- x-experimentalapi:
- - !!binary |
- b3B0LWlu
- method: GET
- uri: http://jira:8080/rest/servicedeskapi/organization?start=50&limit=100
- response:
- body: {string: '{"size":10,"start":50,"limit":50,"isLastPage":true,"_links":{"base":"http://jira:8080","context":"","prev":"http://jira:8080/rest/servicedeskapi/organization?limit=50&start=0","self":"http://jira:8080/rest/servicedeskapi/organization?start=50&limit=100"},"values":[{"id":"51","name":"org21","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/51"}},{"id":"52","name":"org20","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/52"}},{"id":"53","name":"org23","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/53"}},{"id":"54","name":"org22","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/54"}},{"id":"55","name":"org25","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/55"}},{"id":"56","name":"org24","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/56"}},{"id":"57","name":"org27","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/57"}},{"id":"58","name":"org26","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/58"}},{"id":"59","name":"org29","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/59"}},{"id":"60","name":"org28","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/60"}}]}'}
- headers:
- Cache-Control: ['no-cache, no-store, no-transform']
- Content-Security-Policy: [frame-ancestors 'self']
- Content-Type: [application/json;charset=UTF-8]
- Date: ['Tue, 09 Apr 2019 07:25:35 GMT']
- Set-Cookie: [JSESSIONID=895A29A492A56350C6C51AD7ABEEDE24; Path=/; HttpOnly]
- Transfer-Encoding: [chunked]
- Vary: [User-Agent]
- X-AREQUESTID: [445x2281x1]
- X-ASEN: [SEN-L13384799]
- X-ASESSIONID: [1g3mv90]
- X-AUSERNAME: [gbaconnier]
- X-Content-Type-Options: [nosniff]
- X-Frame-Options: [SAMEORIGIN]
- X-Seraph-LoginReason: [OK]
- X-XSS-Protection: [1; mode=block]
- content-length: ['1266']
- status: {code: 200, message: ''}
+ - request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ method: GET
+ uri: http://jira:8080/rest/api/2/serverInfo
+ response:
+ body:
+ {
+ string: '{"baseUrl":"http://localhost:8080","version":"7.12.3","versionNumbers":[7,12,3],"deploymentType":"Server","buildNumber":712004,"buildDate":"2018-10-12T00:00:00.000+0000","serverTime":"2019-04-09T07:25:35.143+0000","scmInfo":"5ef91d760d7124da5ebec5c16a948a4a807698df","serverTitle":"Jira"}',
+ }
+ headers:
+ Cache-Control: ["no-cache, no-store, no-transform"]
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ["Tue, 09 Apr 2019 07:25:35 GMT"]
+ Set-Cookie:
+ [
+ JSESSIONID=E70FE92161655AB0AB0CCFA4FFB1A494; Path=/; HttpOnly,
+ atlassian.xsrf.token=BYG3-6SPF-0UM1-2LBO_d962a47ccf42cb8fae37c2165e943864fdd7a3f4_lin;
+ Path=/,
+ ]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [445x2278x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [1xm845a]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ["288"]
+ status: {code: 200, message: ""}
+ - request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ Cookie:
+ - !!binary |
+ YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT19kOTYyYTQ3Y2NmNDJjYjhm
+ YWUzN2MyMTY1ZTk0Mzg2NGZkZDdhM2Y0X2xpbjsgSlNFU1NJT05JRD1FNzBGRTkyMTYxNjU1QUIw
+ QUIwQ0NGQTRGRkIxQTQ5NA==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ method: GET
+ uri: http://jira:8080/rest/api/2/field
+ response:
+ body: {string: "[{\"id\":\"issuetype\",\"name\":\"Issue
+ Type\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ issuetype\",\"type\"],\"schema\":{\"type\":\"issuetype\",\"system\":\"issuetype\"\
+ }},{\"id\":\"timespent\",\"name\":\"Time
+ Spent\",\"custom\":false,\"orderable\"\
+ :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"timespent\"\
+ ],\"schema\":{\"type\":\"number\",\"system\":\"timespent\"}},{\"id\":\"project\"\
+ ,\"name\":\"Project\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"project\"],\"schema\":{\"type\":\"project\"\
+ ,\"system\":\"project\"}},{\"id\":\"fixVersions\",\"name\":\"Fix
+ Version/s\"\
+ ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"fixVersion\"],\"schema\":{\"type\":\"array\",\"items\":\"\
+ version\",\"system\":\"fixVersions\"}},{\"id\":\"aggregatetimespent\",\"name\"\
+ :\"\u03A3 Time Spent\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
+ ,\"system\":\"aggregatetimespent\"}},{\"id\":\"resolution\",\"name\":\"Resolution\"\
+ ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"resolution\"],\"schema\":{\"type\":\"resolution\",\"system\"\
+ :\"resolution\"}},{\"id\":\"customfield_10104\",\"name\":\"Epic Color\",\"\
+ custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10104]\",\"Epic
+ Color\"],\"schema\":{\"type\":\"string\"\
+ ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-color\",\"customId\":10104}},{\"\
+ id\":\"customfield_10105\",\"name\":\"Rank\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10105]\"\
+ ,\"Rank\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-lexo-rank\"\
+ ,\"customId\":10105}},{\"id\":\"customfield_10106\",\"name\":\"Story
+ Points\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10106]\",\"Story
+ Points\"],\"schema\":{\"type\":\"number\"\
+ ,\"custom\":\"com.atlassian.jira.plugin.system.customfieldtypes:float\",\"\
+ customId\":10106}},{\"id\":\"resolutiondate\",\"name\":\"Resolved\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"resolutiondate\",\"resolved\"],\"schema\":{\"type\":\"datetime\",\"system\"\
+ :\"resolutiondate\"}},{\"id\":\"workratio\",\"name\":\"Work
+ Ratio\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"workratio\"],\"schema\":{\"type\":\"number\",\"system\":\"workratio\"\
+ }},{\"id\":\"lastViewed\",\"name\":\"Last
+ Viewed\",\"custom\":false,\"orderable\"\
+ :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"lastViewed\"\
+ ],\"schema\":{\"type\":\"datetime\",\"system\":\"lastViewed\"}},{\"id\":\"\
+ watches\",\"name\":\"Watchers\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[\"watchers\"],\"schema\":{\"type\"\
+ :\"watches\",\"system\":\"watches\"}},{\"id\":\"thumbnail\",\"name\":\"Images\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
+ clauseNames\":[]},{\"id\":\"created\",\"name\":\"Created\",\"custom\":false,\"\
+ orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ created\",\"createdDate\"],\"schema\":{\"type\":\"datetime\",\"system\":\"\
+ created\"}},{\"id\":\"priority\",\"name\":\"Priority\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ priority\"],\"schema\":{\"type\":\"priority\",\"system\":\"priority\"}},{\"\
+ id\":\"customfield_10100\",\"name\":\"Sprint\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10100]\"\
+ ,\"Sprint\"],\"schema\":{\"type\":\"array\",\"items\":\"string\",\"custom\"\
+ :\"com.pyxis.greenhopper.jira:gh-sprint\",\"customId\":10100}},{\"id\":\"\
+ customfield_10101\",\"name\":\"Epic
+ Link\",\"custom\":true,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10101]\",\"Epic\
+ \
+ Link\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-link\"\
+ ,\"customId\":10101}},{\"id\":\"customfield_10102\",\"name\":\"Epic
+ Status\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10102]\",\"Epic
+ Status\"],\"schema\":{\"type\":\"option\"\
+ ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-status\",\"customId\":10102}},{\"\
+ id\":\"labels\",\"name\":\"Labels\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"labels\"],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"string\",\"system\":\"labels\"}},{\"id\"\
+ :\"customfield_10103\",\"name\":\"Epic Name\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10103]\"\
+ ,\"Epic
+ Name\"],\"schema\":{\"type\":\"string\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-label\"\
+ ,\"customId\":10103}},{\"id\":\"timeestimate\",\"name\":\"Remaining
+ Estimate\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
+ clauseNames\":[\"remainingEstimate\",\"timeestimate\"],\"schema\":{\"type\"\
+ :\"number\",\"system\":\"timeestimate\"}},{\"id\":\"aggregatetimeoriginalestimate\"\
+ ,\"name\":\"\u03A3 Original
+ Estimate\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\"\
+ :\"number\",\"system\":\"aggregatetimeoriginalestimate\"}},{\"id\":\"versions\"\
+ ,\"name\":\"Affects
+ Version/s\",\"custom\":false,\"orderable\":true,\"navigable\"\
+ :true,\"searchable\":true,\"clauseNames\":[\"affectedVersion\"],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"version\",\"system\":\"versions\"}},{\"id\"\
+ :\"issuelinks\",\"name\":\"Linked Issues\",\"custom\":false,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"issuelinks\",\"system\":\"issuelinks\"}},{\"\
+ id\":\"assignee\",\"name\":\"Assignee\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"assignee\"],\"schema\"\
+ :{\"type\":\"user\",\"system\":\"assignee\"}},{\"id\":\"updated\",\"name\"\
+ :\"Updated\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"updated\",\"updatedDate\"],\"schema\":{\"type\":\"\
+ datetime\",\"system\":\"updated\"}},{\"id\":\"status\",\"name\":\"Status\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"status\"],\"schema\":{\"type\":\"status\",\"system\":\"status\"\
+ }},{\"id\":\"components\",\"name\":\"Component/s\",\"custom\":false,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"component\"\
+ ],\"schema\":{\"type\":\"array\",\"items\":\"component\",\"system\":\"components\"\
+ }},{\"id\":\"issuekey\",\"name\":\"Key\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[\"id\",\"issue\",\"\
+ issuekey\",\"key\"]},{\"id\":\"timeoriginalestimate\",\"name\":\"Original\
+ \
+ Estimate\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :false,\"clauseNames\":[\"originalEstimate\",\"timeoriginalestimate\"],\"\
+ schema\":{\"type\":\"number\",\"system\":\"timeoriginalestimate\"}},{\"id\"\
+ :\"description\",\"name\":\"Description\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"description\"],\"\
+ schema\":{\"type\":\"string\",\"system\":\"description\"}},{\"id\":\"timetracking\"\
+ ,\"name\":\"Time
+ Tracking\",\"custom\":false,\"orderable\":true,\"navigable\"\
+ :false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\":\"timetracking\"\
+ ,\"system\":\"timetracking\"}},{\"id\":\"customfield_10203\",\"name\":\"Organizations\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10203]\",\"Organizations\"],\"schema\":{\"type\":\"array\"\
+ ,\"items\":\"sd-customerorganization\",\"custom\":\"com.atlassian.servicedesk:sd-customer-organizations\"\
+ ,\"customId\":10203}},{\"id\":\"customfield_10204\",\"name\":\"Satisfaction\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10204]\",\"Satisfaction\"],\"schema\":{\"type\":\"any\"\
+ ,\"custom\":\"com.atlassian.servicedesk:sd-request-feedback\",\"customId\"\
+ :10204}},{\"id\":\"security\",\"name\":\"Security
+ Level\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ level\"],\"schema\":{\"type\":\"securitylevel\",\"system\":\"security\"}},{\"\
+ id\":\"customfield_10205\",\"name\":\"Satisfaction
+ date\",\"custom\":true,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ cf[10205]\",\"Satisfaction
+ date\"],\"schema\":{\"type\":\"datetime\",\"custom\"\
+ :\"com.atlassian.servicedesk:sd-request-feedback-date\",\"customId\":10205}},{\"\
+ id\":\"customfield_10206\",\"name\":\"Approvers\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"Approvers\"\
+ ,\"cf[10206]\"],\"schema\":{\"type\":\"array\",\"items\":\"user\",\"custom\"\
+ :\"com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker\",\"\
+ customId\":10206}},{\"id\":\"attachment\",\"name\":\"Attachment\",\"custom\"\
+ :false,\"orderable\":true,\"navigable\":false,\"searchable\":true,\"clauseNames\"\
+ :[\"attachments\"],\"schema\":{\"type\":\"array\",\"items\":\"attachment\"\
+ ,\"system\":\"attachment\"}},{\"id\":\"aggregatetimeestimate\",\"name\":\"\
+ \u03A3 Remaining
+ Estimate\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
+ ,\"system\":\"aggregatetimeestimate\"}},{\"id\":\"customfield_10207\",\"name\"\
+ :\"Time to
+ resolution\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"cf[10207]\",\"Time to resolution\"],\"\
+ schema\":{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
+ ,\"customId\":10207}},{\"id\":\"customfield_10208\",\"name\":\"Time to
+ first\
+ \
+ response\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"cf[10208]\",\"Time to first response\"],\"schema\"\
+ :{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
+ ,\"customId\":10208}},{\"id\":\"summary\",\"name\":\"Summary\",\"custom\"\
+ :false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"summary\"],\"schema\":{\"type\":\"string\",\"system\":\"summary\"}},{\"\
+ id\":\"creator\",\"name\":\"Creator\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"creator\"],\"schema\"\
+ :{\"type\":\"user\",\"system\":\"creator\"}},{\"id\":\"subtasks\",\"name\"\
+ :\"Sub-Tasks\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
+ searchable\":false,\"clauseNames\":[\"subtasks\"],\"schema\":{\"type\":\"\
+ array\",\"items\":\"issuelinks\",\"system\":\"subtasks\"}},{\"id\":\"reporter\"\
+ ,\"name\":\"Reporter\",\"custom\":false,\"orderable\":true,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"reporter\"],\"schema\":{\"type\":\"user\"\
+ ,\"system\":\"reporter\"}},{\"id\":\"aggregateprogress\",\"name\":\"\u03A3\
+ \
+ Progress\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :false,\"clauseNames\":[],\"schema\":{\"type\":\"progress\",\"system\":\"\
+ aggregateprogress\"}},{\"id\":\"customfield_10000\",\"name\":\"Development\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10000]\",\"Development\"],\"schema\":{\"type\":\"any\"\
+ ,\"custom\":\"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary\"\
+ ,\"customId\":10000}},{\"id\":\"customfield_10200\",\"name\":\"Approvals\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"Approvals\",\"cf[10200]\"],\"schema\":{\"type\":\"sd-approvals\"\
+ ,\"custom\":\"com.atlassian.servicedesk.approvals-plugin:sd-approvals\",\"\
+ customId\":10200}},{\"id\":\"customfield_10201\",\"name\":\"Request
+ participants\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10201]\",\"Request participants\"],\"schema\":{\"type\"\
+ :\"array\",\"items\":\"user\",\"custom\":\"com.atlassian.servicedesk:sd-request-participants\"\
+ ,\"customId\":10201}},{\"id\":\"customfield_10202\",\"name\":\"Customer
+ Request\
+ \
+ Type\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"cf[10202]\",\"Customer Request Type\"],\"schema\"\
+ :{\"type\":\"sd-customerrequesttype\",\"custom\":\"com.atlassian.servicedesk:vp-origin\"\
+ ,\"customId\":10202}},{\"id\":\"environment\",\"name\":\"Environment\",\"\
+ custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"environment\"],\"schema\":{\"type\":\"string\",\"system\"\
+ :\"environment\"}},{\"id\":\"duedate\",\"name\":\"Due
+ Date\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ due\",\"duedate\"],\"schema\":{\"type\":\"date\",\"system\":\"duedate\"}},{\"\
+ id\":\"progress\",\"name\":\"Progress\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[\"progress\"],\"schema\"\
+ :{\"type\":\"progress\",\"system\":\"progress\"}},{\"id\":\"comment\",\"name\"\
+ :\"Comment\",\"custom\":false,\"orderable\":true,\"navigable\":false,\"searchable\"\
+ :true,\"clauseNames\":[\"comment\"],\"schema\":{\"type\":\"comments-page\"\
+ ,\"system\":\"comment\"}},{\"id\":\"votes\",\"name\":\"Votes\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"clauseNames\"\
+ :[\"votes\"],\"schema\":{\"type\":\"votes\",\"system\":\"votes\"}},{\"id\"\
+ :\"worklog\",\"name\":\"Log Work\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\"\
+ :\"array\",\"items\":\"worklog\",\"system\":\"worklog\"}}]"}
+ headers:
+ Cache-Control: ["no-cache, no-store, no-transform"]
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ["Tue, 09 Apr 2019 07:25:35 GMT"]
+ Set-Cookie: [JSESSIONID=695F7FF23DB85CFCEC23F2A0D87D7D6B; Path=/; HttpOnly]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [445x2279x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [1fb1pfe]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ["12093"]
+ status: {code: 200, message: ""}
+ - request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ Cookie:
+ - !!binary |
+ YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT19kOTYyYTQ3Y2NmNDJjYjhm
+ YWUzN2MyMTY1ZTk0Mzg2NGZkZDdhM2Y0X2xpbjsgSlNFU1NJT05JRD02OTVGN0ZGMjNEQjg1Q0ZD
+ RUMyM0YyQTBEODdEN0Q2Qg==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ x-experimentalapi:
+ - !!binary |
+ b3B0LWlu
+ method: GET
+ uri: http://jira:8080/rest/servicedeskapi/organization?start=0&limit=50
+ response:
+ body:
+ {
+ string: '{"size":50,"start":0,"limit":50,"isLastPage":false,"_links":{"base":"http://jira:8080","context":"","next":"http://jira:8080/rest/servicedeskapi/organization?limit=50&start=50","self":"http://jira:8080/rest/servicedeskapi/organization?start=0&limit=50"},"values":[{"id":"1","name":"org1","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/1"}},{"id":"2","name":"org2","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/2"}},{"id":"3","name":"org3","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/3"}},{"id":"4","name":"org30","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/4"}},{"id":"5","name":"org32","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/5"}},{"id":"6","name":"org31","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/6"}},{"id":"7","name":"org34","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/7"}},{"id":"8","name":"org33","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/8"}},{"id":"9","name":"org36","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/9"}},{"id":"10","name":"org35","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/10"}},{"id":"11","name":"org38","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/11"}},{"id":"12","name":"org37","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/12"}},{"id":"13","name":"org39","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/13"}},{"id":"14","name":"org50","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/14"}},{"id":"15","name":"org41","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/15"}},{"id":"16","name":"org40","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/16"}},{"id":"17","name":"org43","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/17"}},{"id":"18","name":"org42","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/18"}},{"id":"19","name":"org45","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/19"}},{"id":"20","name":"org44","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/20"}},{"id":"21","name":"org47","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/21"}},{"id":"22","name":"org46","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/22"}},{"id":"23","name":"org49","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/23"}},{"id":"24","name":"org48","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/24"}},{"id":"25","name":"org60","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/25"}},{"id":"26","name":"org52","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/26"}},{"id":"27","name":"org51","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/27"}},{"id":"28","name":"org54","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/28"}},{"id":"29","name":"org10","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/29"}},{"id":"30","name":"org53","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/30"}},{"id":"31","name":"org56","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/31"}},{"id":"32","name":"org12","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/32"}},{"id":"33","name":"org55","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/33"}},{"id":"34","name":"org11","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/34"}},{"id":"35","name":"org58","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/35"}},{"id":"36","name":"org14","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/36"}},{"id":"37","name":"org57","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/37"}},{"id":"38","name":"org13","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/38"}},{"id":"39","name":"org16","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/39"}},{"id":"40","name":"org59","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/40"}},{"id":"41","name":"org15","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/41"}},{"id":"42","name":"org18","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/42"}},{"id":"43","name":"org17","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/43"}},{"id":"44","name":"org19","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/44"}},{"id":"45","name":"org8","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/45"}},{"id":"46","name":"org9","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/46"}},{"id":"47","name":"org4","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/47"}},{"id":"48","name":"org5","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/48"}},{"id":"49","name":"org6","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/49"}},{"id":"50","name":"org7","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/50"}}]}',
+ }
+ headers:
+ Cache-Control: ["no-cache, no-store, no-transform"]
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ["Tue, 09 Apr 2019 07:25:35 GMT"]
+ Set-Cookie: [JSESSIONID=05198C071AE09FF29405F7911341C627; Path=/; HttpOnly]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [445x2280x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [1xlna5j]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ["5238"]
+ status: {code: 200, message: ""}
+ - request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ Cookie:
+ - !!binary |
+ YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT19kOTYyYTQ3Y2NmNDJjYjhm
+ YWUzN2MyMTY1ZTk0Mzg2NGZkZDdhM2Y0X2xpbjsgSlNFU1NJT05JRD0wNTE5OEMwNzFBRTA5RkYy
+ OTQwNUY3OTExMzQxQzYyNw==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ x-experimentalapi:
+ - !!binary |
+ b3B0LWlu
+ method: GET
+ uri: http://jira:8080/rest/servicedeskapi/organization?start=50&limit=100
+ response:
+ body:
+ {
+ string: '{"size":10,"start":50,"limit":50,"isLastPage":true,"_links":{"base":"http://jira:8080","context":"","prev":"http://jira:8080/rest/servicedeskapi/organization?limit=50&start=0","self":"http://jira:8080/rest/servicedeskapi/organization?start=50&limit=100"},"values":[{"id":"51","name":"org21","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/51"}},{"id":"52","name":"org20","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/52"}},{"id":"53","name":"org23","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/53"}},{"id":"54","name":"org22","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/54"}},{"id":"55","name":"org25","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/55"}},{"id":"56","name":"org24","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/56"}},{"id":"57","name":"org27","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/57"}},{"id":"58","name":"org26","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/58"}},{"id":"59","name":"org29","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/59"}},{"id":"60","name":"org28","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/60"}}]}',
+ }
+ headers:
+ Cache-Control: ["no-cache, no-store, no-transform"]
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ["Tue, 09 Apr 2019 07:25:35 GMT"]
+ Set-Cookie: [JSESSIONID=895A29A492A56350C6C51AD7ABEEDE24; Path=/; HttpOnly]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [445x2281x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [1g3mv90]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ["1266"]
+ status: {code: 200, message: ""}
version: 1
diff --git a/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_from_api_call.yaml b/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_from_api_call.yaml
index 20bac932..771381a3 100644
--- a/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_from_api_call.yaml
+++ b/connector_jira_servicedesk/tests/fixtures/cassettes/test_import_organization_from_api_call.yaml
@@ -1,333 +1,372 @@
interactions:
-- request:
- body: null
- headers:
- Accept:
- - !!binary |
- YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
- Accept-Encoding:
- - !!binary |
- Z3ppcCwgZGVmbGF0ZQ==
- Cache-Control:
- - !!binary |
- bm8tY2FjaGU=
- Connection:
- - !!binary |
- a2VlcC1hbGl2ZQ==
- Content-Type:
- - !!binary |
- YXBwbGljYXRpb24vanNvbg==
- User-Agent:
- - !!binary |
- cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
- X-Atlassian-Token:
- - !!binary |
- bm8tY2hlY2s=
- method: GET
- uri: http://jira:8080/rest/api/2/serverInfo
- response:
- body: {string: '{"baseUrl":"http://localhost:8080","version":"7.12.3","versionNumbers":[7,12,3],"deploymentType":"Server","buildNumber":712004,"buildDate":"2018-10-12T00:00:00.000+0000","serverTime":"2019-04-09T07:34:59.719+0000","scmInfo":"5ef91d760d7124da5ebec5c16a948a4a807698df","serverTitle":"Jira"}'}
- headers:
- Cache-Control: ['no-cache, no-store, no-transform']
- Content-Security-Policy: [frame-ancestors 'self']
- Content-Type: [application/json;charset=UTF-8]
- Date: ['Tue, 09 Apr 2019 07:34:59 GMT']
- Set-Cookie: [JSESSIONID=F3754ECC01BFDC09E50B050AFCA448AD; Path=/; HttpOnly,
- atlassian.xsrf.token=BYG3-6SPF-0UM1-2LBO_080f5b3302aaf03201d504475fbec12569357bac_lin;
- Path=/]
- Transfer-Encoding: [chunked]
- Vary: [User-Agent]
- X-AREQUESTID: [454x2282x1]
- X-ASEN: [SEN-L13384799]
- X-ASESSIONID: [88wv88]
- X-AUSERNAME: [gbaconnier]
- X-Content-Type-Options: [nosniff]
- X-Frame-Options: [SAMEORIGIN]
- X-Seraph-LoginReason: [OK]
- X-XSS-Protection: [1; mode=block]
- content-length: ['288']
- status: {code: 200, message: ''}
-- request:
- body: null
- headers:
- Accept:
- - !!binary |
- YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
- Accept-Encoding:
- - !!binary |
- Z3ppcCwgZGVmbGF0ZQ==
- Cache-Control:
- - !!binary |
- bm8tY2FjaGU=
- Connection:
- - !!binary |
- a2VlcC1hbGl2ZQ==
- Content-Type:
- - !!binary |
- YXBwbGljYXRpb24vanNvbg==
- Cookie:
- - !!binary |
- YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT18wODBmNWIzMzAyYWFmMDMy
- MDFkNTA0NDc1ZmJlYzEyNTY5MzU3YmFjX2xpbjsgSlNFU1NJT05JRD1GMzc1NEVDQzAxQkZEQzA5
- RTUwQjA1MEFGQ0E0NDhBRA==
- User-Agent:
- - !!binary |
- cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
- X-Atlassian-Token:
- - !!binary |
- bm8tY2hlY2s=
- method: GET
- uri: http://jira:8080/rest/api/2/field
- response:
- body: {string: "[{\"id\":\"issuetype\",\"name\":\"Issue Type\",\"custom\":false,\"\
- orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- issuetype\",\"type\"],\"schema\":{\"type\":\"issuetype\",\"system\":\"issuetype\"\
- }},{\"id\":\"timespent\",\"name\":\"Time Spent\",\"custom\":false,\"orderable\"\
- :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"timespent\"\
- ],\"schema\":{\"type\":\"number\",\"system\":\"timespent\"}},{\"id\":\"project\"\
- ,\"name\":\"Project\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
- searchable\":true,\"clauseNames\":[\"project\"],\"schema\":{\"type\":\"project\"\
- ,\"system\":\"project\"}},{\"id\":\"fixVersions\",\"name\":\"Fix Version/s\"\
- ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"fixVersion\"],\"schema\":{\"type\":\"array\",\"items\":\"\
- version\",\"system\":\"fixVersions\"}},{\"id\":\"aggregatetimespent\",\"name\"\
- :\"\u03A3 Time Spent\",\"custom\":false,\"orderable\":false,\"navigable\"\
- :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
- ,\"system\":\"aggregatetimespent\"}},{\"id\":\"resolution\",\"name\":\"Resolution\"\
- ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"resolution\"],\"schema\":{\"type\":\"resolution\",\"system\"\
- :\"resolution\"}},{\"id\":\"customfield_10104\",\"name\":\"Epic Color\",\"\
- custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10104]\",\"Epic Color\"],\"schema\":{\"type\":\"string\"\
- ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-color\",\"customId\":10104}},{\"\
- id\":\"customfield_10105\",\"name\":\"Rank\",\"custom\":true,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10105]\"\
- ,\"Rank\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-lexo-rank\"\
- ,\"customId\":10105}},{\"id\":\"customfield_10106\",\"name\":\"Story Points\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10106]\",\"Story Points\"],\"schema\":{\"type\":\"number\"\
- ,\"custom\":\"com.atlassian.jira.plugin.system.customfieldtypes:float\",\"\
- customId\":10106}},{\"id\":\"resolutiondate\",\"name\":\"Resolved\",\"custom\"\
- :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
- :[\"resolutiondate\",\"resolved\"],\"schema\":{\"type\":\"datetime\",\"system\"\
- :\"resolutiondate\"}},{\"id\":\"workratio\",\"name\":\"Work Ratio\",\"custom\"\
- :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
- :[\"workratio\"],\"schema\":{\"type\":\"number\",\"system\":\"workratio\"\
- }},{\"id\":\"lastViewed\",\"name\":\"Last Viewed\",\"custom\":false,\"orderable\"\
- :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"lastViewed\"\
- ],\"schema\":{\"type\":\"datetime\",\"system\":\"lastViewed\"}},{\"id\":\"\
- watches\",\"name\":\"Watchers\",\"custom\":false,\"orderable\":false,\"navigable\"\
- :true,\"searchable\":false,\"clauseNames\":[\"watchers\"],\"schema\":{\"type\"\
- :\"watches\",\"system\":\"watches\"}},{\"id\":\"thumbnail\",\"name\":\"Images\"\
- ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
- clauseNames\":[]},{\"id\":\"created\",\"name\":\"Created\",\"custom\":false,\"\
- orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- created\",\"createdDate\"],\"schema\":{\"type\":\"datetime\",\"system\":\"\
- created\"}},{\"id\":\"priority\",\"name\":\"Priority\",\"custom\":false,\"\
- orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- priority\"],\"schema\":{\"type\":\"priority\",\"system\":\"priority\"}},{\"\
- id\":\"customfield_10100\",\"name\":\"Sprint\",\"custom\":true,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10100]\"\
- ,\"Sprint\"],\"schema\":{\"type\":\"array\",\"items\":\"string\",\"custom\"\
- :\"com.pyxis.greenhopper.jira:gh-sprint\",\"customId\":10100}},{\"id\":\"\
- customfield_10101\",\"name\":\"Epic Link\",\"custom\":true,\"orderable\":true,\"\
- navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10101]\",\"Epic\
- \ Link\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-link\"\
- ,\"customId\":10101}},{\"id\":\"customfield_10102\",\"name\":\"Epic Status\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10102]\",\"Epic Status\"],\"schema\":{\"type\":\"option\"\
- ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-status\",\"customId\":10102}},{\"\
- id\":\"labels\",\"name\":\"Labels\",\"custom\":false,\"orderable\":true,\"\
- navigable\":true,\"searchable\":true,\"clauseNames\":[\"labels\"],\"schema\"\
- :{\"type\":\"array\",\"items\":\"string\",\"system\":\"labels\"}},{\"id\"\
- :\"customfield_10103\",\"name\":\"Epic Name\",\"custom\":true,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10103]\"\
- ,\"Epic Name\"],\"schema\":{\"type\":\"string\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-label\"\
- ,\"customId\":10103}},{\"id\":\"timeestimate\",\"name\":\"Remaining Estimate\"\
- ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
- clauseNames\":[\"remainingEstimate\",\"timeestimate\"],\"schema\":{\"type\"\
- :\"number\",\"system\":\"timeestimate\"}},{\"id\":\"aggregatetimeoriginalestimate\"\
- ,\"name\":\"\u03A3 Original Estimate\",\"custom\":false,\"orderable\":false,\"\
- navigable\":true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\"\
- :\"number\",\"system\":\"aggregatetimeoriginalestimate\"}},{\"id\":\"versions\"\
- ,\"name\":\"Affects Version/s\",\"custom\":false,\"orderable\":true,\"navigable\"\
- :true,\"searchable\":true,\"clauseNames\":[\"affectedVersion\"],\"schema\"\
- :{\"type\":\"array\",\"items\":\"version\",\"system\":\"versions\"}},{\"id\"\
- :\"issuelinks\",\"name\":\"Linked Issues\",\"custom\":false,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[],\"schema\"\
- :{\"type\":\"array\",\"items\":\"issuelinks\",\"system\":\"issuelinks\"}},{\"\
- id\":\"assignee\",\"name\":\"Assignee\",\"custom\":false,\"orderable\":true,\"\
- navigable\":true,\"searchable\":true,\"clauseNames\":[\"assignee\"],\"schema\"\
- :{\"type\":\"user\",\"system\":\"assignee\"}},{\"id\":\"updated\",\"name\"\
- :\"Updated\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
- :true,\"clauseNames\":[\"updated\",\"updatedDate\"],\"schema\":{\"type\":\"\
- datetime\",\"system\":\"updated\"}},{\"id\":\"status\",\"name\":\"Status\"\
- ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"status\"],\"schema\":{\"type\":\"status\",\"system\":\"status\"\
- }},{\"id\":\"components\",\"name\":\"Component/s\",\"custom\":false,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"component\"\
- ],\"schema\":{\"type\":\"array\",\"items\":\"component\",\"system\":\"components\"\
- }},{\"id\":\"issuekey\",\"name\":\"Key\",\"custom\":false,\"orderable\":false,\"\
- navigable\":true,\"searchable\":false,\"clauseNames\":[\"id\",\"issue\",\"\
- issuekey\",\"key\"]},{\"id\":\"timeoriginalestimate\",\"name\":\"Original\
- \ Estimate\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
- :false,\"clauseNames\":[\"originalEstimate\",\"timeoriginalestimate\"],\"\
- schema\":{\"type\":\"number\",\"system\":\"timeoriginalestimate\"}},{\"id\"\
- :\"description\",\"name\":\"Description\",\"custom\":false,\"orderable\":true,\"\
- navigable\":true,\"searchable\":true,\"clauseNames\":[\"description\"],\"\
- schema\":{\"type\":\"string\",\"system\":\"description\"}},{\"id\":\"timetracking\"\
- ,\"name\":\"Time Tracking\",\"custom\":false,\"orderable\":true,\"navigable\"\
- :false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\":\"timetracking\"\
- ,\"system\":\"timetracking\"}},{\"id\":\"customfield_10203\",\"name\":\"Organizations\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10203]\",\"Organizations\"],\"schema\":{\"type\":\"array\"\
- ,\"items\":\"sd-customerorganization\",\"custom\":\"com.atlassian.servicedesk:sd-customer-organizations\"\
- ,\"customId\":10203}},{\"id\":\"customfield_10204\",\"name\":\"Satisfaction\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10204]\",\"Satisfaction\"],\"schema\":{\"type\":\"any\"\
- ,\"custom\":\"com.atlassian.servicedesk:sd-request-feedback\",\"customId\"\
- :10204}},{\"id\":\"security\",\"name\":\"Security Level\",\"custom\":false,\"\
- orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- level\"],\"schema\":{\"type\":\"securitylevel\",\"system\":\"security\"}},{\"\
- id\":\"customfield_10205\",\"name\":\"Satisfaction date\",\"custom\":true,\"\
- orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- cf[10205]\",\"Satisfaction date\"],\"schema\":{\"type\":\"datetime\",\"custom\"\
- :\"com.atlassian.servicedesk:sd-request-feedback-date\",\"customId\":10205}},{\"\
- id\":\"customfield_10206\",\"name\":\"Approvers\",\"custom\":true,\"orderable\"\
- :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"Approvers\"\
- ,\"cf[10206]\"],\"schema\":{\"type\":\"array\",\"items\":\"user\",\"custom\"\
- :\"com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker\",\"\
- customId\":10206}},{\"id\":\"attachment\",\"name\":\"Attachment\",\"custom\"\
- :false,\"orderable\":true,\"navigable\":false,\"searchable\":true,\"clauseNames\"\
- :[\"attachments\"],\"schema\":{\"type\":\"array\",\"items\":\"attachment\"\
- ,\"system\":\"attachment\"}},{\"id\":\"aggregatetimeestimate\",\"name\":\"\
- \u03A3 Remaining Estimate\",\"custom\":false,\"orderable\":false,\"navigable\"\
- :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
- ,\"system\":\"aggregatetimeestimate\"}},{\"id\":\"customfield_10207\",\"name\"\
- :\"Time to resolution\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"\
- searchable\":true,\"clauseNames\":[\"cf[10207]\",\"Time to resolution\"],\"\
- schema\":{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
- ,\"customId\":10207}},{\"id\":\"customfield_10208\",\"name\":\"Time to first\
- \ response\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
- :true,\"clauseNames\":[\"cf[10208]\",\"Time to first response\"],\"schema\"\
- :{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
- ,\"customId\":10208}},{\"id\":\"summary\",\"name\":\"Summary\",\"custom\"\
- :false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
- :[\"summary\"],\"schema\":{\"type\":\"string\",\"system\":\"summary\"}},{\"\
- id\":\"creator\",\"name\":\"Creator\",\"custom\":false,\"orderable\":false,\"\
- navigable\":true,\"searchable\":true,\"clauseNames\":[\"creator\"],\"schema\"\
- :{\"type\":\"user\",\"system\":\"creator\"}},{\"id\":\"subtasks\",\"name\"\
- :\"Sub-Tasks\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
- searchable\":false,\"clauseNames\":[\"subtasks\"],\"schema\":{\"type\":\"\
- array\",\"items\":\"issuelinks\",\"system\":\"subtasks\"}},{\"id\":\"reporter\"\
- ,\"name\":\"Reporter\",\"custom\":false,\"orderable\":true,\"navigable\":true,\"\
- searchable\":true,\"clauseNames\":[\"reporter\"],\"schema\":{\"type\":\"user\"\
- ,\"system\":\"reporter\"}},{\"id\":\"aggregateprogress\",\"name\":\"\u03A3\
- \ Progress\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
- :false,\"clauseNames\":[],\"schema\":{\"type\":\"progress\",\"system\":\"\
- aggregateprogress\"}},{\"id\":\"customfield_10000\",\"name\":\"Development\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10000]\",\"Development\"],\"schema\":{\"type\":\"any\"\
- ,\"custom\":\"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary\"\
- ,\"customId\":10000}},{\"id\":\"customfield_10200\",\"name\":\"Approvals\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"Approvals\",\"cf[10200]\"],\"schema\":{\"type\":\"sd-approvals\"\
- ,\"custom\":\"com.atlassian.servicedesk.approvals-plugin:sd-approvals\",\"\
- customId\":10200}},{\"id\":\"customfield_10201\",\"name\":\"Request participants\"\
- ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"cf[10201]\",\"Request participants\"],\"schema\":{\"type\"\
- :\"array\",\"items\":\"user\",\"custom\":\"com.atlassian.servicedesk:sd-request-participants\"\
- ,\"customId\":10201}},{\"id\":\"customfield_10202\",\"name\":\"Customer Request\
- \ Type\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
- :true,\"clauseNames\":[\"cf[10202]\",\"Customer Request Type\"],\"schema\"\
- :{\"type\":\"sd-customerrequesttype\",\"custom\":\"com.atlassian.servicedesk:vp-origin\"\
- ,\"customId\":10202}},{\"id\":\"environment\",\"name\":\"Environment\",\"\
- custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
- clauseNames\":[\"environment\"],\"schema\":{\"type\":\"string\",\"system\"\
- :\"environment\"}},{\"id\":\"duedate\",\"name\":\"Due Date\",\"custom\":false,\"\
- orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
- due\",\"duedate\"],\"schema\":{\"type\":\"date\",\"system\":\"duedate\"}},{\"\
- id\":\"progress\",\"name\":\"Progress\",\"custom\":false,\"orderable\":false,\"\
- navigable\":true,\"searchable\":false,\"clauseNames\":[\"progress\"],\"schema\"\
- :{\"type\":\"progress\",\"system\":\"progress\"}},{\"id\":\"comment\",\"name\"\
- :\"Comment\",\"custom\":false,\"orderable\":true,\"navigable\":false,\"searchable\"\
- :true,\"clauseNames\":[\"comment\"],\"schema\":{\"type\":\"comments-page\"\
- ,\"system\":\"comment\"}},{\"id\":\"votes\",\"name\":\"Votes\",\"custom\"\
- :false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"clauseNames\"\
- :[\"votes\"],\"schema\":{\"type\":\"votes\",\"system\":\"votes\"}},{\"id\"\
- :\"worklog\",\"name\":\"Log Work\",\"custom\":false,\"orderable\":true,\"\
- navigable\":false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\"\
- :\"array\",\"items\":\"worklog\",\"system\":\"worklog\"}}]"}
- headers:
- Cache-Control: ['no-cache, no-store, no-transform']
- Content-Security-Policy: [frame-ancestors 'self']
- Content-Type: [application/json;charset=UTF-8]
- Date: ['Tue, 09 Apr 2019 07:34:59 GMT']
- Set-Cookie: [JSESSIONID=02595F6221A3A7FC73A9B1C5FA665EFB; Path=/; HttpOnly]
- Transfer-Encoding: [chunked]
- Vary: [User-Agent]
- X-AREQUESTID: [454x2283x1]
- X-ASEN: [SEN-L13384799]
- X-ASESSIONID: [1p1fqss]
- X-AUSERNAME: [gbaconnier]
- X-Content-Type-Options: [nosniff]
- X-Frame-Options: [SAMEORIGIN]
- X-Seraph-LoginReason: [OK]
- X-XSS-Protection: [1; mode=block]
- content-length: ['12093']
- status: {code: 200, message: ''}
-- request:
- body: null
- headers:
- Accept:
- - !!binary |
- YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
- Accept-Encoding:
- - !!binary |
- Z3ppcCwgZGVmbGF0ZQ==
- Cache-Control:
- - !!binary |
- bm8tY2FjaGU=
- Connection:
- - !!binary |
- a2VlcC1hbGl2ZQ==
- Content-Type:
- - !!binary |
- YXBwbGljYXRpb24vanNvbg==
- Cookie:
- - !!binary |
- YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT18wODBmNWIzMzAyYWFmMDMy
- MDFkNTA0NDc1ZmJlYzEyNTY5MzU3YmFjX2xpbjsgSlNFU1NJT05JRD0wMjU5NUY2MjIxQTNBN0ZD
- NzNBOUIxQzVGQTY2NUVGQg==
- User-Agent:
- - !!binary |
- cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
- X-Atlassian-Token:
- - !!binary |
- bm8tY2hlY2s=
- x-experimentalapi:
- - !!binary |
- b3B0LWlu
- method: GET
- uri: http://jira:8080/rest/servicedeskapi/organization/55
- response:
- body: {string: '{"id":"55","name":"org25","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/55"}}'}
- headers:
- Cache-Control: ['no-cache, no-store, no-transform']
- Content-Security-Policy: [frame-ancestors 'self']
- Content-Type: [application/json;charset=UTF-8]
- Date: ['Tue, 09 Apr 2019 07:34:59 GMT']
- Set-Cookie: [JSESSIONID=D7428E3CFDC83DBBD4214E6A9EECF1F9; Path=/; HttpOnly]
- Transfer-Encoding: [chunked]
- Vary: [User-Agent]
- X-AREQUESTID: [454x2284x1]
- X-ASEN: [SEN-L13384799]
- X-ASESSIONID: [n37ugs]
- X-AUSERNAME: [gbaconnier]
- X-Content-Type-Options: [nosniff]
- X-Frame-Options: [SAMEORIGIN]
- X-Seraph-LoginReason: [OK]
- X-XSS-Protection: [1; mode=block]
- content-length: ['99']
- status: {code: 200, message: ''}
+ - request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ method: GET
+ uri: http://jira:8080/rest/api/2/serverInfo
+ response:
+ body:
+ {
+ string: '{"baseUrl":"http://localhost:8080","version":"7.12.3","versionNumbers":[7,12,3],"deploymentType":"Server","buildNumber":712004,"buildDate":"2018-10-12T00:00:00.000+0000","serverTime":"2019-04-09T07:34:59.719+0000","scmInfo":"5ef91d760d7124da5ebec5c16a948a4a807698df","serverTitle":"Jira"}',
+ }
+ headers:
+ Cache-Control: ["no-cache, no-store, no-transform"]
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ["Tue, 09 Apr 2019 07:34:59 GMT"]
+ Set-Cookie:
+ [
+ JSESSIONID=F3754ECC01BFDC09E50B050AFCA448AD; Path=/; HttpOnly,
+ atlassian.xsrf.token=BYG3-6SPF-0UM1-2LBO_080f5b3302aaf03201d504475fbec12569357bac_lin;
+ Path=/,
+ ]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [454x2282x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [88wv88]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ["288"]
+ status: {code: 200, message: ""}
+ - request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ Cookie:
+ - !!binary |
+ YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT18wODBmNWIzMzAyYWFmMDMy
+ MDFkNTA0NDc1ZmJlYzEyNTY5MzU3YmFjX2xpbjsgSlNFU1NJT05JRD1GMzc1NEVDQzAxQkZEQzA5
+ RTUwQjA1MEFGQ0E0NDhBRA==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ method: GET
+ uri: http://jira:8080/rest/api/2/field
+ response:
+ body: {string: "[{\"id\":\"issuetype\",\"name\":\"Issue
+ Type\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ issuetype\",\"type\"],\"schema\":{\"type\":\"issuetype\",\"system\":\"issuetype\"\
+ }},{\"id\":\"timespent\",\"name\":\"Time
+ Spent\",\"custom\":false,\"orderable\"\
+ :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"timespent\"\
+ ],\"schema\":{\"type\":\"number\",\"system\":\"timespent\"}},{\"id\":\"project\"\
+ ,\"name\":\"Project\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"project\"],\"schema\":{\"type\":\"project\"\
+ ,\"system\":\"project\"}},{\"id\":\"fixVersions\",\"name\":\"Fix
+ Version/s\"\
+ ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"fixVersion\"],\"schema\":{\"type\":\"array\",\"items\":\"\
+ version\",\"system\":\"fixVersions\"}},{\"id\":\"aggregatetimespent\",\"name\"\
+ :\"\u03A3 Time Spent\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
+ ,\"system\":\"aggregatetimespent\"}},{\"id\":\"resolution\",\"name\":\"Resolution\"\
+ ,\"custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"resolution\"],\"schema\":{\"type\":\"resolution\",\"system\"\
+ :\"resolution\"}},{\"id\":\"customfield_10104\",\"name\":\"Epic Color\",\"\
+ custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10104]\",\"Epic
+ Color\"],\"schema\":{\"type\":\"string\"\
+ ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-color\",\"customId\":10104}},{\"\
+ id\":\"customfield_10105\",\"name\":\"Rank\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10105]\"\
+ ,\"Rank\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-lexo-rank\"\
+ ,\"customId\":10105}},{\"id\":\"customfield_10106\",\"name\":\"Story
+ Points\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10106]\",\"Story
+ Points\"],\"schema\":{\"type\":\"number\"\
+ ,\"custom\":\"com.atlassian.jira.plugin.system.customfieldtypes:float\",\"\
+ customId\":10106}},{\"id\":\"resolutiondate\",\"name\":\"Resolved\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"resolutiondate\",\"resolved\"],\"schema\":{\"type\":\"datetime\",\"system\"\
+ :\"resolutiondate\"}},{\"id\":\"workratio\",\"name\":\"Work
+ Ratio\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"workratio\"],\"schema\":{\"type\":\"number\",\"system\":\"workratio\"\
+ }},{\"id\":\"lastViewed\",\"name\":\"Last
+ Viewed\",\"custom\":false,\"orderable\"\
+ :false,\"navigable\":true,\"searchable\":false,\"clauseNames\":[\"lastViewed\"\
+ ],\"schema\":{\"type\":\"datetime\",\"system\":\"lastViewed\"}},{\"id\":\"\
+ watches\",\"name\":\"Watchers\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[\"watchers\"],\"schema\":{\"type\"\
+ :\"watches\",\"system\":\"watches\"}},{\"id\":\"thumbnail\",\"name\":\"Images\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
+ clauseNames\":[]},{\"id\":\"created\",\"name\":\"Created\",\"custom\":false,\"\
+ orderable\":false,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ created\",\"createdDate\"],\"schema\":{\"type\":\"datetime\",\"system\":\"\
+ created\"}},{\"id\":\"priority\",\"name\":\"Priority\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ priority\"],\"schema\":{\"type\":\"priority\",\"system\":\"priority\"}},{\"\
+ id\":\"customfield_10100\",\"name\":\"Sprint\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10100]\"\
+ ,\"Sprint\"],\"schema\":{\"type\":\"array\",\"items\":\"string\",\"custom\"\
+ :\"com.pyxis.greenhopper.jira:gh-sprint\",\"customId\":10100}},{\"id\":\"\
+ customfield_10101\",\"name\":\"Epic
+ Link\",\"custom\":true,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10101]\",\"Epic\
+ \
+ Link\"],\"schema\":{\"type\":\"any\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-link\"\
+ ,\"customId\":10101}},{\"id\":\"customfield_10102\",\"name\":\"Epic
+ Status\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10102]\",\"Epic
+ Status\"],\"schema\":{\"type\":\"option\"\
+ ,\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-status\",\"customId\":10102}},{\"\
+ id\":\"labels\",\"name\":\"Labels\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"labels\"],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"string\",\"system\":\"labels\"}},{\"id\"\
+ :\"customfield_10103\",\"name\":\"Epic Name\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"cf[10103]\"\
+ ,\"Epic
+ Name\"],\"schema\":{\"type\":\"string\",\"custom\":\"com.pyxis.greenhopper.jira:gh-epic-label\"\
+ ,\"customId\":10103}},{\"id\":\"timeestimate\",\"name\":\"Remaining
+ Estimate\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"\
+ clauseNames\":[\"remainingEstimate\",\"timeestimate\"],\"schema\":{\"type\"\
+ :\"number\",\"system\":\"timeestimate\"}},{\"id\":\"aggregatetimeoriginalestimate\"\
+ ,\"name\":\"\u03A3 Original
+ Estimate\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\"\
+ :\"number\",\"system\":\"aggregatetimeoriginalestimate\"}},{\"id\":\"versions\"\
+ ,\"name\":\"Affects
+ Version/s\",\"custom\":false,\"orderable\":true,\"navigable\"\
+ :true,\"searchable\":true,\"clauseNames\":[\"affectedVersion\"],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"version\",\"system\":\"versions\"}},{\"id\"\
+ :\"issuelinks\",\"name\":\"Linked Issues\",\"custom\":false,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[],\"schema\"\
+ :{\"type\":\"array\",\"items\":\"issuelinks\",\"system\":\"issuelinks\"}},{\"\
+ id\":\"assignee\",\"name\":\"Assignee\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"assignee\"],\"schema\"\
+ :{\"type\":\"user\",\"system\":\"assignee\"}},{\"id\":\"updated\",\"name\"\
+ :\"Updated\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"updated\",\"updatedDate\"],\"schema\":{\"type\":\"\
+ datetime\",\"system\":\"updated\"}},{\"id\":\"status\",\"name\":\"Status\"\
+ ,\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"status\"],\"schema\":{\"type\":\"status\",\"system\":\"status\"\
+ }},{\"id\":\"components\",\"name\":\"Component/s\",\"custom\":false,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"component\"\
+ ],\"schema\":{\"type\":\"array\",\"items\":\"component\",\"system\":\"components\"\
+ }},{\"id\":\"issuekey\",\"name\":\"Key\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[\"id\",\"issue\",\"\
+ issuekey\",\"key\"]},{\"id\":\"timeoriginalestimate\",\"name\":\"Original\
+ \
+ Estimate\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :false,\"clauseNames\":[\"originalEstimate\",\"timeoriginalestimate\"],\"\
+ schema\":{\"type\":\"number\",\"system\":\"timeoriginalestimate\"}},{\"id\"\
+ :\"description\",\"name\":\"Description\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"description\"],\"\
+ schema\":{\"type\":\"string\",\"system\":\"description\"}},{\"id\":\"timetracking\"\
+ ,\"name\":\"Time
+ Tracking\",\"custom\":false,\"orderable\":true,\"navigable\"\
+ :false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\":\"timetracking\"\
+ ,\"system\":\"timetracking\"}},{\"id\":\"customfield_10203\",\"name\":\"Organizations\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10203]\",\"Organizations\"],\"schema\":{\"type\":\"array\"\
+ ,\"items\":\"sd-customerorganization\",\"custom\":\"com.atlassian.servicedesk:sd-customer-organizations\"\
+ ,\"customId\":10203}},{\"id\":\"customfield_10204\",\"name\":\"Satisfaction\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10204]\",\"Satisfaction\"],\"schema\":{\"type\":\"any\"\
+ ,\"custom\":\"com.atlassian.servicedesk:sd-request-feedback\",\"customId\"\
+ :10204}},{\"id\":\"security\",\"name\":\"Security
+ Level\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ level\"],\"schema\":{\"type\":\"securitylevel\",\"system\":\"security\"}},{\"\
+ id\":\"customfield_10205\",\"name\":\"Satisfaction
+ date\",\"custom\":true,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ cf[10205]\",\"Satisfaction
+ date\"],\"schema\":{\"type\":\"datetime\",\"custom\"\
+ :\"com.atlassian.servicedesk:sd-request-feedback-date\",\"customId\":10205}},{\"\
+ id\":\"customfield_10206\",\"name\":\"Approvers\",\"custom\":true,\"orderable\"\
+ :true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"Approvers\"\
+ ,\"cf[10206]\"],\"schema\":{\"type\":\"array\",\"items\":\"user\",\"custom\"\
+ :\"com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker\",\"\
+ customId\":10206}},{\"id\":\"attachment\",\"name\":\"Attachment\",\"custom\"\
+ :false,\"orderable\":true,\"navigable\":false,\"searchable\":true,\"clauseNames\"\
+ :[\"attachments\"],\"schema\":{\"type\":\"array\",\"items\":\"attachment\"\
+ ,\"system\":\"attachment\"}},{\"id\":\"aggregatetimeestimate\",\"name\":\"\
+ \u03A3 Remaining
+ Estimate\",\"custom\":false,\"orderable\":false,\"navigable\"\
+ :true,\"searchable\":false,\"clauseNames\":[],\"schema\":{\"type\":\"number\"\
+ ,\"system\":\"aggregatetimeestimate\"}},{\"id\":\"customfield_10207\",\"name\"\
+ :\"Time to
+ resolution\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"cf[10207]\",\"Time to resolution\"],\"\
+ schema\":{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
+ ,\"customId\":10207}},{\"id\":\"customfield_10208\",\"name\":\"Time to
+ first\
+ \
+ response\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"cf[10208]\",\"Time to first response\"],\"schema\"\
+ :{\"type\":\"sd-servicelevelagreement\",\"custom\":\"com.atlassian.servicedesk:sd-sla-field\"\
+ ,\"customId\":10208}},{\"id\":\"summary\",\"name\":\"Summary\",\"custom\"\
+ :false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\"\
+ :[\"summary\"],\"schema\":{\"type\":\"string\",\"system\":\"summary\"}},{\"\
+ id\":\"creator\",\"name\":\"Creator\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":true,\"clauseNames\":[\"creator\"],\"schema\"\
+ :{\"type\":\"user\",\"system\":\"creator\"}},{\"id\":\"subtasks\",\"name\"\
+ :\"Sub-Tasks\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"\
+ searchable\":false,\"clauseNames\":[\"subtasks\"],\"schema\":{\"type\":\"\
+ array\",\"items\":\"issuelinks\",\"system\":\"subtasks\"}},{\"id\":\"reporter\"\
+ ,\"name\":\"Reporter\",\"custom\":false,\"orderable\":true,\"navigable\":true,\"\
+ searchable\":true,\"clauseNames\":[\"reporter\"],\"schema\":{\"type\":\"user\"\
+ ,\"system\":\"reporter\"}},{\"id\":\"aggregateprogress\",\"name\":\"\u03A3\
+ \
+ Progress\",\"custom\":false,\"orderable\":false,\"navigable\":true,\"searchable\"\
+ :false,\"clauseNames\":[],\"schema\":{\"type\":\"progress\",\"system\":\"\
+ aggregateprogress\"}},{\"id\":\"customfield_10000\",\"name\":\"Development\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10000]\",\"Development\"],\"schema\":{\"type\":\"any\"\
+ ,\"custom\":\"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary\"\
+ ,\"customId\":10000}},{\"id\":\"customfield_10200\",\"name\":\"Approvals\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"Approvals\",\"cf[10200]\"],\"schema\":{\"type\":\"sd-approvals\"\
+ ,\"custom\":\"com.atlassian.servicedesk.approvals-plugin:sd-approvals\",\"\
+ customId\":10200}},{\"id\":\"customfield_10201\",\"name\":\"Request
+ participants\"\
+ ,\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"cf[10201]\",\"Request participants\"],\"schema\":{\"type\"\
+ :\"array\",\"items\":\"user\",\"custom\":\"com.atlassian.servicedesk:sd-request-participants\"\
+ ,\"customId\":10201}},{\"id\":\"customfield_10202\",\"name\":\"Customer
+ Request\
+ \
+ Type\",\"custom\":true,\"orderable\":true,\"navigable\":true,\"searchable\"\
+ :true,\"clauseNames\":[\"cf[10202]\",\"Customer Request Type\"],\"schema\"\
+ :{\"type\":\"sd-customerrequesttype\",\"custom\":\"com.atlassian.servicedesk:vp-origin\"\
+ ,\"customId\":10202}},{\"id\":\"environment\",\"name\":\"Environment\",\"\
+ custom\":false,\"orderable\":true,\"navigable\":true,\"searchable\":true,\"\
+ clauseNames\":[\"environment\"],\"schema\":{\"type\":\"string\",\"system\"\
+ :\"environment\"}},{\"id\":\"duedate\",\"name\":\"Due
+ Date\",\"custom\":false,\"\
+ orderable\":true,\"navigable\":true,\"searchable\":true,\"clauseNames\":[\"\
+ due\",\"duedate\"],\"schema\":{\"type\":\"date\",\"system\":\"duedate\"}},{\"\
+ id\":\"progress\",\"name\":\"Progress\",\"custom\":false,\"orderable\":false,\"\
+ navigable\":true,\"searchable\":false,\"clauseNames\":[\"progress\"],\"schema\"\
+ :{\"type\":\"progress\",\"system\":\"progress\"}},{\"id\":\"comment\",\"name\"\
+ :\"Comment\",\"custom\":false,\"orderable\":true,\"navigable\":false,\"searchable\"\
+ :true,\"clauseNames\":[\"comment\"],\"schema\":{\"type\":\"comments-page\"\
+ ,\"system\":\"comment\"}},{\"id\":\"votes\",\"name\":\"Votes\",\"custom\"\
+ :false,\"orderable\":false,\"navigable\":true,\"searchable\":false,\"clauseNames\"\
+ :[\"votes\"],\"schema\":{\"type\":\"votes\",\"system\":\"votes\"}},{\"id\"\
+ :\"worklog\",\"name\":\"Log Work\",\"custom\":false,\"orderable\":true,\"\
+ navigable\":false,\"searchable\":true,\"clauseNames\":[],\"schema\":{\"type\"\
+ :\"array\",\"items\":\"worklog\",\"system\":\"worklog\"}}]"}
+ headers:
+ Cache-Control: ["no-cache, no-store, no-transform"]
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ["Tue, 09 Apr 2019 07:34:59 GMT"]
+ Set-Cookie: [JSESSIONID=02595F6221A3A7FC73A9B1C5FA665EFB; Path=/; HttpOnly]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [454x2283x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [1p1fqss]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ["12093"]
+ status: {code: 200, message: ""}
+ - request:
+ body: null
+ headers:
+ Accept:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbiwqLio7cT0wLjk=
+ Accept-Encoding:
+ - !!binary |
+ Z3ppcCwgZGVmbGF0ZQ==
+ Cache-Control:
+ - !!binary |
+ bm8tY2FjaGU=
+ Connection:
+ - !!binary |
+ a2VlcC1hbGl2ZQ==
+ Content-Type:
+ - !!binary |
+ YXBwbGljYXRpb24vanNvbg==
+ Cookie:
+ - !!binary |
+ YXRsYXNzaWFuLnhzcmYudG9rZW49QllHMy02U1BGLTBVTTEtMkxCT18wODBmNWIzMzAyYWFmMDMy
+ MDFkNTA0NDc1ZmJlYzEyNTY5MzU3YmFjX2xpbjsgSlNFU1NJT05JRD0wMjU5NUY2MjIxQTNBN0ZD
+ NzNBOUIxQzVGQTY2NUVGQg==
+ User-Agent:
+ - !!binary |
+ cHl0aG9uLXJlcXVlc3RzLzIuMjEuMA==
+ X-Atlassian-Token:
+ - !!binary |
+ bm8tY2hlY2s=
+ x-experimentalapi:
+ - !!binary |
+ b3B0LWlu
+ method: GET
+ uri: http://jira:8080/rest/servicedeskapi/organization/55
+ response:
+ body:
+ {
+ string: '{"id":"55","name":"org25","_links":{"self":"http://jira:8080/rest/servicedeskapi/organization/55"}}',
+ }
+ headers:
+ Cache-Control: ["no-cache, no-store, no-transform"]
+ Content-Security-Policy: [frame-ancestors 'self']
+ Content-Type: [application/json;charset=UTF-8]
+ Date: ["Tue, 09 Apr 2019 07:34:59 GMT"]
+ Set-Cookie: [JSESSIONID=D7428E3CFDC83DBBD4214E6A9EECF1F9; Path=/; HttpOnly]
+ Transfer-Encoding: [chunked]
+ Vary: [User-Agent]
+ X-AREQUESTID: [454x2284x1]
+ X-ASEN: [SEN-L13384799]
+ X-ASESSIONID: [n37ugs]
+ X-AUSERNAME: [gbaconnier]
+ X-Content-Type-Options: [nosniff]
+ X-Frame-Options: [SAMEORIGIN]
+ X-Seraph-LoginReason: [OK]
+ X-XSS-Protection: [1; mode=block]
+ content-length: ["99"]
+ status: {code: 200, message: ""}
version: 1
diff --git a/connector_jira_servicedesk/tests/test_import_organization.py b/connector_jira_servicedesk/tests/test_import_organization.py
index 02c88ea4..dcc81b04 100644
--- a/connector_jira_servicedesk/tests/test_import_organization.py
+++ b/connector_jira_servicedesk/tests/test_import_organization.py
@@ -1,12 +1,12 @@
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from .common import recorder
from odoo.addons.connector_jira.tests.common import JiraSavepointCase
+from .common import recorder
+
class TestImportOrganization(JiraSavepointCase):
-
@recorder.use_cassette
def test_import_organization_batch(self):
"""Batch import of organizations
@@ -14,12 +14,10 @@ def test_import_organization_batch(self):
This is a direct import of all organizations, without using
individual jobs.
"""
- organizations = self.env['jira.organization'].search([])
+ organizations = self.env["jira.organization"].search([])
self.assertEqual(len(organizations), 0)
- self.env['jira.organization'].import_batch(
- self.backend_record,
- )
- organizations = self.env['jira.organization'].search([])
+ self.env["jira.organization"].import_batch(self.backend_record,)
+ organizations = self.env["jira.organization"].search([])
# ensure that we have more than 50 records which
# is the pagination of the REST API
self.assertEqual(len(organizations), 60)
@@ -30,28 +28,29 @@ def test_import_organization_from_record(self):
The batch import directly pass the record because it gets
all the data at once from the API.
"""
- binding = self.env['jira.organization'].create({
- 'backend_id': self.backend_record.id,
- 'external_id': '55',
- 'name': 'dummy',
- })
+ binding = self.env["jira.organization"].create(
+ {
+ "backend_id": self.backend_record.id,
+ "external_id": "55",
+ "name": "dummy",
+ }
+ )
binding.import_record(
- self.backend_record,
- '55',
- record={'id': '55', 'name': 'new name'},
+ self.backend_record, "55", record={"id": "55", "name": "new name"},
)
- self.assertEqual(binding.name, 'new name')
+ self.assertEqual(binding.name, "new name")
@recorder.use_cassette
def test_import_organization_from_api_call(self):
"""Import one organization from a call to the API"""
- binding = self.env['jira.organization'].create({
- 'backend_id': self.backend_record.id,
- 'external_id': '55',
- 'name': 'dummy',
- })
+ binding = self.env["jira.organization"].create(
+ {
+ "backend_id": self.backend_record.id,
+ "external_id": "55",
+ "name": "dummy",
+ }
+ )
binding.import_record(
- self.backend_record,
- '55',
+ self.backend_record, "55",
)
- self.assertEqual(binding.name, 'org25')
+ self.assertEqual(binding.name, "org25")
diff --git a/connector_jira_servicedesk/views/jira_backend_views.xml b/connector_jira_servicedesk/views/jira_backend_views.xml
index 88f3fc81..1b1535f2 100644
--- a/connector_jira_servicedesk/views/jira_backend_views.xml
+++ b/connector_jira_servicedesk/views/jira_backend_views.xml
@@ -1,55 +1,58 @@
-
+
-
-
-
- jira.backend.form
- jira.backend
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ jira.backend.form
+ jira.backend
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Activate the synchronization of the Organization field.
Only on JIRA ServiceDesk. The field contains the name of
the JIRA custom field that contains the Organization.
-
-
-
-
+
+
+
+
diff --git a/connector_jira_servicedesk/views/project_link_jira_views.xml b/connector_jira_servicedesk/views/project_link_jira_views.xml
index f59d9857..a7356bf7 100644
--- a/connector_jira_servicedesk/views/project_link_jira_views.xml
+++ b/connector_jira_servicedesk/views/project_link_jira_views.xml
@@ -1,19 +1,22 @@
-
+
-
-
- project.link.jira.form
- project.link.jira
-
-
-
-
-
-
-
+
+ project.link.jira.form
+ project.link.jira
+
+
+
+
+
+
+
The organizations you choose will define how the tasks and worklogs are attached to the project.
If a task is assigned to an organization, it will be assigned
to an Odoo project linked to the JIRA project only if the
@@ -21,11 +24,9 @@
the task will be assigned to a linked project without organization.
If no such project exists in Odoo, the task is ignored.
-
-
-
-
-
-
-
+
+
+
+
+
diff --git a/connector_jira_servicedesk/views/project_project_views.xml b/connector_jira_servicedesk/views/project_project_views.xml
index aecfe6e6..d4fc8889 100644
--- a/connector_jira_servicedesk/views/project_project_views.xml
+++ b/connector_jira_servicedesk/views/project_project_views.xml
@@ -1,28 +1,27 @@
-
+
-
-
- jira.project.project.form
- jira.project.project
-
-
-
-
-
-
-
-
-
- jira.project.project.tree
- jira.project.project
-
-
-
-
-
-
-
-
+
+ jira.project.project.form
+ jira.project.project
+
+
+
+
+
+
+
+
+ jira.project.project.tree
+ jira.project.project
+
+
+
+
+
+
+
From cee6dfba493de2d6c94f4cb5269446562ea6bb66 Mon Sep 17 00:00:00 2001
From: Akim Juillerat
Date: Thu, 6 Aug 2020 12:46:48 +0200
Subject: [PATCH 14/19] [MIG] connector_jira_servicedesk: Migration to 13.0
---
connector_jira_servicedesk/__manifest__.py | 4 ++--
connector_jira_servicedesk/models/jira_backend/common.py | 2 --
connector_jira_servicedesk/models/project_project/binder.py | 2 +-
connector_jira_servicedesk/models/project_project/common.py | 1 -
connector_jira_servicedesk/views/jira_backend_views.xml | 6 +++++-
5 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/connector_jira_servicedesk/__manifest__.py b/connector_jira_servicedesk/__manifest__.py
index 57bff627..9376ee8d 100644
--- a/connector_jira_servicedesk/__manifest__.py
+++ b/connector_jira_servicedesk/__manifest__.py
@@ -2,11 +2,11 @@
{
"name": "JIRA Connector - Service Desk Extension",
- "version": "11.0.1.0.0",
+ "version": "13.0.1.0.0",
"author": "Camptocamp,Odoo Community Association (OCA)",
"license": "AGPL-3",
"category": "Connector",
- "depends": ["connector_jira",],
+ "depends": ["connector_jira"],
"website": "https://github.com/camptocamp/connector-jira",
"data": [
"views/jira_backend_views.xml",
diff --git a/connector_jira_servicedesk/models/jira_backend/common.py b/connector_jira_servicedesk/models/jira_backend/common.py
index dadc83a0..68fb9c06 100644
--- a/connector_jira_servicedesk/models/jira_backend/common.py
+++ b/connector_jira_servicedesk/models/jira_backend/common.py
@@ -30,12 +30,10 @@ def _selection_project_template(self):
]
return selection
- @api.multi
def import_organization(self):
self.env["jira.organization"].import_batch(self)
return True
- @api.multi
def activate_organization(self):
"""Get organization field name from JIRA web-service"""
self.ensure_one()
diff --git a/connector_jira_servicedesk/models/project_project/binder.py b/connector_jira_servicedesk/models/project_project/binder.py
index 2b6025a2..6b26c8ee 100644
--- a/connector_jira_servicedesk/models/project_project/binder.py
+++ b/connector_jira_servicedesk/models/project_project/binder.py
@@ -50,7 +50,7 @@ def to_internal(self, external_id, unwrap=False, organizations=None):
fallback = candidate
continue
- if candidate.organization_ids == organizations:
+ if organizations in candidate.organization_ids:
binding = candidate
break
if not binding:
diff --git a/connector_jira_servicedesk/models/project_project/common.py b/connector_jira_servicedesk/models/project_project/common.py
index a25d927b..aa8d351b 100644
--- a/connector_jira_servicedesk/models/project_project/common.py
+++ b/connector_jira_servicedesk/models/project_project/common.py
@@ -33,7 +33,6 @@ def _selection_project_type(self):
return selection
@api.constrains("backend_id", "external_id", "organization_ids")
- @api.multi
def _constrains_jira_uniq(self):
"""Modify the base constraint by adding organizations
diff --git a/connector_jira_servicedesk/views/jira_backend_views.xml b/connector_jira_servicedesk/views/jira_backend_views.xml
index 1b1535f2..1450d4a0 100644
--- a/connector_jira_servicedesk/views/jira_backend_views.xml
+++ b/connector_jira_servicedesk/views/jira_backend_views.xml
@@ -9,7 +9,11 @@
-
+
Date: Wed, 22 Apr 2020 10:54:33 +0200
Subject: [PATCH 15/19] [IMP]connector_jira_servicedesk: Add
servicedesk_issue_url
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Update connector_jira_servicedesk/models/account_analytic_line/common.py
Co-authored-by: Stéphane Mangin
Update connector_jira_servicedesk/tests/test_import_organization.py
Co-authored-by: Stéphane Mangin
Update connector_jira_servicedesk/tests/common.py
Co-authored-by: Stéphane Mangin
Update connector_jira_servicedesk/i18n/connector_jira_servicedesk.pot
Co-authored-by: Stéphane Mangin
Update connector_jira_servicedesk/models/account_analytic_line/importer.py
Co-authored-by: Stéphane Mangin
---
connector_jira_servicedesk/README.rst | 84 +++-
.../i18n/connector_jira_servicedesk.pot | 131 +++--
.../models/account_analytic_line/__init__.py | 1 +
.../models/account_analytic_line/common.py | 44 ++
.../models/account_analytic_line/importer.py | 2 +-
.../models/jira_organization/adapter.py | 1 +
.../models/project_project/common.py | 14 +
.../readme/CONTRIBUTORS.rst | 5 +
.../readme/DESCRIPTION.rst | 1 +
connector_jira_servicedesk/readme/USAGE.rst | 44 ++
.../static/description/index.html | 472 ++++++++++++++++++
connector_jira_servicedesk/tests/common.py | 2 +-
.../tests/test_import_organization.py | 2 +-
.../views/jira_backend_views.xml | 4 +-
.../views/project_link_jira_views.xml | 5 +-
.../views/project_project_views.xml | 12 +
16 files changed, 774 insertions(+), 50 deletions(-)
create mode 100644 connector_jira_servicedesk/models/account_analytic_line/common.py
create mode 100644 connector_jira_servicedesk/readme/CONTRIBUTORS.rst
create mode 100644 connector_jira_servicedesk/readme/DESCRIPTION.rst
create mode 100644 connector_jira_servicedesk/readme/USAGE.rst
create mode 100644 connector_jira_servicedesk/static/description/index.html
diff --git a/connector_jira_servicedesk/README.rst b/connector_jira_servicedesk/README.rst
index f64c9954..1148035b 100644
--- a/connector_jira_servicedesk/README.rst
+++ b/connector_jira_servicedesk/README.rst
@@ -1,8 +1,42 @@
+=======================================
JIRA Connector - Service Desk Extension
=======================================
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fconnector--jira-lightgray.png?logo=github
+ :target: https://github.com/OCA/connector-jira/tree/13.0/connector_jira_servicedesk
+ :alt: OCA/connector-jira
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/connector-jira-13-0/connector-jira-13-0-connector_jira_servicedesk
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/233/13.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module add support with jira servicedesk
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
Setup
------
+~~~~~
A new button is added on the JIRA backend, to import the organizations
of JIRA. Before, be sure to use the button "Configure Organization Link"
@@ -10,10 +44,10 @@ in the "Advanced Configuration" tab.
Features
-^^^^^^^^
+~~~~~~~~
Organizations
--------------
+~~~~~~~~~~~~~
On Service Desk, you can share projects with Organizations.
You may want to use different Odoo projects according to the
@@ -45,3 +79,47 @@ ones, while you only have one project on JIRA.
* Tasks with org "Rhea" will be attached to this project
* Tasks with orgs "Themis" and "Rhea" will be attached to another project "Themis and Rhea"
* The rest of the tasks will be attached to a fourth project (configured without organizations)
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Camptocamp
+
+Contributors
+~~~~~~~~~~~~
+
+* Patrick Tombez
+* Guewen Baconnier
+* Jaime Arroyo
+* Akim Juillerat
+* Denis Leemann
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/connector-jira `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/connector_jira_servicedesk/i18n/connector_jira_servicedesk.pot b/connector_jira_servicedesk/i18n/connector_jira_servicedesk.pot
index ad8ab5ef..5ac328f6 100644
--- a/connector_jira_servicedesk/i18n/connector_jira_servicedesk.pot
+++ b/connector_jira_servicedesk/i18n/connector_jira_servicedesk.pot
@@ -1,12 +1,12 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * connector_jira_servicedesk
+# * connector_jira_servicedesk
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 11.0\n"
+"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
+"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -14,58 +14,76 @@ msgstr ""
"Plural-Forms: \n"
#. module: connector_jira_servicedesk
-#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
-msgid "Activate the synchronization of the Organization field.\n"
+#: model_terms:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+msgid ""
+"Activate the synchronization of the Organization field.\n"
" Only on JIRA ServiceDesk. The field contains the name of\n"
" the JIRA custom field that contains the Organization."
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+#: model:ir.model,name:connector_jira_servicedesk.model_account_analytic_line
+msgid "Analytic Line"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model_terms:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
msgid "Configure Organization"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_create_uid
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__create_uid
msgid "Created by"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_create_date
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__create_date
msgid "Created on"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_display_name
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__display_name
msgid "Display Name"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_id
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__id
msgid "ID"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,help:connector_jira_servicedesk.field_jira_project_base_mixin_organization_ids
-#: model:ir.model.fields,help:connector_jira_servicedesk.field_jira_project_project_organization_ids
-#: model:ir.model.fields,help:connector_jira_servicedesk.field_project_link_jira_organization_ids
-msgid "If organizations are set, a task will be added to the project only if the project AND the organization match with the selection."
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__external_id
+msgid "ID on Jira"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+#: model:ir.model.fields,help:connector_jira_servicedesk.field_jira_project_base_mixin__organization_ids
+#: model:ir.model.fields,help:connector_jira_servicedesk.field_jira_project_project__organization_ids
+#: model:ir.model.fields,help:connector_jira_servicedesk.field_project_link_jira__organization_ids
+msgid ""
+"If organizations are set, a task will be added to the project only if the "
+"project AND the organization match with the selection."
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model_terms:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
msgid "Import Organizations"
msgstr ""
+#. module: connector_jira_servicedesk
+#: model:ir.model,name:connector_jira_servicedesk.model_jira_project_base_mixin
+msgid "JIRA Project Base Mixin"
+msgstr ""
+
#. module: connector_jira_servicedesk
#: model:ir.model,name:connector_jira_servicedesk.model_jira_backend
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_backend_id
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__backend_id
msgid "Jira Backend"
msgstr ""
#. module: connector_jira_servicedesk
#: model:ir.model,name:connector_jira_servicedesk.model_jira_organization
-#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+#: model_terms:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
msgid "Jira Organization"
msgstr ""
@@ -75,66 +93,96 @@ msgid "Jira Projects"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization___last_update
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__jira_updated_at
+msgid "Jira Updated At"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model,name:connector_jira_servicedesk.model_jira_account_analytic_line
+msgid "Jira Worklog"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization____last_update
msgid "Last Modified on"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_write_uid
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__write_uid
msgid "Last Updated by"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_write_date
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__write_date
msgid "Last Updated on"
msgstr ""
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__sync_date
+msgid "Last synchronization date"
+msgstr ""
+
#. module: connector_jira_servicedesk
#: model:ir.model,name:connector_jira_servicedesk.model_project_link_jira
msgid "Link Project with JIRA"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_name
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__name
msgid "Name"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_backend_organization_field_name
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_backend__organization_field_name
msgid "Organization Field"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_project_base_mixin_organization_ids
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_project_project_organization_ids
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_project_link_jira_organization_ids
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_project_base_mixin__organization_ids
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_project_project__organization_ids
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_project_link_jira__organization_ids
msgid "Organization(s) on Jira"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_backend_organization_ids
-#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_backend__organization_ids
+#: model_terms:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
msgid "Organizations"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization_project_ids
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_account_analytic_line__jira_servicedesk_issue_url
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_account_analytic_line__jira_servicedesk_issue_url
+msgid "Original JIRA service desk issue Link"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_organization__project_ids
msgid "Project"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
+#: model_terms:ir.ui.view,arch_db:connector_jira_servicedesk.view_jira_backend_form
msgid "Run"
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model.fields,help:connector_jira_servicedesk.field_jira_backend_organization_field_name
-msgid "The 'Organization' field on JIRA is a custom field. The name of the field is something like 'customfield_10002'. "
+#: model:ir.model.fields,field_description:connector_jira_servicedesk.field_jira_project_project__servicedesk_customer_portal_number
+msgid "Service desk customer portal ID"
+msgstr ""
+
+#. module: connector_jira_servicedesk
+#: model:ir.model.fields,help:connector_jira_servicedesk.field_jira_backend__organization_field_name
+msgid ""
+"The 'Organization' field on JIRA is a custom field. The name of the field is"
+" something like 'customfield_10002'. "
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.ui.view,arch_db:connector_jira_servicedesk.project_link_jira_form
-msgid "The organizations you choose will define how the tasks and worklogs are attached to the project.\n"
+#: model_terms:ir.ui.view,arch_db:connector_jira_servicedesk.project_link_jira_form
+msgid ""
+"The organizations you choose will define how the tasks and\n"
+" worklogs are attached to the project.\n"
" If a task is assigned to an organization, it will be assigned\n"
" to an Odoo project linked to the JIRA project only if the\n"
" organization match. If no project with an organization exists,\n"
@@ -143,19 +191,22 @@ msgid "The organizations you choose will define how the tasks and worklogs are a
msgstr ""
#. module: connector_jira_servicedesk
-#: code:addons/connector_jira_servicedesk/models/project_project/common.py:58
+#: code:addons/connector_jira_servicedesk/models/project_project/common.py:0
#, python-format
-msgid "The project %s is already linked with the same JIRA project without organization."
+msgid ""
+"The project %s is already linked with the same JIRA project without "
+"organization."
msgstr ""
#. module: connector_jira_servicedesk
-#: code:addons/connector_jira_servicedesk/models/project_project/common.py:63
+#: code:addons/connector_jira_servicedesk/models/project_project/common.py:0
#, python-format
-msgid "The project %s is already linked with this JIRA project and similar organizations."
+msgid ""
+"The project %s is already linked with this JIRA project and similar "
+"organizations."
msgstr ""
#. module: connector_jira_servicedesk
-#: model:ir.model,name:connector_jira_servicedesk.model_jira_project_base_mixin
-msgid "jira.project.base.mixin"
+#: model:ir.model.fields,help:connector_jira_servicedesk.field_jira_project_project__servicedesk_customer_portal_number
+msgid "This number is used to compute servicedesk URL on analytic lines"
msgstr ""
-
diff --git a/connector_jira_servicedesk/models/account_analytic_line/__init__.py b/connector_jira_servicedesk/models/account_analytic_line/__init__.py
index 35099a47..79ab5dc6 100644
--- a/connector_jira_servicedesk/models/account_analytic_line/__init__.py
+++ b/connector_jira_servicedesk/models/account_analytic_line/__init__.py
@@ -1 +1,2 @@
+from . import common
from . import importer
diff --git a/connector_jira_servicedesk/models/account_analytic_line/common.py b/connector_jira_servicedesk/models/account_analytic_line/common.py
new file mode 100644
index 00000000..86c1cf35
--- /dev/null
+++ b/connector_jira_servicedesk/models/account_analytic_line/common.py
@@ -0,0 +1,44 @@
+# Copyright 2020-2021 Camptocamp SA
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import api, fields, models
+
+
+class JiraAccountAnalyticLine(models.Model):
+ _inherit = "jira.account.analytic.line"
+
+ jira_servicedesk_issue_url = fields.Char(
+ string="Original JIRA service desk issue Link",
+ compute="_compute_jira_servicedesk_issue_url",
+ )
+
+ @api.depends("jira_issue_key")
+ def _compute_jira_servicedesk_issue_url(self):
+ """Compute the external URL to JIRA service desk."""
+ for record in self:
+ jira_project = fields.first(self.project_id.jira_bind_ids)
+ if jira_project and record.jira_issue_key:
+ record.jira_servicedesk_issue_url = jira_project.make_servicedesk_issue_url( # noqa:
+ record.jira_issue_key
+ )
+
+
+class AccountAnalyticLine(models.Model):
+ _inherit = "account.analytic.line"
+
+ jira_servicedesk_issue_url = fields.Char(
+ string="Original JIRA service desk issue Link",
+ compute="_compute_jira_servicedesk_issue_url",
+ readonly=True,
+ )
+
+ @api.depends("jira_bind_ids.jira_servicedesk_issue_url",)
+ def _compute_jira_servicedesk_issue_url(self):
+ """Compute the service desk references to JIRA.
+
+ We assume that we have only one external record for a line
+ """
+ for record in self:
+ if not record.jira_bind_ids:
+ continue
+ main_binding = record.jira_bind_ids[0]
+ record.jira_servicedesk_issue_url = main_binding.jira_servicedesk_issue_url
diff --git a/connector_jira_servicedesk/models/account_analytic_line/importer.py b/connector_jira_servicedesk/models/account_analytic_line/importer.py
index 4c28e33b..31344172 100644
--- a/connector_jira_servicedesk/models/account_analytic_line/importer.py
+++ b/connector_jira_servicedesk/models/account_analytic_line/importer.py
@@ -1,4 +1,4 @@
-# Copyright 2019 Camptocamp SA
+# Copyright 2019-2021 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_jira_servicedesk/models/jira_organization/adapter.py b/connector_jira_servicedesk/models/jira_organization/adapter.py
index abd2724e..6d254ef6 100644
--- a/connector_jira_servicedesk/models/jira_organization/adapter.py
+++ b/connector_jira_servicedesk/models/jira_organization/adapter.py
@@ -48,6 +48,7 @@ def __init__(self, work_context):
self.client._session.headers.update(self._desk_headers)
def read(self, id_):
+ # pylint: disable=method-required-super
organization = Organization(self.client._options, self.client._session)
with self.handle_404():
organization.find(id_)
diff --git a/connector_jira_servicedesk/models/project_project/common.py b/connector_jira_servicedesk/models/project_project/common.py
index aa8d351b..448b16c7 100644
--- a/connector_jira_servicedesk/models/project_project/common.py
+++ b/connector_jira_servicedesk/models/project_project/common.py
@@ -1,5 +1,6 @@
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+import urllib.parse
from odoo import _, api, exceptions, fields, models
@@ -26,6 +27,11 @@ class JiraProjectBaseFields(models.AbstractModel):
class JiraProjectProject(models.Model):
_inherit = "jira.project.project"
+ servicedesk_customer_portal_number = fields.Integer(
+ string="Service desk customer portal ID",
+ help="This number is used to compute servicedesk URL on analytic lines",
+ )
+
@api.model
def _selection_project_type(self):
selection = super()._selection_project_type()
@@ -72,3 +78,11 @@ def _constrains_jira_uniq(self):
)
% (other.display_name)
)
+
+ def make_servicedesk_issue_url(self, jira_issue_id):
+ return urllib.parse.urljoin(
+ self.backend_id.uri,
+ "/service_desk/customer/portal/{}/{}".format(
+ self.servicedesk_customer_portal_number, jira_issue_id
+ ),
+ )
diff --git a/connector_jira_servicedesk/readme/CONTRIBUTORS.rst b/connector_jira_servicedesk/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000..d9338385
--- /dev/null
+++ b/connector_jira_servicedesk/readme/CONTRIBUTORS.rst
@@ -0,0 +1,5 @@
+* Patrick Tombez
+* Guewen Baconnier
+* Jaime Arroyo
+* Akim Juillerat
+* Denis Leemann
diff --git a/connector_jira_servicedesk/readme/DESCRIPTION.rst b/connector_jira_servicedesk/readme/DESCRIPTION.rst
new file mode 100644
index 00000000..87c066e8
--- /dev/null
+++ b/connector_jira_servicedesk/readme/DESCRIPTION.rst
@@ -0,0 +1 @@
+This module add support with jira servicedesk
diff --git a/connector_jira_servicedesk/readme/USAGE.rst b/connector_jira_servicedesk/readme/USAGE.rst
new file mode 100644
index 00000000..2781c133
--- /dev/null
+++ b/connector_jira_servicedesk/readme/USAGE.rst
@@ -0,0 +1,44 @@
+Setup
+~~~~~
+
+A new button is added on the JIRA backend, to import the organizations
+of JIRA. Before, be sure to use the button "Configure Organization Link"
+in the "Advanced Configuration" tab.
+
+
+Features
+~~~~~~~~
+
+Organizations
+~~~~~~~~~~~~~
+
+On Service Desk, you can share projects with Organizations.
+You may want to use different Odoo projects according to the
+organizations. This is what this extension allows.
+
+Example:
+
+* You have one Service Desk project named "Earth Project" with key EARTH
+* On JIRA SD You share this project with organizations Themis and Rhea
+* However on Odoo, you want to track the hours differently for Themis and Rhea
+
+Steps on Odoo:
+
+* Create a Themis project, use the "Link with JIRA" action with the key EARTH
+* When you hit Next, the organization(s) you want to link must be set
+* Repeat with another project for Rhea
+
+If the project binding for the synchronization already exists, you can still edit it in the settings of the project and change the organizations.
+
+When a task or worklog is imported, it will search for a project having
+exactly the same set of organizations than the one of the task. If no
+project with the same set is found and you have a project configured
+without organization, the task will be linked to it.
+
+This means that, on Odoo, you can have shared project altogether with dedicated
+ones, while you only have one project on JIRA.
+
+* Tasks with org "Themis" will be attached to this project
+* Tasks with org "Rhea" will be attached to this project
+* Tasks with orgs "Themis" and "Rhea" will be attached to another project "Themis and Rhea"
+* The rest of the tasks will be attached to a fourth project (configured without organizations)
diff --git a/connector_jira_servicedesk/static/description/index.html b/connector_jira_servicedesk/static/description/index.html
new file mode 100644
index 00000000..34faa4a5
--- /dev/null
+++ b/connector_jira_servicedesk/static/description/index.html
@@ -0,0 +1,472 @@
+
+
+
+
+
+
+JIRA Connector - Service Desk Extension
+
+
+
+
+
JIRA Connector - Service Desk Extension
+
+
+
+
This module add support with jira servicedesk
+
Table of contents
+
+
+
+
+
+
A new button is added on the JIRA backend, to import the organizations
+of JIRA. Before, be sure to use the button “Configure Organization Link”
+in the “Advanced Configuration” tab.
+
+
+
+
+
On Service Desk, you can share projects with Organizations.
+You may want to use different Odoo projects according to the
+organizations. This is what this extension allows.
+
Example:
+
+You have one Service Desk project named “Earth Project” with key EARTH
+On JIRA SD You share this project with organizations Themis and Rhea
+However on Odoo, you want to track the hours differently for Themis and Rhea
+
+
Steps on Odoo:
+
+Create a Themis project, use the “Link with JIRA” action with the key EARTH
+When you hit Next, the organization(s) you want to link must be set
+Repeat with another project for Rhea
+
+
If the project binding for the synchronization already exists, you can still edit it in the settings of the project and change the organizations.
+
When a task or worklog is imported, it will search for a project having
+exactly the same set of organizations than the one of the task. If no
+project with the same set is found and you have a project configured
+without organization, the task will be linked to it.
+
This means that, on Odoo, you can have shared project altogether with dedicated
+ones, while you only have one project on JIRA.
+
+Tasks with org “Themis” will be attached to this project
+Tasks with org “Rhea” will be attached to this project
+Tasks with orgs “Themis” and “Rhea” will be attached to another project “Themis and Rhea”
+The rest of the tasks will be attached to a fourth project (configured without organizations)
+
+
+
+
+
+
Bugs are tracked on GitHub Issues .
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+feedback .
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/connector-jira project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
+
+
+
+
+
diff --git a/connector_jira_servicedesk/tests/common.py b/connector_jira_servicedesk/tests/common.py
index 154a056b..4f96d954 100644
--- a/connector_jira_servicedesk/tests/common.py
+++ b/connector_jira_servicedesk/tests/common.py
@@ -1,4 +1,4 @@
-# Copyright 2019 Camptocamp SA
+# Copyright 2019-2021 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from os.path import dirname
diff --git a/connector_jira_servicedesk/tests/test_import_organization.py b/connector_jira_servicedesk/tests/test_import_organization.py
index dcc81b04..a5470fc2 100644
--- a/connector_jira_servicedesk/tests/test_import_organization.py
+++ b/connector_jira_servicedesk/tests/test_import_organization.py
@@ -1,4 +1,4 @@
-# Copyright 2019 Camptocamp SA
+# Copyright 2019-2021 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.connector_jira.tests.common import JiraSavepointCase
diff --git a/connector_jira_servicedesk/views/jira_backend_views.xml b/connector_jira_servicedesk/views/jira_backend_views.xml
index 1450d4a0..97158224 100644
--- a/connector_jira_servicedesk/views/jira_backend_views.xml
+++ b/connector_jira_servicedesk/views/jira_backend_views.xml
@@ -51,10 +51,10 @@
attrs="{'invisible': [('state', '=', 'authenticate')]}"
/>
- Activate the synchronization of the Organization field.
+ Activate the synchronization of the Organization field.
Only on JIRA ServiceDesk. The field contains the name of
the JIRA custom field that contains the Organization.
-
+
diff --git a/connector_jira_servicedesk/views/project_link_jira_views.xml b/connector_jira_servicedesk/views/project_link_jira_views.xml
index a7356bf7..3937139e 100644
--- a/connector_jira_servicedesk/views/project_link_jira_views.xml
+++ b/connector_jira_servicedesk/views/project_link_jira_views.xml
@@ -17,13 +17,14 @@
/>
- The organizations you choose will define how the tasks and worklogs are attached to the project.
+ The organizations you choose will define how the tasks and
+ worklogs are attached to the project.
If a task is assigned to an organization, it will be assigned
to an Odoo project linked to the JIRA project only if the
organization match. If no project with an organization exists,
the task will be assigned to a linked project without organization.
If no such project exists in Odoo, the task is ignored.
-
+
diff --git a/connector_jira_servicedesk/views/project_project_views.xml b/connector_jira_servicedesk/views/project_project_views.xml
index d4fc8889..de8dabab 100644
--- a/connector_jira_servicedesk/views/project_project_views.xml
+++ b/connector_jira_servicedesk/views/project_project_views.xml
@@ -12,6 +12,12 @@
options="{'no_create': True}"
/>
+
+
+
@@ -22,6 +28,12 @@
+
+
+
From 7152947fa09d3c31fcdcc4b1a99f737268d142ed Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Tue, 16 Feb 2021 10:12:44 +0000
Subject: [PATCH 16/19] [UPD] README.rst
---
connector_jira_servicedesk/static/description/index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/connector_jira_servicedesk/static/description/index.html b/connector_jira_servicedesk/static/description/index.html
index 34faa4a5..8506c41b 100644
--- a/connector_jira_servicedesk/static/description/index.html
+++ b/connector_jira_servicedesk/static/description/index.html
@@ -3,7 +3,7 @@
-
+
JIRA Connector - Service Desk Extension