diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio.xml
deleted file mode 100644
index e453206f3401269dd20616f08cadfcd9ac39f88f..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="Folder" module="OFS.Folder"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>_objects</string> </key>
-            <value>
-              <tuple/>
-            </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>erp5_jio</string> </value>
-        </item>
-        <item>
-            <key> <string>title</string> </key>
-            <value> <string></string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.py
deleted file mode 100644
index e2cc3230abcf2b599fb25ac50948054b52003cc3..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.py
+++ /dev/null
@@ -1,23 +0,0 @@
-import json
-#from Products.ERP5Type.Log import log
-# use JSON.parse as json.loads and JSON.stringify as json.dumps
-
-context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*")
-
-jio = context.JIO_class()
-
-try: option = jio.jsonUtf8Loads(context.REQUEST.form["option"])
-except KeyError:
-  option = {}
-
-try: mode = str(context.REQUEST.form["mode"])
-except KeyError: mode = "generic"
-jio.setMode(mode)
-
-metadata_json = jio.getAllDocuments(option)
-
-return jio.sendSuccess(metadata_json)
-
-# document_list = context.portal_catalog(portal_type="Web Page")
-
-# return jio.sendSuccess(jio.getAllDocsFromDocumentList(document_list, include_docs=option.get("include_docs")))
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.xml
deleted file mode 100644
index 5ea0b1695affa061c89140c0304d340acf02e1aa..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_allDocs.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string></string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_allDocs</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_check.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_check.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_check.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_check.xml
deleted file mode 100644
index 889815917fc974f00770a66f8ddd4019a9378923..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_check.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string></string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_check</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.py
deleted file mode 100644
index 295e6c34bf44d5b1c1aec59a8f30d3c4827407e3..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.py
+++ /dev/null
@@ -1,661 +0,0 @@
-import json
-from DateTime import DateTime
-from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery
-from Products.ERP5Type.Log import log
-portal = context.getPortalObject()
-
-def Task_setProjectTitle(document, project_title):
-  project_list = portal.portal_catalog(portal_type="Project", title=project_title)
-  project_url = None
-  if project_title:
-    if len(project_list):
-      project = project_list[0].getObject()
-    else:
-      project = portal.project_module.newContent(title=project_title)
-    project_url = project.getRelativeUrl()
-  #portal.person_module.log("Task_setProjectTitle, project", project_url)
-  document.setSourceProject(project_url)
-
-def convertTaskReportStateToJioState(state):
-  # portal.person_module.log("state =========>", state)
-  map = {
-    "comfirmed": "Comfirmed",
-    "started": "Started",
-    "stopped": "Completed",
-    "draft": "Draft"
-  };
-  return state if map.get(state) is None else map[state]
-
-def changeTaskReportState(document, state):
-  state = state.lower()
-  current_state = document.getSimulationState()
-  if state == "comfirmed":
-    if current_state == "draft":
-      document.confirm()
-    return
-  if state == "started":
-    if current_state in ["draft", "confirmed"]:
-      document.start()
-    if current_state == "stopped":
-      document.restart()
-    return
-  if state == "completed":
-    if current_state in ["draft", "confirmed", "started"]:
-      document.stop()
-    return
-
-def camelCaseToUnderscores(string):
-  result = ""
-  tmp = ""
-  for char in string:
-    if char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
-      tmp += char
-    elif tmp != "":
-      tmp = tmp[:-1].lower() + "_" + tmp[-1].lower()
-      if tmp[0] != "_":
-        tmp = "_" + tmp
-      result += tmp + char
-      tmp = ""
-    else:
-      result += char
-  if result[0] == '_' and string[0] != '_': return result[1:]
-  return result
-
-def underscores_to_camel_case(string):
-    return reduce(lambda v, s: v + s.title(), string.split("_"))
-
-def dictGetKeyFromValue(obj, value, *args):
-  for k, v in obj.items():
-    if v == value:
-      return k
-  if len(args) == 0:
-    raise ValueError('value not found')
-  return args[0]
-
-def UTF8DeepJsonEncoder(obj):
-  # string -> unicode -> str
-  if isinstance(obj, unicode):
-    return obj.encode("UTF-8")
-  # array -> list
-  if isinstance(obj, list):
-    for i in xrange(len(obj)):
-      obj[i] = UTF8DeepJsonEncoder(obj[i])
-    return obj
-  # object -> dict
-  if isinstance(obj, dict):
-    for k, v in obj.items():
-      v = UTF8DeepJsonEncoder(v)
-      del obj[k]
-      obj[UTF8DeepJsonEncoder(k)] = v
-    return obj
-  # number (int) -> int, long
-  # true -> True
-  # false -> False
-  # null -> None
-  return obj
-
-def json_loads(string):
-  return UTF8DeepJsonEncoder(json.loads(string))
-
-def jsonDeepCopy(json_dict):
-  "Clones the JSON object in deep and returns the clone"
-  return json_loads(json.dumps(json_dict))
-
-class FakeDocument():
-  def getObject(self): return self
-  def hasProperty(self, property_id): return False
-
-
-class JioErp5Only():
-  def getDocumentAttachment(self, metadata_json):
-    tool.checkMetadata(metadata_json)
-    try: document = tool.getDocumentFromUrl(metadata_json.get("_id"))
-    except ValueError: raise LookupError("Missing document")
-    except KeyError: raise LookupError("Missing document")
-    raise KeyError("Missing attachment")
-
-  def getDocumentMetadata(self, metadata_json):
-    tool.checkMetadata(metadata_json)
-    try: document = tool.getDocumentFromUrl(metadata_json.get("_id"))
-    except ValueError: raise LookupError("Missing document")
-    except KeyError: raise LookupError("Missing document")
-    document_dict = tool.getDocumentProperties(document)
-    tool.stringifyDictDateValue(document_dict)
-    document_dict["workflow_history"] = [v for v in document.workflow_history]
-    return document_dict
-
-
-class JioGeneric():
-  "Processes generic jIO requests"
-  def __init__(self):
-    self.simple_conversion_dict = {
-      "content_type": "format",
-      "portal_type": "type",
-      "contributor_list": "contributor",
-      "subject_list": "subject",
-      "categories_list": "category",
-      "creation_date": "created",
-      "modification_date": "modified",
-      "start_date": "start",
-      "stop_date": "stop"
-    }
-    # order deny, allow
-    # deny from all
-    self.allowed_property_id_list = ["title", "short_title", "description",
-                                     "language", "reference", "version", "project",
-                                     "format", "type", "start", "stop", "state",
-                                     "effective_date", "expiration_date",
-                                     "contributor", "subject", "category"]
-    self.type_attachment_key = {
-      "Web Page": "text_content",
-      "Image": "data"
-    }
-    self.allowed_portal_type_list = ["Task Report"]
-    # self.local_attachment_key = "local_attachment_dict"
-
-  def getDocumentAttachment(self, metadata_json):
-    tool.checkMetadata(metadata_json)
-    try: document = tool.getDocumentFromUrl(metadata_json.get("_id"))
-    except AttributeError: raise ValueError("Bad document id")
-    except (ValueError, KeyError): raise LookupError("Missing document")
-    document_dict = tool.getDocumentProperties(document)
-    attachment_key = self.type_attachment_key.get(document.getPortalType())
-    if metadata_json.get("_attachment") == "body" and \
-      attachment_key in document_dict:
-      data = document_dict[attachment_key]
-      if data is not None:
-        return data
-    # elif document_dict.get(self.local_attachment_key) is not None and \
-    #      metadata_json.get("_attachment") in \
-    #      document_dict.get(self.local_attachment_key):
-    #   return document_dict[self.local_attachment_key][
-    #     metadata_json["_attachment"]]["data"]
-    raise KeyError("Missing attachment")
-
-  def getDocumentMetadata(self, metadata_json):
-    tool.checkMetadata(metadata_json)
-    try: document = tool.getDocumentFromUrl(metadata_json.get("_id"))
-    except AttributeError: raise ValueError("Bad document id")
-    except ValueError: raise LookupError("Missing document")
-    except KeyError: raise LookupError("Missing document")
-    document_dict = tool.getDocumentProperties(document)
-    real_document_dict = {}
-    # get attachments metas
-    attachment_key = self.type_attachment_key.get(document.getPortalType())
-    if attachment_key is not None and \
-      document_dict.get(attachment_key) is not None:
-      real_document_dict["_attachments"] = tool.dictFusion(
-        real_document_dict.get("_attachments"), {
-          "body": {
-            "length": len(document_dict[attachment_key]),
-            "content_type": document_dict.get("content_type")
-          }
-        }
-      )
-    # if document_dict.get(self.local_attachment_key) is not None:
-    #   tmp = {}
-    #   for k, v in document_dict[self.local_attachment_key].items():
-    #     tmp[k] = {
-    #       "length": len(document_dict[self.local_attachment_key][k]["data"]),
-    #       "content_type": document_dict[self.local_attachment_key][k][
-    #         "content_type"]
-    #     }
-    #   real_document_dict["_attachments"] = tool.dictFusion(
-    #     real_document_dict.get("_attachments"), tmp);
-    while True:
-      try: k, v = document_dict.popitem()
-      except KeyError: break
-      if v is None or (
-          isinstance(v, (tuple, list, str, unicode)) and len(v) == 0):
-        continue
-      if k in self.simple_conversion_dict:
-        k = self.simple_conversion_dict.get(k)
-      if k in self.allowed_property_id_list:
-        if isinstance(v, DateTime):
-          v = v.ISO8601()
-        if k == attachment_key:
-          real_document_dict["_attachments"] = {
-            "body": {
-              "length": len(v)
-            }
-          }
-        elif k == "category" and isinstance(v, list):
-          # specific process for relation metadata_key
-          relation_list = []
-          for i, s in enumerate(v):
-            if s.startswith("follow_up/"):
-              relation_list.append(v.pop(i))
-          if len(relation_list) > 0:
-            real_document_dict["relation"] = relation_list
-        real_document_dict[k] = v
-    real_document_dict["_id"] = metadata_json["_id"]
-    real_document_dict["date"] = document.getCreationDate().ISO8601()
-    real_document_dict["created"] = document.getCreationDate().ISO8601()
-    real_document_dict["modified"] = document.getModificationDate().ISO8601()
-    real_document_dict["type"] = document.getPortalType()
-    # HARD CODE for task report documents
-    if document.getPortalType() == "Task Report":
-      real_document_dict["state"] = convertTaskReportStateToJioState(document.getSimulationState())
-      real_document_dict["project"] = document.getSourceProjectTitle()
-      if real_document_dict["project"] == None: del real_document_dict["project"]
-    #tool.stringifyDictDateValue(real_document_dict)
-    return real_document_dict
-
-  def updateDocumentMetadataEditKw(self, metadata_json,
-                                   document=FakeDocument()):
-    edit_kw = {}
-    while True:
-      try: meta_key, meta_value = metadata_json.popitem()
-      except KeyError: break
-      doc_key = meta_key
-      for erp5_key, jio_key in self.simple_conversion_dict.iteritems():
-        if jio_key == meta_key:
-          doc_key = erp5_key
-          break
-      if meta_key in self.allowed_property_id_list:
-        if meta_value is None and document.hasProperty(doc_key) or \
-           meta_value is not None:
-          edit_kw[doc_key] = meta_value
-        if meta_key == "category" and metadata_json.get("relation") is not None:
-          if isinstance(metadata_json["relation"], tuple):
-            edit_kw[doc_key] = edit_kw[doc_key] + metadata_json["relation"]
-          else:
-            edit_kw[doc_key] = edit_kw[doc_key] + (metadata_json["relation"],)
-    return edit_kw
-
-  def putDocumentAttachment(self, metadata_json):
-    tool.checkMetadata(metadata_json)
-    document = tool.getDocumentFromUrl(metadata_json["_id"]).getObject()
-    attachment_key = self.type_attachment_key.get(document.getPortalType())
-    if metadata_json.get("_attachment") == "body":
-      edit_kw = {attachment_key: metadata_json.get("_data")}
-      document.edit(**edit_kw)
-    else:
-      raise ValueError("Unauthorized attachment id")
-      # edit_kw = {self.local_attachment_key:
-      #            document.getProperty(self.local_attachment_key)}
-      # if edit_kw.get(self.local_attachment_key) is None:
-      #   edit_kw[self.local_attachment_key] = {}
-      # edit_kw[self.local_attachment_key][metadata_json.get("_attachment")] = {
-      #   "content_type": metadata_json.get("_mimetype"),
-      #   "data": metadata_json.get("_data")}
-      # document.edit(**edit_kw)
-    return {"id": metadata_json["_id"],
-            "attachment": metadata_json.get("_attachment")}
-
-  def putDocumentMetadata(self, metadata_json, overwrite=True):
-    hard_code_json = metadata_json.copy();
-    doc_id = metadata_json.get("_id")
-    document = None
-    try: document = tool.getDocumentFromUrl(doc_id)
-    except AttributeError: pass
-    except ValueError: pass
-    except KeyError: pass
-    if document is not None:
-      if not overwrite:
-        raise LookupError("Document already exists")
-      # document exists
-      document.getObject().edit(
-        **self.updateDocumentMetadataEditKw(metadata_json, document=document))
-    else:
-      # document does not exist
-      if "_id" in metadata_json:
-        try:
-          tool.newDocumentFromUrl(
-            metadata_json["_id"],
-            self.updateDocumentMetadataEditKw(metadata_json))
-        except KeyError: raise KeyError("Bad document id")
-      elif "type" in metadata_json:
-        try:
-          document = tool.newDocumentFromType(
-            metadata_json["type"],
-            self.updateDocumentMetadataEditKw(metadata_json))
-          doc_id = tool.getUrlFromDocument(document)
-        except ValueError:
-          raise ValueError("Bad type")
-      else:
-        raise TypeError("Type missing")
-    # HARD CODE for task report documents
-    #portal.person_module.log("document type ------->", hard_code_json)
-    if hard_code_json.get("type") == "Task Report":
-      if isinstance(hard_code_json.get("state"), str):
-        changeTaskReportState(document, hard_code_json["state"])
-      #portal.person_module.log("document type Task Report, metadata project", hard_code_json.get("project"))
-      Task_setProjectTitle(document, hard_code_json.get("project"))
-    return {"id": doc_id}
-
-  def removeDocument(self, metadata_json):
-    tool.checkMetadata(metadata_json)
-    try: document = tool.getDocumentFromUrl(metadata_json["_id"])
-    except AttributeError: raise ValueError("Bad document id")
-    except ValueError: raise LookupError("Missing document")
-    except KeyError: raise LookupError("Missing document")
-    document_id = document.getId()
-    document.getParentValue().manage_delObjects(ids=[document_id])
-    return {"id": metadata_json["_id"]}
-
-  def removeAttachment(self, metadata_json):
-    tool.checkMetadata(metadata_json)
-    try: document = tool.getDocumentFromUrl(metadata_json["_id"])
-    except AttributeError: raise ValueError("Bad document id")
-    except ValueError: raise LookupError("Missing document")
-    except KeyError: raise LookupError("Missing document")
-    attachment_key = self.type_attachment_key.get(document.getPortalType())
-    if metadata_json.get("_attachment") == "body":
-      if document.getTextContent() == None:
-        raise LookupError("Missing attachment")
-      edit_kw = {attachment_key: None}
-      document.edit(**edit_kw)
-    else:
-      raise ValueError("Unauthorized attachment id")
-    return {"id": metadata_json["_id"],
-            "attachment": metadata_json.get("_attachment")}
-
-  def parseQuery(self, query_dict):
-    def rec(query_dict):
-      if query_dict.get("type") == "simple":
-        # if query_dict.get("key") not in self.allowed_property_id_list:
-        #   return None
-        for erp5_key, jio_key in self.simple_conversion_dict.items():
-          if query_dict["key"] == jio_key:
-            query_dict["key"] = erp5_key
-            break
-        return SimpleQuery(comparison_operator=query_dict['operator'],
-                           **{query_dict['key']: query_dict['value']})
-      if query_dict.get("type") == "complex":
-        tool.listMapReplace(rec, query_dict['query_list'])
-        try:
-          while True: query_dict['query_list'].remove(None)
-        except ValueError: pass
-        return ComplexQuery(logical_operator=query_dict['operator'],
-                            *query_dict['query_list'])
-      return None
-    return rec(query_dict)
-
-  def getAllDocuments(self, option_json):
-    response = {"rows":[]}
-    kw = {}
-    if isinstance(option_json.get('query'), dict):
-      kw['query'] = self.parseQuery(option_json["query"])
-      kw['query'] = ComplexQuery(
-        kw['query'],
-        ComplexQuery(
-          logical_operator='or',
-          *[SimpleQuery(comparison_operator="=", portal_type=x) \
-            for x in self.allowed_portal_type_list]
-        ),
-        comparison_operator='and'
-      )
-    else:
-      kw['query'] = ComplexQuery(
-        logical_operator='or',
-        *[SimpleQuery(comparison_operator="=", portal_type=x) \
-          for x in self.allowed_portal_type_list]
-      )
-
-    if isinstance(option_json.get('limit'), list):
-      kw['limit'] = tuple(option_json['limit'])
-
-    c = self.simple_conversion_dict
-    if isinstance(option_json.get('sort_on'), list):
-      for i in range(len(option_json['sort_on'])):
-        s = option_json['sort_on'][i]
-        option_json['sort_on'][i] = dictGetKeyFromValue(c, s[0], s[0])
-      kw['sort_on'] = option_json['sort_on']
-
-    if not isinstance(option_json.get('select_list'), list):
-      option_json['select_list'] = []
-    if option_json['select_list'] != []:
-      id_list = context.portal_catalog.getSQLCatalog().getColumnIds()
-      i = len(option_json['select_list']) - 1
-      while i >= 0:
-        s = option_json['select_list'][i]
-        option_json['select_list'][i] = dictGetKeyFromValue(c, s, s)
-        if option_json['select_list'][i] not in id_list:
-          option_json['select_list'].pop(i)
-        i -= 1
-    kw['select_list'] = option_json['select_list']
-    #portal.person_module.log("catalog ----------===============>", kw);
-    for document in context.portal_catalog(**kw):
-      url = tool.getUrlFromDocument(document)
-      row = {"id": url, "key": url, "value": {}}
-      for erp5_meta in option_json['select_list']:
-        jio_meta = c.get(erp5_meta, erp5_meta)
-        row['value'][jio_meta] = getattr(document, erp5_meta, None)
-        if isinstance(row['value'][jio_meta], DateTime):
-          row['value'][jio_meta] = row['value'][jio_meta].ISO8601()
-      if option_json.get('include_docs') is True:
-        row["doc"] = self.getDocumentMetadata({"_id": url})
-      response["rows"].append(row)
-    response["total_rows"] = len(response["rows"])
-    return response
-
-  # def getAllDocuments(self, option_json):
-  #   response = {"rows":[]}
-  #   editkw = {}
-  #   if "query" in option_json:
-  #     editkw['query'] = self.parseQuery(option_json["query"])
-  #     editkw['query'] = ComplexQuery(
-  #       editkw['query'],
-  #       ComplexQuery(
-  #         logical_operator='or',
-  #         *[SimpleQuery(comparison_operator="=", portal_type=x) \
-  #           for x in self.allowed_portal_type_list]
-  #       ),
-  #       comparison_operator='and'
-  #     )
-  #     # if isinstance(option_json.get('limit'), list):
-  #     #   editkw['limit'] = tuple(option_json['limit'])
-
-  #     # if isinstance(option_json.get('select_list'), list):
-  #     #   for sub_list in option_json['select_list']:
-  #     #     sub_list = tuple(sub_list)
-  #     #   editkw['select_list'] = option_json['select_list']
-
-  #     for document in context.portal_catalog(query=query):
-  #       url = tool.getUrlFromDocument(document)
-  #       row = {"id": url, "key": url, "values": {}}
-  #       if option_json.get('include_docs') is True:
-  #         row["doc"] = self.getDocumentMetadata({"_id": url})
-  #       response["rows"].append(row)
-  #   else:
-  #     for portal_type in self.allowed_portal_type_list:
-  #       for document in context.portal_catalog(portal_type=portal_type):
-  #         url = tool.getUrlFromDocument(document)
-  #         row = {"id": url, "key": url, "values": {}}
-  #         if option_json.get('include_docs') is True:
-  #           row["doc"] = self.getDocumentMetadata({"_id": url})
-  #         response["rows"].append(row)
-  #   response["total_rows"] = len(response["rows"])
-  #   return response
-
-  # def getAllDocuments(self, option_json):
-  #   response = {"rows":[]}
-  #   for portal_type in self.allowed_portal_type_list:
-  #     for document in context.portal_catalog(portal_type=portal_type):
-  #       url = tool.getUrlFromDocument(document)
-  #       row = {"id": url, "key": url, "values": {}}
-  #       if option_json.get('include_docs') is True:
-  #         row["doc"] = self.getDocumentMetadata({"_id": url})
-  #       response["rows"].append(row)
-  #   response["total_rows"] = len(response["rows"])
-  #   return response
-
-class JioTool():
-  # TODO doc strings
-
-  def listMapReplace(self, function, li):
-    """listMapReplace(function, list)
-
-        li = [1, 2, 3]
-        listFilter(lambda x: x + 1, li)
-        print(li) -> [2, 3, 4]
-
-    """
-    for i in range(len(li)):
-        li[i] = function(li[i])
-
-  def createBadRequestDict(self, message, reason):
-    return {
-      "status": 405,
-      "statusText": "Bad Request",
-      "error": "bad_request",
-      "message": message,
-      "reason": reason
-    }
-
-  def createForbiddenDict(self, message, reason):
-    return {
-      "status": 403,
-      "statusText": "Forbidden",
-      "error": "forbidden",
-      "message": message,
-      "reason": reason
-    }
-
-  def createNotFoundDict(self, message, reason):
-    return {
-      "status": 404,
-      "statusText": "Not Found",
-      "error": "not_found",
-      "message": message,
-      "reason": reason
-    }
-
-  def createConflictDict(self, message, reason):
-    return {
-      "status": 409,
-      "statusText": "Conflict",
-      "error": "conflict",
-      "message": message,
-      "reason": reason
-    }
-
-  def checkMetadata(self, metadata_json):
-    "Check if the id of the metadata is good"
-    if metadata_json.get("_id") is None or metadata_json.get("_id") == "":
-      raise ValueError("Bad document id")
-
-  def getUrlFromDocument(self, document):
-    return "/" + context.getPortalObject().\
-      getDefaultModule(document.getPortalType()).getId() + "/" + \
-      document.getProperty("id")
-
-  def getDocumentFromUrl(self, url):
-    "Return an ERP5 document from an url. ex: '/web_page_module/2'"
-    url = url.split("/")
-    if len(url) != 3 or url[0] != "":
-      raise ValueError("Wrong URL")
-    url = url[1:]
-    return context.getPortalObject()[url[0]][url[1]] # throws KeyError
-
-  def newDocumentFromUrl(self, url, edit_kw={}):
-    "Create a new document from an url. ex: '/web_page_module/<num>'"
-    url = url.split("/")
-    if len(url) < 2 or url[0] != "":
-      raise ValueError("Wrong URL")
-    try: edit_kw["id"] = int(url[2])
-    except ValueError: raise ValueError("Wrong URL")
-    return context.getPortalObject()[url[1]].newContent(**edit_kw)
-
-  def newDocumentFromType(self, portal_type, edit_kw={}):
-    "Create a new document from a portal_type. ex: 'Web Page'"
-    return context.getPortalObject().getDefaultModule(portal_type).\
-      newContent(**edit_kw)
-
-  def getDocumentProperties(self, document):
-    document = document.getObject()
-    document_dict = {}
-    for property_definition in document.getPropertyMap():
-      property_id = property_definition["id"]
-      document_dict[property_id] = document.getProperty(property_id)
-    return document_dict
-
-  def jsonUtf8Loads(self, json_str):
-    return json_loads(json_str)
-
-  def stringifyDictDateValue(self, obj_dict):
-    for k, v in obj_dict.items():
-      if isinstance(v, DateTime):
-        obj_dict[k] = v.ISO8601()
-
-  def formatMetadataToPut(self, metadata_json):
-    for k, v in metadata_json.iteritems():
-      if isinstance(v, list):
-        metadata_json[k] = tuple(v)
-    return metadata_json
-
-  def dictFusion(self, *dict_tuple):
-    result = {}
-    for dicti in dict_tuple:
-      if dicti is not None:
-        for k, v in dicti.items():
-          result[k] = v
-    return result
-
-  def __init__(self, mode="generic"):
-    self.mode_dict = {
-      "generic": JioGeneric,
-      "erp5_only": JioErp5Only
-    }
-    self.setMode(mode)
-
-  def setMode(self, mode):
-    self.jio = self.mode_dict[mode]()
-
-  def getDocumentMetadata(self, metadata_json):
-    return self.jio.getDocumentMetadata(metadata_json)
-
-  def getDocumentAttachment(self, metadata_json):
-    return self.jio.getDocumentAttachment(metadata_json)
-
-  def putDocumentMetadata(self, metadata_json, overwrite=True, need_id=False):
-    metadata = self.formatMetadataToPut(
-      jsonDeepCopy(metadata_json))
-    if need_id:
-      if not isinstance(metadata.get("_id"), str) or metadata.get("_id") == "":
-        raise ValueError("Document id needed")
-    return self.jio.putDocumentMetadata(metadata, overwrite=overwrite)
-
-  def putDocumentAttachment(self, attachment_json):
-    return self.jio.putDocumentAttachment(attachment_json)
-
-  def removeDocument(self, metadata_json):
-    return self.jio.removeDocument(metadata_json)
-
-  def removeAttachment(self, metadata_json):
-    return self.jio.removeAttachment(metadata_json)
-
-  def getAllDocuments(self, option_json):
-    return self.jio.getAllDocuments(option_json)
-
-  def sendSuccess(self, param):
-    return json.dumps({"err": None, "response": param})
-
-  def sendError(self, param):
-    return json.dumps({"err": param, "response": None})
-
-  # def getDocumentListFromId(self, id):
-  #   kw = {"portal_type":"Web Page"}
-  #   kw[self.mode["id_key"]] = id
-  #   return context.portal_catalog(**kw)
-
-  # def getAllDocsFromDocumentList(self, document_list, include_docs=False):
-  #   rows = []
-  #   if include_docs is True:
-  #     for document in document_list:
-  #       id = document.getProperty(self.mode["id_key"])
-  #       if id is not None:
-  #         rows.append({"id": id, "key": id, "value": {}, "doc": self.getMetadataFromDocument(document)})
-  #   else:
-  #     for document in document_list:
-  #       id = document.getProperty(self.mode["id_key"])
-  #       if id is not None:
-  #         rows.append({"id": id, "key": id, "value": {}})
-  #   return {"total_rows": len(rows), "rows": rows}
-
-  # def setDocumentId(self, document, id):
-  #   document.getObject().setProperty(self.mode["id_key"], id)
-
-tool = JioTool(**kw)
-return tool
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.xml
deleted file mode 100644
index 0d226be2a2045429e5171df914d3ff1eb99da2ca..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_class.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string>**kw</string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_class</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.py
deleted file mode 100644
index e3683fa4b01791202d59c15aa5e3ae08aa1bb6b2..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import json
-#from Products.ERP5Type.Log import log
-# use JSON.parse as json.loads and JSON.stringify as json.dumps
-
-context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*")
-
-# dataType "json"
-# when sending -> [{"name": stringA, "value": stringB}]
-# context.REQUEST.form <- {stringA: stringB}
-
-jio = context.JIO_class()
-
-try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"])
-except KeyError:
-  return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received"))
-
-try: mode = str(context.REQUEST.form["mode"])
-except KeyError: mode = "generic"
-jio.setMode(mode)
-
-try:
-  metadata_json = jio.getDocumentMetadata(doc)
-except ValueError as e:
-  return jio.sendError(jio.createConflictDict("Cannot get document", str(e)))
-except LookupError as e:
-  return jio.sendError(jio.createNotFoundDict("Cannot get document", str(e)))
-
-return jio.sendSuccess(metadata_json)
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.xml
deleted file mode 100644
index d15bff42878181c29b71cf1ca048cb5a879eb805..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_get.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string></string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_get</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.py
deleted file mode 100644
index f3bc3f52677998efc81a452f9e934d22cc00b707..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import json
-#from Products.ERP5Type.Log import log
-# use JSON.parse as json.loads and JSON.stringify as json.dumps
-
-context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*")
-
-# dataType "json"
-# when sending -> [{"name": stringA, "value": stringB}]
-# context.REQUEST.form <- {stringA: stringB}
-
-jio = context.JIO_class()
-
-try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"])
-except KeyError:
-  return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received"))
-
-try: mode = str(context.REQUEST.form["mode"])
-except KeyError: mode = "generic"
-jio.setMode(mode)
-
-try:
-  attachment_data = jio.getDocumentAttachment(doc)
-except ValueError as e:
-  return jio.sendError(jio.createConflictDict("Cannot get attachment", str(e)))
-except LookupError as e:
-  return jio.sendError(jio.createNotFoundDict("Cannot get attachment", str(e)))
-
-return jio.sendSuccess(attachment_data)
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.xml
deleted file mode 100644
index c8095b7865563f9a2bd9dae75b02c03a1bf393bf..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_getAttachment.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string></string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_getAttachment</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.py
deleted file mode 100644
index 1540863057a18baa449744acaf0b7eb6dbb519d6..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.py
+++ /dev/null
@@ -1,27 +0,0 @@
-import json
-#from Products.ERP5Type.Log import log
-# use JSON.parse as json.loads and JSON.stringify as json.dumps
-
-context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*")
-
-jio = context.JIO_class()
-
-try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"])
-except KeyError:
-  return jio.sendError(jio.createBadRequestDict(
-    "Cannot get document", "No document information received"))
-
-try: mode = str(context.REQUEST.form["mode"])
-except KeyError: mode = "generic"
-jio.setMode(mode)
-
-try:
-  response_json = jio.putDocumentMetadata(doc, overwrite=False)
-except (ValueError, TypeError, LookupError) as e:
-  return jio.sendError(jio.createConflictDict("Cannot post document", str(e)))
-# except KeyError as e:
-#   return jio.sendError(jio.createForbiddenDict("Cannot post document", str(e)))
-# except LookupError as e:
-#   return jio.sendError(jio.createConflictDict("Cannot post document", str(e)))
-
-return jio.sendSuccess(response_json)
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.xml
deleted file mode 100644
index 53a2a64d4c07ca26c1cefd739d935d34a15c0cdf..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_post.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string></string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_post</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.py
deleted file mode 100644
index 1214cc7a36bcb2442f19bb2786e169b6b1f0f0b1..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import json
-#from Products.ERP5Type.Log import log
-# use JSON.parse as json.loads and JSON.stringify as json.dumps
-
-context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*")
-
-jio = context.JIO_class()
-
-try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"])
-except KeyError:
-  return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received"))
-
-try: mode = str(context.REQUEST.form["mode"])
-except KeyError: mode = "generic"
-jio.setMode(mode)
-
-try:
-  response_json = jio.putDocumentMetadata(doc, need_id=True)
-except (ValueError, TypeError, KeyError) as e:
-  return jio.sendError(jio.createConflictDict("Cannot put document", str(e)))
-# except KeyError as e:
-#   return jio.sendError(jio.createForbiddenDict("Cannot put document", str(e)))
-
-return jio.sendSuccess(response_json)
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.xml
deleted file mode 100644
index 4c72db8f381aa2f745be682f21f2e86406956ed1..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_put.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string></string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_put</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.py
deleted file mode 100644
index 27ce53c897244821728c28deef1a87f467653b82..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import json
-#from Products.ERP5Type.Log import log
-# use JSON.parse as json.loads and JSON.stringify as json.dumps
-
-context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*")
-
-jio = context.JIO_class()
-
-try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"])
-except KeyError:
-  return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received"))
-
-try: mode = str(context.REQUEST.form["mode"])
-except KeyError: mode = "generic"
-jio.setMode(mode)
-
-try:
-  response_json = jio.putDocumentAttachment(doc)
-except (ValueError, TypeError, KeyError) as e:
-  return jio.sendError(jio.createConflictDict("Cannot put attachment", str(e)))
-# except TypeError as e:
-#   return jio.sendError(jio.createBadRequestDict("Cannot put attachment", str(e)))
-
-return jio.sendSuccess(response_json)
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.xml
deleted file mode 100644
index 73e1ba11bbddf4110377a304551ba44f10bd7251..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_putAttachment.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string></string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_putAttachment</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.py
deleted file mode 100644
index 052256acf216d572a10f0c5567c0bdaf6c559c0d..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import json
-#from Products.ERP5Type.Log import log
-# use JSON.parse as json.loads and JSON.stringify as json.dumps
-
-context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*")
-
-jio = context.JIO_class()
-
-try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"])
-except KeyError:
-  return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received"))
-
-try: mode = str(context.REQUEST.form["mode"])
-except KeyError: mode = "generic"
-jio.setMode(mode)
-
-try:
-  response_json = jio.removeDocument(doc)
-except (ValueError, TypeError) as e:
-  return jio.sendError(jio.createBadRequestDict("Cannot remove document", str(e)))
-except LookupError as e:
-  return jio.sendError(jio.createNotFoundDict("Cannot remove document", str(e)))
-
-return jio.sendSuccess(response_json)
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.xml
deleted file mode 100644
index 790282119ba5d79c9b5dd9476ff9bc5b3a30c0be..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_remove.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string></string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_remove</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.py
deleted file mode 100644
index 74209579717e20ff048e87ad155d7a0d90d110fb..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import json
-#from Products.ERP5Type.Log import log
-# use JSON.parse as json.loads and JSON.stringify as json.dumps
-
-context.REQUEST.response.setHeader("Access-Control-Allow-Origin", "*")
-
-jio = context.JIO_class()
-
-try: doc = jio.jsonUtf8Loads(context.REQUEST.form["doc"])
-except KeyError:
-  return jio.sendError(jio.createBadRequestDict("Cannot get document", "No document information received"))
-
-try: mode = str(context.REQUEST.form["mode"])
-except KeyError: mode = "generic"
-jio.setMode(mode)
-
-try:
-  response_json = jio.removeAttachment(doc)
-except (ValueError, TypeError) as e:
-  return jio.sendError(jio.createConflictDict("Cannot remove attachment", str(e)))
-except LookupError as e:
-  return jio.sendError(jio.createNotFoundDict("Cannot remove attachment", str(e)))
-
-return jio.sendSuccess(response_json)
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.xml
deleted file mode 100644
index 90de7b41b61c0741b7eb273c75e9e0f22e8d167d..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_removeAttachment.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string></string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_removeAttachment</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_repair.py b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_repair.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_repair.xml b/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_repair.xml
deleted file mode 100644
index a86db0ce3f572918134d97460ba97bdae8ae1733..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/SkinTemplateItem/portal_skins/erp5_jio/JIO_repair.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<ZopeData>
-  <record id="1" aka="AAAAAAAAAAE=">
-    <pickle>
-      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
-    </pickle>
-    <pickle>
-      <dictionary>
-        <item>
-            <key> <string>Script_magic</string> </key>
-            <value> <int>3</int> </value>
-        </item>
-        <item>
-            <key> <string>_bind_names</string> </key>
-            <value>
-              <object>
-                <klass>
-                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
-                </klass>
-                <tuple/>
-                <state>
-                  <dictionary>
-                    <item>
-                        <key> <string>_asgns</string> </key>
-                        <value>
-                          <dictionary>
-                            <item>
-                                <key> <string>name_container</string> </key>
-                                <value> <string>container</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_context</string> </key>
-                                <value> <string>context</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_m_self</string> </key>
-                                <value> <string>script</string> </value>
-                            </item>
-                            <item>
-                                <key> <string>name_subpath</string> </key>
-                                <value> <string>traverse_subpath</string> </value>
-                            </item>
-                          </dictionary>
-                        </value>
-                    </item>
-                  </dictionary>
-                </state>
-              </object>
-            </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string></string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>JIO_repair</string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_jio/bt/license b/bt5/erp5_jio/bt/license
deleted file mode 100644
index 3a3e12bcad97e4b3bdd6a8bb499fd23a4bcb0819..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/bt/license
+++ /dev/null
@@ -1 +0,0 @@
-GPL
\ No newline at end of file
diff --git a/bt5/erp5_jio/bt/maintainer_list b/bt5/erp5_jio/bt/maintainer_list
deleted file mode 100644
index d3b16d74a385c864ef1f7a9b6615c86555d07513..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/bt/maintainer_list
+++ /dev/null
@@ -1 +0,0 @@
-tristan cavelier
\ No newline at end of file
diff --git a/bt5/erp5_jio/bt/skip_coding_style_test b/bt5/erp5_jio/bt/skip_coding_style_test
deleted file mode 100644
index 56a6051ca2b02b04ef92d5150c9ef600403cb1de..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/bt/skip_coding_style_test
+++ /dev/null
@@ -1 +0,0 @@
-1
\ No newline at end of file
diff --git a/bt5/erp5_jio/bt/template_format_version b/bt5/erp5_jio/bt/template_format_version
deleted file mode 100644
index 56a6051ca2b02b04ef92d5150c9ef600403cb1de..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/bt/template_format_version
+++ /dev/null
@@ -1 +0,0 @@
-1
\ No newline at end of file
diff --git a/bt5/erp5_jio/bt/template_skin_id_list b/bt5/erp5_jio/bt/template_skin_id_list
deleted file mode 100644
index 97d7a9e59b03977149f3ca1b5229c52a85e72863..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/bt/template_skin_id_list
+++ /dev/null
@@ -1 +0,0 @@
-erp5_jio
\ No newline at end of file
diff --git a/bt5/erp5_jio/bt/title b/bt5/erp5_jio/bt/title
deleted file mode 100644
index 97d7a9e59b03977149f3ca1b5229c52a85e72863..0000000000000000000000000000000000000000
--- a/bt5/erp5_jio/bt/title
+++ /dev/null
@@ -1 +0,0 @@
-erp5_jio
\ No newline at end of file