Pman.Tab.XtupleMetric.bjs
authorEdward <edward@roojs.com>
Tue, 5 Aug 2014 05:11:12 +0000 (13:11 +0800)
committerEdward <edward@roojs.com>
Tue, 5 Aug 2014 05:11:12 +0000 (13:11 +0800)
Pman.Tab.XtupleMetric.js

Pman.Tab.XtupleMetric.bjs
Pman.Tab.XtupleMetric.js

index 43deb24..c327775 100644 (file)
@@ -4,7 +4,283 @@
     "parent": "Pman.Admin",
     "title": "",
     "path": "/home/edward/gitlive/web.xtuple/Pman/Xtuple/Pman.Tab.XtupleMetric.bjs",
-    "items": [],
+    "items": [
+        {
+            "listeners": {
+                "|activate": "function() {\n    _this.panel = this;\n    \n    \n    var pid = _this.form.findField('pohead_id').getValue() * 1;\n    if (pid < 1) {\n        Roo.MessageBox.alert(\"Save First\", \"Please save the purchase order first, before adding items\");\n        _this.dialog.layout.getRegion('center').showPanel(0);\n        return;\n    }\n    \n    if (_this.grid) {\n        _this.grid.footer.onClick('first');\n    }\n}",
+                "deactivate": "function (_self)\n{\n     if(_this.grid){\n        var ar = [];\n\n        _this.grid.ds.each(function(r) {\n            ar.push({\n                poitem_id : r.data.poitem_id,\n                poitem_itemsite_id : r.data.poitem_itemsite_id,\n                poitem_unitprice : r.data.poitem_unitprice,\n                poitem_qty_ordered : r.data.poitem_qty_ordered\n            });\n                \n        });\n        \n        _this.form.findField('items').setValue(JSON.stringify(ar));\n    }\n    _this.dontClose = true;\n    _this.form.doAction(\"submit\");\n\n}"
+            },
+            "background": true,
+            "fitContainer": true,
+            "fitToframe": true,
+            "region": "center",
+            "tableName": "poitem",
+            "title": "Order Items",
+            "xtype": "GridPanel",
+            "|xns": "Roo",
+            "items": [
+                {
+                    "listeners": {
+                        "|render": "function() \n{\n    _this.grid = this; \n    //_this.dialog = Pman.Dialog.FILL_IN\n    if (_this.panel.active) {\n       this.footer.onClick('first');\n    }\n}",
+                        "beforeedit": "function (e)\n{\n    var r = e.record.data.poitem_qty_received * 1;\n    \n    if(r > 0){\n        Roo.MessageBox.alert(\"Error\", \"This item has been receipted\");\n        return false;\n    }\n    \n    var status = _this.form.findField('pohead_status').getValue();\n    \n    if(status == 'C'){\n        Roo.MessageBox.alert(\"Error\", \"This PO has been closed\");\n        return false;\n    }\n    \n    \n}"
+                    },
+                    "*prop": "grid",
+                    "autoExpandColumn": "item_descrip1",
+                    "clicksToEdit": 1,
+                    "loadMask": true,
+                    "xtype": "EditorGrid",
+                    "|xns": "Roo.grid",
+                    "items": [
+                        {
+                            "listeners": {
+                                "beforeload": "function (_self, o){\n    o.params = o.params || {};\n    var hid = _this.form.findField('pohead_id').getValue();\n    \n    if(!hid.length){\n        return false;\n    }\n    \n    o.params.poitem_pohead_id = hid;\n    o.params._with_item = 1;\n    o.params._roo_office = _this.data.office ? _this.data.office : baseURL.split('/').pop().substr(0,2);\n\n}\n",
+                                "load": "function (_self, records, options)\n{\n    _this.grid.footer.updateSummary();\n}"
+                            },
+                            "*prop": "dataSource",
+                            "remoteSort": true,
+                            "xtype": "Store",
+                            "|sortInfo": "{ field : 'poitem_linenumber', direction: 'ASC' }",
+                            "|xns": "Roo.data",
+                            "items": [
+                                {
+                                    "*prop": "proxy",
+                                    "method": "GET",
+                                    "timeout": 90000,
+                                    "xtype": "HttpProxy",
+                                    "|url": "baseURL + '/Xtuple/Roo/Poitem.php'",
+                                    "|xns": "Roo.data"
+                                },
+                                {
+                                    "*prop": "reader",
+                                    "id": "poitem_id",
+                                    "root": "data",
+                                    "totalProperty": "total",
+                                    "xtype": "JsonReader",
+                                    "|fields": "[\n    {\n        'name': 'poitem_id',\n        'type': 'int'\n    }\n]",
+                                    "|xns": "Roo.data"
+                                }
+                            ]
+                        },
+                        {
+                            "|xns": "Roo",
+                            "xtype": "Toolbar",
+                            "*prop": "toolbar",
+                            "items": [
+                                {
+                                    "listeners": {
+                                        "|click": "function()\n{\n    var status = _this.form.findField('pohead_status').getValue();\n    \n    if(status == 'C'){\n        Roo.MessageBox.alert(\"Error\", \"This PO has been closed\");\n        return;\n    }\n    \n    var ct  =    _this.grid.ds.getCount();\n    \n    var last = ct ? _this.grid.ds.getAt(ct-1).data.poitem_linenumber * 1 + 1 : 1;\n    \n    var dt = _this.form.findField('pohead_orderdate').getValue();\n    \n    var nr = _this.grid.ds.reader.newRow({\n        poitem_id : 0,\n        poitem_linenumber : last,\n        item_number : '',\n        item_descrip1 : '',\n        poitem_duedate : dt,\n        poitem_qty_ordered : 1,\n        poitem_unitprice : 0\n    });\n    \n    _this.grid.stopEditing();\n    _this.grid.ds.insert(_this.grid.ds.getCount(), nr); \n    _this.grid.startEditing(_this.grid.ds.getCount()-1, 1);\n}\n"
+                                    },
+                                    "cls": "x-btn-text-icon",
+                                    "text": "Add",
+                                    "xtype": "Button",
+                                    "|icon": "Roo.rootURL + 'images/default/dd/drop-add.gif'",
+                                    "|xns": "Roo.Toolbar"
+                                },
+                                {
+                                    "listeners": {
+                                        "|click": "function ()\n{\n    var status = _this.form.findField('pohead_status').getValue();\n    \n    if(status == 'C'){\n        Roo.MessageBox.alert(\"Error\", \"This PO has been closed\");\n        return;\n    }\n    \n    var cs = _this.grid.getSelectionModel().getSelectedCell();\n    if (!cs) {\n        Roo.MessageBox.alert(\"Error\", \"Select a cell\");\n        return;\n    }\n    _this.grid.stopEditing();\n    var r = _this.grid.ds.getAt(cs[0]);\n    \n    if(r.data.poitem_qty_received * 1 > 0){\n        Roo.MessageBox.alert(\"Error\", \"This item has been receipted\");\n        return;\n    }\n    \n    \n    _this.grid.ds.remove(r);\n   \n}"
+                                    },
+                                    "cls": "x-btn-text-icon",
+                                    "text": "Remove",
+                                    "xtype": "Button",
+                                    "|icon": "rootURL + '/Pman/templates/images/trash.gif'",
+                                    "|xns": "Roo.Toolbar"
+                                }
+                            ]
+                        },
+                        {
+                            "*prop": "footer",
+                            "displayInfo": true,
+                            "emptyMsg": "No Item found",
+                            "pageSize": 100,
+                            "xtype": "PagingToolbar",
+                            "|updateSummary": "function() {\n\r\n    var f = this;\r\n    new Pman.Request({\r\n        url : baseURL + '/Xtuple/Roo/Poitem',\r\n        method : 'GET',\r\n        params : {\n            _roo_office : _this.data.office ? _this.data.office : baseURL.split('/').pop().substr(0,2),\r\n            _totals : 1,\r\n            poitem_pohead_id : _this.form.findField('pohead_id').getValue()\r\n        },\r\n        success : function(d) {\n            Roo.log(d);\r\n            f.displayEl.update(String.format(\r\n                \"{0} items | Total : {1} {2}\",\r\n                d.data[0].count_item,\r\n                _this.form.findField('pohead_curr_id').el.dom.value,\r\n                d.data[0].totals\r\n            ));\r\n                \r\n        }\r\n    });\r\n\n}\n",
+                            "|xns": "Roo"
+                        },
+                        {
+                            "*prop": "colModel[]",
+                            "align": "right",
+                            "dataIndex": "poitem_linenumber",
+                            "header": "Line#",
+                            "width": 50,
+                            "xtype": "ColumnModel",
+                            "|renderer": "function(v) { return String.format('{0}', v); }",
+                            "|xns": "Roo.grid"
+                        },
+                        {
+                            "*prop": "colModel[]",
+                            "dataIndex": "item_number",
+                            "header": "Item code",
+                            "width": 100,
+                            "xtype": "ColumnModel",
+                            "|renderer": "function(v) { return String.format('{0}', v); }",
+                            "|xns": "Roo.grid",
+                            "items": [
+                                {
+                                    "|xns": "Roo.grid",
+                                    "xtype": "GridEditor",
+                                    "*prop": "editor",
+                                    "items": [
+                                        {
+                                            "listeners": {
+                                                "beforeselect": "function (combo, record, index)\n{\n  var ar = _this.grid.activeEditor.record;\n  \n  (function() { \n      ar.set('item_descrip1', record.data.itemsite_item_id_item_descrip1);\n      ar.set('poitem_itemsite_id', record.data.itemsite_id);\n  }).defer(100);\n  \n}"
+                                            },
+                                            "*prop": "field",
+                                            "allowBlank": false,
+                                            "displayField": "itemsite_item_id_item_number",
+                                            "editable": true,
+                                            "emptyText": "Select item",
+                                            "forceSelection": true,
+                                            "hiddenName": "itemsite_item_id_item_number",
+                                            "listWidth": 400,
+                                            "loadingText": "Searching...",
+                                            "minChars": 2,
+                                            "name": "item_number",
+                                            "pageSize": 20,
+                                            "qtip": "Select item",
+                                            "queryParam": "query[number]",
+                                            "selectOnFocus": true,
+                                            "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{itemsite_item_id_item_number}</b> - {itemsite_item_id_item_descrip1} </div>",
+                                            "triggerAction": "all",
+                                            "typeAhead": false,
+                                            "valueField": "item_number",
+                                            "xtype": "ComboBox",
+                                            "|xns": "Roo.form",
+                                            "items": [
+                                                {
+                                                    "listeners": {
+                                                        "|beforeload": "function (_self, o){\n    o.params = o.params || {}; \n    o.params.itemsite_posupply = 1;\n}\n"
+                                                    },
+                                                    "*prop": "store",
+                                                    "remoteSort": true,
+                                                    "xtype": "Store",
+                                                    "|sortInfo": "{ direction : 'ASC', field: 'item_number' }",
+                                                    "|xns": "Roo.data",
+                                                    "items": [
+                                                        {
+                                                            "*prop": "proxy",
+                                                            "method": "GET",
+                                                            "xtype": "HttpProxy",
+                                                            "|url": "baseURL + '/Roo/itemsite.php'",
+                                                            "|xns": "Roo.data"
+                                                        },
+                                                        {
+                                                            "*prop": "reader",
+                                                            "id": "itemsite_id",
+                                                            "root": "data",
+                                                            "totalProperty": "total",
+                                                            "xtype": "JsonReader",
+                                                            "|fields": "[{\"name\":\"item_id\",\"type\":\"int\"},\"item_number\"]",
+                                                            "|xns": "Roo.data"
+                                                        }
+                                                    ]
+                                                }
+                                            ]
+                                        }
+                                    ]
+                                }
+                            ]
+                        },
+                        {
+                            "*prop": "colModel[]",
+                            "dataIndex": "item_descrip1",
+                            "header": "Item description",
+                            "width": 150,
+                            "xtype": "ColumnModel",
+                            "|renderer": "function(v) { return String.format('{0}', v); }",
+                            "|xns": "Roo.grid"
+                        },
+                        {
+                            "*prop": "colModel[]",
+                            "dataIndex": "poitem_duedate",
+                            "header": "Due date",
+                            "width": 100,
+                            "xtype": "ColumnModel",
+                            "|renderer": "function(v) { return String.format('{0}', v ? v.format('Y-m-d') : ''); }",
+                            "|xns": "Roo.grid"
+                        },
+                        {
+                            "*prop": "colModel[]",
+                            "align": "right",
+                            "dataIndex": "poitem_qty_ordered",
+                            "header": "Ordered",
+                            "width": 75,
+                            "xtype": "ColumnModel",
+                            "|renderer": "function(v) { return String.format('{0}', v); }",
+                            "|xns": "Roo.grid",
+                            "items": [
+                                {
+                                    "|xns": "Roo.grid",
+                                    "xtype": "GridEditor",
+                                    "*prop": "editor",
+                                    "items": [
+                                        {
+                                            "*prop": "field",
+                                            "allowDecimals": false,
+                                            "decimalPrecision": 0,
+                                            "minValue": 1,
+                                            "style": "text-align:right",
+                                            "xtype": "NumberField",
+                                            "|xns": "Roo.form"
+                                        }
+                                    ]
+                                }
+                            ]
+                        },
+                        {
+                            "*prop": "colModel[]",
+                            "align": "right",
+                            "dataIndex": "poitem_qty_received",
+                            "header": "Received",
+                            "width": 75,
+                            "xtype": "ColumnModel",
+                            "|renderer": "function(v,x,r) { \n    return String.format(\n        r.data.poitem_qty_ordered != (v-r.data.poitem_qty_returned) ? '<span style=\"color:red\">{0}</span>':  '{0}',\n         v - r.data.poitem_qty_returned);\n}",
+                            "|xns": "Roo.grid"
+                        },
+                        {
+                            "*prop": "colModel[]",
+                            "align": "right",
+                            "dataIndex": "poitem_qty_vouchered",
+                            "header": "Vouchered",
+                            "width": 65,
+                            "xtype": "ColumnModel",
+                            "|renderer": "function(v,x,r) { \n    return String.format(\n        r.data.poitem_qty_ordered != v ? '<span style=\"color:red\">{0}</span>':  '{0}',\n         v);\n}",
+                            "|xns": "Roo.grid"
+                        },
+                        {
+                            "*prop": "colModel[]",
+                            "align": "right",
+                            "dataIndex": "poitem_unitprice",
+                            "header": "Unit price",
+                            "width": 100,
+                            "xtype": "ColumnModel",
+                            "|renderer": "function(v) { return String.format('{0}', (v || v == 0) ? parseFloat(v).toFixed(3) : ''); }",
+                            "|xns": "Roo.grid",
+                            "items": [
+                                {
+                                    "|xns": "Roo.grid",
+                                    "xtype": "GridEditor",
+                                    "*prop": "editor",
+                                    "items": [
+                                        {
+                                            "*prop": "field",
+                                            "allowBlank": false,
+                                            "allowDecimals": false,
+                                            "decimalPrecision": 0,
+                                            "minValue": 1,
+                                            "style": "text-align:right",
+                                            "xtype": "NumberField",
+                                            "|xns": "Roo.form"
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    ]
+                }
+            ]
+        }
+    ],
     "permname": "",
     "modOrder": "900"
 }
\ No newline at end of file
index c227083..988b830 100644 (file)
@@ -1 +1,424 @@
-0
\ No newline at end of file
+//<script type="text/javascript">
+
+// Auto generated file - created by app.Builder.js- do not edit directly (at present!)
+
+Pman.Tab.XtupleMetric = new Roo.XComponent({
+    part     :  ["Xtuple","Metric"],
+    order    : '900-Pman.Tab.XtupleMetric',
+    region   : 'center',
+    parent   : 'Pman.Admin',
+    name     : "unnamed module",
+    disabled : false, 
+    permname : '', 
+    _tree : function()
+    {
+        var _this = this;
+        var MODULE = this;
+        return {
+            xtype: 'GridPanel',
+            xns: Roo,
+            listeners : {
+                activate : function() {
+                    _this.panel = this;
+                    
+                    
+                    var pid = _this.form.findField('pohead_id').getValue() * 1;
+                    if (pid < 1) {
+                        Roo.MessageBox.alert("Save First", "Please save the purchase order first, before adding items");
+                        _this.dialog.layout.getRegion('center').showPanel(0);
+                        return;
+                    }
+                    
+                    if (_this.grid) {
+                        _this.grid.footer.onClick('first');
+                    }
+                },
+                deactivate : function (_self)
+                {
+                     if(_this.grid){
+                        var ar = [];
+                
+                        _this.grid.ds.each(function(r) {
+                            ar.push({
+                                poitem_id : r.data.poitem_id,
+                                poitem_itemsite_id : r.data.poitem_itemsite_id,
+                                poitem_unitprice : r.data.poitem_unitprice,
+                                poitem_qty_ordered : r.data.poitem_qty_ordered
+                            });
+                                
+                        });
+                        
+                        _this.form.findField('items').setValue(JSON.stringify(ar));
+                    }
+                    _this.dontClose = true;
+                    _this.form.doAction("submit");
+                
+                }
+            },
+            background : true,
+            fitContainer : true,
+            fitToframe : true,
+            region : 'center',
+            tableName : 'poitem',
+            title : "Order Items",
+            grid : {
+                xtype: 'EditorGrid',
+                xns: Roo.grid,
+                listeners : {
+                    render : function() 
+                    {
+                        _this.grid = this; 
+                        //_this.dialog = Pman.Dialog.FILL_IN
+                        if (_this.panel.active) {
+                           this.footer.onClick('first');
+                        }
+                    },
+                    beforeedit : function (e)
+                    {
+                        var r = e.record.data.poitem_qty_received * 1;
+                        
+                        if(r > 0){
+                            Roo.MessageBox.alert("Error", "This item has been receipted");
+                            return false;
+                        }
+                        
+                        var status = _this.form.findField('pohead_status').getValue();
+                        
+                        if(status == 'C'){
+                            Roo.MessageBox.alert("Error", "This PO has been closed");
+                            return false;
+                        }
+                        
+                        
+                    }
+                },
+                autoExpandColumn : 'item_descrip1',
+                clicksToEdit : 1,
+                loadMask : true,
+                dataSource : {
+                    xtype: 'Store',
+                    xns: Roo.data,
+                    listeners : {
+                        beforeload : function (_self, o){
+                            o.params = o.params || {};
+                            var hid = _this.form.findField('pohead_id').getValue();
+                            
+                            if(!hid.length){
+                                return false;
+                            }
+                            
+                            o.params.poitem_pohead_id = hid;
+                            o.params._with_item = 1;
+                            o.params._roo_office = _this.data.office ? _this.data.office : baseURL.split('/').pop().substr(0,2);
+                        
+                        },
+                        load : function (_self, records, options)
+                        {
+                            _this.grid.footer.updateSummary();
+                        }
+                    },
+                    remoteSort : true,
+                    sortInfo : { field : 'poitem_linenumber', direction: 'ASC' },
+                    proxy : {
+                        xtype: 'HttpProxy',
+                        xns: Roo.data,
+                        method : 'GET',
+                        timeout : 90000,
+                        url : baseURL + '/Xtuple/Roo/Poitem.php'
+                    },
+                    reader : {
+                        xtype: 'JsonReader',
+                        xns: Roo.data,
+                        id : 'poitem_id',
+                        root : 'data',
+                        totalProperty : 'total',
+                        fields : [
+                            {
+                                'name': 'poitem_id',
+                                'type': 'int'
+                            }
+                        ]
+                    }
+                },
+                toolbar : {
+                    xtype: 'Toolbar',
+                    xns: Roo,
+                    items : [
+                        {
+                            xtype: 'Button',
+                            xns: Roo.Toolbar,
+                            listeners : {
+                                click : function()
+                                {
+                                    var status = _this.form.findField('pohead_status').getValue();
+                                    
+                                    if(status == 'C'){
+                                        Roo.MessageBox.alert("Error", "This PO has been closed");
+                                        return;
+                                    }
+                                    
+                                    var ct  =    _this.grid.ds.getCount();
+                                    
+                                    var last = ct ? _this.grid.ds.getAt(ct-1).data.poitem_linenumber * 1 + 1 : 1;
+                                    
+                                    var dt = _this.form.findField('pohead_orderdate').getValue();
+                                    
+                                    var nr = _this.grid.ds.reader.newRow({
+                                        poitem_id : 0,
+                                        poitem_linenumber : last,
+                                        item_number : '',
+                                        item_descrip1 : '',
+                                        poitem_duedate : dt,
+                                        poitem_qty_ordered : 1,
+                                        poitem_unitprice : 0
+                                    });
+                                    
+                                    _this.grid.stopEditing();
+                                    _this.grid.ds.insert(_this.grid.ds.getCount(), nr); 
+                                    _this.grid.startEditing(_this.grid.ds.getCount()-1, 1);
+                                }
+                            },
+                            cls : 'x-btn-text-icon',
+                            text : "Add",
+                            icon : Roo.rootURL + 'images/default/dd/drop-add.gif'
+                        },
+                        {
+                            xtype: 'Button',
+                            xns: Roo.Toolbar,
+                            listeners : {
+                                click : function ()
+                                {
+                                    var status = _this.form.findField('pohead_status').getValue();
+                                    
+                                    if(status == 'C'){
+                                        Roo.MessageBox.alert("Error", "This PO has been closed");
+                                        return;
+                                    }
+                                    
+                                    var cs = _this.grid.getSelectionModel().getSelectedCell();
+                                    if (!cs) {
+                                        Roo.MessageBox.alert("Error", "Select a cell");
+                                        return;
+                                    }
+                                    _this.grid.stopEditing();
+                                    var r = _this.grid.ds.getAt(cs[0]);
+                                    
+                                    if(r.data.poitem_qty_received * 1 > 0){
+                                        Roo.MessageBox.alert("Error", "This item has been receipted");
+                                        return;
+                                    }
+                                    
+                                    
+                                    _this.grid.ds.remove(r);
+                                   
+                                }
+                            },
+                            cls : 'x-btn-text-icon',
+                            text : "Remove",
+                            icon : rootURL + '/Pman/templates/images/trash.gif'
+                        }
+                    ]
+                },
+                footer : {
+                    xtype: 'PagingToolbar',
+                    xns: Roo,
+                    displayInfo : true,
+                    emptyMsg : "No Item found",
+                    pageSize : 100,
+                    updateSummary : function() {
+                    \r
+                        var f = this;\r
+                        new Pman.Request({\r
+                            url : baseURL + '/Xtuple/Roo/Poitem',\r
+                            method : 'GET',\r
+                            params : {
+                                _roo_office : _this.data.office ? _this.data.office : baseURL.split('/').pop().substr(0,2),\r
+                                _totals : 1,\r
+                                poitem_pohead_id : _this.form.findField('pohead_id').getValue()\r
+                            },\r
+                            success : function(d) {
+                                Roo.log(d);\r
+                                f.displayEl.update(String.format(\r
+                                    "{0} items | Total : {1} {2}",\r
+                                    d.data[0].count_item,\r
+                                    _this.form.findField('pohead_curr_id').el.dom.value,\r
+                                    d.data[0].totals\r
+                                ));\r
+                                    \r
+                            }\r
+                        });\r
+                    
+                    }
+                },
+                colModel : [
+                    {
+                        xtype: 'ColumnModel',
+                        xns: Roo.grid,
+                        align : 'right',
+                        dataIndex : 'poitem_linenumber',
+                        header : 'Line#',
+                        width : 50,
+                        renderer : function(v) { return String.format('{0}', v); }
+                    },
+                    {
+                        xtype: 'ColumnModel',
+                        xns: Roo.grid,
+                        dataIndex : 'item_number',
+                        header : 'Item code',
+                        width : 100,
+                        renderer : function(v) { return String.format('{0}', v); },
+                        editor : {
+                            xtype: 'GridEditor',
+                            xns: Roo.grid,
+                            field : {
+                                xtype: 'ComboBox',
+                                xns: Roo.form,
+                                listeners : {
+                                    beforeselect : function (combo, record, index)
+                                    {
+                                      var ar = _this.grid.activeEditor.record;
+                                      
+                                      (function() { 
+                                          ar.set('item_descrip1', record.data.itemsite_item_id_item_descrip1);
+                                          ar.set('poitem_itemsite_id', record.data.itemsite_id);
+                                      }).defer(100);
+                                      
+                                    }
+                                },
+                                allowBlank : false,
+                                displayField : 'itemsite_item_id_item_number',
+                                editable : true,
+                                emptyText : "Select item",
+                                forceSelection : true,
+                                hiddenName : 'itemsite_item_id_item_number',
+                                listWidth : 400,
+                                loadingText : "Searching...",
+                                minChars : 2,
+                                name : 'item_number',
+                                pageSize : 20,
+                                qtip : "Select item",
+                                queryParam : 'query[number]',
+                                selectOnFocus : true,
+                                tpl : '<div class="x-grid-cell-text x-btn button"><b>{itemsite_item_id_item_number}</b> - {itemsite_item_id_item_descrip1} </div>',
+                                triggerAction : 'all',
+                                typeAhead : false,
+                                valueField : 'item_number',
+                                store : {
+                                    xtype: 'Store',
+                                    xns: Roo.data,
+                                    listeners : {
+                                        beforeload : function (_self, o){
+                                            o.params = o.params || {}; 
+                                            o.params.itemsite_posupply = 1;
+                                        }
+                                    },
+                                    remoteSort : true,
+                                    sortInfo : { direction : 'ASC', field: 'item_number' },
+                                    proxy : {
+                                        xtype: 'HttpProxy',
+                                        xns: Roo.data,
+                                        method : 'GET',
+                                        url : baseURL + '/Roo/itemsite.php'
+                                    },
+                                    reader : {
+                                        xtype: 'JsonReader',
+                                        xns: Roo.data,
+                                        id : 'itemsite_id',
+                                        root : 'data',
+                                        totalProperty : 'total',
+                                        fields : [{"name":"item_id","type":"int"},"item_number"]
+                                    }
+                                }
+                            }
+                        }
+                    },
+                    {
+                        xtype: 'ColumnModel',
+                        xns: Roo.grid,
+                        dataIndex : 'item_descrip1',
+                        header : 'Item description',
+                        width : 150,
+                        renderer : function(v) { return String.format('{0}', v); }
+                    },
+                    {
+                        xtype: 'ColumnModel',
+                        xns: Roo.grid,
+                        dataIndex : 'poitem_duedate',
+                        header : 'Due date',
+                        width : 100,
+                        renderer : function(v) { return String.format('{0}', v ? v.format('Y-m-d') : ''); }
+                    },
+                    {
+                        xtype: 'ColumnModel',
+                        xns: Roo.grid,
+                        align : 'right',
+                        dataIndex : 'poitem_qty_ordered',
+                        header : 'Ordered',
+                        width : 75,
+                        renderer : function(v) { return String.format('{0}', v); },
+                        editor : {
+                            xtype: 'GridEditor',
+                            xns: Roo.grid,
+                            field : {
+                                xtype: 'NumberField',
+                                xns: Roo.form,
+                                allowDecimals : false,
+                                decimalPrecision : 0,
+                                minValue : 1,
+                                style : 'text-align:right'
+                            }
+                        }
+                    },
+                    {
+                        xtype: 'ColumnModel',
+                        xns: Roo.grid,
+                        align : 'right',
+                        dataIndex : 'poitem_qty_received',
+                        header : 'Received',
+                        width : 75,
+                        renderer : function(v,x,r) { 
+                            return String.format(
+                                r.data.poitem_qty_ordered != (v-r.data.poitem_qty_returned) ? '<span style="color:red">{0}</span>':  '{0}',
+                                 v - r.data.poitem_qty_returned);
+                        }
+                    },
+                    {
+                        xtype: 'ColumnModel',
+                        xns: Roo.grid,
+                        align : 'right',
+                        dataIndex : 'poitem_qty_vouchered',
+                        header : 'Vouchered',
+                        width : 65,
+                        renderer : function(v,x,r) { 
+                            return String.format(
+                                r.data.poitem_qty_ordered != v ? '<span style="color:red">{0}</span>':  '{0}',
+                                 v);
+                        }
+                    },
+                    {
+                        xtype: 'ColumnModel',
+                        xns: Roo.grid,
+                        align : 'right',
+                        dataIndex : 'poitem_unitprice',
+                        header : 'Unit price',
+                        width : 100,
+                        renderer : function(v) { return String.format('{0}', (v || v == 0) ? parseFloat(v).toFixed(3) : ''); },
+                        editor : {
+                            xtype: 'GridEditor',
+                            xns: Roo.grid,
+                            field : {
+                                xtype: 'NumberField',
+                                xns: Roo.form,
+                                allowBlank : false,
+                                allowDecimals : false,
+                                decimalPrecision : 0,
+                                minValue : 1,
+                                style : 'text-align:right'
+                            }
+                        }
+                    }
+                ]
+            }
+        };
+    }
+});