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