templates/view.html
[Pman.MTrack] / Pman.Tab.MTrackTicket.bjs
index 9953b13..7de959b 100644 (file)
@@ -6,12 +6,15 @@
  "permname" : "",
  "modOrder" : "001",
  "strings" : {
-  "fd7535ce3979bb8547e2c01689db0767" : "Select Person ",
+  "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",
   "672caf27f5363dc833bda5099775e891" : "Developer",
   "6a7e73161603d87b26a8eac49dab0a9c" : "Hours",
   "ff0a3b7f3daef040faf89a88fdac01b7" : "Updated",
-  "340c2ee497b85d5954b01c64de7f44f6" : "Select Person",
   "b1550c2a1a5eb0d078d92eef8a0ef883" : "ID#",
-  "ec53a8c4f07baed5d8825072c89799be" : "Status",
   "9e727fdd3aec8274f46685441900280d" : "Project",
+  "ec53a8c4f07baed5d8825072c89799be" : "Status",
   "ea4788705e6873b424c65e91c2846b19" : "Cancel",
+  "a3edc4e7beafdcd450f339ec414b7508" : "Developer / Action Required By",
   "c1c694bd849d91d0eb34bfef8c2d8894" : "Tickets",
   "a5ffb2a210f259195a75e5abca8db4a2" : "Select mtrack_milestone",
   "3efbc55730fd4af147b96183d8afbd3b" : "mtrack_ticket",
   "e9c626b8a8b62de7562dfbf51a576ae5" : "Milestone",
   "b26917587d98330d93f87808fc9d7267" : "Subscribe",
   "f691f042a559b1c1a4f89826c6f75760" : "Resolved",
-  "c9cc8cce247e49bae79f15173ce97354" : "Save",
   "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}"
    },
+   "background" : true,
    "region" : "center",
    "fitToFrame" : true,
-   "background" : true,
    "title" : "Tickets",
    "xtype" : "NestedLayoutPanel",
    "fitContainer" : true,
