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