Pman.Tab.XtupleMetric.bjs
[Pman.Xtuple] / Pman.Tab.XtupleMetric.js
1 //<script type="text/javascript">
2
3 // Auto generated file - created by app.Builder.js- do not edit directly (at present!)
4
5 Pman.Tab.XtupleMetric = new Roo.XComponent({
6     part     :  ["Xtuple","Metric"],
7     order    : '900-Pman.Tab.XtupleMetric',
8     region   : 'center',
9     parent   : 'Pman.Admin',
10     name     : "unnamed module",
11     disabled : false, 
12     permname : '', 
13     _tree : function()
14     {
15         var _this = this;
16         var MODULE = this;
17         return {
18             xtype: 'GridPanel',
19             xns: Roo,
20             listeners : {
21                 activate : function() {
22                     _this.panel = this;
23                     
24                     
25                     var pid = _this.form.findField('pohead_id').getValue() * 1;
26                     if (pid < 1) {
27                         Roo.MessageBox.alert("Save First", "Please save the purchase order first, before adding items");
28                         _this.dialog.layout.getRegion('center').showPanel(0);
29                         return;
30                     }
31                     
32                     if (_this.grid) {
33                         _this.grid.footer.onClick('first');
34                     }
35                 },
36                 deactivate : function (_self)
37                 {
38                      if(_this.grid){
39                         var ar = [];
40                 
41                         _this.grid.ds.each(function(r) {
42                             ar.push({
43                                 poitem_id : r.data.poitem_id,
44                                 poitem_itemsite_id : r.data.poitem_itemsite_id,
45                                 poitem_unitprice : r.data.poitem_unitprice,
46                                 poitem_qty_ordered : r.data.poitem_qty_ordered
47                             });
48                                 
49                         });
50                         
51                         _this.form.findField('items').setValue(JSON.stringify(ar));
52                     }
53                     _this.dontClose = true;
54                     _this.form.doAction("submit");
55                 
56                 }
57             },
58             background : true,
59             fitContainer : true,
60             fitToframe : true,
61             region : 'center',
62             tableName : 'poitem',
63             title : "Order Items",
64             grid : {
65                 xtype: 'EditorGrid',
66                 xns: Roo.grid,
67                 listeners : {
68                     render : function() 
69                     {
70                         _this.grid = this; 
71                         //_this.dialog = Pman.Dialog.FILL_IN
72                         if (_this.panel.active) {
73                            this.footer.onClick('first');
74                         }
75                     },
76                     beforeedit : function (e)
77                     {
78                         var r = e.record.data.poitem_qty_received * 1;
79                         
80                         if(r > 0){
81                             Roo.MessageBox.alert("Error", "This item has been receipted");
82                             return false;
83                         }
84                         
85                         var status = _this.form.findField('pohead_status').getValue();
86                         
87                         if(status == 'C'){
88                             Roo.MessageBox.alert("Error", "This PO has been closed");
89                             return false;
90                         }
91                         
92                         
93                     }
94                 },
95                 autoExpandColumn : 'item_descrip1',
96                 clicksToEdit : 1,
97                 loadMask : true,
98                 dataSource : {
99                     xtype: 'Store',
100                     xns: Roo.data,
101                     listeners : {
102                         beforeload : function (_self, o){
103                             o.params = o.params || {};
104                             var hid = _this.form.findField('pohead_id').getValue();
105                             
106                             if(!hid.length){
107                                 return false;
108                             }
109                             
110                             o.params.poitem_pohead_id = hid;
111                             o.params._with_item = 1;
112                             o.params._roo_office = _this.data.office ? _this.data.office : baseURL.split('/').pop().substr(0,2);
113                         
114                         },
115                         load : function (_self, records, options)
116                         {
117                             _this.grid.footer.updateSummary();
118                         }
119                     },
120                     remoteSort : true,
121                     sortInfo : { field : 'poitem_linenumber', direction: 'ASC' },
122                     proxy : {
123                         xtype: 'HttpProxy',
124                         xns: Roo.data,
125                         method : 'GET',
126                         timeout : 90000,
127                         url : baseURL + '/Xtuple/Roo/Poitem.php'
128                     },
129                     reader : {
130                         xtype: 'JsonReader',
131                         xns: Roo.data,
132                         id : 'poitem_id',
133                         root : 'data',
134                         totalProperty : 'total',
135                         fields : [
136                             {
137                                 'name': 'poitem_id',
138                                 'type': 'int'
139                             }
140                         ]
141                     }
142                 },
143                 toolbar : {
144                     xtype: 'Toolbar',
145                     xns: Roo,
146                     items : [
147                         {
148                             xtype: 'Button',
149                             xns: Roo.Toolbar,
150                             listeners : {
151                                 click : function()
152                                 {
153                                     var status = _this.form.findField('pohead_status').getValue();
154                                     
155                                     if(status == 'C'){
156                                         Roo.MessageBox.alert("Error", "This PO has been closed");
157                                         return;
158                                     }
159                                     
160                                     var ct  =    _this.grid.ds.getCount();
161                                     
162                                     var last = ct ? _this.grid.ds.getAt(ct-1).data.poitem_linenumber * 1 + 1 : 1;
163                                     
164                                     var dt = _this.form.findField('pohead_orderdate').getValue();
165                                     
166                                     var nr = _this.grid.ds.reader.newRow({
167                                         poitem_id : 0,
168                                         poitem_linenumber : last,
169                                         item_number : '',
170                                         item_descrip1 : '',
171                                         poitem_duedate : dt,
172                                         poitem_qty_ordered : 1,
173                                         poitem_unitprice : 0
174                                     });
175                                     
176                                     _this.grid.stopEditing();
177                                     _this.grid.ds.insert(_this.grid.ds.getCount(), nr); 
178                                     _this.grid.startEditing(_this.grid.ds.getCount()-1, 1);
179                                 }
180                             },
181                             cls : 'x-btn-text-icon',
182                             text : "Add",
183                             icon : Roo.rootURL + 'images/default/dd/drop-add.gif'
184                         },
185                         {
186                             xtype: 'Button',
187                             xns: Roo.Toolbar,
188                             listeners : {
189                                 click : function ()
190                                 {
191                                     var status = _this.form.findField('pohead_status').getValue();
192                                     
193                                     if(status == 'C'){
194                                         Roo.MessageBox.alert("Error", "This PO has been closed");
195                                         return;
196                                     }
197                                     
198                                     var cs = _this.grid.getSelectionModel().getSelectedCell();
199                                     if (!cs) {
200                                         Roo.MessageBox.alert("Error", "Select a cell");
201                                         return;
202                                     }
203                                     _this.grid.stopEditing();
204                                     var r = _this.grid.ds.getAt(cs[0]);
205                                     
206                                     if(r.data.poitem_qty_received * 1 > 0){
207                                         Roo.MessageBox.alert("Error", "This item has been receipted");
208                                         return;
209                                     }
210                                     
211                                     
212                                     _this.grid.ds.remove(r);
213                                    
214                                 }
215                             },
216                             cls : 'x-btn-text-icon',
217                             text : "Remove",
218                             icon : rootURL + '/Pman/templates/images/trash.gif'
219                         }
220                     ]
221                 },
222                 footer : {
223                     xtype: 'PagingToolbar',
224                     xns: Roo,
225                     displayInfo : true,
226                     emptyMsg : "No Item found",
227                     pageSize : 100,
228                     updateSummary : function() {
229                     \r
230                         var f = this;\r
231                         new Pman.Request({\r
232                             url : baseURL + '/Xtuple/Roo/Poitem',\r
233                             method : 'GET',\r
234                             params : {
235                                 _roo_office : _this.data.office ? _this.data.office : baseURL.split('/').pop().substr(0,2),\r
236                                 _totals : 1,\r
237                                 poitem_pohead_id : _this.form.findField('pohead_id').getValue()\r
238                             },\r
239                             success : function(d) {
240                                 Roo.log(d);\r
241                                 f.displayEl.update(String.format(\r
242                                     "{0} items | Total : {1} {2}",\r
243                                     d.data[0].count_item,\r
244                                     _this.form.findField('pohead_curr_id').el.dom.value,\r
245                                     d.data[0].totals\r
246                                 ));\r
247                                     \r
248                             }\r
249                         });\r
250                     
251                     }
252                 },
253                 colModel : [
254                     {
255                         xtype: 'ColumnModel',
256                         xns: Roo.grid,
257                         align : 'right',
258                         dataIndex : 'poitem_linenumber',
259                         header : 'Line#',
260                         width : 50,
261                         renderer : function(v) { return String.format('{0}', v); }
262                     },
263                     {
264                         xtype: 'ColumnModel',
265                         xns: Roo.grid,
266                         dataIndex : 'item_number',
267                         header : 'Item code',
268                         width : 100,
269                         renderer : function(v) { return String.format('{0}', v); },
270                         editor : {
271                             xtype: 'GridEditor',
272                             xns: Roo.grid,
273                             field : {
274                                 xtype: 'ComboBox',
275                                 xns: Roo.form,
276                                 listeners : {
277                                     beforeselect : function (combo, record, index)
278                                     {
279                                       var ar = _this.grid.activeEditor.record;
280                                       
281                                       (function() { 
282                                           ar.set('item_descrip1', record.data.itemsite_item_id_item_descrip1);
283                                           ar.set('poitem_itemsite_id', record.data.itemsite_id);
284                                       }).defer(100);
285                                       
286                                     }
287                                 },
288                                 allowBlank : false,
289                                 displayField : 'itemsite_item_id_item_number',
290                                 editable : true,
291                                 emptyText : "Select item",
292                                 forceSelection : true,
293                                 hiddenName : 'itemsite_item_id_item_number',
294                                 listWidth : 400,
295                                 loadingText : "Searching...",
296                                 minChars : 2,
297                                 name : 'item_number',
298                                 pageSize : 20,
299                                 qtip : "Select item",
300                                 queryParam : 'query[number]',
301                                 selectOnFocus : true,
302                                 tpl : '<div class="x-grid-cell-text x-btn button"><b>{itemsite_item_id_item_number}</b> - {itemsite_item_id_item_descrip1} </div>',
303                                 triggerAction : 'all',
304                                 typeAhead : false,
305                                 valueField : 'item_number',
306                                 store : {
307                                     xtype: 'Store',
308                                     xns: Roo.data,
309                                     listeners : {
310                                         beforeload : function (_self, o){
311                                             o.params = o.params || {}; 
312                                             o.params.itemsite_posupply = 1;
313                                         }
314                                     },
315                                     remoteSort : true,
316                                     sortInfo : { direction : 'ASC', field: 'item_number' },
317                                     proxy : {
318                                         xtype: 'HttpProxy',
319                                         xns: Roo.data,
320                                         method : 'GET',
321                                         url : baseURL + '/Roo/itemsite.php'
322                                     },
323                                     reader : {
324                                         xtype: 'JsonReader',
325                                         xns: Roo.data,
326                                         id : 'itemsite_id',
327                                         root : 'data',
328                                         totalProperty : 'total',
329                                         fields : [{"name":"item_id","type":"int"},"item_number"]
330                                     }
331                                 }
332                             }
333                         }
334                     },
335                     {
336                         xtype: 'ColumnModel',
337                         xns: Roo.grid,
338                         dataIndex : 'item_descrip1',
339                         header : 'Item description',
340                         width : 150,
341                         renderer : function(v) { return String.format('{0}', v); }
342                     },
343                     {
344                         xtype: 'ColumnModel',
345                         xns: Roo.grid,
346                         dataIndex : 'poitem_duedate',
347                         header : 'Due date',
348                         width : 100,
349                         renderer : function(v) { return String.format('{0}', v ? v.format('Y-m-d') : ''); }
350                     },
351                     {
352                         xtype: 'ColumnModel',
353                         xns: Roo.grid,
354                         align : 'right',
355                         dataIndex : 'poitem_qty_ordered',
356                         header : 'Ordered',
357                         width : 75,
358                         renderer : function(v) { return String.format('{0}', v); },
359                         editor : {
360                             xtype: 'GridEditor',
361                             xns: Roo.grid,
362                             field : {
363                                 xtype: 'NumberField',
364                                 xns: Roo.form,
365                                 allowDecimals : false,
366                                 decimalPrecision : 0,
367                                 minValue : 1,
368                                 style : 'text-align:right'
369                             }
370                         }
371                     },
372                     {
373                         xtype: 'ColumnModel',
374                         xns: Roo.grid,
375                         align : 'right',
376                         dataIndex : 'poitem_qty_received',
377                         header : 'Received',
378                         width : 75,
379                         renderer : function(v,x,r) { 
380                             return String.format(
381                                 r.data.poitem_qty_ordered != (v-r.data.poitem_qty_returned) ? '<span style="color:red">{0}</span>':  '{0}',
382                                  v - r.data.poitem_qty_returned);
383                         }
384                     },
385                     {
386                         xtype: 'ColumnModel',
387                         xns: Roo.grid,
388                         align : 'right',
389                         dataIndex : 'poitem_qty_vouchered',
390                         header : 'Vouchered',
391                         width : 65,
392                         renderer : function(v,x,r) { 
393                             return String.format(
394                                 r.data.poitem_qty_ordered != v ? '<span style="color:red">{0}</span>':  '{0}',
395                                  v);
396                         }
397                     },
398                     {
399                         xtype: 'ColumnModel',
400                         xns: Roo.grid,
401                         align : 'right',
402                         dataIndex : 'poitem_unitprice',
403                         header : 'Unit price',
404                         width : 100,
405                         renderer : function(v) { return String.format('{0}', (v || v == 0) ? parseFloat(v).toFixed(3) : ''); },
406                         editor : {
407                             xtype: 'GridEditor',
408                             xns: Roo.grid,
409                             field : {
410                                 xtype: 'NumberField',
411                                 xns: Roo.form,
412                                 allowBlank : false,
413                                 allowDecimals : false,
414                                 decimalPrecision : 0,
415                                 minValue : 1,
416                                 style : 'text-align:right'
417                             }
418                         }
419                     }
420                 ]
421             }
422         };
423     }
424 });