Pman.Tab.MTrackTicket.bjs
[Pman.MTrack] / Pman.Tab.MTrackTicket.bjs
1 {
2     "id": "roo-file-232",
3     "name": "Pman.Tab.MTrackTicket",
4     "parent": "Pman.Tab.DocumentsTab",
5     "title": "MTrackWeb.Ticket",
6     "path": "/home/alan/gitlive/Pman.MTrack/Pman.Tab.MTrackTicket.bjs",
7     "items": [
8         {
9             "listeners": {
10                 "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}"
11             },
12             "background": true,
13             "fitContainer": true,
14             "fitToFrame": true,
15             "region": "center",
16             "title": "Tickets",
17             "xtype": "NestedLayoutPanel",
18             "|xns": "Roo",
19             "items": [
20                 {
21                     "|xns": "Roo",
22                     "xtype": "BorderLayout",
23                     "*prop": "layout",
24                     "items": [
25                         {
26                             "*prop": "center",
27                             "tabPosition": "top",
28                             "xtype": "LayoutRegion",
29                             "|xns": "Roo"
30                         },
31                         {
32                             "*prop": "north",
33                             "collapsible": true,
34                             "height": 300,
35                             "split": true,
36                             "tabPosition": "top",
37                             "xtype": "LayoutRegion",
38                             "|xns": "Roo"
39                         },
40                         {
41                             "*prop": "south",
42                             "height": 170,
43                             "split": true,
44                             "xtype": "LayoutRegion",
45                             "|xns": "Roo"
46                         },
47                         {
48                             "listeners": {
49                                 "|activate": "function() {\n    _this.gpanel = this;\n    if (_this.grid) {\n        _this.grid.ds.load({});\n    }\n}"
50                             },
51                             "background": true,
52                             "fitContainer": true,
53                             "fitToframe": true,
54                             "region": "north",
55                             "tableName": "mtrack_ticket",
56                             "title": "mtrack_ticket",
57                             "xtype": "GridPanel",
58                             "|xns": "Roo",
59                             "items": [
60                                 {
61                                     "listeners": {
62                                         "|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}",
63                                         "afteredit": "function (e)\n{\n    Roo.log(e);\n    e.record.commit();\n}",
64                                         "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}"
65                                     },
66                                     "*prop": "grid",
67                                     "autoExpandColumn": "summary",
68                                     "clicksToEdit": 1,
69                                     "ddGroup": "mtrack_ticket",
70                                     "enableDragDrop": true,
71                                     "loadMask": true,
72                                     "xtype": "EditorGrid",
73                                     "|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",
74                                     "|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",
75                                     "|xns": "Roo.grid",
76                                     "items": [
77                                         {
78                                             "listeners": {
79                                                 "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}",
80                                                 "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}"
81                                             },
82                                             "*prop": "sm",
83                                             "xtype": "RowSelectionModel",
84                                             "|xns": "Roo.grid"
85                                         },
86                                         {
87                                             "listeners": {
88                                                 "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  = MTrack.projectCombo.getValue();\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}",
89                                                 "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}"
90                                             },
91                                             "*prop": "dataSource",
92                                             "remoteSort": true,
93                                             "xtype": "Store",
94                                             "|sortInfo": "{ field : 'summary', direction: 'ASC' }",
95                                             "|xns": "Roo.data",
96                                             "items": [
97                                                 {
98                                                     "*prop": "proxy",
99                                                     "xtype": "HttpProxy",
100                                                     "method": "GET",
101                                                     "|url": "baseURL + '/Roo/mtrack_ticket.php'",
102                                                     "|xns": "Roo.data"
103                                                 },
104                                                 {
105                                                     "|xns": "Roo.data",
106                                                     "xtype": "JsonReader",
107                                                     "totalProperty": "total",
108                                                     "root": "data",
109                                                     "*prop": "reader",
110                                                     "id": "id",
111                                                     "|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]"
112                                                 }
113                                             ]
114                                         },
115                                         {
116                                             "|xns": "Roo",
117                                             "xtype": "Toolbar",
118                                             "*prop": "toolbar",
119                                             "items": [
120                                                 {
121                                                     "listeners": {
122                                                         "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}"
123                                                     },
124                                                     "text": "Add New Ticket",
125                                                     "xtype": "Button",
126                                                     "|xns": "Roo.Toolbar"
127                                                 },
128                                                 {
129                                                     "listeners": {
130                                                         "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}"
131                                                     },
132                                                     "text": "Download to Excel",
133                                                     "xtype": "Button",
134                                                     "|xns": "Roo.Toolbar"
135                                                 },
136                                                 {
137                                                     "listeners": {
138                                                         "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            for (var k in tks[record.data.id*1]) {\n                // update the \n                if (!k.match(/_id$/) && !k.match(/_id_/)) {\n                    continue;\n                }\n                record.data[k] = tks[record.data.id*1][k];\n                record.modified[k] = tks[record.data.id*1][k];\n            }\n            record.store.afterEdit(record);\n      });\n    \n    });\n\n    \n        \n}"
139                                                     },
140                                                     "text": "Bulk Change",
141                                                     "xtype": "Button",
142                                                     "|xns": "Roo.Toolbar"
143                                                 },
144                                                 {
145                                                     "|xns": "Roo.Toolbar",
146                                                     "xtype": "Fill"
147                                                 },
148                                                 {
149                                                     "text": "View:",
150                                                     "xtype": "TextItem",
151                                                     "|xns": "Roo.Toolbar"
152                                                 },
153                                                 {
154                                                     "listeners": {
155                                                         "render": "function (_self)\n{\n_this.searchBox=  _self;\n}",
156                                                         "specialkey": "function (_self, e)\n{\n    _this.grid.ds.load({});\n}"
157                                                     },
158                                                     "xtype": "TextField",
159                                                     "|xns": "Roo.form"
160                                                 },
161                                                 {
162                                                     "listeners": {
163                                                         "|select": "function (combo, record, index)\n{\n  _this.grid.ds.load({});\n  \n}",
164                                                         "|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}"
165                                                     },
166                                                     "allowBlank": true,
167                                                     "displayField": "developer_id_name",
168                                                     "editable": true,
169                                                     "emptyText": "Select Person ",
170                                                     "fieldLabel": "Person ",
171                                                     "forceSelection": true,
172                                                     "hiddenName": "developer_id",
173                                                     "listWidth": 600,
174                                                     "loadingText": "Searching...",
175                                                     "minChars": 2,
176                                                     "name": "developer_id",
177                                                     "pageSize": 20,
178                                                     "qtip": "Select Person ",
179                                                     "queryParam": "query[name]",
180                                                     "selectOnFocus": true,
181                                                     "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{developer_id_name}</b></div>",
182                                                     "triggerAction": "all",
183                                                     "typeAhead": true,
184                                                     "valueField": "developer_id",
185                                                     "width": 150,
186                                                     "xtype": "ComboBox",
187                                                     "|xns": "Roo.form",
188                                                     "items": [
189                                                         {
190                                                             "listeners": {
191                                                                 "|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}",
192                                                                 "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}"
193                                                             },
194                                                             "*prop": "store",
195                                                             "xtype": "Store",
196                                                             "|sortInfo": "{ field : 'developer_id_name' , dir : 'ASC' }",
197                                                             "|xns": "Roo.data",
198                                                             "items": [
199                                                                 {
200                                                                     "*prop": "proxy",
201                                                                     "method": "GET",
202                                                                     "xtype": "HttpProxy",
203                                                                     "|url": "baseURL + '/Roo/Mtrack_ticket.php'",
204                                                                     "|xns": "Roo.data"
205                                                                 },
206                                                                 {
207                                                                     "*prop": "reader",
208                                                                     "id": "id",
209                                                                     "root": "data",
210                                                                     "totalProperty": "total",
211                                                                     "xtype": "JsonReader",
212                                                                     "|fields": "[\n    {\n        'name': 'developer_id',\n        'type': 'int'\n    } ,\n    {\n        'name': 'developer_id_name',\n        'type' : 'text'\n    }\n    \n    \n]",
213                                                                     "|xns": "Roo.data"
214                                                                 }
215                                                             ]
216                                                         }
217                                                     ]
218                                                 },
219                                                 {
220                                                     "listeners": {
221                                                         "render": "function (_self)\n{\n  _this.status = _self;\n}",
222                                                         "select": "function (combo, record, index)\n{\n    Roo.log('select');\n    _this.grid.ds.load({});\n}"
223                                                     },
224                                                     "allowBlank": false,
225                                                     "displayField": "fname",
226                                                     "editable": false,
227                                                     "fieldLabel": "Status",
228                                                     "hiddenName": "cm_status",
229                                                     "listWidth": 200,
230                                                     "mode": "local",
231                                                     "name": "cm_status_name",
232                                                     "triggerAction": "all",
233                                                     "value": "active",
234                                                     "valueField": "ftype",
235                                                     "width": 150,
236                                                     "xtype": "ComboBox",
237                                                     "|xns": "Roo.form",
238                                                     "items": [
239                                                         {
240                                                             "*prop": "store",
241                                                             "xtype": "SimpleStore",
242                                                             "|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",
243                                                             "|fields": "[  'ftype', 'fname']",
244                                                             "|xns": "Roo.data"
245                                                         }
246                                                     ]
247                                                 },
248                                                 {
249                                                     "listeners": {
250                                                         "|click": "function (_self, e)\n{\n    _this.grid.ds.load({});\n}"
251                                                     },
252                                                     "cls": "x-btn-icon",
253                                                     "xtype": "Button",
254                                                     "|icon": "rootURL + '/Pman/templates/images/search.gif'",
255                                                     "|xns": "Roo.Toolbar"
256                                                 },
257                                                 {
258                                                     "listeners": {
259                                                         "|click": "function (_self, e)\n{\n    _this.searchBox.setValue('');\n    \n        _this.grid.ds.load({});\n}"
260                                                     },
261                                                     "cls": "x-btn-icon",
262                                                     "xtype": "Button",
263                                                     "|icon": "rootURL + '/Pman/templates/images/edit-clear.gif'",
264                                                     "|xns": "Roo.Toolbar"
265                                                 }
266                                             ]
267                                         },
268                                         {
269                                             "*prop": "colModel[]",
270                                             "dataIndex": "id",
271                                             "header": "ID#",
272                                             "sortable": true,
273                                             "width": 50,
274                                             "xtype": "ColumnModel",
275                                             "|renderer": "function(v) { return String.format('#{0}', v); }",
276                                             "|xns": "Roo.grid"
277                                         },
278                                         {
279                                             "*prop": "colModel[]",
280                                             "dataIndex": "project_id_name",
281                                             "header": "Project",
282                                             "hidden": true,
283                                             "width": 75,
284                                             "xtype": "ColumnModel",
285                                             "|renderer": "function(v) { return String.format('{0}', v); }",
286                                             "|xns": "Roo.grid"
287                                         },
288                                         {
289                                             "*prop": "colModel[]",
290                                             "dataIndex": "milestone_id",
291                                             "header": "Milestone",
292                                             "sortable": true,
293                                             "width": 75,
294                                             "xtype": "ColumnModel",
295                                             "|renderer": "function(v, x,r ) { return String.format('{0}', r.data.milestone_id_name); }",
296                                             "|xns": "Roo.grid",
297                                             "items": [
298                                                 {
299                                                     "listeners": {
300                                                         "complete": "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
301                                                     },
302                                                     "*prop": "editor",
303                                                     "xtype": "GridEditor",
304                                                     "|xns": "Roo.grid",
305                                                     "items": [
306                                                         {
307                                                             "listeners": {
308                                                                 "select": "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
309                                                             },
310                                                             "*prop": "field",
311                                                             "allowBlank": false,
312                                                             "alwaysQuery": true,
313                                                             "displayField": "name",
314                                                             "editable": false,
315                                                             "emptyText": "Select mtrack_milestone",
316                                                             "forceSelection": true,
317                                                             "hiddenName": "milestone_id",
318                                                             "listWidth": 400,
319                                                             "loadingText": "Searching...",
320                                                             "minChars": 2,
321                                                             "name": "milestone_id_name",
322                                                             "pageSize": 20,
323                                                             "qtip": "Select mtrack_milestone",
324                                                             "queryParam": "",
325                                                             "selectOnFocus": true,
326                                                             "tpl": "<div class=\"x-grid-cell-text\"><b>{name}</b> - {startdate:date(\"d/m/Y\")} - {duedate:date(\"d/m/Y\")} </div>",
327                                                             "triggerAction": "all",
328                                                             "typeAhead": true,
329                                                             "valueField": "id",
330                                                             "width": 300,
331                                                             "xtype": "ComboBox",
332                                                             "|xns": "Roo.form",
333                                                             "items": [
334                                                                 {
335                                                                     "listeners": {
336                                                                         "|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"
337                                                                     },
338                                                                     "*prop": "store",
339                                                                     "remoteSort": true,
340                                                                     "xtype": "Store",
341                                                                     "|sortInfo": "{ direction : 'ASC', field: 'duedate' }",
342                                                                     "|xns": "Roo.data",
343                                                                     "items": [
344                                                                         {
345                                                                             "*prop": "proxy",
346                                                                             "xtype": "HttpProxy",
347                                                                             "method": "GET",
348                                                                             "|xns": "Roo.data",
349                                                                             "|url": "baseURL + '/Roo/mtrack_milestone.php'"
350                                                                         },
351                                                                         {
352                                                                             "*prop": "reader",
353                                                                             "xtype": "JsonReader",
354                                                                             "|xns": "Roo.data",
355                                                                             "id": "id",
356                                                                             "root": "data",
357                                                                             "totalProperty": "total",
358                                                                             "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
359                                                                         }
360                                                                     ]
361                                                                 }
362                                                             ]
363                                                         }
364                                                     ]
365                                                 }
366                                             ]
367                                         },
368                                         {
369                                             "*prop": "colModel[]",
370                                             "dataIndex": "status_name",
371                                             "header": "Status",
372                                             "hidden": true,
373                                             "width": 80,
374                                             "xtype": "ColumnModel",
375                                             "|xns": "Roo.grid"
376                                         },
377                                         {
378                                             "*prop": "colModel[]",
379                                             "dataIndex": "resolution_id_name",
380                                             "header": "Resolved",
381                                             "hidden": true,
382                                             "width": 80,
383                                             "xtype": "ColumnModel",
384                                             "|xns": "Roo.grid"
385                                         },
386                                         {
387                                             "*prop": "colModel[]",
388                                             "dataIndex": "summary",
389                                             "header": "Summary",
390                                             "width": 200,
391                                             "xtype": "ColumnModel",
392                                             "|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",
393                                             "|xns": "Roo.grid"
394                                         },
395                                         {
396                                             "*prop": "colModel[]",
397                                             "dataIndex": "owner_id_name",
398                                             "header": "Owner",
399                                             "width": 75,
400                                             "xtype": "ColumnModel",
401                                             "|renderer": "function(v) { return String.format('{0}', v); }",
402                                             "|xns": "Roo.grid"
403                                         },
404                                         {
405                                             "*prop": "colModel[]",
406                                             "dataIndex": "developer_id",
407                                             "header": "Developer",
408                                             "width": 75,
409                                             "xtype": "ColumnModel",
410                                             "|renderer": "function(v,x,r) { return String.format('{0}', r.data.developer_id_name); }",
411                                             "|xns": "Roo.grid",
412                                             "items": [
413                                                 {
414                                                     "|xns": "Roo.grid",
415                                                     "xtype": "GridEditor",
416                                                     "*prop": "editor",
417                                                     "items": [
418                                                         {
419                                                             "listeners": {
420                                                                 "select": "function (combo, record, index)\n{\n  \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
421                                                             },
422                                                             "*prop": "field",
423                                                             "allowBlank": true,
424                                                             "alwaysQuery": true,
425                                                             "displayField": "name",
426                                                             "editable": "false",
427                                                             "emptyText": "Select Person",
428                                                             "fieldLabel": "Action Required By",
429                                                             "forceSelection": true,
430                                                             "hiddenName": "developer_id",
431                                                             "listWidth": 400,
432                                                             "loadingText": "Searching...",
433                                                             "minChars": 2,
434                                                             "name": "developer_id_name",
435                                                             "qtip": "Select Person",
436                                                             "queryParam": "query[name]",
437                                                             "selectOnFocus": true,
438                                                             "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> &lt;{email}&gt;</div>",
439                                                             "triggerAction": "all",
440                                                             "typeAhead": true,
441                                                             "valueField": "id",
442                                                             "width": 200,
443                                                             "xtype": "ComboBox",
444                                                             "|xns": "Roo.form",
445                                                             "items": [
446                                                                 {
447                                                                     "listeners": {
448                                                                         "|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"
449                                                                     },
450                                                                     "*prop": "store",
451                                                                     "remoteSort": true,
452                                                                     "xtype": "Store",
453                                                                     "|sortInfo": "{ direction : 'ASC', field: 'name' }",
454                                                                     "|xns": "Roo.data",
455                                                                     "items": [
456                                                                         {
457                                                                             "*prop": "proxy",
458                                                                             "xtype": "HttpProxy",
459                                                                             "method": "GET",
460                                                                             "|xns": "Roo.data",
461                                                                             "|url": "baseURL + '/Roo/Person.php'"
462                                                                         },
463                                                                         {
464                                                                             "*prop": "reader",
465                                                                             "xtype": "JsonReader",
466                                                                             "|xns": "Roo.data",
467                                                                             "id": "id",
468                                                                             "root": "data",
469                                                                             "totalProperty": "total",
470                                                                             "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
471                                                                         }
472                                                                     ]
473                                                                 }
474                                                             ]
475                                                         }
476                                                     ]
477                                                 }
478                                             ]
479                                         },
480                                         {
481                                             "*prop": "colModel[]",
482                                             "dataIndex": "priority_id",
483                                             "header": "Priority",
484                                             "sortable": true,
485                                             "width": 75,
486                                             "xtype": "ColumnModel",
487                                             "|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",
488                                             "|xns": "Roo.grid",
489                                             "items": [
490                                                 {
491                                                     "listeners": {
492                                                         "complete": "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
493                                                     },
494                                                     "*prop": "editor",
495                                                     "xtype": "GridEditor",
496                                                     "|xns": "Roo.grid",
497                                                     "items": [
498                                                         {
499                                                             "listeners": {
500                                                                 "select": "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
501                                                             },
502                                                             "*prop": "field",
503                                                             "allowBlank": false,
504                                                             "alwaysQuery": true,
505                                                             "displayField": "name",
506                                                             "editable": false,
507                                                             "emptyText": "Select priority",
508                                                             "forceSelection": true,
509                                                             "hiddenName": "priority_id",
510                                                             "listWidth": 400,
511                                                             "loadingText": "Searching...",
512                                                             "minChars": 2,
513                                                             "name": "priority_id_name",
514                                                             "pageSize": 20,
515                                                             "qtip": "Select priority",
516                                                             "queryParam": "",
517                                                             "selectOnFocus": true,
518                                                             "tpl": "<div class=\"x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b>  </div>",
519                                                             "triggerAction": "all",
520                                                             "typeAhead": true,
521                                                             "valueField": "id",
522                                                             "width": 300,
523                                                             "xtype": "ComboBox",
524                                                             "|xns": "Roo.form",
525                                                             "items": [
526                                                                 {
527                                                                     "listeners": {
528                                                                         "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n   o.params.etype='priority'\n    // set more here\n    \n}\n"
529                                                                     },
530                                                                     "*prop": "store",
531                                                                     "remoteSort": true,
532                                                                     "xtype": "Store",
533                                                                     "|sortInfo": "{ direction : 'ASC', field: 'seqid' }",
534                                                                     "|xns": "Roo.data",
535                                                                     "items": [
536                                                                         {
537                                                                             "*prop": "proxy",
538                                                                             "method": "GET",
539                                                                             "xtype": "HttpProxy",
540                                                                             "|url": "baseURL + '/Roo/core_enum.php'",
541                                                                             "|xns": "Roo.data"
542                                                                         },
543                                                                         {
544                                                                             "*prop": "reader",
545                                                                             "xtype": "JsonReader",
546                                                                             "|xns": "Roo.data",
547                                                                             "id": "id",
548                                                                             "root": "data",
549                                                                             "totalProperty": "total",
550                                                                             "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
551                                                                         }
552                                                                     ]
553                                                                 }
554                                                             ]
555                                                         }
556                                                     ]
557                                                 }
558                                             ]
559                                         },
560                                         {
561                                             "*prop": "colModel[]",
562                                             "dataIndex": "severity_id",
563                                             "header": "Severity",
564                                             "sortable": true,
565                                             "width": 75,
566                                             "xtype": "ColumnModel",
567                                             "|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    }",
568                                             "|xns": "Roo.grid",
569                                             "items": [
570                                                 {
571                                                     "listeners": {
572                                                         "complete": "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
573                                                     },
574                                                     "*prop": "editor",
575                                                     "xtype": "GridEditor",
576                                                     "|xns": "Roo.grid",
577                                                     "items": [
578                                                         {
579                                                             "listeners": {
580                                                                 "select": "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
581                                                             },
582                                                             "*prop": "field",
583                                                             "allowBlank": false,
584                                                             "alwaysQuery": true,
585                                                             "displayField": "name",
586                                                             "editable": false,
587                                                             "emptyText": "Select severity",
588                                                             "forceSelection": true,
589                                                             "hiddenName": "severity_id",
590                                                             "listWidth": 400,
591                                                             "loadingText": "Searching...",
592                                                             "minChars": 2,
593                                                             "name": "severity_id_name",
594                                                             "pageSize": 20,
595                                                             "qtip": "Select severity",
596                                                             "queryParam": "",
597                                                             "selectOnFocus": true,
598                                                             "tpl": "<div class=\"x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b>  </div>",
599                                                             "triggerAction": "all",
600                                                             "typeAhead": true,
601                                                             "valueField": "id",
602                                                             "width": 300,
603                                                             "xtype": "ComboBox",
604                                                             "|xns": "Roo.form",
605                                                             "items": [
606                                                                 {
607                                                                     "listeners": {
608                                                                         "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n   o.params.etype='severity'\n    // set more here\n    \n}\n"
609                                                                     },
610                                                                     "*prop": "store",
611                                                                     "remoteSort": true,
612                                                                     "xtype": "Store",
613                                                                     "|sortInfo": "{ direction : 'ASC', field: 'seqid' }",
614                                                                     "|xns": "Roo.data",
615                                                                     "items": [
616                                                                         {
617                                                                             "*prop": "proxy",
618                                                                             "method": "GET",
619                                                                             "xtype": "HttpProxy",
620                                                                             "|url": "baseURL + '/Roo/core_enum.php'",
621                                                                             "|xns": "Roo.data"
622                                                                         },
623                                                                         {
624                                                                             "*prop": "reader",
625                                                                             "xtype": "JsonReader",
626                                                                             "|xns": "Roo.data",
627                                                                             "id": "id",
628                                                                             "root": "data",
629                                                                             "totalProperty": "total",
630                                                                             "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
631                                                                         }
632                                                                     ]
633                                                                 }
634                                                             ]
635                                                         }
636                                                     ]
637                                                 }
638                                             ]
639                                         },
640                                         {
641                                             "*prop": "colModel[]",
642                                             "dataIndex": "classification_id",
643                                             "header": "Classification",
644                                             "sortable": true,
645                                             "width": 75,
646                                             "xtype": "ColumnModel",
647                                             "|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    }",
648                                             "|xns": "Roo.grid",
649                                             "items": [
650                                                 {
651                                                     "listeners": {
652                                                         "complete": "function (_self, value, startValue)\n{\n  Roo.log('complete');\n}"
653                                                     },
654                                                     "*prop": "editor",
655                                                     "xtype": "GridEditor",
656                                                     "|xns": "Roo.grid",
657                                                     "items": [
658                                                         {
659                                                             "listeners": {
660                                                                 "select": "function (combo, record, index)\n{\n    Roo.log('selected');\n    \n    (function() { \n        _this.grid.stopEditing();\n    }).defer(100);\n}"
661                                                             },
662                                                             "*prop": "field",
663                                                             "allowBlank": false,
664                                                             "alwaysQuery": true,
665                                                             "displayField": "name",
666                                                             "editable": false,
667                                                             "emptyText": "Select classification",
668                                                             "forceSelection": true,
669                                                             "hiddenName": "classification_id",
670                                                             "listWidth": 400,
671                                                             "loadingText": "Searching...",
672                                                             "minChars": 2,
673                                                             "name": "classification_id_name",
674                                                             "pageSize": 20,
675                                                             "qtip": "Select classification",
676                                                             "queryParam": "",
677                                                             "selectOnFocus": true,
678                                                             "tpl": "<div class=\"x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b>  </div>",
679                                                             "triggerAction": "all",
680                                                             "typeAhead": true,
681                                                             "valueField": "id",
682                                                             "width": 300,
683                                                             "xtype": "ComboBox",
684                                                             "|xns": "Roo.form",
685                                                             "items": [
686                                                                 {
687                                                                     "listeners": {
688                                                                         "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n   o.params.etype='classification'\n    // set more here\n    \n}\n"
689                                                                     },
690                                                                     "*prop": "store",
691                                                                     "remoteSort": true,
692                                                                     "xtype": "Store",
693                                                                     "|sortInfo": "{ direction : 'ASC', field: 'seqid' }",
694                                                                     "|xns": "Roo.data",
695                                                                     "items": [
696                                                                         {
697                                                                             "*prop": "proxy",
698                                                                             "method": "GET",
699                                                                             "xtype": "HttpProxy",
700                                                                             "|url": "baseURL + '/Roo/core_enum.php'",
701                                                                             "|xns": "Roo.data"
702                                                                         },
703                                                                         {
704                                                                             "*prop": "reader",
705                                                                             "xtype": "JsonReader",
706                                                                             "|xns": "Roo.data",
707                                                                             "id": "id",
708                                                                             "root": "data",
709                                                                             "totalProperty": "total",
710                                                                             "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
711                                                                         }
712                                                                     ]
713                                                                 }
714                                                             ]
715                                                         }
716                                                     ]
717                                                 }
718                                             ]
719                                         },
720                                         {
721                                             "*prop": "colModel[]",
722                                             "dataIndex": "estimated",
723                                             "header": "Hours",
724                                             "width": 50,
725                                             "xtype": "ColumnModel",
726                                             "|renderer": "function(v,x,r) { \n    return String.format('{0}/{1}', r.data.spent, v); \n}",
727                                             "|xns": "Roo.grid",
728                                             "items": [
729                                                 {
730                                                     "|xns": "Roo.grid",
731                                                     "xtype": "GridEditor",
732                                                     "*prop": "editor",
733                                                     "items": [
734                                                         {
735                                                             "*prop": "field",
736                                                             "allowDecimals": true,
737                                                             "decimalPrecision": 1,
738                                                             "xtype": "NumberField",
739                                                             "|xns": "Roo.form"
740                                                         }
741                                                     ]
742                                                 }
743                                             ]
744                                         },
745                                         {
746                                             "*prop": "colModel[]",
747                                             "dataIndex": "spent",
748                                             "header": "Spent",
749                                             "hidden": true,
750                                             "width": 50,
751                                             "xtype": "ColumnModel",
752                                             "|renderer": "function(v,x,r) { \n    return String.format('{0}',v); \n}",
753                                             "|xns": "Roo.grid"
754                                         },
755                                         {
756                                             "*prop": "colModel[]",
757                                             "dataIndex": "updated_changedate",
758                                             "header": "Updated",
759                                             "sortable": true,
760                                             "width": 75,
761                                             "xtype": "ColumnModel",
762                                             "|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 }",
763                                             "|xns": "Roo.grid"
764                                         },
765                                         {
766                                             "listeners": {
767                                                 "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}",
768                                                 "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}"
769                                             },
770                                             "*prop": "dropTarget",
771                                             "ddGroup": "mtrack_ticket",
772                                             "xtype": "DropTarget",
773                                             "|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}",
774                                             "|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}",
775                                             "|xns": "Roo.dd"
776                                         }
777                                     ]
778                                 }
779                             ]
780                         },
781                         {
782                             "listeners": {
783                                 "activate": "function (_self)\n{\n    _this.tpanel = _self;\n}",
784                                 "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}"
785                             },
786                             "autoScroll": true,
787                             "background": false,
788                             "fitContainer": true,
789                             "fitToFrame": true,
790                             "region": "center",
791                             "title": "Tickets",
792                             "xtype": "ContentPanel",
793                             "|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",
794                             "|xns": "Roo",
795                             "items": [
796                                 {
797                                     "|xns": "Roo",
798                                     "xtype": "Toolbar",
799                                     "*prop": "toolbar",
800                                     "items": [
801                                         {
802                                             "listeners": {
803                                                 "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}"
804                                             },
805                                             "text": "Add Comment / Update",
806                                             "xtype": "Button",
807                                             "|xns": "Roo.Toolbar"
808                                         },
809                                         {
810                                             "listeners": {
811                                                 "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}"
812                                             },
813                                             "text": "Edit original ticket",
814                                             "xtype": "Button",
815                                             "|xns": "Roo.Toolbar"
816                                         },
817                                         {
818                                             "listeners": {
819                                                 "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}"
820                                             },
821                                             "text": "Add Attachment / Patch",
822                                             "xtype": "Button",
823                                             "|xns": "Roo.Toolbar"
824                                         },
825                                         {
826                                             "text": "Subscribe",
827                                             "xtype": "Button",
828                                             "|xns": "Roo.Toolbar"
829                                         }
830                                     ]
831                                 }
832                             ]
833                         },
834                         {
835                             "region": "south",
836                             "xtype": "ContentPanel",
837                             "|xns": "Roo",
838                             "items": [
839                                 {
840                                     "|xns": "Roo",
841                                     "xtype": "Toolbar",
842                                     "*prop": "toolbar",
843                                     "items": [
844                                         {
845                                             "listeners": {
846                                                 "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}"
847                                             },
848                                             "text": "Save",
849                                             "xtype": "Button",
850                                             "|xns": "Roo.Toolbar"
851                                         },
852                                         {
853                                             "|xns": "Roo.Toolbar",
854                                             "xtype": "Fill"
855                                         },
856                                         {
857                                             "listeners": {
858                                                 "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}"
859                                             },
860                                             "text": "Cancel",
861                                             "xtype": "Button",
862                                             "|xns": "Roo.Toolbar"
863                                         }
864                                     ]
865                                 },
866                                 {
867                                     "listeners": {
868                                         "|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",
869                                         "|rendered": "function (form)\n{\n    _this.form= form;\n}\n"
870                                     },
871                                     "method": "POST",
872                                     "style": "margin:10px;",
873                                     "xtype": "Form",
874                                     "|url": "baseURL + '/Roo/mtrack_ticket.php'",
875                                     "|xns": "Roo.form",
876                                     "items": [
877                                         {
878                                             "width": 900,
879                                             "xtype": "Row",
880                                             "|xns": "Roo.form",
881                                             "items": [
882                                                 {
883                                                     "labelAlign": "top",
884                                                     "width": 500,
885                                                     "xtype": "Column",
886                                                     "|xns": "Roo.form",
887                                                     "items": [
888                                                         {
889                                                             "fieldLabel": "Your comment",
890                                                             "height": 100,
891                                                             "name": "reason",
892                                                             "width": 400,
893                                                             "xtype": "TextArea",
894                                                             "|xns": "Roo.form"
895                                                         }
896                                                     ]
897                                                 },
898                                                 {
899                                                     "labelAlign": "right",
900                                                     "labelWidth": 160,
901                                                     "width": 400,
902                                                     "xtype": "Column",
903                                                     "|xns": "Roo.form",
904                                                     "items": [
905                                                         {
906                                                             "allowBlank": true,
907                                                             "alwaysQuery": true,
908                                                             "displayField": "name",
909                                                             "editable": false,
910                                                             "emptyText": "Change Status",
911                                                             "fieldLabel": "Status",
912                                                             "forceSelection": true,
913                                                             "hiddenName": "status",
914                                                             "listWidth": 200,
915                                                             "loadingText": "Searching...",
916                                                             "minChars": 2,
917                                                             "name": "status_name",
918                                                             "qtip": "Change Status",
919                                                             "queryParam": "query[name]",
920                                                             "selectOnFocus": true,
921                                                             "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> </div>",
922                                                             "triggerAction": "all",
923                                                             "typeAhead": true,
924                                                             "valueField": "id",
925                                                             "width": 200,
926                                                             "xtype": "ComboBox",
927                                                             "|xns": "Roo.form",
928                                                             "items": [
929                                                                 {
930                                                                     "listeners": {
931                                                                         "|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",
932                                                                         "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}"
933                                                                     },
934                                                                     "*prop": "store",
935                                                                     "remoteSort": true,
936                                                                     "xtype": "Store",
937                                                                     "|sortInfo": "{ direction : 'ASC', field: 'id' }",
938                                                                     "|xns": "Roo.data",
939                                                                     "items": [
940                                                                         {
941                                                                             "*prop": "proxy",
942                                                                             "method": "GET",
943                                                                             "xtype": "HttpProxy",
944                                                                             "|url": "baseURL + '/Roo/core_enum.php'",
945                                                                             "|xns": "Roo.data"
946                                                                         },
947                                                                         {
948                                                                             "*prop": "reader",
949                                                                             "id": "id",
950                                                                             "root": "data",
951                                                                             "totalProperty": "total",
952                                                                             "xtype": "JsonReader",
953                                                                             "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]",
954                                                                             "|xns": "Roo.data"
955                                                                         }
956                                                                     ]
957                                                                 }
958                                                             ]
959                                                         },
960                                                         {
961                                                             "allowBlank": true,
962                                                             "alwaysQuery": true,
963                                                             "displayField": "name",
964                                                             "editable": "false",
965                                                             "emptyText": "Select Person",
966                                                             "fieldLabel": "Developer / Action Required By",
967                                                             "forceSelection": true,
968                                                             "hiddenName": "developer_id",
969                                                             "listWidth": 400,
970                                                             "loadingText": "Searching...",
971                                                             "minChars": 2,
972                                                             "name": "developer_id_name",
973                                                             "qtip": "Select Person",
974                                                             "queryParam": "query[name]",
975                                                             "selectOnFocus": true,
976                                                             "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> &lt;{email}&gt;</div>",
977                                                             "triggerAction": "all",
978                                                             "typeAhead": true,
979                                                             "valueField": "id",
980                                                             "width": 200,
981                                                             "xtype": "ComboBox",
982                                                             "|xns": "Roo.form",
983                                                             "items": [
984                                                                 {
985                                                                     "listeners": {
986                                                                         "|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"
987                                                                     },
988                                                                     "*prop": "store",
989                                                                     "remoteSort": true,
990                                                                     "xtype": "Store",
991                                                                     "|sortInfo": "{ direction : 'ASC', field: 'name' }",
992                                                                     "|xns": "Roo.data",
993                                                                     "items": [
994                                                                         {
995                                                                             "*prop": "proxy",
996                                                                             "xtype": "HttpProxy",
997                                                                             "method": "GET",
998                                                                             "|xns": "Roo.data",
999                                                                             "|url": "baseURL + '/Roo/Person.php'"
1000                                                                         },
1001                                                                         {
1002                                                                             "*prop": "reader",
1003                                                                             "xtype": "JsonReader",
1004                                                                             "|xns": "Roo.data",
1005                                                                             "id": "id",
1006                                                                             "root": "data",
1007                                                                             "totalProperty": "total",
1008                                                                             "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}]"
1009                                                                         }
1010                                                                     ]
1011                                                                 }
1012                                                             ]
1013                                                         }
1014                                                     ]
1015                                                 }
1016                                             ]
1017                                         },
1018                                         {
1019                                             "name": "id",
1020                                             "xtype": "Hidden",
1021                                             "|xns": "Roo.form"
1022                                         }
1023                                     ]
1024                                 }
1025                             ]
1026                         }
1027                     ]
1028                 }
1029             ]
1030         }
1031     ],
1032     "permname": "",
1033     "modOrder": "001"
1034 }