@@ -62,8 +94,8 @@
      "items" : [
       {
        "xtype" : "LayoutRegion",
-       "$ xns" : "Roo",
        "tabPosition" : "top",
+       "$ xns" : "Roo",
        "* prop" : "center"
       },
       {
        "listeners" : {
         "|activate" : "function() {\n    _this.gpanel = this;\n    if (_this.grid) {\n        _this.grid.ds.load({});\n    }\n}"
        },
+       "background" : true,
        "region" : "north",
        "fitToframe" : true,
-       "background" : true,
        "title" : "mtrack_ticket",
        "xtype" : "GridPanel",
        "fitContainer" : true,
          "items" : [
           {
            "listeners" : {
-            "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            \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}",
-            "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}"
+            "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",
            "items" : [
             {
              "$ url" : "baseURL + '/Roo/mtrack_ticket.php'",
-             "xtype" : "HttpProxy",
              "method" : "GET",
+             "xtype" : "HttpProxy",
              "$ xns" : "Roo.data",
              "* prop" : "proxy"
             },
             },
             {
              "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}"
+              "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",
             },
             {
              "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}"
+              "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",
                 "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",
-               "$ xns" : "Roo.data",
                "$ sortInfo" : "{ field : 'developer_id_name' , dir : 'ASC' }",
+               "$ xns" : "Roo.data",
                "* prop" : "store",
                "items" : [
                 {
                  "$ url" : "baseURL + '/Roo/Mtrack_ticket.php'",
-                 "method" : "GET",
                  "xtype" : "HttpProxy",
+                 "method" : "GET",
                  "$ xns" : "Roo.data",
                  "* prop" : "proxy"
                 },
              "items" : [
               {
                "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 / Resolved\"],\n    [ 'in-progress' , \"In Progress\"],\n    [ 'all' , \"All States\"]\n     \n]\n",
+               "$ 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"
                  "items" : [
                   {
                    "$ url" : "baseURL + '/Roo/mtrack_milestone.php'",
-                   "xtype" : "HttpProxy",
                    "method" : "GET",
+                   "xtype" : "HttpProxy",
                    "$ xns" : "Roo.data",
                    "* prop" : "proxy"
                   },
           },
           {
            "xtype" : "ColumnModel",
-           "width" : 200,
            "header" : "Summary",
+           "width" : 200,
            "$ renderer" : "function(v,x,r) { \n    \n    var col = '#000'; // closed?\n    switch (r.data.status_name) {\n        case 'resolved':\n            col = '#0cc'; break; // blue\n        case 'open':\n        case 'reopened':        \n        case 'new':                \n            col = '#c00'; break; // redish\n        case 'closed':                \n            col = '#999'; break; // grey\n   }\n    \n    return String.format(\n        r.data.status_name == 'closed'  ?\n              '{2}</span><s style=\"color:{3}\">[{1}]</s> {0}':\n              '{2}<span style=\"color:{3}\">[{1}]</span> {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            col\n            ); \n}\n",
            "$ xns" : "Roo.grid",
            "* prop" : "colModel[]",
           },
           {
            "xtype" : "ColumnModel",
-           "width" : 75,
            "header" : "Owner",
+           "width" : 75,
            "$ renderer" : "function(v) { return String.format('{0}', v); }",
            "$ xns" : "Roo.grid",
            "* prop" : "colModel[]",
           },
           {
            "xtype" : "ColumnModel",
-           "width" : 75,
            "header" : "Developer",
+           "width" : 75,
            "$ renderer" : "function(v,x,r) { return String.format('{0}', r.data.developer_id_name); }",
            "$ xns" : "Roo.grid",
            "* prop" : "colModel[]",
                  "items" : [
                   {
                    "$ url" : "baseURL + '/Roo/Person.php'",
-                   "xtype" : "HttpProxy",
                    "method" : "GET",
+                   "xtype" : "HttpProxy",
                    "$ xns" : "Roo.data",
                    "* prop" : "proxy"
                   },
                  "items" : [
                   {
                    "$ url" : "baseURL + '/Roo/core_enum.php'",
-                   "method" : "GET",
                    "xtype" : "HttpProxy",
+                   "method" : "GET",
                    "$ xns" : "Roo.data",
                    "* prop" : "proxy"
                   },
                  "items" : [
                   {
                    "$ url" : "baseURL + '/Roo/core_enum.php'",
-                   "method" : "GET",
                    "xtype" : "HttpProxy",
+                   "method" : "GET",
                    "$ xns" : "Roo.data",
                    "* prop" : "proxy"
                   },
                  "items" : [
                   {
                    "$ url" : "baseURL + '/Roo/core_enum.php'",
-                   "method" : "GET",
                    "xtype" : "HttpProxy",
+                   "method" : "GET",
                    "$ xns" : "Roo.data",
                    "* prop" : "proxy"
                   },
           },
           {
            "xtype" : "ColumnModel",
-           "width" : 50,
            "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[]",
         "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,
-       "fitToFrame" : true,
        "background" : false,
+       "fitToFrame" : true,
        "region" : "center",
        "title" : "Tickets",
        "xtype" : "ContentPanel",
          "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}"
+            "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",
           },
           {
            "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}"
+            "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",
           },
           {
            "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}"
+            "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",
           "|rendered" : "function (form)\n{\n    _this.form= form;\n}\n"
          },
          "$ url" : "baseURL + '/Roo/mtrack_ticket.php'",
-         "method" : "POST",
          "xtype" : "Form",
+         "method" : "POST",
          "style" : "margin:10px;",
          "$ xns" : "Roo.form",
          "items" : [
           {
            "xtype" : "Row",
-           "width" : 900,
            "$ xns" : "Roo.form",
+           "width" : 900,
            "items" : [
             {
              "labelAlign" : "top",
                  "items" : [
                   {
                    "$ url" : "baseURL + '/Roo/Mtrack_ticket.php'",
-                   "method" : "GET",
                    "xtype" : "HttpProxy",
+                   "method" : "GET",
                    "$ xns" : "Roo.data",
                    "* prop" : "proxy"
                   },
                "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"
+                  "|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,
                  "* prop" : "store",
                  "items" : [
                   {
-                   "$ url" : "baseURL + '/Roo/Person.php'",
-                   "xtype" : "HttpProxy",
+                   "$ url" : "baseURL + '/Roo/core_person.php'",
                    "method" : "GET",
+                   "xtype" : "HttpProxy",
                    "$ xns" : "Roo.data",
                    "* prop" : "proxy"
                   },