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