App.php
[Pman.Builder] / Pman.Builder.Wizard.js
index 4792ff0..d7b6477 100644 (file)
@@ -31,7 +31,7 @@ Pman.Builder.Wizard = {
         'bigint' : 'int',
         'tinyint' : 'int',
         'smallint' : 'int',
-        'timestamp' : 'number',
+        'timestamp' : 'date', // for postgres... it's a date!??
         
         'double' : 'float',
         'decimal' : 'float',
@@ -99,10 +99,10 @@ Pman.Builder.Wizard = {
  
         
         
-        var colmodel = []
+        var colmodel = [];
         Roo.each(cfg.cols, function(cc) {
             colmodel.push( _t['Roo.grid.ColumnModel'](cc) );
-        })
+        });
         
         var dataSource = _t['Roo.data.Store'](cfg);
         dataSource['*prop'] = 'dataSource';
@@ -124,7 +124,7 @@ Pman.Builder.Wizard = {
                 "|rowdblclick": "function (_self, rowIndex, e)\n" + 
                     "{\n" + 
                     "    if (!_this.dialog) return;\n" + 
-                    "    _this.dialog.show( this.getDataSource().getAt(rowIndex), function() {\n" + 
+                    "    _this.dialog.show( this.getDataSource().getAt(rowIndex).data, function() {\n" + 
                     "        _this.grid.footer.onClick('first');\n" + 
                     "    }); \n" + 
                     "}\n"
@@ -201,7 +201,7 @@ Pman.Builder.Wizard = {
                             "|xns": "Roo.Toolbar"
                         }
                     ]
-                }, // end toolbar
+                } // end toolbar
             ].concat( colmodel)
         };
     },
