diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py index 2a1c3850387215b122d191618d633e87537fe3ce..3fc8d4a4e4096393729bbb2cbaa8e40c1c487a31 100644 --- a/product/ERP5/Document/BusinessTemplate.py +++ b/product/ERP5/Document/BusinessTemplate.py @@ -94,7 +94,10 @@ def _getCatalog(acquisition_context): """ catalog_method_id_list = acquisition_context.getTemplateCatalogMethodIdList() if len(catalog_method_id_list) == 0: - return None + try: + return acquisition_context.getPortalObject().portal_catalog.objectIds('SQLCatalog')[0] + except IndexError: + return None catalog_method_id = catalog_method_id_list[0] return catalog_method_id.split('/')[0] @@ -3274,6 +3277,98 @@ class CatalogKeywordKeyTemplateItem(BaseTemplateItem): xml_data = self.generateXml(path=path) bta.addObject(obj=xml_data, name=path, path=None) +# datetime +class CatalogDateTimeKeyTemplateItem(BaseTemplateItem): + + def build(self, context, **kw): + catalog = _getCatalogValue(self) + if catalog is None: + LOG('BusinessTemplate', 0, 'no SQL catalog was available') + return + sql_datetime_keys = list(catalog.sql_catalog_datetime_search_keys) + key_list = [] + for key in self._archive.keys(): + if key in sql_datetime_keys: + key_list.append(key) + else: + raise NotFound, 'DateTime key "%r" not found in catalog' %(key,) + if len(key_list) > 0: + self._objects[self.__class__.__name__+'/'+'datetime_key_list'] = key_list + + def _importFile(self, file_name, file): + list = [] + xml = parse(file) + key_list = xml.getElementsByTagName('key') + for key in key_list: + node = key.childNodes[0] + value = node.data + list.append(str(value)) + self._objects[file_name[:-4]] = list + + def install(self, context, trashbin, **kw): + catalog = _getCatalogValue(context) + if catalog is None: + LOG('BusinessTemplate', 0, 'no SQL catalog was available') + return + + sql_datetime_keys = list(catalog.sql_catalog_datetime_search_keys) + if context.getTemplateFormatVersion() == 1: + if len(self._objects.keys()) == 0: # needed because of pop() + return + keys = [] + for k in self._objects.values().pop(): # because of list of list + keys.append(k) + else: + keys = self._archive.keys() + update_dict = kw.get('object_to_update') + force = kw.get('force') + # XXX same as related key + if update_dict.has_key('datetime_key_list') or force: + if not force: + action = update_dict['datetime_key_list'] + if action == 'nothing': + return + for key in keys: + if key not in sql_datetime_keys: + sql_datetime_keys.append(key) + catalog.sql_catalog_datetime_search_keys = sql_datetime_keys + + def uninstall(self, context, **kw): + catalog = _getCatalogValue(context) + if catalog is None: + LOG('BusinessTemplate', 0, 'no SQL catalog was available - uninstall') + return + sql_datetime_keys = list(catalog.sql_catalog_datetime_search_keys) + object_path = kw.get('object_path', None) + if object_path is not None: + object_keys = [object_path] + else: + object_keys = self._archive.keys() + for key in object_keys: + if key in sql_datetime_keys: + sql_datetime_keys.remove(key) + catalog.sql_catalog_datetime_search_keys = sql_datetime_keys + BaseTemplateItem.uninstall(self, context, **kw) + + # Function to generate XML Code Manually + def generateXml(self, path=None): + obj = self._objects[path] + xml_data = '<key_list>' + obj.sort() + for key in obj: + xml_data += '\n <key>%s</key>' %(key) + xml_data += '\n</key_list>' + return xml_data + + def export(self, context, bta, **kw): + if len(self._objects.keys()) == 0: + return + path = os.path.join(bta.path, self.__class__.__name__) + bta.addFolder(name=path) + for path in self._objects.keys(): + xml_data = self.generateXml(path=path) + bta.addObject(obj=xml_data, name=path, path=None) + # full text class CatalogFullTextKeyTemplateItem(BaseTemplateItem): @@ -3975,6 +4070,7 @@ Business Template is a set of definitions, such as skins, portal types and categ '_catalog_related_key_item', '_catalog_result_table_item', '_catalog_keyword_key_item', + '_catalog_datetime_key_item', '_catalog_full_text_key_item', '_catalog_request_key_item', '_catalog_multivalue_key_item', @@ -4110,6 +4206,9 @@ Business Template is a set of definitions, such as skins, portal types and categ self._catalog_keyword_key_item = \ CatalogKeywordKeyTemplateItem( self.getTemplateCatalogKeywordKeyList()) + self._catalog_datetime_key_item = \ + CatalogDateTimeKeyTemplateItem( + self.getTemplateCatalogDatetimeKeyList()) self._catalog_full_text_key_item = \ CatalogFullTextKeyTemplateItem( self.getTemplateCatalogFullTextKeyList()) @@ -4666,7 +4765,6 @@ Business Template is a set of definitions, such as skins, portal types and categ bta = BusinessTemplateFolder(importing=1, file=file, path=root_path) else: bta = BusinessTemplateTarball(importing=1, file=file) - self._portal_type_item = \ PortalTypeTemplateItem(self.getTemplatePortalTypeIdList()) self._portal_type_workflow_chain_item = \ @@ -4732,6 +4830,9 @@ Business Template is a set of definitions, such as skins, portal types and categ self._catalog_keyword_key_item = \ CatalogKeywordKeyTemplateItem( self.getTemplateCatalogKeywordKeyList()) + self._catalog_datetime_key_item = \ + CatalogDateTimeKeyTemplateItem( + self.getTemplateCatalogDatetimeKeyList()) self._catalog_full_text_key_item = \ CatalogFullTextKeyTemplateItem( self.getTemplateCatalogFullTextKeyList()) @@ -4829,6 +4930,7 @@ Business Template is a set of definitions, such as skins, portal types and categ 'CatalogRelatedKey' : '_catalog_related_key_item', 'CatalogResultTable' : '_catalog_result_table_item', 'CatalogKeywordKey' : '_catalog_keyword_key_item', + 'CatalogDateTimeKey' : '_catalog_datetime_key_item', 'CatalogFullTextKey' : '_catalog_full_text_key_item', 'CatalogRequestKey' : '_catalog_request_key_item', 'CatalogMultivalueKey' : '_catalog_multivalue_key_item', @@ -4884,6 +4986,7 @@ Business Template is a set of definitions, such as skins, portal types and categ '_catalog_result_key_item', '_catalog_related_key_item', '_catalog_result_table_item', '_catalog_keyword_key_item', + '_catalog_datetime_key_item', '_catalog_full_text_key_item', '_catalog_request_key_item', '_catalog_multivalue_key_item', diff --git a/product/ERP5/PropertySheet/BusinessTemplate.py b/product/ERP5/PropertySheet/BusinessTemplate.py index 8af83ae2fdaaf439b2e7cac558293c77d4dc9405..fb69f1f73394555604639401fafd017453faba6b 100644 --- a/product/ERP5/PropertySheet/BusinessTemplate.py +++ b/product/ERP5/PropertySheet/BusinessTemplate.py @@ -130,6 +130,11 @@ class BusinessTemplate: 'type' : 'lines', 'mode' : 'w', 'default' : () }, + { 'id' : 'template_catalog_datetime_key', + 'description' : 'A list of ids of catalog DateTime keys used by this template', + 'type' : 'lines', + 'mode' : 'w', + 'default' : () }, { 'id' : 'template_catalog_full_text_key', 'description' : 'A list of ids of catalog full text keys used by this template', 'type' : 'lines',