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)
249 options.params = options.params || {};
250 options.params['query[search]'] = _this.searchBox.getValue();
251 var sq = options.params['query[viewtype]'] = _this.status.getValue();
253 var ps = _this.personSel.getValue();
256 options.params.developer_id = ps <0 ? 0 : ps;
264 var pc = _this.grid.colModel.getIndexByDataIndex('project_id_name');
271 options.params.project_id = Pman.Tab.DocumentsTab.panel.getProjectId();
273 options.params.project_id = MTrack.projectCombo.getValue();
275 options.params.project_id = options.params.project_id || undefined;
279 if ( ps < 1 && pc !== false) {
280 _this.grid.colModel.setHidden(pc, true);
285 _this.grid.colModel.setHidden(pc, true);
286 if (pc !== false && !options.params.project_id) {
287 _this.grid.colModel.setHidden(pc, false);
290 options.params.limit = 999;
296 update : function (_self, record, operation)
298 Roo.log('update: ' + JSON.stringify(operation));
299 if (operation != 'commit') {
302 // send things that might change..
304 url : baseURL + '/Roo/mtrack_ticket',
308 milestone_id : record.data.milestone_id,
309 priority_id : record.data.priority_id,
310 severity_id : record.data.severity_id,
311 classification_id : record.data.classification_id,
312 estimated : record.data.estimated,
313 developer_id : record.data.developer_id
315 success : function(res)
320 record.modified = record.modified || {};
323 if (!k.match(/_id$/) && !k.match(/_id_/)) {
326 record.data[k] = r[k];
327 record.modified[k] = r[k];
329 record.store.afterEdit(record);
331 // we should really have a failure - to reset to the old value.
339 sortInfo : { field : 'summary', direction: 'ASC' },
344 url : baseURL + '/Roo/mtrack_ticket.php'
349 totalProperty : 'total',
358 'name': 'project_id',
366 'name': 'description',
386 'name': 'priority_id',
390 'name': 'severity_id',
394 'name': 'classification_id',
398 'name': 'resolution_id',
418 'name': 'x_fieldname',
422 'name': 'developer_id',
426 'name': 'milestone_id',
430 'name': 'updated_id',
434 'name': 'updated_person_id',
438 'name': 'updated_ontable',
442 'name': 'updated_onid',
446 'name': 'updated_changedate',
450 'name': 'updated_reason',
454 'name': 'created_id',
458 'name': 'created_person_id',
462 'name': 'created_ontable',
466 'name': 'created_onid',
470 'name': 'created_changedate',
474 'name': 'created_reason',
478 'name': 'owner_id_id',
482 'name': 'owner_id_office_id',
486 'name': 'owner_id_name',
490 'name': 'owner_id_phone',
494 'name': 'owner_id_fax',
498 'name': 'owner_id_email',
502 'name': 'owner_id_company_id',
506 'name': 'owner_id_role',
510 'name': 'owner_id_active',
514 'name': 'owner_id_remarks',
518 'name': 'owner_id_passwd',
522 'name': 'owner_id_owner_id',
526 'name': 'owner_id_lang',
530 'name': 'owner_id_no_reset_sent',
534 'name': 'owner_id_action_type',
538 'name': 'owner_id_project_id',
542 'name': 'owner_id_deleted_by',
546 'name': 'owner_id_deleted_dt',
550 'name': 'developer_id_id',
554 'name': 'developer_id_office_id',
558 'name': 'developer_id_name',
562 'name': 'developer_id_phone',
566 'name': 'developer_id_fax',
570 'name': 'developer_id_email',
574 'name': 'developer_id_company_id',
578 'name': 'developer_id_role',
582 'name': 'developer_id_active',
586 'name': 'developer_id_remarks',
590 'name': 'developer_id_passwd',
594 'name': 'developer_id_owner_id',
598 'name': 'developer_id_lang',
602 'name': 'developer_id_no_reset_sent',
606 'name': 'developer_id_action_type',
610 'name': 'developer_id_project_id',
614 'name': 'developer_id_deleted_by',
618 'name': 'developer_id_deleted_dt',
622 'name': 'priority_id_id',
626 'name': 'priority_id_etype',
630 'name': 'priority_id_name',
634 'name': 'priority_id_active',
638 'name': 'priority_id_seqid',
642 'name': 'severity_id_id',
646 'name': 'severity_id_etype',
650 'name': 'severity_id_name',
654 'name': 'severity_id_active',
658 'name': 'severity_id_seqid',
662 'name': 'classification_id_id',
666 'name': 'classification_id_etype',
670 'name': 'classification_id_name',
674 'name': 'classification_id_active',
678 'name': 'classification_id_seqid',
682 'name': 'resolution_id_id',
686 'name': 'resolution_id_etype',
690 'name': 'resolution_id_name',
694 'name': 'resolution_id_active',
698 'name': 'resolution_id_seqid',
706 'name': 'status_etype',
710 'name': 'status_name',
714 'name': 'status_active',
718 'name': 'status_seqid',
722 'name': 'project_id_id',
726 'name': 'project_id_name',
730 'name': 'project_id_remarks',
734 'name': 'project_id_owner_id',
738 'name': 'project_id_code',
742 'name': 'project_id_active',
746 'name': 'project_id_type',
750 'name': 'project_id_client_id',
754 'name': 'project_id_team_id',
758 'name': 'project_id_file_location',
762 'name': 'project_id_open_date',
766 'name': 'project_id_open_by',
770 'name': 'project_id_close_date',
774 'name': 'project_id_countries',
778 'name': 'project_id_languages',
782 'name': 'project_id_agency_id',
786 'name': 'milestone_id_id',
790 'name': 'milestone_id_name',
794 'name': 'milestone_id_description',
798 'name': 'milestone_id_startdate',
802 'name': 'milestone_id_duedate',
806 'name': 'milestone_id_completed',
810 'name': 'milestone_id_deleted',
814 'name': 'milestone_id_created',
818 'name': 'milestone_id_updated',
822 'name': 'milestone_id_project_id',
836 click : function (_self, e)
838 Pman.Dialog.MTrackTicket.show({
839 project_id : Pman.Tab.DocumentsTab.panel.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.
840 project_id_name : Pman.Tab.DocumentsTab.panel.getProjectName(), //MTrack.projectCombo.el.dom.value,
841 owner_id : Pman.Login.authUser.id,
842 owner_id_name : Pman.Login.authUser.name
845 _this.grid.ds.load({});
850 text : "Add New Ticket"
856 click : function (_self, e)
859 params.project_id = Pman.Tab.DocumentsTab.panel.getProjectId(); // testing.
862 params['query[viewtype]'] = 'active'
864 for (var k in _this.filterBtn) {
865 if (_this.filterBtn[k].pressed) {
866 params['query[viewtype]'] = k;
870 Roo.each(_this.grid.colModel.config, function(c,i) {
871 params['csvCols['+i+']'] = c.dataIndex;
872 params['csvTitles['+i+']'] = c.header;
874 if (typeof( c.editor.field.name) != 'undefined') {
875 params['csvCols['+i+']'] = c.editor.field.name;
881 params['csvCols['+ii+']'] = 'description';
882 params['csvTitles['+ii+']'] = "Details";
887 url: baseURL + '/Roo/mtrack_ticket',
896 text : "Download to Excel"
911 render : function (_self)
913 _this.searchBox= _self;
915 specialkey : function (_self, e)
917 _this.grid.ds.load({});
925 select : function (combo, record, index)
927 _this.grid.ds.load({});
930 render : function (_self)
932 _this.personSel = _self;
933 if (Pman.Login.authUser.id) {
935 developer_id : Pman.Login.authUser.id,
936 developer_id_name : Pman.Login.authUser.name
943 displayField : 'developer_id_name',
945 emptyText : "Select Person ",
946 fieldLabel : 'Person ',
947 forceSelection : true,
948 hiddenName : 'developer_id',
950 loadingText : "Searching...",
952 name : 'developer_id',
954 qtip : "Select Person ",
955 queryParam : 'query[name]',
956 selectOnFocus : true,
957 tpl : '<div class="x-grid-cell-text x-btn button"><b>{developer_id_name}</b></div>',
958 triggerAction : 'all',
960 valueField : 'developer_id',
966 beforeload : function (_self, o)
968 o.params = o.params || {};
969 o.params._distinct = 'developer_id';
970 o.params._columns = 'developer_id,developer_id_name';
972 load : function (_self, records, options)
975 var ua = _this.personSel.store.reader.newRow({
977 developer_id_name : '-- Un-assigned --'
980 // records.unshift(ua);
983 sortInfo : { field : 'developer_id_name' , direction : 'ASC' },
988 url : baseURL + '/Roo/Mtrack_ticket.php'
995 totalProperty : 'total',
998 'name': 'developer_id',
1012 render : function (_self)
1014 _this.status = _self;
1016 select : function (combo, record, index)
1019 _this.grid.ds.load({});
1023 displayField : 'fname',
1025 fieldLabel : 'Status',
1026 hiddenName : 'cm_status',
1029 name : 'cm_status_name',
1030 triggerAction : 'all',
1032 valueField : 'ftype',
1035 xtype: 'SimpleStore',
1038 [ 'active', "Active"],
1039 [ 'me' , "Assigned to me"],
1040 [ 'me-all' , "Assigned to me (All projects)"],
1041 [ 'closed' , "Closed"],
1042 [ 'pending' , "Pending Review"],
1043 [ 'in-progress' , "Pending Review"],
1044 [ 'all' , "All States"]
1047 fields : [ 'ftype', 'fname']
1054 click : function (_self, e)
1056 _this.grid.ds.load({});
1060 icon : rootURL + '/Pman/templates/images/search.gif'
1066 click : function (_self, e)
1068 _this.searchBox.setValue('');
1070 _this.grid.ds.load({});
1074 icon : rootURL + '/Pman/templates/images/edit-clear.gif'
1080 xtype: 'ColumnModel',
1086 renderer : function(v) { return String.format('#{0}', v); }
1089 xtype: 'ColumnModel',
1091 dataIndex : 'project_id_name',
1095 renderer : function(v) { return String.format('{0}', v); }
1098 xtype: 'ColumnModel',
1100 dataIndex : 'milestone_id',
1101 header : 'Milestone',
1104 renderer : function(v, x,r ) { return String.format('{0}', r.data.milestone_id_name); },
1106 xtype: 'GridEditor',
1109 complete : function (_self, value, startValue)
1111 Roo.log('complete');
1118 select : function (combo, record, index)
1120 Roo.log('selected');
1123 _this.grid.stopEditing();
1129 displayField : 'name',
1131 emptyText : "Select mtrack_milestone",
1132 forceSelection : true,
1133 hiddenName : 'milestone_id',
1135 loadingText : "Searching...",
1137 name : 'milestone_id_name',
1139 qtip : "Select mtrack_milestone",
1141 selectOnFocus : true,
1142 tpl : '<div class="x-grid-cell-text"><b>{name}</b> - {startdate:date("d/m/Y")} - {duedate:date("d/m/Y")} </div>',
1143 triggerAction : 'all',
1151 beforeload : function (_self, o){
1152 o.params = o.params || {};
1154 var rec = _this.grid.activeEditor.record;
1156 o.params.project_id = rec.data.project_id;
1157 //o.params._viewtype = 'ACTIVE';
1162 sortInfo : { direction : 'ASC', field: 'duedate' },
1167 url : baseURL + '/Roo/mtrack_milestone.php'
1170 xtype: 'JsonReader',
1174 totalProperty : 'total',
1175 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1182 xtype: 'ColumnModel',
1184 dataIndex : 'summary',
1187 renderer : function(v,x,r) {
1189 return String.format(
1190 r.data.status_name == 'closed' ?
1191 '{2}<s>[{1}]</s> {0}':
1194 r.data.status_name == 'closed' ?
1195 r.data.resolution_id_name :
1196 r.data.status_name ,
1197 r.json.jira_ref ? (r.json.jira_ref+ ' ') : ''
1202 xtype: 'ColumnModel',
1204 dataIndex : 'owner_id_name',
1207 renderer : function(v) { return String.format('{0}', v); }
1210 xtype: 'ColumnModel',
1212 dataIndex : 'developer_id',
1213 header : 'Developer',
1215 renderer : function(v,x,r) { return String.format('{0}', r.data.developer_id_name); },
1217 xtype: 'GridEditor',
1223 select : function (combo, record, index)
1227 _this.grid.stopEditing();
1233 displayField : 'name',
1235 emptyText : "Select Person",
1236 fieldLabel : 'Action Required By',
1237 forceSelection : true,
1238 hiddenName : 'developer_id',
1240 loadingText : "Searching...",
1242 name : 'developer_id_name',
1243 qtip : "Select Person",
1244 queryParam : 'query[name]',
1245 selectOnFocus : true,
1246 tpl : '<div class="x-grid-cell-text x-btn button"><b>{name}</b> <{email}></div>',
1247 triggerAction : 'all',
1255 beforeload : function (_self, o){
1256 o.params = o.params || {};
1258 var rec = _this.grid.activeEditor.record;
1261 o.params['query[ticket_id]'] = rec.data.id;
1263 o.params['query[project_id]']= rec.data.project_id;
1264 o.params._anyrole = 1;
1265 o.params.limit = 99;
1269 sortInfo : { direction : 'ASC', field: 'name' },
1274 url : baseURL + '/Roo/Person.php'
1277 xtype: 'JsonReader',
1281 totalProperty : 'total',
1282 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1289 xtype: 'ColumnModel',
1291 dataIndex : 'priority_id',
1292 header : 'Priority',
1295 renderer : function(v,x,r) {
1296 x.css += " " + String.format('RdYlGn-q{0}-{1}', r.data.priority_id_seqid, r.data.priority_id_seqmax );
1297 return String.format('{0}', r.data.priority_id_name);
1301 xtype: 'GridEditor',
1304 complete : function (_self, value, startValue)
1306 Roo.log('complete');
1313 select : function (combo, record, index)
1315 Roo.log('selected');
1318 _this.grid.stopEditing();
1324 displayField : 'name',
1326 emptyText : "Select priority",
1327 forceSelection : true,
1328 hiddenName : 'priority_id',
1330 loadingText : "Searching...",
1332 name : 'priority_id_name',
1334 qtip : "Select priority",
1336 selectOnFocus : true,
1337 tpl : '<div class="x-grid-cell-text RdYlGn-q{seqid}-{seqmax}"><b>{name}</b> </div>',
1338 triggerAction : 'all',
1346 beforeload : function (_self, o){
1347 o.params = o.params || {};
1348 o.params.etype='priority'
1354 sortInfo : { direction : 'ASC', field: 'seqid' },
1359 url : baseURL + '/Roo/core_enum.php'
1362 xtype: 'JsonReader',
1366 totalProperty : 'total',
1367 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1374 xtype: 'ColumnModel',
1376 dataIndex : 'severity_id',
1377 header : 'Severity',
1380 renderer : function(v,x,r) {
1381 x.css += " " + String.format('RdYlGn-q{0}-{1}', r.data.severity_id_seqid, r.data.severity_id_seqmax );
1382 return String.format('{0}', r.data.severity_id_name);
1385 xtype: 'GridEditor',
1388 complete : function (_self, value, startValue)
1390 Roo.log('complete');
1397 select : function (combo, record, index)
1399 Roo.log('selected');
1402 _this.grid.stopEditing();
1408 displayField : 'name',
1410 emptyText : "Select severity",
1411 forceSelection : true,
1412 hiddenName : 'severity_id',
1414 loadingText : "Searching...",
1416 name : 'severity_id_name',
1418 qtip : "Select severity",
1420 selectOnFocus : true,
1421 tpl : '<div class="x-grid-cell-text RdYlGn-q{seqid}-{seqmax}"><b>{name}</b> </div>',
1422 triggerAction : 'all',
1430 beforeload : function (_self, o){
1431 o.params = o.params || {};
1432 o.params.etype='severity'
1438 sortInfo : { direction : 'ASC', field: 'seqid' },
1443 url : baseURL + '/Roo/core_enum.php'
1446 xtype: 'JsonReader',
1450 totalProperty : 'total',
1451 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1458 xtype: 'ColumnModel',
1460 dataIndex : 'classification_id',
1461 header : 'Classification',
1464 renderer : function(v,x,r) {
1465 x.css += " " + String.format('RdYlGn-q{0}-{1}', r.data.classification_id_seqid, r.data.classification_id_seqmax );
1466 return String.format('{0}', r.data.classification_id_name);
1469 xtype: 'GridEditor',
1472 complete : function (_self, value, startValue)
1474 Roo.log('complete');
1481 select : function (combo, record, index)
1483 Roo.log('selected');
1486 _this.grid.stopEditing();
1492 displayField : 'name',
1494 emptyText : "Select classification",
1495 forceSelection : true,
1496 hiddenName : 'classification_id',
1498 loadingText : "Searching...",
1500 name : 'classification_id_name',
1502 qtip : "Select classification",
1504 selectOnFocus : true,
1505 tpl : '<div class="x-grid-cell-text RdYlGn-q{seqid}-{seqmax}"><b>{name}</b> </div>',
1506 triggerAction : 'all',
1514 beforeload : function (_self, o){
1515 o.params = o.params || {};
1516 o.params.etype='classification'
1522 sortInfo : { direction : 'ASC', field: 'seqid' },
1527 url : baseURL + '/Roo/core_enum.php'
1530 xtype: 'JsonReader',
1534 totalProperty : 'total',
1535 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1542 xtype: 'ColumnModel',
1544 dataIndex : 'resolution_id',
1545 header : 'Resolution',
1548 renderer : function(v) { return String.format('{0}', v); }
1551 xtype: 'ColumnModel',
1553 dataIndex : 'estimated',
1556 renderer : function(v,x,r) {
1557 return String.format('{0}/{1}', r.data.spent, v);
1560 xtype: 'GridEditor',
1563 xtype: 'NumberField',
1565 allowDecimals : true,
1566 decimalPrecision : 1
1571 xtype: 'ColumnModel',
1573 dataIndex : 'updated_changedate',
1577 renderer : function(v,x,r) {
1580 var str= Date.parseDate( r.data.updated ? r.json.updated_changedate : r.json.created_changedate, 'Y-m-d H:i:s');
1583 return String.format('{0}', str ? str.format('d/M/Y') : '?');
1588 xtype: 'DropTarget',
1591 over : function (source, e, data)
1595 // if drag point == drop point...
1596 var grid = _this.grid;
1597 var t = Roo.lib.Event.getTarget(e);
1598 var ri = grid.view.findRowIndex(t);
1599 var dp = this.getDropPoint(e,data);
1601 //Roo.log(JSON.stringify({ dp: dp, ri: ri, src_ri: data.rowIndex}));
1602 if(ri == data.rowIndex ||
1603 (dp == 'above' && ri-1 == data.rowIndex) ||
1604 (dp == 'below' && ri+1 == data.rowIndex)
1606 this.expandRow(false);
1611 this.expandRow(ri, dp);
1614 this.valid = 'ok-add';
1616 drop : function (source, e, data)
1618 var grid = _this.grid;
1619 var t = Roo.lib.Event.getTarget(e);
1620 var t = Roo.lib.Event.getTarget(e);
1621 var ri = grid.view.findRowIndex(t);
1624 var dp = this.getDropPoint(e,data);
1625 // at this point should have above or below..
1626 var os = grid.selModel.getSelectedCell()
1627 grid.ds.remove(data.selections[0]);
1628 var new_row = ri + (dp == 'below' ? 1 : 0);
1629 grid.ds.insert(new_row , data.selections);
1630 grid.selModel.select(new_row , os[1])
1631 this.expandRow(false);
1635 var above_row = new_row-1;
1636 if (above_row > -1) {
1637 above_id = grid.ds.getAt(above_row).data.id;
1641 url : baseURL + '/Roo/Mtrack_ticket',
1643 id : grid.ds.getAt(new_row).data.id,
1653 ddGroup : 'mtrack_ticket',
1654 expandRow : function(ri,pos)
1656 var dom = _this.grid.view.getRow(ri);
1658 //if (this.activeDom == dom) {
1661 if (this.activeDom) {
1662 Roo.get(this.activeDom).removeClass('x-grid-dd-above');
1663 Roo.get(this.activeDom).removeClass('x-grid-dd-below');
1665 this.activeDom = false;
1671 Roo.get(dom).addClass('x-grid-dd-' + pos);
1673 this.activeDom = dom;
1677 getDropPoint : function(e, data)
1680 // data is from griddragzone
1682 var te = Roo.lib.Event.getTarget(e);
1685 var ri = Roo.fly(te).findParent("td", 6);
1689 var t = Roo.lib.Dom.getY(dragEl),
1690 b = t + dragEl.offsetHeight;
1691 var y = Roo.lib.Event.getPageY(e);
1692 //var noAppend = tn.allowChildren === false || tn.isLeaf();
1694 // we may drop nodes anywhere, as long as allowChildren has not been set to false..
1697 var q = (b - t) / 2;
1700 if(y >= t && y < (t + q)){
1703 if(y >= b-q && y <= b){
1706 //Roo.log( JSON.stringify( {pos: y, dragtop : t, mid : q, drabgot: b }));
1715 xtype: 'ContentPanel',
1718 activate : function (_self)
1720 _this.tpanel = _self;
1722 resize : function (_self, width, height)
1724 // create and update the CSS style
1727 _this.css = Roo.util.CSS;
1729 _this.css.createStyleSheet(
1731 ".ticket-view-main .ticket-left-col { }\n" +
1732 ".ticket-view-main .readonly-tkt-description { }\n" +
1733 ".ticket-view-main .mtrack-ticket-events {} \n"
1739 var w = width - 400;
1740 Roo.log("new width: " + Math.max(0,w));
1742 _this.css.updateRule(
1743 ".ticket-view-main .ticket-left-col",
1744 "width", Math.max(0, w) + 'px'
1746 _this.css.updateRule(
1747 ".ticket-view-main .readonly-tkt-description",
1748 "width", Math.max(0, w-10) + 'px'
1750 _this.css.updateRule(
1751 ".ticket-view-main .mtrack-ticket-events",
1752 "width", Math.max(0, w-10) + 'px'
1758 fitContainer : true,
1762 mload : function(url) {
1763 if (typeof(MTrack) == 'undefined') {
1767 this._project = MTrack.projectCombo.getValue();
1768 if (!_this.tpanel) {
1771 MTrack.ajaxLoad(url, this);
1772 MTrackWeb.pushState({
1774 title : "Browse : " + url,
1775 href : baseURL + url
1787 click : function (_self, e)
1792 var rc = _this.grid.getSelectionModel().getSelectedCell()
1794 Roo.MessageBox.alert("Error", "Select a ticket");
1801 _this.panel.layout.getRegion('south').show();
1802 _this.panel.layout.getRegion('north').hide();
1804 var rec = _this.grid.ds.getAt(rc[0]);
1805 _this.form.setValues({
1811 if (_this.panel.layout.getRegion('south').isVisible() && _this.form.isDirty()) {
1812 Roo.MessageBox.confirm("Cancel", "Are you sure you want to cancel editing", function(r) {
1828 text : "Add Comment / Update"
1834 click : function (_self, e)
1836 var rc = _this.grid.getSelectionModel().getSelectedCell()
1838 Roo.MessageBox.alert("Error", "Select a ticket");
1841 var rec = _this.grid.ds.getAt(rc[0]);
1842 Pman.Dialog.MTrackTicket.show({ id : rec.data.id } , function(res) {
1843 // apply the data to the current row, and reload the display part..
1851 text : "Edit original ticket"
1857 click : function (_self, e)
1859 var rc = _this.grid.getSelectionModel().getSelectedCell()
1861 Roo.MessageBox.alert("Error", "Select a ticket");
1864 var rec = _this.grid.ds.getAt(rc[0]);
1865 Pman.Dialog.Image.show( {
1867 ontable : 'mtrack_ticket'
1870 // update the body part..
1880 text : "Add Attachment / Patch"
1891 xtype: 'ContentPanel',
1899 actioncomplete : function(_self,action)
1901 if (action.type == 'setdata') {
1902 //_this.dialog.el.mask("Loading");
1903 //this.load({ method: 'GET', params: { '_id' : _this.data.id }});
1906 if (action.type == 'load') {
1910 if (action.type =='submit') {
1915 var sm = _this.grid.getSelectionModel();
1916 var cs = sm.getSelectedCell();
1917 sm.fireEvent('cellselect', sm, cs[0], cs[1] );
1921 _this.panel.layout.getRegion('south').hide();
1922 _this.panel.layout.getRegion('north').show();
1923 _this.panel.layout.getRegion('north').expand();
1929 rendered : function (form)
1935 style : 'margin:10px;',
1936 url : baseURL + '/Roo/mtrack_ticket.php',
1952 fieldLabel : 'Your comment',
1962 labelAlign : 'right',
1971 displayField : 'name',
1973 emptyText : "Change Status",
1974 fieldLabel : 'Status',
1975 forceSelection : true,
1976 hiddenName : 'status',
1978 loadingText : "Searching...",
1980 name : 'status_name',
1981 qtip : "Change Status",
1982 queryParam : 'query[name]',
1983 selectOnFocus : true,
1984 tpl : '<div class="x-grid-cell-text x-btn button"><b>{name}</b> </div>',
1985 triggerAction : 'all',
1993 beforeload : function (_self, o){
1994 o.params = o.params || {};
1996 o.params['query[ticket_change]'] = _this.form.findField('id').getValue();
1998 load : function (_self, records, options)
2000 var cs = _this.grid.getSelectionModel().getSelectedCell();
2001 var status = _this.grid.ds.getAt(cs[0]).data.status;
2003 Roo.each(records, function(r) {
2005 if (r.data.id == status) {
2006 r.set('name', "No Change");
2013 if (r.data.etype == 'resolution') {
2014 r.set('name', "Close as " + r.data.name);
2017 r.set('name', 'Change to ' + r.data.name);
2022 sortInfo : { direction : 'ASC', field: 'id' },
2027 url : baseURL + '/Roo/core_enum.php'
2030 xtype: 'JsonReader',
2034 totalProperty : 'total',
2035 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
2044 displayField : 'name',
2046 emptyText : "Select Person",
2047 fieldLabel : 'Action Required By',
2048 forceSelection : true,
2049 hiddenName : 'developer_id',
2051 loadingText : "Searching...",
2053 name : 'developer_id_name',
2054 qtip : "Select Person",
2055 queryParam : 'query[name]',
2056 selectOnFocus : true,
2057 tpl : '<div class="x-grid-cell-text x-btn button"><b>{name}</b> <{email}></div>',
2058 triggerAction : 'all',
2066 beforeload : function (_self, o){
2067 o.params = o.params || {};
2069 o.params['query[ticket_id]'] =_this.grid.getSelected().data.id;
2071 o.params['query[project_id]']= _this.grid.getSelected().data.project_id;
2072 o.params._anyrole = 1;
2074 o.params.limit = 999;
2078 sortInfo : { direction : 'ASC', field: 'name' },
2083 url : baseURL + '/Roo/Person.php'
2086 xtype: 'JsonReader',
2090 totalProperty : 'total',
2091 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
2096 xtype: 'NumberField',
2098 decimalPrecision : 2,
2099 fieldLabel : 'Log hours',
2122 click : function (_self, e)
2124 _this.form.submit();
2137 click : function (_self, e)
2140 _this.panel.layout.getRegion('south').hide();
2141 _this.panel.layout.getRegion('north').show();
2142 _this.panel.layout.getRegion('north').expand();
2152 xtype: 'LayoutRegion',
2157 xtype: 'LayoutRegion',
2165 xtype: 'LayoutRegion',