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.Groups;
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                 },
70                 autoExpandColumn : 'name',
71                 ddGroup : 'groupDD',
72                 enableDrop : true,
73                 loadMask : true,
74                 dataSource : {
75                     xtype: 'Store',
76                     xns: Roo.data,
77                     listeners : {
78                         beforeload : function (_self, o)
79                         {
80                             o.params = o.params || {};
81                             o.params.type =2;
82                         },
83                         load : function (_self, records, options)
84                         {
85                             var sm = _this.grid.getSelectionModel();
86                                 if (!sm.getSelections().length) {
87                                     sm.selectFirstRow();
88                                 }
89                                 Pman.Tab.AdminContacts.grid.footer.onClick('first');
90                         }
91                     },
92                     remoteSort : true,
93                     sortInfo : { field : 'name', direction: 'ASC' },
94                     proxy : {
95                         xtype: 'HttpProxy',
96                         xns: Roo.data,
97                         method : 'GET',
98                         url : baseURL + '/Roo/Groups.php'
99                     },
100                     reader : {
101                         xtype: 'JsonReader',
102                         xns: Roo.data,
103                         totalProperty : 'total',
104                         root : 'data',
105                         id : 'id',
106                         fields : [
107                             {
108                                 'name': 'id',
109                                 'type': 'int'
110                             },
111                             {
112                                 'name': 'name',
113                                 'type': 'string'
114                             },
115                             {
116                                 'name': 'type',
117                                 'type': 'int'
118                             },
119                             {
120                                 'name': 'leader',
121                                 'type': 'int'
122                             },
123                             {
124                                 'name': 'leader_id',
125                                 'type': 'int'
126                             },
127                             {
128                                 'name': 'leader_office_id',
129                                 'type': 'int'
130                             },
131                             {
132                                 'name': 'leader_name',
133                                 'type': 'string'
134                             },
135                             {
136                                 'name': 'leader_phone',
137                                 'type': 'string'
138                             },
139                             {
140                                 'name': 'leader_fax',
141                                 'type': 'string'
142                             },
143                             {
144                                 'name': 'leader_email',
145                                 'type': 'string'
146                             },
147                             {
148                                 'name': 'leader_company_id',
149                                 'type': 'int'
150                             },
151                             {
152                                 'name': 'leader_role',
153                                 'type': 'string'
154                             },
155                             {
156                                 'name': 'leader_active',
157                                 'type': 'int'
158                             },
159                             {
160                                 'name': 'leader_remarks',
161                                 'type': 'string'
162                             },
163                             {
164                                 'name': 'leader_passwd',
165                                 'type': 'string'
166                             },
167                             {
168                                 'name': 'leader_owner_id',
169                                 'type': 'int'
170                             },
171                             {
172                                 'name': 'leader_lang',
173                                 'type': 'string'
174                             },
175                             {
176                                 'name': 'leader_no_reset_sent',
177                                 'type': 'int'
178                             },
179                             {
180                                 'name': 'leader_action_type',
181                                 'type': 'string'
182                             },
183                             {
184                                 'name': 'leader_project_id',
185                                 'type': 'int'
186                             }
187                         ]
188                     }
189                 },
190                 toolbar : {
191                     xtype: 'Toolbar',
192                     xns: Roo,
193                     items : [
194                         {
195                             xtype: 'Button',
196                             xns: Roo.Toolbar,
197                             text : "Manage Groups",
198                             menu : {
199                                 xtype: 'Menu',
200                                 xns: Roo.menu,
201                                 items : [
202                                     {
203                                         xtype: 'Item',
204                                         xns: Roo.menu,
205                                         listeners : {
206                                             click : function()
207                                             {
208                                                 if (!_this.dialog) return;
209                                                 _this.dialog.show( { id : 0,  type: 2 } , function() {
210                                                      _this.grid.ds.load({});
211                                                }); 
212                                             }
213                                         },
214                                         cls : 'x-btn-text-icon',
215                                         text : "Add",
216                                         icon : Roo.rootURL + 'images/default/dd/drop-add.gif'
217                                     },
218                                     {
219                                         xtype: 'Item',
220                                         xns: Roo.menu,
221                                         listeners : {
222                                             click : function()
223                                             {
224                                                 var s = _this.grid.getSelectionModel().getSelections();
225                                                 if (!s.length || (s.length > 1))  {
226                                                     Roo.MessageBox.alert("Error", s.length ? "Select only one Row" : "Select a Row");
227                                                     return;
228                                                 }
229                                                 if (!_this.dialog) return;
230                                                 _this.dialog.show(s[0].data, function() {
231                                                      _this.grid.ds.load({});
232                                                 }); 
233                                                 
234                                             }
235                                         },
236                                         cls : 'x-btn-text-icon',
237                                         text : "Edit",
238                                         icon : Roo.rootURL + 'images/default/tree/leaf.gif'
239                                     },
240                                     {
241                                         xtype: 'Item',
242                                         xns: Roo.menu,
243                                         listeners : {
244                                             click : function()
245                                             {
246                                                  Pman.genericDelete(_this, 'Groups'); 
247                                             }
248                                         },
249                                         cls : 'x-btn-text-icon',
250                                         text : "Delete",
251                                         icon : rootURL + '/Pman/templates/images/trash.gif'
252                                     },
253                                     {
254                                         xtype: 'Separator',
255                                         xns: Roo.menu
256                                     },
257                                     {
258                                         xtype: 'Item',
259                                         xns: Roo.menu,
260                                         listeners : {
261                                             click : function (_self, e)
262                                             {
263                                               _this.grid.ds.load({});
264                                             }
265                                         },
266                                         text : "Reload"
267                                     }
268                                 ]
269                             }
270                         }
271                     ]
272                 },
273                 colModel : [
274                     {
275                         xtype: 'ColumnModel',
276                         xns: Roo.grid,
277                         dataIndex : 'name',
278                         header : 'Name',
279                         width : 200,
280                         renderer : function(v,x,r) { 
281                             if (r.data.id == -1) {
282                                 return '<b>' + "Not in a Group" + '</b>';
283                             }
284                             if ((r.data.id == 0) && (_this.type == 0)) {
285                                 return '<b>' + "All Staff (Default Permissions)" + '</b>';
286                             }
287                             if ((r.data.id == 0) && (_this.type == 2)) {
288                                 return '<b>' + "Everybody" + '</b>';
289                             }
290                             if (r.data.id == 0) {
291                                 return '<b>' + "All Staff" + '</b>';
292                             }
293                             if (v == 'Administrators') {
294                                 return '<b>' + "Adminstrators" + '</b>';
295                             }
296                             if (r.data.leader) {
297                                 return v + ' (' + r.data.leader_name + ')';
298                             }
299                             
300                             return v;
301                         }
302                     }
303                 ],
304                 sm : {
305                     xtype: 'RowSelectionModel',
306                     xns: Roo.grid,
307                     listeners : {
308                         afterselectionchange : function (_self)
309                         {
310                             Pman.Tab.AdminContacts.footer.onClick('first');
311                         }
312                     },
313                     singleSelect : true
314                 },
315                 dropTarget : {
316                     xtype: 'DropTarget',
317                     xns: Roo.dd,
318                     listeners : {
319                         drop : function (source, e, data)
320                         {
321                             // Roo.log("DROP");
322                             var t = Roo.lib.Event.getTarget(e); 
323                             var ri = _this.grid.view.findRowIndex(t);
324                             var rid  = false;
325                             if (ri !== false) {
326                                 rid = _this.grid.getDataSource().getAt(ri).data;
327                             }
328                             var s = _this.grid.getSelectionModel().getSelections();
329                               
330                             //console.log(data);
331                             var isFromGroup = s.length ? s[0].data.id > 0 : false;
332                         
333                             var isToGroup = rid && rid.id > 0;
334                             this.success = false;
335                             if (isFromGroup && isToGroup) {
336                                 return;
337                             }
338                             if (!isFromGroup && !isToGroup) {
339                                 return;
340                             }
341                             var action = 'add';
342                             if (isFromGroup && !isToGroup) {
343                                 action = 'sub';
344                                 //return 'x-dd-drop-ok-sub'; 
345                             }
346                             // build a list of selections.
347                             var sels = [];
348                             for (var i=0; i < data.selections.length; i++) {
349                                 sels.push(data.selections[i].data.id);
350                             }
351                         
352                             Pman.request({
353                                 url: baseURL + '/Core/GroupMembers.php',
354                                 params: {
355                                     action : action,
356                                     group_id: action =='add' ? rid.id : s[0].data.id,
357                                     type: _this.type,
358                                     user_ids : sels.join(',')
359                                     
360                                 },  
361                                 method: 'POST',  
362                                 success : function(data) {
363                                     refreshPager();
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                              Roo.log("dragover");
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 = 'sub'; 
417                                 Roo.log('sub');
418                                 return;
419                             } 
420                             //if (!isFromGroup && isToGroup) {
421                             this.valid = 'add';
422                             Roo.log('add'); 
423                             //}
424                         }
425                     },
426                     ddGroup : 'groupDD'
427                 }
428             }
429         });
430         this.layout = this.panel.layout;
431
432     }
433 });