From e10d4efc6dbba24e42a9bedc54f7dd7b08666db5 Mon Sep 17 00:00:00 2001
From: Renaud Le Gac <renaud.legac@free.fr>
Date: Sun, 30 Jan 2011 17:40:10 +0000
Subject: [PATCH] Modify the configuration of the store to keep also default
 values. There are used later on to initialize form in grid.

---
 modules/plugin_dbui/cfgsvc.py | 44 ++++++++++++++++++++++++-----------
 1 file changed, 31 insertions(+), 13 deletions(-)

diff --git a/modules/plugin_dbui/cfgsvc.py b/modules/plugin_dbui/cfgsvc.py
index abe22720..b7b3c358 100644
--- a/modules/plugin_dbui/cfgsvc.py
+++ b/modules/plugin_dbui/cfgsvc.py
@@ -345,34 +345,52 @@ class CfgSvc(object):
         return di
     
     
-    def _get_json_store(self, table):
+    def _get_json_store(self, tablename):
         """ Generate configuration object for JSON stores 
         required by the gridPanel widget.
         
         """
 
-        di = {"table": table,
-              "idProperty": encode_field(table,'id'),
+        di = {"table": tablename,
+              "idProperty": encode_field(tablename,'id'),
               "dbFields": [],
               "fields": []}
 
-        for field in self._db[table].fields:
-            if field in di["dbFields"]:
+        for fieldname in self._db[tablename].fields:
+            
+            if fieldname in di["dbFields"]:
                 raise Exception, FIELD_IN_DBFIELD 
             
-            di["dbFields"].append([table, field])
-            di["fields"].append(encode_field(table, field))
+            # encode field name and default value are in the store
+            field = self._db[tablename][fieldname]
+            field_cfg = {'name': encode_field(tablename, fieldname)}
+            if field.default:
+                field_cfg['defaultValue'] = str(field.default)
+            
+            di["dbFields"].append([tablename, fieldname])
+            di["fields"].append(field_cfg)
             
-            if self._is_foreign_field(table, field):
+            if self._is_foreign_field(tablename, fieldname):
+                
                 if "where" not in di: di["where"] = []
-                k_table, k_field, k_key = self._get_foreign_data(table, field)
+                k_tablename, k_fieldname, k_key = self._get_foreign_data(tablename, fieldname)
                 
-                if k_field in di["dbFields"]:
+                if k_fieldname in di["dbFields"]:
                     raise Exception, FIELD_IN_DBFIELD
                 
-                di["dbFields"].append([k_table, k_field])
-                di["fields"].append(encode_field(k_table, k_field))
-                di["where"].append("[%s.%s] == [%s.%s]" % (table, field, k_table, k_key))
+                # encode field name and default value are in the store
+                k_field = self._db[k_tablename][k_fieldname]
+                k_field_cfg = {'name': encode_field(k_tablename, k_fieldname)}
+                
+                # retrieve the default value for the foreign key
+                if field.default:
+                    row = self._db(self._db[k_tablename].id == field.default).select().first()
+                    if row:
+                        k_field_cfg['defaultValue'] = row[k_fieldname]
+                
+                di["dbFields"].append([k_tablename, k_fieldname])
+                di["fields"].append(k_field_cfg)
+                di["where"].append("[%s.%s] == [%s.%s]" % (tablename, fieldname, k_tablename, k_key))
                 
         return di
         
-- 
GitLab