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