1 //<script type="text/javascript">
3 // Auto generated file - created by app.Builder.js- do not edit directly (at present!)
5 Pman.Tab.MTrackTicket = new Roo.XComponent({
6 part : ["MTrack","Ticket"],
7 order : '001-Pman.Tab.MTrackTicket',
9 parent : 'Pman.Tab.DocumentsTab',
10 name : "MTrackWeb.Ticket",
18 xtype: 'NestedLayoutPanel',
21 activate : function (_self)
26 _this.panel.layout.getRegion('south').hide();
27 //_this.panel.layout.getRegion('north').hide();
31 if (!_this.url || !_this.project || (_this.project != MTrack.projectCombo.getValue())) {
34 // _this.tpanel.mload("/Report/1");
40 } catch(e) {Roo.log("activate fail" + e.toString()); }
49 xtype: 'BorderLayout',
56 activate : function() {
59 _this.grid.ds.load({});
67 tableName : 'mtrack_ticket',
68 title : "mtrack_ticket",
76 _this.panel.grid = this; // works with doc manager...
77 //_this.dialog = Pman.Dialog.FILL_IN
78 if (_this.gpanel.active) {
79 _this.grid.ds.load({});
82 afteredit : function (e)
87 celldblclick : function (_self, rowIndex, columnIndex, e)
89 var c = _this.grid.colModel.getDataIndex(columnIndex);
92 if (c.match(/_id$/) ) {
95 var rec = _this.grid.ds.getAt(rowIndex);
96 Pman.Dialog.MTrackTicket.show({ id : rec.data.id } , function(res) {
97 // update row, and re-render..
104 autoExpandColumn : 'summary',
106 ddGroup : 'mtrack_ticket',
107 enableDragDrop : true,
109 getProjectId : function() {
111 if (typeof(MTrack) != 'undefined') {
112 return MTrack.projectCombo.getValue();
115 // project_id : _this.grid.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.
116 // project_id_name : _this.grid.getProjectId(), //MTrack.projectCombo.el.dom.value,
121 var pr = Pman.Tab.Projects; // shuld be documentsProjects
122 if (!pr || !pr.grid) {
128 var sels = pr.grid.getSelectionModel().getSelections();
131 Roo.each(sels,function(s) {
132 prids.push(s.data.id);
134 // multi support later..
144 getProjectName : function() {
145 // project_id : _this.grid.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.
147 if (typeof(MTrack) != 'undefined') {
149 return MTrack.projectCombo.el.dom.value;
155 var pr = Pman.Tab.Projects; // shuld be documentsProjects
156 if (!pr || !pr.grid) {
162 var sels = pr.grid.getSelectionModel().getSelections();
165 Roo.each(sels,function(s) {
166 prids.push(s.data.name);
168 // multi support later..
177 xtype: 'CellSelectionModel',
180 cellselect : function (_self, rowIndex, colIndex)
182 var rec = _this.grid.ds.getAt(rowIndex);
184 // verify nothing has chagned..
186 // load the ticked, and render a view of it...
188 url : baseURL + '/Roo/mtrack_ticket',
193 success : function(res) {
195 // render it into a template..
196 _this.tpanel.setContent(Pman.MTrack.template.ticket_view(res.data));
197 _this.tpanel.el.scrollTo('top',0);
200 Pman.MTrack.loadAudit(rec.data.id, _this.tpanel.el.select('.mtrack-ticket-events',true).first());
205 url : baseURL + '/Roo/Images',
209 ontable : 'mtrack_ticket'
211 success : function(ares) {
213 var el = Roo.select('.ticket-status-attachments .attachments-list', true).first();
214 // fill in the attachement area with data from this..
215 el.dom.innerHTML = Pman.MTrack.template.ticket_attachments(ares) ;
222 _this.form.setValues({
224 owner_id : rec.data.owner_id,
225 owner_id_name : rec.data.owner_id_name,
226 status : rec.data.status,
227 status_name : "No Change"
231 for(var k in res.data) {
232 rec.set(k,res.data[k]);
247 beforeload : function (_self, options)
250 if (Pman.building) { return false; }
251 options.params = options.params || {};
252 options.params['query[search]'] = _this.searchBox.getValue();
253 var sq = options.params['query[viewtype]'] = _this.status.getValue();
257 pc = _this.grid.colModel.getIndexByDataIndex('project_id_name');
262 if (!options.params['query[search]'].length || isNaN(options.params['query[search]'])) {
265 ps = _this.personSel.getValue();
268 options.params.developer_id = ps <0 ? 0 : ps;
275 options.params.project_id = Pman.Tab.DocumentsTab.panel.getProjectId();
277 options.params.project_id = MTrack.projectCombo.getValue();
279 options.params.project_id = options.params.project_id || undefined;
285 if ( ps < 1 && pc !== false) {
286 _this.grid.colModel.setHidden(pc, true);
292 _this.grid.colModel.setHidden(pc, true);
295 if (pc !== false && !options.params.project_id) {
297 _this.grid.colModel.setHidden(pc, false);
301 options.params.limit = 999;
307 update : function (_self, record, operation)
309 Roo.log('update: ' + JSON.stringify(operation));
310 if (operation != 'commit') {
313 // send things that might change..
315 url : baseURL + '/Roo/mtrack_ticket',
319 milestone_id : record.data.milestone_id,
320 priority_id : record.data.priority_id,
321 severity_id : record.data.severity_id,
322 classification_id : record.data.classification_id,
323 estimated : record.data.estimated,
324 developer_id : record.data.developer_id
326 success : function(res)
331 record.modified = record.modified || {};
334 if (!k.match(/_id$/) && !k.match(/_id_/)) {
337 record.data[k] = r[k];
338 record.modified[k] = r[k];
340 record.store.afterEdit(record);
342 // we should really have a failure - to reset to the old value.
350 sortInfo : { field : 'summary', direction: 'ASC' },
355 url : baseURL + '/Roo/mtrack_ticket.php'
360 totalProperty : 'total',
369 'name': 'project_id',
377 'name': 'description',
397 'name': 'priority_id',
401 'name': 'severity_id',
405 'name': 'classification_id',
409 'name': 'resolution_id',
429 'name': 'x_fieldname',
433 'name': 'developer_id',
437 'name': 'milestone_id',
441 'name': 'updated_id',
445 'name': 'updated_person_id',
449 'name': 'updated_ontable',
453 'name': 'updated_onid',
457 'name': 'updated_changedate',
461 'name': 'updated_reason',
465 'name': 'created_id',
469 'name': 'created_person_id',
473 'name': 'created_ontable',
477 'name': 'created_onid',
481 'name': 'created_changedate',
485 'name': 'created_reason',
489 'name': 'owner_id_id',
493 'name': 'owner_id_office_id',
497 'name': 'owner_id_name',
501 'name': 'owner_id_phone',
505 'name': 'owner_id_fax',
509 'name': 'owner_id_email',
513 'name': 'owner_id_company_id',
517 'name': 'owner_id_role',
521 'name': 'owner_id_active',
525 'name': 'owner_id_remarks',
529 'name': 'owner_id_passwd',
533 'name': 'owner_id_owner_id',
537 'name': 'owner_id_lang',
541 'name': 'owner_id_no_reset_sent',
545 'name': 'owner_id_action_type',
549 'name': 'owner_id_project_id',
553 'name': 'owner_id_deleted_by',
557 'name': 'owner_id_deleted_dt',
561 'name': 'developer_id_id',
565 'name': 'developer_id_office_id',
569 'name': 'developer_id_name',
573 'name': 'developer_id_phone',
577 'name': 'developer_id_fax',
581 'name': 'developer_id_email',
585 'name': 'developer_id_company_id',
589 'name': 'developer_id_role',
593 'name': 'developer_id_active',
597 'name': 'developer_id_remarks',
601 'name': 'developer_id_passwd',
605 'name': 'developer_id_owner_id',
609 'name': 'developer_id_lang',
613 'name': 'developer_id_no_reset_sent',
617 'name': 'developer_id_action_type',
621 'name': 'developer_id_project_id',
625 'name': 'developer_id_deleted_by',
629 'name': 'developer_id_deleted_dt',
633 'name': 'priority_id_id',
637 'name': 'priority_id_etype',
641 'name': 'priority_id_name',
645 'name': 'priority_id_active',
649 'name': 'priority_id_seqid',
653 'name': 'severity_id_id',
657 'name': 'severity_id_etype',
661 'name': 'severity_id_name',
665 'name': 'severity_id_active',
669 'name': 'severity_id_seqid',
673 'name': 'classification_id_id',
677 'name': 'classification_id_etype',
681 'name': 'classification_id_name',
685 'name': 'classification_id_active',
689 'name': 'classification_id_seqid',
693 'name': 'resolution_id_id',
697 'name': 'resolution_id_etype',
701 'name': 'resolution_id_name',
705 'name': 'resolution_id_active',
709 'name': 'resolution_id_seqid',
717 'name': 'status_etype',
721 'name': 'status_name',
725 'name': 'status_active',
729 'name': 'status_seqid',
733 'name': 'project_id_id',
737 'name': 'project_id_name',
741 'name': 'project_id_remarks',
745 'name': 'project_id_owner_id',
749 'name': 'project_id_code',
753 'name': 'project_id_active',
757 'name': 'project_id_type',
761 'name': 'project_id_client_id',
765 'name': 'project_id_team_id',
769 'name': 'project_id_file_location',
773 'name': 'project_id_open_date',
777 'name': 'project_id_open_by',
781 'name': 'project_id_close_date',
785 'name': 'project_id_countries',
789 'name': 'project_id_languages',
793 'name': 'project_id_agency_id',
797 'name': 'milestone_id_id',
801 'name': 'milestone_id_name',
805 'name': 'milestone_id_description',
809 'name': 'milestone_id_startdate',
813 'name': 'milestone_id_duedate',
817 'name': 'milestone_id_completed',
821 'name': 'milestone_id_deleted',
825 'name': 'milestone_id_created',
829 'name': 'milestone_id_updated',
833 'name': 'milestone_id_project_id',
847 click : function (_self, e)
849 Pman.Dialog.MTrackTicket.show({
850 project_id : Pman.Tab.DocumentsTab.panel.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.
851 project_id_name : Pman.Tab.DocumentsTab.panel.getProjectName(), //MTrack.projectCombo.el.dom.value,
852 owner_id : Pman.Login.authUser.id,
853 owner_id_name : Pman.Login.authUser.name
856 _this.grid.ds.load({});
861 text : "Add New Ticket"
867 click : function (_self, e)
870 params.project_id = Pman.Tab.DocumentsTab.panel.getProjectId(); // testing.
873 params['query[viewtype]'] = 'active'
875 for (var k in _this.filterBtn) {
876 if (_this.filterBtn[k].pressed) {
877 params['query[viewtype]'] = k;
881 params['csvCols['+ii+']'] = 'jira_ref';
882 params['csvTitles['+ii+']'] = "Jira ID";
885 Roo.each(_this.grid.colModel.config, function(c,i) {
886 params['csvCols['+ii+']'] = c.dataIndex;
887 params['csvTitles['+ii+']'] = c.header;
889 if (typeof( c.editor.field.name) != 'undefined') {
890 params['csvCols['+ii+']'] = c.editor.field.name;
896 params['csvCols['+ii+']'] = 'description';
897 params['csvTitles['+ii+']'] = "Details";
904 url: baseURL + '/Roo/mtrack_ticket',
913 text : "Download to Excel"
928 render : function (_self)
930 _this.searchBox= _self;
932 specialkey : function (_self, e)
934 _this.grid.ds.load({});
942 select : function (combo, record, index)
944 _this.grid.ds.load({});
947 render : function (_self)
949 _this.personSel = _self;
950 if (Pman.Login.authUser.id) {
952 developer_id : Pman.Login.authUser.id,
953 developer_id_name : Pman.Login.authUser.name
960 displayField : 'developer_id_name',
962 emptyText : "Select Person ",
963 fieldLabel : 'Person ',
964 forceSelection : true,
965 hiddenName : 'developer_id',
967 loadingText : "Searching...",
969 name : 'developer_id',
971 qtip : "Select Person ",
972 queryParam : 'query[name]',
973 selectOnFocus : true,
974 tpl : '<div class="x-grid-cell-text x-btn button"><b>{developer_id_name}</b></div>',
975 triggerAction : 'all',
977 valueField : 'developer_id',
983 beforeload : function (_self, o)
985 o.params = o.params || {};
986 o.params._distinct = 'developer_id';
987 o.params._columns = 'developer_id,developer_id_name';
989 load : function (_self, records, options)
992 var ua = _this.personSel.store.reader.newRow({
994 developer_id_name : '-- Un-assigned --'
997 // records.unshift(ua);
1000 sortInfo : { field : 'developer_id_name' , dir : 'ASC' },
1005 url : baseURL + '/Roo/Mtrack_ticket.php'
1008 xtype: 'JsonReader',
1012 totalProperty : 'total',
1015 'name': 'developer_id',
1019 'name': 'developer_id_name',
1032 render : function (_self)
1034 _this.status = _self;
1036 select : function (combo, record, index)
1039 _this.grid.ds.load({});
1043 displayField : 'fname',
1045 fieldLabel : 'Status',
1046 hiddenName : 'cm_status',
1049 name : 'cm_status_name',
1050 triggerAction : 'all',
1052 valueField : 'ftype',
1055 xtype: 'SimpleStore',
1058 [ 'active', "Active"],
1059 [ 'me' , "Assigned to me"],
1060 [ 'me-all' , "Assigned to me (All projects)"],
1061 [ 'closed' , "Closed"],
1062 [ 'pending' , "Pending Review"],
1063 [ 'in-progress' , "In Progress"],
1064 [ 'all' , "All States"]
1067 fields : [ 'ftype', 'fname']
1074 click : function (_self, e)
1076 _this.grid.ds.load({});
1080 icon : rootURL + '/Pman/templates/images/search.gif'
1086 click : function (_self, e)
1088 _this.searchBox.setValue('');
1090 _this.grid.ds.load({});
1094 icon : rootURL + '/Pman/templates/images/edit-clear.gif'
1100 xtype: 'ColumnModel',
1106 renderer : function(v) { return String.format('#{0}', v); }
1109 xtype: 'ColumnModel',
1111 dataIndex : 'project_id_name',
1115 renderer : function(v) { return String.format('{0}', v); }
1118 xtype: 'ColumnModel',
1120 dataIndex : 'milestone_id',
1121 header : 'Milestone',
1124 renderer : function(v, x,r ) { return String.format('{0}', r.data.milestone_id_name); },
1126 xtype: 'GridEditor',
1129 complete : function (_self, value, startValue)
1131 Roo.log('complete');
1138 select : function (combo, record, index)
1140 Roo.log('selected');
1143 _this.grid.stopEditing();
1149 displayField : 'name',
1151 emptyText : "Select mtrack_milestone",
1152 forceSelection : true,
1153 hiddenName : 'milestone_id',
1155 loadingText : "Searching...",
1157 name : 'milestone_id_name',
1159 qtip : "Select mtrack_milestone",
1161 selectOnFocus : true,
1162 tpl : '<div class="x-grid-cell-text"><b>{name}</b> - {startdate:date("d/m/Y")} - {duedate:date("d/m/Y")} </div>',
1163 triggerAction : 'all',
1171 beforeload : function (_self, o){
1172 o.params = o.params || {};
1174 var rec = _this.grid.activeEditor.record;
1176 o.params.project_id = rec.data.project_id;
1177 //o.params._viewtype = 'ACTIVE';
1182 sortInfo : { direction : 'ASC', field: 'duedate' },
1187 url : baseURL + '/Roo/mtrack_milestone.php'
1190 xtype: 'JsonReader',
1194 totalProperty : 'total',
1195 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1202 xtype: 'ColumnModel',
1204 dataIndex : 'status_name',
1210 xtype: 'ColumnModel',
1212 dataIndex : 'resolution_id_name',
1213 header : 'Resolved',
1218 xtype: 'ColumnModel',
1220 dataIndex : 'summary',
1223 renderer : function(v,x,r) {
1225 return String.format(
1226 r.data.status_name == 'closed' ?
1227 '{2}<s>[{1}]</s> {0}':
1230 r.data.status_name == 'closed' ?
1231 r.data.resolution_id_name :
1232 r.data.status_name ,
1233 r.json.jira_ref ? (r.json.jira_ref+ ' ') : ''
1238 xtype: 'ColumnModel',
1240 dataIndex : 'owner_id_name',
1243 renderer : function(v) { return String.format('{0}', v); }
1246 xtype: 'ColumnModel',
1248 dataIndex : 'developer_id',
1249 header : 'Developer',
1251 renderer : function(v,x,r) { return String.format('{0}', r.data.developer_id_name); },
1253 xtype: 'GridEditor',
1259 select : function (combo, record, index)
1263 _this.grid.stopEditing();
1269 displayField : 'name',
1271 emptyText : "Select Person",
1272 fieldLabel : 'Action Required By',
1273 forceSelection : true,
1274 hiddenName : 'developer_id',
1276 loadingText : "Searching...",
1278 name : 'developer_id_name',
1279 qtip : "Select Person",
1280 queryParam : 'query[name]',
1281 selectOnFocus : true,
1282 tpl : '<div class="x-grid-cell-text x-btn button"><b>{name}</b> <{email}></div>',
1283 triggerAction : 'all',
1291 beforeload : function (_self, o){
1292 o.params = o.params || {};
1294 var rec = _this.grid.activeEditor.record;
1297 o.params['query[ticket_id]'] = rec.data.id;
1299 o.params['query[project_id]']= rec.data.project_id;
1300 o.params._anyrole = 1;
1301 o.params.limit = 99;
1305 sortInfo : { direction : 'ASC', field: 'name' },
1310 url : baseURL + '/Roo/Person.php'
1313 xtype: 'JsonReader',
1317 totalProperty : 'total',
1318 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1325 xtype: 'ColumnModel',
1327 dataIndex : 'priority_id',
1328 header : 'Priority',
1331 renderer : function(v,x,r) {
1332 x.css += " " + String.format('RdYlGn-q{0}-{1}', r.data.priority_id_seqid, r.data.priority_id_seqmax );
1333 return String.format('{0}', r.data.priority_id_name);
1337 xtype: 'GridEditor',
1340 complete : function (_self, value, startValue)
1342 Roo.log('complete');
1349 select : function (combo, record, index)
1351 Roo.log('selected');
1354 _this.grid.stopEditing();
1360 displayField : 'name',
1362 emptyText : "Select priority",
1363 forceSelection : true,
1364 hiddenName : 'priority_id',
1366 loadingText : "Searching...",
1368 name : 'priority_id_name',
1370 qtip : "Select priority",
1372 selectOnFocus : true,
1373 tpl : '<div class="x-grid-cell-text RdYlGn-q{seqid}-{seqmax}"><b>{name}</b> </div>',
1374 triggerAction : 'all',
1382 beforeload : function (_self, o){
1383 o.params = o.params || {};
1384 o.params.etype='priority'
1390 sortInfo : { direction : 'ASC', field: 'seqid' },
1395 url : baseURL + '/Roo/core_enum.php'
1398 xtype: 'JsonReader',
1402 totalProperty : 'total',
1403 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1410 xtype: 'ColumnModel',
1412 dataIndex : 'severity_id',
1413 header : 'Severity',
1416 renderer : function(v,x,r) {
1417 x.css += " " + String.format('RdYlGn-q{0}-{1}', r.data.severity_id_seqid, r.data.severity_id_seqmax );
1418 return String.format('{0}', r.data.severity_id_name);
1421 xtype: 'GridEditor',
1424 complete : function (_self, value, startValue)
1426 Roo.log('complete');
1433 select : function (combo, record, index)
1435 Roo.log('selected');
1438 _this.grid.stopEditing();
1444 displayField : 'name',
1446 emptyText : "Select severity",
1447 forceSelection : true,
1448 hiddenName : 'severity_id',
1450 loadingText : "Searching...",
1452 name : 'severity_id_name',
1454 qtip : "Select severity",
1456 selectOnFocus : true,
1457 tpl : '<div class="x-grid-cell-text RdYlGn-q{seqid}-{seqmax}"><b>{name}</b> </div>',
1458 triggerAction : 'all',
1466 beforeload : function (_self, o){
1467 o.params = o.params || {};
1468 o.params.etype='severity'
1474 sortInfo : { direction : 'ASC', field: 'seqid' },
1479 url : baseURL + '/Roo/core_enum.php'
1482 xtype: 'JsonReader',
1486 totalProperty : 'total',
1487 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1494 xtype: 'ColumnModel',
1496 dataIndex : 'classification_id',
1497 header : 'Classification',
1500 renderer : function(v,x,r) {
1501 x.css += " " + String.format('RdYlGn-q{0}-{1}', r.data.classification_id_seqid, r.data.classification_id_seqmax );
1502 return String.format('{0}', r.data.classification_id_name);
1505 xtype: 'GridEditor',
1508 complete : function (_self, value, startValue)
1510 Roo.log('complete');
1517 select : function (combo, record, index)
1519 Roo.log('selected');
1522 _this.grid.stopEditing();
1528 displayField : 'name',
1530 emptyText : "Select classification",
1531 forceSelection : true,
1532 hiddenName : 'classification_id',
1534 loadingText : "Searching...",
1536 name : 'classification_id_name',
1538 qtip : "Select classification",
1540 selectOnFocus : true,
1541 tpl : '<div class="x-grid-cell-text RdYlGn-q{seqid}-{seqmax}"><b>{name}</b> </div>',
1542 triggerAction : 'all',
1550 beforeload : function (_self, o){
1551 o.params = o.params || {};
1552 o.params.etype='classification'
1558 sortInfo : { direction : 'ASC', field: 'seqid' },
1563 url : baseURL + '/Roo/core_enum.php'
1566 xtype: 'JsonReader',
1570 totalProperty : 'total',
1571 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1578 xtype: 'ColumnModel',
1580 dataIndex : 'estimated',
1583 renderer : function(v,x,r) {
1584 return String.format('{0}/{1}', r.data.spent, v);
1587 xtype: 'GridEditor',
1590 xtype: 'NumberField',
1592 allowDecimals : true,
1593 decimalPrecision : 1
1598 xtype: 'ColumnModel',
1600 dataIndex : 'spent',
1604 renderer : function(v,x,r) {
1605 return String.format('{0}',v);
1609 xtype: 'ColumnModel',
1611 dataIndex : 'updated_changedate',
1615 renderer : function(v,x,r) {
1618 var str= Date.parseDate( r.data.updated ? r.json.updated_changedate : r.json.created_changedate, 'Y-m-d H:i:s');
1621 return String.format('{0}', str ? str.format('d/M/Y') : '?');
1626 xtype: 'DropTarget',
1629 over : function (source, e, data)
1633 // if drag point == drop point...
1634 var grid = _this.grid;
1635 var t = Roo.lib.Event.getTarget(e);
1636 var ri = grid.view.findRowIndex(t);
1637 var dp = this.getDropPoint(e,data);
1639 //Roo.log(JSON.stringify({ dp: dp, ri: ri, src_ri: data.rowIndex}));
1640 if(ri == data.rowIndex ||
1641 (dp == 'above' && ri-1 == data.rowIndex) ||
1642 (dp == 'below' && ri+1 == data.rowIndex)
1644 this.expandRow(false);
1649 this.expandRow(ri, dp);
1652 this.valid = 'ok-add';
1654 drop : function (source, e, data)
1656 var grid = _this.grid;
1657 var t = Roo.lib.Event.getTarget(e);
1658 var t = Roo.lib.Event.getTarget(e);
1659 var ri = grid.view.findRowIndex(t);
1662 var dp = this.getDropPoint(e,data);
1663 // at this point should have above or below..
1664 var os = grid.selModel.getSelectedCell()
1665 grid.ds.remove(data.selections[0]);
1666 var new_row = ri + (dp == 'below' ? 1 : 0);
1667 grid.ds.insert(new_row , data.selections);
1668 grid.selModel.select(new_row , os[1])
1669 this.expandRow(false);
1673 var above_row = new_row-1;
1674 if (above_row > -1) {
1675 above_id = grid.ds.getAt(above_row).data.id;
1679 url : baseURL + '/Roo/Mtrack_ticket',
1681 id : grid.ds.getAt(new_row).data.id,
1691 ddGroup : 'mtrack_ticket',
1692 expandRow : function(ri,pos)
1694 var dom = _this.grid.view.getRow(ri);
1696 //if (this.activeDom == dom) {
1699 if (this.activeDom) {
1700 Roo.get(this.activeDom).removeClass('x-grid-dd-above');
1701 Roo.get(this.activeDom).removeClass('x-grid-dd-below');
1703 this.activeDom = false;
1709 Roo.get(dom).addClass('x-grid-dd-' + pos);
1711 this.activeDom = dom;
1715 getDropPoint : function(e, data)
1718 // data is from griddragzone
1720 var te = Roo.lib.Event.getTarget(e);
1723 var ri = Roo.fly(te).findParent("td", 6);
1727 var t = Roo.lib.Dom.getY(dragEl),
1728 b = t + dragEl.offsetHeight;
1729 var y = Roo.lib.Event.getPageY(e);
1730 //var noAppend = tn.allowChildren === false || tn.isLeaf();
1732 // we may drop nodes anywhere, as long as allowChildren has not been set to false..
1735 var q = (b - t) / 2;
1738 if(y >= t && y < (t + q)){
1741 if(y >= b-q && y <= b){
1744 //Roo.log( JSON.stringify( {pos: y, dragtop : t, mid : q, drabgot: b }));
1753 xtype: 'ContentPanel',
1756 activate : function (_self)
1758 _this.tpanel = _self;
1760 resize : function (_self, width, height)
1762 // create and update the CSS style
1765 _this.css = Roo.util.CSS;
1767 _this.css.createStyleSheet(
1769 ".ticket-view-main .ticket-left-col { }\n" +
1770 ".ticket-view-main .readonly-tkt-description { }\n" +
1771 ".ticket-view-main .mtrack-ticket-events {} \n"
1777 var w = width - 400;
1778 Roo.log("new width: " + Math.max(0,w));
1780 _this.css.updateRule(
1781 ".ticket-view-main .ticket-left-col",
1782 "width", Math.max(0, w) + 'px'
1784 _this.css.updateRule(
1785 ".ticket-view-main .readonly-tkt-description",
1786 "width", Math.max(0, w-10) + 'px'
1788 _this.css.updateRule(
1789 ".ticket-view-main .mtrack-ticket-events",
1790 "width", Math.max(0, w-10) + 'px'
1796 fitContainer : true,
1800 mload : function(url) {
1801 if (typeof(MTrack) == 'undefined') {
1805 this._project = MTrack.projectCombo.getValue();
1806 if (!_this.tpanel) {
1809 MTrack.ajaxLoad(url, this);
1810 MTrackWeb.pushState({
1812 title : "Browse : " + url,
1813 href : baseURL + url
1825 click : function (_self, e)
1830 var rc = _this.grid.getSelectionModel().getSelectedCell()
1832 Roo.MessageBox.alert("Error", "Select a ticket");
1839 _this.panel.layout.getRegion('south').show();
1840 _this.panel.layout.getRegion('north').hide();
1842 var rec = _this.grid.ds.getAt(rc[0]);
1843 _this.form.setValues({
1845 developer_id : rec.data.developer_id,
1846 developer_id_name : rec.data.developer_id_name
1851 if (_this.panel.layout.getRegion('south').isVisible() && _this.form.isDirty()) {
1852 Roo.MessageBox.confirm("Cancel", "Are you sure you want to cancel editing", function(r) {
1868 text : "Add Comment / Update"
1874 click : function (_self, e)
1876 var rc = _this.grid.getSelectionModel().getSelectedCell()
1878 Roo.MessageBox.alert("Error", "Select a ticket");
1881 var rec = _this.grid.ds.getAt(rc[0]);
1882 Pman.Dialog.MTrackTicket.show({ id : rec.data.id } , function(res) {
1883 // apply the data to the current row, and reload the display part..
1891 text : "Edit original ticket"
1897 click : function (_self, e)
1899 var rc = _this.grid.getSelectionModel().getSelectedCell()
1901 Roo.MessageBox.alert("Error", "Select a ticket");
1904 var rec = _this.grid.ds.getAt(rc[0]);
1905 Pman.Dialog.Image.show( {
1907 ontable : 'mtrack_ticket'
1910 // update the body part..
1920 text : "Add Attachment / Patch"
1931 xtype: 'ContentPanel',
1939 actioncomplete : function(_self,action)
1941 if (action.type == 'setdata') {
1942 //_this.dialog.el.mask("Loading");
1943 //this.load({ method: 'GET', params: { '_id' : _this.data.id }});
1946 if (action.type == 'load') {
1950 if (action.type =='submit') {
1955 var sm = _this.grid.getSelectionModel();
1956 var cs = sm.getSelectedCell();
1957 sm.fireEvent('cellselect', sm, cs[0], cs[1] );
1961 _this.panel.layout.getRegion('south').hide();
1962 _this.panel.layout.getRegion('north').show();
1963 _this.panel.layout.getRegion('north').expand();
1969 rendered : function (form)
1975 style : 'margin:10px;',
1976 url : baseURL + '/Roo/mtrack_ticket.php',
1992 fieldLabel : 'Your comment',
2002 labelAlign : 'right',
2011 displayField : 'name',
2013 emptyText : "Change Status",
2014 fieldLabel : 'Status',
2015 forceSelection : true,
2016 hiddenName : 'status',
2018 loadingText : "Searching...",
2020 name : 'status_name',
2021 qtip : "Change Status",
2022 queryParam : 'query[name]',
2023 selectOnFocus : true,
2024 tpl : '<div class="x-grid-cell-text x-btn button"><b>{name}</b> </div>',
2025 triggerAction : 'all',
2033 beforeload : function (_self, o){
2034 o.params = o.params || {};
2036 o.params['query[ticket_change]'] = _this.form.findField('id').getValue();
2038 load : function (_self, records, options)
2040 var cs = _this.grid.getSelectionModel().getSelectedCell();
2041 var status = _this.grid.ds.getAt(cs[0]).data.status;
2043 Roo.each(records, function(r) {
2045 if (r.data.id == status) {
2046 r.set('name', "No Change");
2053 if (r.data.etype == 'resolution') {
2054 r.set('name', "Close as " + r.data.name);
2057 r.set('name', 'Change to ' + r.data.name);
2062 sortInfo : { direction : 'ASC', field: 'id' },
2067 url : baseURL + '/Roo/core_enum.php'
2070 xtype: 'JsonReader',
2074 totalProperty : 'total',
2075 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
2084 displayField : 'name',
2086 emptyText : "Select Person",
2087 fieldLabel : 'Developer / Action Required By',
2088 forceSelection : true,
2089 hiddenName : 'developer_id',
2091 loadingText : "Searching...",
2093 name : 'developer_id_name',
2094 qtip : "Select Person",
2095 queryParam : 'query[name]',
2096 selectOnFocus : true,
2097 tpl : '<div class="x-grid-cell-text x-btn button"><b>{name}</b> <{email}></div>',
2098 triggerAction : 'all',
2106 beforeload : function (_self, o){
2107 o.params = o.params || {};
2109 o.params['query[ticket_id]'] =_this.grid.getSelected().data.id;
2111 o.params['query[project_id]']= _this.grid.getSelected().data.project_id;
2112 o.params._anyrole = 1;
2114 o.params.limit = 999;
2118 sortInfo : { direction : 'ASC', field: 'name' },
2123 url : baseURL + '/Roo/Person.php'
2126 xtype: 'JsonReader',
2130 totalProperty : 'total',
2131 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
2155 click : function (_self, e)
2157 if (!_this.form.findField('status').getValue()) {
2158 Roo.MessageBox.alert("Error", "Fill in the new status");
2163 _this.form.submit();
2176 click : function (_self, e)
2179 _this.panel.layout.getRegion('south').hide();
2180 _this.panel.layout.getRegion('north').show();
2181 _this.panel.layout.getRegion('north').expand();
2191 xtype: 'LayoutRegion',
2196 xtype: 'LayoutRegion',
2204 xtype: 'LayoutRegion',