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