@@ -291,13 +291,15 @@ Pman.Builder.Wizard = {
         if (!desc.length) {
             desc = rcfg.column;
         }
-        
+        if (rcfg.title && rcfg.title.length) {
+            desc = rcfg.title;
+        }
         
        
         return {
             "xtype": "ColumnModel",
             '.builderCfg' : Roo.encode(rcfg),
-            "header": rcfg.desc.length ? rcfg.desc : desc,
+            "header":   desc,
             "width":  ty == 'string' ? 200 : 75,
             "dataIndex": rcfg.column,
             "|renderer": ty != 'date' ? 
@@ -315,7 +317,7 @@ Pman.Builder.Wizard = {
         // simple version to start with..
         var _t = this;
         
-        var frmCfg =    _t['Roo.form.Form'](cfg, old);
+        var frmCfg =    _t['Roo.form.Form'](rcfg, old);
         
         // loop through the cols..
         // we need a 'display column' for each of these.
@@ -324,20 +326,20 @@ Pman.Builder.Wizard = {
      
         
          
-        var formHeight = (frmCfg.items.length * 40) + 40; // work out from number of form ites..
+        var formHeight = (frmCfg.items.length * 25) + 100; // work out from number of form ites..
        
         return {
             xtype : 'LayoutDialog',
-            "|xns": "Roo.grid",
+            "|xns": "Roo",
             '.builderCfg' : Roo.encode(rcfg),
             
             closable : false,
             collapsible: false,
             modal : true,
             height : formHeight,
-            resizable: false,
+            resizable: true,
             title: "Edit / Create " + rcfg.table,
-            width: 400,
+            width: 500,
             
             
             items  : [
@@ -384,13 +386,19 @@ Pman.Builder.Wizard = {
           
         var fcombo = function(cn) {
             var cret = '';
-            Roo.each(rcfg.cols_ux, function(n) {
+            
+            Roo.each(rcfg.cols_ex, function(n) {
+                
+                Roo.log(
+                        ['match' , n , 'to', cn, n.substring(0,cn.length) ].join(' ')
+                    );
                 if (n.substring(0,cn.length) == cn) {
                     cret = n;
-                    return true;
+                    return false;
                 }
-                return false;
+                return true;
             });
+            Roo.log("RETURN: " + cret);
             return cret;
         }
    
@@ -412,8 +420,8 @@ Pman.Builder.Wizard = {
             }
             if (ty  == 'int' ) {
                 cc.display = fcombo(cc.column);
-                if (cc.length) { 
-                    formElements.push( _t['Roo.form.ComboBox'](cc, {}));
+                if (cc.deps && cc.display.length) { 
+                   formElements.push( _t['Roo.form.ComboBox'](cc, {}));
                     return;
                 }
                 formElements.push( _t['Roo.form.NumberField'](cc, {}));
@@ -461,15 +469,241 @@ Pman.Builder.Wizard = {
             items : formElements
         };
         
-    }
-    'Roo.form.TextField' : function(cc, old)
+    },
+    'Roo.form.TextField' : function(rcfg, old)
     {
+        var desc = rcfg.columnshort;
+        if (desc.substring(0, rcfg.table.length+1) == rcfg.table+'_') {
+            desc = desc.substring(rcfg.table.length+1);
+        }
+        desc = desc.replace(/_id$/, '');
         
+        if (!desc.length) {
+            desc = rcfg.column;
+        }
+        if (rcfg.title && rcfg.title.length) {
+            desc = rcfg.title;
+        }
+        
+        return { 
+            xtype : 'TextField',
+            '|xns' : 'Roo.form',
+            fieldLabel : desc,
+            name : rcfg.column,
+            width : 300  
+        };
     
     
-    }
+    },
     
+    'Roo.form.NumberField' : function(rcfg, old)
+    {
+        var desc = rcfg.columnshort;
+        if (desc.substring(0, rcfg.table.length+1) == rcfg.table+'_') {
+            desc = desc.substring(rcfg.table.length+1);
+        }
+        desc = desc.replace(/_id$/, '');
+        
+        if (!desc.length) {
+            desc = rcfg.column;
+        }
+        if (rcfg.title && rcfg.title.length) {
+            desc = rcfg.title;
+        }
+        return { 
+            xtype : 'NumberField',
+            '|xns' : 'Roo.form',
+            fieldLabel : desc,
+            name : rcfg.column,
+            width : 100,
+            align : 'right'
+        };
+     
+    },
+    
+     'Roo.form.DateField' : function(rcfg, old)
+    {
+        var desc = rcfg.columnshort;
+        if (desc.substring(0, rcfg.table.length+1) == rcfg.table+'_') {
+            desc = desc.substring(rcfg.table.length+1);
+        }
+        desc = desc.replace(/_id$/, '');
+        
+        if (!desc.length) {
+            desc = rcfg.column;
+        }
+        if (rcfg.title && rcfg.title.length) {
+            desc = rcfg.title;
+        }
+        return { 
+            xtype : 'NumberField',
+            '|xns' : 'Roo.form',
+            fieldLabel : desc,
+            name : rcfg.column,
+            width : 100,
+            format : 'Y-m-d'
+        };
+     
+    },
     
+    'Roo.form.ComboBox' : function(in_rcfg, old)
+    {
+        /*
+         * We need:
+         *   localtable:
+         *      the column
+         *      table name.
+         *   remote table:
+         *      table name
+         *      column 'it maps to'
+         *      title column
+         *      
+         *      
+         *
+         */
+        var rcfg = in_rcfg;
+        var table , desc, display, idcol, hiddenName, name;
+        
+        // rcfg can be one of two things: (from a form)
+        // or direct..
+        if (rcfg.cols) {
+            display = rcfg.cols_ex[0];
+            
+            
+            table = rcfg.table;
+            
+            var ix = rcfg.cols[0].columnshort == display ? 0 : 1;
+            
+            idcol =  rcfg.cols[ ix ? 0 : 1 ].columnshort;
+            
+            desc = rcfg.cols[ix].title;
+            if (!desc.length) {
+                desc = rcfg.cols[ix].column;
+                if (desc.substring(0, table.length+1) == table+'_') {
+                    desc = desc.substring(table.length+1);
+                }
+                desc = desc.replace(/_id$/, '');
+                if (!desc.length) {
+                    desc = rcfg.cols[0].column;
+                }
+            }
+            combofields = [
+                { name : idcol, type : 'int' },
+                display
+            ];
+            hiddenName = idcol;
+            name = display;
+                
+        } else { 
+            
+            
+            
+            desc = rcfg.columnshort;
+            if (desc.substring(0, rcfg.table.length+1) == rcfg.table+'_') {
+                desc = desc.substring(rcfg.table.length+1);
+            }
+            desc = desc.replace(/_id$/, '');
+            
+            if (!desc.length) {
+                desc = rcfg.column;
+            }
+            if (rcfg.title && rcfg.title.length) {
+                desc = rcfg.title;
+            }
+            // set the display column (from the remote table)
+            display = rcfg.display;
+            Roo.each(rcfg.deps, function(dn) {
+                if (dn.column == rcfg.display) {
+                    display = dn.columnshort;
+                }
+                
+            });
+            
+            table = rcfg.deps[0].table;
+            idcol =  rcfg.maps_to;
+            hiddenName  = rcfg.column;
+            name = rcfg.column + '_' + display;
+            
+        }
+        // a reader...( basic as we do meta queries to get the real one..)
+        var combofields = [
+                { name : idcol , type : 'int' },
+                display
+            ];
+         
+        
+        return {
+            '|xns' : 'Roo.form',
+            xtype: 'ComboBox',
+            
+            allowBlank : false,
+            editable : false,
+            emptyText : 'Select ' + table,
+            forceSelection : true,
+            listWidth : 400,
+            loadingText: 'Searching...',
+            minChars : 2,
+            pageSize : 20,
+            qtip: 'Select ' + table,
+            selectOnFocus: true,
+            triggerAction : 'all',
+            typeAhead: true,
+            
+            width: 300,
+            
+            tpl : '<div class="x-grid-cell-text x-btn button"><b>{'+ display + '}</b> </div>',  
+            queryParam : 'query['+display+']', 
+            fieldLabel : desc,   
+            
+            // from remote..
+            valueField : idcol,
+            displayField : display, 
+            
+            // from our table..
+            hiddenName : hiddenName, 
+            name : name, 
+            
+            items : [
+                {
+                    '*prop' : 'store',
+                    '|xns' : 'Roo.data',
+                    '|sortInfo' : '{ direction : \'ASC\', field: \'' + display  +'\' }',
+                    xtype : 'Store',
+                    
+                    remoteSort : true,
+                    
+                    listeners : {
+                        '|beforeload' : 'function (_self, o)' +
+                        "{\n" +
+                        "    o.params = o.params || {};\n" +
+                        "    // set more here\n" +
+                        "}\n"
+                    },
+                    items : [
+                        {
+                            '*prop' : 'proxy',
+                            'xtype' : 'HttpProxy',
+                            'method' : 'GET',
+                            '|xns' : 'Roo.data',
+                            '|url' : "baseURL + '/Roo/" + table + ".php'"
+                        },
+                        
+                        {
+                            '*prop' : 'reader',
+                            'xtype' : 'JsonReader',
+                            '|xns' : 'Roo.data',
+                            'id' : idcol,
+                            'root' : 'data',
+                            'totalProperty' : 'total',
+                            '|fields' : JSON.stringify(combofields)
+                            
+                        }
+                    ]
+                }
+            ]
+        };
+     
+    }
     
     
 }
\ No newline at end of file