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