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