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                             var c = Pman.Tab.AdminContactsManager.layout.getRegion('center');
303                             c.getActivePanel().grid.footer.onClick('first');
304                             
305                         }
306                     },
307                     singleSelect : true
308                 },
309                 dropTarget : {
310                     xtype: 'DropTarget',
311                     xns: Roo.dd,
312                     listeners : {
313                         drop : function (source, e, data)
314                         {
315                             // Roo.log("DROP");
316                             var t = Roo.lib.Event.getTarget(e); 
317                             var ri = _this.grid.view.findRowIndex(t);
318                             var rid  = false;
319                             if (ri !== false) {
320                                 rid = _this.grid.getDataSource().getAt(ri).data;
321                             }
322                             var s = _this.grid.getSelectionModel().getSelections();
323                               
324                             //console.log(data);
325                             var isFromGroup = s.length ? s[0].data.id > 0 : false;
326                         
327                             var isToGroup = rid && rid.id > 0;
328                             this.success = false;
329                             if (isFromGroup && isToGroup) {
330                                 return;
331                             }
332                             if (!isFromGroup && !isToGroup) {
333                                 return;
334                             }
335                             var action = 'add';
336                             if (isFromGroup && !isToGroup) {
337                                 action = 'sub';
338                                 //return 'x-dd-drop-ok-sub'; 
339                             }
340                             // build a list of selections.
341                             var sels = [];
342                             for (var i=0; i < data.selections.length; i++) {
343                                 sels.push(data.selections[i].data.id);
344                             }
345                         
346                             new Pman.Request({
347                                 url: baseURL + '/Core/GroupMembers.php',
348                                 params: {
349                                     action : action,
350                                     group_id: action =='add' ? rid.id : s[0].data.id,
351                                     type: _this.type,
352                                     user_ids : sels.join(',')
353                                     
354                                 },  
355                                 method: 'POST',  
356                                 success : function(res) {
357                                     var data = res.data
358                                     //refreshPager();
359                                     // 
360                                     // do we need to do anything??
361                                     if (isFromGroup) {
362                                         Pman.Tab.AdminContacts.grid.footer.onClick('refresh');
363                                     }
364                                 }, 
365                                 
366                                 failure: function() {
367                                     //Ext.get(document.body).unmask();
368                                     //if (cb) {
369                                     //    cb.call(false);
370                                     //}
371                                      
372                                 }
373                             });
374                         
375                             this.success = true;
376                         
377                             //if (!isFromGroup && isToGroup) {
378                                 //return 'x-dd-drop-ok-add'; 
379                             return;
380                             //}
381                         },
382                         over : function (source, e, data)
383                         {
384                             // Roo.log("dragover");
385                              
386                             //Roo.log(e);
387                             var t = Roo.lib.Event.getTarget(e); 
388                                //  Roo.log(t);
389                             var ri = _this.grid.view.findRowIndex(t);
390                               //            Roo.log(ri);
391                             
392                             var rid  = false;
393                             if (ri !== false) {
394                                 rid = _this.grid.getDataSource().getAt(ri).data;
395                             }
396                             
397                             var s = _this.grid.getSelectionModel().getSelections();
398                             
399                             var isFromGroup = s.length ? s[0].data.id > 0 : false;
400                             
401                             var isToGroup = rid && rid.id > 0;
402                             
403                         //    Roo.log("isToGroup:"  + isToGroup + ", isFromGroup" + isFromGroup);
404                              
405                             if (isFromGroup && isToGroup) {
406                                 this.valid = false;
407                         //        Roo.log('not valid');
408                                 return;
409                             }
410                             if (!isFromGroup && !isToGroup) {
411                                 this.valid = false;
412                         //        Roo.log('not valid');
413                                 return  
414                             }
415                             if (isFromGroup && !isToGroup) {
416                                 this.valid = 'ok-sub'; 
417                                 return;
418                             } 
419                             //if (!isFromGroup && isToGroup) {
420                             this.valid = 'ok-add';
421                         //    Roo.log('add'); 
422                             //}
423                         }
424                     },
425                     ddGroup : 'groupDD'
426                 }
427             }
428         };
429     }
430 });