Fix #7123 - getting abra ready to test
[Pman.Xtuple] / Pman.Tab.XtupleTransfer.bjs
1 {
2     "id": "roo-file-73",
3     "name": "Pman.Tab.XtupleTransfer",
4     "parent": "Pman.Tab.XtupleSales",
5     "title": "",
6     "path": "/home/edward/gitlive/web.xtuple/Pman/Xtuple/Pman.Tab.XtupleTransfer.bjs",
7     "items": [
8         {
9             "listeners": {
10                 "|activate": "function() {\n    _this.panel = this;\n    if (_this.grid) {\n        _this.grid.footer.onClick('first');\n    }\n}"
11             },
12             "background": true,
13             "fitContainer": true,
14             "fitToframe": true,
15             "region": "center",
16             "tableName": "invhist_transfer",
17             "title": "Transfers",
18             "xtype": "GridPanel",
19             "|xns": "Roo",
20             "items": [
21                 {
22                     "listeners": {
23                         "|render": "function() \n{\n    _this.grid = this; \n    _this.dialog =Pman.Dialog.XtupleTransfer;\n    if (_this.panel.active) {\n       this.footer.onClick('first');\n    }\n}",
24                         "|rowdblclick": "function (_self, rowIndex, e)\n{\n     var sel = _this.postedCombo.getValue();\n     \n     var tdb = baseURL.split('/').pop().split('.').shift();\n     \n     \n     if (sel.match(/^office-/)) {\n          tdb = sel.split('-').pop();\n         \n     }\n    \n    \n    if (!_this.dialog) return;\n    \n    var data = this.getDataSource().getAt(rowIndex).data;\n    \n    \n    _this.dialog.show( {\n         invhist_transfer_id : data.invhist_transfer_id,\n         _roo_office : tdb\n         }, function() {\n        _this.grid.footer.onClick('first');\n    }); \n}\n",
25                         "rowclass": "function (gridview, rowcfg)\n{\n    if(rowcfg.record.data.invhist_transfer_void){\n        rowcfg.rowClass = 'strikethrough';\n    }\n}"
26                     },
27                     "*prop": "grid",
28                     "autoExpandColumn": "invhist_transfer_descrip",
29                     "loadMask": true,
30                     "xtype": "Grid",
31                     "|xns": "Roo.grid",
32                     "items": [
33                         {
34                             "listeners": {
35                                 "beforeload": "function (_self, o)\n{\n    var tdb = baseURL.split('/').pop().split('.').shift();     \n    o.params._roo_office = tdb;\n    o.params['query[location_id]'] = _this.locCombo.getValue();\n    o.params['query[invhist_transfer_number]'] = _this.searchBox.getValue();\n    var sel = _this.postedCombo.getValue();\n    switch (sel) {\n        case 'VOIDED': \n            o.params.invhist_transfer_void = 1; \n            break;\n        case 'POSTED': \n            o.params.invhist_transfer_posted = 1; \n            break;\n        case 'UNPOSTED': \n            o.params.invhist_transfer_posted = 0; \n            o.params.invhist_transfer_void = 0; \n            break;        \n        case 'ALL': \n            break;\n        default: \n            if (!sel.match(/^office-/)) {\n                break;\n            }\n            delete o.params['query[location_id]'];\n            \n            o.params._roo_office=  sel.replace(/^office-/,'');\n            o.params.cust_to_internalcompany = tdb;\n            break;\n    }\n    var dt = _this.dateSel.getValue();\n   \n    o.params['query[dateSel]'] = typeof(dt) == 'string' ? dt : dt.format('Y-m-d');\n    \n\n    \n    \n}"
36                             },
37                             "*prop": "dataSource",
38                             "remoteSort": true,
39                             "xtype": "Store",
40                             "|sortInfo": "{ field : 'invhist_transfer_transdate', direction: 'DESC' }",
41                             "|xns": "Roo.data",
42                             "items": [
43                                 {
44                                     "*prop": "proxy",
45                                     "method": "GET",
46                                     "xtype": "HttpProxy",
47                                     "|url": "baseURL + '/Xtuple/Roo/invhist_transfer.php'",
48                                     "|xns": "Roo.data"
49                                 },
50                                 {
51                                     "|xns": "Roo.data",
52                                     "xtype": "JsonReader",
53                                     "totalProperty": "total",
54                                     "root": "data",
55                                     "*prop": "reader",
56                                     "id": "id",
57                                     "|fields": "[\n    {\n        'name': 'invhist_transfer_id',\n        'type': 'int'\n    },\n    {\n        'name': 'invhist_transfer_transdate',\n        'type': 'date',\n        'dateFormat': 'Y-m-d'\n    },\n    {\n        'name': 'invhist_transfer_number',\n        'type': 'string'\n    },\n    {\n        'name': 'invhist_transfer_from',\n        'type': 'int'\n    },\n    {\n        'name': 'invhist_transfer_to',\n        'type': 'int'\n    },\n    {\n        'name': 'invhist_transfer_descrip',\n        'type': 'string'\n    }\n]"
58                                 }
59                             ]
60                         },
61                         {
62                             "*prop": "footer",
63                             "xtype": "PagingToolbar",
64                             "pageSize": 25,
65                             "displayInfo": true,
66                             "displayMsg": "Displaying invhist_transfer{0} - {1} of {2}",
67                             "emptyMsg": "No invhist_transfer found",
68                             "|xns": "Roo",
69                             "items": [
70                                 {
71                                     "listeners": {
72                                         "click": "function (_self, e)\n{\n    new Pman.Download({\n        grid : _this.grid\n    });\n    Roo.MessageBox.alert(\"Downloading\", \"Report is downloading\");\n}"
73                                     },
74                                     "text": "Download",
75                                     "xtype": "Button",
76                                     "|xns": "Roo.Toolbar"
77                                 }
78                             ]
79                         },
80                         {
81                             "*prop": "toolbar",
82                             "xtype": "Toolbar",
83                             "|xns": "Roo",
84                             "items": [
85                                 {
86                                     "listeners": {
87                                         "render": "function (_self)\n{\n  _this.searchBox = _self;\n}",
88                                         "specialkey": "function (_self, e)\n{\n    _this.grid.footer.onClick('first');\n}"
89                                     },
90                                     "xtype": "TextField",
91                                     "|xns": "Roo.form"
92                                 },
93                                 {
94                                     "listeners": {
95                                         "select": "function (combo, record, index)\n{\n _this.grid.footer.onClick('first');\n}",
96                                         "render": "function (_self)\n{\n    _this.locCombo = _self;\n}"
97                                     },
98                                     "allowBlank": true,
99                                     "displayField": "location_name",
100                                     "editable": true,
101                                     "emptyText": "Select location",
102                                     "fieldLabel": "location",
103                                     "forceSelection": true,
104                                     "hiddenName": "location_id",
105                                     "listWidth": 400,
106                                     "loadingText": "Searching...",
107                                     "minChars": 2,
108                                     "name": "location_id",
109                                     "pageSize": 200,
110                                     "qtip": "Select location",
111                                     "queryParam": "query[location_name]",
112                                     "selectOnFocus": true,
113                                     "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{location_name}</b>  - <b style=\"color:red\">{location_cust_id_char_internalcompany} </b> {location_descrip} </div>",
114                                     "triggerAction": "all",
115                                     "typeAhead": true,
116                                     "valueField": "location_id",
117                                     "width": 250,
118                                     "xtype": "ComboBox",
119                                     "|xns": "Roo.form",
120                                     "items": [
121                                         {
122                                             "listeners": {
123                                                 "|beforeload": "function (_self, o){\n    o.params = o.params || {};\n    // set more here\n    o.params.location_restrict = 0;\n  \n}\n"
124                                             },
125                                             "*prop": "store",
126                                             "remoteSort": true,
127                                             "xtype": "Store",
128                                             "|sortInfo": "{ direction : 'ASC', field: 'location_name' }",
129                                             "|xns": "Roo.data",
130                                             "items": [
131                                                 {
132                                                     "*prop": "proxy",
133                                                     "method": "GET",
134                                                     "xtype": "HttpProxy",
135                                                     "|url": "baseURL + '/Roo/location.php'",
136                                                     "|xns": "Roo.data"
137                                                 },
138                                                 {
139                                                     "*prop": "reader",
140                                                     "xtype": "JsonReader",
141                                                     "|xns": "Roo.data",
142                                                     "id": "id",
143                                                     "root": "data",
144                                                     "totalProperty": "total",
145                                                     "|fields": "[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"location_name\",\"type\":\"string\"}]"
146                                                 }
147                                             ]
148                                         }
149                                     ]
150                                 },
151                                 {
152                                     "listeners": {
153                                         "|select": "function (combo, record, index)\n{\n  _this.grid.footer.onClick('first');\n}",
154                                         "|render": "function (_self)\n{\n  _this.postedCombo = _self;\n}"
155                                     },
156                                     "allowBlank": false,
157                                     "displayField": "title",
158                                     "editable": false,
159                                     "emptyText": "Select Action",
160                                     "forceSelection": true,
161                                     "listWidth": 300,
162                                     "loadingText": "Searching...",
163                                     "minChars": 2,
164                                     "name": "action",
165                                     "pageSize": 20,
166                                     "qtip": "Select Action",
167                                     "selectOnFocus": true,
168                                     "tpl": "<div class=\"x-grid-cell-text x-btn button\"><b>{title}</b> </div>",
169                                     "triggerAction": "all",
170                                     "typeAhead": true,
171                                     "value": "ALL",
172                                     "valueField": "code",
173                                     "width": 150,
174                                     "xtype": "ComboBox",
175                                     "|xns": "Roo.form",
176                                     "items": [
177                                         {
178                                             "*prop": "store",
179                                             "isLocal": true,
180                                             "xtype": "SimpleStore",
181                                             "|data": "(function() { \n    var ret = [\n        [ 'ALL', 'All Transactions' ],\n        [ 'UNPOSTED', 'Unposted' ],\n        [ 'POSTED', 'Posted' ],\n        [ 'VOIDED', 'Voided' ],\n        [ '--', '-----------------' ]    \n    ];\n    var c = baseURL.split('/').pop().split('.').shift();     \n    Roo.each(uiConfig.xtuple_offices, function(o) {\n        if (o == c) {\n            return;\n        }\n        ret.push( [ 'office-' + o,    \"Transfers from \" +   Pman.Xtuple.offices[o] ] );\n\n    });\n    \n    return ret;\n    \n    \n})()",
182                                             "|fields": "[ 'code', 'title' ]",
183                                             "|xns": "Roo.data"
184                                         }
185                                     ]
186                                 },
187                                 {
188                                     "listeners": {
189                                         "render": "function (_self)\n{\n    _this.dateSel = _self;\n}",
190                                         "select": "function (combo, date)\n{\n    _this.grid.footer.onClick('first');\n}"
191                                     },
192                                     "allowBlank": true,
193                                     "fieldLabel": "Date",
194                                     "format": "Y-m-d",
195                                     "width": 150,
196                                     "xtype": "DateField",
197                                     "|xns": "Roo.form"
198                                 },
199                                 {
200                                     "listeners": {
201                                         "|click": "function (_self, e)\n{\n_this.grid.footer.onClick('first');\n}"
202                                     },
203                                     "cls": "x-btn-icon",
204                                     "xtype": "Button",
205                                     "|icon": "rootURL + '/Pman/templates/images/search.gif'",
206                                     "|xns": "Roo.Toolbar"
207                                 },
208                                 {
209                                     "listeners": {
210                                         "|click": "function (_self, e)\n{\n    _this.searchBox.setValue('');\n    \n    _this.locCombo.setValue(''); \n\n    \n    _this.grid.footer.onClick('first');\n}"
211                                     },
212                                     "cls": "x-btn-icon",
213                                     "xtype": "Button",
214                                     "|icon": "rootURL + '/Pman/templates/images/edit-clear.gif'",
215                                     "|xns": "Roo.Toolbar"
216                                 },
217                                 {
218                                     "|xns": "Roo.Toolbar",
219                                     "xtype": "Fill"
220                                 },
221                                 {
222                                     "listeners": {
223                                         "|click": "function()\n{\n    \n     var sel = _this.postedCombo.getValue();\n     if (sel.match(/^office-/)) {\n        Roo.Msg.alert('Error', \"You can create transfers for another office\");\n        return;\n     }\n    \n    var s = _this.grid.selModel.getSelected();\n    if (!s) {\n        Roo.MessageBox.alert(\"Error\", \"Select a row to copy\");\n        return;\n    }\n    \n    new Pman.Request({\n        url : baseURL + '/Roo/invhist_transfer',\n        method : 'POST',\n        mask: 'Processing',\n        timeout : 1200000, //20 minutes...! - big xfer should be 10mins.\n        params : {\n            invhist_transfer_id : s.data.invhist_transfer_id,\n            _copy : 1\n        },\n        success : function () \n        {\n            _this.grid.footer.onClick('refresh');\n        }\n    });\n    \n}\n"
224                                     },
225                                     "cls": "x-btn-text-icon",
226                                     "text": "Copy Transfer",
227                                     "xtype": "Button",
228                                     "|icon": "Roo.rootURL + 'images/default/dd/drop-add.gif'",
229                                     "|xns": "Roo.Toolbar"
230                                 },
231                                 {
232                                     "|xns": "Roo.Toolbar",
233                                     "xtype": "Separator"
234                                 },
235                                 {
236                                     "listeners": {
237                                         "|click": "function()\n{\n    \n     var sel = _this.postedCombo.getValue();\n     if (sel.match(/^office-/)) {\n        Roo.Msg.alert('Error', \"You can create transfers for another office\");\n        return;\n     }\n    \n    if (!_this.dialog) return;\n    _this.dialog.show( { id : 0, _roo_office : baseURL.split('/').pop().split('.').shift() } , function() {\n        _this.grid.footer.onClick('first');\n   }); \n}\n"
238                                     },
239                                     "cls": "x-btn-text-icon",
240                                     "text": "Add",
241                                     "xtype": "Button",
242                                     "|icon": "Roo.rootURL + 'images/default/dd/drop-add.gif'",
243                                     "|xns": "Roo.Toolbar"
244                                 },
245                                 {
246                                     "|xns": "Roo.Toolbar",
247                                     "xtype": "Separator"
248                                 },
249                                 {
250                                     "listeners": {
251                                         "|click": "function()\n{\n    \n     var sel = _this.postedCombo.getValue();\n     if (sel.match(/^office-/)) {\n        Roo.Msg.alert('Error', 'You can not create reversals of transfer from another office');\n        return;\n     }\n     \n    \n    var s = _this.grid.getSelectionModel().getSelected();\n    if(!s){\n        Roo.Msg.alert('Error', 'Please select a row!');\n        return;\n    }\n    Roo.log(s);\n    if(s.data.cust_to_internalcompany.length > 0){\n        Roo.Msg.confirm(\"Comfirm\", \"Are you sure? <br/>\" + \n            \"This will create a transfer in the other company dragon, you will need to log to that company and post for it to happen.<br/>\" +\n            \"Otherwise, it just creates a transfer, and then opens the dialog to edit it.\", \n            function(r) {\n                if (r != 'yes') {\n                    return;\n                }\n               \n               Roo.Msg.alert('Warnning', 'Sorry, it is comming soon !!');\n            }\n        );\n        \n        return;\n    }\n    \n    \n    Roo.Msg.confirm(\"Comfirm\", \"Are you sure? <br/>\" + \n        \"You can void a transfer, however if you need to reverse a transfer at a different date press 'yes', and a new transfer will be created.\", \n        function(r) {\n            if (r != 'yes') {\n                return;\n            }\n            var data = {\n                invhist_transfer_transdate : new Date(),\n                invhist_transfer_arrivaldate : new Date(),\n                invhist_transfer_to : s.data.invhist_transfer_from_location_id,\n                invhist_transfer_to_location_descrip : s.data.invhist_transfer_from_location_descrip,\n                invhist_transfer_from : s.data.invhist_transfer_to_location_id,\n                invhist_transfer_from_location_descrip : s.data.invhist_transfer_to_location_descrip,\n                invhist_transfer_price : s.data.invhist_transfer_price,\n                invhist_transfer_descrip : s.data.invhist_transfer_descrip,\n                _createReverse : s.data.invhist_transfer_id\n                \n            };\n           _this.dialog.show( data, function() {\n                _this.grid.footer.onClick('first');\n            }); \n           \n        }\n    );\n    return;\n   \n}\n"
252                                     },
253                                     "cls": "x-btn-text-icon",
254                                     "text": "Create Reverse Transfer",
255                                     "xtype": "Button",
256                                     "|icon": "Roo.rootURL + 'images/default/dd/drop-add.gif'",
257                                     "|xns": "Roo.Toolbar"
258                                 },
259                                 {
260                                     "|xns": "Roo.Toolbar",
261                                     "xtype": "Separator"
262                                 },
263                                 {
264                                     "listeners": {
265                                         "|click": "function()\n{\n      var sel = _this.postedCombo.getValue();\n      if (sel.match(/^office-/)) {\n        Roo.Msg.alert('Error', \"You can not Post transfer from another office\");\n        return;\n     }\n     var s = _this.grid.selModel.getSelected();\n    if (!s) {\n        Roo.MessageBox.alert(\"Error\", \"Select a row to post\");\n        return;\n    }\n    \n    if(s.data.invhist_transfer_void){\n        Roo.MessageBox.alert(\"Error\", \"You can not post a voided transfer\");\n        return;\n    }\n    \n    var msg = \"Posting\";\n    \n    if (s.data.cust_from_internalcompany.length || s.data.cust_to_internalcompany.length) {\n        msg += \" Cross company transfer - large orders may take some time, so do not cancel or reload\";\n    }\n    \n    \n    new Pman.Request({\n        url : baseURL + '/Roo/invhist_transfer',\n        method : 'POST',\n        mask: msg,\n        timeout : 1200000, //20 minutes...! - big xfer should be 10mins.\n        params : {\n            invhist_transfer_id : s.data.invhist_transfer_id,\n            _post : 1\n        },\n        success : function () \n        {\n            _this.grid.footer.onClick('refresh');\n        }\n    });\n    \n}\n        "
266                                     },
267                                     "cls": "x-btn-text-icon",
268                                     "text": "Post",
269                                     "xtype": "Button",
270                                     "|icon": "rootURL + '/Pman/templates/images/mail-close.gif'",
271                                     "|xns": "Roo.Toolbar"
272                                 },
273                                 {
274                                     "|xns": "Roo.Toolbar",
275                                     "xtype": "Separator"
276                                 },
277                                 {
278                                     "listeners": {
279                                         "|click": "function()\n{\n       var sel = _this.postedCombo.getValue();\n       if (sel.match(/^office-/)) {\n        Roo.Msg.alert('Error', \"You can not Post transfer from coid office\");\n        return;\n     }\n    \n    var s = _this.grid.selModel.getSelected();\n    if (!s) {\n        Roo.MessageBox.alert(\"Error\", \"Select a row to void\");\n        return;\n    }\n    \n    var voidposted = function(){\n        new Pman.Request({\n            url : baseURL + '/Roo/invhist_transfer',\n            method : 'POST',\n            mask : \"Voiding\",\n            timeout : 90000,\n            params : {\n                invhist_transfer_id : s.data.invhist_transfer_id,\n                _void : 1\n            },\n            success : function () \n            {\n                _this.grid.footer.onClick('refresh');\n            }\n        });\n    }\n    \n    var voidunposted = function(){\n        new Pman.Request({\n            url : baseURL + '/Roo/invhist_transfer',\n            method : 'POST',\n            mask : \"Voiding\",\n            params : {\n                invhist_transfer_id : s.data.invhist_transfer_id,\n                invhist_transfer_void : 1\n            },\n            success : function () \n            {\n                _this.grid.footer.onClick('refresh');\n            }\n        });\n    }\n    \n    \n    var posted = s.data.invhist_transfer_posted;\n    \n    Roo.MessageBox.confirm(\"Confirm\", \"Are you sure you want to void that\", \n        function(r) {\n            if (r != 'yes') {\n                return;\n            }\n            if(posted){\n                voidposted();\n                return;\n            }       \n            voidunposted();\n        }\n    )\n    \n}\n        "
280                                     },
281                                     "cls": "x-btn-text-icon",
282                                     "text": "Void",
283                                     "xtype": "Button",
284                                     "|icon": "rootURL + '/Pman/templates/images/trash.gif'",
285                                     "|xns": "Roo.Toolbar"
286                                 }
287                             ]
288                         },
289                         {
290                             "*prop": "colModel[]",
291                             "dataIndex": "invhist_transfer_posted",
292                             "header": "Posted",
293                             "width": 75,
294                             "xtype": "ColumnModel",
295                             "|renderer": "function(v) {  \n    var state = v * 1 > 0 ?  '-checked' : '';\n\n    return '<img class=\"x-grid-check-icon' + state + '\" src=\"' + Roo.BLANK_IMAGE_URL + '\"/>';\n                \n }",
296                             "|xns": "Roo.grid"
297                         },
298                         {
299                             "*prop": "colModel[]",
300                             "dataIndex": "invhist_transfer_transdate",
301                             "header": "Date",
302                             "sortable": true,
303                             "width": 75,
304                             "xtype": "ColumnModel",
305                             "|renderer": "function(v) { \n\n    return String.format('{0}', v ? Date.parseDate(v.split(' ').shift(),'Y-m-d').format('d/M/Y') : '');\n }",
306                             "|xns": "Roo.grid"
307                         },
308                         {
309                             "*prop": "colModel[]",
310                             "dataIndex": "invhist_transfer_arrivaldate",
311                             "header": "Arrival",
312                             "sortable": true,
313                             "width": 75,
314                             "xtype": "ColumnModel",
315                             "|renderer": "function(v) { \n\n    return String.format('{0}', v ? Date.parseDate(v.split(' ').shift(),'Y-m-d').format('d/M/Y') : '');\n }",
316                             "|xns": "Roo.grid"
317                         },
318                         {
319                             "*prop": "colModel[]",
320                             "dataIndex": "invhist_transfer_number",
321                             "header": "reference#",
322                             "sortable": true,
323                             "width": 100,
324                             "xtype": "ColumnModel",
325                             "|renderer": "function(v,x,r) { \n\n     var sel = _this.postedCombo.getValue();\n      var p = baseURL.split('/').pop().split('.').shift().toUpperCase();;\n    if (sel.match(/^office-/)) {\n       p = sel.split('-').pop().toUpperCase();\n     }\n    \n    return String.format(r.data.invhist_transfer_void ? '<s>{0}</s>' : '{0}', p+':'+v); \n    \n}",
326                             "|xns": "Roo.grid"
327                         },
328                         {
329                             "*prop": "colModel[]",
330                             "dataIndex": "invhist_transfer_from_location_name",
331                             "header": "From",
332                             "sortable": true,
333                             "width": 150,
334                             "xtype": "ColumnModel",
335                             "|renderer": "function(v,x,r) { \n\n    var lv = _this.locCombo.getValue();\n     var fmt = lv == r.data.invhist_transfer_from   ? '<B>{0}</B>' : '{0}';\n     if (r.data.cust_from_internalcompany.length) {\n        fmt = '<span style=\"color:red\">[Intercompany {1}] ' + fmt + '</span>';\n     }\n     \n    return String.format(fmt, v,r.data.cust_from_internalcompany );  \n}",
336                             "|xns": "Roo.grid"
337                         },
338                         {
339                             "*prop": "colModel[]",
340                             "dataIndex": "invhist_transfer_to_location_name",
341                             "header": "To",
342                             "sortable": true,
343                             "width": 150,
344                             "xtype": "ColumnModel",
345                             "|renderer": "function(v,x,r) { \n\n    var lv = _this.locCombo.getValue();\n    var fmt = lv == r.data.invhist_transfer_to   ? '<B>{0}</B>' : '{0}';\n    if (r.data.cust_to_internalcompany.length) {\n        fmt = '<span style=\"color:red\">[Intercompany {1}] ' + fmt + '</span>';\n    }\n    \n    return String.format(fmt, v, r.data.cust_to_internalcompany); \n}",
346                             "|xns": "Roo.grid"
347                         },
348                         {
349                             "*prop": "colModel[]",
350                             "dataIndex": "qty",
351                             "header": "Quantity Moved",
352                             "width": 100,
353                             "xtype": "ColumnModel",
354                             "|renderer": "function(v,x,r) \n{\n    if(\n        r.data.cust_to_internalcompany.length \n        || \n        (r.data.invhist_transfer_void && r.data.moved_qty == 0)\n        ||\n        (!r.data.invhist_transfer_void && !r.data.invhist_transfer_posted)\n        ){\n        return String.format('{0}', v); \n    }\n    \n    var diff = v * 1 - r.data.moved_qty * 1;\n    var flag =   ''\n    \n    if(diff != 0){\n        flag =  '<span style=\"color:red\"> ({1}) </span>'\n    }\n\n    return String.format('{0}' + flag, v, r.data.moved_qty);         \n\n    \n}",
355                             "|xns": "Roo.grid"
356                         },
357                         {
358                             "*prop": "colModel[]",
359                             "dataIndex": "invhist_transfer_salesrep_id_salesrep_name",
360                             "header": "Sales Rep",
361                             "width": 100,
362                             "xtype": "ColumnModel",
363                             "|renderer": "function(v) { return String.format('{0}', v); }",
364                             "|xns": "Roo.grid"
365                         },
366                         {
367                             "*prop": "colModel[]",
368                             "dataIndex": "invhist_transfer_descrip",
369                             "header": "Notes",
370                             "width": 200,
371                             "xtype": "ColumnModel",
372                             "|renderer": "function(v) { return String.format('{0}', v); }",
373                             "|xns": "Roo.grid"
374                         }
375                     ]
376                 }
377             ]
378         }
379     ],
380     "permname": "",
381     "modOrder": "700"
382 }