diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py index 0578ff40067c69d8c7dbf14ca1d59f21357affe3..84fb16aa55c8e61188e57ee8b6a2508ad4c6e851 100644 --- a/product/ERP5/Document/BusinessTemplate.py +++ b/product/ERP5/Document/BusinessTemplate.py @@ -3337,6 +3337,16 @@ class DocumentTemplateItem(BaseTemplateItem): local_file_importer_name = staticmethod(importLocalDocument) local_file_remover_name = staticmethod(removeLocalDocument) + def _getKey(self, path): + """Magical method to generate dynamic unique path""" + return '/'.join((self.getTemplateTypeName(), path)) + + def _getPath(self, key): + """Magical method to extract real path""" + if '/' in key: + return key.split('/')[1] + return key + def build(self, context, **kw): BaseTemplateItem.build(self, context, **kw) for key in self._archive.iterkeys(): @@ -3359,17 +3369,20 @@ class DocumentTemplateItem(BaseTemplateItem): new_obj_code = self._objects[path] old_obj_code = installed_item._objects[path] if new_obj_code != old_obj_code: + # Note: Magical way to have unique paths modified_object_list.update( - {path : ['Modified', self.__class__.__name__[:-12]]}) + {self._getKey(path) : ['Modified', self.__class__.__name__[:-12]]}) else: # new object + # Note: Magical way to have unique paths modified_object_list.update( - {path : ['New', self.__class__.__name__[:-12]]}) + {self._getKey(path) : ['New', self.__class__.__name__[:-12]]}) # get removed object old_keys = installed_item._objects.keys() for path in old_keys: if path not in new_keys: + # Note: Magical way to have unique paths modified_object_list.update( - {path : ['Removed', self.__class__.__name__[:-12]]}) + {self._getKey(path) : ['Removed', self.__class__.__name__[:-12]]}) return modified_object_list def _resetDynamicModules(self): @@ -3423,6 +3436,16 @@ class DocumentTemplateItem(BaseTemplateItem): if self.local_file_importer_name is not None: self.local_file_importer_name(id) + def remove(self, context, **kw): + """Conversion of magically uniqued paths to real ones""" + remove_object_dict = kw.get('remove_object_dict', {}) + new_remove_dict = dict() + for k,v in remove_object_dict.iteritems(): + if k.startswith(self.getTemplateTypeName()+'/'): + new_remove_dict[self._getPath(k)] = v + kw['remove_object_dict'] = new_remove_dict + BaseTemplateItem.remove(self, context, **kw) + def uninstall(self, context, **kw): object_path = kw.get('object_path', None) if object_path is not None: @@ -3667,6 +3690,27 @@ class PropertySheetTemplateItem(DocumentTemplateItem, # migrated update_parameter_dict[key] = 'migrate' + def remove(self, context, **kw): + """Conversion of magically uniqued paths to real ones""" + remove_object_dict = kw.get('remove_object_dict', {}) + new_remove_dict = dict() + for k,v in remove_object_dict.iteritems(): + if k.startswith(self.getTemplateTypeName()+'/'): + new_remove_dict[self._getPath(k)] = v + kw['remove_object_dict'] = new_remove_dict + ObjectTemplateItem.remove(self, context, **kw) + + def preinstall(self, *args, **kwargs): + preinstall_dict = ObjectTemplateItem.preinstall(self, *args, **kwargs) + new_preinstall_dict = dict() + for k, v in preinstall_dict.iteritems(): + if not k.startswith('portal_property_sheets/'): + # Magical way to have unique path in case of not yet migrated property + # sheets available on preinstall list + k = self._getKey(k) + new_preinstall_dict[k] = v + return new_preinstall_dict + def install(self, context, **kw): if not self._perform_migration: return DocumentTemplateItem.install(self, context, **kw)