Ext.util.Sorter.prototype.defaultSorterFn=function(d, c) {
var b = this, a = b.transform, g = b.getRoot(d)[b.property], e = b.getRoot(c)[b.property];
if (a) {
g = a(g);
e = a(e)
}
if (typeof(g) == "string") {
return g.localeCompare(e);
}
return g > e ? 1 : (g < e ? -1 : 0)
};
Ext.define('erp.view.common.editorColumn.GridPanel',{
extend: 'Ext.grid.Panel',
alias: 'widget.erpEditorColumnGridPanel',
id: 'editorColumnGridPanel',
emptyText : $I18N.common.grid.emptyText,
columnLines : true,
autoScroll : true,
store: [],
columns: [],
GridUtil: Ext.create('erp.util.GridUtil'),
BaseUtil: Ext.create('erp.util.BaseUtil'),
RenderUtil: Ext.create('erp.util.RenderUtil'),
plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
}), Ext.create('erp.view.core.plugin.CopyPasteMenu')],
bodyStyle:'background-color:#f1f1f1;',
multiselected: new Array(),
features : [Ext.create('Ext.grid.feature.Grouping',{
groupHeaderTpl: '{name} (Count:{rows.length})'
})],
selModel: Ext.create('Ext.selection.CheckboxModel',{
ignoreRightMouseSelection : false,
checkOnly: true,
listeners:{
selectionchange:function(selectionModel, selected, options){
}
},
getEditor: function(){
return null;
}
}),
caller: null,
condition: null,
initComponent : function(){
// 额外的plugin
if(this.pluginConfig)
this.plugins = Ext.Array.merge(this.plugins, this.pluginConfig);
this.getGridColumnsAndStore(this.condition || condition);
this.addEvents({
storeloaded: true
});
this.callParent(arguments);
},
getEffectData: function(){
var grid = this;
var items = grid.selModel.getSelection();
Ext.each(items, function(item, index){
if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
grid.multiselected.push(item);
}
});
var records = this.unique(grid.multiselected);
if(records.length > 0){
var data = new Array();
Ext.each(records, function(record, index){
if((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
&& this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0)){
var o = new Object();
if(grid.keyField){
o[grid.keyField] = record.data[grid.keyField];
}
if(grid.necessaryFields){
Ext.each(grid.necessaryFields, function(f, index){
var v = record.data[f];
if(Ext.isDate(v)){
v = Ext.Date.toString(v);
}
o[f] = v;
});
}
data.push(o);
}
});
return data;
}
},
unique: function(items) {
var d = new Object();
Ext.Array.each(items, function(item){
d[item.id] = item;
});
return Ext.Object.getValues(d);
},
updateAction: function(url){
var grid = this, btn = parent.Ext.getCmp('win').down('button[name=confirm]');
var data = grid.getEffectData();
if(data != null){
grid.setLoading(true);
Ext.Ajax.request({
url : basePath + url,
params: {
caller: caller,
data: Ext.encode(data)
},
method : 'post',
async: false,
callback : function(options,success,response){
grid.setLoading(false);
btn.setDisabled(false);
grid.multiselected = new Array();
var localJson = new Ext.decode(response.responseText);
if(localJson.exceptionInfo){
showError(localJson.exceptionInfo);
return "";
}
if(localJson.success){
if(localJson.log){
showMessage("提示", localJson.log);
}
Ext.Msg.alert("提示", "处理成功!", function(){
window.location.href = window.location.href;
});
}
}
});
} else {
btn.setDisabled(false);
}
},
reloadData: function(condition, callback) {
var grid = this;
grid.setLoading(true);
Ext.Ajax.request({
url : basePath + 'common/singleGridPanel.action',
params: {
caller: this.caller || caller,
condition: condition
},
method : 'post',
callback : function(opt, s, resp){
grid.setLoading(false);
var res = new Ext.decode(resp.responseText);
callback && callback.call(null, res.data ?
Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']')) : []);
}
});
},
getGridColumnsAndStore: function(condition){
var grid = this;
grid.setLoading(true);
Ext.Ajax.request({//拿到grid的columns
url : basePath + 'common/singleGridPanel.action',
params: {
caller: this.caller || caller,
condition: condition
},
method : 'post',
async: false,
callback : function(options,success,response){
grid.setLoading(false);
var res = new Ext.decode(response.responseText);
if(res.exceptionInfo){
showError(res.exceptionInfo);return;
}
var data = [];
if(!res.data || res.data.length == 2){
grid.GridUtil.add10EmptyData(grid.detno, data);
grid.GridUtil.add10EmptyData(grid.detno, data);
} else {
data = Ext.decode(res.data.replace(/,}/g, '}').replace(/,]/g, ']'));
}
if(grid.columns && grid.columns.length > 2){
grid.store.loadData(data);
if(grid.normalGrid){
grid.normalGrid.on('scrollershow',function(scroller){
if (scroller && scroller.scrollEl) {
scroller.clearManagedListeners();
scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller);
}
});
}
grid.fireEvent('scrollershow', grid.verticalScroller, 'vertical');
} else {
if(res.columns){
Ext.each(res.columns, function(column, y){
//render
if(!column.haveRendered && column.renderer != null && column.renderer != ""){
var renderName = column.renderer;
if(contains(column.renderer, ':', true)){
var args = new Array();
Ext.each(column.renderer.split(':'), function(a, index){
if(index == 0){
renderName = a;
} else {
args.push(a);
}
});
if(!grid.RenderUtil.args[renderName]){
grid.RenderUtil.args[renderName] = new Object();
}
grid.RenderUtil.args[renderName][column.dataIndex] = args;
}
column.renderer = grid.RenderUtil[renderName];
column.haveRendered = true;
}
//logictype
var logic = column.logic;
if(logic != null){
if(logic == 'detno'){
grid.detno = column.dataIndex;
} else if(logic == 'keyField'){
grid.keyField = column.dataIndex;
} else if(logic == 'mainField'){
grid.mainField = column.dataIndex;
} else if(logic == 'necessaryField'){
grid.necessaryField = column.dataIndex;
if(!grid.necessaryFields){
grid.necessaryFields = new Array();
}
grid.necessaryFields.push(column.dataIndex);
if(!column.haveRendered){
column.renderer = function(val, meta, record, x, y, store, view){
var c = this.columns[y];
if(val != null && val.toString().trim() != ''){
if(c.xtype == 'datecolumn'){
val = Ext.Date.format(val, 'Y-m-d');
}
return val;
} else {
if(c.xtype == 'datecolumn'){
val = '';
}
return '
' +
'' + val + '';
}
};
}
} else if(logic == 'groupField'){
grid.groupField = column.dataIndex;
}
}
/**
*****如果有固定咧,grid不能分组*****
*/
});
var store = Ext.create('Ext.data.Store', {
storeId: 'gridStore',
fields: res.fields,
data: data,
groupField: grid.groupField
});
if(grid.selModel.views == null){
grid.selModel.views = [];
}
if(res.dbfinds.length > 0){
grid.dbfinds = res.dbfinds;
}
grid.columns = res.columns;
if(grid.autoRowNumber) {
Ext.Array.insert(grid.columns, 0, [{xtype: 'rownumberer', width: 35, locked: true, cls: 'x-grid-header-1'}]);
}
grid.store = store;
//grid.fireEvent('storeloaded', grid, store);
}
}
}
});
},
viewConfig: {// 显示分仓库库存
listeners: {
render: function(view) {
var prodfield = Ext.getCmp('editorColumnGridPanel').getProdField();
if(prodfield && !view.tip) {
view.tip = Ext.create('Ext.tip.ToolTip', {
target: view.el,
delegate: view.itemSelector,
trackMouse: true,
renderTo: Ext.getBody(),
listeners: {
beforeshow: function updateTipBody(tip) {
var record = view.getRecord(tip.triggerElement),
grid = view.ownerCt.ownerCt;
if(record && grid.productwh) {
var c = record.get(prodfield), pws = new Array();
Ext.each(grid.productwh, function(d){
if(d.PW_PRODCODE == c) {
pws.push(d);
}
});
tip.down('grid').setTitle(c);
tip.down('grid').store.loadData(pws);
}
}
},
items: [{
xtype: 'grid',
width: 300,
columns: [{
text: '仓库编号',
cls: 'x-grid-header-1',
dataIndex: 'PW_WHCODE',
width: 80
},{
text: '仓库名称',
cls: 'x-grid-header-1',
dataIndex: 'WH_DESCRIPTION',
width: 120
},{
text: '库存',
cls: 'x-grid-header-1',
xtype: 'numbercolumn',
align: 'right',
dataIndex: 'PW_ONHAND',
width: 90
}],
columnLines: true,
title: '物料分仓库存',
store: new Ext.data.Store({
fields: ['PW_WHCODE', 'WH_DESCRIPTION', 'PW_ONHAND'],
data: [{}]
})
}]
});
}
}
}
},
getProdField : function() {
var f = null;
switch (caller){
case 'SendNotify!ToProdIN!Deal' ://通知单转出货
f = 'snd_prodcode';
break;
/*case 'Sale!ToAccept!Deal' ://订单转出货
f = 'sd_prodcode';
break;*/
}
return f;
}
});