1 //<script type="text/javascript">
3 // Auto generated file - created by app.Builder.js- do not edit directly (at present!)
5 Roo.namespace('Pman.Tab');
7 Pman.Tab.MTrackTicket = new Roo.XComponent({
10 '340c2ee497b85d5954b01c64de7f44f6' :"Select Person ",
11 'b9dd47d69178dbf735bfcd2733fd4ea6' :"Add Comment / Update",
12 '290612199861c31d1036b185b4e69b75' :"Summary",
13 '8a223eb0008a86f053b2a7eac0fa6eac' :"Select priority",
14 '04720e14ddfde3154a120fdd0ae73d19' :"Action Required By",
15 'ef6703d6c606526cece4a9eda9d49045' :"Your comment",
16 'c76a5e84e4bdee527e274ea30c680d79' :"active",
17 '502996d9790340c5fd7b86a5b93b1c9f' :"Priority",
18 '40bed7cf9b3d4bb3a3d7a7e3eb18c5eb' :"Person ",
19 '5c9335b28e6277ddbe0137f04e5e58a7' :"Classification",
20 '7e5ddb4ca31c30e778f4d9c57b9577b1' :"Change Status",
21 '1fd968087e03faeb2e87df1e9849d983' :"Spent",
22 '1243daf593fa297e07ab03bf06d925af' :"Searching...",
23 'b6f4a2ec6356bbd56d49f2096bf9d3d3' :"Owner",
24 '672caf27f5363dc833bda5099775e891' :"Developer",
25 '6a7e73161603d87b26a8eac49dab0a9c' :"Hours",
26 'ff0a3b7f3daef040faf89a88fdac01b7' :"Updated",
27 '340c2ee497b85d5954b01c64de7f44f6' :"Select Person",
28 'b1550c2a1a5eb0d078d92eef8a0ef883' :"ID#",
29 '9e727fdd3aec8274f46685441900280d' :"Project",
30 'ec53a8c4f07baed5d8825072c89799be' :"Status",
31 'ea4788705e6873b424c65e91c2846b19' :"Cancel",
32 'a3edc4e7beafdcd450f339ec414b7508' :"Developer / Action Required By",
33 'c1c694bd849d91d0eb34bfef8c2d8894' :"Tickets",
34 'a5ffb2a210f259195a75e5abca8db4a2' :"Select mtrack_milestone",
35 '3efbc55730fd4af147b96183d8afbd3b' :"mtrack_ticket",
36 'a3a1edf91a3157dad9417dedb4af500d' :"Add New Ticket",
37 'df25de42c84837baf5fa15049a8bc764' :"View:",
38 '423570be9f14a39fe88384797ee376fd' :"Select severity",
39 '5bf7a37a56bdea44d9b2b69201e91fbd' :"Edit original ticket",
40 'd10e7195b9d5009f7b8e6bb25a099e84' :"Add Attachment / Patch",
41 'e9c626b8a8b62de7562dfbf51a576ae5' :"Milestone",
42 'b26917587d98330d93f87808fc9d7267' :"Subscribe",
43 'f691f042a559b1c1a4f89826c6f75760' :"Resolved",
44 '007cc9547ae8884ad597cd92ba505422' :"Severity",
45 'c9cc8cce247e49bae79f15173ce97354' :"Save",
46 '01bd6a16732dfa2b760dc8566c58afae' :"Download to Excel",
47 '887950755a62e33c26209bdcbdc1d3d3' :"Bulk Change",
48 '7025046a3448dfea367705b884148992' :"Select classification"
51 'priority_id_name_qtip' : '8a223eb0008a86f053b2a7eac0fa6eac' /* Select priority */ ,
52 'severity_id_name_loadingText' : '1243daf593fa297e07ab03bf06d925af' /* Searching... */ ,
53 'developer_id_emptyText' : '340c2ee497b85d5954b01c64de7f44f6' /* Select Person */ ,
54 'developer_id_name_loadingText' : '1243daf593fa297e07ab03bf06d925af' /* Searching... */ ,
55 'status_name_emptyText' : '7e5ddb4ca31c30e778f4d9c57b9577b1' /* Change Status */ ,
56 'severity_id_name_emptyText' : '423570be9f14a39fe88384797ee376fd' /* Select severity */ ,
57 'classification_id_name_emptyText' : '7025046a3448dfea367705b884148992' /* Select classification */ ,
58 'status_name_fieldLabel' : 'ec53a8c4f07baed5d8825072c89799be' /* Status */ ,
59 'developer_id_qtip' : '340c2ee497b85d5954b01c64de7f44f6' /* Select Person */ ,
60 'developer_id_name_emptyText' : '340c2ee497b85d5954b01c64de7f44f6' /* Select Person */ ,
61 'classification_id_name_qtip' : '7025046a3448dfea367705b884148992' /* Select classification */ ,
62 'developer_id_fieldLabel' : '40bed7cf9b3d4bb3a3d7a7e3eb18c5eb' /* Person */ ,
63 'developer_id_loadingText' : '1243daf593fa297e07ab03bf06d925af' /* Searching... */ ,
64 'cm_status_name_value' : 'c76a5e84e4bdee527e274ea30c680d79' /* active */ ,
65 'milestone_id_name_loadingText' : '1243daf593fa297e07ab03bf06d925af' /* Searching... */ ,
66 'priority_id_name_emptyText' : '8a223eb0008a86f053b2a7eac0fa6eac' /* Select priority */ ,
67 'status_name_qtip' : '7e5ddb4ca31c30e778f4d9c57b9577b1' /* Change Status */ ,
68 'status_name_loadingText' : '1243daf593fa297e07ab03bf06d925af' /* Searching... */ ,
69 'milestone_id_name_emptyText' : 'a5ffb2a210f259195a75e5abca8db4a2' /* Select mtrack_milestone */ ,
70 'developer_id_name_qtip' : '340c2ee497b85d5954b01c64de7f44f6' /* Select Person */ ,
71 'reason_fieldLabel' : 'ef6703d6c606526cece4a9eda9d49045' /* Your comment */ ,
72 'cm_status_name_fieldLabel' : 'ec53a8c4f07baed5d8825072c89799be' /* Status */ ,
73 'priority_id_name_loadingText' : '1243daf593fa297e07ab03bf06d925af' /* Searching... */ ,
74 'milestone_id_name_qtip' : 'a5ffb2a210f259195a75e5abca8db4a2' /* Select mtrack_milestone */ ,
75 'developer_id_name_fieldLabel' : 'a3edc4e7beafdcd450f339ec414b7508' /* Developer / Action Required By */ ,
76 'severity_id_name_qtip' : '423570be9f14a39fe88384797ee376fd' /* Select severity */ ,
77 'classification_id_name_loadingText' : '1243daf593fa297e07ab03bf06d925af' /* Searching... */
80 part : ["MTrack", "Ticket" ],
81 order : '001-Pman.Tab.MTrackTicket',
83 parent : 'Pman.Tab.DocumentsTab',
84 name : "MTrackWeb.Ticket",
87 _tree : function(_data)
92 xtype : 'NestedLayoutPanel',
97 title : _this._strings['c1c694bd849d91d0eb34bfef8c2d8894'] /* Tickets */,
99 activate : function (_self)
104 _this.panel.layout.getRegion('south').hide();
105 //_this.panel.layout.getRegion('north').hide();
109 if (!_this.url || !_this.project || (_this.project != MTrack.projectCombo.getValue())) {
112 // _this.tpanel.mload("/Report/1");
118 } catch(e) {Roo.log("activate fail" + e.toString()); }
124 xtype : 'BorderLayout',
128 xtype : 'LayoutRegion',
134 xtype : 'LayoutRegion',
141 xtype : 'LayoutRegion',
156 tableName : 'mtrack_ticket',
157 title : _this._strings['3efbc55730fd4af147b96183d8afbd3b'] /* mtrack_ticket */,
159 activate : function() {
162 _this.grid.ds.load({});
169 xtype : 'EditorGrid',
170 autoExpandColumn : 'summary',
172 ddGroup : 'mtrack_ticket',
173 enableDragDrop : true,
174 getProjectId : function() {
176 if (typeof(MTrack) != 'undefined') {
177 return MTrack.projectCombo.getValue();
180 // project_id : _this.grid.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.
181 // project_id_name : _this.grid.getProjectId(), //MTrack.projectCombo.el.dom.value,
186 var pr = Pman.Tab.Projects; // shuld be documentsProjects
187 if (!pr || !pr.grid) {
193 var sels = pr.grid.getSelectionModel().getSelections();
196 Roo.each(sels,function(s) {
197 prids.push(s.data.id);
199 // multi support later..
209 getProjectName : function() {
210 // project_id : _this.grid.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.
212 if (typeof(MTrack) != 'undefined') {
214 return MTrack.projectCombo.el.dom.value;
220 var pr = Pman.Tab.Projects; // shuld be documentsProjects
221 if (!pr || !pr.grid) {
227 var sels = pr.grid.getSelectionModel().getSelections();
230 Roo.each(sels,function(s) {
231 prids.push(s.data.name);
233 // multi support later..
243 afteredit : function (e)
248 celldblclick : function (_self, rowIndex, columnIndex, e)
250 var c = _this.grid.colModel.getDataIndex(columnIndex);
253 if (c.match(/_id$/) ) {
256 var rec = _this.grid.ds.getAt(rowIndex);
257 Pman.Dialog.MTrackTicket.show({ id : rec.data.id } , function(res) {
258 // update row, and re-render..
267 _this.panel.grid = this; // works with doc manager...
268 //_this.dialog = Pman.Dialog.FILL_IN
269 if (_this.gpanel.active) {
270 _this.grid.ds.load({});
283 text : _this._strings['a3a1edf91a3157dad9417dedb4af500d'] /* Add New Ticket */,
285 click : function (_self, e)
287 Pman.Dialog.MTrackTicket.show({
288 project_id : Pman.Tab.DocumentsTab.panel.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.
289 project_id_name : Pman.Tab.DocumentsTab.panel.getProjectName(), //MTrack.projectCombo.el.dom.value,
290 owner_id : Pman.Login.authUser.id,
291 owner_id_name : Pman.Login.authUser.name
294 _this.grid.ds.load({});
300 '|xns' : 'Roo.Toolbar'
304 text : _this._strings['01bd6a16732dfa2b760dc8566c58afae'] /* Download to Excel */,
306 click : function (_self, e)
309 params.project_id = Pman.Tab.DocumentsTab.panel.getProjectId(); // testing.
312 params['query[viewtype]'] = 'active';
314 for (var k in _this.filterBtn) {
315 if (_this.filterBtn[k].pressed) {
316 params['query[viewtype]'] = k;
320 params['csvCols['+ii+']'] = 'jira_ref';
321 params['csvTitles['+ii+']'] = "Jira ID";
324 Roo.each(_this.grid.colModel.config, function(c,i) {
325 params['csvCols['+ii+']'] = c.dataIndex;
326 params['csvTitles['+ii+']'] = c.header;
328 if (typeof( c.editor.field.name) != 'undefined') {
329 params['csvCols['+ii+']'] = c.editor.field.name;
335 params['csvCols['+ii+']'] = 'description';
336 params['csvTitles['+ii+']'] = "Details";
343 url: baseURL + '/Roo/mtrack_ticket',
353 '|xns' : 'Roo.Toolbar'
357 text : _this._strings['887950755a62e33c26209bdcbdc1d3d3'] /* Bulk Change */,
359 click : function (_self, e)
361 var sels = _this.grid.selModel.getSelections();
365 Roo.each(sels, function(s) {
367 if (pid && s.data.project_id != pid) {
371 pid = s.data.project_id ;
375 Roo.MessageBox.alert("Error", "selected tickets must be of the same project");
381 Pman.Dialog.MTrackBulkChange.show({
382 project_id : sels[0].data.project_id,
383 project_id_name : sels[0].data.project_id_name,
389 Roo.each(res.data, function(d) {
393 Roo.each(sels, function(sel) {
394 var record = _this.grid.ds.getById(sel.data.id);
395 record.modified = record.modified || {};
397 Roo.log(tks[record.data.id*1]);
399 for (var k in tks[record.data.id*1]) {
403 if (k.match(/_id$/) || k.match(/_id_/) || k.match(/^status_/)) {
406 Roo.log("SET " + k + "=" + tks[record.data.id*1][k]);
407 record.data[k] = tks[record.data.id*1][k];
408 record.modified[k] = tks[record.data.id*1][k];
411 record.store.afterEdit(record);
421 '|xns' : 'Roo.Toolbar'
426 '|xns' : 'Roo.Toolbar'
430 text : _this._strings['df25de42c84837baf5fa15049a8bc764'] /* View: */,
432 '|xns' : 'Roo.Toolbar'
437 render : function (_self)
439 _this.searchBox= _self;
441 specialkey : function (_self, e)
443 _this.grid.ds.load({});
452 displayField : 'developer_id_name',
454 emptyText : _this._strings['340c2ee497b85d5954b01c64de7f44f6'] /* Select Person */,
455 fieldLabel : _this._strings['40bed7cf9b3d4bb3a3d7a7e3eb18c5eb'] /* Person */,
456 forceSelection : true,
457 hiddenName : 'developer_id',
459 loadingText : _this._strings['1243daf593fa297e07ab03bf06d925af'] /* Searching... */,
461 name : 'developer_id',
463 qtip : _this._strings['340c2ee497b85d5954b01c64de7f44f6'] /* Select Person */,
464 queryParam : 'query[name]',
465 selectOnFocus : true,
466 tpl : '<div class=\"x-grid-cell-text x-btn button\"><b>{developer_id_name}</b></div>',
467 triggerAction : 'all',
469 valueField : 'developer_id',
472 render : function (_self)
474 _this.personSel = _self;
475 if (Pman.Login.authUser.id) {
477 developer_id : Pman.Login.authUser.id,
478 developer_id_name : Pman.Login.authUser.name
483 select : function (combo, record, index)
485 _this.grid.ds.load({});
493 sortInfo : { field : 'developer_id_name' , dir : 'ASC' },
495 beforeload : function (_self, o)
497 o.params = o.params || {};
498 o.params._distinct = 'developer_id';
499 o.params._columns = 'developer_id,developer_id_name';
501 load : function (_self, records, options)
504 var ua = _this.personSel.store.reader.newRow({
506 developer_id_name : '-- Un-assigned --'
509 // records.unshift(ua);
517 url : baseURL + '/Roo/Mtrack_ticket.php',
522 xtype : 'JsonReader',
525 'name': 'developer_id',
529 'name': 'developer_id_name',
537 totalProperty : 'total',
546 displayField : 'fname',
548 fieldLabel : _this._strings['ec53a8c4f07baed5d8825072c89799be'] /* Status */,
549 hiddenName : 'cm_status',
552 name : 'cm_status_name',
553 triggerAction : 'all',
554 value : _this._strings['c76a5e84e4bdee527e274ea30c680d79'] /* active */,
555 valueField : 'ftype',
558 render : function (_self)
560 _this.status = _self;
562 select : function (combo, record, index)
565 _this.grid.ds.load({});
571 xtype : 'SimpleStore',
573 [ 'active', "Active"],
574 [ 'me' , "Assigned to me"],
575 [ 'me-all' , "Assigned to me (All projects)"],
576 [ 'closed' , "Closed"],
577 [ 'on-hold' , "On Hold"],
578 [ 'pending' , "Pending Review / Resolved"],
579 [ 'in-progress' , "In Progress"],
580 [ 'all' , "All States"]
583 fields : [ 'ftype', 'fname'],
591 icon : rootURL + '/Pman/templates/images/search.gif',
593 click : function (_self, e)
595 _this.grid.ds.load({});
599 '|xns' : 'Roo.Toolbar'
604 icon : rootURL + '/Pman/templates/images/edit-clear.gif',
606 click : function (_self, e)
608 _this.searchBox.setValue('');
610 _this.grid.ds.load({});
614 '|xns' : 'Roo.Toolbar'
621 sortInfo : { field : 'summary', direction: 'ASC' },
623 beforeload : function (_self, options)
626 if (Pman.building) { return false; }
627 options.params = options.params || {};
628 options.params['query[search]'] = _this.searchBox.getValue();
629 var sq = options.params['query[viewtype]'] = _this.status.getValue();
633 pc = _this.grid.colModel.getIndexByDataIndex('project_id_name');
638 if (!options.params['query[search]'].length || isNaN(options.params['query[search]'])) {
641 ps = _this.personSel.getValue();
644 options.params.developer_id = ps <0 ? 0 : ps;
651 options.params.project_id = Pman.Tab.DocumentsTab.panel.getProjectId();
653 options.params.project_id = MTrack.projectCombo.getValue();
655 options.params.project_id = options.params.project_id || undefined;
661 if ( ps < 1 && pc !== false) {
662 _this.grid.colModel.setHidden(pc, true);
668 _this.grid.colModel.setHidden(pc, true);
671 if (pc !== false && !options.params.project_id) {
673 _this.grid.colModel.setHidden(pc, false);
677 options.params.limit = 999;
683 update : function (_self, record, operation)
685 Roo.log('update: ' + JSON.stringify(operation));
686 if (operation != 'commit') {
689 // send things that might change..
691 url : baseURL + '/Roo/mtrack_ticket',
695 milestone_id : record.data.milestone_id,
696 priority_id : record.data.priority_id,
697 severity_id : record.data.severity_id,
698 classification_id : record.data.classification_id,
699 estimated : record.data.estimated,
700 developer_id : record.data.developer_id
702 success : function(res)
707 record.modified = record.modified || {};
711 if (k.match(/_id$/) || k.match(/_id_/) || k.match(/^status_/)) {
713 record.data[k] = r[k];
714 record.modified[k] = r[k];
717 record.store.afterEdit(record);
719 // we should really have a failure - to reset to the old value.
731 url : baseURL + '/Roo/mtrack_ticket.php',
736 xtype : 'JsonReader',
743 'name': 'project_id',
751 'name': 'description',
771 'name': 'priority_id',
775 'name': 'severity_id',
779 'name': 'classification_id',
783 'name': 'resolution_id',
803 'name': 'x_fieldname',
807 'name': 'developer_id',
811 'name': 'milestone_id',
815 'name': 'updated_id',
819 'name': 'updated_person_id',
823 'name': 'updated_ontable',
827 'name': 'updated_onid',
831 'name': 'updated_changedate',
835 'name': 'updated_reason',
839 'name': 'created_id',
843 'name': 'created_person_id',
847 'name': 'created_ontable',
851 'name': 'created_onid',
855 'name': 'created_changedate',
859 'name': 'created_reason',
863 'name': 'owner_id_id',
867 'name': 'owner_id_office_id',
871 'name': 'owner_id_name',
875 'name': 'owner_id_phone',
879 'name': 'owner_id_fax',
883 'name': 'owner_id_email',
887 'name': 'owner_id_company_id',
891 'name': 'owner_id_role',
895 'name': 'owner_id_active',
899 'name': 'owner_id_remarks',
903 'name': 'owner_id_passwd',
907 'name': 'owner_id_owner_id',
911 'name': 'owner_id_lang',
915 'name': 'owner_id_no_reset_sent',
919 'name': 'owner_id_action_type',
923 'name': 'owner_id_project_id',
927 'name': 'owner_id_deleted_by',
931 'name': 'owner_id_deleted_dt',
935 'name': 'developer_id_id',
939 'name': 'developer_id_office_id',
943 'name': 'developer_id_name',
947 'name': 'developer_id_phone',
951 'name': 'developer_id_fax',
955 'name': 'developer_id_email',
959 'name': 'developer_id_company_id',
963 'name': 'developer_id_role',
967 'name': 'developer_id_active',
971 'name': 'developer_id_remarks',
975 'name': 'developer_id_passwd',
979 'name': 'developer_id_owner_id',
983 'name': 'developer_id_lang',
987 'name': 'developer_id_no_reset_sent',
991 'name': 'developer_id_action_type',
995 'name': 'developer_id_project_id',
999 'name': 'developer_id_deleted_by',
1003 'name': 'developer_id_deleted_dt',
1007 'name': 'priority_id_id',
1011 'name': 'priority_id_etype',
1015 'name': 'priority_id_name',
1019 'name': 'priority_id_active',
1023 'name': 'priority_id_seqid',
1027 'name': 'severity_id_id',
1031 'name': 'severity_id_etype',
1035 'name': 'severity_id_name',
1039 'name': 'severity_id_active',
1043 'name': 'severity_id_seqid',
1047 'name': 'classification_id_id',
1051 'name': 'classification_id_etype',
1055 'name': 'classification_id_name',
1059 'name': 'classification_id_active',
1063 'name': 'classification_id_seqid',
1067 'name': 'resolution_id_id',
1071 'name': 'resolution_id_etype',
1075 'name': 'resolution_id_name',
1079 'name': 'resolution_id_active',
1083 'name': 'resolution_id_seqid',
1087 'name': 'status_id',
1091 'name': 'status_etype',
1095 'name': 'status_name',
1099 'name': 'status_active',
1103 'name': 'status_seqid',
1107 'name': 'project_id_id',
1111 'name': 'project_id_name',
1115 'name': 'project_id_remarks',
1119 'name': 'project_id_owner_id',
1123 'name': 'project_id_code',
1127 'name': 'project_id_active',
1131 'name': 'project_id_type',
1135 'name': 'project_id_client_id',
1139 'name': 'project_id_team_id',
1143 'name': 'project_id_file_location',
1147 'name': 'project_id_open_date',
1151 'name': 'project_id_open_by',
1155 'name': 'project_id_close_date',
1159 'name': 'project_id_countries',
1163 'name': 'project_id_languages',
1167 'name': 'project_id_agency_id',
1171 'name': 'milestone_id_id',
1175 'name': 'milestone_id_name',
1179 'name': 'milestone_id_description',
1183 'name': 'milestone_id_startdate',
1187 'name': 'milestone_id_duedate',
1191 'name': 'milestone_id_completed',
1195 'name': 'milestone_id_deleted',
1199 'name': 'milestone_id_created',
1203 'name': 'milestone_id_updated',
1207 'name': 'milestone_id_project_id',
1213 totalProperty : 'total',
1219 xtype : 'DropTarget',
1220 ddGroup : 'mtrack_ticket',
1221 expandRow : function(ri,pos)
1223 var dom = _this.grid.view.getRow(ri);
1225 //if (this.activeDom == dom) {
1228 if (this.activeDom) {
1229 Roo.get(this.activeDom).removeClass('x-grid-dd-above');
1230 Roo.get(this.activeDom).removeClass('x-grid-dd-below');
1232 this.activeDom = false;
1238 Roo.get(dom).addClass('x-grid-dd-' + pos);
1240 this.activeDom = dom;
1244 getDropPoint : function(e, data)
1247 // data is from griddragzone
1249 var te = Roo.lib.Event.getTarget(e);
1252 var ri = Roo.fly(te).findParent("td", 6);
1256 var t = Roo.lib.Dom.getY(dragEl),
1257 b = t + dragEl.offsetHeight;
1258 var y = Roo.lib.Event.getPageY(e);
1259 //var noAppend = tn.allowChildren === false || tn.isLeaf();
1261 // we may drop nodes anywhere, as long as allowChildren has not been set to false..
1264 var q = (b - t) / 2;
1267 if(y >= t && y < (t + q)){
1270 if(y >= b-q && y <= b){
1273 //Roo.log( JSON.stringify( {pos: y, dragtop : t, mid : q, drabgot: b }));
1279 drop : function (source, e, data)
1281 var grid = _this.grid;
1282 var t = Roo.lib.Event.getTarget(e);
1283 var t = Roo.lib.Event.getTarget(e);
1284 var ri = grid.view.findRowIndex(t);
1287 var dp = this.getDropPoint(e,data);
1288 // at this point should have above or below..
1289 var os = grid.selModel.getSelectedCell()
1290 grid.ds.remove(data.selections[0]);
1291 var new_row = ri + (dp == 'below' ? 1 : 0);
1292 grid.ds.insert(new_row , data.selections);
1293 grid.selModel.select(new_row , os[1])
1294 this.expandRow(false);
1298 var above_row = new_row-1;
1299 if (above_row > -1) {
1300 above_id = grid.ds.getAt(above_row).data.id;
1304 url : baseURL + '/Roo/Mtrack_ticket',
1306 id : grid.ds.getAt(new_row).data.id,
1315 over : function (source, e, data)
1319 // if drag point == drop point...
1320 var grid = _this.grid;
1321 var t = Roo.lib.Event.getTarget(e);
1322 var ri = grid.view.findRowIndex(t);
1323 var dp = this.getDropPoint(e,data);
1325 //Roo.log(JSON.stringify({ dp: dp, ri: ri, src_ri: data.rowIndex}));
1326 if(ri == data.rowIndex ||
1327 (dp == 'above' && ri-1 == data.rowIndex) ||
1328 (dp == 'below' && ri+1 == data.rowIndex)
1330 this.expandRow(false);
1335 this.expandRow(ri, dp);
1338 this.valid = 'ok-add';
1345 xtype : 'RowSelectionModel',
1347 afterselectionchange : function (_self, rowIndex, colIndex)
1350 var sels = _this.grid.selModel.getSelections();
1352 if (!sels || sels.length > 1) {
1359 // verify nothing has chagned..
1361 // load the ticked, and render a view of it...
1363 url : baseURL + '/Roo/mtrack_ticket',
1368 success : function(res) {
1369 //Roo.log(res.data);
1370 // render it into a template..
1371 _this.tpanel.setContent(Pman.MTrack.template.ticket_view(res.data));
1372 _this.tpanel.el.scrollTo('top',0);
1375 Pman.MTrack.loadAudit(rec.data.id, _this.tpanel.el.select('.mtrack-ticket-events',true).first());
1380 url : baseURL + '/Roo/Images',
1384 ontable : 'mtrack_ticket'
1386 success : function(ares) {
1388 var el = Roo.select('.ticket-status-attachments .attachments-list', true).first();
1389 // fill in the attachement area with data from this..
1390 el.dom.innerHTML = Pman.MTrack.template.ticket_attachments(ares) ;
1397 _this.form.setValues({
1399 owner_id : rec.data.owner_id,
1400 owner_id_name : rec.data.owner_id_name,
1401 status : rec.data.status,
1402 status_name : "No Change"
1406 for(var k in res.data) {
1407 rec.set(k,res.data[k]);
1416 cellselect : function (_self, rowIndex, colIndex)
1419 var rec = _this.grid.ds.getAt(rowIndex);
1421 // verify nothing has chagned..
1423 // load the ticked, and render a view of it...
1425 url : baseURL + '/Roo/mtrack_ticket',
1430 success : function(res) {
1431 //Roo.log(res.data);
1432 // render it into a template..
1433 _this.tpanel.setContent(Pman.MTrack.template.ticket_view(res.data));
1434 _this.tpanel.el.scrollTo('top',0);
1437 Pman.MTrack.loadAudit(rec.data.id, _this.tpanel.el.select('.mtrack-ticket-events',true).first());
1440 url : baseURL + '/Roo/Images',
1444 ontable : 'mtrack_ticket'
1446 success : function(ares) {
1448 var el = Roo.select('.ticket-status-attachments .attachments-list', true).first();
1449 // fill in the attachement area with data from this..
1450 el.dom.innerHTML = Pman.MTrack.template.ticket_attachments(ares) ;
1457 _this.form.setValues({
1459 owner_id : rec.data.owner_id,
1460 owner_id_name : rec.data.owner_id_name,
1461 status : rec.data.status,
1462 status_name : "No Change"
1466 for(var k in res.data) {
1467 rec.set(k,res.data[k]);
1482 xtype : 'ColumnModel',
1484 header : _this._strings['b1550c2a1a5eb0d078d92eef8a0ef883'] /* ID# */,
1485 renderer : function(v) { return String.format('#{0}', v); },
1492 xtype : 'ColumnModel',
1493 dataIndex : 'project_id_name',
1494 header : _this._strings['9e727fdd3aec8274f46685441900280d'] /* Project */,
1496 renderer : function(v) { return String.format('{0}', v); },
1502 xtype : 'ColumnModel',
1503 dataIndex : 'milestone_id',
1504 header : _this._strings['e9c626b8a8b62de7562dfbf51a576ae5'] /* Milestone */,
1505 renderer : function(v, x,r ) { return String.format('{0}', r.data.milestone_id_name); },
1509 '|xns' : 'Roo.grid',
1511 xtype : 'GridEditor',
1513 complete : function (_self, value, startValue)
1515 Roo.log('complete');
1519 '|xns' : 'Roo.grid',
1524 displayField : 'name',
1526 emptyText : _this._strings['a5ffb2a210f259195a75e5abca8db4a2'] /* Select mtrack_milestone */,
1527 forceSelection : true,
1528 hiddenName : 'milestone_id',
1530 loadingText : _this._strings['1243daf593fa297e07ab03bf06d925af'] /* Searching... */,
1532 name : 'milestone_id_name',
1534 qtip : _this._strings['a5ffb2a210f259195a75e5abca8db4a2'] /* Select mtrack_milestone */,
1536 selectOnFocus : true,
1537 tpl : '<div class=\"x-grid-cell-text\"><b>{name}</b> - {startdate:date(\"d/m/Y\")} - {duedate:date(\"d/m/Y\")} </div>',
1538 triggerAction : 'all',
1543 select : function (combo, record, index)
1545 Roo.log('selected');
1548 _this.grid.stopEditing();
1553 '|xns' : 'Roo.form',
1557 sortInfo : { direction : 'ASC', field: 'duedate' },
1559 beforeload : function (_self, o){
1560 o.params = o.params || {};
1562 var rec = _this.grid.activeEditor.record;
1564 o.params.project_id = rec.data.project_id;
1565 //o.params._viewtype = 'ACTIVE';
1570 '|xns' : 'Roo.data',
1572 xtype : 'HttpProxy',
1574 url : baseURL + '/Roo/mtrack_milestone.php',
1579 xtype : 'JsonReader',
1580 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}],
1583 totalProperty : 'total',
1592 xtype : 'ColumnModel',
1593 dataIndex : 'status_name',
1594 header : _this._strings['ec53a8c4f07baed5d8825072c89799be'] /* Status */,
1601 xtype : 'ColumnModel',
1602 dataIndex : 'resolution_id_name',
1603 header : _this._strings['f691f042a559b1c1a4f89826c6f75760'] /* Resolved */,
1610 xtype : 'ColumnModel',
1611 dataIndex : 'summary',
1612 header : _this._strings['290612199861c31d1036b185b4e69b75'] /* Summary */,
1613 renderer : function(v,x,r) {
1615 var col = '#000'; // closed?
1616 switch (r.data.status_name) {
1618 col = '#0cc'; break; // blue
1622 col = '#c00'; break; // redish
1624 col = '#999'; break; // grey
1627 return String.format(
1628 r.data.status_name == 'closed' ?
1629 '{2}</span><s style="color:{3}">[{1}]</s> {0}':
1630 '{2}<span style="color:{3}">[{1}]</span> {0}',
1632 r.data.status_name == 'closed' ?
1633 r.data.resolution_id_name :
1634 r.data.status_name ,
1635 r.json.jira_ref ? (r.json.jira_ref+ ' ') : '',
1644 xtype : 'ColumnModel',
1645 dataIndex : 'owner_id_name',
1646 header : _this._strings['b6f4a2ec6356bbd56d49f2096bf9d3d3'] /* Owner */,
1647 renderer : function(v) { return String.format('{0}', v); },
1653 xtype : 'ColumnModel',
1654 dataIndex : 'developer_id',
1655 header : _this._strings['672caf27f5363dc833bda5099775e891'] /* Developer */,
1656 renderer : function(v,x,r) { return String.format('{0}', r.data.developer_id_name); },
1659 '|xns' : 'Roo.grid',
1661 xtype : 'GridEditor',
1663 '|xns' : 'Roo.grid',
1668 displayField : 'name',
1670 emptyText : _this._strings['340c2ee497b85d5954b01c64de7f44f6'] /* Select Person */,
1671 fieldLabel : _this._strings['04720e14ddfde3154a120fdd0ae73d19'] /* Action Required By */,
1672 forceSelection : true,
1673 hiddenName : 'developer_id',
1675 loadingText : _this._strings['1243daf593fa297e07ab03bf06d925af'] /* Searching... */,
1677 name : 'developer_id_name',
1678 qtip : _this._strings['340c2ee497b85d5954b01c64de7f44f6'] /* Select Person */,
1679 queryParam : 'query[name]',
1680 selectOnFocus : true,
1681 tpl : '<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> <{email}></div>',
1682 triggerAction : 'all',
1687 select : function (combo, record, index)
1691 _this.grid.stopEditing();
1696 '|xns' : 'Roo.form',
1700 sortInfo : { direction : 'ASC', field: 'name' },
1702 beforeload : function (_self, o){
1703 o.params = o.params || {};
1705 var rec = _this.grid.activeEditor.record;
1708 o.params['query[ticket_id]'] = rec.data.id;
1710 o.params['query[project_id]']= rec.data.project_id;
1711 o.params._anyrole = 1;
1712 o.params.limit = 99;
1716 '|xns' : 'Roo.data',
1718 xtype : 'HttpProxy',
1720 url : baseURL + '/Roo/Person.php',
1725 xtype : 'JsonReader',
1726 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}],
1729 totalProperty : 'total',
1738 xtype : 'ColumnModel',
1739 dataIndex : 'priority_id',
1740 header : _this._strings['502996d9790340c5fd7b86a5b93b1c9f'] /* Priority */,
1741 renderer : function(v,x,r) {
1742 x.css += " " + String.format('RdYlGn-q{0}-{1}', r.data.priority_id_seqid % 10, r.data.priority_id_seqmax % 10 );
1743 return String.format('{0}', r.data.priority_id_name);
1748 '|xns' : 'Roo.grid',
1750 xtype : 'GridEditor',
1752 complete : function (_self, value, startValue)
1754 Roo.log('complete');
1758 '|xns' : 'Roo.grid',
1763 displayField : 'name',
1765 emptyText : _this._strings['8a223eb0008a86f053b2a7eac0fa6eac'] /* Select priority */,
1766 forceSelection : true,
1767 hiddenName : 'priority_id',
1769 loadingText : _this._strings['1243daf593fa297e07ab03bf06d925af'] /* Searching... */,
1771 name : 'priority_id_name',
1773 qtip : _this._strings['8a223eb0008a86f053b2a7eac0fa6eac'] /* Select priority */,
1775 selectOnFocus : true,
1776 tpl : '<div class=\"x-grid-cell-text RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b> </div>',
1777 triggerAction : 'all',
1782 select : function (combo, record, index)
1784 Roo.log('selected');
1787 _this.grid.stopEditing();
1792 '|xns' : 'Roo.form',
1796 sortInfo : { direction : 'ASC', field: 'seqid' },
1798 beforeload : function (_self, o){
1799 o.params = o.params || {};
1800 o.params.etype='priority'
1806 '|xns' : 'Roo.data',
1808 xtype : 'HttpProxy',
1810 url : baseURL + '/Roo/core_enum.php',
1815 xtype : 'JsonReader',
1816 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}],
1819 totalProperty : 'total',
1828 xtype : 'ColumnModel',
1829 dataIndex : 'severity_id',
1830 header : _this._strings['007cc9547ae8884ad597cd92ba505422'] /* Severity */,
1831 renderer : function(v,x,r) {
1832 x.css += " " + String.format('RdYlGn-q{0}-{1}', r.data.severity_id_seqid, r.data.severity_id_seqmax );
1833 return String.format('{0}', r.data.severity_id_name);
1838 '|xns' : 'Roo.grid',
1840 xtype : 'GridEditor',
1842 complete : function (_self, value, startValue)
1844 Roo.log('complete');
1848 '|xns' : 'Roo.grid',
1853 displayField : 'name',
1855 emptyText : _this._strings['423570be9f14a39fe88384797ee376fd'] /* Select severity */,
1856 forceSelection : true,
1857 hiddenName : 'severity_id',
1859 loadingText : _this._strings['1243daf593fa297e07ab03bf06d925af'] /* Searching... */,
1861 name : 'severity_id_name',
1863 qtip : _this._strings['423570be9f14a39fe88384797ee376fd'] /* Select severity */,
1865 selectOnFocus : true,
1866 tpl : '<div class=\"x-grid-cell-text RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b> </div>',
1867 triggerAction : 'all',
1872 select : function (combo, record, index)
1874 Roo.log('selected');
1877 _this.grid.stopEditing();
1882 '|xns' : 'Roo.form',
1886 sortInfo : { direction : 'ASC', field: 'seqid' },
1888 beforeload : function (_self, o){
1889 o.params = o.params || {};
1890 o.params.etype='severity'
1896 '|xns' : 'Roo.data',
1898 xtype : 'HttpProxy',
1900 url : baseURL + '/Roo/core_enum.php',
1905 xtype : 'JsonReader',
1906 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}],
1909 totalProperty : 'total',
1918 xtype : 'ColumnModel',
1919 dataIndex : 'classification_id',
1920 header : _this._strings['5c9335b28e6277ddbe0137f04e5e58a7'] /* Classification */,
1921 renderer : function(v,x,r) {
1922 x.css += " " + String.format('RdYlGn-q{0}-{1}', r.data.classification_id_seqid, r.data.classification_id_seqmax );
1923 return String.format('{0}', r.data.classification_id_name);
1928 '|xns' : 'Roo.grid',
1930 xtype : 'GridEditor',
1932 complete : function (_self, value, startValue)
1934 Roo.log('complete');
1938 '|xns' : 'Roo.grid',
1943 displayField : 'name',
1945 emptyText : _this._strings['7025046a3448dfea367705b884148992'] /* Select classification */,
1946 forceSelection : true,
1947 hiddenName : 'classification_id',
1949 loadingText : _this._strings['1243daf593fa297e07ab03bf06d925af'] /* Searching... */,
1951 name : 'classification_id_name',
1953 qtip : _this._strings['7025046a3448dfea367705b884148992'] /* Select classification */,
1955 selectOnFocus : true,
1956 tpl : '<div class=\"x-grid-cell-text RdYlGn-q{seqid}-{seqmax}\"><b>{name}</b> </div>',
1957 triggerAction : 'all',
1962 select : function (combo, record, index)
1964 Roo.log('selected');
1967 _this.grid.stopEditing();
1972 '|xns' : 'Roo.form',
1976 sortInfo : { direction : 'ASC', field: 'seqid' },
1978 beforeload : function (_self, o){
1979 o.params = o.params || {};
1980 o.params.etype='classification'
1986 '|xns' : 'Roo.data',
1988 xtype : 'HttpProxy',
1990 url : baseURL + '/Roo/core_enum.php',
1995 xtype : 'JsonReader',
1996 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}],
1999 totalProperty : 'total',
2008 xtype : 'ColumnModel',
2009 dataIndex : 'estimated',
2010 header : _this._strings['6a7e73161603d87b26a8eac49dab0a9c'] /* Hours */,
2011 renderer : function(v,x,r) {
2012 return String.format('{0}/{1}', r.data.spent, v);
2016 '|xns' : 'Roo.grid',
2018 xtype : 'GridEditor',
2020 '|xns' : 'Roo.grid',
2022 xtype : 'NumberField',
2023 allowDecimals : true,
2024 decimalPrecision : 1,
2031 xtype : 'ColumnModel',
2032 dataIndex : 'spent',
2033 header : _this._strings['1fd968087e03faeb2e87df1e9849d983'] /* Spent */,
2035 renderer : function(v,x,r) {
2036 return String.format('{0}',v);
2043 xtype : 'ColumnModel',
2044 dataIndex : 'updated_changedate',
2045 header : _this._strings['ff0a3b7f3daef040faf89a88fdac01b7'] /* Updated */,
2046 renderer : function(v,x,r) {
2049 var str= Date.parseDate( r.data.updated ? r.json.updated_changedate : r.json.created_changedate, 'Y-m-d H:i:s');
2052 return String.format('{0}', str ? str.format('d/M/Y') : '?');
2063 xtype : 'ContentPanel',
2066 fitContainer : true,
2068 mload : function(url) {
2069 if (typeof(MTrack) == 'undefined') {
2073 this._project = MTrack.projectCombo.getValue();
2074 if (!_this.tpanel) {
2077 MTrack.ajaxLoad(url, this);
2078 MTrackWeb.pushState({
2080 title : "Browse : " + url,
2081 href : baseURL + url
2086 title : _this._strings['c1c694bd849d91d0eb34bfef8c2d8894'] /* Tickets */,
2088 activate : function (_self)
2090 _this.tpanel = _self;
2092 resize : function (_self, width, height)
2094 // create and update the CSS style
2097 _this.css = Roo.util.CSS;
2099 _this.css.createStyleSheet(
2101 ".ticket-view-main .ticket-left-col { }\n" +
2102 ".ticket-view-main .readonly-tkt-description { }\n" +
2103 ".ticket-view-main .mtrack-ticket-events {} \n"
2109 var w = width - 400;
2110 Roo.log("new width: " + Math.max(0,w));
2112 _this.css.updateRule(
2113 ".ticket-view-main .ticket-left-col",
2114 "width", Math.max(0, w) + 'px'
2116 _this.css.updateRule(
2117 ".ticket-view-main .readonly-tkt-description",
2118 "width", Math.max(0, w-10) + 'px'
2120 _this.css.updateRule(
2121 ".ticket-view-main .mtrack-ticket-events",
2122 "width", Math.max(0, w-10) + 'px'
2135 text : _this._strings['b9dd47d69178dbf735bfcd2733fd4ea6'] /* Add Comment / Update */,
2137 click : function (_self, e)
2142 var sels = _this.grid.getSelectionModel().getSelections();
2143 if (!sels || sels.length > 1) {
2144 Roo.MessageBox.alert("Error", "Select a ticket");
2151 _this.panel.layout.getRegion('south').show();
2152 _this.panel.layout.getRegion('north').hide();
2155 _this.form.setValues({
2157 developer_id : rec.data.developer_id,
2158 developer_id_name : rec.data.developer_id_name
2163 if (_this.panel.layout.getRegion('south').isVisible() && _this.form.isDirty()) {
2164 Roo.MessageBox.confirm("Cancel", "Are you sure you want to cancel editing", function(r) {
2181 '|xns' : 'Roo.Toolbar'
2185 text : _this._strings['5bf7a37a56bdea44d9b2b69201e91fbd'] /* Edit original ticket */,
2187 click : function (_self, e)
2189 var sels = _this.grid.getSelectionModel().getSelections();
2190 if (!sels || sels.length > 1) {
2191 Roo.MessageBox.alert("Error", "Select a ticket");
2198 Pman.Dialog.MTrackTicket.show({ id : rec.data.id } , function(res) {
2199 // apply the data to the current row, and reload the display part..
2208 '|xns' : 'Roo.Toolbar'
2212 text : _this._strings['d10e7195b9d5009f7b8e6bb25a099e84'] /* Add Attachment / Patch */,
2214 click : function (_self, e)
2216 var sels = _this.grid.getSelectionModel().getSelections();
2217 if (!sels || sels.length > 1) {
2218 Roo.MessageBox.alert("Error", "Select a ticket");
2223 Pman.Dialog.Image.show( {
2225 ontable : 'mtrack_ticket'
2228 // update the body part..
2239 '|xns' : 'Roo.Toolbar'
2243 text : _this._strings['b26917587d98330d93f87808fc9d7267'] /* Subscribe */,
2245 '|xns' : 'Roo.Toolbar'
2251 xtype : 'ContentPanel',
2262 text : _this._strings['c9cc8cce247e49bae79f15173ce97354'] /* Save */,
2264 click : function (_self, e)
2266 if (!_this.form.findField('status').getValue()) {
2267 Roo.MessageBox.alert("Error", "Fill in the new status");
2272 _this.form.submit();
2276 '|xns' : 'Roo.Toolbar'
2281 '|xns' : 'Roo.Toolbar'
2285 text : _this._strings['ea4788705e6873b424c65e91c2846b19'] /* Cancel */,
2287 click : function (_self, e)
2290 _this.panel.layout.getRegion('south').hide();
2291 _this.panel.layout.getRegion('north').show();
2292 _this.panel.layout.getRegion('north').expand();
2296 '|xns' : 'Roo.Toolbar'
2304 style : 'margin:10px;',
2305 url : baseURL + '/Roo/mtrack_ticket.php',
2307 actioncomplete : function(_self,action)
2309 if (action.type == 'setdata') {
2310 //_this.dialog.el.mask("Loading");
2311 //this.load({ method: 'GET', params: { '_id' : _this.data.id }});
2314 if (action.type == 'load') {
2318 if (action.type =='submit') {
2323 var sm = _this.grid.getSelectionModel();
2325 sm.fireEvent('afterselectionchange', sm)
2330 _this.panel.layout.getRegion('south').hide();
2331 _this.panel.layout.getRegion('north').show();
2332 _this.panel.layout.getRegion('north').expand();
2338 rendered : function (form)
2344 '|xns' : 'Roo.form',
2350 '|xns' : 'Roo.form',
2357 '|xns' : 'Roo.form',
2361 fieldLabel : _this._strings['ef6703d6c606526cece4a9eda9d49045'] /* Your comment */,
2372 labelAlign : 'right',
2376 '|xns' : 'Roo.form',
2382 displayField : 'name',
2384 emptyText : _this._strings['7e5ddb4ca31c30e778f4d9c57b9577b1'] /* Change Status */,
2385 fieldLabel : _this._strings['ec53a8c4f07baed5d8825072c89799be'] /* Status */,
2386 forceSelection : true,
2387 hiddenName : 'status',
2389 loadingText : _this._strings['1243daf593fa297e07ab03bf06d925af'] /* Searching... */,
2391 name : 'status_name',
2392 qtip : _this._strings['7e5ddb4ca31c30e778f4d9c57b9577b1'] /* Change Status */,
2393 queryParam : 'query[name]',
2394 selectOnFocus : true,
2395 tpl : '<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> </div>',
2396 triggerAction : 'all',
2401 '|xns' : 'Roo.form',
2405 sortInfo : { direction : 'ASC', field: 'id' },
2407 beforeload : function (_self, o){
2408 o.params = o.params || {};
2410 o.params['query[ticket_change]'] = _this.form.findField('id').getValue();
2412 load : function (_self, records, options)
2414 var cs = _this.grid.getSelectionModel().getSelectedCell();
2415 var status = _this.grid.ds.getAt(cs[0]).data.status;
2417 Roo.each(records, function(r) {
2419 if (r.data.id == status) {
2420 r.set('name', "No Change");
2427 if (r.data.etype == 'resolution') {
2428 r.set('name', "Close as " + r.data.name);
2431 r.set('name', 'Change to ' + r.data.name);
2436 '|xns' : 'Roo.data',
2438 xtype : 'HttpProxy',
2440 url : baseURL + '/Roo/Mtrack_ticket.php',
2445 xtype : 'JsonReader',
2446 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}],
2449 totalProperty : 'total',
2459 displayField : 'name',
2461 emptyText : _this._strings['340c2ee497b85d5954b01c64de7f44f6'] /* Select Person */,
2462 fieldLabel : _this._strings['a3edc4e7beafdcd450f339ec414b7508'] /* Developer / Action Required By */,
2463 forceSelection : true,
2464 hiddenName : 'developer_id',
2466 loadingText : _this._strings['1243daf593fa297e07ab03bf06d925af'] /* Searching... */,
2468 name : 'developer_id_name',
2469 qtip : _this._strings['340c2ee497b85d5954b01c64de7f44f6'] /* Select Person */,
2470 queryParam : 'query[name]',
2471 selectOnFocus : true,
2472 tpl : '<div class=\"x-grid-cell-text x-btn button\"><b>{name}</b> <{email}></div>',
2473 triggerAction : 'all',
2478 '|xns' : 'Roo.form',
2482 sortInfo : { direction : 'ASC', field: 'name' },
2484 beforeload : function (_self, o){
2485 o.params = o.params || {};
2487 o.params['query[ticket_id]'] =_this.grid.sm.getSelected().data.id;
2489 o.params['query[project_id]']= _this.grid.sm.getSelected().data.project_id;
2490 o.params._anyrole = 1;
2492 o.params.limit = 999;
2496 '|xns' : 'Roo.data',
2498 xtype : 'HttpProxy',
2500 url : baseURL + '/Roo/core_person.php',
2505 xtype : 'JsonReader',
2506 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}],
2509 totalProperty : 'total',