[Erp5-report] r32308 seb - in /erp5/trunk/products/ERP5Form: ./ dtml/

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Feb 8 10:58:32 CET 2010


Author: seb
Date: Mon Feb  8 10:58:28 2010
New Revision: 32308

URL: http://svn.erp5.org?rev=32308&view=rev
Log:
Add new tab on forms in order to show proxy fields related
to existing fields in the current form. For now this only
works for skin folder within a same business template.

Added:
    erp5/trunk/products/ERP5Form/dtml/formShowRelatedProxyFields.dtml
Modified:
    erp5/trunk/products/ERP5Form/Form.py

Modified: erp5/trunk/products/ERP5Form/Form.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/Form.py?rev=32308&r1=32307&r2=32308&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/Form.py [utf8] (original)
+++ erp5/trunk/products/ERP5Form/Form.py [utf8] Mon Feb  8 10:58:28 2010
@@ -530,7 +530,9 @@
     # Tabs in ZMI
     manage_options = (ZMIForm.manage_options[:5] +
                       ({'label':'Proxify', 'action':'formProxify'},
-                       {'label':'UnProxify', 'action':'formUnProxify'}
+                       {'label':'UnProxify', 'action':'formUnProxify'},
+                       {'label':'RelatedProxy', 
+                         'action':'formShowRelatedProxyFields'}
                       )+
                       ZMIForm.manage_options[5:])
 
@@ -552,6 +554,12 @@
     # Proxify form
     security.declareProtected('View management screens', 'formUnProxify')
     formUnProxify = DTMLFile('dtml/formUnProxify', globals())
+
+    # Related Proxy Fields
+    security.declareProtected('View management screens',
+        'formShowRelatedProxyFields')
+    formShowRelatedProxyFields = DTMLFile('dtml/formShowRelatedProxyFields', 
+        globals())
 
     # Default Attributes
     pt = 'form_view'
@@ -725,6 +733,20 @@
 
     manage_FTPput = PUT
 
+    def getSimilarSkinFolderIdList(self):
+      """
+      Find other skins id installed in the same time
+      """
+      folder_id = self.aq_parent.id
+      # Find a business template which manages the context skin folder.
+      folder_id_list = []
+      for template in self.portal_templates.getInstalledBusinessTemplateList():
+        template_skin_id_list = template.getTemplateSkinIdList()
+        if folder_id in template_skin_id_list:
+          folder_id_list.extend(template_skin_id_list)
+          break
+      return folder_id_list
+
     #Methods for Proxify tab.
     security.declareProtected('View management screens', 'getFormFieldList')
     def getFormFieldList(self):
@@ -757,12 +779,8 @@
 
         skins_tool = self.portal_skins
         folder_id = self.aq_parent.id
-        # Find a business template which manages the context skin folder.
-        for template in self.portal_templates.getInstalledBusinessTemplateList():
-          template_skin_id_list = template.getTemplateSkinIdList()
-          if folder_id in template_skin_id_list:
-            for skin_folder_id in template_skin_id_list:
-              iterate(getattr(skins_tool, skin_folder_id))
+        for skin_folder_id in self.getSimilarSkinFolderIdList():
+          iterate(getattr(skins_tool, skin_folder_id))
         iterate(skins_tool.erp5_core)
         return form_list
 
@@ -914,6 +932,47 @@
       return sorted([f for f in self.objectValues() \
           if f.meta_type == 'ProxyField'], key = lambda x: x.id)
 
+    security.declareProtected('View management screens',
+        'getRelatedProxyFieldDictList')
+    def getRelatedProxyFieldDictList(self, **kw):
+      """
+      Retrieve all proxy using proxy in this form
+      """
+      form_id = self.id
+      proxy_dict = {}
+      for document in self.objectValues():
+        if document.meta_type == 'ProxyField':
+          short_path = "%s.%s" % (form_id, document.id)
+          proxy_dict[short_path] = {'proxy': document,
+                                    'short_path': short_path,
+                                    'related_proxy_list': []}
+      def iterate(document):
+        for i in document.objectValues():
+          if i.meta_type == 'ERP5 Form' and '_view' in i.getId():
+            for field in i.objectValues():
+              if field.meta_type == 'ProxyField':
+                key = "%s.%s" % (field.get_value('form_id'),
+                                 field.get_value('field_id'))
+                if proxy_dict.has_key(key):
+                  proxy_dict[key]['related_proxy_list'].append(
+                      {'short_path': "%s.%s" % \
+                      (field.aq_parent.id, field.id),
+                       'proxy': field})
+          if i.meta_type == 'Folder':
+            iterate(i)
+
+      skins_tool = self.portal_skins
+      proxy_dict_list = []
+      if len(proxy_dict):
+        for skin_folder_id in self.getSimilarSkinFolderIdList():
+          iterate(getattr(skins_tool, skin_folder_id))
+        proxy_dict_list = proxy_dict.values()
+        proxy_dict_list.sort(key=lambda x: x['short_path'])
+        for item in proxy_dict_list:
+          item['related_proxy_list'].sort(key=lambda x: x['short_path'])
+
+      return proxy_dict_list
+
     security.declareProtected('Change Formulator Forms', 'proxifyField')
     def proxifyField(self, field_dict=None, force_delegate=False,
                      keep_empty_value=False, REQUEST=None):

Added: erp5/trunk/products/ERP5Form/dtml/formShowRelatedProxyFields.dtml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/dtml/formShowRelatedProxyFields.dtml?rev=32308&view=auto
==============================================================================
--- erp5/trunk/products/ERP5Form/dtml/formShowRelatedProxyFields.dtml (added)
+++ erp5/trunk/products/ERP5Form/dtml/formShowRelatedProxyFields.dtml [utf8] Mon Feb  8 10:58:28 2010
@@ -1,0 +1,37 @@
+<dtml-var manage_page_header>
+<dtml-var manage_tabs>
+
+<dtml-let form_field_list=getRelatedProxyFieldDictList>
+
+<p class="form-help">
+Show related Proxy Fields to available Proxy in this form
+</p>
+
+<log form_field_list>
+<table border="2">
+<tr>
+<th>Proxy</th>
+<th>Related Proxy List</th>
+</tr>
+<dtml-in form_field_list>
+<dtml-let short_path="_['sequence-item']['short_path']"
+          proxy_url="_['sequence-item']['proxy'].absolute_url"
+          related_proxy_list="_['sequence-item']['related_proxy_list']">
+<tr>
+  <td><a href="<dtml-var proxy_url>/manage_workspace"><dtml-var short_path></a></td>
+  <td>
+    <dtml-in expr="related_proxy_list">
+      <dtml-let short_path="_['sequence-item']['short_path']"
+                proxy_url="_['sequence-item']['proxy'].absolute_url">
+                <a href="<dtml-var proxy_url>/manage_workspace"><dtml-var short_path></a><br/>
+      </dtml-let>
+    </dtml-in>
+  </td>
+</tr>
+</dtml-let>
+</dtml-in>
+</table>
+
+</dtml-let>
+
+<dtml-var manage_page_footer>




More information about the Erp5-report mailing list