Pman.Tab.AdminContactsGroup.bjs
[Pman.Admin] / Pman.Tab.AdminContactsGroup.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.AdminContactsGroup = new Roo.XComponent({
6     part     :  ["Admin","ContactsGroup"],
7     order    : '001-Pman.Tab.AdminContactsGroup',
8     region   : 'center',
9     parent   : 'Pman.Tab.AdminContactsManager',
10     name     : "Pman.Tab.AdminContactsGroup",
11     disabled : false, 
12     permname : '', 
13     _tree : function()
14     {
15         var _this = this;
16         var MODULE = this;
17         return {
18             xtype: 'GridPanel',
19             xns: Roo,
20             listeners : {
21                 activate : function() {
22                     _this.panel = this;
23                     if (_this.grid) {
24                         _this.grid.ds.load({});
25                     }
26                 }
27             },
28             background : true,
29             fitContainer : true,
30             fitToframe : true,
31             region : 'west',
32             tableName : 'Groups',
33             title : "Groups",
34             grid : {
35                 xtype: 'Grid',
36                 xns: Roo.grid,
37                 listeners : {
38                     render : function() 
39                     {
40                         _this.grid = this; 
41                         _this.dialog = Pman.Dialog.Groups;
42                         if (_this.panel.active) {
43                             _this.grid.ds.load({});
44                         }
45                     },
46                     rowdblclick : function (_self, rowIndex, e)
47                     {
48                         if (!_this.dialog) return;
49                         var s = this.getDataSource().getAt(rowIndex);
50                         if (s.data.id < 1 ) {
51                             return;
52                         }
53                         _this.dialog.show( s.data, function() {
54                             _this.ds.load({});
55                         }); 
56                     }
57                 },
58                 autoExpandColumn : 'name',
59                 ddGroup : 'groupDD',
60                 enableDrop : true,
61                 loadMask : true,
62                 dataSource : {
63                     xtype: 'Store',
64                     xns: Roo.data,
65                     listeners : {
66                         beforeload : function (_self, o)
67                         {
68                             o.params = o.params || {};
69                             o.params.type =2;
70                         },
71                         load : function (_self, records, options)
72                         {
73                             var sm = _this.grid.getSelectionModel();
74                                 if (!sm.getSelections().length) {
75                                     sm.selectFirstRow();
76                                 }
77                                 Pman.Tab.AdminContacts.grid.footer.onClick('first');
78                         }
79                     },
80                     remoteSort : true,
81                     sortInfo : { field : 'name', direction: 'ASC' },
82                     proxy : {
83                         xtype: 'HttpProxy',
84                         xns: Roo.data,
85                         method : 'GET',
86                         url : baseURL + '/Roo/Groups.php'
87                     },
88                     reader : {
89                         xtype: 'JsonReader',
90                         xns: Roo.data,
91                         totalProperty : 'total',
92                         root : 'data',
93                         id : 'id',
94                         fields : [
95                             {
96                                 'name': 'id',
97                                 'type': 'int'
98                             },
99                             {
100                                 'name': 'name',
101                                 'type': 'string'
102                             },
103                             {
104                                 'name': 'type',
105                                 'type': 'int'
106                             },
107                             {
108                                 'name': 'leader',
109                                 'type': 'int'
110                             },
111                             {
112                                 'name': 'leader_id',
113                                 'type': 'int'
114                             },
115                             {
116                                 'name': 'leader_office_id',
117                                 'type': 'int'
118                             },
119                             {
120                                 'name': 'leader_name',
121                                 'type': 'string'
122                             },
123                             {
124                                 'name': 'leader_phone',
125                                 'type': 'string'
126                             },
127                             {
128                                 'name': 'leader_fax',
129                                 'type': 'string'
130                             },
131                             {
132                                 'name': 'leader_email',
133                                 'type': 'string'
134                             },
135                             {
136                                 'name': 'leader_company_id',
137                                 'type': 'int'
138                             },
139                             {
140                                 'name': 'leader_role',
141                                 'type': 'string'
142                             },
143                             {
144                                 'name': 'leader_active',
145                                 'type': 'int'
146                             },
147                             {
148                                 'name': 'leader_remarks',
149                                 'type': 'string'
150                             },
151                             {
152                                 'name': 'leader_passwd',
153                                 'type': 'string'
154                             },
155                             {
156                                 'name': 'leader_owner_id',
157                                 'type': 'int'
158                             },
159                             {
160                                 'name': 'leader_lang',
161                                 'type': 'string'
162                             },
163                             {
164                                 'name': 'leader_no_reset_sent',
165                                 'type': 'int'
166                             },
167                             {
168                                 'name': 'leader_action_type',
169                                 'type': 'string'
170                             },
171                             {
172                                 'name': 'leader_project_id',
173                                 'type': 'int'
174                             }
175                         ]
176                     }
177                 },
178                 toolbar : {
179                     xtype: 'Toolbar',
180                     xns: Roo,
181                     items : [
182                         {
183                             xtype: 'Button',
184                             xns: Roo.Toolbar,
185                             text : "Manage Groups",
186                             menu : {
187                                 xtype: 'Menu',
188                                 xns: Roo.menu,
189                                 items : [
190                                     {
191                                         xtype: 'Item',
192                                         xns: Roo.menu,
193                                         listeners : {
194                                             click : function()
195                                             {
196                                                 if (!_this.dialog) return;
197                                                 _this.dialog.show( { id : 0,  type: 2 } , function() {
198                                                      _this.grid.ds.load({});
199                                                }); 
200                                             }
201                                         },
202                                         cls : 'x-btn-text-icon',
203                                         text : "Add",
204                                         icon : Roo.rootURL + 'images/default/dd/drop-add.gif'
205                                     },
206                                     {
207                                         xtype: 'Item',
208                                         xns: Roo.menu,
209                                         listeners : {
210                                             click : function()
211                                             {
212                                                 var s = _this.grid.getSelectionModel().getSelections();
213                                                 if (!s.length || (s.length > 1))  {
214                                                     Roo.MessageBox.alert("Error", s.length ? "Select only one Row" : "Select a Row");
215                                                     return;
216                                                 }
217                                                 if (s[0].data.id < 1 ) {
218                                                     return;
219                                                 }
220                                                 if (!_this.dialog) return;
221                                                 _this.dialog.show(s[0].data, function() {
222                                                      _this.grid.ds.load({});
223                                                 }); 
224                                                 
225                                             }
226                                         },
227                                         cls : 'x-btn-text-icon',
228                                         text : "Edit",
229                                         icon : Roo.rootURL + 'images/default/tree/leaf.gif'
230                                     },
231                                     {
232                                         xtype: 'Item',
233                                         xns: Roo.menu,
234                                         listeners : {
235                                             click : function()
236                                             {
237                                                  Pman.genericDelete(_this, 'Groups'); 
238                                             }
239                                         },
240                                         cls : 'x-btn-text-icon',
241                                         text : "Delete",
242                                         icon : rootURL + '/Pman/templates/images/trash.gif'
243                                     },
244                                     {
245                                         xtype: 'Separator',
246                                         xns: Roo.menu
247                                     },
248                                     {
249                                         xtype: 'Item',
250                                         xns: Roo.menu,
251                                         listeners : {
252                                             click : function (_self, e)
253                                             {
254                                               _this.grid.ds.load({});
255                                             }
256                                         },
257                                         text : "Reload"
258                                     }
259                                 ]
260                             }
261                         }
262                     ]
263                 },
264                 colModel : [
265                     {
266                         xtype: 'ColumnModel',
267                         xns: Roo.grid,
268                         dataIndex : 'name',
269                         header : 'Name',
270                         width : 200,
271                         renderer : function(v,x,r) { 
272                             if (r.data.id == -1) {
273                                 return '<b>' + "Not in a Group" + '</b>';
274                             }
275                             if ((r.data.id == 0) && (_this.type == 0)) {
276                                 return '<b>' + "All Staff (Default Permissions)" + '</b>';
277                             }
278                             if ((r.data.id == 0) && (_this.type == 2)) {
279                                 return '<b>' + "Everybody" + '</b>';
280                             }
281                             if (r.data.id == 0) {
282                                 return '<b>' + "All Staff" + '</b>';
283                             }
284                             if (v == 'Administrators') {
285                                 return '<b>' + "Adminstrators" + '</b>';
286                             }
287                             if (r.data.leader) {
288                                 return v + ' (' + r.data.leader_name + ')';
289                             }
290                             
291                             return v;
292                         }
293                     }
294                 ],
295                 sm : {
296                     xtype: 'RowSelectionModel',
297                     xns: Roo.grid,
298                     listeners : {
299                         afterselectionchange : function (_self)
300                         {
301                             Pman.Tab.AdminContacts.grid.footer.onClick('first');
302                         }
303                     },
304                     singleSelect : true
305                 },
306                 dropTarget : {
307                     xtype: 'DropTarget',
308                     xns: Roo.dd,
309                     listeners : {
310                         drop : function (source, e, data)
311                         {
312                             // Roo.log("DROP");
313                             var t = Roo.lib.Event.getTarget(e); 
314                             var ri = _this.grid.view.findRowIndex(t);
315                             var rid  = false;
316                             if (ri !== false) {
317                                 rid = _this.grid.getDataSource().getAt(ri).data;
318                             }
319                             var s = _this.grid.getSelectionModel().getSelections();
320                               
321                             //console.log(data);
322                             var isFromGroup = s.length ? s[0].data.id > 0 : false;
323                         
324                             var isToGroup = rid && rid.id > 0;
325                             this.success = false;
326                             if (isFromGroup && isToGroup) {
327                                 return;
328                             }
329                             if (!isFromGroup && !isToGroup) {
330                                 return;
331                             }
332                             var action = 'add';
333                             if (isFromGroup && !isToGroup) {
334                                 action = 'sub';
335                                 //return 'x-dd-drop-ok-sub'; 
336                             }
337                             // build a list of selections.
338                             var sels = [];
339                             for (var i=0; i < data.selections.length; i++) {
340                                 sels.push(data.selections[i].data.id);
341                             }
342                         
343                             new Pman.Request({
344                                 url: baseURL + '/Core/GroupMembers.php',
345                                 params: {
346                                     action : action,
347                                     group_id: action =='add' ? rid.id : s[0].data.id,
348                                     type: _this.type,
349                                     user_ids : sels.join(',')
350                                     
351                                 },  
352                                 method: 'POST',  
353                                 success : function(res) {
354                                     var data = res.data
355                                     //refreshPager();
356                                     // 
357                                     // do we need to do anything??
358                                     if (isFromGroup) {
359                                         Pman.Tab.AdminContacts.grid.footer.onClick('refresh');
360                                     }
361                                 }, 
362                                 
363                                 failure: function() {
364                                     //Ext.get(document.body).unmask();
365                                     //if (cb) {
366                                     //    cb.call(false);
367                                     //}
368                                      
369                                 }
370                             });
371                         
372                             this.success = true;
373                         
374                             //if (!isFromGroup && isToGroup) {
375                                 //return 'x-dd-drop-ok-add'; 
376                             return;
377                             //}
378                         },
379                         over : function (source, e, data)
380                         {
381                             // Roo.log("dragover");
382                              
383                             //Roo.log(e);
384                             var t = Roo.lib.Event.getTarget(e); 
385                                //  Roo.log(t);
386                             var ri = _this.grid.view.findRowIndex(t);
387                               //            Roo.log(ri);
388                             
389                             var rid  = false;
390                             if (ri !== false) {
391                                 rid = _this.grid.getDataSource().getAt(ri).data;
392                             }
393                             
394                             var s = _this.grid.getSelectionModel().getSelections();
395                             
396                             var isFromGroup = s.length ? s[0].data.id > 0 : false;
397                             
398                             var isToGroup = rid && rid.id > 0;
399                             
400                         //    Roo.log("isToGroup:"  + isToGroup + ", isFromGroup" + isFromGroup);
401                              
402                             if (isFromGroup && isToGroup) {
403                                 this.valid = false;
404                         //        Roo.log('not valid');
405                                 return;
406                             }
407                             if (!isFromGroup && !isToGroup) {
408                                 this.valid = false;
409                         //        Roo.log('not valid');
410                                 return  
411                             }
412                             if (isFromGroup && !isToGroup) {
413                                 this.valid = 'ok-sub'; 
414                                 return;
415                             } 
416                             //if (!isFromGroup && isToGroup) {
417                             this.valid = 'ok-add';
418                         //    Roo.log('add'); 
419                             //}
420                         }
421                     },
422                     ddGroup : 'groupDD'
423                 }
424             }
425         };
426     }
427 });