From 99999ea6cf33c463203389b5d1b94a7165b992bd Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Wed, 18 Apr 2012 10:55:21 +0200
Subject: [PATCH] Allow to proxify to form with the same ID

---
 product/ERP5Form/Form.py               | 18 ++++++++++++++----
 product/ERP5Form/dtml/formProxify.dtml |  2 +-
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/product/ERP5Form/Form.py b/product/ERP5Form/Form.py
index aaad009984..3abb540b4b 100644
--- a/product/ERP5Form/Form.py
+++ b/product/ERP5Form/Form.py
@@ -818,7 +818,7 @@ class ERP5Form(Base, ZMIForm, ZopePageTemplate):
 
           # Find folders which can be surcharged by this skin folder
           if '_' in folder_id:
-            surcharged_folder_id = 'erp5_%s' % folder_id.split('_')[-1]
+            surcharged_folder_id = 'erp5_%s' % folder_id.split('_', 1)[-1]
             if (surcharged_folder_id != folder_id) and \
               (getattr(portal.portal_skins, surcharged_folder_id, None) \
                                                              is not None):
@@ -839,8 +839,8 @@ class ERP5Form(Base, ZMIForm, ZopePageTemplate):
             for i in obj.objectValues():
                 if (i.meta_type=='ERP5 Form' and
                     i.id.startswith('Base_view') and
-                    i.id.endswith('FieldLibrary') and
-                    '_view' in i.getId()):
+                    i.id.endswith('FieldLibrary') and 
+                    '_view' in i.getId()) or (i.id == self.id):
                     form_id = i.getId()
                     form_path = '%s.%s' % (obj.getId(), form_id)
                     field_list = []
@@ -1120,7 +1120,17 @@ class ERP5Form(Base, ZMIForm, ZopePageTemplate):
 
         for field_id in field_dict.keys():
             target = field_dict[field_id]
-            target_form_id, target_field_id = target.split('.')
+            target_list = target.split('.')
+            if len(target_list) == 2:
+              target_form_id, target_field_id = target_list
+            elif len(target_list) == 3:
+              target_field_id = target_list[2]
+              if target_list[1] == self.id:
+                target_form_id = '/'.join(target_list[:2])
+              else:
+                target_form_id = target_list[1]
+            else:
+              raise NotImplementedError, "Not supported path: %s" % target
 
             # keep current group and position.
             group, position = get_group_and_position(field_id)
diff --git a/product/ERP5Form/dtml/formProxify.dtml b/product/ERP5Form/dtml/formProxify.dtml
index fc00dc8fac..c9bd7bd860 100644
--- a/product/ERP5Form/dtml/formProxify.dtml
+++ b/product/ERP5Form/dtml/formProxify.dtml
@@ -49,7 +49,7 @@ Keep empty values <input type="checkbox" name="keep_empty_value"> <br/>
           field_id="field_object.getId()"
           field_type="item['field_type']"
           proxy_mark="item['proxy_flag'] and ' (Proxy)' or ''">
-<option value="<dtml-var "'%s.%s' % (form_id, field_id)">">
+<option value="<dtml-var "'%s.%s' % (form_path, field_id)">">
 <dtml-var "'%s%s' % (field_id, proxy_mark)">
 </option>
 </dtml-let>
-- 
2.30.9