1 //<script type="text/javascript">
5 * generic person list - used by perms. and staff lists.
7 * -- this is probably depreciated now..
13 Pman.Tab.PersonList = function(config)
15 Roo.apply(this, config);
18 Pman.Tab.PersonList.prototype = {
20 //--- things that should be set!!!!
21 id : '', // should be set to something!
22 type : 0, // means!! = 0 = Groups (perms) 1= teams - loose grouping..
24 hiddenColumns: false, // lsit of cols to hide..
25 itemDisplayName : false, /// eg "Staff Employees / Contacts etc."
26 permName : 'Core.Person', // or 'Core.Staff'
27 getLeftSelections : function() { return []; },
30 // beforeload handler... -- override on extended versions..
31 beforeload: function(t, o) {
32 //console.log(o.params);
34 alert('person list not configured');
37 var tms = _this.getLeftSelections();
40 o.params['query[in_group]'] = tms[0].data.id;
42 o.params['query[name]'] = this.searchBox.getValue();
43 o.params['query[type]'] = this.type; // group type..
44 o.params['query[person_internal_only_all]'] = 1;
45 o.params['query[person_inactive]'] = this.showInActive ? 0 : 1;
52 alert('person list not configured');
56 this.c_office_id_name(),
66 alert('person list not configured');
68 return Pman.Dialog.PersonStaff;
70 bulkAdd : function() {
71 //return Pman.Dialog.PersonBulkAdd
74 newDefaults : function() {
75 alert('person list not configured');
80 company_id : Pman.Login.authUser.company_id,
81 company_id_name : Pman.Login.authUser.company_id_name,
82 company_id_address : Pman.Login.authUser.company_id_address,
83 company_id_tel : Pman.Login.authUser.company_id_tel,
84 company_id_fax : Pman.Login.authUser.company_id_fax
90 /// --- end extendable bits...
94 showInActive : 0, // toggle var for hiding and showing active staff..
102 refreshWestPanel : function() /// used wher???
104 var actpan = this.parentLayout.getRegion('west').getActivePanel();
105 if (actpan && actpan.controller) {
106 actpan.controller.paging.onClick('refresh');
111 if (!actpan || !actpan.id) {
114 Pman.Tab[actpan.id].refresh();
119 this.delayedCreate();
121 this.paging.onClick('refresh');
124 loadFirst: function(){
126 this.delayedCreate();
128 this.paging.onClick('first');
133 add : function(parentLayout, region) {
137 parentLayout.getRegion(region).showPanel(this.panel);
140 this.parentLayout = parentLayout;
142 this.layout = new Roo.BorderLayout(
143 parentLayout.getEl().createChild({tag:'div'}),
155 this.tab = parentLayout.add(region,
156 new Roo.NestedLayoutPanel(
163 this.tab.on('activate', function() {
164 _this.delayedCreate();
165 // _this.paging.onClick('refresh');
168 delayedCreate : function ()
176 var refreshPager = function() {
179 this.layout.beginUpdate();
181 var frm = this.layout.getRegion('center').getEl().createChild({tag:'div'});
182 //this.grid = new Roo.grid.EditorGrid(frm, {
183 this.grid = new Roo.grid.Grid(frm, {
187 id: this.id + '-grid',
188 ds: new Roo.data.Store({
190 proxy: new Roo.data.HttpProxy({
191 url: baseURL + '/Roo/core_person',
194 reader: new Roo.data.JsonReader({}, []),
198 beforeload: function(t, o) {
199 //console.log(o.params);
201 return _this.beforeload(t,o);
205 loadexception : Pman.loadException,
206 update : function (_self, record, operation)
208 if (operation != 'commit') {
211 // only used to change active status.
214 url : baseURL + '/Roo/core_person',
218 active: record.data.active
221 success : function() {
226 Roo.MessageBox.alert("Error", "saving failed", function() {
227 _this.grid.footer.onClick('first');
238 field: 'name', direction: 'ASC'
241 cm: new Roo.grid.ColumnModel(
244 autoExpandColumn: 'name', // fixme!!!!
250 rowdblclick : function(g, ri, e) {
251 var s = g.getDataSource().getAt(ri).data;
252 if (_this.dialog() && Pman.hasPerm(_this.permName, 'E')) {
253 _this.dialog().show(s,refreshPager);
258 cellclick : function (_self, rowIndex, columnIndex, e)
260 var di = this.colModel.getDataIndex(columnIndex);
261 if (di != 'active') {
265 var rec = _this.grid.ds.getAt(rowIndex);
267 rec.set('active', rec.data.active ? 0 : 1);
270 // only hide if viewing active members...
271 if (!_this.showInActive) {
272 var el = Roo.select('.x-grid-row-selected').item(3);
273 el.addClass('x-grid-row-fadeout');
274 el.on('transitionend',function(){
275 _this.grid.ds.remove(rec);
276 },this,{single:true});
285 this.panel = this.layout.add('center', new Roo.GridPanel(this.grid , {
288 //background : false,
290 title: this.title || "Staff",
296 if (this.hiddenColumns) {
297 var cm = this.grid.getColumnModel();
298 Roo.each(this.hiddenColumns, function(c) {
299 cm.setHidden(cm.getIndexByDataIndex(c), true);
305 var gridFoot = this.grid.getView().getFooterPanel(true);
306 this.paging = new Roo.PagingToolbar(gridFoot, this.grid.getDataSource(), {
309 displayMsg: "Displaying " + (this.itemDisplayName || "Staff") + " {0} - {1} of {2}",
310 emptyMsg: "No " + (this.itemDisplayName || "Staff") + " found"
312 var grid = this.grid;
315 this.toolbar = new Roo.Toolbar(this.grid.getView().getHeaderPanel(true));
317 var tb = this.toolbar;
320 if (this.parentLayout.getRegion('west') && this.parentLayout.getRegion('west').panels.length) {
323 '<b><i><font color="red">'+
325 "Drag person to add or remove from group" :
326 "Drag person to add or remove from team"
333 //if (this.permName == 'Core.Staff') {
335 this.paging.add( '-',
337 text: "Show old staff",
340 toggleHandler: function(btn,pressed) {
341 _this.showInActive = (pressed ? 1 : 0);
342 btn.setText(pressed ? "Hide old staff": "Show old staff" );
353 this.searchBox = new Roo.form.TextField({
357 specialkey : function(f,e)
360 if (e.getKey() == 13) {
370 var dg = _this.dialog();
374 cls: 'x-btn-text-icon',
375 icon: Roo.rootURL + 'images/default/dd/drop-add.gif',
376 hidden : !dg || (_this.newDefaults() === false) || !Pman.hasPerm(this.permName, 'A'),
377 handler : function(){
378 dg.show( _this.newDefaults(), refreshPager );
381 { ///... for contacts stuff...
383 cls: 'x-btn-text-icon',
384 icon: Roo.rootURL + 'images/default/dd/drop-add.gif',
385 hidden : !this.bulkAdd() || !Pman.hasPerm(this.permName, 'A'),
386 handler : function(){
388 // Pman.Dialog.PersonBulkAdd.show( { id : 0 }, refreshPager );
389 _this.bulkAdd().show( { id : 0 }, refreshPager );
395 cls: 'x-btn-text-icon',
396 icon: Roo.rootURL + 'images/default/tree/leaf.gif',
397 hidden : !dg || !Pman.hasPerm(this.permName, 'E'),
398 handler : function(){
399 var s = grid.getSelectionModel().getSelections();
400 if (!s.length || (s.length > 1)) {
401 Roo.MessageBox.alert("Error", s.length ? "Select only one Row" : "Select a Row");
404 dg.show( s[0].data,refreshPager);
408 text: "Toogle Active",
409 cls: 'x-btn-text-icon',
410 icon: rootURL + '/Pman/templates/images/trash.gif',
411 hidden : (this.permName != 'Core.Staff') || !Pman.hasPerm(this.permName, 'E'), // SPECIFIC TO STAFF!!!!!!
412 handler : function(){
414 var s = grid.getSelectionModel().getSelections();
416 Roo.MessageBox.alert("Error", "Select People Row");
420 for(var i = 0; i < s.length; i++) {
421 r.push(s[i].data.id);
426 grid.getView().mainWrap.mask("Sending");
430 url: baseURL + '/Roo/core_person',
433 _toggleActive : r.join(',')
435 success: function(resp) {
436 var res = Pman.processResponse(resp);
437 grid.getView().mainWrap.unmask();
439 Roo.MessageBox.alert("Error", res.errorMsg ? res.errorMsg : "Error Sending");
445 failure: function(act) {
446 grid.getView().mainWrap.unmask();
447 Roo.MessageBox.alert("Error", "Error Sending");
457 cls: 'x-btn-text-icon',
458 hidden : !Pman.hasPerm(_this.permName, 'D'),
459 icon: rootURL + '/Pman/templates/images/trash.gif',
460 handler : function(){
461 //Pman.genericDelete(_this, 'Person');
463 var rec = _this.grid.ds.getAt(_this.grid.selModel.last);
467 if (rec_id * 1 < 1) {
468 Roo.MessageBox.alert("Error", "Select row to delete");
472 Roo.MessageBox.confirm(
474 "Confirm Deletion of selected row (some rows can not be deleted if they are referenced elsewhere",
481 url : baseURL + '/Roo/core_person',
485 success : function() {
486 _this.paging.onClick('refresh');
487 //_this.grid.footer.onClick('refresh');
508 icon: rootURL + '/Pman/templates/images/search.gif', // icons can also be specified inline
511 handler : function () {
512 _this.grid.getSelectionModel().clearSelections();
520 icon: rootURL + '/Pman/templates/images/edit-clear.gif', // icons can also be specified inline
522 qtip: "Reset Search",
523 handler : function () {
524 _this.searchBox.setValue('');
525 _this.grid.getSelectionModel().clearSelections();
536 text: "Switch to Selected User",
537 hidden : _this.permName != 'Core.Staff' || !Pman.hasPerm('Core.Staff', 'E'),
539 click : function () {
540 var s = grid.getSelectionModel().getSelections();
542 Roo.MessageBox.alert("Error", "Select a Person");
546 url : baseURL+ '/Login.php',
548 'switch' : s[0].data.id
552 success : function() {
553 document.location = baseURL + '?ts=' + Math.random();
556 failure : function(d) {
558 Roo.MessageBox.alert("Error", d);
574 // add stuff to toolbar?
575 //this.innerLayout.endUpdate();
576 this.layout.endUpdate();
582 show: function (parentLayout, region)
584 this.add(parentLayout, region);
585 this.grid.getDataSource().load({
595 c_project_id_code : function(cfg) {
599 dataIndex : 'project_id_code',
602 renderer : function(v,x,r) {
603 return String.format('<span qtip="{0}">{1}</span>',
613 c_name : function(cfg) {
616 // id : (this.id + '-name').toLowerCase(),
620 renderer : function(v,p,r) {
621 if(r.data.active != 1){
622 return String.format('<div style="text-decoration:line-through">{0}</div>', v);
624 return String.format('{0}', v);
630 c_group_membership : function(cfg) {
633 // id : (this.id + '-name').toLowerCase(),
634 header : "Group Membership",
635 dataIndex : 'member_of',
637 renderer : function(v,p,r) {
638 if(r.data.active != 1){
639 return String.format('<div style="text-decoration:line-through">{0}</div>', v).split("\n").join("<br/>");
641 return String.format('{0}', v).split("\n").join("<br/>");
647 c_company_id_comptype : function(cfg) {
650 header : "Company Type",
651 dataIndex : 'company_id_comptype',
657 c_company_id_name : function(cfg) {
660 header : "Company / Office",
661 dataIndex : 'company_id_name',
664 renderer: function(v,x,r) {
665 return String.format('{0}{1}{2}',
667 r.data.office_id ? ' / ' : '',
668 r.data.office_id_name);
674 c_office_id_name : function(cfg) {
677 header : "Office / Dept.",
678 dataIndex : 'office_id_name',
684 c_role : function(cfg) {
687 header : "Role / Position",
694 c_phone : function(cfg) {
704 c_fax : function(cfg) {
714 c_email : function(cfg) {
721 renderer : function (v) {
722 return (v.length && v.indexOf('@') > 0 ) ?
723 String.format('<a href="mailto:{0}">{0}</a>',v) : v;
728 c_active : function(cfg) {
732 dataIndex : 'active',
735 renderer : function(v) {
736 // work out what the column is..
738 var state = v> 0 ? '-checked' : '';
740 return '<img class="x-grid-check-icon' + state + '" src="' + Roo.BLANK_IMAGE_URL + '"/>';
752 // need two version of this
753 // (one can be used as edit + ProjectDirectory ADD)
754 // - the other one needs selection combos's for company / office