/**
*条码拆分
*/
Ext.define('erp.view.core.button.CombiningAndBreaking', {
extend : 'Ext.Button',
alias : 'widget.erpCombiningAndBreakingButton',
iconCls : 'x-button-icon-check',
cls : 'x-btn-gray',
id : 'CombiningAndBreaking',
text : $I18N.common.button.erpCombiningAndBreakingButton,
style : {
marginLeft : '10px'
},
width:110,
FormUtil: Ext.create('erp.util.FormUtil'),
GridUtil: Ext.create('erp.util.GridUtil'),
initComponent : function() {
this.callParent(arguments);
},
handler: function(btn){
var me = this;
var bool = false;
var or_barcode;
var or_baremain;
var grid = Ext.getCmp('batchDealGridPanel');
var items = grid.selModel.getSelection();
var count = items.length;
var id ;
var win = new Ext.window.Window({
id: 'wincab',
height: '70%',
width: '70%',
maximizable: false,
title:'条码拆分',
buttonAlign: 'center',
layout: 'column',
bodyStyle:"background-color:#F5F5F5;",
items: [{
xtype: 'gridpanel',
id: 'grid1',
anchor : '100% 70%',
columnWidth:1,
columns: [
{
style :"text-align:center",
text: 'ID',
width: 0,
hidden : true,
dataIndex: 'bar_id',
ignore: true,
},{
style :"text-align:center",
text: '条码',
flex : 7,
id:'bar_code1',
dataIndex: 'bar_code',
logic:"necessaryField",
editor: {
xtype: "textfield",
hideTrigger: true,
store: null,
queryMode: "local"
}
},{
style :"text-align:center",
text: '数量',
flex : 3,
dataIndex: 'bar_remain',
xtype: 'numbercolumn',
align: "left",
renderer : function(val, meta, record) {
var v1 = record.get('bar_remain');
var v2 = record.get('bar_code');
var v;
if (v2 != null && v2 !='' && v1 == 0 ) {
v = 0;
} else{
v=v1;
}
return v;
}
}],
GridUtil: Ext.create('erp.util.GridUtil'),
listeners:{
edit:function(ed,d){
var grid = Ext.getCmp('grid1');
var sum = 0;
if(d.field == 'bar_code'){
if(d.value != null && d.value != ''){
me.FormUtil.getFieldValue("barcode","nvl(max(bar_remain),0)","bar_code='"+d.value+"' and bar_status <> -2 and bar_status <> -1","bar_remain",d.record);
me.add1EmptyItems(grid);
var items = grid.getStore().data.items;//获取store里面的数据
Ext.each(items, function(item) {
sum+= item.data['bar_remain'];
});
Ext.getCmp("barNumber").setValue(sum);
}
}
},
},
dbfinds: [],
columnLines: true,
plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
}),
Ext.create('erp.view.core.plugin.CopyPasteMenu')],
store: new Ext.data.Store({
fields: ['bar_id', 'bar_code', 'bar_remain'],
data: [{},{}]
}),
onGridItemClick: function(selModel, record){// grid行选择
this.GridUtil.onGridItemClick(selModel, record);
},
/*necessaryFields:['bar_code', 'bar_remain','bar_id'],*/
},
{
fieldLabel:"需拆分数量",
labelStyle:"color:red;",
labelWidth:80,
xtype:"textfield",
minValue: 0,
allowBlank:false,
columnWidth:.45,
name : 'barNumber',
id:'barNumber',
autoStripChars:true,
hideTrigger:true,
margin:'10px 0px 5px 0px'
},{
xtype: 'gridpanel',
id: 'grid',
anchor : '100% 70%',
columnWidth:1,
multiSelect: true,
multiselected: [],
forceFit : true,
checkOnly:true,
columns: [
{
style :"text-align:center",
text: 'ID',
width: 0,
hidden : true,
dataIndex: 'bar_id',
ignore: true,
},{
style :"text-align:center",
text: '新条码',
flex : 7,
dataIndex: 'bar_code',
logic:"necessaryField",
editor: {
xtype: "displayfield",
hideTrigger: true,
store: null,
queryMode: "local"
}
},{
style :"text-align:center",
text: '数量',
logic:"necessaryField",
flex : 3,
dataIndex: 'bar_remain',
editor: {
xtype: "displayfield",
hideTrigger: true,
store: null,
queryMode: "local"
},
xtype: 'numbercolumn',
align: "left",
format: ""
}],
GridUtil: Ext.create('erp.util.GridUtil'),
listeners:{
beforeedit:function(editor, e, eOpts){
return false;//不可编辑
}
},
selType:'checkboxmodel',
dbfinds: [],
columnLines: true,
plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 10
}),
Ext.create('erp.view.core.plugin.CopyPasteMenu')],
store: new Ext.data.Store({
fields: ['bar_id', 'bar_code', 'bar_remain'],
data: []
}),
onGridItemClick: function(selModel, record){// grid行选择
this.GridUtil.onGridItemClick(selModel, record);
},
/*necessaryFields:['bar_code', 'bar_remain','bar_id'],*/
}],
buttons : [{
text : '确定',
id :'confirmcab',
handler : function(btn) {
var barArr = new Array(); //getComponent
var remains = 0;
var count = 0; //上面form的数据
var number = Ext.getCmp('barNumber').value;
if(number == null || number ==''){
Ext.Msg.alert('温馨提示',
'请输入拆分数量');
return;
}
var grid = Ext.getCmp('grid1');
var items = grid.getStore().data.items;
Ext.each(items, function(item, index){
if(this.data['bar_remain'] == '0'){
barArr.push(""+items[index].data['bar_code']+"");
}
});
if(barArr != null && barArr != ''){
showError("条码"+barArr +"不存在或者状态无效");
return;
}
Ext.each(items, function(item, index){
if(this.data['bar_code'] != null && this.data['bar_code'] != ''
&& this.data['bar_remain'] != '0' && this.data['bar_remain'] != 0){
barArr.push("'"+items[index].data['bar_code']+"'");
remains +=items[index].data['bar_remain'];
count++;
}
});
var re=/^\d+(,\d+)*$/;
var sum=0;
number=number.replace(/,/ig,',');
if(count ==1){
var count1= number.length - number.replace(',',"").length;
if(count1 == 0 && (number == remains)){
Ext.Msg.alert('温馨提示',
'不允许拆将条码拆分为本身');
return;
}
}
if(re.test(number)){
var str = new Array();
str = number.split( "," );
for (var i = 0; i < str.length; i++ )
{
sum+=parseFloat(str[i]);
}}else{
boolb = false;
showError("请输入正确的拆分数量,例如20,30,40");
return;
}
if (sum <= 0) {
Ext.Msg.alert('温馨提示',
'拆分数量必须大于0');
return;
}else if(sum != remains){
Ext.Msg.alert('温馨提示',
'需拆分数量之和必须等于条码原数量之和');
return;
}
//暂时去掉
/*if(remains>sum){
number = number+','+(remains-sum);
}*/
if (barArr) {
me.combiningAndBreaking(barArr,remains,number);
}
}
},{
xtype: 'checkboxfield',
name: 'autoPrint',
id:'autoPrint',
boxLabel: '自动打印条码',
style:'margin-left:50px',
checked:true
},{
text : '打印新条码',
id : 'printNew',
iconCls: 'x-button-icon-print',
disabled : true,
handler : function(btn) {
var me = this;
caller = 'Barcode!BaPrint';
me.idS = '';
var lps_Barcaller = 'Barcode!Print';
var bool = false;
var grid = Ext.getCmp('grid');
var items = grid.selModel.getSelection();
var idArray = [];
Ext.each(items, function(item, index){
if(this.data['bar_id'] != null && this.data['bar_id'] != ''
&& this.data['bar_id'] != '0' && this.data['bar_id'] != 0){
bool = true;
idArray.push(this.data['bar_id']);
}
});
if(bool){
var idS = idArray.toString();
//me.print(idS,lps_Barcaller);
me.idS = idS;
me.zplPrint(lps_Barcaller);
}else{
showError("没有需要打印的行,请先拆分出新条码");
}
},
zplPrint:function(caller){//zpl打印语句
// 获取选择打印文件,用户选择分辨率,和打印机
var me = this;
if(!me.window){
setup_web_print(function(printers,selected_printer){
me.window = Ext.create('Ext.window.Window', {
autoShow: true,
title: '选择打印模板',
width: 400,
height: 300,
layout: 'anchor',
id :'template-win2',
closeAction:'hide',
items: [{
anchor:'100% 100%',
xtype:'form',
buttonAlign : 'center',
items:[{
xtype: 'combo',
id: 'printers',
fieldLabel: '打印机列表',
store: Ext.create('Ext.data.Store', {
autoLoad: true,
fields: ['display', 'value'],
data:printers
}),
queryMode: 'local',
displayField: 'display',
valueField: 'value',
width:361,
allowBlank:false,
value:selected_printer.uid,
selectOnFocus:true,//用户不能自己输入,只能选择列表中有的记录
style:'margin-left:15px;margin-top:15px;'
},{
xtype: 'combo',
id: 'dpi',
fieldLabel: '打印机分辨率',
style:'margin-left:15px;margin-top:15px;',
store: Ext.create('Ext.data.Store', {
fields: ['display', 'value'],
data : [{"display": '203dpi', "value": '203'},
{"display": '300dpi', "value": '300'},
{"display": '600dpi', "value": '600'},
{"display": '1200dpi', "value": '1200'}]
}),
displayField: 'display',
valueField: 'value',
queryMode: 'local',
value:resolutionCookie||'203',
width:361,
allowBlank:false,
selectOnFocus:true//用户不能自己输入,只能选择列表中有的记录
}]
}],
buttonAlign: 'center',
buttons: [{
text: '确定',
handler: function(b) {
var printers = Ext.getCmp('printers');
var dpi = Ext.getCmp('dpi');
if(printers && printers.value!= null){
me.zebraPrint(caller,printers.value,dpi.value);
b.ownerCt.ownerCt.close();
}else{
alert("请选择打印机 ");
}
}
}, {
text: '取消',
handler: function(b) {
b.ownerCt.ownerCt.close();
}
}]
});
});
}else if(me.window.isHidden()){
me.window.show();
}
},
zebraPrint:function(caller,printer,dpi){
var me = this;
var params = new Object();
params['condition'] = 'bar_id in ('+me.idS +")";
sendData(caller,printer,dpi,params);
}
},
{
text : '取消',
id : 'cancle',
handler : function(btn) {
var win = btn.ownerCt.ownerCt;
win.close();
}
}
],
listeners : {/*
beforerender:function(){
Ext.each(items, function(item, index){
if(this.data['bar_id'] != null && this.data['bar_id'] != ''
&& this.data['bar_id'] != '0' && this.data['bar_id'] != 0){
id = this.data['bar_id'];
or_barcode = this.data['bar_code'];
or_baremain = this.data['bar_remain'];
var barcode = 'barcode'+index;
var bar_remain = 'bar_remain'+index;
Ext.getCmp(barcode).setValue(or_barcode);
Ext.getCmp(bar_remain).setValue(or_baremain);
}
});
var grid = Ext.getCmp("grid");
if(grid.selModel && grid.selModel.views == null){
grid.selModel.views = [];
}
}
*/}
});
win.show();
/*win.on("close",function(){
var grid = Ext.getCmp("batchDealGridPanel");
if(grid){
caller = 'BarcodeStatus!query';
grid.ownerCt.down('form').onQuery();
}
});*/
/* }else{
showError("没有勾选需要拆分的行,请勾选");
}*/
},
combiningAndBreaking: function(ids,remains,number){ //对应id集,总数量,需拆分的数量集合
var me=this;
ids = ids.toString();
me.setLoading(true);
Ext.Ajax.request({
url : basePath +'scm/reserve/combiningAndBreaking.action',
params: {
ids:ids,
total_remain: remains,
every_remain: number
},
method : 'post',
timeout: 360000,
callback : function(options,success,response){
me.setLoading(false);
var res = new Ext.decode(response.responseText);
if(res.success){
var data = res.data;
Ext.MessageBox.alert('提示', '条码拆分成功!',function(){
var ids = new Array();
for(var i= 0;i 0) {//先全选,再筛选后再全选时,无法响应的bug
this.deselectAll(true);
} else {
this.selectAll(true);
this.view.ownerCt.selectall = true;
}
}
}
}),
setLoading : function(b) {
var mask = this.mask;
if (!mask) {
this.mask = mask = new Ext.LoadMask(Ext.getBody(), {
msg : "处理中,请稍后...",
msgCls : 'z-index:10000;'
});
}
if (b)
mask.show();
else
mask.hide();
},
zplPrint:function(caller){//zpl打印语句
// 获取选择打印文件,用户选择分辨率,和打印机
var me = this;
if(!me.window){
setup_web_print(function(printers,selected_printer){
me.window = Ext.create('Ext.window.Window', {
autoShow: true,
title: '选择打印模板',
width: 400,
height: 300,
layout: 'anchor',
id :'template-win3',
closeAction:'hide',
items: [{
anchor:'100% 100%',
xtype:'form',
buttonAlign : 'center',
items:[{
xtype: 'combo',
id: 'printers',
fieldLabel: '打印机列表',
store: Ext.create('Ext.data.Store', {
autoLoad: true,
fields: ['display', 'value'],
data:printers
}),
queryMode: 'local',
displayField: 'display',
valueField: 'value',
width:361,
allowBlank:false,
value:selected_printer.uid,
selectOnFocus:true,//用户不能自己输入,只能选择列表中有的记录
style:'margin-left:15px;margin-top:15px;'
},{
xtype: 'combo',
id: 'dpi',
fieldLabel: '打印机分辨率',
style:'margin-left:15px;margin-top:15px;',
store: Ext.create('Ext.data.Store', {
fields: ['display', 'value'],
data : [{"display": '203dpi', "value": '203'},
{"display": '300dpi', "value": '300'},
{"display": '600dpi', "value": '600'},
{"display": '1200dpi', "value": '1200'}]
}),
displayField: 'display',
valueField: 'value',
queryMode: 'local',
value:resolutionCookie||'203',
width:361,
allowBlank:false,
selectOnFocus:true//用户不能自己输入,只能选择列表中有的记录
}]
}],
buttonAlign: 'center',
buttons: [{
text: '确定',
handler: function(b) {
var printers = Ext.getCmp('printers');
var dpi = Ext.getCmp('dpi');
if(printers && printers.value!= null){
me.zebraPrint(caller,printers.value,dpi.value);
b.ownerCt.ownerCt.close();
}else{
alert("请选择打印机 ");
}
}
}, {
text: '取消',
handler: function(b) {
b.ownerCt.ownerCt.close();
}
}]
});
});
}else if(me.window.isHidden()){
me.window.show();
}
},
zebraPrint:function(caller,printer,dpi){
var me = this;
var params = new Object();
params['condition'] = 'bar_id in ('+me.idS +")";
sendData(caller,printer,dpi,params);
},
loadData: function(value) {
var me = this;
me.getFieldsValues("barcode",
'bar_id, bar_code, bar_remain', "bar_id in (" +value+") order by bar_id desc", [], function(data){
var datas = Ext.JSON.decode(data), _datas = [];
var grid = Ext.getCmp('grid');
if(datas.length > 0) {
var keys = Ext.Object.getKeys(datas[0]);
Ext.Array.each(datas, function(d){
var obj = {};
Ext.Array.each(keys, function(key){
obj[key.toLowerCase()] = d[key];
});
_datas.push(obj);
});
}
store = grid.getStore();
_datas.length > 0 && grid.store.loadData(_datas);
grid.store.each(function(){
this.dirty = true;
});
});
},
getFieldsValues: function(caller, fields, condition, data, fn){
Ext.Ajax.request({
url : basePath + 'common/getFieldsDatas.action',
async: false,
params: {
caller: caller,
fields: fields,
condition: condition
},
method : 'post',
callback : function(options,success,response){
var localJson = new Ext.decode(response.responseText);
if(localJson.exceptionInfo){
showError(localJson.exceptionInfo);return;
}
if(localJson.success){
data = localJson.data;
fn && fn.call(null, localJson.data);
}
}
});
},
add1EmptyItems: function(grid, count, append){
var store = grid.store,
items = store.data.items, arr = new Array();
var detno = grid.detno;
count = count || 1;
append = append === undefined ? true : false;
if(typeof grid.sequenceFn === 'function')
grid.sequenceFn.call(grid, count);
else {
if(detno){
var index = items.length == 0 ? 0 : Number(store.last().get(detno));
for(var i=0;i < count;i++ ){
var o = new Object();
o[detno] = index + i + 1;
arr.push(o);
}
} else {
for(var i=0;i < count;i++ ){
var o = new Object();
arr.push(o);
}
}
store.loadData(arr, append);
var i = 0;
store.each(function(item, x){
if(item.index) {
i = item.index;
} else {
if (i) {
item.index = i++;
} else {
item.index = x;
}
}
});
}
},
});