php warnings
[Pman.MTrack] / Pman.Tab.MTrackTicket.bjs
index 13fb1d6..7fc3cae 100644 (file)
 {
-    "id": "roo-file-87",
-    "name": "Pman.Tab.MTrackTicket",
-    "parent": "Pman.Tab.DocumentsTab",
-    "title": "MTrackWeb.Ticket",
-    "path": "/home/alan/gitlive/Pman.MTrack/Pman.Tab.MTrackTicket.bjs",
-    "items": [
+ "name" : "Pman.Tab.MTrackTicket",
+ "parent" : "Pman.Tab.DocumentsTab",
+ "title" : "MTrackWeb.Ticket",
+ "path" : "/home/alan/gitlive/Pman.MTrack/Pman.Tab.MTrackTicket.bjs",
+ "permname" : "",
+ "modOrder" : "001",
+ "strings" : {
+  "340c2ee497b85d5954b01c64de7f44f6" : "Select Person",
+  "b9dd47d69178dbf735bfcd2733fd4ea6" : "Add Comment / Update",
+  "290612199861c31d1036b185b4e69b75" : "Summary",
+  "8a223eb0008a86f053b2a7eac0fa6eac" : "Select priority",
+  "04720e14ddfde3154a120fdd0ae73d19" : "Action Required By",
+  "ef6703d6c606526cece4a9eda9d49045" : "Your comment",
+  "c76a5e84e4bdee527e274ea30c680d79" : "active",
+  "502996d9790340c5fd7b86a5b93b1c9f" : "Priority",
+  "40bed7cf9b3d4bb3a3d7a7e3eb18c5eb" : "Person ",
+  "5c9335b28e6277ddbe0137f04e5e58a7" : "Classification",
+  "7e5ddb4ca31c30e778f4d9c57b9577b1" : "Change Status",
+  "1fd968087e03faeb2e87df1e9849d983" : "Spent",
+  "1243daf593fa297e07ab03bf06d925af" : "Searching...",
+  "b6f4a2ec6356bbd56d49f2096bf9d3d3" : "Owner",
+  "672caf27f5363dc833bda5099775e891" : "Developer",
+  "6a7e73161603d87b26a8eac49dab0a9c" : "Hours",
+  "ff0a3b7f3daef040faf89a88fdac01b7" : "Updated",
+  "b1550c2a1a5eb0d078d92eef8a0ef883" : "ID#",
+  "9e727fdd3aec8274f46685441900280d" : "Project",
+  "ec53a8c4f07baed5d8825072c89799be" : "Status",
+  "ea4788705e6873b424c65e91c2846b19" : "Cancel",
+  "a3edc4e7beafdcd450f339ec414b7508" : "Developer / Action Required By",
+  "c1c694bd849d91d0eb34bfef8c2d8894" : "Tickets",
+  "a5ffb2a210f259195a75e5abca8db4a2" : "Select mtrack_milestone",
+  "3efbc55730fd4af147b96183d8afbd3b" : "mtrack_ticket",
+  "a3a1edf91a3157dad9417dedb4af500d" : "Add New Ticket",
+  "df25de42c84837baf5fa15049a8bc764" : "View:",
+  "423570be9f14a39fe88384797ee376fd" : "Select severity",
+  "5bf7a37a56bdea44d9b2b69201e91fbd" : "Edit original ticket",
+  "d10e7195b9d5009f7b8e6bb25a099e84" : "Add Attachment / Patch",
+  "e9c626b8a8b62de7562dfbf51a576ae5" : "Milestone",
+  "b26917587d98330d93f87808fc9d7267" : "Subscribe",
+  "f691f042a559b1c1a4f89826c6f75760" : "Resolved",
+  "007cc9547ae8884ad597cd92ba505422" : "Severity",
+  "c9cc8cce247e49bae79f15173ce97354" : "Save",
+  "01bd6a16732dfa2b760dc8566c58afae" : "Download to Excel",
+  "887950755a62e33c26209bdcbdc1d3d3" : "Bulk Change",
+  "7025046a3448dfea367705b884148992" : "Select classification"
+ },
+ "named_strings" : {
+  "priority_id_name_qtip" : "8a223eb0008a86f053b2a7eac0fa6eac",
+  "severity_id_name_loadingText" : "1243daf593fa297e07ab03bf06d925af",
+  "developer_id_emptyText" : "340c2ee497b85d5954b01c64de7f44f6",
+  "developer_id_name_loadingText" : "1243daf593fa297e07ab03bf06d925af",
+  "status_name_emptyText" : "7e5ddb4ca31c30e778f4d9c57b9577b1",
+  "severity_id_name_emptyText" : "423570be9f14a39fe88384797ee376fd",
+  "classification_id_name_emptyText" : "7025046a3448dfea367705b884148992",
+  "status_name_fieldLabel" : "ec53a8c4f07baed5d8825072c89799be",
+  "developer_id_qtip" : "340c2ee497b85d5954b01c64de7f44f6",
+  "developer_id_name_emptyText" : "340c2ee497b85d5954b01c64de7f44f6",
+  "classification_id_name_qtip" : "7025046a3448dfea367705b884148992",
+  "developer_id_fieldLabel" : "40bed7cf9b3d4bb3a3d7a7e3eb18c5eb",
+  "developer_id_loadingText" : "1243daf593fa297e07ab03bf06d925af",
+  "cm_status_name_value" : "c76a5e84e4bdee527e274ea30c680d79",
+  "milestone_id_name_loadingText" : "1243daf593fa297e07ab03bf06d925af",
+  "priority_id_name_emptyText" : "8a223eb0008a86f053b2a7eac0fa6eac",
+  "status_name_qtip" : "7e5ddb4ca31c30e778f4d9c57b9577b1",
+  "status_name_loadingText" : "1243daf593fa297e07ab03bf06d925af",
+  "milestone_id_name_emptyText" : "a5ffb2a210f259195a75e5abca8db4a2",
+  "developer_id_name_qtip" : "340c2ee497b85d5954b01c64de7f44f6",
+  "reason_fieldLabel" : "ef6703d6c606526cece4a9eda9d49045",
+  "cm_status_name_fieldLabel" : "ec53a8c4f07baed5d8825072c89799be",
+  "priority_id_name_loadingText" : "1243daf593fa297e07ab03bf06d925af",
+  "milestone_id_name_qtip" : "a5ffb2a210f259195a75e5abca8db4a2",
+  "developer_id_name_fieldLabel" : "a3edc4e7beafdcd450f339ec414b7508",
+  "severity_id_name_qtip" : "423570be9f14a39fe88384797ee376fd",
+  "classification_id_name_loadingText" : "1243daf593fa297e07ab03bf06d925af"
+ },
+ "items" : [
+  {
+   "listeners" : {
+    "activate" : "function (_self)\n{\n    _this.panel = _self;\n    (function () {\n        if (_this.tpanel) {\n            _this.panel.layout.getRegion('south').hide();\n            //_this.panel.layout.getRegion('north').hide();\n        }\n    }).defer(100);\n    try {\n        if (!_this.url || !_this.project || (_this.project != MTrack.projectCombo.getValue())) {\n            (function() { \n                if (_this.tpanel) { \n                 //   _this.tpanel.mload(\"/Report/1\"); \n                }\n            }).defer(300);\n        }\n        \n        \n    } catch(e) {Roo.log(\"activate fail\" + e.toString()); }\n}"
+   },
+   "region" : "center",
+   "fitToFrame" : true,
+   "background" : true,
+   "title" : "Tickets",
+   "xtype" : "NestedLayoutPanel",
+   "fitContainer" : true,
+   "$ xns" : "Roo",
+   "items" : [
+    {
+     "xtype" : "BorderLayout",
+     "$ xns" : "Roo",
+     "* prop" : "layout",
+     "items" : [
+      {
+       "xtype" : "LayoutRegion",
+       "tabPosition" : "top",
+       "$ xns" : "Roo",
+       "* prop" : "center"
+      },
+      {
+       "collapsible" : true,
+       "xtype" : "LayoutRegion",
+       "tabPosition" : "top",
+       "$ xns" : "Roo",
+       "split" : true,
+       "height" : 300,
+       "* prop" : "north"
+      },
+      {
+       "xtype" : "LayoutRegion",
+       "$ xns" : "Roo",
+       "split" : true,
+       "* prop" : "south",
+       "height" : 170
+      },
+      {
+       "listeners" : {
+        "|activate" : "function() {\n    _this.gpanel = this;\n    if (_this.grid) {\n        _this.grid.ds.load({});\n    }\n}"
+       },
+       "region" : "north",
+       "fitToframe" : true,
+       "background" : true,
+       "title" : "mtrack_ticket",
+       "xtype" : "GridPanel",
+       "fitContainer" : true,
+       "$ xns" : "Roo",
+       "tableName" : "mtrack_ticket",
+       "items" : [
         {
-            "listeners": {
-                "activate": "function (_self)\n{\n    _this.panel = _self;\n    (function () {\n        if (_this.tpanel) {\n            _this.panel.layout.getRegion('south').hide();\n            //_this.panel.layout.getRegion('north').hide();\n        }\n    }).defer(100);\n    try {\n        if (!_this.url || !_this.project || (_this.project != MTrack.projectCombo.getValue())) {\n            (function() { \n                if (_this.tpanel) { \n                 //   _this.tpanel.mload(\"/Report/1\"); \n                }\n            }).defer(300);\n        }\n        \n        \n    } catch(e) {Roo.log(\"activate fail\" + e.toString()); }\n}"
+         "listeners" : {
+          "celldblclick" : "function (_self, rowIndex, columnIndex, e)\n{\n     var c = _this.grid.colModel.getDataIndex(columnIndex);\n    \n    \n    if (c.match(/_id$/) ) {\n        return;\n    }\n    var rec = _this.grid.ds.getAt(rowIndex);\n    Pman.Dialog.MTrackTicket.show({ id : rec.data.id } , function(res) {\n        // update row, and re-render..\n    \n    });\n    \n    \n}",
+          "|render" : "function() \n{\n    _this.grid = this; \n    _this.panel.grid = this; // works with doc manager...\n    //_this.dialog = Pman.Dialog.FILL_IN\n    if (_this.gpanel.active) {\n       _this.grid.ds.load({});\n    }\n}",
+          "afteredit" : "function (e)\n{\n    Roo.log(e);\n    e.record.commit();\n}"
+         },
+         "autoExpandColumn" : "summary",
+         "xtype" : "EditorGrid",
+         "ddGroup" : "mtrack_ticket",
+         "loadMask" : true,
+         "$ getProjectId" : "function() {\n\n      if (typeof(MTrack) != 'undefined') {\n        return  MTrack.projectCombo.getValue();\n      }\n      \n    //       project_id :  _this.grid.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.\n    //      project_id_name : _this.grid.getProjectId(), //MTrack.projectCombo.el.dom.value,\n  \n  \n \n    try {\n         var pr = Pman.Tab.Projects; // shuld be documentsProjects\n         if (!pr || !pr.grid) {\n            return false;\n        }\n    } catch (e) {\n        return false;\n    }\n    var sels = pr.grid.getSelectionModel().getSelections();\n    var prids = [];\n    if (sels.length) {\n        Roo.each(sels,function(s) {\n            prids.push(s.data.id);\n         });\n         // multi support later..\n        return   prids[0];\n     }\n     \n    \n     \n    return 0;\n  \n  \n}\n",
+         "clicksToEdit" : 1,
+         "$ xns" : "Roo.grid",
+         "* prop" : "grid",
+         "enableDragDrop" : true,
+         "$ getProjectName" : "function() {\n     //  project_id :  _this.grid.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.\n      \n      if (typeof(MTrack) != 'undefined') {\n      \n        return MTrack.projectCombo.el.dom.value;\n      }\n        \n        \n      \n    try {\n         var pr = Pman.Tab.Projects; // shuld be documentsProjects\n         if (!pr || !pr.grid) {\n            return false;\n        }\n    } catch (e) {\n        return false;\n    }\n    var sels = pr.grid.getSelectionModel().getSelections();\n    var prids = [];\n    if (sels.length) {\n        Roo.each(sels,function(s) {\n            prids.push(s.data.name);\n         });\n         // multi support later..\n        return   prids[0];\n     }\n     \n    \n     \n    return '';  \n}\n",
+         "items" : [
+          {
+           "listeners" : {
+            "afterselectionchange" : "function (_self, rowIndex, colIndex)\n{\n    \n    var   sels =   _this.grid.selModel.getSelections();\n    \n    if (!sels || sels.length > 1) {\n    \n        return;\n    }\n    \n    var rec = sels[0];\n    \n    // verify nothing has chagned.. \n     \n    // load the ticked, and render a view of it...\n    new Pman.Request({\n        url : baseURL + '/Roo/mtrack_ticket',\n        method : 'GET',\n        params : { \n            _id : rec.data.id\n        },\n        success : function(res) {\n            //Roo.log(res.data);\n            // render it into a template..\n            _this.tpanel.setContent(Pman.MTrack.template.ticket_view(res.data));\n            _this.tpanel.el.scrollTo('top',0);\n             \n            //... ehh\n             Pman.MTrack.loadAudit(rec.data.id, _this.tpanel.el.select('.mtrack-ticket-events',true).first());\n         \n            \n           \n            new Pman.Request({\n                url : baseURL + '/Roo/Images',\n                method : 'GET',\n                params : { \n                    onid : rec.data.id,\n                    ontable : 'mtrack_ticket'\n                },\n                success : function(ares) {\n                    Roo.log(ares.data);\n                    var el = Roo.select('.ticket-status-attachments .attachments-list', true).first();\n                    // fill in the attachement area with data from this..\n                    el.dom.innerHTML =  Pman.MTrack.template.ticket_attachments(ares) ;\n                }\n            });\n             \n            \n            _this.form.reset();\n\n            _this.form.setValues({\n                id : rec.data.id,\n                owner_id : rec.data.owner_id,\n                owner_id_name : rec.data.owner_id_name,\n                status : rec.data.status,\n                status_name : \"No Change\"\n            }); \n            \n            \n            for(var k in res.data) {\n                rec.set(k,res.data[k]);\n            }\n            \n        }\n    });\n        \n    \n    \n}",
+            "cellselect" : "function (_self, rowIndex, colIndex)\n{\n    return false;\n    var rec = _this.grid.ds.getAt(rowIndex);\n    \n    // verify nothing has chagned.. \n     \n    // load the ticked, and render a view of it...\n    new Pman.Request({\n        url : baseURL + '/Roo/mtrack_ticket',\n        method : 'GET',\n        params : { \n            _id : rec.data.id\n        },\n        success : function(res) {\n            //Roo.log(res.data);\n            // render it into a template..\n            _this.tpanel.setContent(Pman.MTrack.template.ticket_view(res.data));\n            _this.tpanel.el.scrollTo('top',0);\n             \n            //... ehh\n             Pman.MTrack.loadAudit(rec.data.id, _this.tpanel.el.select('.mtrack-ticket-events',true).first());\n         \n            new Pman.Request({\n                url : baseURL + '/Roo/Images',\n                method : 'GET',\n                params : { \n                    onid : rec.data.id,\n                    ontable : 'mtrack_ticket'\n                },\n                success : function(ares) {\n                    Roo.log(ares.data);\n                    var el = Roo.select('.ticket-status-attachments .attachments-list', true).first();\n                    // fill in the attachement area with data from this..\n                    el.dom.innerHTML =  Pman.MTrack.template.ticket_attachments(ares) ;\n                }\n            });\n             \n            \n            _this.form.reset();\n\n            _this.form.setValues({\n                id : rec.data.id,\n                owner_id : rec.data.owner_id,\n                owner_id_name : rec.data.owner_id_name,\n                status : rec.data.status,\n                status_name : \"No Change\"\n            }); \n            \n            \n            for(var k in res.data) {\n                rec.set(k,res.data[k]);\n            }\n            \n        }\n    });\n        \n    \n    \n}"
+           },
+           "xtype" : "RowSelectionModel",
+           "$ xns" : "Roo.grid",
+           "* prop" : "sm"
+          },
+          {
+           "listeners" : {
+            "update" : "function (_self, record, operation)\n{\n    Roo.log('update: ' + JSON.stringify(operation));\n    if (operation != 'commit') {\n        return;\n    }\n    // send things that might change..\n    new Pman.Request({\n        url : baseURL + '/Roo/mtrack_ticket',\n        method : 'POST',\n        params : {\n            id : record.data.id,\n            milestone_id : record.data.milestone_id,\n            priority_id : record.data.priority_id,\n            severity_id : record.data.severity_id,\n            classification_id : record.data.classification_id,\n            estimated : record.data.estimated,\n            developer_id : record.data.developer_id\n        },\n        success : function(res)\n        {\n            var r = res.data;\n            //Roo.log(r);\n            // do nothing?\n            record.modified = record.modified || {};\n            for (var k in r) {\n                // update the \n                 \n                if (k.match(/_id$/) || k.match(/_id_/) || k.match(/^status_/)) {\n     \n                    record.data[k] = r[k];\n                    record.modified[k] = r[k];\n                }\n            }\n            record.store.afterEdit(record);\n        }\n        // we should really have a failure - to reset to the old value.\n    });\n     \n    \n    \n}",
+            "beforeload" : "function (_self, options)\n{\n    \n   if (Pman.building) { return false; }\n    options.params =     options.params || {};\n    options.params['query[search]'] = _this.searchBox.getValue();\n    var sq =        options.params['query[viewtype]'] = _this.status.getValue(); \n    var pc = false;\n    var ps = false;\n    try {\n         pc = _this.grid.colModel.getIndexByDataIndex('project_id_name');\n        \n    } catch(e) {} \n    \n\n    if (!options.params['query[search]'].length || isNaN(options.params['query[search]'])) {\n            \n        \n        ps = _this.personSel.getValue();\n        ps = ps ? ps : 0;\n        if (ps ) {\n            options.params.developer_id = ps <0 ? 0 : ps;\n        }\n\n         \n        \n        \n        try { \n            options.params.project_id  = Pman.Tab.DocumentsTab.panel.getProjectId();\n        } catch(e) {\n            options.params.project_id  = typeof(MTrack) != 'undefined' ? MTrack.projectCombo.getValue(): 0;\n        }\n        options.params.project_id =      options.params.project_id || undefined;\n     }\n     \n\n         \n           \n    if (  ps < 1 && pc !== false) {\n        _this.grid.colModel.setHidden(pc, true);\n        \n    }\n    \n    // project column\n    if (pc!== false) {\n         _this.grid.colModel.setHidden(pc, true);\n     }\n     \n    if (pc !== false && !options.params.project_id) {\n\n         _this.grid.colModel.setHidden(pc, false);       \n\n    }\n\n    options.params.limit = 999;\n    // columns...\n\n    \n    \n}"
+           },
+           "xtype" : "Store",
+           "remoteSort" : true,
+           "$ sortInfo" : "{ field : 'summary', direction: 'ASC' }",
+           "$ xns" : "Roo.data",
+           "* prop" : "dataSource",
+           "items" : [
+            {
+             "$ url" : "baseURL + '/Roo/mtrack_ticket.php'",
+             "method" : "GET",
+             "xtype" : "HttpProxy",
+             "$ xns" : "Roo.data",
+             "* prop" : "proxy"
             },
-            "background": true,
-            "fitContainer": true,
-            "fitToFrame": true,
-            "region": "center",
-            "title": "Tickets",
-            "xtype": "NestedLayoutPanel",
-            "|xns": "Roo",
-            "items": [
+            {
+             "id" : "id",
+             "root" : "data",
+             "xtype" : "JsonReader",
+             "$ xns" : "Roo.data",
+             "$ fields" : "[\n    {\n        'name': 'id',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id',\n        'type': 'int'\n    },\n    {\n        'name': 'summary',\n        'type': 'string'\n    },\n    {\n        'name': 'description',\n        'type': 'string'\n    },\n    {\n        'name': 'changelog',\n        'type': 'string'\n    },\n    {\n        'name': 'created',\n        'type': 'int'\n    },\n    {\n        'name': 'updated',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id',\n        'type': 'int'\n    },\n    {\n        'name': 'priority_id',\n        'type': 'int'\n    },\n    {\n        'name': 'severity_id',\n        'type': 'int'\n    },\n    {\n        'name': 'classification_id',\n        'type': 'int'\n    },\n    {\n        'name': 'resolution_id',\n        'type': 'int'\n    },\n    {\n        'name': 'cc',\n        'type': 'string'\n    },\n    {\n        'name': 'status',\n        'type': 'int'\n    },\n    {\n        'name': 'estimated',\n        'type': 'float'\n    },\n    {\n        'name': 'spent',\n        'type': 'float'\n    },\n    {\n        'name': 'x_fieldname',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id',\n        'type': 'int'\n    },\n    {\n        'name': 'updated_id',\n        'type': 'int'\n    },\n    {\n        'name': 'updated_person_id',\n        'type': 'int'\n    },\n    {\n        'name': 'updated_ontable',\n        'type': 'string'\n    },\n    {\n        'name': 'updated_onid',\n        'type': 'int'\n    },\n    {\n        'name': 'updated_changedate',\n        'type': 'date'\n    },\n    {\n        'name': 'updated_reason',\n        'type': 'string'\n    },\n    {\n        'name': 'created_id',\n        'type': 'int'\n    },\n    {\n        'name': 'created_person_id',\n        'type': 'int'\n    },\n    {\n        'name': 'created_ontable',\n        'type': 'string'\n    },\n    {\n        'name': 'created_onid',\n        'type': 'int'\n    },\n    {\n        'name': 'created_changedate',\n        'type': 'date'\n    },\n    {\n        'name': 'created_reason',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_office_id',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_phone',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_fax',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_email',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_company_id',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_role',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_remarks',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_passwd',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_owner_id',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_lang',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_no_reset_sent',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_action_type',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_project_id',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_deleted_by',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_deleted_dt',\n        'type': 'date'\n    },\n    {\n        'name': 'developer_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_office_id',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_phone',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_fax',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_email',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_company_id',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_role',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_remarks',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_passwd',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_owner_id',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_lang',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_no_reset_sent',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_action_type',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_project_id',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_deleted_by',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_deleted_dt',\n        'type': 'date'\n    },\n    {\n        'name': 'priority_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'priority_id_etype',\n        'type': 'string'\n    },\n    {\n        'name': 'priority_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'priority_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'priority_id_seqid',\n        'type': 'int'\n    },\n    {\n        'name': 'severity_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'severity_id_etype',\n        'type': 'string'\n    },\n    {\n        'name': 'severity_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'severity_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'severity_id_seqid',\n        'type': 'int'\n    },\n    {\n        'name': 'classification_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'classification_id_etype',\n        'type': 'string'\n    },\n    {\n        'name': 'classification_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'classification_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'classification_id_seqid',\n        'type': 'int'\n    },\n    {\n        'name': 'resolution_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'resolution_id_etype',\n        'type': 'string'\n    },\n    {\n        'name': 'resolution_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'resolution_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'resolution_id_seqid',\n        'type': 'int'\n    },\n    {\n        'name': 'status_id',\n        'type': 'int'\n    },\n    {\n        'name': 'status_etype',\n        'type': 'string'\n    },\n    {\n        'name': 'status_name',\n        'type': 'string'\n    },\n    {\n        'name': 'status_active',\n        'type': 'int'\n    },\n    {\n        'name': 'status_seqid',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_remarks',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_owner_id',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_code',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_type',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_client_id',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_team_id',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_file_location',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_open_date',\n        'type': 'date'\n    },\n    {\n        'name': 'project_id_open_by',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_close_date',\n        'type': 'date'\n    },\n    {\n        'name': 'project_id_countries',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_languages',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_agency_id',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'milestone_id_description',\n        'type': 'string'\n    },\n    {\n        'name': 'milestone_id_startdate',\n        'type': 'date'\n    },\n    {\n        'name': 'milestone_id_duedate',\n        'type': 'date'\n    },\n    {\n        'name': 'milestone_id_completed',\n        'type': 'date'\n    },\n    {\n        'name': 'milestone_id_deleted',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id_created',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id_updated',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id_project_id',\n        'type': 'int'\n    }\n]",
+             "* prop" : "reader",
+             "totalProperty" : "total"
+            }
+           ]
+          },
+          {
+           "xtype" : "Toolbar",
+           "$ xns" : "Roo",
+           "* prop" : "toolbar",
+           "items" : [
+            {
+             "listeners" : {
+              "click" : "function (_self, e)\n{\n  Pman.Dialog.MTrackTicket.show({\n        project_id :  Pman.Tab.DocumentsTab.panel.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.\n        project_id_name : Pman.Tab.DocumentsTab.panel.getProjectName(), //MTrack.projectCombo.el.dom.value,\n        owner_id : Pman.Login.authUser.id,\n        owner_id_name : Pman.Login.authUser.name\n\n  }, function() { \n    _this.grid.ds.load({}); \n    });\n    \n}"
+             },
+             "text" : "Add New Ticket",
+             "xtype" : "Button",
+             "$ xns" : "Roo.Toolbar"
+            },
+            {
+             "listeners" : {
+              "click" : "function (_self, e)\n{\n    params =    {};\n    params.project_id =  Pman.Tab.DocumentsTab.panel.getProjectId(); // testing.\n    params.limit = 999;\n    // columns...\n    params['query[viewtype]'] = 'active';\n    \n    for (var k in _this.filterBtn) {\n        if (_this.filterBtn[k].pressed) {\n            params['query[viewtype]'] = k;\n        }\n    }\n    var ii =0;\n    params['csvCols['+ii+']'] = 'jira_ref';\n    params['csvTitles['+ii+']'] = \"Jira ID\";\n    ii++;\n    \n    Roo.each(_this.grid.colModel.config, function(c,i) {\n        params['csvCols['+ii+']'] = c.dataIndex;\n        params['csvTitles['+ii+']'] = c.header;\n        try {\n            if (typeof( c.editor.field.name) != 'undefined') {\n                params['csvCols['+ii+']'] = c.editor.field.name;\n            }\n        } catch(e) {}\n        ii++;\n    });\n    \n    params['csvCols['+ii+']'] = 'description';\n    params['csvTitles['+ii+']'] = \"Details\";\n        \n    \n\n        \n   \n    new Pman.Download({\n        url: baseURL + '/Roo/mtrack_ticket',\n        method: 'GET' ,\n        params: params\n        \n    });\n    \n        \n}"
+             },
+             "text" : "Download to Excel",
+             "xtype" : "Button",
+             "$ xns" : "Roo.Toolbar"
+            },
+            {
+             "listeners" : {
+              "click" : "function (_self, e)\n{\n    var sels = _this.grid.selModel.getSelections();\n\n    var pid = 0;\n    var ids = [];\n    Roo.each(sels, function(s) {\n        ids.push(s.data.id);\n        if (pid && s.data.project_id != pid) {\n            pid = -1;\n            return false;\n        }\n        pid = s.data.project_id ;\n        \n    });\n    if (pid < 1) {\n        Roo.MessageBox.alert(\"Error\", \"selected tickets must be of the same project\");\n        return;\n    }\n    \n    // permission based?\n    \n    Pman.Dialog.MTrackBulkChange.show({\n        project_id : sels[0].data.project_id,\n        project_id_name : sels[0].data.project_id_name,\n        ids : ids.join(',')\n    }, function(res) {\n        Roo.log(res);\n        var tks = {};\n        \n        Roo.each(res.data, function(d) {\n            tks[d.id*1] = d;\n        });\n        \n        Roo.each(sels, function(sel) {\n            var record = _this.grid.ds.getById(sel.data.id);\n            record.modified = record.modified || {};\n\n            Roo.log(tks[record.data.id*1]);\n            \n            for (var k in tks[record.data.id*1]) {\n                // update the \n                \n                \n                if (k.match(/_id$/) || k.match(/_id_/) || k.match(/^status_/)) {\n\n\n                    Roo.log(\"SET \" + k + \"=\" +  tks[record.data.id*1][k]);\n                    record.data[k] = tks[record.data.id*1][k];\n                    record.modified[k] = tks[record.data.id*1][k];\n                }\n            }\n            record.store.afterEdit(record);\n      });\n    \n    });\n\n    \n        \n}"
+             },
+             "text" : "Bulk Change",
+             "xtype" : "Button",
+             "$ xns" : "Roo.Toolbar"
+            },
+            {
+             "xtype" : "Fill",
+             "$ xns" : "Roo.Toolbar"
+            },
+            {
+             "text" : "View:",
+             "xtype" : "TextItem",
+             "$ xns" : "Roo.Toolbar"
+            },
+            {
+             "listeners" : {
+              "specialkey" : "function (_self, e)\n{\n    _this.grid.ds.load({});\n}",
+              "render" : "function (_self)\n{\n_this.searchBox=  _self;\n}"
+             },
+             "xtype" : "TextField",
+             "$ xns" : "Roo.form"
+            },
+            {
+             "listeners" : {
+              "|render" : "function (_self)\n{\n    _this.personSel = _self;\n    if (Pman.Login.authUser.id) {\n        this.setFromData({\n            developer_id : Pman.Login.authUser.id,\n            developer_id_name : Pman.Login.authUser.name\n        });\n    \n    }\n}",
+              "|select" : "function (combo, record, index)\n{\n  _this.grid.ds.load({});\n  \n}"
+             },
+             "listWidth" : 600,
+             "triggerAction" : "all",
+             "fieldLabel" : "Person ",
+             "forceSelection" : true,
+             "selectOnFocus" : true,
+             "pageSize" : 20,
+             "displayField" : "developer_id_name",
+             "emptyText" : "Select Person ",
+             "hiddenName" : "developer_id",
+             "minChars" : 2,
+             "valueField" : "developer_id",
+             "xtype" : "ComboBox",
+             "allowBlank" : true,
+             "typeAhead" : true,
+             "editable" : true,
+             "width" : 150,
+             "$ xns" : "Roo.form",
+             "name" : "developer_id",
+             "qtip" : "Select Person ",
+             "queryParam" : "query[name]",
+             "tpl" : "<div class=\"x-grid-cell-text x-btn button\"><b>{developer_id_name}</b></div>",
+             "loadingText" : "Searching...",
+             "items" : [
+              {
+               "listeners" : {
+                "|beforeload" : "function (_self, o)\n{\n    o.params = o.params || {};\n    o.params._distinct = 'developer_id';\n    o.params._columns = 'developer_id,developer_id_name';\n}",
+                "load" : "function (_self, records, options)\n{\n    Roo.log(records);\n    var ua = _this.personSel.store.reader.newRow({\n        developer_id : -1,\n        developer_id_name : '-- Un-assigned --'\n    });\n    this.insert(0,[ua]);\n//    records.unshift(ua);\n}"
+               },
+               "xtype" : "Store",
+               "$ sortInfo" : "{ field : 'developer_id_name' , dir : 'ASC' }",
+               "$ xns" : "Roo.data",
+               "* prop" : "store",
+               "items" : [
+                {
+                 "$ url" : "baseURL + '/Roo/Mtrack_ticket.php'",
+                 "xtype" : "HttpProxy",
+                 "method" : "GET",
+                 "$ xns" : "Roo.data",
+                 "* prop" : "proxy"
+                },
+                {
+                 "id" : "id",
+                 "root" : "data",
+                 "xtype" : "JsonReader",
+                 "$ fields" : "[\n    {\n        'name': 'developer_id',\n        'type': 'int'\n    } ,\n    {\n        'name': 'developer_id_name',\n        'type' : 'text'\n    }\n    \n    \n]",
+                 "$ xns" : "Roo.data",
+                 "* prop" : "reader",
+                 "totalProperty" : "total"
+                }
+               ]
+              }
+             ]
+            },
+            {
+             "listeners" : {
+              "render" : "function (_self)\n{\n  _this.status = _self;\n}",
+              "select" : "function (combo, record, index)\n{\n    Roo.log('select');\n    _this.grid.ds.load({});\n}"
+             },
+             "listWidth" : 200,
+             "triggerAction" : "all",
+             "fieldLabel" : "Status",
+             "displayField" : "fname",
+             "hiddenName" : "cm_status",
+             "value" : "active",
+             "valueField" : "ftype",
+             "xtype" : "ComboBox",
+             "allowBlank" : false,
+             "editable" : false,
+             "width" : 150,
+             "$ xns" : "Roo.form",
+             "mode" : "local",
+             "name" : "cm_status_name",
+             "items" : [
+              {
+               "xtype" : "SimpleStore",
+               "$ data" : "[ \n    [ 'active', \"Active\"],\n    [ 'me' , \"Assigned to me\"],\n    [ 'me-all' , \"Assigned to me (All projects)\"],    \n    [ 'closed' , \"Closed\"],\n    [ 'on-hold' , \"On Hold\"],\n    [ 'pending' , \"Pending Review / Resolved\"],\n    [ 'in-progress' , \"In Progress\"],\n    [ 'all' , \"All States\"]\n     \n]\n",
+               "$ fields" : "[  'ftype', 'fname']",
+               "$ xns" : "Roo.data",
+               "* prop" : "store"
+              }
+             ]
+            },
+            {
+             "listeners" : {
+              "|click" : "function (_self, e)\n{\n    _this.grid.ds.load({});\n}"
+             },
+             "xtype" : "Button",
+             "cls" : "x-btn-icon",
+             "$ icon" : "rootURL + '/Pman/templates/images/search.gif'",
+             "$ xns" : "Roo.Toolbar"
+            },
+            {
+             "listeners" : {
+              "|click" : "function (_self, e)\n{\n    _this.searchBox.setValue('');\n    \n        _this.grid.ds.load({});\n}"
+             },
+             "xtype" : "Button",
+             "cls" : "x-btn-icon",
+             "$ icon" : "rootURL + '/Pman/templates/images/edit-clear.gif'",
+             "$ xns" : "Roo.Toolbar"
+            }
+           ]
+          },
+          {
+           "xtype" : "ColumnModel",
+           "sortable" : true,
+           "header" : "ID#",
+           "width" : 50,
+           "$ renderer" : "function(v) { return String.format('#{0}', v); }",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "id"
+          },
+          {
+           "hidden" : true,
+           "xtype" : "ColumnModel",
+           "header" : "Project",
+           "width" : 75,
+           "$ renderer" : "function(v) { return String.format('{0}', v); }",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "project_id_name"
+          },
+          {
+           "xtype" : "ColumnModel",
+           "sortable" : true,
+           "header" : "Milestone",
+           "width" : 75,
+           "$ renderer" : "function(v, x,r ) { return String.format('{0}', r.data.milestone_id_name); }",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "milestone_id",
+           "items" : [
+            {
+             "listeners" : {
+              "complete" : "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
+             },
+             "xtype" : "GridEditor",
+             "$ xns" : "Roo.grid",
+             "* prop" : "editor",
+             "items" : [
+              {
+               "listeners" : {
+                "select" : "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
+               },
+               "alwaysQuery" : true,
+               "listWidth" : 400,
+               "triggerAction" : "all",
+               "forceSelection" : true,
+               "selectOnFocus" : true,
+               "pageSize" : 20,
+               "displayField" : "name",
+               "emptyText" : "Select mtrack_milestone",
+               "hiddenName" : "milestone_id",
+               "minChars" : 2,
+               "valueField" : "id",
+               "xtype" : "ComboBox",
+               "allowBlank" : false,
+               "typeAhead" : true,
+               "editable" : false,
+               "width" : 300,
+               "$ xns" : "Roo.form",
+               "* prop" : "field",
+               "name" : "milestone_id_name",
+               "qtip" : "Select mtrack_milestone",
+               "queryParam" : "",
+               "tpl" : "<div class=\"x-grid-cell-text\"><b>{name}</b> - {startdate:date(\"d/m/Y\")} - {duedate:date(\"d/m/Y\")} </div>",
+               "loadingText" : "Searching...",
+               "items" : [
+                {
+                 "listeners" : {
+                  "|beforeload" : "function (_self, o){\n    o.params = o.params || {};\n    // set more here\n   var rec =   _this.grid.activeEditor.record;\n\n    o.params.project_id = rec.data.project_id;\n    //o.params._viewtype = 'ACTIVE';\n    o.params._viewtype\n}\n"
+                 },
+                 "xtype" : "Store",
+                 "remoteSort" : true,
+                 "$ sortInfo" : "{ direction : 'ASC', field: 'duedate' }",
+                 "$ xns" : "Roo.data",
+                 "* prop" : "store",
+                 "items" : [
+                  {
+                   "$ url" : "baseURL + '/Roo/mtrack_milestone.php'",
+                   "method" : "GET",
+                   "xtype" : "HttpProxy",
+                   "$ xns" : "Roo.data",
+                   "* prop" : "proxy"
+                  },
+                  {
+                   "id" : "id",
+                   "root" : "data",
+                   "xtype" : "JsonReader",
+                   "$ xns" : "Roo.data",
+                   "$ fields" : "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]",
+                   "* prop" : "reader",
+                   "totalProperty" : "total"
+                  }
+                 ]
+                }
+               ]
+              }
+             ]
+            }
+           ]
+          },
+          {
+           "hidden" : true,
+           "xtype" : "ColumnModel",
+           "header" : "Status",
+           "width" : 80,
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "status_name"
+          },
+          {
+           "hidden" : true,
+           "xtype" : "ColumnModel",
+           "header" : "Resolved",
+           "width" : 80,
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "resolution_id_name"
+          },
+          {
+           "xtype" : "ColumnModel",
+           "header" : "Summary",
+           "width" : 200,
+           "$ renderer" : "function(v,x,r) { \n    \n    var col = '#000'; // closed?\n    switch (r.data.status_name) {\n        case 'REVIEW_BY_ADMIN':\n            col = '#0cc'; break; // blue\n        case 'TODO':\n        case 'CLIENT_NEW_REQUEST':        \n        case 'CLIENT_SAY_NEED_MORE_WORK':                \n            col = '#c00'; break; // redish\n        case 'CLOSED':                \n            col = '#999'; break; // grey\n   }\n   \n   var sn = r.data.status_name.toLowerCase().split('_').join(' ');\n   \n    return String.format(\n        r.data.status_name == 'CLOSED'  ?\n              '</span><s style=\"color:{2}\">[{1}]</s> {0}':\n              '<span style=\"color:{2}\">[{1}]</span> {0}',\n            v,\n            r.data.status_name == 'CLOSED'  ?\n                 r.data.resolution_id_name : \n                 sn , col\n            ); \n}\n",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "summary"
+          },
+          {
+           "xtype" : "ColumnModel",
+           "header" : "Owner",
+           "width" : 75,
+           "$ renderer" : "function(v) { return String.format('{0}', v); }",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "owner_id_name"
+          },
+          {
+           "xtype" : "ColumnModel",
+           "header" : "Developer",
+           "width" : 75,
+           "$ renderer" : "function(v,x,r) { return String.format('{0}', r.data.developer_id_name); }",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "developer_id",
+           "items" : [
+            {
+             "xtype" : "GridEditor",
+             "$ xns" : "Roo.grid",
+             "* prop" : "editor",
+             "items" : [
+              {
+               "listeners" : {
+                "select" : "function (combo, record, index)\n{\n  \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
+               },
+               "alwaysQuery" : true,
+               "listWidth" : 400,
+               "triggerAction" : "all",
+               "fieldLabel" : "Action Required By",
+               "forceSelection" : true,
+               "selectOnFocus" : true,
+               "displayField" : "name",
+               "emptyText" : "Select Person",
+               "hiddenName" : "developer_id",
+               "minChars" : 2,
+               "valueField" : "id",
+               "xtype" : "ComboBox",
+               "allowBlank" : true,
+               "typeAhead" : true,
+               "editable" : false,
+               "width" : 200,
+               "$ xns" : "Roo.form",
+               "* prop" : "field",
+               "name" : "developer_id_name",
+               "qtip" : "Select Person",
+               "queryParam" : "query[name]",
+               "tpl" : "<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> &lt;{email}&gt;</div>",
+               "loadingText" : "Searching...",
+               "items" : [
+                {
+                 "listeners" : {
+                  "|beforeload" : "function (_self, o){\n    o.params = o.params || {};\n    // set more here\n   var rec =   _this.grid.activeEditor.record;\n\n    \n    o.params['query[ticket_id]'] = rec.data.id;\n    \n    o.params['query[project_id]']=  rec.data.project_id;\n   o.params._anyrole = 1;\n    o.params.limit = 99;\n}\n"
+                 },
+                 "xtype" : "Store",
+                 "remoteSort" : true,
+                 "$ sortInfo" : "{ direction : 'ASC', field: 'name' }",
+                 "$ xns" : "Roo.data",
+                 "* prop" : "store",
+                 "items" : [
+                  {
+                   "$ url" : "baseURL + '/Roo/Person.php'",
+                   "method" : "GET",
+                   "xtype" : "HttpProxy",
+                   "$ xns" : "Roo.data",
+                   "* prop" : "proxy"
+                  },
+                  {
+                   "id" : "id",
+                   "root" : "data",
+                   "xtype" : "JsonReader",
+                   "$ xns" : "Roo.data",
+                   "$ fields" : "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]",
+                   "* prop" : "reader",
+                   "totalProperty" : "total"
+                  }
+                 ]
+                }
+               ]
+              }
+             ]
+            }
+           ]
+          },
+          {
+           "xtype" : "ColumnModel",
+           "sortable" : true,
+           "header" : "Priority",
+           "width" : 75,
+           "$ renderer" : "function(v,x,r) { \n    x.css +=  \" \" + String.format('RdYlGn-q{0}-{1}', r.data.priority_id_seqid % 10, r.data.priority_id_seqmax % 10 ); \n    return String.format('{0}', r.data.priority_id_name); \n}\n",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "priority_id",
+           "items" : [
+            {
+             "listeners" : {
+              "complete" : "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
+             },
+             "xtype" : "GridEditor",
+             "$ xns" : "Roo.grid",
+             "* prop" : "editor",
+             "items" : [
+              {
+               "listeners" : {
+                "select" : "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
+               },
+               "alwaysQuery" : true,
+               "listWidth" : 400,
+               "triggerAction" : "all",
+               "forceSelection" : true,
+               "selectOnFocus" : true,
+               "pageSize" : 20,
+               "displayField" : "name",
+               "emptyText" : "Select priority",
+               "hiddenName" : "priority_id",
+               "minChars" : 2,
+               "valueField" : "id",
+               "xtype" : "ComboBox",
+               "allowBlank" : false,
+               "typeAhead" : true,
+               "editable" : false,
+               "width" : 300,
+               "$ xns" : "Roo.form",
+               "* prop" : "field",
+               "name" : "priority_id_name",
+               "qtip" : "Select priority",
+               "queryParam" : "",
+               "tpl" : "<div class=\"x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b>  </div>",
+               "loadingText" : "Searching...",
+               "items" : [
+                {
+                 "listeners" : {
+                  "|beforeload" : "function (_self, o){\n    o.params = o.params || {};\n   o.params.etype='priority'\n    // set more here\n    \n}\n"
+                 },
+                 "xtype" : "Store",
+                 "remoteSort" : true,
+                 "$ sortInfo" : "{ direction : 'ASC', field: 'seqid' }",
+                 "$ xns" : "Roo.data",
+                 "* prop" : "store",
+                 "items" : [
+                  {
+                   "$ url" : "baseURL + '/Roo/core_enum.php'",
+                   "xtype" : "HttpProxy",
+                   "method" : "GET",
+                   "$ xns" : "Roo.data",
+                   "* prop" : "proxy"
+                  },
+                  {
+                   "id" : "id",
+                   "root" : "data",
+                   "xtype" : "JsonReader",
+                   "$ xns" : "Roo.data",
+                   "$ fields" : "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]",
+                   "* prop" : "reader",
+                   "totalProperty" : "total"
+                  }
+                 ]
+                }
+               ]
+              }
+             ]
+            }
+           ]
+          },
+          {
+           "xtype" : "ColumnModel",
+           "sortable" : true,
+           "header" : "Severity",
+           "width" : 75,
+           "$ renderer" : "function(v,x,r) { \n    x.css +=  \" \" + String.format('RdYlGn-q{0}-{1}', r.data.severity_id_seqid, r.data.severity_id_seqmax ); \n    return String.format('{0}', r.data.severity_id_name); \n    }",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "severity_id",
+           "items" : [
+            {
+             "listeners" : {
+              "complete" : "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
+             },
+             "xtype" : "GridEditor",
+             "$ xns" : "Roo.grid",
+             "* prop" : "editor",
+             "items" : [
+              {
+               "listeners" : {
+                "select" : "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
+               },
+               "alwaysQuery" : true,
+               "listWidth" : 400,
+               "triggerAction" : "all",
+               "forceSelection" : true,
+               "selectOnFocus" : true,
+               "pageSize" : 20,
+               "displayField" : "name",
+               "emptyText" : "Select severity",
+               "hiddenName" : "severity_id",
+               "minChars" : 2,
+               "valueField" : "id",
+               "xtype" : "ComboBox",
+               "allowBlank" : false,
+               "typeAhead" : true,
+               "editable" : false,
+               "width" : 300,
+               "$ xns" : "Roo.form",
+               "* prop" : "field",
+               "name" : "severity_id_name",
+               "qtip" : "Select severity",
+               "queryParam" : "",
+               "tpl" : "<div class=\"x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b>  </div>",
+               "loadingText" : "Searching...",
+               "items" : [
+                {
+                 "listeners" : {
+                  "|beforeload" : "function (_self, o){\n    o.params = o.params || {};\n   o.params.etype='severity'\n    // set more here\n    \n}\n"
+                 },
+                 "xtype" : "Store",
+                 "remoteSort" : true,
+                 "$ sortInfo" : "{ direction : 'ASC', field: 'seqid' }",
+                 "$ xns" : "Roo.data",
+                 "* prop" : "store",
+                 "items" : [
+                  {
+                   "$ url" : "baseURL + '/Roo/core_enum.php'",
+                   "xtype" : "HttpProxy",
+                   "method" : "GET",
+                   "$ xns" : "Roo.data",
+                   "* prop" : "proxy"
+                  },
+                  {
+                   "id" : "id",
+                   "root" : "data",
+                   "xtype" : "JsonReader",
+                   "$ xns" : "Roo.data",
+                   "$ fields" : "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]",
+                   "* prop" : "reader",
+                   "totalProperty" : "total"
+                  }
+                 ]
+                }
+               ]
+              }
+             ]
+            }
+           ]
+          },
+          {
+           "xtype" : "ColumnModel",
+           "sortable" : true,
+           "header" : "Classification",
+           "width" : 75,
+           "$ renderer" : "function(v,x,r) { \n    x.css +=  \" \" + String.format('RdYlGn-q{0}-{1}', r.data.classification_id_seqid, r.data.classification_id_seqmax ); \n    return String.format('{0}', r.data.classification_id_name); \n    }",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "classification_id",
+           "items" : [
+            {
+             "listeners" : {
+              "complete" : "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
+             },
+             "xtype" : "GridEditor",
+             "$ xns" : "Roo.grid",
+             "* prop" : "editor",
+             "items" : [
+              {
+               "listeners" : {
+                "select" : "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
+               },
+               "alwaysQuery" : true,
+               "listWidth" : 400,
+               "triggerAction" : "all",
+               "forceSelection" : true,
+               "selectOnFocus" : true,
+               "pageSize" : 20,
+               "displayField" : "name",
+               "emptyText" : "Select classification",
+               "hiddenName" : "classification_id",
+               "minChars" : 2,
+               "valueField" : "id",
+               "xtype" : "ComboBox",
+               "allowBlank" : false,
+               "typeAhead" : true,
+               "editable" : false,
+               "width" : 300,
+               "$ xns" : "Roo.form",
+               "* prop" : "field",
+               "name" : "classification_id_name",
+               "qtip" : "Select classification",
+               "queryParam" : "",
+               "tpl" : "<div class=\"x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b>  </div>",
+               "loadingText" : "Searching...",
+               "items" : [
+                {
+                 "listeners" : {
+                  "|beforeload" : "function (_self, o){\n    o.params = o.params || {};\n   o.params.etype='classification'\n    // set more here\n    \n}\n"
+                 },
+                 "xtype" : "Store",
+                 "remoteSort" : true,
+                 "$ sortInfo" : "{ direction : 'ASC', field: 'seqid' }",
+                 "$ xns" : "Roo.data",
+                 "* prop" : "store",
+                 "items" : [
+                  {
+                   "$ url" : "baseURL + '/Roo/core_enum.php'",
+                   "xtype" : "HttpProxy",
+                   "method" : "GET",
+                   "$ xns" : "Roo.data",
+                   "* prop" : "proxy"
+                  },
+                  {
+                   "id" : "id",
+                   "root" : "data",
+                   "xtype" : "JsonReader",
+                   "$ xns" : "Roo.data",
+                   "$ fields" : "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]",
+                   "* prop" : "reader",
+                   "totalProperty" : "total"
+                  }
+                 ]
+                }
+               ]
+              }
+             ]
+            }
+           ]
+          },
+          {
+           "xtype" : "ColumnModel",
+           "header" : "Hours",
+           "width" : 50,
+           "$ renderer" : "function(v,x,r) { \n    return String.format('{0}/{1}', r.data.spent, v); \n}",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "estimated",
+           "items" : [
+            {
+             "xtype" : "GridEditor",
+             "$ xns" : "Roo.grid",
+             "* prop" : "editor",
+             "items" : [
+              {
+               "xtype" : "NumberField",
+               "allowDecimals" : true,
+               "decimalPrecision" : 1,
+               "$ xns" : "Roo.form",
+               "* prop" : "field"
+              }
+             ]
+            }
+           ]
+          },
+          {
+           "hidden" : true,
+           "xtype" : "ColumnModel",
+           "header" : "Spent",
+           "width" : 50,
+           "$ renderer" : "function(v,x,r) { \n    return String.format('{0}',v); \n}",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "spent"
+          },
+          {
+           "xtype" : "ColumnModel",
+           "sortable" : true,
+           "header" : "Updated",
+           "width" : 75,
+           "$ renderer" : "function(v,x,r) { \n\n    \n    var str= Date.parseDate( r.data.updated ? r.json.updated_changedate : r.json.created_changedate, 'Y-m-d H:i:s');\n    \n    \n    return String.format('{0}', str ? str.format('d/M/Y') : '?');\n }",
+           "$ xns" : "Roo.grid",
+           "* prop" : "colModel[]",
+           "dataIndex" : "updated_changedate"
+          },
+          {
+           "listeners" : {
+            "over" : "function (source, e, data)\n{\n\n    Roo.log('over');\n// if drag point == drop point...\n    var grid = _this.grid;\n       var t = Roo.lib.Event.getTarget(e); \n       var ri = grid.view.findRowIndex(t);\n       var dp = this.getDropPoint(e,data);\n       Roo.log(dp);\n       //Roo.log(JSON.stringify({ dp: dp,  ri: ri, src_ri: data.rowIndex}));\n       if(ri == data.rowIndex ||\n            (dp == 'above' && ri-1 == data.rowIndex) ||\n            (dp == 'below' && ri+1 == data.rowIndex) \n         ) {\n           this.expandRow(false);\n      \n            this.valid = false;\n            return;\n       }\n       this.expandRow(ri, dp);\n       \n     \n      this.valid = 'ok-add'; \n}",
+            "drop" : "function (source, e, data)\n{\n        var grid = _this.grid;\n        var t = Roo.lib.Event.getTarget(e); \n        var t = Roo.lib.Event.getTarget(e); \n        var ri = grid.view.findRowIndex(t);\n       //Roo.log(e);\n       //Roo.log(data);\n        var dp = this.getDropPoint(e,data);\n      // at this point should have above or below..\n        var os = grid.selModel.getSelectedCell();\n        grid.ds.remove(data.selections[0]);\n        var new_row = ri + (dp == 'below' ? 1 : 0);\n        grid.ds.insert(new_row , data.selections);\n        grid.selModel.select(new_row , os[1]);\n        this.expandRow(false);\n        \n        \n        var above_id = 0;\n        var above_row = new_row-1;\n        if (above_row > -1) {\n            above_id = grid.ds.getAt(above_row).data.id;\n        }\n        new Pman.Request({\n            method : 'POST',\n            url : baseURL + '/Roo/Mtrack_ticket',\n            params : { \n                id : grid.ds.getAt(new_row).data.id,\n                _reorder : above_id\n            }\n            \n        });\n        \n        \n        \n}"
+           },
+           "xtype" : "DropTarget",
+           "ddGroup" : "mtrack_ticket",
+           "$ xns" : "Roo.dd",
+           "$ getDropPoint" : "function(e, data)\n{\n    //var tn = n.node;\n   // data is from griddragzone\n   \n    var te = Roo.lib.Event.getTarget(e); \n    \n    // use grid??\n    var ri =  Roo.fly(te).findParent(\"td\", 6);\n        \n   \n    var dragEl = ri;\n    var t = Roo.lib.Dom.getY(dragEl),\n        b = t + dragEl.offsetHeight;\n    var y = Roo.lib.Event.getPageY(e);\n    //var noAppend = tn.allowChildren === false || tn.isLeaf();\n    \n    // we may drop nodes anywhere, as long as allowChildren has not been set to false..\n    \n      \n    var q = (b - t) / 2;\n    \n    \n    if(y >= t && y < (t + q)){\n        return \"above\";\n    }\n    if(y >= b-q && y <= b){\n        return \"below\";\n    }\n    //Roo.log( JSON.stringify( {pos: y, dragtop : t, mid : q, drabgot: b }));\n    \n    \n    return false;\n}",
+           "* prop" : "dropTarget",
+           "$ expandRow" : " function(ri,pos)\n{\n    var dom = _this.grid.view.getRow(ri);\n    //Roo.log(dom);\n    //if (this.activeDom == dom) {\n    //    return;\n    //}\n    if (this.activeDom) {\n        Roo.get(this.activeDom).removeClass('x-grid-dd-above');\n        Roo.get(this.activeDom).removeClass('x-grid-dd-below');\n        \n        this.activeDom = false;\n    }\n    \n    if (ri === false) {\n        return;\n    }\n    Roo.get(dom).addClass('x-grid-dd-' + pos);\n     \n    this.activeDom = dom;\n\n\n}"
+          }
+         ]
+        }
+       ]
+      },
+      {
+       "listeners" : {
+        "activate" : "function (_self)\n{\n    _this.tpanel = _self;\n}",
+        "resize" : "function (_self, width, height)\n{\n    // create and update the CSS style\n    \n    if (!_this.css) {\n        _this.css = Roo.util.CSS;\n    \n        _this.css.createStyleSheet(\n            \n                \".ticket-view-main .ticket-left-col {  }\\n\" +\n                \".ticket-view-main .readonly-tkt-description { }\\n\" +\n                \".ticket-view-main .mtrack-ticket-events {} \\n\"\n            ,\n            Roo.id()\n        );   \n         \n    }\n    var w = width - 400;\n    Roo.log(\"new width: \" + Math.max(0,w));\n    \n    _this.css.updateRule(\n        \".ticket-view-main .ticket-left-col\", \n            \"width\", Math.max(0, w) +  'px'\n    );\n     _this.css.updateRule(\n        \".ticket-view-main .readonly-tkt-description\",\n            \"width\", Math.max(0, w-10) +  'px'\n    );\n     _this.css.updateRule(\n        \".ticket-view-main .mtrack-ticket-events\",\n            \"width\", Math.max(0, w-10) +  'px'\n    );\n}"
+       },
+       "autoScroll" : true,
+       "background" : false,
+       "fitToFrame" : true,
+       "region" : "center",
+       "title" : "Tickets",
+       "xtype" : "ContentPanel",
+       "fitContainer" : true,
+       "$ xns" : "Roo",
+       "$ mload" : "function(url) {\n    if (typeof(MTrack) == 'undefined') {\n        return;\n    }\n    this._url = url;\n    this._project = MTrack.projectCombo.getValue();\n    if (!_this.tpanel) {\n        return;\n    }\n    MTrack.ajaxLoad(url, this);\n    MTrackWeb.pushState({\n        url : url,\n        title : \"Browse : \" + url,\n        href : baseURL + url\n    });\n     \n}\n",
+       "items" : [
+        {
+         "xtype" : "Toolbar",
+         "$ xns" : "Roo",
+         "* prop" : "toolbar",
+         "items" : [
+          {
+           "listeners" : {
+            "click" : "function (_self, e)\n{\n    \n    \n    \n    var sels = _this.grid.getSelectionModel().getSelections();\n    if (!sels || sels.length > 1) {\n        Roo.MessageBox.alert(\"Error\", \"Select a ticket\");\n        return;\n    }\n    var rec = sels[0];\n    \n    function ok()\n    {\n        _this.panel.layout.getRegion('south').show();\n        _this.panel.layout.getRegion('north').hide();\n        _this.form.reset();\n        \n        _this.form.setValues({\n            id : rec.data.id,\n            developer_id : rec.data.developer_id,\n            developer_id_name : rec.data.developer_id_name\n        });\n            \n    }\n    \n    if (_this.panel.layout.getRegion('south').isVisible() && _this.form.isDirty()) {\n        Roo.MessageBox.confirm(\"Cancel\", \"Are you sure you want to cancel editing\", function(r) {\n            if (r !='yes') {\n                return;\n            }\n            ok();    \n            \n        });\n        return;\n    }\n    \n    ok();\n    \n\n\n}"
+           },
+           "text" : "Add Comment / Update",
+           "xtype" : "Button",
+           "$ xns" : "Roo.Toolbar"
+          },
+          {
+           "listeners" : {
+            "click" : "function (_self, e)\n{\n      var sels = _this.grid.getSelectionModel().getSelections();\n    if (!sels || sels.length > 1) {\n        Roo.MessageBox.alert(\"Error\", \"Select a ticket\");\n        return;\n    }\n    var rec = sels[0];\n    \n    \n  \n    Pman.Dialog.MTrackTicket.show({ id : rec.data.id } , function(res) {\n        // apply the data to the current row, and reload the display part..\n    \n    });\n    \n    \n    \n}"
+           },
+           "text" : "Edit original ticket",
+           "xtype" : "Button",
+           "$ xns" : "Roo.Toolbar"
+          },
+          {
+           "listeners" : {
+            "click" : "function (_self, e)\n{\n      var sels = _this.grid.getSelectionModel().getSelections();\n    if (!sels || sels.length > 1) {\n        Roo.MessageBox.alert(\"Error\", \"Select a ticket\");\n        return;\n    }\n    var rec = sels[0];\n    \n    Pman.Dialog.Image.show( {\n             onid : rec.data.id,\n             ontable : 'mtrack_ticket'\n         } ,\n         function(res) {\n             // update the body part..\n    \n        }\n    );\n    \n    \n    \n    \n}"
+           },
+           "text" : "Add Attachment / Patch",
+           "xtype" : "Button",
+           "$ xns" : "Roo.Toolbar"
+          },
+          {
+           "text" : "Subscribe",
+           "xtype" : "Button",
+           "$ xns" : "Roo.Toolbar"
+          }
+         ]
+        }
+       ]
+      },
+      {
+       "region" : "south",
+       "xtype" : "ContentPanel",
+       "$ xns" : "Roo",
+       "items" : [
+        {
+         "xtype" : "Toolbar",
+         "$ xns" : "Roo",
+         "* prop" : "toolbar",
+         "items" : [
+          {
+           "listeners" : {
+            "click" : "function (_self, e)\n{\n   if (!_this.form.findField('status').getValue()) {\n        Roo.MessageBox.alert(\"Error\", \"Fill in the new status\");\n        return;\n    }\n    \n   \n    _this.form.submit();\n}"
+           },
+           "text" : "Save",
+           "xtype" : "Button",
+           "$ xns" : "Roo.Toolbar"
+          },
+          {
+           "xtype" : "Fill",
+           "$ xns" : "Roo.Toolbar"
+          },
+          {
+           "listeners" : {
+            "click" : "function (_self, e)\n{\n    _this.form.reset();\n    _this.panel.layout.getRegion('south').hide();\n    _this.panel.layout.getRegion('north').show();\n    _this.panel.layout.getRegion('north').expand();\n}"
+           },
+           "text" : "Cancel",
+           "xtype" : "Button",
+           "$ xns" : "Roo.Toolbar"
+          }
+         ]
+        },
+        {
+         "listeners" : {
+          "|actioncomplete" : "function(_self,action)\n{\n    if (action.type == 'setdata') {\n       //_this.dialog.el.mask(\"Loading\");\n       //this.load({ method: 'GET', params: { '_id' : _this.data.id }});\n       return;\n    }\n    if (action.type == 'load') {\n \n        return;\n    }\n    if (action.type =='submit') {\n    \n         // refresh body..\n        \n         \n         var sm = _this.grid.getSelectionModel();\n\n        sm.fireEvent('afterselectionchange', sm);\n\n          \n         // hide stuff.\n\n         _this.panel.layout.getRegion('south').hide();\n         _this.panel.layout.getRegion('north').show();\n         _this.panel.layout.getRegion('north').expand();\n         \n         _this.form.reset();\n         return;\n    }\n}\n",
+          "|rendered" : "function (form)\n{\n    _this.form= form;\n}\n"
+         },
+         "$ url" : "baseURL + '/Roo/mtrack_ticket.php'",
+         "xtype" : "Form",
+         "method" : "POST",
+         "style" : "margin:10px;",
+         "$ xns" : "Roo.form",
+         "items" : [
+          {
+           "xtype" : "Row",
+           "$ xns" : "Roo.form",
+           "width" : 900,
+           "items" : [
+            {
+             "labelAlign" : "top",
+             "xtype" : "Column",
+             "width" : 500,
+             "$ xns" : "Roo.form",
+             "items" : [
+              {
+               "fieldLabel" : "Your comment",
+               "xtype" : "TextArea",
+               "width" : 400,
+               "$ xns" : "Roo.form",
+               "name" : "reason",
+               "height" : 100
+              }
+             ]
+            },
+            {
+             "labelAlign" : "right",
+             "xtype" : "Column",
+             "labelWidth" : 160,
+             "width" : 400,
+             "$ xns" : "Roo.form",
+             "items" : [
+              {
+               "alwaysQuery" : true,
+               "listWidth" : 300,
+               "triggerAction" : "all",
+               "fieldLabel" : "Status",
+               "forceSelection" : true,
+               "selectOnFocus" : true,
+               "displayField" : "name",
+               "emptyText" : "Change Status",
+               "hiddenName" : "status",
+               "minChars" : 2,
+               "valueField" : "id",
+               "xtype" : "ComboBox",
+               "allowBlank" : true,
+               "typeAhead" : true,
+               "editable" : false,
+               "width" : 200,
+               "$ xns" : "Roo.form",
+               "name" : "status_name",
+               "qtip" : "Change Status",
+               "queryParam" : "query[name]",
+               "tpl" : "<div class=\"x-combo-list-item \">{display_name_mixed} </div>",
+               "loadingText" : "Searching...",
+               "items" : [
+                {
+                 "listeners" : {
+                  "|beforeload" : "function (_self, o){\n    o.params = o.params || {};\n    // set more here\n    o.params['query[ticket_change]'] = _this.form.findField('id').getValue();\n}\n",
+                  "load" : "function (_self, records, options)\n{\n    var cs = _this.grid.getSelectionModel().getSelectedCell();\n    var status  = _this.grid.ds.getAt(cs[0]).data.status;\n    \n    Roo.each(records, function(r) {\n        \n        if (r.data.id == status) {\n            r.set('name', \"No Change\");\n            return;\n        }\n        \n        // me... ??\n        \n        // \n        if (r.data.etype == 'resolution') {\n            r.set('name',   \"Close as \" + r.data.name);\n            return;\n        }\n        r.set('name',  'Change to ' + r.data.name);\n    });\n}"
+                 },
+                 "xtype" : "Store",
+                 "remoteSort" : true,
+                 "$ sortInfo" : "{ direction : 'ASC', field: 'id' }",
+                 "$ xns" : "Roo.data",
+                 "* prop" : "store",
+                 "items" : [
+                  {
+                   "$ url" : "baseURL + '/Roo/Mtrack_ticket.php'",
+                   "xtype" : "HttpProxy",
+                   "method" : "GET",
+                   "$ xns" : "Roo.data",
+                   "* prop" : "proxy"
+                  },
+                  {
+                   "id" : "id",
+                   "root" : "data",
+                   "xtype" : "JsonReader",
+                   "$ fields" : "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"display_name_mixed\",\"type\":\"string\"}, 'name']",
+                   "$ xns" : "Roo.data",
+                   "* prop" : "reader",
+                   "totalProperty" : "total"
+                  }
+                 ]
+                }
+               ]
+              },
+              {
+               "alwaysQuery" : true,
+               "listWidth" : 400,
+               "triggerAction" : "all",
+               "fieldLabel" : "Developer / Action Required By",
+               "forceSelection" : true,
+               "selectOnFocus" : true,
+               "displayField" : "name",
+               "emptyText" : "Select Person",
+               "hiddenName" : "developer_id",
+               "minChars" : 2,
+               "valueField" : "id",
+               "xtype" : "ComboBox",
+               "allowBlank" : true,
+               "typeAhead" : true,
+               "editable" : false,
+               "width" : 200,
+               "$ xns" : "Roo.form",
+               "name" : "developer_id_name",
+               "qtip" : "Select Person",
+               "queryParam" : "query[name]",
+               "tpl" : "<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> &lt;{email}&gt;</div>",
+               "loadingText" : "Searching...",
+               "items" : [
                 {
-                    "|xns": "Roo",
-                    "xtype": "BorderLayout",
-                    "*prop": "layout",
-                    "items": [
-                        {
-                            "*prop": "center",
-                            "tabPosition": "top",
-                            "xtype": "LayoutRegion",
-                            "|xns": "Roo"
-                        },
-                        {
-                            "*prop": "north",
-                            "collapsible": true,
-                            "height": 300,
-                            "split": true,
-                            "tabPosition": "top",
-                            "xtype": "LayoutRegion",
-                            "|xns": "Roo"
-                        },
-                        {
-                            "*prop": "south",
-                            "height": 170,
-                            "split": true,
-                            "xtype": "LayoutRegion",
-                            "|xns": "Roo"
-                        },
-                        {
-                            "listeners": {
-                                "|activate": "function() {\n    _this.gpanel = this;\n    if (_this.grid) {\n        _this.grid.ds.load({});\n    }\n}"
-                            },
-                            "background": true,
-                            "fitContainer": true,
-                            "fitToframe": true,
-                            "region": "north",
-                            "tableName": "mtrack_ticket",
-                            "title": "mtrack_ticket",
-                            "xtype": "GridPanel",
-                            "|xns": "Roo",
-                            "items": [
-                                {
-                                    "listeners": {
-                                        "|render": "function() \n{\n    _this.grid = this; \n    _this.panel.grid = this; // works with doc manager...\n    //_this.dialog = Pman.Dialog.FILL_IN\n    if (_this.gpanel.active) {\n       _this.grid.ds.load({});\n    }\n}",
-                                        "afteredit": "function (e)\n{\n    Roo.log(e);\n    e.record.commit();\n}",
-                                        "celldblclick": "function (_self, rowIndex, columnIndex, e)\n{\n     var c = _this.grid.colModel.getDataIndex(columnIndex);\n    \n    \n    if (c.match(/_id$/) ) {\n        return;\n    }\n    var rec = _this.grid.ds.getAt(rowIndex);\n    Pman.Dialog.MTrackTicket.show({ id : rec.data.id } , function(res) {\n        // update row, and re-render..\n    \n    });\n    \n    \n}"
-                                    },
-                                    "*prop": "grid",
-                                    "autoExpandColumn": "summary",
-                                    "clicksToEdit": 1,
-                                    "ddGroup": "mtrack_ticket",
-                                    "enableDragDrop": true,
-                                    "loadMask": true,
-                                    "xtype": "EditorGrid",
-                                    "|getProjectId": "function() {\n\n      if (typeof(MTrack) != 'undefined') {\n        return  MTrack.projectCombo.getValue();\n      }\n      \n    //       project_id :  _this.grid.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.\n    //      project_id_name : _this.grid.getProjectId(), //MTrack.projectCombo.el.dom.value,\n  \n  \n \n    try {\n         var pr = Pman.Tab.Projects; // shuld be documentsProjects\n         if (!pr || !pr.grid) {\n            return false;\n        }\n    } catch (e) {\n        return false;\n    }\n    var sels = pr.grid.getSelectionModel().getSelections();\n    var prids = [];\n    if (sels.length) {\n        Roo.each(sels,function(s) {\n            prids.push(s.data.id);\n         });\n         // multi support later..\n        return   prids[0];\n     }\n     \n    \n     \n    return 0;\n  \n  \n}\n",
-                                    "|getProjectName": "function() {\n     //  project_id :  _this.grid.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.\n      \n      if (typeof(MTrack) != 'undefined') {\n      \n        return MTrack.projectCombo.el.dom.value;\n      }\n        \n        \n      \n    try {\n         var pr = Pman.Tab.Projects; // shuld be documentsProjects\n         if (!pr || !pr.grid) {\n            return false;\n        }\n    } catch (e) {\n        return false;\n    }\n    var sels = pr.grid.getSelectionModel().getSelections();\n    var prids = [];\n    if (sels.length) {\n        Roo.each(sels,function(s) {\n            prids.push(s.data.name);\n         });\n         // multi support later..\n        return   prids[0];\n     }\n     \n    \n     \n    return '';  \n}\n",
-                                    "|xns": "Roo.grid",
-                                    "items": [
-                                        {
-                                            "listeners": {
-                                                "cellselect": "function (_self, rowIndex, colIndex)\n{\n    var rec = _this.grid.ds.getAt(rowIndex);\n    \n    // verify nothing has chagned.. \n     \n    // load the ticked, and render a view of it...\n    new Pman.Request({\n        url : baseURL + '/Roo/mtrack_ticket',\n        method : 'GET',\n        params : { \n            _id : rec.data.id\n        },\n        success : function(res) {\n            //Roo.log(res.data);\n            // render it into a template..\n            _this.tpanel.setContent(Pman.MTrack.template.ticket_view(res.data));\n            _this.tpanel.el.scrollTo('top',0);\n             \n            //... ehh\n             Pman.MTrack.loadAudit(rec.data.id, _this.tpanel.el.select('.mtrack-ticket-events',true).first());\n         \n            \n           \n            new Pman.Request({\n                url : baseURL + '/Roo/Images',\n                method : 'GET',\n                params : { \n                    onid : rec.data.id,\n                    ontable : 'mtrack_ticket'\n                },\n                success : function(ares) {\n                    Roo.log(ares.data);\n                    var el = Roo.select('.ticket-status-attachments .attachments-list', true).first();\n                    // fill in the attachement area with data from this..\n                    el.dom.innerHTML =  Pman.MTrack.template.ticket_attachments(ares) ;\n                }\n            });\n             \n            \n            _this.form.reset();\n\n            _this.form.setValues({\n                id : rec.data.id,\n                owner_id : rec.data.owner_id,\n                owner_id_name : rec.data.owner_id_name,\n                status : rec.data.status,\n                status_name : \"No Change\"\n            }); \n            \n            \n            for(var k in res.data) {\n                rec.set(k,res.data[k]);\n            }\n            \n        }\n    });\n        \n    \n    \n}"
-                                            },
-                                            "*prop": "sm",
-                                            "xtype": "CellSelectionModel",
-                                            "|xns": "Roo.grid"
-                                        },
-                                        {
-                                            "listeners": {
-                                                "beforeload": "function (_self, options)\n{\n    options.params =     options.params || {};\n    options.params['query[search]'] = _this.searchBox.getValue();\n    var sq =        options.params['query[viewtype]'] = _this.status.getValue(); \n    \n    var ps = _this.personSel.getValue();\n    ps = ps ? ps : 0;\n    if (ps ) {\n        options.params.developer_id = ps <0 ? 0 : ps;\n    }\n\n    \n    \n    \n    var pc = false;\n    try {\n        var pc = _this.grid.colModel.getIndexByDataIndex('project_id_name');\n        \n    } catch(e) {} \n    \n    \n    \n    try { \n        options.params.project_id  = Pman.Tab.DocumentsTab.panel.getProjectId();\n    } catch(e) {\n        options.params.project_id  = MTrack.projectCombo.getValue();\n    }\n    options.params.project_id =      options.params.project_id || undefined;\n     \n     \n       \n    if (  ps < 1 && pc !== false) {\n        _this.grid.colModel.setHidden(pc, true);\n        \n    }\n    \n    // project column\n    if (pc!== false) {\n         _this.grid.colModel.setHidden(pc, true);\n     }\n    if (pc !== false && !options.params.project_id) {\n\n         _this.grid.colModel.setHidden(pc, false);       \n\n    }\n\n    options.params.limit = 999;\n    // columns...\n\n    \n    \n}",
-                                                "update": "function (_self, record, operation)\n{\n    Roo.log('update: ' + JSON.stringify(operation));\n    if (operation != 'commit') {\n        return;\n    }\n    // send things that might change..\n    new Pman.Request({\n        url : baseURL + '/Roo/mtrack_ticket',\n        method : 'POST',\n        params : {\n            id : record.data.id,\n            milestone_id : record.data.milestone_id,\n            priority_id : record.data.priority_id,\n            severity_id : record.data.severity_id,\n            classification_id : record.data.classification_id,\n            estimated : record.data.estimated,\n            developer_id : record.data.developer_id\n        },\n        success : function(res)\n        {\n            var r = res.data;\n            //Roo.log(r);\n            // do nothing?\n            record.modified = record.modified || {};\n            for (var k in r) {\n                // update the \n                if (!k.match(/_id$/) && !k.match(/_id_/)) {\n                    continue;\n                }\n                record.data[k] = r[k];\n                record.modified[k] = r[k];\n            }\n            record.store.afterEdit(record);\n        }\n        // we should really have a failure - to reset to the old value.\n    });\n     \n    \n    \n}"
-                                            },
-                                            "*prop": "dataSource",
-                                            "remoteSort": true,
-                                            "xtype": "Store",
-                                            "|sortInfo": "{ field : 'summary', direction: 'ASC' }",
-                                            "|xns": "Roo.data",
-                                            "items": [
-                                                {
-                                                    "*prop": "proxy",
-                                                    "xtype": "HttpProxy",
-                                                    "method": "GET",
-                                                    "|url": "baseURL + '/Roo/mtrack_ticket.php'",
-                                                    "|xns": "Roo.data"
-                                                },
-                                                {
-                                                    "|xns": "Roo.data",
-                                                    "xtype": "JsonReader",
-                                                    "totalProperty": "total",
-                                                    "root": "data",
-                                                    "*prop": "reader",
-                                                    "id": "id",
-                                                    "|fields": "[\n    {\n        'name': 'id',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id',\n        'type': 'int'\n    },\n    {\n        'name': 'summary',\n        'type': 'string'\n    },\n    {\n        'name': 'description',\n        'type': 'string'\n    },\n    {\n        'name': 'changelog',\n        'type': 'string'\n    },\n    {\n        'name': 'created',\n        'type': 'int'\n    },\n    {\n        'name': 'updated',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id',\n        'type': 'int'\n    },\n    {\n        'name': 'priority_id',\n        'type': 'int'\n    },\n    {\n        'name': 'severity_id',\n        'type': 'int'\n    },\n    {\n        'name': 'classification_id',\n        'type': 'int'\n    },\n    {\n        'name': 'resolution_id',\n        'type': 'int'\n    },\n    {\n        'name': 'cc',\n        'type': 'string'\n    },\n    {\n        'name': 'status',\n        'type': 'int'\n    },\n    {\n        'name': 'estimated',\n        'type': 'float'\n    },\n    {\n        'name': 'spent',\n        'type': 'float'\n    },\n    {\n        'name': 'x_fieldname',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id',\n        'type': 'int'\n    },\n    {\n        'name': 'updated_id',\n        'type': 'int'\n    },\n    {\n        'name': 'updated_person_id',\n        'type': 'int'\n    },\n    {\n        'name': 'updated_ontable',\n        'type': 'string'\n    },\n    {\n        'name': 'updated_onid',\n        'type': 'int'\n    },\n    {\n        'name': 'updated_changedate',\n        'type': 'date'\n    },\n    {\n        'name': 'updated_reason',\n        'type': 'string'\n    },\n    {\n        'name': 'created_id',\n        'type': 'int'\n    },\n    {\n        'name': 'created_person_id',\n        'type': 'int'\n    },\n    {\n        'name': 'created_ontable',\n        'type': 'string'\n    },\n    {\n        'name': 'created_onid',\n        'type': 'int'\n    },\n    {\n        'name': 'created_changedate',\n        'type': 'date'\n    },\n    {\n        'name': 'created_reason',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_office_id',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_phone',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_fax',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_email',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_company_id',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_role',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_remarks',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_passwd',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_owner_id',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_lang',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_no_reset_sent',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_action_type',\n        'type': 'string'\n    },\n    {\n        'name': 'owner_id_project_id',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_deleted_by',\n        'type': 'int'\n    },\n    {\n        'name': 'owner_id_deleted_dt',\n        'type': 'date'\n    },\n    {\n        'name': 'developer_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_office_id',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_phone',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_fax',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_email',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_company_id',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_role',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_remarks',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_passwd',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_owner_id',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_lang',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_no_reset_sent',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_action_type',\n        'type': 'string'\n    },\n    {\n        'name': 'developer_id_project_id',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_deleted_by',\n        'type': 'int'\n    },\n    {\n        'name': 'developer_id_deleted_dt',\n        'type': 'date'\n    },\n    {\n        'name': 'priority_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'priority_id_etype',\n        'type': 'string'\n    },\n    {\n        'name': 'priority_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'priority_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'priority_id_seqid',\n        'type': 'int'\n    },\n    {\n        'name': 'severity_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'severity_id_etype',\n        'type': 'string'\n    },\n    {\n        'name': 'severity_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'severity_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'severity_id_seqid',\n        'type': 'int'\n    },\n    {\n        'name': 'classification_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'classification_id_etype',\n        'type': 'string'\n    },\n    {\n        'name': 'classification_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'classification_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'classification_id_seqid',\n        'type': 'int'\n    },\n    {\n        'name': 'resolution_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'resolution_id_etype',\n        'type': 'string'\n    },\n    {\n        'name': 'resolution_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'resolution_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'resolution_id_seqid',\n        'type': 'int'\n    },\n    {\n        'name': 'status_id',\n        'type': 'int'\n    },\n    {\n        'name': 'status_etype',\n        'type': 'string'\n    },\n    {\n        'name': 'status_name',\n        'type': 'string'\n    },\n    {\n        'name': 'status_active',\n        'type': 'int'\n    },\n    {\n        'name': 'status_seqid',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_remarks',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_owner_id',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_code',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_active',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_type',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_client_id',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_team_id',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_file_location',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_open_date',\n        'type': 'date'\n    },\n    {\n        'name': 'project_id_open_by',\n        'type': 'int'\n    },\n    {\n        'name': 'project_id_close_date',\n        'type': 'date'\n    },\n    {\n        'name': 'project_id_countries',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_languages',\n        'type': 'string'\n    },\n    {\n        'name': 'project_id_agency_id',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id_id',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id_name',\n        'type': 'string'\n    },\n    {\n        'name': 'milestone_id_description',\n        'type': 'string'\n    },\n    {\n        'name': 'milestone_id_startdate',\n        'type': 'date'\n    },\n    {\n        'name': 'milestone_id_duedate',\n        'type': 'date'\n    },\n    {\n        'name': 'milestone_id_completed',\n        'type': 'date'\n    },\n    {\n        'name': 'milestone_id_deleted',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id_created',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id_updated',\n        'type': 'int'\n    },\n    {\n        'name': 'milestone_id_project_id',\n        'type': 'int'\n    }\n]"
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "|xns": "Roo",
-                                            "xtype": "Toolbar",
-                                            "*prop": "toolbar",
-                                            "items": [
-                                                {
-                                                    "listeners": {
-                                                        "click": "function (_self, e)\n{\n  Pman.Dialog.MTrackTicket.show({\n        project_id :  Pman.Tab.DocumentsTab.panel.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.\n        project_id_name : Pman.Tab.DocumentsTab.panel.getProjectName(), //MTrack.projectCombo.el.dom.value,\n        owner_id : Pman.Login.authUser.id,\n        owner_id_name : Pman.Login.authUser.name\n\n  }, function() { \n    _this.grid.ds.load({}); \n    });\n    \n}"
-                                                    },
-                                                    "text": "Add New Ticket",
-                                                    "xtype": "Button",
-                                                    "|xns": "Roo.Toolbar"
-                                                },
-                                                {
-                                                    "listeners": {
-                                                        "click": "function (_self, e)\n{\n    params =    {};\n    params.project_id =  Pman.Tab.DocumentsTab.panel.getProjectId(); // testing.\n    params.limit = 999;\n    // columns...\n    params['query[viewtype]'] = 'active'\n    \n    for (var k in _this.filterBtn) {\n        if (_this.filterBtn[k].pressed) {\n            params['query[viewtype]'] = k;\n        }\n    }\n    var ii =0;\n    Roo.each(_this.grid.colModel.config, function(c,i) {\n        params['csvCols['+i+']'] = c.dataIndex;\n        params['csvTitles['+i+']'] = c.header;\n        try {\n            if (typeof( c.editor.field.name) != 'undefined') {\n                params['csvCols['+i+']'] = c.editor.field.name;\n            }\n        } catch(e) {}\n        ii++;\n    });\n    \n    params['csvCols['+ii+']'] = 'description';\n    params['csvTitles['+ii+']'] = \"Details\";\n        \n    \n    \n    new Pman.Download({\n        url: baseURL + '/Roo/mtrack_ticket',\n        method: 'GET' ,\n        params: params\n        \n    });\n    \n        \n}"
-                                                    },
-                                                    "text": "Download to Excel",
-                                                    "xtype": "Button",
-                                                    "|xns": "Roo.Toolbar"
-                                                },
-                                                {
-                                                    "|xns": "Roo.Toolbar",
-                                                    "xtype": "Fill"
-                                                },
-                                                {
-                                                    "text": "View:",
-                                                    "xtype": "TextItem",
-                                                    "|xns": "Roo.Toolbar"
-                                                },
-                                                {
-                                                    "listeners": {
-                                                        "render": "function (_self)\n{\n_this.searchBox=  _self;\n}",
-                                                        "specialkey": "function (_self, e)\n{\n    _this.grid.ds.load({});\n}"
-                                                    },
-                                                    "xtype": "TextField",
-                                                    "|xns": "Roo.form"
-                                                },
-                                                {
-                                                    "listeners": {
-                                                        "|select": "function (combo, record, index)\n{\n  _this.grid.ds.load({});\n  \n}",
-                                                        "|render": "function (_self)\n{\n    _this.personSel = _self;\n    if (Pman.Login.authUser.id) {\n        this.setFromData({\n            developer_id : Pman.Login.authUser.id,\n            developer_id_name : Pman.Login.authUser.name\n        });\n    \n    }\n}"
-                                                    },
-                                                    "allowBlank": true,
-                                                    "displayField": "developer_id_name",
-                                                    "editable": true,
-                                                    "emptyText": "Select Person ",
-                                                    "fieldLabel": "Person ",
-                                                    "forceSelection": true,
-                                                    "hiddenName": "developer_id",
-                                                    "listWidth": 600,
-                                                    "loadingText": "Searching...",
-                                                    "minChars": 2,
-                                                    "name": "developer_id",
-                                                    "pageSize": 20,
-                                                    "qtip": "Select Person ",
-                                                    "queryParam": "query[name]",
-                                                    "selectOnFocus": true,
-                                                    "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{developer_id_name}</b></div>",
-                                                    "triggerAction": "all",
-                                                    "typeAhead": true,
-                                                    "valueField": "developer_id",
-                                                    "width": 150,
-                                                    "xtype": "ComboBox",
-                                                    "|xns": "Roo.form",
-                                                    "items": [
-                                                        {
-                                                            "listeners": {
-                                                                "|beforeload": "function (_self, o)\n{\n    o.params = o.params || {};\n    o.params._distinct = 'developer_id';\n    o.params._columns = 'developer_id,developer_id_name';\n}",
-                                                                "load": "function (_self, records, options)\n{\n    Roo.log(records);\n    var ua = _this.personSel.store.reader.newRow({\n        developer_id : -1,\n        developer_id_name : '-- Un-assigned --'\n    });\n    this.insert(0,[ua]);\n//    records.unshift(ua);\n}"
-                                                            },
-                                                            "*prop": "store",
-                                                            "xtype": "Store",
-                                                            "|sortInfo": "{ field : 'developer_id_name' , direction : 'ASC' }",
-                                                            "|xns": "Roo.data",
-                                                            "items": [
-                                                                {
-                                                                    "*prop": "proxy",
-                                                                    "method": "GET",
-                                                                    "xtype": "HttpProxy",
-                                                                    "|url": "baseURL + '/Roo/Mtrack_ticket.php'",
-                                                                    "|xns": "Roo.data"
-                                                                },
-                                                                {
-                                                                    "*prop": "reader",
-                                                                    "id": "id",
-                                                                    "root": "data",
-                                                                    "totalProperty": "total",
-                                                                    "xtype": "JsonReader",
-                                                                    "|fields": "[\n    {\n        'name': 'developer_id',\n        'type': 'int'\n    } ,\n        'developer_id_name'\n    \n    \n]",
-                                                                    "|xns": "Roo.data"
-                                                                }
-                                                            ]
-                                                        }
-                                                    ]
-                                                },
-                                                {
-                                                    "listeners": {
-                                                        "render": "function (_self)\n{\n  _this.status = _self;\n}",
-                                                        "select": "function (combo, record, index)\n{\n    Roo.log('select');\n    _this.grid.ds.load({});\n}"
-                                                    },
-                                                    "allowBlank": false,
-                                                    "displayField": "fname",
-                                                    "editable": false,
-                                                    "fieldLabel": "Status",
-                                                    "hiddenName": "cm_status",
-                                                    "listWidth": 200,
-                                                    "mode": "local",
-                                                    "name": "cm_status_name",
-                                                    "triggerAction": "all",
-                                                    "value": "active",
-                                                    "valueField": "ftype",
-                                                    "width": 150,
-                                                    "xtype": "ComboBox",
-                                                    "|xns": "Roo.form",
-                                                    "items": [
-                                                        {
-                                                            "*prop": "store",
-                                                            "xtype": "SimpleStore",
-                                                            "|data": "[ \n    [ 'active', \"Active\"],\n    [ 'me' , \"Assigned to me\"],\n    [ 'me-all' , \"Assigned to me (All projects)\"],    \n    [ 'closed' , \"Closed\"],\n    [ 'pending' , \"Pending Review\"],\n    [ 'in-progress' , \"In Progress\"],\n    [ 'all' , \"All States\"]\n     \n]\n",
-                                                            "|fields": "[  'ftype', 'fname']",
-                                                            "|xns": "Roo.data"
-                                                        }
-                                                    ]
-                                                },
-                                                {
-                                                    "listeners": {
-                                                        "|click": "function (_self, e)\n{\n    _this.grid.ds.load({});\n}"
-                                                    },
-                                                    "cls": "x-btn-icon",
-                                                    "xtype": "Button",
-                                                    "|icon": "rootURL + '/Pman/templates/images/search.gif'",
-                                                    "|xns": "Roo.Toolbar"
-                                                },
-                                                {
-                                                    "listeners": {
-                                                        "|click": "function (_self, e)\n{\n    _this.searchBox.setValue('');\n    \n        _this.grid.ds.load({});\n}"
-                                                    },
-                                                    "cls": "x-btn-icon",
-                                                    "xtype": "Button",
-                                                    "|icon": "rootURL + '/Pman/templates/images/edit-clear.gif'",
-                                                    "|xns": "Roo.Toolbar"
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "id",
-                                            "header": "ID#",
-                                            "sortable": true,
-                                            "width": 50,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v) { return String.format('#{0}', v); }",
-                                            "|xns": "Roo.grid"
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "project_id_name",
-                                            "header": "Project",
-                                            "hidden": true,
-                                            "width": 75,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v) { return String.format('{0}', v); }",
-                                            "|xns": "Roo.grid"
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "milestone_id",
-                                            "header": "Milestone",
-                                            "sortable": true,
-                                            "width": 75,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v, x,r ) { return String.format('{0}', r.data.milestone_id_name); }",
-                                            "|xns": "Roo.grid",
-                                            "items": [
-                                                {
-                                                    "listeners": {
-                                                        "complete": "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
-                                                    },
-                                                    "*prop": "editor",
-                                                    "xtype": "GridEditor",
-                                                    "|xns": "Roo.grid",
-                                                    "items": [
-                                                        {
-                                                            "listeners": {
-                                                                "select": "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
-                                                            },
-                                                            "*prop": "field",
-                                                            "allowBlank": false,
-                                                            "alwaysQuery": true,
-                                                            "displayField": "name",
-                                                            "editable": false,
-                                                            "emptyText": "Select mtrack_milestone",
-                                                            "forceSelection": true,
-                                                            "hiddenName": "milestone_id",
-                                                            "listWidth": 400,
-                                                            "loadingText": "Searching...",
-                                                            "minChars": 2,
-                                                            "name": "milestone_id_name",
-                                                            "pageSize": 20,
-                                                            "qtip": "Select mtrack_milestone",
-                                                            "queryParam": "",
-                                                            "selectOnFocus": true,
-                                                            "tpl": "<div class=\"x-grid-cell-text\"><b>{name}</b> - {startdate:date(\"d/m/Y\")} - {duedate:date(\"d/m/Y\")} </div>",
-                                                            "triggerAction": "all",
-                                                            "typeAhead": true,
-                                                            "valueField": "id",
-                                                            "width": 300,
-                                                            "xtype": "ComboBox",
-                                                            "|xns": "Roo.form",
-                                                            "items": [
-                                                                {
-                                                                    "listeners": {
-                                                                        "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n    // set more here\n   var rec =   _this.grid.activeEditor.record;\n\n    o.params.project_id = rec.data.project_id;\n    //o.params._viewtype = 'ACTIVE';\n    o.params._viewtype\n}\n"
-                                                                    },
-                                                                    "*prop": "store",
-                                                                    "remoteSort": true,
-                                                                    "xtype": "Store",
-                                                                    "|sortInfo": "{ direction : 'ASC', field: 'duedate' }",
-                                                                    "|xns": "Roo.data",
-                                                                    "items": [
-                                                                        {
-                                                                            "*prop": "proxy",
-                                                                            "xtype": "HttpProxy",
-                                                                            "method": "GET",
-                                                                            "|xns": "Roo.data",
-                                                                            "|url": "baseURL + '/Roo/mtrack_milestone.php'"
-                                                                        },
-                                                                        {
-                                                                            "*prop": "reader",
-                                                                            "xtype": "JsonReader",
-                                                                            "|xns": "Roo.data",
-                                                                            "id": "id",
-                                                                            "root": "data",
-                                                                            "totalProperty": "total",
-                                                                            "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
-                                                                        }
-                                                                    ]
-                                                                }
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "summary",
-                                            "header": "Summary",
-                                            "width": 200,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v,x,r) { \n    \n    return String.format(\n        r.data.status_name == 'closed'  ?\n              '{2}<s>[{1}]</s> {0}':\n              '{2}[{1}] {0}',\n            v,\n            r.data.status_name == 'closed'  ?\n                r.data.resolution_id_name : \n                 r.data.status_name ,\n            r.json.jira_ref ?  (r.json.jira_ref+ ' ')  : ''\n            ); \n}\n",
-                                            "|xns": "Roo.grid"
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "owner_id_name",
-                                            "header": "Owner",
-                                            "width": 75,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v) { return String.format('{0}', v); }",
-                                            "|xns": "Roo.grid"
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "developer_id",
-                                            "header": "Developer",
-                                            "width": 75,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v,x,r) { return String.format('{0}', r.data.developer_id_name); }",
-                                            "|xns": "Roo.grid",
-                                            "items": [
-                                                {
-                                                    "|xns": "Roo.grid",
-                                                    "xtype": "GridEditor",
-                                                    "*prop": "editor",
-                                                    "items": [
-                                                        {
-                                                            "listeners": {
-                                                                "select": "function (combo, record, index)\n{\n  \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
-                                                            },
-                                                            "*prop": "field",
-                                                            "allowBlank": true,
-                                                            "alwaysQuery": true,
-                                                            "displayField": "name",
-                                                            "editable": "false",
-                                                            "emptyText": "Select Person",
-                                                            "fieldLabel": "Action Required By",
-                                                            "forceSelection": true,
-                                                            "hiddenName": "developer_id",
-                                                            "listWidth": 400,
-                                                            "loadingText": "Searching...",
-                                                            "minChars": 2,
-                                                            "name": "developer_id_name",
-                                                            "qtip": "Select Person",
-                                                            "queryParam": "query[name]",
-                                                            "selectOnFocus": true,
-                                                            "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> &lt;{email}&gt;</div>",
-                                                            "triggerAction": "all",
-                                                            "typeAhead": true,
-                                                            "valueField": "id",
-                                                            "width": 200,
-                                                            "xtype": "ComboBox",
-                                                            "|xns": "Roo.form",
-                                                            "items": [
-                                                                {
-                                                                    "listeners": {
-                                                                        "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n    // set more here\n   var rec =   _this.grid.activeEditor.record;\n\n    \n    o.params['query[ticket_id]'] = rec.data.id;\n    \n    o.params['query[project_id]']=  rec.data.project_id;\n   o.params._anyrole = 1;\n    o.params.limit = 99;\n}\n"
-                                                                    },
-                                                                    "*prop": "store",
-                                                                    "remoteSort": true,
-                                                                    "xtype": "Store",
-                                                                    "|sortInfo": "{ direction : 'ASC', field: 'name' }",
-                                                                    "|xns": "Roo.data",
-                                                                    "items": [
-                                                                        {
-                                                                            "*prop": "proxy",
-                                                                            "xtype": "HttpProxy",
-                                                                            "method": "GET",
-                                                                            "|xns": "Roo.data",
-                                                                            "|url": "baseURL + '/Roo/Person.php'"
-                                                                        },
-                                                                        {
-                                                                            "*prop": "reader",
-                                                                            "xtype": "JsonReader",
-                                                                            "|xns": "Roo.data",
-                                                                            "id": "id",
-                                                                            "root": "data",
-                                                                            "totalProperty": "total",
-                                                                            "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
-                                                                        }
-                                                                    ]
-                                                                }
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "priority_id",
-                                            "header": "Priority",
-                                            "sortable": true,
-                                            "width": 75,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v,x,r) { \n    x.css +=  \" \" + String.format('RdYlGn-q{0}-{1}', r.data.priority_id_seqid, r.data.priority_id_seqmax ); \n    return String.format('{0}', r.data.priority_id_name); \n    \n}\n",
-                                            "|xns": "Roo.grid",
-                                            "items": [
-                                                {
-                                                    "listeners": {
-                                                        "complete": "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
-                                                    },
-                                                    "*prop": "editor",
-                                                    "xtype": "GridEditor",
-                                                    "|xns": "Roo.grid",
-                                                    "items": [
-                                                        {
-                                                            "listeners": {
-                                                                "select": "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
-                                                            },
-                                                            "*prop": "field",
-                                                            "allowBlank": false,
-                                                            "alwaysQuery": true,
-                                                            "displayField": "name",
-                                                            "editable": false,
-                                                            "emptyText": "Select priority",
-                                                            "forceSelection": true,
-                                                            "hiddenName": "priority_id",
-                                                            "listWidth": 400,
-                                                            "loadingText": "Searching...",
-                                                            "minChars": 2,
-                                                            "name": "priority_id_name",
-                                                            "pageSize": 20,
-                                                            "qtip": "Select priority",
-                                                            "queryParam": "",
-                                                            "selectOnFocus": true,
-                                                            "tpl": "<div class=\"x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b>  </div>",
-                                                            "triggerAction": "all",
-                                                            "typeAhead": true,
-                                                            "valueField": "id",
-                                                            "width": 300,
-                                                            "xtype": "ComboBox",
-                                                            "|xns": "Roo.form",
-                                                            "items": [
-                                                                {
-                                                                    "listeners": {
-                                                                        "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n   o.params.etype='priority'\n    // set more here\n    \n}\n"
-                                                                    },
-                                                                    "*prop": "store",
-                                                                    "remoteSort": true,
-                                                                    "xtype": "Store",
-                                                                    "|sortInfo": "{ direction : 'ASC', field: 'seqid' }",
-                                                                    "|xns": "Roo.data",
-                                                                    "items": [
-                                                                        {
-                                                                            "*prop": "proxy",
-                                                                            "method": "GET",
-                                                                            "xtype": "HttpProxy",
-                                                                            "|url": "baseURL + '/Roo/core_enum.php'",
-                                                                            "|xns": "Roo.data"
-                                                                        },
-                                                                        {
-                                                                            "*prop": "reader",
-                                                                            "xtype": "JsonReader",
-                                                                            "|xns": "Roo.data",
-                                                                            "id": "id",
-                                                                            "root": "data",
-                                                                            "totalProperty": "total",
-                                                                            "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
-                                                                        }
-                                                                    ]
-                                                                }
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "severity_id",
-                                            "header": "Severity",
-                                            "sortable": true,
-                                            "width": 75,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v,x,r) { \n    x.css +=  \" \" + String.format('RdYlGn-q{0}-{1}', r.data.severity_id_seqid, r.data.severity_id_seqmax ); \n    return String.format('{0}', r.data.severity_id_name); \n    }",
-                                            "|xns": "Roo.grid",
-                                            "items": [
-                                                {
-                                                    "listeners": {
-                                                        "complete": "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
-                                                    },
-                                                    "*prop": "editor",
-                                                    "xtype": "GridEditor",
-                                                    "|xns": "Roo.grid",
-                                                    "items": [
-                                                        {
-                                                            "listeners": {
-                                                                "select": "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
-                                                            },
-                                                            "*prop": "field",
-                                                            "allowBlank": false,
-                                                            "alwaysQuery": true,
-                                                            "displayField": "name",
-                                                            "editable": false,
-                                                            "emptyText": "Select severity",
-                                                            "forceSelection": true,
-                                                            "hiddenName": "severity_id",
-                                                            "listWidth": 400,
-                                                            "loadingText": "Searching...",
-                                                            "minChars": 2,
-                                                            "name": "severity_id_name",
-                                                            "pageSize": 20,
-                                                            "qtip": "Select severity",
-                                                            "queryParam": "",
-                                                            "selectOnFocus": true,
-                                                            "tpl": "<div class=\"x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b>  </div>",
-                                                            "triggerAction": "all",
-                                                            "typeAhead": true,
-                                                            "valueField": "id",
-                                                            "width": 300,
-                                                            "xtype": "ComboBox",
-                                                            "|xns": "Roo.form",
-                                                            "items": [
-                                                                {
-                                                                    "listeners": {
-                                                                        "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n   o.params.etype='severity'\n    // set more here\n    \n}\n"
-                                                                    },
-                                                                    "*prop": "store",
-                                                                    "remoteSort": true,
-                                                                    "xtype": "Store",
-                                                                    "|sortInfo": "{ direction : 'ASC', field: 'seqid' }",
-                                                                    "|xns": "Roo.data",
-                                                                    "items": [
-                                                                        {
-                                                                            "*prop": "proxy",
-                                                                            "method": "GET",
-                                                                            "xtype": "HttpProxy",
-                                                                            "|url": "baseURL + '/Roo/core_enum.php'",
-                                                                            "|xns": "Roo.data"
-                                                                        },
-                                                                        {
-                                                                            "*prop": "reader",
-                                                                            "xtype": "JsonReader",
-                                                                            "|xns": "Roo.data",
-                                                                            "id": "id",
-                                                                            "root": "data",
-                                                                            "totalProperty": "total",
-                                                                            "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
-                                                                        }
-                                                                    ]
-                                                                }
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "classification_id",
-                                            "header": "Classification",
-                                            "sortable": true,
-                                            "width": 75,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v,x,r) { \n    x.css +=  \" \" + String.format('RdYlGn-q{0}-{1}', r.data.classification_id_seqid, r.data.classification_id_seqmax ); \n    return String.format('{0}', r.data.classification_id_name); \n    }",
-                                            "|xns": "Roo.grid",
-                                            "items": [
-                                                {
-                                                    "listeners": {
-                                                        "complete": "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
-                                                    },
-                                                    "*prop": "editor",
-                                                    "xtype": "GridEditor",
-                                                    "|xns": "Roo.grid",
-                                                    "items": [
-                                                        {
-                                                            "listeners": {
-                                                                "select": "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
-                                                            },
-                                                            "*prop": "field",
-                                                            "allowBlank": false,
-                                                            "alwaysQuery": true,
-                                                            "displayField": "name",
-                                                            "editable": false,
-                                                            "emptyText": "Select classification",
-                                                            "forceSelection": true,
-                                                            "hiddenName": "classification_id",
-                                                            "listWidth": 400,
-                                                            "loadingText": "Searching...",
-                                                            "minChars": 2,
-                                                            "name": "classification_id_name",
-                                                            "pageSize": 20,
-                                                            "qtip": "Select classification",
-                                                            "queryParam": "",
-                                                            "selectOnFocus": true,
-                                                            "tpl": "<div class=\"x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b>  </div>",
-                                                            "triggerAction": "all",
-                                                            "typeAhead": true,
-                                                            "valueField": "id",
-                                                            "width": 300,
-                                                            "xtype": "ComboBox",
-                                                            "|xns": "Roo.form",
-                                                            "items": [
-                                                                {
-                                                                    "listeners": {
-                                                                        "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n   o.params.etype='classification'\n    // set more here\n    \n}\n"
-                                                                    },
-                                                                    "*prop": "store",
-                                                                    "remoteSort": true,
-                                                                    "xtype": "Store",
-                                                                    "|sortInfo": "{ direction : 'ASC', field: 'seqid' }",
-                                                                    "|xns": "Roo.data",
-                                                                    "items": [
-                                                                        {
-                                                                            "*prop": "proxy",
-                                                                            "method": "GET",
-                                                                            "xtype": "HttpProxy",
-                                                                            "|url": "baseURL + '/Roo/core_enum.php'",
-                                                                            "|xns": "Roo.data"
-                                                                        },
-                                                                        {
-                                                                            "*prop": "reader",
-                                                                            "xtype": "JsonReader",
-                                                                            "|xns": "Roo.data",
-                                                                            "id": "id",
-                                                                            "root": "data",
-                                                                            "totalProperty": "total",
-                                                                            "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
-                                                                        }
-                                                                    ]
-                                                                }
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "resolution_id",
-                                            "header": "Resolution",
-                                            "hidden": true,
-                                            "width": 75,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v) { return String.format('{0}', v); }",
-                                            "|xns": "Roo.grid"
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "estimated",
-                                            "header": "Hours",
-                                            "width": 50,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v,x,r) { \n    return String.format('{0}/{1}', r.data.spent, v); \n}",
-                                            "|xns": "Roo.grid",
-                                            "items": [
-                                                {
-                                                    "|xns": "Roo.grid",
-                                                    "xtype": "GridEditor",
-                                                    "*prop": "editor",
-                                                    "items": [
-                                                        {
-                                                            "*prop": "field",
-                                                            "allowDecimals": true,
-                                                            "decimalPrecision": 1,
-                                                            "xtype": "NumberField",
-                                                            "|xns": "Roo.form"
-                                                        }
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "*prop": "colModel[]",
-                                            "dataIndex": "updated_changedate",
-                                            "header": "Updated",
-                                            "sortable": true,
-                                            "width": 75,
-                                            "xtype": "ColumnModel",
-                                            "|renderer": "function(v,x,r) { \n\n    \n    var str= Date.parseDate( r.data.updated ? r.json.updated_changedate : r.json.created_changedate, 'Y-m-d H:i:s');\n    \n    \n    return String.format('{0}', str ? str.format('d/M/Y') : '?');\n }",
-                                            "|xns": "Roo.grid"
-                                        },
-                                        {
-                                            "listeners": {
-                                                "over": "function (source, e, data)\n{\n\n    Roo.log('over');\n// if drag point == drop point...\n    var grid = _this.grid;\n       var t = Roo.lib.Event.getTarget(e); \n       var ri = grid.view.findRowIndex(t);\n       var dp = this.getDropPoint(e,data);\n       Roo.log(dp);\n       //Roo.log(JSON.stringify({ dp: dp,  ri: ri, src_ri: data.rowIndex}));\n       if(ri == data.rowIndex ||\n            (dp == 'above' && ri-1 == data.rowIndex) ||\n            (dp == 'below' && ri+1 == data.rowIndex) \n         ) {\n           this.expandRow(false);\n      \n            this.valid = false;\n            return;\n       }\n       this.expandRow(ri, dp);\n       \n     \n      this.valid = 'ok-add'; \n}",
-                                                "drop": "function (source, e, data)\n{\n        var grid = _this.grid;\n        var t = Roo.lib.Event.getTarget(e); \n        var t = Roo.lib.Event.getTarget(e); \n        var ri = grid.view.findRowIndex(t);\n       //Roo.log(e);\n       //Roo.log(data);\n        var dp = this.getDropPoint(e,data);\n      // at this point should have above or below..\n        var os = grid.selModel.getSelectedCell()\n        grid.ds.remove(data.selections[0]);\n        var new_row = ri + (dp == 'below' ? 1 : 0);\n        grid.ds.insert(new_row , data.selections);\n        grid.selModel.select(new_row , os[1])\n        this.expandRow(false);\n        \n        \n        var above_id = 0;\n        var above_row = new_row-1;\n        if (above_row > -1) {\n            above_id = grid.ds.getAt(above_row).data.id;\n        }\n        new Pman.Request({\n            method : 'POST',\n            url : baseURL + '/Roo/Mtrack_ticket',\n            params : { \n                id : grid.ds.getAt(new_row).data.id,\n                _reorder : above_id\n            }\n            \n        });\n        \n        \n        \n}"
-                                            },
-                                            "*prop": "dropTarget",
-                                            "ddGroup": "mtrack_ticket",
-                                            "xtype": "DropTarget",
-                                            "|expandRow": " function(ri,pos)\n{\n    var dom = _this.grid.view.getRow(ri);\n    //Roo.log(dom);\n    //if (this.activeDom == dom) {\n    //    return;\n    //}\n    if (this.activeDom) {\n        Roo.get(this.activeDom).removeClass('x-grid-dd-above');\n        Roo.get(this.activeDom).removeClass('x-grid-dd-below');\n        \n        this.activeDom = false;\n    }\n    \n    if (ri === false) {\n        return;\n    }\n    Roo.get(dom).addClass('x-grid-dd-' + pos);\n     \n    this.activeDom = dom;\n\n\n}",
-                                            "|getDropPoint": "function(e, data)\n{\n    //var tn = n.node;\n   // data is from griddragzone\n   \n    var te = Roo.lib.Event.getTarget(e); \n    \n    // use grid??\n    var ri =  Roo.fly(te).findParent(\"td\", 6);\n        \n   \n    var dragEl = ri;\n    var t = Roo.lib.Dom.getY(dragEl),\n        b = t + dragEl.offsetHeight;\n    var y = Roo.lib.Event.getPageY(e);\n    //var noAppend = tn.allowChildren === false || tn.isLeaf();\n    \n    // we may drop nodes anywhere, as long as allowChildren has not been set to false..\n    \n      \n    var q = (b - t) / 2;\n    \n    \n    if(y >= t && y < (t + q)){\n        return \"above\";\n    }\n    if(y >= b-q && y <= b){\n        return \"below\";\n    }\n    //Roo.log( JSON.stringify( {pos: y, dragtop : t, mid : q, drabgot: b }));\n    \n    \n    return false;\n}",
-                                            "|xns": "Roo.dd"
-                                        }
-                                    ]
-                                }
-                            ]
-                        },
-                        {
-                            "listeners": {
-                                "activate": "function (_self)\n{\n    _this.tpanel = _self;\n}",
-                                "resize": "function (_self, width, height)\n{\n    // create and update the CSS style\n    \n    if (!_this.css) {\n        _this.css = Roo.util.CSS;\n    \n        _this.css.createStyleSheet(\n            \n                \".ticket-view-main .ticket-left-col {  }\\n\" +\n                \".ticket-view-main .readonly-tkt-description { }\\n\" +\n                \".ticket-view-main .mtrack-ticket-events {} \\n\"\n            ,\n            Roo.id()\n        );   \n         \n    }\n    var w = width - 400;\n    Roo.log(\"new width: \" + Math.max(0,w));\n    \n    _this.css.updateRule(\n        \".ticket-view-main .ticket-left-col\", \n            \"width\", Math.max(0, w) +  'px'\n    );\n     _this.css.updateRule(\n        \".ticket-view-main .readonly-tkt-description\",\n            \"width\", Math.max(0, w-10) +  'px'\n    );\n     _this.css.updateRule(\n        \".ticket-view-main .mtrack-ticket-events\",\n            \"width\", Math.max(0, w-10) +  'px'\n    );\n}"
-                            },
-                            "autoScroll": true,
-                            "background": false,
-                            "fitContainer": true,
-                            "fitToFrame": true,
-                            "region": "center",
-                            "title": "Tickets",
-                            "xtype": "ContentPanel",
-                            "|mload": "function(url) {\n    if (typeof(MTrack) == 'undefined') {\n        return;\n    }\n    this._url = url;\n    this._project = MTrack.projectCombo.getValue();\n    if (!_this.tpanel) {\n        return;\n    }\n    MTrack.ajaxLoad(url, this);\n    MTrackWeb.pushState({\n        url : url,\n        title : \"Browse : \" + url,\n        href : baseURL + url\n    });\n     \n}\n",
-                            "|xns": "Roo",
-                            "items": [
-                                {
-                                    "|xns": "Roo",
-                                    "xtype": "Toolbar",
-                                    "*prop": "toolbar",
-                                    "items": [
-                                        {
-                                            "listeners": {
-                                                "click": "function (_self, e)\n{\n    \n    \n    \n    var rc = _this.grid.getSelectionModel().getSelectedCell()\n    if (!rc) {\n        Roo.MessageBox.alert(\"Error\", \"Select a ticket\");\n        return;\n    }\n    \n    \n    function ok()\n    {\n        _this.panel.layout.getRegion('south').show();\n        _this.panel.layout.getRegion('north').hide();\n        _this.form.reset();\n       var rec =  _this.grid.ds.getAt(rc[0]);\n        _this.form.setValues({\n            id : rec.data.id\n        });\n            \n    }\n    \n    if (_this.panel.layout.getRegion('south').isVisible() && _this.form.isDirty()) {\n        Roo.MessageBox.confirm(\"Cancel\", \"Are you sure you want to cancel editing\", function(r) {\n            if (r !='yes') {\n                return;\n            }\n            ok();    \n            \n        });\n        return;\n    }\n    \n    ok();\n    \n\n\n}"
-                                            },
-                                            "text": "Add Comment / Update",
-                                            "xtype": "Button",
-                                            "|xns": "Roo.Toolbar"
-                                        },
-                                        {
-                                            "listeners": {
-                                                "click": "function (_self, e)\n{\n    var rc = _this.grid.getSelectionModel().getSelectedCell()\n    if (!rc) {\n        Roo.MessageBox.alert(\"Error\", \"Select a ticket\");\n        return;\n    }\n    var rec = _this.grid.ds.getAt(rc[0]);\n    Pman.Dialog.MTrackTicket.show({ id : rec.data.id } , function(res) {\n        // apply the data to the current row, and reload the display part..\n    \n    });\n    \n    \n    \n}"
-                                            },
-                                            "text": "Edit original ticket",
-                                            "xtype": "Button",
-                                            "|xns": "Roo.Toolbar"
-                                        },
-                                        {
-                                            "listeners": {
-                                                "click": "function (_self, e)\n{\n    var rc = _this.grid.getSelectionModel().getSelectedCell()\n    if (!rc) {\n        Roo.MessageBox.alert(\"Error\", \"Select a ticket\");\n        return;\n    }\n    var rec = _this.grid.ds.getAt(rc[0]);\n    Pman.Dialog.Image.show( {\n             onid : rec.data.id,\n             ontable : 'mtrack_ticket'\n         } ,\n         function(res) {\n             // update the body part..\n    \n        }\n    );\n    \n    \n    \n    \n}"
-                                            },
-                                            "text": "Add Attachment / Patch",
-                                            "xtype": "Button",
-                                            "|xns": "Roo.Toolbar"
-                                        },
-                                        {
-                                            "text": "Subscribe",
-                                            "xtype": "Button",
-                                            "|xns": "Roo.Toolbar"
-                                        }
-                                    ]
-                                }
-                            ]
-                        },
-                        {
-                            "region": "south",
-                            "xtype": "ContentPanel",
-                            "|xns": "Roo",
-                            "items": [
-                                {
-                                    "|xns": "Roo",
-                                    "xtype": "Toolbar",
-                                    "*prop": "toolbar",
-                                    "items": [
-                                        {
-                                            "listeners": {
-                                                "click": "function (_self, e)\n{\n    _this.form.submit();\n}"
-                                            },
-                                            "text": "Save",
-                                            "xtype": "Button",
-                                            "|xns": "Roo.Toolbar"
-                                        },
-                                        {
-                                            "|xns": "Roo.Toolbar",
-                                            "xtype": "Fill"
-                                        },
-                                        {
-                                            "listeners": {
-                                                "click": "function (_self, e)\n{\n    _this.form.reset();\n    _this.panel.layout.getRegion('south').hide();\n    _this.panel.layout.getRegion('north').show();\n    _this.panel.layout.getRegion('north').expand();\n}"
-                                            },
-                                            "text": "Cancel",
-                                            "xtype": "Button",
-                                            "|xns": "Roo.Toolbar"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "listeners": {
-                                        "|actioncomplete": "function(_self,action)\n{\n    if (action.type == 'setdata') {\n       //_this.dialog.el.mask(\"Loading\");\n       //this.load({ method: 'GET', params: { '_id' : _this.data.id }});\n       return;\n    }\n    if (action.type == 'load') {\n \n        return;\n    }\n    if (action.type =='submit') {\n    \n         // refresh body..\n        \n         \n         var sm = _this.grid.getSelectionModel();\n         var cs = sm.getSelectedCell();\n         sm.fireEvent('cellselect',  sm, cs[0], cs[1] );\n          \n         // hide stuff.\n\n         _this.panel.layout.getRegion('south').hide();\n         _this.panel.layout.getRegion('north').show();\n         _this.panel.layout.getRegion('north').expand();\n         \n         _this.form.reset();\n         return;\n    }\n}\n",
-                                        "|rendered": "function (form)\n{\n    _this.form= form;\n}\n"
-                                    },
-                                    "method": "POST",
-                                    "style": "margin:10px;",
-                                    "xtype": "Form",
-                                    "|url": "baseURL + '/Roo/mtrack_ticket.php'",
-                                    "|xns": "Roo.form",
-                                    "items": [
-                                        {
-                                            "width": 900,
-                                            "xtype": "Row",
-                                            "|xns": "Roo.form",
-                                            "items": [
-                                                {
-                                                    "labelAlign": "top",
-                                                    "width": 500,
-                                                    "xtype": "Column",
-                                                    "|xns": "Roo.form",
-                                                    "items": [
-                                                        {
-                                                            "fieldLabel": "Your comment",
-                                                            "height": 100,
-                                                            "name": "reason",
-                                                            "width": 400,
-                                                            "xtype": "TextArea",
-                                                            "|xns": "Roo.form"
-                                                        }
-                                                    ]
-                                                },
-                                                {
-                                                    "labelAlign": "right",
-                                                    "labelWidth": 140,
-                                                    "width": 400,
-                                                    "xtype": "Column",
-                                                    "|xns": "Roo.form",
-                                                    "items": [
-                                                        {
-                                                            "allowBlank": true,
-                                                            "alwaysQuery": true,
-                                                            "displayField": "name",
-                                                            "editable": false,
-                                                            "emptyText": "Change Status",
-                                                            "fieldLabel": "Status",
-                                                            "forceSelection": true,
-                                                            "hiddenName": "status",
-                                                            "listWidth": 200,
-                                                            "loadingText": "Searching...",
-                                                            "minChars": 2,
-                                                            "name": "status_name",
-                                                            "qtip": "Change Status",
-                                                            "queryParam": "query[name]",
-                                                            "selectOnFocus": true,
-                                                            "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> </div>",
-                                                            "triggerAction": "all",
-                                                            "typeAhead": true,
-                                                            "valueField": "id",
-                                                            "width": 200,
-                                                            "xtype": "ComboBox",
-                                                            "|xns": "Roo.form",
-                                                            "items": [
-                                                                {
-                                                                    "listeners": {
-                                                                        "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n    // set more here\n    o.params['query[ticket_change]'] = _this.form.findField('id').getValue();\n}\n",
-                                                                        "load": "function (_self, records, options)\n{\n    var cs = _this.grid.getSelectionModel().getSelectedCell();\n    var status  = _this.grid.ds.getAt(cs[0]).data.status;\n    \n    Roo.each(records, function(r) {\n        \n        if (r.data.id == status) {\n            r.set('name', \"No Change\");\n            return;\n        }\n        \n        // me... ??\n        \n        // \n        if (r.data.etype == 'resolution') {\n            r.set('name',   \"Close as \" + r.data.name);\n            return;\n        }\n        r.set('name',  'Change to ' + r.data.name);\n    });\n}"
-                                                                    },
-                                                                    "*prop": "store",
-                                                                    "remoteSort": true,
-                                                                    "xtype": "Store",
-                                                                    "|sortInfo": "{ direction : 'ASC', field: 'id' }",
-                                                                    "|xns": "Roo.data",
-                                                                    "items": [
-                                                                        {
-                                                                            "*prop": "proxy",
-                                                                            "method": "GET",
-                                                                            "xtype": "HttpProxy",
-                                                                            "|url": "baseURL + '/Roo/core_enum.php'",
-                                                                            "|xns": "Roo.data"
-                                                                        },
-                                                                        {
-                                                                            "*prop": "reader",
-                                                                            "id": "id",
-                                                                            "root": "data",
-                                                                            "totalProperty": "total",
-                                                                            "xtype": "JsonReader",
-                                                                            "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]",
-                                                                            "|xns": "Roo.data"
-                                                                        }
-                                                                    ]
-                                                                }
-                                                            ]
-                                                        },
-                                                        {
-                                                            "allowBlank": true,
-                                                            "alwaysQuery": true,
-                                                            "displayField": "name",
-                                                            "editable": "false",
-                                                            "emptyText": "Select Person",
-                                                            "fieldLabel": "Action Required By",
-                                                            "forceSelection": true,
-                                                            "hiddenName": "developer_id",
-                                                            "listWidth": 400,
-                                                            "loadingText": "Searching...",
-                                                            "minChars": 2,
-                                                            "name": "developer_id_name",
-                                                            "qtip": "Select Person",
-                                                            "queryParam": "query[name]",
-                                                            "selectOnFocus": true,
-                                                            "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> &lt;{email}&gt;</div>",
-                                                            "triggerAction": "all",
-                                                            "typeAhead": true,
-                                                            "valueField": "id",
-                                                            "width": 200,
-                                                            "xtype": "ComboBox",
-                                                            "|xns": "Roo.form",
-                                                            "items": [
-                                                                {
-                                                                    "listeners": {
-                                                                        "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n    // set more here\n    o.params['query[ticket_id]'] =_this.grid.getSelected().data.id;\n    \n    o.params['query[project_id]']= _this.grid.getSelected().data.project_id;\n    o.params._anyrole = 1;\n    \n    o.params.limit = 999;\n}\n"
-                                                                    },
-                                                                    "*prop": "store",
-                                                                    "remoteSort": true,
-                                                                    "xtype": "Store",
-                                                                    "|sortInfo": "{ direction : 'ASC', field: 'name' }",
-                                                                    "|xns": "Roo.data",
-                                                                    "items": [
-                                                                        {
-                                                                            "*prop": "proxy",
-                                                                            "xtype": "HttpProxy",
-                                                                            "method": "GET",
-                                                                            "|xns": "Roo.data",
-                                                                            "|url": "baseURL + '/Roo/Person.php'"
-                                                                        },
-                                                                        {
-                                                                            "*prop": "reader",
-                                                                            "xtype": "JsonReader",
-                                                                            "|xns": "Roo.data",
-                                                                            "id": "id",
-                                                                            "root": "data",
-                                                                            "totalProperty": "total",
-                                                                            "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
-                                                                        }
-                                                                    ]
-                                                                }
-                                                            ]
-                                                        },
-                                                        {
-                                                            "decimalPrecision": 2,
-                                                            "fieldLabel": "Log hours",
-                                                            "width": 80,
-                                                            "xtype": "NumberField",
-                                                            "|xns": "Roo.form"
-                                                        }
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "name": "id",
-                                            "xtype": "Hidden",
-                                            "|xns": "Roo.form"
-                                        }
-                                    ]
-                                }
-                            ]
-                        }
-                    ]
+                 "listeners" : {
+                  "|beforeload" : "function (_self, o){\n    o.params = o.params || {};\n    // set more here\n    o.params['query[ticket_id]'] =_this.grid.sm.getSelected().data.id;\n    \n    o.params['query[project_id]']= _this.grid.sm.getSelected().data.project_id;\n    o.params._anyrole = 1;\n    \n    o.params.limit = 999;\n}\n"
+                 },
+                 "xtype" : "Store",
+                 "remoteSort" : true,
+                 "$ sortInfo" : "{ direction : 'ASC', field: 'name' }",
+                 "$ xns" : "Roo.data",
+                 "* prop" : "store",
+                 "items" : [
+                  {
+                   "$ url" : "baseURL + '/Roo/core_person.php'",
+                   "method" : "GET",
+                   "xtype" : "HttpProxy",
+                   "$ xns" : "Roo.data",
+                   "* prop" : "proxy"
+                  },
+                  {
+                   "id" : "id",
+                   "root" : "data",
+                   "xtype" : "JsonReader",
+                   "$ xns" : "Roo.data",
+                   "$ fields" : "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]",
+                   "* prop" : "reader",
+                   "totalProperty" : "total"
+                  }
+                 ]
                 }
-            ]
+               ]
+              }
+             ]
+            }
+           ]
+          },
+          {
+           "xtype" : "Hidden",
+           "$ xns" : "Roo.form",
+           "name" : "id"
+          }
+         ]
         }
-    ],
-    "permname": "",
-    "modOrder": "001"
+       ]
+      }
+     ]
+    }
+   ]
+  }
+ ]
 }
\ No newline at end of file