Pman.Tab.AdminCompanies.bjs
[Pman.Admin] / Pman.Tab.Companies.js
1 //<script type="text/javascript">
2  
3  
4 Pman.on('beforeload', function()
5 {
6     //                case 1 : Pman.Tab.Projects.add(this.mainLayout, 'west'); break;
7     
8   
9     
10     Pman.register({
11         modKey : '030-pman-tab-companies',
12         module : Pman.Tab.Companies,
13         region : 'center',
14         parent : Pman.Tab.Admin,
15         name : "Contact Companies Manager",
16         permname : 'Admin.Companies'
17     });
18
19         
20 });
21
22 Pman.Tab.Companies = new Roo.util.Observable({
23     events : {
24         'beforerender' : true // trigger so we can add modules later..
25     },
26     colExtra : [], // extra items on columns
27     
28     grid : false,
29     panel : false,
30     add : function(parentLayout, region) {
31         
32         var _this = this;
33         if (this.tab) {
34             parentLayout.getRegion(region).showPanel(this.panel);
35             return;
36         }
37      
38         
39         this.innerLayout = new Ext.BorderLayout(
40             parentLayout.getEl().createChild({tag:'div'}),
41             {
42                
43                 center: {
44                     autoScroll:true,
45                     hideTabs: true
46                 },
47                 south : {
48                     split:true,
49                     hidden : !Pman.hasPerm('Core.Office','S'),
50                     title: "Offices",
51                     autoScroll:true,
52                     hideTabs: true,
53                     height: 200
54                 }
55             }
56         );
57
58
59
60         this.tab = parentLayout.add(region,  new Ext.NestedLayoutPanel(
61             this.innerLayout, {title: "Companies", background: true, controller : this}));
62
63         this.tab.on('activate', function() {
64             _this.delayedCreate();
65             _this.paging.onClick('refresh');
66         });
67     },
68     delayedCreate : function () 
69     {
70         var _this = this;
71         if (this.grid) {
72             return;
73            }
74         this.innerLayout.beginUpdate();
75        
76
77         var frm = this.innerLayout.getEl().createChild({tag:'div'});
78         //this.grid = new Ext.grid.EditorGrid(frm,  {
79         this.grid = new Ext.grid.Grid(frm,  {
80                 id: 'grid-companies',
81                 ds:   new Ext.data.Store({
82                     // load using HTTP
83                     proxy: new Ext.data.HttpProxy({
84                         url: baseURL + '/Roo/Companies.html',
85                         method: 'GET'
86                     }),
87                     reader: Pman.Readers.Companies,
88                        
89                     listeners : {
90                         load : function()
91                         {
92                             if (Pman.Tab.Office.paging) {
93                                 Pman.Tab.Office.paging.onClick('refresh');
94                             }
95                         },
96                         loadexception : Pman.loadException
97                     },
98                     remoteSort: true
99                 }),
100                 cm:  new Ext.grid.ColumnModel(
101                     [
102                     {
103                         
104                         header : "Type",
105                         dataIndex : 'comptype',
106                         sortable : true,
107                         width : 90,
108                         renderer : function (v,x ,r) {
109                             return Pman.Dialog.Companies.comptypeListToString(r.data.isOwner ? 'OWNER' : v);
110                         }
111                     },
112                     
113                     
114                     {
115                         
116                         header : "Ref#",
117                         dataIndex : 'code',
118                         sortable : true,
119                         width : 50
120                     },{
121                         id : 'companies-name',
122                         header : "Name",
123                         dataIndex : 'name',
124                         sortable : true,
125                         width : 200,
126                         renderer : function(v,x,r) {
127                             return String.format(r.data.isOwner ? '<B>{0}</B>' : '{0}',v);    
128                         }
129                     },{
130                         header : "Tel",
131                         dataIndex : 'tel',
132                         sortable : true,
133                         width : 100
134                     },{
135                         header : "Fax",
136                         dataIndex : 'fax',
137                         sortable : true,
138                         width : 100
139                     },{
140                         header : "Email",
141                         dataIndex : 'email',
142                         sortable : true,
143                         width : 100,
144                         renderer : function (v) {
145                             return (v.length && v.indexOf('@') > 0 ) ? 
146                                 String.format('<a href="mailto:{0}">{0}</a>',v) : v;
147                                 
148                         }
149                     },{
150                         id : 'companies-address',
151                         header : "Address",
152                         dataIndex : 'address',
153                         sortable : true,
154                         width : 200
155                     },{
156                         id : 'companies-remarks',
157                         header : "Remarks",
158                         dataIndex : 'remarks',
159                         sortable : true,
160                         width : 200
161                     }
162                 ]),
163                 autoExpandColumn: 'companies-address' , // fixme!!!!
164                 clicksToEdit : 1,
165                 
166                 loadMask: true,
167
168                 
169                 listeners : {
170                    
171                     cellclick : function(g, ri, ci ,e) {
172                        
173                          if (Pman.Tab.Office.paging) {
174                                 Pman.Tab.Office.paging.onClick('refresh');
175                             }
176                           
177                     },
178                     rowdblclick : function(g, ri, e) {
179                         var s = g.getDataSource().getAt(ri).data;
180                       
181                         _dialog.show(s, refreshPager); 
182                     }
183                 }
184                  
185         });
186         this.panel  = this.innerLayout.add('center',  new Ext.GridPanel(this.grid ,
187             { fitToframe: true,fitContainer: true, controller : this })
188         );
189         this.grid.render();
190         var gridFoot = this.grid.getView().getFooterPanel(true);
191         this.paging = new Ext.PagingToolbar(gridFoot, this.grid.getDataSource(), {
192             pageSize: 25,
193             displayInfo: true,
194             displayMsg: "Displaying Companies {0} - {1} of {2}",
195             emptyMsg: "No Companies found"
196         });
197         var grid = this.grid;
198  
199         var gridHead = this.grid.getView().getHeaderPanel(true);
200         var tb = new Ext.Toolbar(gridHead);
201     
202         var refreshPager = function() {
203             _this.paging.onClick('refresh');
204         }
205         var _dialog = Pman.Dialog.Companies;
206         tb.add(
207             {
208                 text: "Add",
209                 cls: 'x-btn-text-icon',
210                 icon: Ext.rootURL + 'images/default/dd/drop-add.gif',
211                 hidden : !Pman.hasPerm('Core.Companies', 'A'),
212                 handler : function(){
213                     _dialog.show( { id : 0 }, refreshPager ); 
214                 }
215             }, 
216             {
217                 text: "Edit",
218                 cls: 'x-btn-text-icon',
219                 icon: Ext.rootURL + 'images/default/tree/leaf.gif',
220                 hidden : !Pman.hasPerm('Core.Companies', 'E'),
221                 handler : function(){
222                     var s = grid.getSelectionModel().getSelections();
223                     if (!s.length || (s.length > 1))  {
224                         Ext.MessageBox.alert("Error", s.length ? "Select only one Row" : "Select a Row");
225                         return;
226                     }
227                     
228                     _dialog.show(s[0].data, refreshPager); 
229                 }
230             },  
231             {
232                 text: "Delete",
233                 cls: 'x-btn-text-icon',
234                 hidden : !Pman.hasPerm('Core.Companies', 'D'),
235                 icon: rootURL + '/Pman/templates/images/trash.gif',
236                
237                 handler : function(){
238                     Pman.genericDelete(_this, 'Companies'); 
239                 }
240             }
241         );
242         if (Pman.hasPerm('Core.Office','S')) {
243                 Pman.Tab.Office.add(this.innerLayout, 'south');
244         }
245     
246         //this.toolbar = tb;
247         // add stuff to toolbar?
248         this.innerLayout.endUpdate();
249         
250         
251         
252     },
253     show: function (parentLayout, region)
254     {
255         this.add(parentLayout, region);
256         this.grid.getDataSource().load({
257             params: {
258                 start:0, 
259                 limit:25
260             }
261         });
262
263     },
264     getSelectedId : function()
265     {
266         var s = this.grid.getSelectionModel().getSelections();
267         if (s.length != 1)  {
268             return 0;
269         }
270         return s[0].data.id;
271         
272     }
273 });
274
275