Ext.define('erp.view.ma.datalimit.SourceWindow', {
extend : 'Ext.window.Window',
alias : 'widget.sourcewindow',
width : '85%',
height :'90%',
layout:'border',
limitId_:null,
title:'
设置权限
',
closeAction : 'destroy',
table:null,
LimitType:null,
initComponent : function() {
var me = this;
Ext.apply(me,{
items:[me.createQueryGrid(),me.createDataGrid()],
dockedItems: [{
xtype: 'toolbar',
dock: 'top',
ui: 'footer',
items: [{
text: '筛选',
itemId:'query',
iconCls:'x-button-icon-query'
},{
text:'选择数据',
itemId:'selectdata',
iconCls:'x-button-icon-execute',
hidden:me.LimitType!='detail'
},{
text:'生成条件',
itemId:'createSql',
iconCls:'x-button-icon-scan',
hidden:me.LimitType=='detail'
}]
}]
});
this.callParent(arguments);
},
createQueryGrid:function(){
var config={
id:'querygrid',
region:'west',
width:'50%',
foreceFit:true,
columnLines:true,
plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1,
listeners: {
beforeedit: function(e){
if(e.field == 'value'){
var record = e.record;
var column = e.column;
var f = record.data['type'];
switch(f){
case 'D':
switch(record.data['relative']){
case 'Between And':
column.setEditor(new erp.view.core.form.FtDateField({
id: f,
name: f
}));break;
default:
column.setEditor(new Ext.form.field.Date({
id: f,
name: f
}));break;
}
break;
case 'S':
switch(record.data['relative']){
case 'Between And':
column.setEditor(new erp.view.core.form.FtField({
id: f,
name: f,
value: e.value
}));break;
default:
column.setEditor(new Ext.form.field.Text({
id: f,
name: f
}));break;
}
break;
case 'N':
switch(record.data['relative']){
case 'Between And':
column.setEditor(new erp.view.core.form.FtNumberField({
id: f,
name: f
}));break;
default:
column.setEditor(new Ext.form.field.Number({
id: f,
name: f
}));break;
}
break;
case 'T':
column.dbfind = record.get('sl_dbfind');
switch(record.data['relative']){
case 'Between And':
column.setEditor(new erp.view.core.form.FtFindField({
id: f,
name: f
}));break;
default:
column.setEditor(new erp.view.core.trigger.DbfindTrigger({
id: f,
name: f
}));break;
}
break;
default:
column.setEditor(null);
}
}
}
}
})],
columns:[{
text:'字段',
dataIndex:'field',
flex:1,
sortable:false,
editor:{
xtype: 'combo',
listConfig:{
maxHeight:180
},
store: Ext.create('Ext.data.Store', {
fields: ['display', 'value','type'],
data :[]
}),
displayField: 'display',
valueField: 'value',
queryMode: 'local',
onTriggerClick:function(trigger){
var me=this,grid=Ext.getCmp('querygrid'),store=this.getStore();
if(store.totalCount<1){
var data=grid.getDataDictionaryData(grid.ownerCt.table);
store.loadData(data);
}
if (!me.readOnly && !me.disabled) {
if (me.isExpanded) {
me.collapse();
} else {
me.expand();
}
me.inputEl.focus();
}
}
},
processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
if (type == 'click' || type == 'dbclick') {
return true;
}
return false;
},
renderer : function(val, meta, record, x, y, store, view) {
if (val) {
var column = view.ownerCt.headerCt.getHeaderAtIndex(y);
if(column && typeof column.getEditor != 'undefined') {
var editor = column.getEditor(record);
if (editor && editor.lastSelection.length > 0) {
var t=editor.lastSelection[0].get('type');
if (record.get('type') != t)
record.set('type', t);
return editor.lastSelection[0].get('display');
}
}
}
return val;
}
},{
text: '关系',
flex: 1,
dataIndex: 'relative',
xtype:'combocolumn',
sortable:false,
editor: {
xtype: 'combo',
store: Ext.create('Ext.data.Store', {
fields: ['display', 'value'],
data : [{"display": '等于', "value": '='},
{"display": '大于', "value": '>'},
{"display": '大于等于', "value": '>='},
{"display": '小于', "value": '<'},
{"display": '小于等于', "value": '<='},
{"display": '不等于', "value": '<>'},
{"display": '介于', "value": 'Between And'},
{"display": '包含', "value": 'like'},
{"display": '不包含', "value": 'not like'},
{"display": '开头是', "value": 'begin like'},
{"display": '开头不是', "value": 'begin not like'},
{"display": '结尾是', "value": 'end like'},
{"display": '结尾不是', "value": 'end not like'}]
}),
displayField: 'display',
valueField: 'value',
queryMode: 'local',
editable: false
},
processEvent : function(type, view, cell, recordIndex, cellIndex, e) {
if (type == 'click' || type == 'dbclick') {
return true;
}
return false;
},
renderer : function(val, meta, record, x, y, store, view) {
var g = view.ownerCt,h = g.columns[y],field=h.field;
if (val && field) {
var t = field.store.findRecord('value', val);
if (t)
return t.get('display');
}else if(record.get('field')){
if (record.get('relative') != "=") record.set('relative',"=");
val="等于";
}
return val;
}
},{
text:'值',
dataIndex:'value',
sortable:false,
flex:1,
renderer: function(val){
if(Ext.isDate(val)){
return Ext.Date.format(val, 'Y-m-d');
}
return val;
}
},{
dataIndex:'type',
flex:0,
width:0
}],
store:Ext.create('Ext.data.Store',{
fields:['field','relative','value','type'],
data:[{},{},{},{},{},{},{},{},{},{},{}]
}),
getDataDictionaryData: function(tablename){
var me = this, grid = Ext.getCmp('querygrid'),data=[];
Ext.Ajax.request({
url : basePath + 'ma/getDataDictionary.action',
async: false,
params: {
table: tablename
},
method : 'post',
callback : function(options,success,response){
var res = new Ext.decode(response.responseText);
if(res.exceptionInfo){
showError(res.exceptionInfo);return;
} else if(res.success) {
data=me.parseDictionary(res.datadictionary);
}
}
});
return data;
},
getCondition: function(){
var condition="",store=this.getStore(),data;
Ext.each(store.data.items, function(d){
data=d.data;
if(data.field && data.relative && data.value){
if(data.relative == 'Between And'){
var v1 = data.value.split('~')[0];
var v2 = data.value.split('~')[1];
if(data.type == 'D'){
if(condition == ''){
condition = '(' + data.field + " BETWEEN to_date('" + v1 + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('"
+ v2 + " 23:59:59','yyyy-MM-dd HH24:mi:ss')" + ') ';
} else {
condition += ' AND (' + data.field + " BETWEEN to_date('" + v1 + " 00:00:00','yyyy-MM-dd HH24:mi:ss') AND to_date('"
+ v2 + " 23:59:59','yyyy-MM-dd HH24:mi:ss')" + ') ';
}
} else if(data.type == 'N'){
if(condition == ''){
condition = '(' + data.field + " BETWEEN " + v1 + ' AND ' + v2 + ') ';
} else {
condition += ' AND (' + data.field + " BETWEEN " + v1 + ' AND ' + v2 + ') ';
}
} else{
if(condition == ''){
condition = '(' + data.field + " BETWEEN '" + v1 + "' AND '" + v2 + "') ";
} else {
condition += ' AND (' + data.field + " BETWEEN '" + v1 + "' AND '" + v2 + "') ";
}
}
} else {
if(data.type == 'D'){
var v = data.value, field = data.field;
if(Ext.isDate(v)) {
v = Ext.Date.format(v, 'Y-m-d');
}
if(data.relative == '<' || data.relative == '<=' || data.relative == '>' || data.relative == '>='){
v = "to_date('" + v + "','yyyy-MM-dd')";
}else {
v = Ext.Date.format(data.value, 'Ymd');
field = "to_char(" + field + ",'yyyymmdd')";
}
if(condition == ''){
condition = '(' + field + data.relative + v + ') ';
} else {
condition += ' AND (' + field + data.relative + v + ') ';
}
} else {
var v = data.value;
if(data.relative == 'like' || data.relative=='not like'){
v = " '%" + data.value + "%'";
}else if(data.relative =='begin like' || data.relative =='begin not like'){
v = " '" + data.value + "%'";
data.relative=data.relative.substring(5);
}else if(data.relative =='end like' || data.relative=='end not like'){
v = " '%" + data.value + "'";
data.relative=data.relative.substring(3);
}else {
v = " '" + data.value + "'";
}
if(condition == ''){
condition = '(' + data.field + " " + data.relative + v + ") ";
} else {
condition += ' AND (' + data.field + " " + data.relative + v + ") ";
}
}
}
}
});
return condition;
},
parseDictionary: function(dictionary) {
var me = this, data = this.data;
var combodata=new Array(),o=null;
Ext.each(dictionary, function(d, index){
o={
value:d.column_name,
display:d.comments
};
if(contains(d.data_type, 'VARCHAR2', true)){
o.type = 'S';
} else if(contains(d.data_type, 'TIMESTAMP', true)){
o.type = 'DT';
} else if(d.ddd_fieldtype == 'DATE'){
o.type = 'D';
} else if(d.ddd_fieldtype == 'NUMBER'){
o.type = 'N';
} else if(d.ddd_fieldtype == 'FLOAT'){
o.type = 'F';
} else {
o.type = 'S';
}
combodata.push(o);
});
return combodata;
}
};
return Ext.create('Ext.grid.Panel',config);
},
createDataGrid:function(){
var me=this;
var config={
id:'datagrid',
region:'center',
columnLines:true,
foreceFit:true,
selModel: Ext.create('Ext.selection.CheckboxModel',{
checkOnly : true,
ignoreRightMouseSelection : false,
getEditor: function(){
return null;
},
onHeaderClick: function(headerCt, header, e) {
if (header.isCheckerHd) {
e.stopEvent();
var isChecked = header.el.hasCls(Ext.baseCSSPrefix + 'grid-hd-checker-on');
if (isChecked && this.getSelection().length > 0) {
this.deselectAll(true);
} else {
this.selectAll(true);
this.view.ownerCt.selectall = true;
}
}
}
}),
columns:[{
text:'代码',
flex:0.5,
dataIndex:'CODE_'
},{
text:'名称',
flex:1,
dataIndex:'DESC_'
}],
store:Ext.create('Ext.data.Store',{
fields:['CODE_','DESC_'],
proxy: {
type: 'ajax',
url : basePath+'/ma/datalimit/getSourceData.action',
extraParams:{
limitId_:me.limitId_
},
reader: {
type: 'json',
root: 'jobs'
}
},
autoLoad: true
})
};
return Ext.create('Ext.grid.Panel',config);
},
setDefaultValue : function(form) {
var me = this;
me.down('textfield[name=name]').setValue(form.title);
if (form.codeField) {
var c = form.down('#' + form.codeField);
if (c) {
me.down('textfield[name=sourcecode]').setValue(c.getValue());
}
var u = new String(window.location.href);
u = u.substr(u.indexOf('jsps'));
me.down('field[name=sourcelink]').setValue(u);
}
if (form.uulistener) {
var t = me.down('fieldcontainer[name=resourcename]');
Ext.each(form.uulistener, function(u){
var f = form.down('#' + u.uu_field);
if(f) {
if(!(u.uu_ftype == 1 && f.value == em_code) && !(u.uu_ftype == 2 && f.value == em_name)) {//排除自己
if(f.value && !t.down('checkbox[boxLabel=' + f.value + ']')) {
t.insert(0, {
xtype : 'checkbox',
name : 'man',
isFormField : false,
checked : true,
boxLabel : f.value
});
}
}
}
});
}
}
});