Pman.Tab.MTrackTicket.bjs
[Pman.MTrack] / Pman.Tab.MTrackTicket.js
1 //<script type="text/javascript">
2
3 // Auto generated file - created by app.Builder.js- do not edit directly (at present!)
4
5 Pman.Tab.MTrackTicket = new Roo.XComponent({
6     part     :  ["MTrack","Ticket"],
7     order    : '001-Pman.Tab.MTrackTicket',
8     region   : 'center',
9     parent   : 'Pman.Tab.DocumentsTab',
10     name     : "MTrackWeb.Ticket",
11     disabled : false, 
12     permname : '', 
13     _tree : function()
14     {
15         var _this = this;
16         var MODULE = this;
17         return {
18             xtype: 'NestedLayoutPanel',
19             xns: Roo,
20             listeners : {
21                 activate : function (_self)
22                 {
23                     _this.panel = _self;
24                     (function () {
25                         if (_this.tpanel) {
26                             _this.panel.layout.getRegion('south').hide();
27                             //_this.panel.layout.getRegion('north').hide();
28                         }
29                     }).defer(100);
30                     try {
31                         if (!_this.url || !_this.project || (_this.project != MTrack.projectCombo.getValue())) {
32                             (function() { 
33                                 if (_this.tpanel) { 
34                                  //   _this.tpanel.mload("/Report/1"); 
35                                 }
36                             }).defer(300);
37                         }
38                         
39                         
40                     } catch(e) {Roo.log("activate fail" + e.toString()); }
41                 }
42             },
43             background : true,
44             fitContainer : true,
45             fitToFrame : true,
46             region : 'center',
47             title : "Tickets",
48             layout : {
49                 xtype: 'BorderLayout',
50                 xns: Roo,
51                 items : [
52                     {
53                         xtype: 'GridPanel',
54                         xns: Roo,
55                         listeners : {
56                             activate : function() {
57                                 _this.gpanel = this;
58                                 if (_this.grid) {
59                                     _this.grid.ds.load({});
60                                 }
61                             }
62                         },
63                         background : true,
64                         fitContainer : true,
65                         fitToframe : true,
66                         region : 'north',
67                         tableName : 'mtrack_ticket',
68                         title : "mtrack_ticket",
69                         grid : {
70                             xtype: 'EditorGrid',
71                             xns: Roo.grid,
72                             listeners : {
73                                 render : function() 
74                                 {
75                                     _this.grid = this; 
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({});
80                                     }
81                                 },
82                                 afteredit : function (e)
83                                 {
84                                     Roo.log(e);
85                                     e.record.commit();
86                                 },
87                                 celldblclick : function (_self, rowIndex, columnIndex, e)
88                                 {
89                                      var c = _this.grid.colModel.getDataIndex(columnIndex);
90                                     
91                                     
92                                     if (c.match(/_id$/) ) {
93                                         return;
94                                     }
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..
98                                     
99                                     });
100                                     
101                                     
102                                 }
103                             },
104                             autoExpandColumn : 'summary',
105                             clicksToEdit : 1,
106                             ddGroup : 'mtrack_ticket',
107                             enableDragDrop : true,
108                             loadMask : true,
109                             getProjectId : function() {
110                             
111                                   if (typeof(MTrack) != 'undefined') {
112                                     return  MTrack.projectCombo.getValue();
113                                   }
114                                   
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,
117                               
118                               
119                              
120                                 try {
121                                      var pr = Pman.Tab.Projects; // shuld be documentsProjects
122                                      if (!pr || !pr.grid) {
123                                         return false;
124                                     }
125                                 } catch (e) {
126                                     return false;
127                                 }
128                                 var sels = pr.grid.getSelectionModel().getSelections();
129                                 var prids = [];
130                                 if (sels.length) {
131                                     Roo.each(sels,function(s) {
132                                         prids.push(s.data.id);
133                                      });
134                                      // multi support later..
135                                     return   prids[0];
136                                  }
137                                  
138                                 
139                                  
140                                 return 0;
141                               
142                               
143                             },
144                             getProjectName : function() {
145                                  //  project_id :  _this.grid.getProjectId(), //MTrack.projectCombo ? MTrack.projectCombo.getValue() :2830 , // testing.
146                                   
147                                   if (typeof(MTrack) != 'undefined') {
148                                   
149                                     return MTrack.projectCombo.el.dom.value;
150                                   }
151                                     
152                                     
153                                   
154                                 try {
155                                      var pr = Pman.Tab.Projects; // shuld be documentsProjects
156                                      if (!pr || !pr.grid) {
157                                         return false;
158                                     }
159                                 } catch (e) {
160                                     return false;
161                                 }
162                                 var sels = pr.grid.getSelectionModel().getSelections();
163                                 var prids = [];
164                                 if (sels.length) {
165                                     Roo.each(sels,function(s) {
166                                         prids.push(s.data.name);
167                                      });
168                                      // multi support later..
169                                     return   prids[0];
170                                  }
171                                  
172                                 
173                                  
174                                 return '';  
175                             },
176                             sm : {
177                                 xtype: 'CellSelectionModel',
178                                 xns: Roo.grid,
179                                 listeners : {
180                                     cellselect : function (_self, rowIndex, colIndex)
181                                     {
182                                         var rec = _this.grid.ds.getAt(rowIndex);
183                                         
184                                         // verify nothing has chagned.. 
185                                          
186                                         // load the ticked, and render a view of it...
187                                         new Pman.Request({
188                                             url : baseURL + '/Roo/mtrack_ticket',
189                                             method : 'GET',
190                                             params : { 
191                                                 _id : rec.data.id
192                                             },
193                                             success : function(res) {
194                                                 //Roo.log(res.data);
195                                                 // render it into a template..
196                                                 _this.tpanel.setContent(Pman.MTrack.template.ticket_view(res.data));
197                                                 _this.tpanel.el.scrollTo('top',0);
198                                                  
199                                                 //... ehh
200                                                  Pman.MTrack.loadAudit(rec.data.id, _this.tpanel.el.select('.mtrack-ticket-events',true).first());
201                                              
202                                                 
203                                                
204                                                 new Pman.Request({
205                                                     url : baseURL + '/Roo/Images',
206                                                     method : 'GET',
207                                                     params : { 
208                                                         onid : rec.data.id,
209                                                         ontable : 'mtrack_ticket'
210                                                     },
211                                                     success : function(ares) {
212                                                         Roo.log(ares.data);
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) ;
216                                                     }
217                                                 });
218                                                  
219                                                 
220                                                 _this.form.reset();
221                                     
222                                                 _this.form.setValues({
223                                                     id : rec.data.id,
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"
228                                                 }); 
229                                                 
230                                                 
231                                                 for(var k in res.data) {
232                                                     rec.set(k,res.data[k]);
233                                                 }
234                                                 
235                                             }
236                                         });
237                                             
238                                         
239                                         
240                                     }
241                                 }
242                             },
243                             dataSource : {
244                                 xtype: 'Store',
245                                 xns: Roo.data,
246                                 listeners : {
247                                     beforeload : function (_self, options)
248                                     {
249                                         options.params =     options.params || {};
250                                         options.params['query[search]'] = _this.searchBox.getValue();
251                                         var sq =        options.params['query[viewtype]'] = _this.status.getValue(); 
252                                         
253                                         var ps = _this.personSel.getValue();
254                                         ps = ps ? ps : 0;
255                                         if (ps ) {
256                                             options.params.developer_id = ps <0 ? 0 : ps;
257                                         }
258                                     
259                                         
260                                         
261                                         
262                                         var pc = false;
263                                         try {
264                                             var pc = _this.grid.colModel.getIndexByDataIndex('project_id_name');
265                                             
266                                         } catch(e) {} 
267                                         
268                                         
269                                         
270                                         try { 
271                                             options.params.project_id  = Pman.Tab.DocumentsTab.panel.getProjectId();
272                                         } catch(e) {
273                                             options.params.project_id  = MTrack.projectCombo.getValue();
274                                         }
275                                         options.params.project_id =      options.params.project_id || undefined;
276                                          
277                                          
278                                            
279                                         if (  ps < 1 && pc !== false) {
280                                             _this.grid.colModel.setHidden(pc, true);
281                                             
282                                         }
283                                         
284                                         // project column
285                                          _this.grid.colModel.setHidden(pc, true);
286                                         if (pc !== false && !options.params.project_id) {
287                                              _this.grid.colModel.setHidden(pc, false);       
288                                         }
289                                     
290                                         options.params.limit = 999;
291                                         // columns...
292                                     
293                                         
294                                         
295                                     },
296                                     update : function (_self, record, operation)
297                                     {
298                                         Roo.log('update: ' + JSON.stringify(operation));
299                                         if (operation != 'commit') {
300                                             return;
301                                         }
302                                         // send things that might change..
303                                         new Pman.Request({
304                                             url : baseURL + '/Roo/mtrack_ticket',
305                                             method : 'POST',
306                                             params : {
307                                                 id : record.data.id,
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
314                                             },
315                                             success : function(res)
316                                             {
317                                                 var r = res.data;
318                                                 //Roo.log(r);
319                                                 // do nothing?
320                                                 record.modified = record.modified || {};
321                                                 for (var k in r) {
322                                                     // update the 
323                                                     if (!k.match(/_id$/) && !k.match(/_id_/)) {
324                                                         continue;
325                                                     }
326                                                     record.data[k] = r[k];
327                                                     record.modified[k] = r[k];
328                                                 }
329                                                 record.store.afterEdit(record);
330                                             }
331                                             // we should really have a failure - to reset to the old value.
332                                         });
333                                          
334                                         
335                                         
336                                     }
337                                 },
338                                 remoteSort : true,
339                                 sortInfo : { field : 'summary', direction: 'ASC' },
340                                 proxy : {
341                                     xtype: 'HttpProxy',
342                                     xns: Roo.data,
343                                     method : 'GET',
344                                     url : baseURL + '/Roo/mtrack_ticket.php'
345                                 },
346                                 reader : {
347                                     xtype: 'JsonReader',
348                                     xns: Roo.data,
349                                     totalProperty : 'total',
350                                     root : 'data',
351                                     id : 'id',
352                                     fields : [
353                                         {
354                                             'name': 'id',
355                                             'type': 'int'
356                                         },
357                                         {
358                                             'name': 'project_id',
359                                             'type': 'int'
360                                         },
361                                         {
362                                             'name': 'summary',
363                                             'type': 'string'
364                                         },
365                                         {
366                                             'name': 'description',
367                                             'type': 'string'
368                                         },
369                                         {
370                                             'name': 'changelog',
371                                             'type': 'string'
372                                         },
373                                         {
374                                             'name': 'created',
375                                             'type': 'int'
376                                         },
377                                         {
378                                             'name': 'updated',
379                                             'type': 'int'
380                                         },
381                                         {
382                                             'name': 'owner_id',
383                                             'type': 'int'
384                                         },
385                                         {
386                                             'name': 'priority_id',
387                                             'type': 'int'
388                                         },
389                                         {
390                                             'name': 'severity_id',
391                                             'type': 'int'
392                                         },
393                                         {
394                                             'name': 'classification_id',
395                                             'type': 'int'
396                                         },
397                                         {
398                                             'name': 'resolution_id',
399                                             'type': 'int'
400                                         },
401                                         {
402                                             'name': 'cc',
403                                             'type': 'string'
404                                         },
405                                         {
406                                             'name': 'status',
407                                             'type': 'int'
408                                         },
409                                         {
410                                             'name': 'estimated',
411                                             'type': 'float'
412                                         },
413                                         {
414                                             'name': 'spent',
415                                             'type': 'float'
416                                         },
417                                         {
418                                             'name': 'x_fieldname',
419                                             'type': 'string'
420                                         },
421                                         {
422                                             'name': 'developer_id',
423                                             'type': 'int'
424                                         },
425                                         {
426                                             'name': 'milestone_id',
427                                             'type': 'int'
428                                         },
429                                         {
430                                             'name': 'updated_id',
431                                             'type': 'int'
432                                         },
433                                         {
434                                             'name': 'updated_person_id',
435                                             'type': 'int'
436                                         },
437                                         {
438                                             'name': 'updated_ontable',
439                                             'type': 'string'
440                                         },
441                                         {
442                                             'name': 'updated_onid',
443                                             'type': 'int'
444                                         },
445                                         {
446                                             'name': 'updated_changedate',
447                                             'type': 'date'
448                                         },
449                                         {
450                                             'name': 'updated_reason',
451                                             'type': 'string'
452                                         },
453                                         {
454                                             'name': 'created_id',
455                                             'type': 'int'
456                                         },
457                                         {
458                                             'name': 'created_person_id',
459                                             'type': 'int'
460                                         },
461                                         {
462                                             'name': 'created_ontable',
463                                             'type': 'string'
464                                         },
465                                         {
466                                             'name': 'created_onid',
467                                             'type': 'int'
468                                         },
469                                         {
470                                             'name': 'created_changedate',
471                                             'type': 'date'
472                                         },
473                                         {
474                                             'name': 'created_reason',
475                                             'type': 'string'
476                                         },
477                                         {
478                                             'name': 'owner_id_id',
479                                             'type': 'int'
480                                         },
481                                         {
482                                             'name': 'owner_id_office_id',
483                                             'type': 'int'
484                                         },
485                                         {
486                                             'name': 'owner_id_name',
487                                             'type': 'string'
488                                         },
489                                         {
490                                             'name': 'owner_id_phone',
491                                             'type': 'string'
492                                         },
493                                         {
494                                             'name': 'owner_id_fax',
495                                             'type': 'string'
496                                         },
497                                         {
498                                             'name': 'owner_id_email',
499                                             'type': 'string'
500                                         },
501                                         {
502                                             'name': 'owner_id_company_id',
503                                             'type': 'int'
504                                         },
505                                         {
506                                             'name': 'owner_id_role',
507                                             'type': 'string'
508                                         },
509                                         {
510                                             'name': 'owner_id_active',
511                                             'type': 'int'
512                                         },
513                                         {
514                                             'name': 'owner_id_remarks',
515                                             'type': 'string'
516                                         },
517                                         {
518                                             'name': 'owner_id_passwd',
519                                             'type': 'string'
520                                         },
521                                         {
522                                             'name': 'owner_id_owner_id',
523                                             'type': 'int'
524                                         },
525                                         {
526                                             'name': 'owner_id_lang',
527                                             'type': 'string'
528                                         },
529                                         {
530                                             'name': 'owner_id_no_reset_sent',
531                                             'type': 'int'
532                                         },
533                                         {
534                                             'name': 'owner_id_action_type',
535                                             'type': 'string'
536                                         },
537                                         {
538                                             'name': 'owner_id_project_id',
539                                             'type': 'int'
540                                         },
541                                         {
542                                             'name': 'owner_id_deleted_by',
543                                             'type': 'int'
544                                         },
545                                         {
546                                             'name': 'owner_id_deleted_dt',
547                                             'type': 'date'
548                                         },
549                                         {
550                                             'name': 'developer_id_id',
551                                             'type': 'int'
552                                         },
553                                         {
554                                             'name': 'developer_id_office_id',
555                                             'type': 'int'
556                                         },
557                                         {
558                                             'name': 'developer_id_name',
559                                             'type': 'string'
560                                         },
561                                         {
562                                             'name': 'developer_id_phone',
563                                             'type': 'string'
564                                         },
565                                         {
566                                             'name': 'developer_id_fax',
567                                             'type': 'string'
568                                         },
569                                         {
570                                             'name': 'developer_id_email',
571                                             'type': 'string'
572                                         },
573                                         {
574                                             'name': 'developer_id_company_id',
575                                             'type': 'int'
576                                         },
577                                         {
578                                             'name': 'developer_id_role',
579                                             'type': 'string'
580                                         },
581                                         {
582                                             'name': 'developer_id_active',
583                                             'type': 'int'
584                                         },
585                                         {
586                                             'name': 'developer_id_remarks',
587                                             'type': 'string'
588                                         },
589                                         {
590                                             'name': 'developer_id_passwd',
591                                             'type': 'string'
592                                         },
593                                         {
594                                             'name': 'developer_id_owner_id',
595                                             'type': 'int'
596                                         },
597                                         {
598                                             'name': 'developer_id_lang',
599                                             'type': 'string'
600                                         },
601                                         {
602                                             'name': 'developer_id_no_reset_sent',
603                                             'type': 'int'
604                                         },
605                                         {
606                                             'name': 'developer_id_action_type',
607                                             'type': 'string'
608                                         },
609                                         {
610                                             'name': 'developer_id_project_id',
611                                             'type': 'int'
612                                         },
613                                         {
614                                             'name': 'developer_id_deleted_by',
615                                             'type': 'int'
616                                         },
617                                         {
618                                             'name': 'developer_id_deleted_dt',
619                                             'type': 'date'
620                                         },
621                                         {
622                                             'name': 'priority_id_id',
623                                             'type': 'int'
624                                         },
625                                         {
626                                             'name': 'priority_id_etype',
627                                             'type': 'string'
628                                         },
629                                         {
630                                             'name': 'priority_id_name',
631                                             'type': 'string'
632                                         },
633                                         {
634                                             'name': 'priority_id_active',
635                                             'type': 'int'
636                                         },
637                                         {
638                                             'name': 'priority_id_seqid',
639                                             'type': 'int'
640                                         },
641                                         {
642                                             'name': 'severity_id_id',
643                                             'type': 'int'
644                                         },
645                                         {
646                                             'name': 'severity_id_etype',
647                                             'type': 'string'
648                                         },
649                                         {
650                                             'name': 'severity_id_name',
651                                             'type': 'string'
652                                         },
653                                         {
654                                             'name': 'severity_id_active',
655                                             'type': 'int'
656                                         },
657                                         {
658                                             'name': 'severity_id_seqid',
659                                             'type': 'int'
660                                         },
661                                         {
662                                             'name': 'classification_id_id',
663                                             'type': 'int'
664                                         },
665                                         {
666                                             'name': 'classification_id_etype',
667                                             'type': 'string'
668                                         },
669                                         {
670                                             'name': 'classification_id_name',
671                                             'type': 'string'
672                                         },
673                                         {
674                                             'name': 'classification_id_active',
675                                             'type': 'int'
676                                         },
677                                         {
678                                             'name': 'classification_id_seqid',
679                                             'type': 'int'
680                                         },
681                                         {
682                                             'name': 'resolution_id_id',
683                                             'type': 'int'
684                                         },
685                                         {
686                                             'name': 'resolution_id_etype',
687                                             'type': 'string'
688                                         },
689                                         {
690                                             'name': 'resolution_id_name',
691                                             'type': 'string'
692                                         },
693                                         {
694                                             'name': 'resolution_id_active',
695                                             'type': 'int'
696                                         },
697                                         {
698                                             'name': 'resolution_id_seqid',
699                                             'type': 'int'
700                                         },
701                                         {
702                                             'name': 'status_id',
703                                             'type': 'int'
704                                         },
705                                         {
706                                             'name': 'status_etype',
707                                             'type': 'string'
708                                         },
709                                         {
710                                             'name': 'status_name',
711                                             'type': 'string'
712                                         },
713                                         {
714                                             'name': 'status_active',
715                                             'type': 'int'
716                                         },
717                                         {
718                                             'name': 'status_seqid',
719                                             'type': 'int'
720                                         },
721                                         {
722                                             'name': 'project_id_id',
723                                             'type': 'int'
724                                         },
725                                         {
726                                             'name': 'project_id_name',
727                                             'type': 'string'
728                                         },
729                                         {
730                                             'name': 'project_id_remarks',
731                                             'type': 'string'
732                                         },
733                                         {
734                                             'name': 'project_id_owner_id',
735                                             'type': 'int'
736                                         },
737                                         {
738                                             'name': 'project_id_code',
739                                             'type': 'string'
740                                         },
741                                         {
742                                             'name': 'project_id_active',
743                                             'type': 'int'
744                                         },
745                                         {
746                                             'name': 'project_id_type',
747                                             'type': 'string'
748                                         },
749                                         {
750                                             'name': 'project_id_client_id',
751                                             'type': 'int'
752                                         },
753                                         {
754                                             'name': 'project_id_team_id',
755                                             'type': 'int'
756                                         },
757                                         {
758                                             'name': 'project_id_file_location',
759                                             'type': 'string'
760                                         },
761                                         {
762                                             'name': 'project_id_open_date',
763                                             'type': 'date'
764                                         },
765                                         {
766                                             'name': 'project_id_open_by',
767                                             'type': 'int'
768                                         },
769                                         {
770                                             'name': 'project_id_close_date',
771                                             'type': 'date'
772                                         },
773                                         {
774                                             'name': 'project_id_countries',
775                                             'type': 'string'
776                                         },
777                                         {
778                                             'name': 'project_id_languages',
779                                             'type': 'string'
780                                         },
781                                         {
782                                             'name': 'project_id_agency_id',
783                                             'type': 'int'
784                                         },
785                                         {
786                                             'name': 'milestone_id_id',
787                                             'type': 'int'
788                                         },
789                                         {
790                                             'name': 'milestone_id_name',
791                                             'type': 'string'
792                                         },
793                                         {
794                                             'name': 'milestone_id_description',
795                                             'type': 'string'
796                                         },
797                                         {
798                                             'name': 'milestone_id_startdate',
799                                             'type': 'date'
800                                         },
801                                         {
802                                             'name': 'milestone_id_duedate',
803                                             'type': 'date'
804                                         },
805                                         {
806                                             'name': 'milestone_id_completed',
807                                             'type': 'date'
808                                         },
809                                         {
810                                             'name': 'milestone_id_deleted',
811                                             'type': 'int'
812                                         },
813                                         {
814                                             'name': 'milestone_id_created',
815                                             'type': 'int'
816                                         },
817                                         {
818                                             'name': 'milestone_id_updated',
819                                             'type': 'int'
820                                         },
821                                         {
822                                             'name': 'milestone_id_project_id',
823                                             'type': 'int'
824                                         }
825                                     ]
826                                 }
827                             },
828                             toolbar : {
829                                 xtype: 'Toolbar',
830                                 xns: Roo,
831                                 items : [
832                                     {
833                                         xtype: 'Button',
834                                         xns: Roo.Toolbar,
835                                         listeners : {
836                                             click : function (_self, e)
837                                             {
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
843                                             
844                                               }, function() { 
845                                                 _this.grid.ds.load({}); 
846                                                 });
847                                                 
848                                             }
849                                         },
850                                         text : "Add New Ticket"
851                                     },
852                                     {
853                                         xtype: 'Button',
854                                         xns: Roo.Toolbar,
855                                         listeners : {
856                                             click : function (_self, e)
857                                             {
858                                                 params =    {};
859                                                 params.project_id =  Pman.Tab.DocumentsTab.panel.getProjectId(); // testing.
860                                                 params.limit = 999;
861                                                 // columns...
862                                                 params['query[viewtype]'] = 'active'
863                                                 
864                                                 for (var k in _this.filterBtn) {
865                                                     if (_this.filterBtn[k].pressed) {
866                                                         params['query[viewtype]'] = k;
867                                                     }
868                                                 }
869                                                 var ii =0;
870                                                 Roo.each(_this.grid.colModel.config, function(c,i) {
871                                                     params['csvCols['+i+']'] = c.dataIndex;
872                                                     params['csvTitles['+i+']'] = c.header;
873                                                     try {
874                                                         if (typeof( c.editor.field.name) != 'undefined') {
875                                                             params['csvCols['+i+']'] = c.editor.field.name;
876                                                         }
877                                                     } catch(e) {}
878                                                     ii++;
879                                                 });
880                                                 
881                                                 params['csvCols['+ii+']'] = 'description';
882                                                 params['csvTitles['+ii+']'] = "Details";
883                                                     
884                                                 
885                                                 
886                                                 new Pman.Download({
887                                                     url: baseURL + '/Roo/mtrack_ticket',
888                                                     method: 'GET' ,
889                                                     params: params
890                                                     
891                                                 });
892                                                 
893                                                     
894                                             }
895                                         },
896                                         text : "Download to Excel"
897                                     },
898                                     {
899                                         xtype: 'Fill',
900                                         xns: Roo.Toolbar
901                                     },
902                                     {
903                                         xtype: 'TextItem',
904                                         xns: Roo.Toolbar,
905                                         text : "View:"
906                                     },
907                                     {
908                                         xtype: 'TextField',
909                                         xns: Roo.form,
910                                         listeners : {
911                                             render : function (_self)
912                                             {
913                                             _this.searchBox=  _self;
914                                             },
915                                             specialkey : function (_self, e)
916                                             {
917                                                 _this.grid.ds.load({});
918                                             }
919                                         }
920                                     },
921                                     {
922                                         xtype: 'ComboBox',
923                                         xns: Roo.form,
924                                         listeners : {
925                                             select : function (combo, record, index)
926                                             {
927                                               _this.grid.ds.load({});
928                                               
929                                             },
930                                             render : function (_self)
931                                             {
932                                                 _this.personSel = _self;
933                                                 if (Pman.Login.authUser.id) {
934                                                     this.setFromData({
935                                                         developer_id : Pman.Login.authUser.id,
936                                                         developer_id_name : Pman.Login.authUser.name
937                                                     });
938                                                 
939                                                 }
940                                             }
941                                         },
942                                         allowBlank : true,
943                                         displayField : 'developer_id_name',
944                                         editable : true,
945                                         emptyText : "Select Person ",
946                                         fieldLabel : 'Person ',
947                                         forceSelection : true,
948                                         hiddenName : 'developer_id',
949                                         listWidth : 600,
950                                         loadingText : "Searching...",
951                                         minChars : 2,
952                                         name : 'developer_id',
953                                         pageSize : 20,
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',
959                                         typeAhead : true,
960                                         valueField : 'developer_id',
961                                         width : 150,
962                                         store : {
963                                             xtype: 'Store',
964                                             xns: Roo.data,
965                                             listeners : {
966                                                 beforeload : function (_self, o)
967                                                 {
968                                                     o.params = o.params || {};
969                                                     o.params._distinct = 'developer_id';
970                                                     o.params._columns = 'developer_id,developer_id_name';
971                                                 },
972                                                 load : function (_self, records, options)
973                                                 {
974                                                     Roo.log(records);
975                                                     var ua = _this.personSel.store.reader.newRow({
976                                                         developer_id : -1,
977                                                         developer_id_name : '-- Un-assigned --'
978                                                     });
979                                                     this.insert(0,[ua]);
980                                                 //    records.unshift(ua);
981                                                 }
982                                             },
983                                             sortInfo : { field : 'developer_id_name' , direction : 'ASC' },
984                                             proxy : {
985                                                 xtype: 'HttpProxy',
986                                                 xns: Roo.data,
987                                                 method : 'GET',
988                                                 url : baseURL + '/Roo/Mtrack_ticket.php'
989                                             },
990                                             reader : {
991                                                 xtype: 'JsonReader',
992                                                 xns: Roo.data,
993                                                 id : 'id',
994                                                 root : 'data',
995                                                 totalProperty : 'total',
996                                                 fields : [
997                                                     {
998                                                         'name': 'developer_id',
999                                                         'type': 'int'
1000                                                     } ,
1001                                                         'developer_id_name'
1002                                                     
1003                                                     
1004                                                 ]
1005                                             }
1006                                         }
1007                                     },
1008                                     {
1009                                         xtype: 'ComboBox',
1010                                         xns: Roo.form,
1011                                         listeners : {
1012                                             render : function (_self)
1013                                             {
1014                                               _this.status = _self;
1015                                             },
1016                                             select : function (combo, record, index)
1017                                             {
1018                                                 Roo.log('select');
1019                                                 _this.grid.ds.load({});
1020                                             }
1021                                         },
1022                                         allowBlank : false,
1023                                         displayField : 'fname',
1024                                         editable : false,
1025                                         fieldLabel : 'Status',
1026                                         hiddenName : 'cm_status',
1027                                         listWidth : 200,
1028                                         mode : 'local',
1029                                         name : 'cm_status_name',
1030                                         triggerAction : 'all',
1031                                         value : "active",
1032                                         valueField : 'ftype',
1033                                         width : 150,
1034                                         store : {
1035                                             xtype: 'SimpleStore',
1036                                             xns: Roo.data,
1037                                             data : [ 
1038                                                 [ 'active', "Active"],
1039                                                 [ 'me' , "Assigned to me"],
1040                                                 [ 'me-all' , "Assigned to me (All projects)"],    
1041                                                 [ 'closed' , "Closed"],
1042                                                 [ 'pending' , "Pending Review"],
1043                                                 [ 'all' , "All Projects"]
1044                                                  
1045                                             ],
1046                                             fields : [  'ftype', 'fname']
1047                                         }
1048                                     },
1049                                     {
1050                                         xtype: 'Button',
1051                                         xns: Roo.Toolbar,
1052                                         listeners : {
1053                                             click : function (_self, e)
1054                                             {
1055                                                 _this.grid.ds.load({});
1056                                             }
1057                                         },
1058                                         cls : 'x-btn-icon',
1059                                         icon : rootURL + '/Pman/templates/images/search.gif'
1060                                     },
1061                                     {
1062                                         xtype: 'Button',
1063                                         xns: Roo.Toolbar,
1064                                         listeners : {
1065                                             click : function (_self, e)
1066                                             {
1067                                                 _this.searchBox.setValue('');
1068                                                 
1069                                                     _this.grid.ds.load({});
1070                                             }
1071                                         },
1072                                         cls : 'x-btn-icon',
1073                                         icon : rootURL + '/Pman/templates/images/edit-clear.gif'
1074                                     }
1075                                 ]
1076                             },
1077                             colModel : [
1078                                 {
1079                                     xtype: 'ColumnModel',
1080                                     xns: Roo.grid,
1081                                     dataIndex : 'id',
1082                                     header : 'ID#',
1083                                     sortable : true,
1084                                     width : 50,
1085                                     renderer : function(v) { return String.format('#{0}', v); }
1086                                 },
1087                                 {
1088                                     xtype: 'ColumnModel',
1089                                     xns: Roo.grid,
1090                                     dataIndex : 'project_id_name',
1091                                     header : 'Project',
1092                                     hidden : true,
1093                                     width : 75,
1094                                     renderer : function(v) { return String.format('{0}', v); }
1095                                 },
1096                                 {
1097                                     xtype: 'ColumnModel',
1098                                     xns: Roo.grid,
1099                                     dataIndex : 'milestone_id',
1100                                     header : 'Milestone',
1101                                     sortable : true,
1102                                     width : 75,
1103                                     renderer : function(v, x,r ) { return String.format('{0}', r.data.milestone_id_name); },
1104                                     editor : {
1105                                         xtype: 'GridEditor',
1106                                         xns: Roo.grid,
1107                                         listeners : {
1108                                             complete : function (_self, value, startValue)
1109                                             {
1110                                               Roo.log('complete');
1111                                             }
1112                                         },
1113                                         field : {
1114                                             xtype: 'ComboBox',
1115                                             xns: Roo.form,
1116                                             listeners : {
1117                                                 select : function (combo, record, index)
1118                                                 {
1119                                                     Roo.log('selected');
1120                                                     
1121                                                     (function() { 
1122                                                         _this.grid.stopEditing();
1123                                                     }).defer(100);
1124                                                 }
1125                                             },
1126                                             allowBlank : false,
1127                                             alwaysQuery : true,
1128                                             displayField : 'name',
1129                                             editable : false,
1130                                             emptyText : "Select mtrack_milestone",
1131                                             forceSelection : true,
1132                                             hiddenName : 'milestone_id',
1133                                             listWidth : 400,
1134                                             loadingText : "Searching...",
1135                                             minChars : 2,
1136                                             name : 'milestone_id_name',
1137                                             pageSize : 20,
1138                                             qtip : "Select mtrack_milestone",
1139                                             queryParam : '',
1140                                             selectOnFocus : true,
1141                                             tpl : '<div class="x-grid-cell-text"><b>{name}</b> - {startdate:date("d/m/Y")} - {duedate:date("d/m/Y")} </div>',
1142                                             triggerAction : 'all',
1143                                             typeAhead : true,
1144                                             valueField : 'id',
1145                                             width : 300,
1146                                             store : {
1147                                                 xtype: 'Store',
1148                                                 xns: Roo.data,
1149                                                 listeners : {
1150                                                     beforeload : function (_self, o){
1151                                                         o.params = o.params || {};
1152                                                         // set more here
1153                                                        var rec =   _this.grid.activeEditor.record;
1154                                                     
1155                                                         o.params.project_id = rec.data.project_id;
1156                                                         //o.params._viewtype = 'ACTIVE';
1157                                                         o.params._viewtype
1158                                                     }
1159                                                 },
1160                                                 remoteSort : true,
1161                                                 sortInfo : { direction : 'ASC', field: 'duedate' },
1162                                                 proxy : {
1163                                                     xtype: 'HttpProxy',
1164                                                     xns: Roo.data,
1165                                                     method : 'GET',
1166                                                     url : baseURL + '/Roo/mtrack_milestone.php'
1167                                                 },
1168                                                 reader : {
1169                                                     xtype: 'JsonReader',
1170                                                     xns: Roo.data,
1171                                                     id : 'id',
1172                                                     root : 'data',
1173                                                     totalProperty : 'total',
1174                                                     fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1175                                                 }
1176                                             }
1177                                         }
1178                                     }
1179                                 },
1180                                 {
1181                                     xtype: 'ColumnModel',
1182                                     xns: Roo.grid,
1183                                     dataIndex : 'summary',
1184                                     header : 'Summary',
1185                                     width : 200,
1186                                     renderer : function(v,x,r) { 
1187                                         
1188                                         return String.format(
1189                                             r.data.status_name == 'closed'  ?
1190                                                   '{2}<s>[{1}]</s> {0}':
1191                                                   '{2}[{1}] {0}',
1192                                                 v,
1193                                                 r.data.status_name == 'closed'  ?
1194                                                     r.data.resolution_id_name : 
1195                                                      r.data.status_name ,
1196                                                 r.json.jira_ref ?  (r.json.jira_ref+ ' ')  : ''
1197                                                 ); 
1198                                     }
1199                                 },
1200                                 {
1201                                     xtype: 'ColumnModel',
1202                                     xns: Roo.grid,
1203                                     dataIndex : 'owner_id_name',
1204                                     header : 'Owner',
1205                                     width : 75,
1206                                     renderer : function(v) { return String.format('{0}', v); }
1207                                 },
1208                                 {
1209                                     xtype: 'ColumnModel',
1210                                     xns: Roo.grid,
1211                                     dataIndex : 'developer_id',
1212                                     header : 'Developer',
1213                                     width : 75,
1214                                     renderer : function(v,x,r) { return String.format('{0}', r.data.developer_id_name); },
1215                                     editor : {
1216                                         xtype: 'GridEditor',
1217                                         xns: Roo.grid,
1218                                         field : {
1219                                             xtype: 'ComboBox',
1220                                             xns: Roo.form,
1221                                             listeners : {
1222                                                 select : function (combo, record, index)
1223                                                 {
1224                                                   
1225                                                     (function() { 
1226                                                         _this.grid.stopEditing();
1227                                                     }).defer(100);
1228                                                 }
1229                                             },
1230                                             allowBlank : true,
1231                                             alwaysQuery : true,
1232                                             displayField : 'name',
1233                                             editable : 'false',
1234                                             emptyText : "Select Person",
1235                                             fieldLabel : 'Action Required By',
1236                                             forceSelection : true,
1237                                             hiddenName : 'developer_id',
1238                                             listWidth : 400,
1239                                             loadingText : "Searching...",
1240                                             minChars : 2,
1241                                             name : 'developer_id_name',
1242                                             qtip : "Select Person",
1243                                             queryParam : 'query[name]',
1244                                             selectOnFocus : true,
1245                                             tpl : '<div class="x-grid-cell-text x-btn button"><b>{name}</b> &lt;{email}&gt;</div>',
1246                                             triggerAction : 'all',
1247                                             typeAhead : true,
1248                                             valueField : 'id',
1249                                             width : 200,
1250                                             store : {
1251                                                 xtype: 'Store',
1252                                                 xns: Roo.data,
1253                                                 listeners : {
1254                                                     beforeload : function (_self, o){
1255                                                         o.params = o.params || {};
1256                                                         // set more here
1257                                                        var rec =   _this.grid.activeEditor.record;
1258                                                     
1259                                                         
1260                                                         o.params['query[ticket_id]'] = rec.data.id;
1261                                                         
1262                                                         o.params['query[project_id]']=  rec.data.project_id;
1263                                                        o.params._anyrole = 1;
1264                                                         o.params.limit = 99;
1265                                                     }
1266                                                 },
1267                                                 remoteSort : true,
1268                                                 sortInfo : { direction : 'ASC', field: 'name' },
1269                                                 proxy : {
1270                                                     xtype: 'HttpProxy',
1271                                                     xns: Roo.data,
1272                                                     method : 'GET',
1273                                                     url : baseURL + '/Roo/Person.php'
1274                                                 },
1275                                                 reader : {
1276                                                     xtype: 'JsonReader',
1277                                                     xns: Roo.data,
1278                                                     id : 'id',
1279                                                     root : 'data',
1280                                                     totalProperty : 'total',
1281                                                     fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1282                                                 }
1283                                             }
1284                                         }
1285                                     }
1286                                 },
1287                                 {
1288                                     xtype: 'ColumnModel',
1289                                     xns: Roo.grid,
1290                                     dataIndex : 'priority_id',
1291                                     header : 'Priority',
1292                                     sortable : true,
1293                                     width : 75,
1294                                     renderer : function(v,x,r) { 
1295                                         x.css +=  " " + String.format('RdYlGn-q{0}-{1}', r.data.priority_id_seqid, r.data.priority_id_seqmax ); 
1296                                         return String.format('{0}', r.data.priority_id_name); 
1297                                         
1298                                     },
1299                                     editor : {
1300                                         xtype: 'GridEditor',
1301                                         xns: Roo.grid,
1302                                         listeners : {
1303                                             complete : function (_self, value, startValue)
1304                                             {
1305                                               Roo.log('complete');
1306                                             }
1307                                         },
1308                                         field : {
1309                                             xtype: 'ComboBox',
1310                                             xns: Roo.form,
1311                                             listeners : {
1312                                                 select : function (combo, record, index)
1313                                                 {
1314                                                     Roo.log('selected');
1315                                                     
1316                                                     (function() { 
1317                                                         _this.grid.stopEditing();
1318                                                     }).defer(100);
1319                                                 }
1320                                             },
1321                                             allowBlank : false,
1322                                             alwaysQuery : true,
1323                                             displayField : 'name',
1324                                             editable : false,
1325                                             emptyText : "Select priority",
1326                                             forceSelection : true,
1327                                             hiddenName : 'priority_id',
1328                                             listWidth : 400,
1329                                             loadingText : "Searching...",
1330                                             minChars : 2,
1331                                             name : 'priority_id_name',
1332                                             pageSize : 20,
1333                                             qtip : "Select priority",
1334                                             queryParam : '',
1335                                             selectOnFocus : true,
1336                                             tpl : '<div class="x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}"><b>{name}</b>  </div>',
1337                                             triggerAction : 'all',
1338                                             typeAhead : true,
1339                                             valueField : 'id',
1340                                             width : 300,
1341                                             store : {
1342                                                 xtype: 'Store',
1343                                                 xns: Roo.data,
1344                                                 listeners : {
1345                                                     beforeload : function (_self, o){
1346                                                         o.params = o.params || {};
1347                                                        o.params.etype='priority'
1348                                                         // set more here
1349                                                         
1350                                                     }
1351                                                 },
1352                                                 remoteSort : true,
1353                                                 sortInfo : { direction : 'ASC', field: 'seqid' },
1354                                                 proxy : {
1355                                                     xtype: 'HttpProxy',
1356                                                     xns: Roo.data,
1357                                                     method : 'GET',
1358                                                     url : baseURL + '/Roo/core_enum.php'
1359                                                 },
1360                                                 reader : {
1361                                                     xtype: 'JsonReader',
1362                                                     xns: Roo.data,
1363                                                     id : 'id',
1364                                                     root : 'data',
1365                                                     totalProperty : 'total',
1366                                                     fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1367                                                 }
1368                                             }
1369                                         }
1370                                     }
1371                                 },
1372                                 {
1373                                     xtype: 'ColumnModel',
1374                                     xns: Roo.grid,
1375                                     dataIndex : 'severity_id',
1376                                     header : 'Severity',
1377                                     sortable : true,
1378                                     width : 75,
1379                                     renderer : function(v,x,r) { 
1380                                         x.css +=  " " + String.format('RdYlGn-q{0}-{1}', r.data.severity_id_seqid, r.data.severity_id_seqmax ); 
1381                                         return String.format('{0}', r.data.severity_id_name); 
1382                                         },
1383                                     editor : {
1384                                         xtype: 'GridEditor',
1385                                         xns: Roo.grid,
1386                                         listeners : {
1387                                             complete : function (_self, value, startValue)
1388                                             {
1389                                               Roo.log('complete');
1390                                             }
1391                                         },
1392                                         field : {
1393                                             xtype: 'ComboBox',
1394                                             xns: Roo.form,
1395                                             listeners : {
1396                                                 select : function (combo, record, index)
1397                                                 {
1398                                                     Roo.log('selected');
1399                                                     
1400                                                     (function() { 
1401                                                         _this.grid.stopEditing();
1402                                                     }).defer(100);
1403                                                 }
1404                                             },
1405                                             allowBlank : false,
1406                                             alwaysQuery : true,
1407                                             displayField : 'name',
1408                                             editable : false,
1409                                             emptyText : "Select severity",
1410                                             forceSelection : true,
1411                                             hiddenName : 'severity_id',
1412                                             listWidth : 400,
1413                                             loadingText : "Searching...",
1414                                             minChars : 2,
1415                                             name : 'severity_id_name',
1416                                             pageSize : 20,
1417                                             qtip : "Select severity",
1418                                             queryParam : '',
1419                                             selectOnFocus : true,
1420                                             tpl : '<div class="x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}"><b>{name}</b>  </div>',
1421                                             triggerAction : 'all',
1422                                             typeAhead : true,
1423                                             valueField : 'id',
1424                                             width : 300,
1425                                             store : {
1426                                                 xtype: 'Store',
1427                                                 xns: Roo.data,
1428                                                 listeners : {
1429                                                     beforeload : function (_self, o){
1430                                                         o.params = o.params || {};
1431                                                        o.params.etype='severity'
1432                                                         // set more here
1433                                                         
1434                                                     }
1435                                                 },
1436                                                 remoteSort : true,
1437                                                 sortInfo : { direction : 'ASC', field: 'seqid' },
1438                                                 proxy : {
1439                                                     xtype: 'HttpProxy',
1440                                                     xns: Roo.data,
1441                                                     method : 'GET',
1442                                                     url : baseURL + '/Roo/core_enum.php'
1443                                                 },
1444                                                 reader : {
1445                                                     xtype: 'JsonReader',
1446                                                     xns: Roo.data,
1447                                                     id : 'id',
1448                                                     root : 'data',
1449                                                     totalProperty : 'total',
1450                                                     fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1451                                                 }
1452                                             }
1453                                         }
1454                                     }
1455                                 },
1456                                 {
1457                                     xtype: 'ColumnModel',
1458                                     xns: Roo.grid,
1459                                     dataIndex : 'classification_id',
1460                                     header : 'Classification',
1461                                     sortable : true,
1462                                     width : 75,
1463                                     renderer : function(v,x,r) { 
1464                                         x.css +=  " " + String.format('RdYlGn-q{0}-{1}', r.data.classification_id_seqid, r.data.classification_id_seqmax ); 
1465                                         return String.format('{0}', r.data.classification_id_name); 
1466                                         },
1467                                     editor : {
1468                                         xtype: 'GridEditor',
1469                                         xns: Roo.grid,
1470                                         listeners : {
1471                                             complete : function (_self, value, startValue)
1472                                             {
1473                                               Roo.log('complete');
1474                                             }
1475                                         },
1476                                         field : {
1477                                             xtype: 'ComboBox',
1478                                             xns: Roo.form,
1479                                             listeners : {
1480                                                 select : function (combo, record, index)
1481                                                 {
1482                                                     Roo.log('selected');
1483                                                     
1484                                                     (function() { 
1485                                                         _this.grid.stopEditing();
1486                                                     }).defer(100);
1487                                                 }
1488                                             },
1489                                             allowBlank : false,
1490                                             alwaysQuery : true,
1491                                             displayField : 'name',
1492                                             editable : false,
1493                                             emptyText : "Select classification",
1494                                             forceSelection : true,
1495                                             hiddenName : 'classification_id',
1496                                             listWidth : 400,
1497                                             loadingText : "Searching...",
1498                                             minChars : 2,
1499                                             name : 'classification_id_name',
1500                                             pageSize : 20,
1501                                             qtip : "Select classification",
1502                                             queryParam : '',
1503                                             selectOnFocus : true,
1504                                             tpl : '<div class="x-grid-cell-text  RdYlGn-q{seqid}-{seqmax}"><b>{name}</b>  </div>',
1505                                             triggerAction : 'all',
1506                                             typeAhead : true,
1507                                             valueField : 'id',
1508                                             width : 300,
1509                                             store : {
1510                                                 xtype: 'Store',
1511                                                 xns: Roo.data,
1512                                                 listeners : {
1513                                                     beforeload : function (_self, o){
1514                                                         o.params = o.params || {};
1515                                                        o.params.etype='classification'
1516                                                         // set more here
1517                                                         
1518                                                     }
1519                                                 },
1520                                                 remoteSort : true,
1521                                                 sortInfo : { direction : 'ASC', field: 'seqid' },
1522                                                 proxy : {
1523                                                     xtype: 'HttpProxy',
1524                                                     xns: Roo.data,
1525                                                     method : 'GET',
1526                                                     url : baseURL + '/Roo/core_enum.php'
1527                                                 },
1528                                                 reader : {
1529                                                     xtype: 'JsonReader',
1530                                                     xns: Roo.data,
1531                                                     id : 'id',
1532                                                     root : 'data',
1533                                                     totalProperty : 'total',
1534                                                     fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
1535                                                 }
1536                                             }
1537                                         }
1538                                     }
1539                                 },
1540                                 {
1541                                     xtype: 'ColumnModel',
1542                                     xns: Roo.grid,
1543                                     dataIndex : 'resolution_id',
1544                                     header : 'Resolution',
1545                                     hidden : true,
1546                                     width : 75,
1547                                     renderer : function(v) { return String.format('{0}', v); }
1548                                 },
1549                                 {
1550                                     xtype: 'ColumnModel',
1551                                     xns: Roo.grid,
1552                                     dataIndex : 'estimated',
1553                                     header : 'Hours',
1554                                     width : 50,
1555                                     renderer : function(v,x,r) { 
1556                                         return String.format('{0}/{1}', r.data.spent, v); 
1557                                     },
1558                                     editor : {
1559                                         xtype: 'GridEditor',
1560                                         xns: Roo.grid,
1561                                         field : {
1562                                             xtype: 'NumberField',
1563                                             xns: Roo.form,
1564                                             allowDecimals : true,
1565                                             decimalPrecision : 1
1566                                         }
1567                                     }
1568                                 },
1569                                 {
1570                                     xtype: 'ColumnModel',
1571                                     xns: Roo.grid,
1572                                     dataIndex : 'updated_changedate',
1573                                     header : 'Updated',
1574                                     sortable : true,
1575                                     width : 75,
1576                                     renderer : function(v,x,r) { 
1577                                     
1578                                         
1579                                         var str= Date.parseDate( r.data.updated ? r.json.updated_changedate : r.json.created_changedate, 'Y-m-d H:i:s');
1580                                         
1581                                         
1582                                         return String.format('{0}', str ? str.format('d/M/Y') : '?');
1583                                      }
1584                                 }
1585                             ],
1586                             dropTarget : {
1587                                 xtype: 'DropTarget',
1588                                 xns: Roo.dd,
1589                                 listeners : {
1590                                     over : function (source, e, data)
1591                                     {
1592                                     
1593                                         Roo.log('over');
1594                                     // if drag point == drop point...
1595                                         var grid = _this.grid;
1596                                            var t = Roo.lib.Event.getTarget(e); 
1597                                            var ri = grid.view.findRowIndex(t);
1598                                            var dp = this.getDropPoint(e,data);
1599                                            Roo.log(dp);
1600                                            //Roo.log(JSON.stringify({ dp: dp,  ri: ri, src_ri: data.rowIndex}));
1601                                            if(ri == data.rowIndex ||
1602                                                 (dp == 'above' && ri-1 == data.rowIndex) ||
1603                                                 (dp == 'below' && ri+1 == data.rowIndex) 
1604                                              ) {
1605                                                this.expandRow(false);
1606                                           
1607                                                 this.valid = false;
1608                                                 return;
1609                                            }
1610                                            this.expandRow(ri, dp);
1611                                            
1612                                          
1613                                           this.valid = 'ok-add'; 
1614                                     },
1615                                     drop : function (source, e, data)
1616                                     {
1617                                             var grid = _this.grid;
1618                                             var t = Roo.lib.Event.getTarget(e); 
1619                                             var t = Roo.lib.Event.getTarget(e); 
1620                                             var ri = grid.view.findRowIndex(t);
1621                                            //Roo.log(e);
1622                                            //Roo.log(data);
1623                                             var dp = this.getDropPoint(e,data);
1624                                           // at this point should have above or below..
1625                                             var os = grid.selModel.getSelectedCell()
1626                                             grid.ds.remove(data.selections[0]);
1627                                             var new_row = ri + (dp == 'below' ? 1 : 0);
1628                                             grid.ds.insert(new_row , data.selections);
1629                                             grid.selModel.select(new_row , os[1])
1630                                             this.expandRow(false);
1631                                             
1632                                             
1633                                             var above_id = 0;
1634                                             var above_row = new_row-1;
1635                                             if (above_row > -1) {
1636                                                 above_id = grid.ds.getAt(above_row).data.id;
1637                                             }
1638                                             new Pman.Request({
1639                                                 method : 'POST',
1640                                                 url : baseURL + '/Roo/Mtrack_ticket',
1641                                                 params : { 
1642                                                     id : grid.ds.getAt(new_row).data.id,
1643                                                     _reorder : above_id
1644                                                 }
1645                                                 
1646                                             });
1647                                             
1648                                             
1649                                             
1650                                     }
1651                                 },
1652                                 ddGroup : 'mtrack_ticket',
1653                                 expandRow : function(ri,pos)
1654                                 {
1655                                     var dom = _this.grid.view.getRow(ri);
1656                                     //Roo.log(dom);
1657                                     //if (this.activeDom == dom) {
1658                                     //    return;
1659                                     //}
1660                                     if (this.activeDom) {
1661                                         Roo.get(this.activeDom).removeClass('x-grid-dd-above');
1662                                         Roo.get(this.activeDom).removeClass('x-grid-dd-below');
1663                                         
1664                                         this.activeDom = false;
1665                                     }
1666                                     
1667                                     if (ri === false) {
1668                                         return;
1669                                     }
1670                                     Roo.get(dom).addClass('x-grid-dd-' + pos);
1671                                      
1672                                     this.activeDom = dom;
1673                                 
1674                                 
1675                                 },
1676                                 getDropPoint : function(e, data)
1677                                 {
1678                                     //var tn = n.node;
1679                                    // data is from griddragzone
1680                                    
1681                                     var te = Roo.lib.Event.getTarget(e); 
1682                                     
1683                                     // use grid??
1684                                     var ri =  Roo.fly(te).findParent("td", 6);
1685                                         
1686                                    
1687                                     var dragEl = ri;
1688                                     var t = Roo.lib.Dom.getY(dragEl),
1689                                         b = t + dragEl.offsetHeight;
1690                                     var y = Roo.lib.Event.getPageY(e);
1691                                     //var noAppend = tn.allowChildren === false || tn.isLeaf();
1692                                     
1693                                     // we may drop nodes anywhere, as long as allowChildren has not been set to false..
1694                                     
1695                                       
1696                                     var q = (b - t) / 2;
1697                                     
1698                                     
1699                                     if(y >= t && y < (t + q)){
1700                                         return "above";
1701                                     }
1702                                     if(y >= b-q && y <= b){
1703                                         return "below";
1704                                     }
1705                                     //Roo.log( JSON.stringify( {pos: y, dragtop : t, mid : q, drabgot: b }));
1706                                     
1707                                     
1708                                     return false;
1709                                 }
1710                             }
1711                         }
1712                     },
1713                     {
1714                         xtype: 'ContentPanel',
1715                         xns: Roo,
1716                         listeners : {
1717                             activate : function (_self)
1718                             {
1719                                 _this.tpanel = _self;
1720                             },
1721                             resize : function (_self, width, height)
1722                             {
1723                                 // create and update the CSS style
1724                                 
1725                                 if (!_this.css) {
1726                                     _this.css = Roo.util.CSS;
1727                                 
1728                                     _this.css.createStyleSheet(
1729                                         
1730                                             ".ticket-view-main .ticket-left-col {  }\n" +
1731                                             ".ticket-view-main .readonly-tkt-description { }\n" +
1732                                             ".ticket-view-main .mtrack-ticket-events {} \n"
1733                                         ,
1734                                         Roo.id()
1735                                     );   
1736                                      
1737                                 }
1738                                 var w = width - 400;
1739                                 Roo.log("new width: " + Math.max(0,w));
1740                                 
1741                                 _this.css.updateRule(
1742                                     ".ticket-view-main .ticket-left-col", 
1743                                         "width", Math.max(0, w) +  'px'
1744                                 );
1745                                  _this.css.updateRule(
1746                                     ".ticket-view-main .readonly-tkt-description",
1747                                         "width", Math.max(0, w-10) +  'px'
1748                                 );
1749                                  _this.css.updateRule(
1750                                     ".ticket-view-main .mtrack-ticket-events",
1751                                         "width", Math.max(0, w-10) +  'px'
1752                                 );
1753                             }
1754                         },
1755                         autoScroll : true,
1756                         background : false,
1757                         fitContainer : true,
1758                         fitToFrame : true,
1759                         region : 'center',
1760                         title : "Tickets",
1761                         mload : function(url) {
1762                             if (typeof(MTrack) == 'undefined') {
1763                                 return;
1764                             }
1765                             this._url = url;
1766                             this._project = MTrack.projectCombo.getValue();
1767                             if (!_this.tpanel) {
1768                                 return;
1769                             }
1770                             MTrack.ajaxLoad(url, this);
1771                             MTrackWeb.pushState({
1772                                 url : url,
1773                                 title : "Browse : " + url,
1774                                 href : baseURL + url
1775                             });
1776                              
1777                         },
1778                         toolbar : {
1779                             xtype: 'Toolbar',
1780                             xns: Roo,
1781                             items : [
1782                                 {
1783                                     xtype: 'Button',
1784                                     xns: Roo.Toolbar,
1785                                     listeners : {
1786                                         click : function (_self, e)
1787                                         {
1788                                             
1789                                             
1790                                             
1791                                             var rc = _this.grid.getSelectionModel().getSelectedCell()
1792                                             if (!rc) {
1793                                                 Roo.MessageBox.alert("Error", "Select a ticket");
1794                                                 return;
1795                                             }
1796                                             
1797                                             
1798                                             function ok()
1799                                             {
1800                                                 _this.panel.layout.getRegion('south').show();
1801                                                 _this.panel.layout.getRegion('north').hide();
1802                                                 _this.form.reset();
1803                                                var rec =  _this.grid.ds.getAt(rc[0]);
1804                                                 _this.form.setValues({
1805                                                     id : rec.data.id
1806                                                 });
1807                                                     
1808                                             }
1809                                             
1810                                             if (_this.panel.layout.getRegion('south').isVisible() && _this.form.isDirty()) {
1811                                                 Roo.MessageBox.confirm("Cancel", "Are you sure you want to cancel editing", function(r) {
1812                                                     if (r !='yes') {
1813                                                         return;
1814                                                     }
1815                                                     ok();    
1816                                                     
1817                                                 });
1818                                                 return;
1819                                             }
1820                                             
1821                                             ok();
1822                                             
1823                                         
1824                                         
1825                                         }
1826                                     },
1827                                     text : "Add Comment / Update"
1828                                 },
1829                                 {
1830                                     xtype: 'Button',
1831                                     xns: Roo.Toolbar,
1832                                     listeners : {
1833                                         click : function (_self, e)
1834                                         {
1835                                             var rc = _this.grid.getSelectionModel().getSelectedCell()
1836                                             if (!rc) {
1837                                                 Roo.MessageBox.alert("Error", "Select a ticket");
1838                                                 return;
1839                                             }
1840                                             var rec = _this.grid.ds.getAt(rc[0]);
1841                                             Pman.Dialog.MTrackTicket.show({ id : rec.data.id } , function(res) {
1842                                                 // apply the data to the current row, and reload the display part..
1843                                             
1844                                             });
1845                                             
1846                                             
1847                                             
1848                                         }
1849                                     },
1850                                     text : "Edit original ticket"
1851                                 },
1852                                 {
1853                                     xtype: 'Button',
1854                                     xns: Roo.Toolbar,
1855                                     listeners : {
1856                                         click : function (_self, e)
1857                                         {
1858                                             var rc = _this.grid.getSelectionModel().getSelectedCell()
1859                                             if (!rc) {
1860                                                 Roo.MessageBox.alert("Error", "Select a ticket");
1861                                                 return;
1862                                             }
1863                                             var rec = _this.grid.ds.getAt(rc[0]);
1864                                             Pman.Dialog.Image.show( {
1865                                                      onid : rec.data.id,
1866                                                      ontable : 'mtrack_ticket'
1867                                                  } ,
1868                                                  function(res) {
1869                                                      // update the body part..
1870                                             
1871                                                 }
1872                                             );
1873                                             
1874                                             
1875                                             
1876                                             
1877                                         }
1878                                     },
1879                                     text : "Add Attachment / Patch"
1880                                 },
1881                                 {
1882                                     xtype: 'Button',
1883                                     xns: Roo.Toolbar,
1884                                     text : "Subscribe"
1885                                 }
1886                             ]
1887                         }
1888                     },
1889                     {
1890                         xtype: 'ContentPanel',
1891                         xns: Roo,
1892                         region : 'south',
1893                         items : [
1894                             {
1895                                 xtype: 'Form',
1896                                 xns: Roo.form,
1897                                 listeners : {
1898                                     actioncomplete : function(_self,action)
1899                                     {
1900                                         if (action.type == 'setdata') {
1901                                            //_this.dialog.el.mask("Loading");
1902                                            //this.load({ method: 'GET', params: { '_id' : _this.data.id }});
1903                                            return;
1904                                         }
1905                                         if (action.type == 'load') {
1906                                      
1907                                             return;
1908                                         }
1909                                         if (action.type =='submit') {
1910                                         
1911                                              // refresh body..
1912                                             
1913                                              
1914                                              var sm = _this.grid.getSelectionModel();
1915                                              var cs = sm.getSelectedCell();
1916                                              sm.fireEvent('cellselect',  sm, cs[0], cs[1] );
1917                                               
1918                                              // hide stuff.
1919                                     
1920                                              _this.panel.layout.getRegion('south').hide();
1921                                              _this.panel.layout.getRegion('north').show();
1922                                              _this.panel.layout.getRegion('north').expand();
1923                                              
1924                                              _this.form.reset();
1925                                              return;
1926                                         }
1927                                     },
1928                                     rendered : function (form)
1929                                     {
1930                                         _this.form= form;
1931                                     }
1932                                 },
1933                                 method : 'POST',
1934                                 style : 'margin:10px;',
1935                                 url : baseURL + '/Roo/mtrack_ticket.php',
1936                                 items : [
1937                                     {
1938                                         xtype: 'Row',
1939                                         xns: Roo.form,
1940                                         width : 900,
1941                                         items : [
1942                                             {
1943                                                 xtype: 'Column',
1944                                                 xns: Roo.form,
1945                                                 labelAlign : 'top',
1946                                                 width : 500,
1947                                                 items : [
1948                                                     {
1949                                                         xtype: 'TextArea',
1950                                                         xns: Roo.form,
1951                                                         fieldLabel : 'Your comment',
1952                                                         height : 100,
1953                                                         name : 'reason',
1954                                                         width : 400
1955                                                     }
1956                                                 ]
1957                                             },
1958                                             {
1959                                                 xtype: 'Column',
1960                                                 xns: Roo.form,
1961                                                 labelAlign : 'right',
1962                                                 labelWidth : 140,
1963                                                 width : 400,
1964                                                 items : [
1965                                                     {
1966                                                         xtype: 'ComboBox',
1967                                                         xns: Roo.form,
1968                                                         allowBlank : true,
1969                                                         alwaysQuery : true,
1970                                                         displayField : 'name',
1971                                                         editable : false,
1972                                                         emptyText : "Change Status",
1973                                                         fieldLabel : 'Status',
1974                                                         forceSelection : true,
1975                                                         hiddenName : 'status',
1976                                                         listWidth : 200,
1977                                                         loadingText : "Searching...",
1978                                                         minChars : 2,
1979                                                         name : 'status_name',
1980                                                         qtip : "Change Status",
1981                                                         queryParam : 'query[name]',
1982                                                         selectOnFocus : true,
1983                                                         tpl : '<div class="x-grid-cell-text x-btn button"><b>{name}</b> </div>',
1984                                                         triggerAction : 'all',
1985                                                         typeAhead : true,
1986                                                         valueField : 'id',
1987                                                         width : 200,
1988                                                         store : {
1989                                                             xtype: 'Store',
1990                                                             xns: Roo.data,
1991                                                             listeners : {
1992                                                                 beforeload : function (_self, o){
1993                                                                     o.params = o.params || {};
1994                                                                     // set more here
1995                                                                     o.params['query[ticket_change]'] = _this.form.findField('id').getValue();
1996                                                                 },
1997                                                                 load : function (_self, records, options)
1998                                                                 {
1999                                                                     var cs = _this.grid.getSelectionModel().getSelectedCell();
2000                                                                     var status  = _this.grid.ds.getAt(cs[0]).data.status;
2001                                                                     
2002                                                                     Roo.each(records, function(r) {
2003                                                                         
2004                                                                         if (r.data.id == status) {
2005                                                                             r.set('name', "No Change");
2006                                                                             return;
2007                                                                         }
2008                                                                         
2009                                                                         // me... ??
2010                                                                         
2011                                                                         // 
2012                                                                         if (r.data.etype == 'resolution') {
2013                                                                             r.set('name',   "Close as " + r.data.name);
2014                                                                             return;
2015                                                                         }
2016                                                                         r.set('name',  'Change to ' + r.data.name);
2017                                                                     });
2018                                                                 }
2019                                                             },
2020                                                             remoteSort : true,
2021                                                             sortInfo : { direction : 'ASC', field: 'id' },
2022                                                             proxy : {
2023                                                                 xtype: 'HttpProxy',
2024                                                                 xns: Roo.data,
2025                                                                 method : 'GET',
2026                                                                 url : baseURL + '/Roo/core_enum.php'
2027                                                             },
2028                                                             reader : {
2029                                                                 xtype: 'JsonReader',
2030                                                                 xns: Roo.data,
2031                                                                 id : 'id',
2032                                                                 root : 'data',
2033                                                                 totalProperty : 'total',
2034                                                                 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
2035                                                             }
2036                                                         }
2037                                                     },
2038                                                     {
2039                                                         xtype: 'ComboBox',
2040                                                         xns: Roo.form,
2041                                                         allowBlank : true,
2042                                                         alwaysQuery : true,
2043                                                         displayField : 'name',
2044                                                         editable : 'false',
2045                                                         emptyText : "Select Person",
2046                                                         fieldLabel : 'Action Required By',
2047                                                         forceSelection : true,
2048                                                         hiddenName : 'developer_id',
2049                                                         listWidth : 400,
2050                                                         loadingText : "Searching...",
2051                                                         minChars : 2,
2052                                                         name : 'developer_id_name',
2053                                                         qtip : "Select Person",
2054                                                         queryParam : 'query[name]',
2055                                                         selectOnFocus : true,
2056                                                         tpl : '<div class="x-grid-cell-text x-btn button"><b>{name}</b> &lt;{email}&gt;</div>',
2057                                                         triggerAction : 'all',
2058                                                         typeAhead : true,
2059                                                         valueField : 'id',
2060                                                         width : 200,
2061                                                         store : {
2062                                                             xtype: 'Store',
2063                                                             xns: Roo.data,
2064                                                             listeners : {
2065                                                                 beforeload : function (_self, o){
2066                                                                     o.params = o.params || {};
2067                                                                     // set more here
2068                                                                     o.params['query[ticket_id]'] =_this.grid.getSelected().data.id;
2069                                                                     
2070                                                                     o.params['query[project_id]']= _this.grid.getSelected().data.project_id;
2071                                                                     o.params._anyrole = 1;
2072                                                                     
2073                                                                     o.params.limit = 999;
2074                                                                 }
2075                                                             },
2076                                                             remoteSort : true,
2077                                                             sortInfo : { direction : 'ASC', field: 'name' },
2078                                                             proxy : {
2079                                                                 xtype: 'HttpProxy',
2080                                                                 xns: Roo.data,
2081                                                                 method : 'GET',
2082                                                                 url : baseURL + '/Roo/Person.php'
2083                                                             },
2084                                                             reader : {
2085                                                                 xtype: 'JsonReader',
2086                                                                 xns: Roo.data,
2087                                                                 id : 'id',
2088                                                                 root : 'data',
2089                                                                 totalProperty : 'total',
2090                                                                 fields : [{"name":"id","type":"int"},{"name":"name","type":"string"}]
2091                                                             }
2092                                                         }
2093                                                     },
2094                                                     {
2095                                                         xtype: 'NumberField',
2096                                                         xns: Roo.form,
2097                                                         decimalPrecision : 2,
2098                                                         fieldLabel : 'Log hours',
2099                                                         width : 80
2100                                                     }
2101                                                 ]
2102                                             }
2103                                         ]
2104                                     },
2105                                     {
2106                                         xtype: 'Hidden',
2107                                         xns: Roo.form,
2108                                         name : 'id'
2109                                     }
2110                                 ]
2111                             }
2112                         ],
2113                         toolbar : {
2114                             xtype: 'Toolbar',
2115                             xns: Roo,
2116                             items : [
2117                                 {
2118                                     xtype: 'Button',
2119                                     xns: Roo.Toolbar,
2120                                     listeners : {
2121                                         click : function (_self, e)
2122                                         {
2123                                             _this.form.submit();
2124                                         }
2125                                     },
2126                                     text : "Save"
2127                                 },
2128                                 {
2129                                     xtype: 'Fill',
2130                                     xns: Roo.Toolbar
2131                                 },
2132                                 {
2133                                     xtype: 'Button',
2134                                     xns: Roo.Toolbar,
2135                                     listeners : {
2136                                         click : function (_self, e)
2137                                         {
2138                                             _this.form.reset();
2139                                             _this.panel.layout.getRegion('south').hide();
2140                                             _this.panel.layout.getRegion('north').show();
2141                                             _this.panel.layout.getRegion('north').expand();
2142                                         }
2143                                     },
2144                                     text : "Cancel"
2145                                 }
2146                             ]
2147                         }
2148                     }
2149                 ],
2150                 center : {
2151                     xtype: 'LayoutRegion',
2152                     xns: Roo,
2153                     tabPosition : 'top'
2154                 },
2155                 north : {
2156                     xtype: 'LayoutRegion',
2157                     xns: Roo,
2158                     collapsible : true,
2159                     height : 300,
2160                     split : true,
2161                     tabPosition : 'top'
2162                 },
2163                 south : {
2164                     xtype: 'LayoutRegion',
2165                     xns: Roo,
2166                     height : 170,
2167                     split : true
2168                 }
2169             }
2170         };
2171     }
2172 });